ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGI5M2ZiN2UuLjk0NmM3ZWMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjUsNiArMjUsNyBAQAogKi5lbGYKICouYmluCiAqLmd6CisqLmJ6MgogKi5sem1hCiAqLnBhdGNoCiAqLmdjbm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3RyYWNlcG9pbnQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay90cmFjZXBvaW50LnRtcGwKaW5kZXggYjA3NTZkMC4uOGJjYTFkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3RyYWNlcG9pbnQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdHJhY2Vwb2ludC50bXBsCkBAIC04Niw0ICs4Niw5IEBACiAhSWluY2x1ZGUvdHJhY2UvZXZlbnRzL2lycS5oCiAgIDwvY2hhcHRlcj4KIAorICA8Y2hhcHRlciBpZD0ic2lnbmFsIj4KKyAgIDx0aXRsZT5TSUdOQUw8L3RpdGxlPgorIUlpbmNsdWRlL3RyYWNlL2V2ZW50cy9zaWduYWwuaAorICA8L2NoYXB0ZXI+CisKIDwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAppbmRleCAxODdiYmYxLi44NjA4ZmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CkBAIC0xLDE4NSArMSwxMCBAQAogQ09ORklHX1JDVV9UUkFDRSBkZWJ1Z2ZzIEZpbGVzIGFuZCBGb3JtYXRzCiAKIAotVGhlIHJjdXByZWVtcHQgYW5kIHJjdXRyZWUgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlIGRlYnVnZnMgdHJhY2UKLW91dHB1dCB0aGF0IHN1bW1hcml6ZXMgY291bnRlcnMgYW5kIHN0YXRlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yCi1kZWJ1Z2dpbmcgUkNVIGl0c2VsZiwgYW5kIGNhbiBzb21ldGltZXMgYWxzbyBoZWxwIHRvIGRlYnVnIGFidXNlcyBvZiBSQ1UuCi1Ob3RlIHRoYXQgdGhlIHJjdWNsYXNzaWMgaW1wbGVtZW50YXRpb24gb2YgUkNVIGRvZXMgbm90IHByb3ZpZGUgZGVidWdmcwotdHJhY2Ugb3V0cHV0LgotCi1UaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBkZWJ1Z2ZzIGZpbGVzIGFuZCBmb3JtYXRzIGZvcgotcHJlZW1wdGFibGUgUkNVIChyY3VwcmVlbXB0KSBhbmQgaGllcmFyY2hpY2FsIFJDVSAocmN1dHJlZSkuCi0KLQotUHJlZW1wdGFibGUgUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgcHJvdmlkZXMgdGhyZWUgZGVidWdmcyBmaWxlcyB1bmRlciB0aGUKLXRvcC1sZXZlbCBkaXJlY3RvcnkgUkNVOiByY3UvcmN1Y3RycyAod2hpY2ggZGlzcGxheXMgdGhlIHBlci1DUFUKLWNvdW50ZXJzIHVzZWQgYnkgcHJlZW1wdGFibGUgUkNVKSByY3UvcmN1Z3AgKHdoaWNoIGRpc3BsYXlzIGdyYWNlLXBlcmlvZAotY291bnRlcnMpLCBhbmQgcmN1L3JjdXN0YXRzICh3aGljaCBpbnRlcm5hbCBjb3VudGVycyBmb3IgZGVidWdnaW5nIFJDVSkuCi0KLVRoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1Y3RycyIgbG9va3MgYXMgZm9sbG93czoKLQotQ1BVIGxhc3QgY3VyIEYgTQotICAwICAgIDUgIC01IDAgMAotICAxICAgLTEgICAwIDAgMAotICAyICAgIDAgICAxIDAgMAotICAzICAgIDAgICAxIDAgMAotICA0ICAgIDAgICAxIDAgMAotICA1ICAgIDAgICAxIDAgMAotICA2ICAgIDAgICAyIDAgMAotICA3ICAgIDAgIC0xIDAgMAotICA4ICAgIDAgICAxIDAgMAotZ2dwID0gMjYyMjYsIHN0YXRlID0gd2FpdHplcm8KLQotVGhlIHBlci1DUFUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgotCi1vCSJDUFUiIGdpdmVzIHRoZSBDUFUgbnVtYmVyLiAgT2ZmbGluZSBDUFVzIGFyZSBub3QgZGlzcGxheWVkLgotCi1vCSJsYXN0IiBnaXZlcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdCBpcyBiZWluZyBkZWNyZW1lbnRlZAotCWZvciB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgcGhhc2UuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwKLQl0aGUgY291bnRlcnMgc3VtIHRvIDQsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgc3RpbGwgZm91cgotCVJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgc3RpbGwgcnVubmluZyB0aGF0IHN0YXJ0ZWQKLQliZWZvcmUgdGhlIGxhc3QgY291bnRlciBmbGlwLgotCi1vCSJjdXIiIGdpdmVzIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZwotCWJvdGggaW5jcmVtZW50ZWQgKGJ5IHJjdV9yZWFkX2xvY2soKSkgYW5kIGRlY3JlbWVudGVkIChieQotCXJjdV9yZWFkX3VubG9jaygpKS4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgY291bnRlcnMgc3VtIHRvCi0JMSwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgotCXN0aWxsIHJ1bm5pbmcgdGhhdCBzdGFydGVkIGFmdGVyIHRoZSBsYXN0IGNvdW50ZXIgZmxpcC4KLQotbwkiRiIgaW5kaWNhdGVzIHdoZXRoZXIgUkNVIGlzIHdhaXRpbmcgZm9yIHRoaXMgQ1BVIHRvIGFja25vd2xlZGdlCi0JYSBjb3VudGVyIGZsaXAuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgUkNVIGlzIG5vdCB3YWl0aW5nIG9uIGFueSwKLQl3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHN0YXRlIGJlaW5nICJ3YWl0emVybyIgcmF0aGVyIHRoYW4KLQkid2FpdGFjayIuCi0KLW8JIk0iIGluZGljYXRlcyB3aGV0aGVyIFJDVSBpcyB3YWl0aW5nIGZvciB0aGlzIENQVSB0byBleGVjdXRlIGEKLQltZW1vcnkgYmFycmllci4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCBSQ1UgaXMgbm90IHdhaXRpbmcgb24gYW55LAotCXdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc3RhdGUgYmVpbmcgIndhaXR6ZXJvIiByYXRoZXIgdGhhbgotCSJ3YWl0bWIiLgotCi1vCSJnZ3AiIGlzIHRoZSBnbG9iYWwgZ3JhY2UtcGVyaW9kIGNvdW50ZXIuCi0KLW8JInN0YXRlIiBpcyB0aGUgUkNVIHN0YXRlLCB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLQlvCSJpZGxlIjogdGhlcmUgaXMgbm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLgotCi0Jbwkid2FpdGFjayI6IFJDVSBqdXN0IGluY3JlbWVudGVkIHRoZSBnbG9iYWwgZ3JhY2UtcGVyaW9kCi0JCWNvdW50ZXIsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHJldmVyc2luZyB0aGUgcm9sZXMgb2YKLQkJdGhlICJsYXN0IiBhbmQgImN1ciIgY291bnRlcnMgYWJvdmUsIGFuZCBpcyB3YWl0aW5nIGZvcgotCQlhbGwgdGhlIENQVXMgdG8gYWNrbm93bGVkZ2UgdGhlIGZsaXAuICBPbmNlIHRoZSBmbGlwIGhhcwotCQliZWVuIGFja25vd2xlZGdlZCwgQ1BVcyB3aWxsIG5vIGxvbmdlciBiZSBpbmNyZW1lbnRpbmcKLQkJd2hhdCBhcmUgbm93IHRoZSAibGFzdCIgY291bnRlcnMsIHNvIHRoYXQgdGhlaXIgc3VtIHdpbGwKLQkJZGVjcmVhc2UgbW9ub3RvbmljYWxseSBkb3duIHRvIHplcm8uCi0KLQlvCSJ3YWl0emVybyI6IFJDVSBpcyB3YWl0aW5nIGZvciB0aGUgc3VtIG9mIHRoZSAibGFzdCIgY291bnRlcnMKLQkJdG8gZGVjcmVhc2UgdG8gemVyby4KLQotCW8JIndhaXRtYiI6IFJDVSBpcyB3YWl0aW5nIGZvciBlYWNoIENQVSB0byBleGVjdXRlIGEgbWVtb3J5Ci0JCWJhcnJpZXIsIHdoaWNoIGVuc3VyZXMgdGhhdCBpbnN0cnVjdGlvbnMgZnJvbSBhIGdpdmVuIENQVSdzCi0JCWxhc3QgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGNhbm5vdCBiZSByZW9yZGVyZWQKLQkJd2l0aCBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoZSBtZW1vcnktYmFycmllciBpbnN0cnVjdGlvbi4KLQotVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VncCIgbG9va3MgYXMgZm9sbG93czoKLQotb2xkZ2dwPTQ4ODcwICBuZXdnZ3A9NDg4NzMKLQotTm90ZSB0aGF0IHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgcHJvdm9rZXMgYSBzeW5jaHJvbml6ZV9yY3UoKS4gIFRoZQotIm9sZGdncCIgdmFsdWUgaXMgdGhhdCBvZiAiZ2dwIiBmcm9tIHJjdS9yY3VjdHJzIGFib3ZlLCB0YWtlbiBiZWZvcmUKLWV4ZWN1dGluZyB0aGUgc3luY2hyb25pemVfcmN1KCksIGFuZCB0aGUgIm5ld2dncCIgdmFsdWUgaXMgYWxzbyB0aGUKLSJnZ3AiIHZhbHVlLCBidXQgdGFrZW4gYWZ0ZXIgdGhlIHN5bmNocm9uaXplX3JjdSgpIGNvbW1hbmQgcmV0dXJucy4KLQotCi1UaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWdwIiBsb29rcyBhcyBmb2xsb3dzOgotCi1uYT0xMzM3OTU1IG5sPTQwIHdhPTEzMzc5MTUgd2w9NDQgZGE9MTMzNzg3MSBkbD0wIGRyPTEzMzc4NzEgZGk9MTMzNzg3MQotMT01MDk4OSBlMT02MTM4IGkxPTQ5NzIyIGllMT04MiBnMT00OTY0MCBhMT0zMTUyMDMgYWUxPTI2NTU2MyBhMj00OTY0MAotejE9MTQwMTI0NCB6ZTE9MTM1MTYwNSB6Mj00OTYzOSBtMT01NjYxMjUzIG1lMT01NjExNjE0IG0yPTQ5NjM5Ci0KLVRoZXNlIGFyZSBjb3VudGVycyB0cmFja2luZyBpbnRlcm5hbCBwcmVlbXB0YWJsZS1SQ1UgZXZlbnRzLCBob3dldmVyLAotc29tZSBvZiB0aGVtIG1heSBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGdvcml0aG1zIHVzaW5nIFJDVS4gIEluCi1wYXJ0aWN1bGFyLCB0aGUgIm5sIiwgIndsIiwgYW5kICJkbCIgdmFsdWVzIHRyYWNrIHRoZSBudW1iZXIgb2YgUkNVCi1jYWxsYmFja3MgaW4gdmFyaW91cyBzdGF0ZXMuICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgotCi1vCSJuYSIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIGVucXVldWVkCi0Jc2luY2UgYm9vdC4KLQotbwkibmwiIGlzIHRoZSBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB3YWl0aW5nIGZvciB0aGUgcHJldmlvdXMKLQlncmFjZSBwZXJpb2QgdG8gZW5kIHNvIHRoYXQgdGhleSBjYW4gc3RhcnQgd2FpdGluZyBvbiB0aGUgbmV4dAotCWdyYWNlIHBlcmlvZC4KLQotbwkid2EiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgc3RhcnRlZCB3YWl0aW5nCi0JZm9yIGEgZ3JhY2UgcGVyaW9kIHNpbmNlIGJvb3QuICAibmEiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvCi0JIm5sIiBwbHVzICJ3YSIuCi0KLW8JIndsIiBpcyB0aGUgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgY3VycmVudGx5IHdhaXRpbmcgZm9yIHRoZWlyCi0JZ3JhY2UgcGVyaW9kIHRvIGVuZC4KLQotbwkiZGEiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB3aG9zZSBncmFjZSBwZXJpb2RzCi0JaGF2ZSBjb21wbGV0ZWQgc2luY2UgYm9vdC4gICJ3YSIgc2hvdWxkIGJlIHJvdWdobHkgZXF1YWwgdG8KLQkid2wiIHBsdXMgImRhIi4KLQotbwkiZHIiIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkCi0JZnJvbSB0aGUgbGlzdCBvZiBjYWxsYmFja3MgcmVhZHkgdG8gaW52b2tlLiAgImRyIiBzaG91bGQgYmUgcm91Z2hseQotCWVxdWFsIHRvICJkYSIuCi0KLW8JImRpIiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIGJlZW4gaW52b2tlZAotCXNpbmNlIGJvb3QuICAiZGkiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvICJkYSIsIHRob3VnaCBzb21lCi0JZWFybHkgdmVyc2lvbnMgb2YgcHJlZW1wdGFibGUgUkNVIGhhZCBhIGJ1ZyBzbyB0aGF0IG9ubHkgdGhlCi0JbGFzdCBDUFUncyBjb3VudCBvZiBpbnZvY2F0aW9ucyB3YXMgZGlzcGxheWVkLCByYXRoZXIgdGhhbiB0aGUKLQlzdW0gb2YgYWxsIENQVSdzIGNvdW50cy4KLQotbwkiMSIgaXMgdGhlIG51bWJlciBvZiBjYWxscyB0byByY3VfdHJ5X2ZsaXAoKS4gIFRoaXMgc2hvdWxkIGJlCi0Jcm91Z2hseSBlcXVhbCB0byB0aGUgc3VtIG9mICJlMSIsICJpMSIsICJhMSIsICJ6MSIsIGFuZCAibTEiCi0JZGVzY3JpYmVkIGJlbG93LiAgSW4gb3RoZXIgd29yZHMsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdAotCXRoZSBzdGF0ZSBtYWNoaW5lIGlzIHZpc2l0ZWQgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBzdW0gb2YgdGhlCi0JbnVtYmVyIG9mIHRpbWVzIHRoYXQgZWFjaCBzdGF0ZSBpcyB2aXNpdGVkIHBsdXMgdGhlIG51bWJlciBvZgotCXRpbWVzIHRoYXQgdGhlIHN0YXRlLW1hY2hpbmUgbG9jayBhY3F1aXNpdGlvbiBmYWlsZWQuCi0KLW8JImUxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwKCkgd2FzIHVuYWJsZSB0bwotCWFjcXVpcmUgdGhlIGZsaXBsb2NrLgotCi1vCSJpMSIgaXMgdGhlIG51bWJlciBvZiBjYWxscyB0byByY3VfdHJ5X2ZsaXBfaWRsZSgpLgotCi1vCSJpZTEiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgcmN1X3RyeV9mbGlwX2lkbGUoKSBleGl0ZWQgZWFybHkKLQlkdWUgdG8gdGhlIGNhbGxpbmcgQ1BVIGhhdmluZyBubyB3b3JrIGZvciBSQ1UuCi0KLW8JImcxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX2lkbGUoKSBkZWNpZGVkCi0JdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAgImkxIiBzaG91bGQgYmUgcm91Z2hseSBlcXVhbCB0bwotCSJpZTEiIHBsdXMgImcxIi4KLQotbwkiYTEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRhY2soKS4KLQotbwkiYWUxIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX3dhaXRhY2soKSBmb3VuZAotCXRoYXQgYXQgbGVhc3Qgb25lIENQVSBoYWQgbm90IHlldCBhY2tub3dsZWRnZSB0aGUgbmV3IGdyYWNlIHBlcmlvZAotCShBS0EgImNvdW50ZXIgZmxpcCIpLgotCi1vCSJhMiIgaXMgdGhlIG51bWJlciBvZiB0aW1lIHJjdV90cnlfZmxpcF93YWl0YWNrKCkgZm91bmQgdGhhdAotCWFsbCBDUFVzIGhhZCBhY2tub3dsZWRnZWQuICAiYTEiIHNob3VsZCBiZSByb3VnaGx5IGVxdWFsIHRvCi0JImFlMSIgcGx1cyAiYTIiLiAgKFRoaXMgcGFydGljdWxhciBvdXRwdXQgd2FzIGNvbGxlY3RlZCBvbgotCWEgMTI4LUNQVSBtYWNoaW5lLCBoZW5jZSB0aGUgc21hbGxlci10aGFuLXVzdWFsIGZyYWN0aW9uIG9mCi0JY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRhY2soKSBmaW5kaW5nIGFsbCBDUFVzIGhhdmluZyBhbHJlYWR5Ci0JYWNrbm93bGVkZ2VkLikKLQotbwkiejEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXR6ZXJvKCkuCi0KLW8JInplMSIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHJjdV90cnlfZmxpcF93YWl0emVybygpIGZvdW5kCi0JdGhhdCBub3QgYWxsIG9mIHRoZSBvbGQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYWQKLQljb21wbGV0ZWQuCi0KLW8JInoyIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgcmN1X3RyeV9mbGlwX3dhaXR6ZXJvKCkgZmluZHMKLQl0aGUgc3VtIG9mIHRoZSBjb3VudGVycyBlcXVhbCB0byB6ZXJvLCBpbiBvdGhlciB3b3JkcywgdGhhdAotCWFsbCBvZiB0aGUgb2xkIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGFkIGNvbXBsZXRlZC4KLQlUaGUgdmFsdWUgb2YgInoxIiBzaG91bGQgYmUgcm91Z2hseSBlcXVhbCB0byAiemUxIiBwbHVzCi0JInoyIi4KLQotbwkibTEiIGlzIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gcmN1X3RyeV9mbGlwX3dhaXRtYigpLgotCi1vCSJtZTEiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByY3VfdHJ5X2ZsaXBfd2FpdG1iKCkgZmluZHMKLQl0aGF0IGF0IGxlYXN0IG9uZSBDUFUgaGFzIG5vdCB5ZXQgZXhlY3V0ZWQgYSBtZW1vcnkgYmFycmllci4KLQotbwkibTIiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCByY3VfdHJ5X2ZsaXBfd2FpdG1iKCkgZmluZHMgdGhhdAotCWFsbCBDUFVzIGhhdmUgZXhlY3V0ZWQgYSBtZW1vcnkgYmFycmllci4KK1RoZSByY3V0cmVlIGltcGxlbWVudGF0aW9uIG9mIFJDVSBwcm92aWRlcyBkZWJ1Z2ZzIHRyYWNlIG91dHB1dCB0aGF0CitzdW1tYXJpemVzIGNvdW50ZXJzIGFuZCBzdGF0ZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKK1JDVSBpdHNlbGYsIGFuZCBjYW4gc29tZXRpbWVzIGFsc28gaGVscCB0byBkZWJ1ZyBhYnVzZXMgb2YgUkNVLgorVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZm9ybWF0cy4KIAogCiBIaWVyYXJjaGljYWwgUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKQEAgLTIxMCw5ICszNSwxMCBAQAogICA2IGM9LTI3NSBnPS0yNzUgcHE9MSBwcWM9LTI3NSBxcD0wIGR0PTg1OS8xIGRuPTAgZGY9MTUgb2Y9MCByaT0wIHFsPTAgYj0xMAogICA3IGM9LTI3NSBnPS0yNzUgcHE9MSBwcWM9LTI3NSBxcD0wIGR0PTM3NjEvMSBkbj0wIGRmPTE1IG9mPTAgcmk9MCBxbD0wIGI9MTAKIAotVGhlIGZpcnN0IHNlY3Rpb24gbGlzdHMgdGhlIHJjdV9kYXRhIHN0cnVjdHVyZXMgZm9yIHJjdSwgdGhlIHNlY29uZCBmb3IKLXJjdV9iaC4gIEVhY2ggc2VjdGlvbiBoYXMgb25lIGxpbmUgcGVyIENQVSwgb3IgZWlnaHQgZm9yIHRoaXMgOC1DUFUgc3lzdGVtLgotVGhlIGZpZWxkcyBhcmUgYXMgZm9sbG93czoKK1RoZSBmaXJzdCBzZWN0aW9uIGxpc3RzIHRoZSByY3VfZGF0YSBzdHJ1Y3R1cmVzIGZvciByY3Vfc2NoZWQsIHRoZSBzZWNvbmQKK2ZvciByY3VfYmguICBOb3RlIHRoYXQgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1Uga2VybmVscyB3aWxsIGhhdmUgYW4KK2FkZGl0aW9uYWwgc2VjdGlvbiBmb3IgcmN1X3ByZWVtcHQuICBFYWNoIHNlY3Rpb24gaGFzIG9uZSBsaW5lIHBlciBDUFUsCitvciBlaWdodCBmb3IgdGhpcyA4LUNQVSBzeXN0ZW0uICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgogCiBvCVRoZSBudW1iZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgaXMgdGhlIENQVSBudW1iZXIuCiAJQ1BVcyBudW1iZXJzIGZvbGxvd2VkIGJ5IGFuIGV4Y2xhbWF0aW9uIG1hcmsgYXJlIG9mZmxpbmUsCkBAIC0yMjMsOSArNDksOSBAQAogCiBvCSJjIiBpcyB0aGUgY291bnQgb2YgZ3JhY2UgcGVyaW9kcyB0aGF0IHRoaXMgQ1BVIGJlbGlldmVzIGhhdmUKIAljb21wbGV0ZWQuICBDUFVzIGluIGR5bnRpY2tzIGlkbGUgbW9kZSBtYXkgbGFnIHF1aXRlIGEgd2F5cwotCWJlaGluZCwgZm9yIGV4YW1wbGUsIENQVSA0IHVuZGVyICJyY3UiIGFib3ZlLCB3aGljaCBoYXMgc2xlcHQKLQl0aHJvdWdoIHRoZSBwYXN0IDI1IFJDVSBncmFjZSBwZXJpb2RzLglJdCBpcyBub3QgdW51c3VhbCB0bwotCXNlZSBDUFVzIGxhZ2dpbmcgYnkgdGhvdXNhbmRzIG9mIGdyYWNlIHBlcmlvZHMuCisJYmVoaW5kLCBmb3IgZXhhbXBsZSwgQ1BVIDQgdW5kZXIgInJjdV9zY2hlZCIgYWJvdmUsIHdoaWNoIGhhcworCXNsZXB0IHRocm91Z2ggdGhlIHBhc3QgMjUgUkNVIGdyYWNlIHBlcmlvZHMuICBJdCBpcyBub3QgdW51c3VhbAorCXRvIHNlZSBDUFVzIGxhZ2dpbmcgYnkgdGhvdXNhbmRzIG9mIGdyYWNlIHBlcmlvZHMuCiAKIG8JImciIGlzIHRoZSBjb3VudCBvZiBncmFjZSBwZXJpb2RzIHRoYXQgdGhpcyBDUFUgYmVsaWV2ZXMgaGF2ZQogCXN0YXJ0ZWQuICBBZ2FpbiwgQ1BVcyBpbiBkeW50aWNrcyBpZGxlIG1vZGUgbWF5IGxhZyBiZWhpbmQuCkBAIC0zMDgsOCArMTM0LDEwIEBACiByY3Vfc2NoZWQ6IGNvbXBsZXRlZD0zMzA2MiAgZ3BudW09MzMwNjMKIHJjdV9iaDogY29tcGxldGVkPTQ2NCAgZ3BudW09NDY0CiAKLUFnYWluLCB0aGlzIG91dHB1dCBpcyBmb3IgYm90aCAicmN1IiBhbmQgInJjdV9iaCIuICBUaGUgZmllbGRzIGFyZQotdGFrZW4gZnJvbSB0aGUgcmN1X3N0YXRlIHN0cnVjdHVyZSwgYW5kIGFyZSBhcyBmb2xsb3dzOgorQWdhaW4sIHRoaXMgb3V0cHV0IGlzIGZvciBib3RoICJyY3Vfc2NoZWQiIGFuZCAicmN1X2JoIi4gIE5vdGUgdGhhdAora2VybmVscyBidWlsdCB3aXRoIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIHdpbGwgaGF2ZSBhbiBhZGRpdGlvbmFsCisicmN1X3ByZWVtcHQiIGxpbmUuICBUaGUgZmllbGRzIGFyZSB0YWtlbiBmcm9tIHRoZSByY3Vfc3RhdGUgc3RydWN0dXJlLAorYW5kIGFyZSBhcyBmb2xsb3dzOgogCiBvCSJjb21wbGV0ZWQiIGlzIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcyB0aGF0IGhhdmUgY29tcGxldGVkLgogCUl0IGlzIGNvbXBhcmFibGUgdG8gdGhlICJjIiBmaWVsZCBmcm9tIHJjdS9yY3VkYXRhIGluIHRoYXQgYQpAQCAtMzI0LDIzICsxNTIsMjQgQEAKIAlJZiB0aGVzZSB0d28gZmllbGRzIGFyZSBlcXVhbCAoYXMgdGhleSBhcmUgZm9yICJyY3VfYmgiIGFib3ZlKSwKIAl0aGVuIHRoZXJlIGlzIG5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcywgaW4gb3RoZXIgd29yZHMsIFJDVQogCWlzIGlkbGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHR3byBmaWVsZHMgZGlmZmVyIChhcyB0aGV5Ci0JZG8gZm9yICJyY3UiIGFib3ZlKSwgdGhlbiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLgorCWRvIGZvciAicmN1X3NjaGVkIiBhYm92ZSksIHRoZW4gYW4gUkNVIGdyYWNlIHBlcmlvZCBpcyBpbiBwcm9ncmVzcy4KIAogCiBUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWhpZXIiIGxvb2tzIGFzIGZvbGxvd3MsIHdpdGggdmVyeSBsb25nIGxpbmVzOgogCi1jPTY5MDIgZz02OTAzIHM9MiBqZnE9MyBqPTcyYzcgbmZxcz0xMzE0Mi9uZnFzbmc9MCgxMzE0MikgZnFsaD02Ci0xLzEgMDoxMjcgXjAgICAgCi0zLzMgMDozNSBeMCAgICAwLzAgMzY6NzEgXjEgICAgMC8wIDcyOjEwNyBeMiAgICAwLzAgMTA4OjEyNyBeMyAgICAKLTMvM2YgMDo1IF4wICAgIDIvMyA2OjExIF4xICAgIDAvMCAxMjoxNyBeMiAgICAwLzAgMTg6MjMgXjMgICAgMC8wIDI0OjI5IF40ICAgIDAvMCAzMDozNSBeNSAgICAwLzAgMzY6NDEgXjAgICAgMC8wIDQyOjQ3IF4xICAgIDAvMCA0ODo1MyBeMiAgICAwLzAgNTQ6NTkgXjMgICAgMC8wIDYwOjY1IF40ICAgIDAvMCA2Njo3MSBeNSAgICAwLzAgNzI6NzcgXjAgICAgMC8wIDc4OjgzIF4xICAgIDAvMCA4NDo4OSBeMiAgICAwLzAgOTA6OTUgXjMgICAgMC8wIDk2OjEwMSBeNCAgICAwLzAgMTAyOjEwNyBeNSAgICAwLzAgMTA4OjExMyBeMCAgICAwLzAgMTE0OjExOSBeMSAgICAwLzAgMTIwOjEyNSBeMiAgICAwLzAgMTI2OjEyNyBeMyAgICAKK2M9NjkwMiBnPTY5MDMgcz0yIGpmcT0zIGo9NzJjNyBuZnFzPTEzMTQyL25mcXNuZz0wKDEzMTQyKSBmcWxoPTYgb3FsZW49MAorMS8xIC4+LiAwOjEyNyBeMCAgICAKKzMvMyAuPi4gMDozNSBeMCAgICAwLzAgLj4uIDM2OjcxIF4xICAgIDAvMCAuPi4gNzI6MTA3IF4yICAgIDAvMCAuPi4gMTA4OjEyNyBeMyAgICAKKzMvM2YgLj4uIDA6NSBeMCAgICAyLzMgLj4uIDY6MTEgXjEgICAgMC8wIC4+LiAxMjoxNyBeMiAgICAwLzAgLj4uIDE4OjIzIF4zICAgIDAvMCAuPi4gMjQ6MjkgXjQgICAgMC8wIC4+LiAzMDozNSBeNSAgICAwLzAgLj4uIDM2OjQxIF4wICAgIDAvMCAuPi4gNDI6NDcgXjEgICAgMC8wIC4+LiA0ODo1MyBeMiAgICAwLzAgLj4uIDU0OjU5IF4zICAgIDAvMCAuPi4gNjA6NjUgXjQgICAgMC8wIC4+LiA2Njo3MSBeNSAgICAwLzAgLj4uIDcyOjc3IF4wICAgIDAvMCAuPi4gNzg6ODMgXjEgICAgMC8wIC4+LiA4NDo4OSBeMiAgICAwLzAgLj4uIDkwOjk1IF4zICAgIDAvMCAuPi4gOTY6MTAxIF40ICAgIDAvMCAuPi4gMTAyOjEwNyBeNSAgICAwLzAgLj4uIDEwODoxMTMgXjAgICAgMC8wIC4+LiAxMTQ6MTE5IF4xICAgIDAvMCAuPi4gMTIwOjEyNSBeMiAgICAwLzAgLj4uIDEyNjoxMjcgXjMgICAgCiByY3VfYmg6Ci1jPS0yMjYgZz0tMjI2IHM9MSBqZnE9LTU3MDEgaj03MmM3IG5mcXM9ODgvbmZxc25nPTAoODgpIGZxbGg9MAotMC8xIDA6MTI3IF4wICAgIAotMC8zIDA6MzUgXjAgICAgMC8wIDM2OjcxIF4xICAgIDAvMCA3MjoxMDcgXjIgICAgMC8wIDEwODoxMjcgXjMgICAgCi0wLzNmIDA6NSBeMCAgICAwLzMgNjoxMSBeMSAgICAwLzAgMTI6MTcgXjIgICAgMC8wIDE4OjIzIF4zICAgIDAvMCAyNDoyOSBeNCAgICAwLzAgMzA6MzUgXjUgICAgMC8wIDM2OjQxIF4wICAgIDAvMCA0Mjo0NyBeMSAgICAwLzAgNDg6NTMgXjIgICAgMC8wIDU0OjU5IF4zICAgIDAvMCA2MDo2NSBeNCAgICAwLzAgNjY6NzEgXjUgICAgMC8wIDcyOjc3IF4wICAgIDAvMCA3ODo4MyBeMSAgICAwLzAgODQ6ODkgXjIgICAgMC8wIDkwOjk1IF4zICAgIDAvMCA5NjoxMDEgXjQgICAgMC8wIDEwMjoxMDcgXjUgICAgMC8wIDEwODoxMTMgXjAgICAgMC8wIDExNDoxMTkgXjEgICAgMC8wIDEyMDoxMjUgXjIgICAgMC8wIDEyNjoxMjcgXjMKK2M9LTIyNiBnPS0yMjYgcz0xIGpmcT0tNTcwMSBqPTcyYzcgbmZxcz04OC9uZnFzbmc9MCg4OCkgZnFsaD0wIG9xbGVuPTAKKzAvMSAuPi4gMDoxMjcgXjAgICAgCiswLzMgLj4uIDA6MzUgXjAgICAgMC8wIC4+LiAzNjo3MSBeMSAgICAwLzAgLj4uIDcyOjEwNyBeMiAgICAwLzAgLj4uIDEwODoxMjcgXjMgICAgCiswLzNmIC4+LiAwOjUgXjAgICAgMC8zIC4+LiA2OjExIF4xICAgIDAvMCAuPi4gMTI6MTcgXjIgICAgMC8wIC4+LiAxODoyMyBeMyAgICAwLzAgLj4uIDI0OjI5IF40ICAgIDAvMCAuPi4gMzA6MzUgXjUgICAgMC8wIC4+LiAzNjo0MSBeMCAgICAwLzAgLj4uIDQyOjQ3IF4xICAgIDAvMCAuPi4gNDg6NTMgXjIgICAgMC8wIC4+LiA1NDo1OSBeMyAgICAwLzAgLj4uIDYwOjY1IF40ICAgIDAvMCAuPi4gNjY6NzEgXjUgICAgMC8wIC4+LiA3Mjo3NyBeMCAgICAwLzAgLj4uIDc4OjgzIF4xICAgIDAvMCAuPi4gODQ6ODkgXjIgICAgMC8wIC4+LiA5MDo5NSBeMyAgICAwLzAgLj4uIDk2OjEwMSBeNCAgICAwLzAgLj4uIDEwMjoxMDcgXjUgICAgMC8wIC4+LiAxMDg6MTEzIF4wICAgIDAvMCAuPi4gMTE0OjExOSBeMSAgICAwLzAgLj4uIDEyMDoxMjUgXjIgICAgMC8wIC4+LiAxMjY6MTI3IF4zCiAKLVRoaXMgaXMgb25jZSBhZ2FpbiBzcGxpdCBpbnRvICJyY3UiIGFuZCAicmN1X2JoIiBwb3J0aW9ucy4gIFRoZSBmaWVsZHMgYXJlCi1hcyBmb2xsb3dzOgorVGhpcyBpcyBvbmNlIGFnYWluIHNwbGl0IGludG8gInJjdV9zY2hlZCIgYW5kICJyY3VfYmgiIHBvcnRpb25zLAorYW5kIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGtlcm5lbHMgd2lsbCBhZ2FpbiBoYXZlIGFuIGFkZGl0aW9uYWwKKyJyY3VfcHJlZW1wdCIgc2VjdGlvbi4gIFRoZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CiAKIG8JImMiIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgImNvbXBsZXRlZCIgdW5kZXIgcmN1L3JjdWdwLgogCkBAIC0zNzIsNiArMjAxLDExIEBACiAJZXhpdGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IGV2ZW4gYmVpbmcgY291bnRlZCBpbiBuZnFzIGFib3ZlKQogCWR1ZSB0byBjb250ZW50aW9uIG9uIC0+ZnFzbG9jay4KIAorbwkib3FsZW4iIGlzIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIG9uIHRoZSAib3JwaGFuIiBjYWxsYmFjaworCWxpc3QuICBSQ1UgY2FsbGJhY2tzIGFyZSBwbGFjZWQgb24gdGhpcyBsaXN0IGJ5IENQVXMgZ29pbmcKKwlvZmZsaW5lLCBhbmQgYXJlICJhZG9wdGVkIiBlaXRoZXIgYnkgdGhlIENQVSBoZWxwaW5nIHRoZSBvdXRnb2luZworCUNQVSBvciBieSB0aGUgbmV4dCByY3VfYmFycmllciooKSBjYWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisKIG8JRWFjaCBlbGVtZW50IG9mIHRoZSBmb3JtICIxLzEgMDoxMjcgXjAiIHJlcHJlc2VudHMgb25lIHN0cnVjdAogCXJjdV9ub2RlLiAgRWFjaCBsaW5lIHJlcHJlc2VudHMgb25lIGxldmVsIG9mIHRoZSBoaWVyYXJjaHksIGZyb20KIAlyb290IHRvIGxlYXZlcy4gIEl0IGlzIGJlc3QgdG8gdGhpbmsgb2YgdGhlIHJjdV9kYXRhIHN0cnVjdHVyZXMKQEAgLTM3OSw3ICsyMTMsNyBAQAogCW1pZ2h0IGJlIGVpdGhlciBvbmUsIHR3bywgb3IgdGhyZWUgbGV2ZWxzIG9mIHJjdV9ub2RlIHN0cnVjdHVyZXMsCiAJZGVwZW5kaW5nIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBDT05GSUdfUkNVX0ZBTk9VVCBhbmQKIAlDT05GSUdfTlJfQ1BVUy4KLQkKKwogCW8JVGhlIG51bWJlcnMgc2VwYXJhdGVkIGJ5IHRoZSAiLyIgYXJlIHRoZSBxc21hc2sgZm9sbG93ZWQKIAkJYnkgdGhlIHFzbWFza2luaXQuICBUaGUgcXNtYXNrIHdpbGwgaGF2ZSBvbmUgYml0CiAJCXNldCBmb3IgZWFjaCBlbnRpdHkgaW4gdGhlIG5leHQgbG93ZXIgbGV2ZWwgdGhhdApAQCAtMzg5LDEwICsyMjMsMTkgQEAKIAkJVGhlIHZhbHVlIG9mIHFzbWFza2luaXQgaXMgYXNzaWduZWQgdG8gdGhhdCBvZiBxc21hc2sKIAkJYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGdyYWNlIHBlcmlvZC4KIAotCQlGb3IgZXhhbXBsZSwgZm9yICJyY3UiLCB0aGUgcXNtYXNrIG9mIHRoZSBmaXJzdCBlbnRyeQotCQlvZiB0aGUgbG93ZXN0IGxldmVsIGlzIDB4MTQsIG1lYW5pbmcgdGhhdCB3ZSBhcmUgc3RpbGwKLQkJd2FpdGluZyBmb3IgQ1BVcyAyIGFuZCA0IHRvIGNoZWNrIGluIGZvciB0aGUgY3VycmVudAotCQlncmFjZSBwZXJpb2QuCisJCUZvciBleGFtcGxlLCBmb3IgInJjdV9zY2hlZCIsIHRoZSBxc21hc2sgb2YgdGhlIGZpcnN0CisJCWVudHJ5IG9mIHRoZSBsb3dlc3QgbGV2ZWwgaXMgMHgxNCwgbWVhbmluZyB0aGF0IHdlCisJCWFyZSBzdGlsbCB3YWl0aW5nIGZvciBDUFVzIDIgYW5kIDQgdG8gY2hlY2sgaW4gZm9yIHRoZQorCQljdXJyZW50IGdyYWNlIHBlcmlvZC4KKworCW8JVGhlIGNoYXJhY3RlcnMgc2VwYXJhdGVkIGJ5IHRoZSAiPiIgaW5kaWNhdGUgdGhlIHN0YXRlCisJCW9mIHRoZSBibG9ja2VkLXRhc2tzIGxpc3RzLiAgQSAiVCIgcHJlY2VkaW5nIHRoZSAiPiIKKwkJaW5kaWNhdGVzIHRoYXQgYXQgbGVhc3Qgb25lIHRhc2sgYmxvY2tlZCBpbiBhbiBSQ1UKKwkJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gYmxvY2tzIHRoZSBjdXJyZW50IGdyYWNlCisJCXBlcmlvZCwgd2hpbGUgYSAiLiIgcHJlY2VkaW5nIHRoZSAiPiIgaW5kaWNhdGVzIG90aGVyd2lzZS4KKwkJVGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlICI+IiBpbmRpY2F0ZXMgc2ltaWxhcmx5IGZvcgorCQl0aGUgbmV4dCBncmFjZSBwZXJpb2QuICBBICJUIiBzaG91bGQgYXBwZWFyIGluIHRoaXMKKwkJZmllbGQgb25seSBmb3IgcmN1LXByZWVtcHQuCiAKIAlvCVRoZSBudW1iZXJzIHNlcGFyYXRlZCBieSB0aGUgIjoiIGFyZSB0aGUgcmFuZ2Ugb2YgQ1BVcwogCQlzZXJ2ZWQgYnkgdGhpcyBzdHJ1Y3QgcmN1X25vZGUuICBUaGlzIGNhbiBiZSBoZWxwZnVsCkBAIC00MzEsOCArMjc0LDkgQEAKICAgNiBucD0xMjA4MzQgcXNwPTk5MDIgY2JyPTAgY25nPTAgZ3BjPTYgZ3BzPTMgbmY9MiBubj0xMTA5MjEKICAgNyBucD0xNDQ4ODggcXNwPTI2MzM2IGNicj0wIGNuZz0wIGdwYz04IGdwcz0yIG5mPTAgbm49MTE4NTQyCiAKLUFzIGFsd2F5cywgdGhpcyBpcyBvbmNlIGFnYWluIHNwbGl0IGludG8gInJjdSIgYW5kICJyY3VfYmgiIHBvcnRpb25zLgotVGhlIGZpZWxkcyBhcmUgYXMgZm9sbG93czoKK0FzIGFsd2F5cywgdGhpcyBpcyBvbmNlIGFnYWluIHNwbGl0IGludG8gInJjdV9zY2hlZCIgYW5kICJyY3VfYmgiCitwb3J0aW9ucywgd2l0aCBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWxzIGhhdmluZyBhbiBhZGRpdGlvbmFsCisicmN1X3ByZWVtcHQiIHNlY3Rpb24uICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgogCiBvCSJucCIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IF9fcmN1X3BlbmRpbmcoKSBoYXMgYmVlbiBpbnZva2VkCiAJZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZsYXZvciBvZiBSQ1UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCBlNDFhN2ZlLi5kNTQyY2EyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTgzMCw3ICs4MzAsNyBAQAogU1JDVToJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCiAKIAlzcmN1X3JlYWRfbG9jawkJc3luY2hyb25pemVfc3JjdQlOL0EKLQlzcmN1X3JlYWRfdW5sb2NrCisJc3JjdV9yZWFkX3VubG9jawlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZAogCiBTUkNVOglJbml0aWFsaXphdGlvbi9jbGVhbnVwCiAJaW5pdF9zcmN1X3N0cnVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAppbmRleCBiNDFmM2U1Li5mMWM1YzRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dApAQCAtMSwxNSArMSwyOCBAQAogCi1FeHBvcnQgY3B1IHRvcG9sb2d5IGluZm8gdmlhIHN5c2ZzLiBJdGVtcyAoYXR0cmlidXRlcykgYXJlIHNpbWlsYXIKK0V4cG9ydCBDUFUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgogdG8gL3Byb2MvY3B1aW5mby4KIAogMSkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9waHlzaWNhbF9wYWNrYWdlX2lkOgotcmVwcmVzZW50IHRoZSBwaHlzaWNhbCBwYWNrYWdlIGlkIG9mICBjcHUgWDsKKworCXBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1WC4gVHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwKKwlzb2NrZXQgbnVtYmVyLCBidXQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtCisJZGVwZW5kZW50LgorCiAyKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L2NvcmVfaWQ6Ci1yZXByZXNlbnQgdGhlIGNwdSBjb3JlIGlkIHRvIGNwdSBYOworCisJdGhlIENQVSBjb3JlIElEIG9mIGNwdVguIFR5cGljYWxseSBpdCBpcyB0aGUgaGFyZHdhcmUgcGxhdGZvcm0ncworCWlkZW50aWZpZXIgKHJhdGhlciB0aGFuIHRoZSBrZXJuZWwncykuICBUaGUgYWN0dWFsIHZhbHVlIGlzCisJYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKIDMpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvdGhyZWFkX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgY29yZTsKKworCWludGVybmVsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJY29yZSBhcyBjcHVYCisKIDQpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9zaWJsaW5nczoKLXJlcHJlc2VudCB0aGUgdGhyZWFkIHNpYmxpbmdzIHRvIGNwdSBYIGluIHRoZSBzYW1lIHBoeXNpY2FsIHBhY2thZ2U7CisKKwlpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdVgncyBoYXJkd2FyZSB0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZQorCXBoeXNpY2FsX3BhY2thZ2VfaWQuCiAKIFRvIGltcGxlbWVudCBpdCBpbiBhbiBhcmNoaXRlY3R1cmUtbmV1dHJhbCB3YXksIGEgbmV3IHNvdXJjZSBmaWxlLAogZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMsIGlzIHRvIGV4cG9ydCB0aGUgNCBhdHRyaWJ1dGVzLgpAQCAtMzIsMzIgKzQ1LDMyIEBACiAzKSB0aHJlYWRfc2libGluZ3M6IGp1c3QgdGhlIGdpdmVuIENQVQogNCkgY29yZV9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiAKLUFkZGl0aW9uYWxseSwgY3B1IHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCitBZGRpdGlvbmFsbHksIENQVSB0b3BvbG9neSBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB1bmRlcgogL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUgYW5kIGluY2x1ZGVzIHRoZXNlIGZpbGVzLiAgVGhlIGludGVybmFsCiBzb3VyY2UgZm9yIHRoZSBvdXRwdXQgaXMgaW4gYnJhY2tldHMgKCJbXSIpLgogCi0gICAga2VybmVsX21heDogdGhlIG1heGltdW0gY3B1IGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICAgIGtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIENQVSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KIAkJW05SX0NQVVMtMV0KIAotICAgIG9mZmxpbmU6CWNwdXMgdGhhdCBhcmUgbm90IG9ubGluZSBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuCisgICAgb2ZmbGluZToJQ1BVcyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KIAkJSE9UUExVR0dFRCBvZmYgKHNlZSBjcHUtaG90cGx1Zy50eHQpIG9yIGV4Y2VlZCB0aGUgbGltaXQKLQkJb2YgY3B1cyBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiAoa2VybmVsX21heAorCQlvZiBDUFVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CiAJCWFib3ZlKS4gW35jcHVfb25saW5lX21hc2sgKyBjcHVzID49IE5SX0NQVVNdCiAKLSAgICBvbmxpbmU6CWNwdXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KKyAgICBvbmxpbmU6CUNQVXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KIAotICAgIHBvc3NpYmxlOgljcHVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQorICAgIHBvc3NpYmxlOglDUFVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQogCQlicm91Z2h0IG9ubGluZSBpZiB0aGV5IGFyZSBwcmVzZW50LiBbY3B1X3Bvc3NpYmxlX21hc2tdCiAKLSAgICBwcmVzZW50OgljcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKKyAgICBwcmVzZW50OglDUFVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKIAkJc3lzdGVtLiBbY3B1X3ByZXNlbnRfbWFza10KIAogVGhlIGZvcm1hdCBmb3IgdGhlIGFib3ZlIG91dHB1dCBpcyBjb21wYXRpYmxlIHdpdGggY3B1bGlzdF9wYXJzZSgpCiBbc2VlIDxsaW51eC9jcHVtYXNrLmg+XS4gIFNvbWUgZXhhbXBsZXMgZm9sbG93LgogCi1JbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBjcHVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCitJbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBDUFVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCiB0aGUga2VybmVsIG1heCB3aGljaCBpcyBsaW1pdGVkIHRvIDAuLjMxIGJ5IHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24KLWJlaW5nIDMyLiAgTm90ZSBhbHNvIHRoYXQgY3B1cyAyIGFuZCA0LTMxIGFyZSBub3Qgb25saW5lIGJ1dCBjb3VsZCBiZQorYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBDUFVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCiBicm91Z2h0IG9ubGluZSBhcyB0aGV5IGFyZSBib3RoIHByZXNlbnQgYW5kIHBvc3NpYmxlLgogCiAgICAgIGtlcm5lbF9tYXg6IDMxCkBAIC02Nyw4ICs4MCw4IEBACiAgICAgICAgIHByZXNlbnQ6IDAtMzEKIAogSW4gdGhpcyBleGFtcGxlLCB0aGUgTlJfQ1BVUyBjb25maWcgb3B0aW9uIGlzIDEyOCwgYnV0IHRoZSBrZXJuZWwgd2FzCi1zdGFydGVkIHdpdGggcG9zc2libGVfY3B1cz0xNDQuICBUaGVyZSBhcmUgNCBjcHVzIGluIHRoZSBzeXN0ZW0gYW5kIGNwdTIKLXdhcyBtYW51YWxseSB0YWtlbiBvZmZsaW5lIChhbmQgaXMgdGhlIG9ubHkgY3B1IHRoYXQgY2FuIGJlIGJyb3VnaHQKK3N0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IENQVXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgord2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBDUFUgdGhhdCBjYW4gYmUgYnJvdWdodAogb25saW5lLikKIAogICAgICBrZXJuZWxfbWF4OiAxMjcKQEAgLTc4LDQgKzkxLDQgQEAKICAgICAgICAgcHJlc2VudDogMC0zCiAKIFNlZSBjcHUtaG90cGx1Zy50eHQgZm9yIHRoZSBwb3NzaWJsZV9jcHVzPU5VTSBrZXJuZWwgc3RhcnQgcGFyYW1ldGVyCi1hcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFzaydzLgorYXMgd2VsbCBhcyBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNwdW1hc2tzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dCBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKaW5kZXggNTlhOTFlNS4uNjExZjVhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CkBAIC02NCwxNCArNjQsMTQgQEAKIAogQmVybmhhcmQgS2FpbmRsIGVuaGFuY2VkIGZpcmVzY29wZSB0byBzdXBwb3J0IGFjY2Vzc2luZyA2NC1iaXQgbWFjaGluZXMKIGZyb20gMzItYml0IGZpcmVzY29wZSBhbmQgdmljZSB2ZXJzYToKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlc2NvcGUtMC4yLjIudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCiAKIGFuZCBoZSBpbXBsZW1lbnRlZCBmYXN0IHN5c3RlbSBkdW1wIChhbHBoYSB2ZXJzaW9uIC0gcmVhZCBSRUFETUUudHh0KToKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlZHVtcC0wLjEudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVkdW1wLTAuMS50YXIuYnoyCiAKIFRoZXJlIGlzIGFsc28gYSBnZGIgcHJveHkgZm9yIGZpcmV3aXJlIHdoaWNoIGFsbG93cyB0byB1c2UgZ2RiIHRvIGFjY2VzcwogZGF0YSB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIHN5bWJvbHMgZm91bmQgYnkgZ2RiIGluIHZtbGludXg6Ci0tIGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvdG9vbHMvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVwcm94eS0wLjMzLnRhci5iejIKIAogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZ2RiIHByb3h5IChmaXJlcHJveHktMC4zNCkgY2FuIGNvbW11bmljYXRlIChub3QKIHlldCBzdGFibGUpIHdpdGgga2dkYiBvdmVyIGFuIG1lbW9yeS1iYXNlZCBjb21tdW5pY2F0aW9uIG1vZHVsZSAoa2dkYm9tKS4KQEAgLTE3OCw3ICsxNzgsNyBAQAogCiBOb3RlcwogLS0tLS0KLURvY3VtZW50YXRpb24gYW5kIHNwZWNpZmljYXRpb25zOiBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL2RvY3MKK0RvY3VtZW50YXRpb24gYW5kIHNwZWNpZmljYXRpb25zOiBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlLwogCiBGaXJlV2lyZSBpcyBhIHRyYWRlbWFyayBvZiBBcHBsZSBJbmMuIC0gZm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvOgogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXJlV2lyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggZTFlZmM0MC4uZTE1MWIyYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC02NSw2ICs2NSw3IEBACiBhc20tb2Zmc2V0cy5oCiBhc21fb2Zmc2V0cy5oCiBhdXRvY29uZi5oKgorYXZfcGVybWlzc2lvbnMuaAogYmJvb3RzZWN0CiBiaW4yYwogYmlua2VybmVsLnNwZWMKQEAgLTk1LDEyICs5NiwxNCBAQAogZWxmMmVjb2ZmCiBlbGZjb25maWcuaCoKIGZpeGRlcAorZmxhc2suaAogZm9yZTIwMGVfbWtmaXJtCiBmb3JlMjAwZV9wY2FfZncuYyoKIGdjb25mCiBnZW4tZGV2bGlzdAogZ2VuX2NyYzMydGFibGUKIGdlbl9pbml0X2NwaW8KK2dlbmhlYWRlcnMKIGdlbmtzeW1zCiAqX2dyYXkyNTYuYwogaWhleDJmdwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dAppbmRleCBiM2UzYTAzLi5mZTc5ZTNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dApAQCAtMzEyLDEwICszMTIsOCBAQAogOC4gTWFpbGluZyBsaXN0CiAtLS0tLS0tLS0tLS0tLS0KIAotVGhlcmUgYXJlIHNldmVyYWwgZnJhbWUgYnVmZmVyIGRldmljZSByZWxhdGVkIG1haWxpbmcgbGlzdHMgYXQgU291cmNlRm9yZ2U6Ci0gIC0gbGludXgtZmJkZXYtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0LCBmb3IgYW5ub3VuY2VtZW50cywKLSAgLSBsaW51eC1mYmRldi11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCwgZm9yIGdlbmVyaWMgdXNlciBzdXBwb3J0LAotICAtIGxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCwgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4KK1RoZXJlIGlzIGEgZnJhbWUgYnVmZmVyIGRldmljZSByZWxhdGVkIG1haWxpbmcgbGlzdCBhdCBrZXJuZWwub3JnOgorbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnLgogCiBQb2ludCB5b3VyIHdlYiBicm93c2VyIHRvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZmJkZXYvIGZvcgogc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFuZCBhcmNoaXZlIGJyb3dzaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDg5YTQ3YjUuLmY2MTNkZjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTYsNiArNiwyMSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJVVNFUl9TQ0hFRAorV2hlbjoJMi42LjM0CisKK1doeToJVVNFUl9TQ0hFRCB3YXMgaW1wbGVtZW50ZWQgYXMgYSBwcm9vZiBvZiBjb25jZXB0IGZvciBncm91cCBzY2hlZHVsaW5nLgorCVRoZSBlZmZlY3Qgb2YgVVNFUl9TQ0hFRCBjYW4gYWxyZWFkeSBiZSBhY2hpZXZlZCBmcm9tIHVzZXJzcGFjZSB3aXRoCisJdGhlIGhlbHAgb2YgbGliY2dyb3VwLiBUaGUgcmVtb3ZhbCBvZiBVU0VSX1NDSEVEIHdpbGwgYWxzbyBzaW1wbGlmeQorCXRoZSBzY2hlZHVsZXIgY29kZSB3aXRoIHRoZSByZW1vdmFsIG9mIG9uZSBtYWpvciBpZmRlZi4gVGhlcmUgYXJlIGFsc28KKwlpc3N1ZXMgVVNFUl9TQ0hFRCBoYXMgd2l0aCBVU0VSX05TLiBBIGRlY2lzaW9uIHdhcyB0YWtlbiBub3QgdG8gZml4CisJdGhvc2UgYW5kIGluc3RlYWQgcmVtb3ZlIFVTRVJfU0NIRUQuIEFsc28gbmV3IGdyb3VwIHNjaGVkdWxpbmcKKwlmZWF0dXJlcyB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBmb3IgVVNFUl9TQ0hFRC4KKworV2hvOglEaGF2YWwgR2lhbmkgPGRoYXZhbEBsaW51eC52bmV0LmlibS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglQUklTTTU0CiBXaGVuOgkyLjYuMzQKIApAQCAtNDE4LDYgKzQzMywxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ3NCwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dAppbmRleCA5ZTk0Yjk0Li5hOTFlMmUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0CkBAIC0yMzUsNiArMjM1LDcgQEAKIAkJbmVnPU4JTnVtYmVyIG9mIG5lZ2F0aXZlIGxvb2t1cHMgbWFkZQogCQlwb3M9TglOdW1iZXIgb2YgcG9zaXRpdmUgbG9va3VwcyBtYWRlCiAJCWNydD1OCU51bWJlciBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbG9va3VwCisJCXRtbz1OCU51bWJlciBvZiBsb29rdXBzIHRpbWVkIG91dCBhbmQgcmVxdWV1ZWQKIAlVcGRhdGVzCW49TglOdW1iZXIgb2YgdXBkYXRlIGNvb2tpZSByZXF1ZXN0cyBzZWVuCiAJCW51bD1OCU51bWJlciBvZiB1cGQgcmVxcyBnaXZlbiBhIE5VTEwgcGFyZW50CiAJCXJ1bj1OCU51bWJlciBvZiB1cGQgcmVxcyBncmFudGVkIENQVSB0aW1lCkBAIC0yNTAsOCArMjUxLDEwIEBACiAJCW9rPU4JTnVtYmVyIG9mIHN1Y2Nlc3NmdWwgYWxsb2MgcmVxcwogCQl3dD1OCU51bWJlciBvZiBhbGxvYyByZXFzIHRoYXQgd2FpdGVkIG9uIGxvb2t1cCBjb21wbGV0aW9uCiAJCW5iZj1OCU51bWJlciBvZiBhbGxvYyByZXFzIHJlamVjdGVkIC1FTk9CVUZTCisJCWludD1OCU51bWJlciBvZiBhbGxvYyByZXFzIGFib3J0ZWQgLUVSRVNUQVJUU1lTCiAJCW9wcz1OCU51bWJlciBvZiBhbGxvYyByZXFzIHN1Ym1pdHRlZAogCQlvd3Q9TglOdW1iZXIgb2YgYWxsb2MgcmVxcyB3YWl0ZWQgZm9yIENQVSB0aW1lCisJCWFidD1OCU51bWJlciBvZiBhbGxvYyByZXFzIGFib3J0ZWQgZHVlIHRvIG9iamVjdCBkZWF0aAogCVJldHJ2bHMJbj1OCU51bWJlciBvZiByZXRyaWV2YWwgKHJlYWQpIHJlcXVlc3RzIHNlZW4KIAkJb2s9TglOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCByZXRyIHJlcXMKIAkJd3Q9TglOdW1iZXIgb2YgcmV0ciByZXFzIHRoYXQgd2FpdGVkIG9uIGxvb2t1cCBjb21wbGV0aW9uCkBAIC0yNjEsNiArMjY0LDcgQEAKIAkJb29tPU4JTnVtYmVyIG9mIHJldHIgcmVxcyBmYWlsZWQgLUVOT01FTQogCQlvcHM9TglOdW1iZXIgb2YgcmV0ciByZXFzIHN1Ym1pdHRlZAogCQlvd3Q9TglOdW1iZXIgb2YgcmV0ciByZXFzIHdhaXRlZCBmb3IgQ1BVIHRpbWUKKwkJYWJ0PU4JTnVtYmVyIG9mIHJldHIgcmVxcyBhYm9ydGVkIGR1ZSB0byBvYmplY3QgZGVhdGgKIAlTdG9yZXMJbj1OCU51bWJlciBvZiBzdG9yYWdlICh3cml0ZSkgcmVxdWVzdHMgc2VlbgogCQlvaz1OCU51bWJlciBvZiBzdWNjZXNzZnVsIHN0b3JlIHJlcXMKIAkJYWduPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgb24gYSBwYWdlIGFscmVhZHkgcGVuZGluZyBzdG9yYWdlCkBAIC0yNjgsMTIgKzI3MiwzNyBAQAogCQlvb209TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBmYWlsZWQgLUVOT01FTQogCQlvcHM9TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBzdWJtaXR0ZWQKIAkJcnVuPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgZ3JhbnRlZCBDUFUgdGltZQorCQlwZ3M9TglOdW1iZXIgb2YgcGFnZXMgZ2l2ZW4gc3RvcmUgcmVxIHByb2Nlc3NpbmcgdGltZQorCQlyeGQ9TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBkZWxldGVkIGZyb20gdHJhY2tpbmcgdHJlZQorCQlvbG09TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBvdmVyIHN0b3JlIGxpbWl0CisJVm1TY2FuCW5vcz1OCU51bWJlciBvZiByZWxlYXNlIHJlcXMgYWdhaW5zdCBwYWdlcyB3aXRoIG5vIHBlbmRpbmcgc3RvcmUKKwkJZ29uPU4JTnVtYmVyIG9mIHJlbGVhc2UgcmVxcyBhZ2FpbnN0IHBhZ2VzIHN0b3JlZCBieSB0aW1lIGxvY2sgZ3JhbnRlZAorCQlic3k9TglOdW1iZXIgb2YgcmVsZWFzZSByZXFzIGlnbm9yZWQgZHVlIHRvIGluLXByb2dyZXNzIHN0b3JlCisJCWNhbj1OCU51bWJlciBvZiBwYWdlIHN0b3JlcyBjYW5jZWxsZWQgZHVlIHRvIHJlbGVhc2UgcmVxCiAJT3BzCXBlbmQ9TglOdW1iZXIgb2YgdGltZXMgYXN5bmMgb3BzIGFkZGVkIHRvIHBlbmRpbmcgcXVldWVzCiAJCXJ1bj1OCU51bWJlciBvZiB0aW1lcyBhc3luYyBvcHMgZ2l2ZW4gQ1BVIHRpbWUKIAkJZW5xPU4JTnVtYmVyIG9mIHRpbWVzIGFzeW5jIG9wcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcKKwkJY2FuPU4JTnVtYmVyIG9mIGFzeW5jIG9wcyBjYW5jZWxsZWQKKwkJcmVqPU4JTnVtYmVyIG9mIGFzeW5jIG9wcyByZWplY3RlZCBkdWUgdG8gb2JqZWN0IGxvb2t1cC9jcmVhdGUgZmFpbHVyZQogCQlkZnI9TglOdW1iZXIgb2YgYXN5bmMgb3BzIHF1ZXVlZCBmb3IgZGVmZXJyZWQgcmVsZWFzZQogCQlyZWw9TglOdW1iZXIgb2YgYXN5bmMgb3BzIHJlbGVhc2VkCiAJCWdjPU4JTnVtYmVyIG9mIGRlZmVycmVkLXJlbGVhc2UgYXN5bmMgb3BzIGdhcmJhZ2UgY29sbGVjdGVkCisJQ2FjaGVPcAlhbG89TglOdW1iZXIgb2YgaW4tcHJvZ3Jlc3MgYWxsb2Nfb2JqZWN0KCkgY2FjaGUgb3BzCisJCWx1bz1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyBsb29rdXBfb2JqZWN0KCkgY2FjaGUgb3BzCisJCWx1Yz1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyBsb29rdXBfY29tcGxldGUoKSBjYWNoZSBvcHMKKwkJZ3JvPU4JTnVtYmVyIG9mIGluLXByb2dyZXNzIGdyYWJfb2JqZWN0KCkgY2FjaGUgb3BzCisJCXVwbz1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyB1cGRhdGVfb2JqZWN0KCkgY2FjaGUgb3BzCisJCWRybz1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyBkcm9wX29iamVjdCgpIGNhY2hlIG9wcworCQlwdG89TglOdW1iZXIgb2YgaW4tcHJvZ3Jlc3MgcHV0X29iamVjdCgpIGNhY2hlIG9wcworCQlzeW49TglOdW1iZXIgb2YgaW4tcHJvZ3Jlc3Mgc3luY19jYWNoZSgpIGNhY2hlIG9wcworCQlhdGM9TglOdW1iZXIgb2YgaW4tcHJvZ3Jlc3MgYXR0cl9jaGFuZ2VkKCkgY2FjaGUgb3BzCisJCXJhcD1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyByZWFkX29yX2FsbG9jX3BhZ2UoKSBjYWNoZSBvcHMKKwkJcmFzPU4JTnVtYmVyIG9mIGluLXByb2dyZXNzIHJlYWRfb3JfYWxsb2NfcGFnZXMoKSBjYWNoZSBvcHMKKwkJYWxwPU4JTnVtYmVyIG9mIGluLXByb2dyZXNzIGFsbG9jYXRlX3BhZ2UoKSBjYWNoZSBvcHMKKwkJYWxzPU4JTnVtYmVyIG9mIGluLXByb2dyZXNzIGFsbG9jYXRlX3BhZ2VzKCkgY2FjaGUgb3BzCisJCXdycD1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyB3cml0ZV9wYWdlKCkgY2FjaGUgb3BzCisJCXVjcD1OCU51bWJlciBvZiBpbi1wcm9ncmVzcyB1bmNhY2hlX3BhZ2UoKSBjYWNoZSBvcHMKKwkJZHNwPU4JTnVtYmVyIG9mIGluLXByb2dyZXNzIGRpc3NvY2lhdGVfcGFnZXMoKSBjYWNoZSBvcHMKIAogCiAgKCopIC9wcm9jL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtCkBAIC0yOTksNiArMzI4LDg3IEBACiAgICAgIGppZmZ5IHJhbmdlIGNvdmVyZWQsIGFuZCB0aGUgU0VDUyBmaWVsZCB0aGUgZXF1aXZhbGVudCBudW1iZXIgb2Ygc2Vjb25kcy4KIAogCis9PT09PT09PT09PQorT0JKRUNUIExJU1QKKz09PT09PT09PT09CisKK0lmIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUIGlzIGVuYWJsZWQsIHRoZSBGUy1DYWNoZSBmYWNpbGl0eSB3aWxsIG1haW50YWluIGEKK2xpc3Qgb2YgYWxsIHRoZSBvYmplY3RzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYW5kIGFsbG93IHRoZW0gdG8gYmUgdmlld2VkCit0aHJvdWdoOgorCisJL3Byb2MvZnMvZnNjYWNoZS9vYmplY3RzCisKK1RoaXMgd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisJW3Jvb3RAYW5kcm9tZWRhIH5dIyBoZWFkIC9wcm9jL2ZzL2ZzY2FjaGUvb2JqZWN0cworCU9CSkVDVCAgIFBBUkVOVCAgIFNUQVQgQ0hMRE4gT1BTIE9PUCBJUFIgRVggUkVBRFMgRU0gRVYgRiBTIHwgTkVURlNfQ09PS0lFX0RFRiBUWSBGTCBORVRGU19EQVRBICAgICAgIE9CSkVDVF9LRVksIEFVWF9EQVRBCisJPT09PT09PT0gPT09PT09PT0gPT09PSA9PT09PSA9PT0gPT09ID09PSA9PSA9PT09PSA9PSA9PSA9ID0gfCA9PT09PT09PT09PT09PT09ID09ID09ID09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQorCSAgIDE3ZTRiICAgICAgICAyIEFDVFYgICAgIDAgICAwICAgMCAgIDAgIDAgICAgIDAgN2IgIDQgMCA4IHwgTkZTLmZoICAgICAgICAgICBEVCAgMCBmZmZmODgwMDFkZDgyODIwIDAxMDAwNjAxN2VkY2Y4YmJjOTNiNDMyOThmZGZiZTcxZTUwYjU3YjEzYTE3MmMwMTE3ZjM4NDcyLCBlNTY3NjM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzZjI0MDRhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzkwMzAwMDAwMDAwMDAwMDAwMDAwMDAwNjNmMjQwNGEKKwkgICAxNjkzYSAgICAgICAgMiBBQ1RWICAgICAwICAgMCAgIDAgICAwICAwICAgICAwIDdiICA0IDAgOCB8IE5GUy5maCAgICAgICAgICAgRFQgIDAgZmZmZjg4MDAyZGIyMzM4MCAwMTAwMDYwMTdlZGNmOGJiYzkzYjQzMjk4ZmRmYmU3MWU1MGI1N2IxZTAxNjJjMDFhMmRmMGVhNiwgNDIwZWJjNGEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MjBlYmM0YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlMTgwMTAwMDAwMDAwMDAwMDAwMDAwMDQyMGViYzRhCisKK3doZXJlIHRoZSBmaXJzdCBzZXQgb2YgY29sdW1ucyBiZWZvcmUgdGhlICd8JyBkZXNjcmliZSB0aGUgb2JqZWN0OgorCisJQ09MVU1OCURFU0NSSVBUSU9OCisJPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlPQkpFQ1QJT2JqZWN0IGRlYnVnZ2luZyBJRCAoYXBwZWFycyBhcyBPQkoleCBpbiBzb21lIGRlYnVnIG1lc3NhZ2VzKQorCVBBUkVOVAlEZWJ1Z2dpbmcgSUQgb2YgcGFyZW50IG9iamVjdAorCVNUQVQJT2JqZWN0IHN0YXRlCisJQ0hMRE4JTnVtYmVyIG9mIGNoaWxkIG9iamVjdHMgb2YgdGhpcyBvYmplY3QKKwlPUFMJTnVtYmVyIG9mIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMgb24gdGhpcyBvYmplY3QKKwlPT1AJTnVtYmVyIG9mIG91dHN0YW5kaW5nIGNoaWxkIG9iamVjdCBtYW5hZ2VtZW50IG9wZXJhdGlvbnMKKwlJUFIKKwlFWAlOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgZXhjbHVzaXZlIG9wZXJhdGlvbnMKKwlSRUFEUwlOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVhZCBvcGVyYXRpb25zCisJRU0JT2JqZWN0J3MgZXZlbnQgbWFzaworCUVWCUV2ZW50cyByYWlzZWQgb24gdGhpcyBvYmplY3QKKwlGCU9iamVjdCBmbGFncworCVMJT2JqZWN0IHNsb3ctd29yayB3b3JrIGl0ZW0gZmxhZ3MKKworYW5kIHRoZSBzZWNvbmQgc2V0IG9mIGNvbHVtbnMgZGVzY3JpYmUgdGhlIG9iamVjdCdzIGNvb2tpZSwgaWYgcHJlc2VudDoKKworCUNPTFVNTgkJREVTQ1JJUFRJT04KKwk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCU5FVEZTX0NPT0tJRV9ERUYgTmFtZSBvZiBuZXRmcyBjb29raWUgZGVmaW5pdGlvbgorCVRZCQlDb29raWUgdHlwZSAoSVggLSBpbmRleCwgRFQgLSBkYXRhLCBoZXggLSBzcGVjaWFsKQorCUZMCQlDb29raWUgZmxhZ3MKKwlORVRGU19EQVRBCU5ldGZzIHByaXZhdGUgZGF0YSBzdG9yZWQgaW4gdGhlIGNvb2tpZQorCU9CSkVDVF9LRVkJT2JqZWN0IGtleQl9IDEgY29sdW1uLCB3aXRoIHNlcGFyYXRpbmcgY29tbWEKKwlBVVhfREFUQQlPYmplY3QgYXV4IGRhdGEJfSBwcmVzZW5jZSBtYXkgYmUgY29uZmlndXJlZAorCitUaGUgZGF0YSBzaG93biBtYXkgYmUgZmlsdGVyZWQgYnkgYXR0YWNoaW5nIHRoZSBhIGtleSB0byBhbiBhcHByb3ByaWF0ZSBrZXlyaW5nCitiZWZvcmUgdmlld2luZyB0aGUgZmlsZS4gIFNvbWV0aGluZyBsaWtlOgorCisJCWtleWN0bCBhZGQgdXNlciBmc2NhY2hlOm9iamxpc3QgPHJlc3RyaWN0aW9ucz4gQHMKKword2hlcmUgPHJlc3RyaWN0aW9ucz4gYXJlIGEgc2VsZWN0aW9uIG9mIHRoZSBmb2xsb3dpbmcgbGV0dGVyczoKKworCUsJU2hvdyBoZXhkdW1wIG9mIG9iamVjdCBrZXkgKGRvbid0IHNob3cgaWYgbm90IGdpdmVuKQorCUEJU2hvdyBoZXhkdW1wIG9mIG9iamVjdCBhdXggZGF0YSAoZG9uJ3Qgc2hvdyBpZiBub3QgZ2l2ZW4pCisKK2FuZCB0aGUgZm9sbG93aW5nIHBhaXJlZCBsZXR0ZXJzOgorCisJQwlTaG93IG9iamVjdHMgdGhhdCBoYXZlIGEgY29va2llCisJYwlTaG93IG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEgY29va2llCisJQglTaG93IG9iamVjdHMgdGhhdCBhcmUgYnVzeQorCWIJU2hvdyBvYmplY3RzIHRoYXQgYXJlbid0IGJ1c3kKKwlXCVNob3cgb2JqZWN0cyB0aGF0IGhhdmUgcGVuZGluZyB3cml0ZXMKKwl3CVNob3cgb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgcGVuZGluZyB3cml0ZXMKKwlSCVNob3cgb2JqZWN0cyB0aGF0IGhhdmUgb3V0c3RhbmRpbmcgcmVhZHMKKwlyCVNob3cgb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgb3V0c3RhbmRpbmcgcmVhZHMKKwlTCVNob3cgb2JqZWN0cyB0aGF0IGhhdmUgc2xvdyB3b3JrIHF1ZXVlZAorCXMJU2hvdyBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBzbG93IHdvcmsgcXVldWVkCisKK0lmIG5laXRoZXIgc2lkZSBvZiBhIGxldHRlciBwYWlyIGlzIGdpdmVuLCB0aGVuIGJvdGggYXJlIGltcGxpZWQuICBGb3IgZXhhbXBsZToKKworCWtleWN0bCBhZGQgdXNlciBmc2NhY2hlOm9iamxpc3QgS0IgQHMKKworc2hvd3Mgb2JqZWN0cyB0aGF0IGFyZSBidXN5LCBhbmQgbGlzdHMgdGhlaXIgb2JqZWN0IGtleXMsIGJ1dCBkb2VzIG5vdCBkdW1wCit0aGVpciBhdXhpbGlhcnkgZGF0YS4gIEl0IGFsc28gaW1wbGllcyAiQ2NXd1JyU3MiLCBidXQgYXMgJ0InIGlzIGdpdmVuLCAnYicgaXMKK25vdCBpbXBsaWVkLgorCitCeSBkZWZhdWx0IGFsbCBvYmplY3RzIGFuZCBhbGwgZmllbGRzIHdpbGwgYmUgc2hvd24uCisKKwogPT09PT09PT09CiBERUJVR0dJTkcKID09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dAppbmRleCAyNjY2YjFlLi4xOTAyYzU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dApAQCAtNjQxLDcgKzY0MSw3IEBACiAKIEZ1cnRoZXJtb3JlLCBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjYW5jZWwgdGhlIGFzeW5jaHJvbm91cyByZWFkIG9yIHdyaXRlCiBvcGVyYXRpb24gc3RhcnRlZCBieSB0aGUgcmVhZC9hbGxvYyBhbmQgd3JpdGUgZnVuY3Rpb25zLCBzbyB0aGUgcGFnZQotaW52YWxpZGF0aW9uIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBtdXN0IHVzZToKK2ludmFsaWRhdGlvbiBmdW5jdGlvbnMgbXVzdCB1c2U6CiAKIAlib29sIGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKIAkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSk7CkBAIC02NTQsNiArNjU0LDI1IEBACiB0byB3YWl0IGZvciBpdCB0byBmaW5pc2ggaWYgaXQgaXMuCiAKIAorV2hlbiByZWxlYXNlcGFnZSgpIGlzIGJlaW5nIGltcGxlbWVudGVkLCBhIHNwZWNpYWwgRlMtQ2FjaGUgZnVuY3Rpb24gZXhpc3RzIHRvCittYW5hZ2UgdGhlIGhldXJpc3RpY3Mgb2YgY29waW5nIHdpdGggdm1zY2FuIHRyeWluZyB0byBlamVjdCBwYWdlcywgd2hpY2ggbWF5Citjb25mbGljdCB3aXRoIHRoZSBjYWNoZSB0cnlpbmcgdG8gd3JpdGUgcGFnZXMgdG8gdGhlIGNhY2hlICh3aGljaCBtYXkgaXRzZWxmCituZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSk6CisKKwlib29sIGZzY2FjaGVfbWF5YmVfcmVsZWFzZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJZ2ZwX3QgZ2ZwKTsKKworVGhpcyB0YWtlcyB0aGUgbmV0ZnMgY29va2llLCBhbmQgdGhlIHBhZ2UgYW5kIGdmcCBhcmd1bWVudHMgYXMgc3VwcGxpZWQgdG8KK3JlbGVhc2VwYWdlKCkuICBJdCB3aWxsIHJldHVybiBmYWxzZSBpZiB0aGUgcGFnZSBjYW5ub3QgYmUgcmVsZWFzZWQgeWV0IGZvcgorc29tZSByZWFzb24gYW5kIGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhlIHBhZ2UgaGFzIGJlZW4gdW5jYWNoZWQgYW5kIGNhbiBub3cgYmUKK3JlbGVhc2VkLgorCitUbyBtYWtlIGEgcGFnZSBhdmFpbGFibGUgZm9yIHJlbGVhc2UsIHRoaXMgZnVuY3Rpb24gbWF5IHdhaXQgZm9yIGFuIG91dHN0YW5kaW5nCitzdG9yYWdlIHJlcXVlc3QgdG8gY29tcGxldGUsIG9yIGl0IG1heSBhdHRlbXB0IHRvIGNhbmNlbCB0aGUgc3RvcmFnZSByZXF1ZXN0IC0KK2luIHdoaWNoIGNhc2UgdGhlIHBhZ2Ugd2lsbCBub3QgYmUgc3RvcmVkIGluIHRoZSBjYWNoZSB0aGlzIHRpbWUuCisKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIElOREVYIEFORCBEQVRBIEZJTEUgVVBEQVRFCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKaW5kZXggYmY0ZjRiNy4uNmQ5NGUwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CkBAIC0xMzQsOSArMTM0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAJbW91bnQgb3B0aW9ucyAicm8sbm9sb2FkIiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50CiAJCSAgICAgCXdyaXRlcyB0byB0aGUgZmlsZXN5c3RlbS4KIAoram91cm5hbF9jaGVja3N1bQlFbmFibGUgY2hlY2tzdW1taW5nIG9mIHRoZSBqb3VybmFsIHRyYW5zYWN0aW9ucy4KKwkJCVRoaXMgd2lsbCBhbGxvdyB0aGUgcmVjb3ZlcnkgY29kZSBpbiBlMmZzY2sgYW5kIHRoZQorCQkJa2VybmVsIHRvIGRldGVjdCBjb3JydXB0aW9uIGluIHRoZSBrZXJuZWwuICBJdCBpcyBhCisJCQljb21wYXRpYmxlIGNoYW5nZSBhbmQgd2lsbCBiZSBpZ25vcmVkIGJ5IG9sZGVyIGtlcm5lbHMuCisKIGpvdXJuYWxfYXN5bmNfY29tbWl0CUNvbW1pdCBibG9jayBjYW4gYmUgd3JpdHRlbiB0byBkaXNrIHdpdGhvdXQgd2FpdGluZwogCQkJZm9yIGRlc2NyaXB0b3IgYmxvY2tzLiBJZiBlbmFibGVkIG9sZGVyIGtlcm5lbHMgY2Fubm90Ci0JCQltb3VudCB0aGUgZGV2aWNlLgorCQkJbW91bnQgdGhlIGRldmljZS4gVGhpcyB3aWxsIGVuYWJsZSAnam91cm5hbF9jaGVja3N1bScKKwkJCWludGVybmFsbHkuCiAKIGpvdXJuYWw9dXBkYXRlCQlVcGRhdGUgdGhlIGV4dDQgZmlsZSBzeXN0ZW0ncyBqb3VybmFsIHRvIHRoZSBjdXJyZW50CiAJCQlmb3JtYXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CmluZGV4IGMyYTA4NzEuLmM1OGI5ZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIudHh0CkBAIC0yMCwxNSArMjAsMTYgQEAKIEF1dGhvcnMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyOgogSm9lbCBCZWNrZXIgICA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KIFphY2ggQnJvd24gICAgPHphY2guYnJvd25Ab3JhY2xlLmNvbT4KLU1hcmsgRmFzaGVoICAgPG1hcmsuZmFzaGVoQG9yYWNsZS5jb20+CitNYXJrIEZhc2hlaCAgIDxtZmFzaGVoQHN1c2UuY29tPgogS3VydCBIYWNrZWwgICA8a3VydC5oYWNrZWxAb3JhY2xlLmNvbT4KK1RhbyBNYSAgICAgICAgPHRhby5tYUBvcmFjbGUuY29tPgogU3VuaWwgTXVzaHJhbiA8c3VuaWwubXVzaHJhbkBvcmFjbGUuY29tPgogTWFuaXNoIFNpbmdoICA8bWFuaXNoLnNpbmdoQG9yYWNsZS5jb20+CitUaWdlciBZYW5nICAgIDx0aWdlci55YW5nQG9yYWNsZS5jb20+CiAKIENhdmVhdHMKID09PT09PT0KIEZlYXR1cmVzIHdoaWNoIE9DRlMyIGRvZXMgbm90IHN1cHBvcnQgeWV0OgotCS0gcXVvdGFzCiAJLSBEaXJlY3RvcnkgY2hhbmdlIG5vdGlmaWNhdGlvbiAoRl9OT1RJRlkpCiAJLSBEaXN0cmlidXRlZCBDYWNoaW5nIChGX1NFVExFQVNFL0ZfR0VUTEVBU0UvYnJlYWtfbGVhc2UpCiAKQEAgLTcwLDcgKzcxLDYgQEAKIAkJCXBlcmZvcm1hbmNlLgogbG9jYWxhbGxvYz04KCopCQlBbGxvd3MgY3VzdG9tIGxvY2FsYWxsb2Mgc2l6ZSBpbiBNQi4gSWYgdGhlIHZhbHVlIGlzIHRvbwogCQkJbGFyZ2UsIHRoZSBmcyB3aWxsIHNpbGVudGx5IHJldmVydCBpdCB0byB0aGUgZGVmYXVsdC4KLQkJCUxvY2FsYWxsb2MgaXMgbm90IGVuYWJsZWQgZm9yIGxvY2FsIG1vdW50cy4KIGxvY2FsZmxvY2tzCQlUaGlzIGRpc2FibGVzIGNsdXN0ZXIgYXdhcmUgZmxvY2suCiBpbm9kZTY0CQkJSW5kaWNhdGVzIHRoYXQgT2NmczIgaXMgYWxsb3dlZCB0byBjcmVhdGUgaW5vZGVzIGF0CiAJCQlhbnkgbG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0sIGluY2x1ZGluZyB0aG9zZSB3aGljaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggMmM0OGY5NC4uNGFmMDAxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC0xMDcyLDcgKzEwNzIsOCBAQAogLSBpcnE6IHNlcnZpY2luZyBpbnRlcnJ1cHRzCiAtIHNvZnRpcnE6IHNlcnZpY2luZyBzb2Z0aXJxcwogLSBzdGVhbDogaW52b2x1bnRhcnkgd2FpdAotLSBndWVzdDogcnVubmluZyBhIGd1ZXN0CistIGd1ZXN0OiBydW5uaW5nIGEgbm9ybWFsIGd1ZXN0CistIGd1ZXN0X25pY2U6IHJ1bm5pbmcgYSBuaWNlZCBndWVzdAogCiBUaGUgImludHIiIGxpbmUgZ2l2ZXMgY291bnRzIG9mIGludGVycnVwdHMgIHNlcnZpY2VkIHNpbmNlIGJvb3QgdGltZSwgZm9yIGVhY2gKIG9mIHRoZSAgcG9zc2libGUgc3lzdGVtIGludGVycnVwdHMuICAgVGhlIGZpcnN0ICBjb2x1bW4gIGlzIHRoZSAgdG90YWwgb2YgIGFsbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggZGNiZDUwMi4uODJkZWY4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTM1MywxMCArMzUzLDIwIEBACiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KIAotcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbAlQb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsLiAgQSBwb2xsCisJCQkJbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gdGhpcyBmaWxlIGlmIHRoZQorCQkJCWhhcmR3YXJlIGNoYW5nZXMgdGhlIGF2ZXJhZ2luZyBpbnRlcnZhbC4KIAkJCQlVbml0OiBtaWxsaXNlY29uZHMKIAkJCQlSVwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWxfbWF4CU1heGltdW0gcG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcworCQkJCVJPCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9taW4JTWluaW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKwogcG93ZXJbMS0qXV9hdmVyYWdlX2hpZ2hlc3QJSGlzdG9yaWNhbCBhdmVyYWdlIG1heGltdW0gcG93ZXIgdXNlCiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KQEAgLTM2NSw2ICszNzUsMTggQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfbWF4CQlBIHBvbGwgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8KKwkJCQlwb3dlclsxLSpdX2F2ZXJhZ2Ugd2hlbiBwb3dlciB1c2UKKwkJCQlyaXNlcyBhYm92ZSB0aGlzIHZhbHVlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9taW4JCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXNpbmtzIGJlbG93IHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKwogcG93ZXJbMS0qXV9pbnB1dAkJSW5zdGFudGFuZW91cyBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzgxLDYgKzQwMywzOSBAQAogCQkJCWF2ZXJhZ2VfaGlnaGVzdCBhbmQgYXZlcmFnZV9sb3dlc3QuCiAJCQkJV08KIAorcG93ZXJbMS0qXV9hY2N1cmFjeQkJQWNjdXJhY3kgb2YgdGhlIHBvd2VyIG1ldGVyLgorCQkJCVVuaXQ6IFBlcmNlbnQKKwkJCQlSTworCitwb3dlclsxLSpdX2FsYXJtCQkxIGlmIHRoZSBzeXN0ZW0gaXMgZHJhd2luZyBtb3JlIHBvd2VyIHRoYW4gdGhlCisJCQkJY2FwIGFsbG93czsgMCBvdGhlcndpc2UuICBBIHBvbGwgbm90aWZpY2F0aW9uIGlzCisJCQkJc2VudCB0byB0aGlzIGZpbGUgd2hlbiB0aGUgcG93ZXIgdXNlIGV4Y2VlZHMgdGhlCisJCQkJY2FwLiAgVGhpcyBmaWxlIG9ubHkgYXBwZWFycyBpZiB0aGUgY2FwIGlzIGtub3duCisJCQkJdG8gYmUgZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJUk8KKworcG93ZXJbMS0qXV9jYXAJCQlJZiBwb3dlciB1c2UgcmlzZXMgYWJvdmUgdGhpcyBsaW1pdCwgdGhlCisJCQkJc3lzdGVtIHNob3VsZCB0YWtlIGFjdGlvbiB0byByZWR1Y2UgcG93ZXIgdXNlLgorCQkJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJY2FwIGlzIGNoYW5nZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhlICpfY2FwCisJCQkJZmlsZXMgb25seSBhcHBlYXIgaWYgdGhlIGNhcCBpcyBrbm93biB0byBiZQorCQkJCWVuZm9yY2VkIGJ5IGhhcmR3YXJlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX2h5c3QJCU1hcmdpbiBvZiBoeXN0ZXJlc2lzIGJ1aWx0IGFyb3VuZCBjYXBwaW5nIGFuZAorCQkJCW5vdGlmaWNhdGlvbi4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCitwb3dlclsxLSpdX2NhcF9tYXgJCU1heGltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCitwb3dlclsxLSpdX2NhcF9taW4JCU1pbmltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCiAqKioqKioqKioqCiAqIEVuZXJneSAqCiAqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAppbmRleCBjNWIzN2M1Li5hYzU0MGM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKQEAgLTgsNyArOCw3IEBACiAgICAgRGF0YXNoZWV0OiBPbmx5IGF2YWlsYWJsZSB2aWEgTkRBIGZyb20gU2VydmVyV29ya3MKICAgKiBBVEkgSVhQMjAwLCBJWFAzMDAsIElYUDQwMCwgU0I2MDAsIFNCNzAwIGFuZCBTQjgwMCBzb3V0aGJyaWRnZXMKICAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKLSAgKiBBTUQgU0I5MDAKKyAgKiBBTUQgSHVkc29uLTIKICAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKICAgKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgKFNNU0MpIFNMQzkwRTY2IChWaWN0b3J5NjYpIHNvdXRoYnJpZGdlCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNNU0Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNtc2MuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDkxMDdiMzguLmZjZTViNWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC04NSw3ICs4NSw2IEBACiAJUFBUCVBhcmFsbGVsIHBvcnQgc3VwcG9ydCBpcyBlbmFibGVkLgogCVBTMglBcHByb3ByaWF0ZSBQUy8yIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlSQU0JUkFNIGRpc2sgc3VwcG9ydCBpcyBlbmFibGVkLgotCVJPT1RQTFVHIFRoZSBleGFtcGxlIFJvb3QgUGx1ZyBMU00gaXMgZW5hYmxlZC4KIAlTMzkwCVMzOTAgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJU0NTSQlBcHByb3ByaWF0ZSBTQ1NJIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAkJCUEgbG90IG9mIGRyaXZlcnMgaGFzIHRoZWlyIG9wdGlvbnMgZGVzY3JpYmVkIGluc2lkZSBvZgpAQCAtMzQ1LDYgKzM0NCwxNSBAQAogCQkJQ2hhbmdlIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uIG91dHB1dAogCQkJd2hlbiBpbml0aWFsaXNpbmcgdGhlIEFQSUMgYW5kIElPLUFQSUMgY29tcG9uZW50cy4KIAorCXNob3dfbGFwaWM9CVtBUElDLFg4Nl0gQWR2YW5jZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyCisJCQlMaW1pdCBhcGljIGR1bXBpbmcuIFRoZSBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgbWF4aW1hbAorCQkJbnVtYmVyIG9mIGxvY2FsIGFwaWNzIGJlaW5nIGR1bXBlZC4gQWxzbyBpdCBpcyBwb3NzaWJsZQorCQkJdG8gc2V0IGl0IHRvICJhbGwiIGJ5IG1lYW5pbmcgLS0gbm8gbGltaXQgaGVyZS4KKwkJCUZvcm1hdDogeyAxIChkZWZhdWx0KSB8IDIgfCAuLi4gfCBhbGwgfS4KKwkJCVRoZSBwYXJhbWV0ZXIgdmFsaWQgaWYgb25seSBhcGljPWRlYnVnIG9yCisJCQlhcGljPXZlcmJvc2UgaXMgc3BlY2lmaWVkLgorCQkJRXhhbXBsZTogYXBpYz1kZWJ1ZyBzaG93X2xhcGljPWFsbAorCiAJYXBtPQkJW0FQTV0gQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudAogCQkJU2VlIGhlYWRlciBvZiBhcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMuCiAKQEAgLTc3OSw2ICs3ODcsMTMgQEAKIAkJCWJ5IHRoZSBzZXRfZnRyYWNlX25vdHJhY2UgZmlsZSBpbiB0aGUgZGVidWdmcwogCQkJdHJhY2luZyBkaXJlY3RvcnkuCiAKKwlmdHJhY2VfZ3JhcGhfZmlsdGVyPVtmdW5jdGlvbi1saXN0XQorCQkJW0ZUUkFDRV0gTGltaXQgdGhlIHRvcCBsZXZlbCBjYWxsZXJzIGZ1bmN0aW9ucyB0cmFjZWQKKwkJCWJ5IHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgYXQgYm9vdCB1cC4KKwkJCWZ1bmN0aW9uLWxpc3QgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmdW5jdGlvbnMKKwkJCXRoYXQgY2FuIGJlIGNoYW5nZWQgYXQgcnVuIHRpbWUgYnkgdGhlCisJCQlzZXRfZ3JhcGhfZnVuY3Rpb24gZmlsZSBpbiB0aGUgZGVidWdmcyB0cmFjaW5nIGRpcmVjdG9yeS4KKwogCWdhbWVjb24ubWFwWzJ8M109CiAJCQlbSFcsSk9ZXSBNdWx0aXN5c3RlbSBqb3lzdGljayBhbmQgTkVTL1NORVMvUFNYIHBhZAogCQkJc3VwcG9ydCB2aWEgcGFyYWxsZWwgcG9ydCAodXAgdG8gNSBkZXZpY2VzIHBlciBwb3J0KQpAQCAtMjAzMiw4ICsyMDQ3LDE1IEBACiAKIAlwcmludC1mYXRhbC1zaWduYWxzPQogCQkJW0tOTF0gZGVidWc6IHByaW50IGZhdGFsIHNpZ25hbHMKLQkJCXByaW50LWZhdGFsLXNpZ25hbHM9MTogcHJpbnQgc2VnZmF1bHQgaW5mbyB0bwotCQkJdGhlIGtlcm5lbCBjb25zb2xlLgorCisJCQlJZiBlbmFibGVkLCB3YXJuIGFib3V0IHZhcmlvdXMgc2lnbmFsIGhhbmRsaW5nCisJCQlyZWxhdGVkIGFwcGxpY2F0aW9uIGFub21hbGllczogdG9vIG1hbnkgc2lnbmFscywKKwkJCXRvbyBtYW55IFBPU0lYLjEgdGltZXJzLCBmYXRhbCBzaWduYWxzIGNhdXNpbmcgYQorCQkJY29yZWR1bXAgLSBldGMuCisKKwkJCUlmIHlvdSBoaXQgdGhlIHdhcm5pbmcgZHVlIHRvIHNpZ25hbCBvdmVyZmxvdywKKwkJCXlvdSBtaWdodCB3YW50IHRvIHRyeSAidWxpbWl0IC1pIHVubGltaXRlZCIuCisKIAkJCWRlZmF1bHQ6IG9mZi4KIAogCXByaW50ay50aW1lPQlTaG93IHRpbWluZyBkYXRhIHByZWZpeGVkIHRvIGVhY2ggcHJpbnRrIG1lc3NhZ2UgbGluZQpAQCAtMjE2NCwxNSArMjE4Niw2IEBACiAJCQlVc2VmdWwgZm9yIGRldmljZXMgdGhhdCBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkKIAkJCShlLmcuIFVTQiBhbmQgTU1DIGRldmljZXMpLgogCi0Jcm9vdF9wbHVnLnZlbmRvcl9pZD0KLQkJCVtST09UUExVR10gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmVuZG9yIElECi0KLQlyb290X3BsdWcucHJvZHVjdF9pZD0KLQkJCVtST09UUExVR10gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvZHVjdCBJRAotCi0Jcm9vdF9wbHVnLmRlYnVnPQotCQkJW1JPT1RQTFVHXSBFbmFibGUgZGVidWdnaW5nIG91dHB1dAotCiAJcncJCVtLTkxdIE1vdW50IHJvb3QgZGV2aWNlIHJlYWQtd3JpdGUgb24gYm9vdAogCiAJUwkJW0tOTF0gUnVuIGluaXQgaW4gc2luZ2xlIG1vZGUKQEAgLTIxODIsNiArMjE5NSw4IEBACiAKIAlzYm5pPQkJW05FVF0gR3JhbmNoIFNCTkkxMiBsZWFzZWQgbGluZSBhZGFwdGVyCiAKKwlzY2hlZF9kZWJ1ZwlbS05MXSBFbmFibGVzIHZlcmJvc2Ugc2NoZWR1bGVyIGRlYnVnIG1lc3NhZ2VzLgorCiAJc2MxMjAwd2R0PQlbSFcsV0RUXSBTQzEyMDAgV0RUICh3YXRjaGRvZykgZHJpdmVyCiAJCQlGb3JtYXQ6IDxpbz5bLDx0aW1lb3V0PlssPGlzYXBucD5dXQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKaW5kZXggMDU5OTM0My4uNDQ2ZjQzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dApAQCAtMSw1ICsxLDE3IEBACiBUaGlzIGZpbGUgZGV0YWlscyBjaGFuZ2VzIGluIDIuNiB3aGljaCBhZmZlY3QgUENNQ0lBIGNhcmQgZHJpdmVyIGF1dGhvcnM6CiAKKyogbm8gY3NfZXJyb3IgLyBDU19DSEVDSyAvIENPTkZJR19QQ01DSUFfREVCVUcgKGFzIG9mIDIuNi4zMykKKyAgIEluc3RlYWQgb2YgdGhlIGNzX2Vycm9yKCkgY2FsbGJhY2sgb3IgdGhlIENTX0NIRUNLKCkgbWFjcm8sIHBsZWFzZSB1c2UKKyAgIExpbnV4LXN0eWxlIGNoZWNraW5nIG9mIHJldHVybiB2YWx1ZXMsIGFuZCAtLSBpZiBuZWNlc3NhcnkgLS0gZGVidWcKKyAgIG1lc3NhZ2VzIHVzaW5nICJkZXZfZGJnKCkiIG9yICJwcl9kZWJ1ZygpIi4KKworKiBOZXcgQ0lTIHR1cGxlIGFjY2VzcyAoYXMgb2YgMi42LjMzKQorICAgSW5zdGVhZCBvZiBwY21jaWFfZ2V0X3tmaXJzdCxuZXh0fV90dXBsZSgpLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoKSBhbmQKKyAgIHBjbWNpYV9wYXJzZV90dXBsZSgpLCBhIGRyaXZlciBzaGFsbCB1c2UgInBjbWNpYV9nZXRfdHVwbGUoKSIgaWYgaXQgaXMKKyAgIG9ubHkgaW50ZXJlc3RlZCBpbiBvbmUgKHJhdykgdHVwbGUsIG9yICJwY21jaWFfbG9vcF90dXBsZSgpIiBpZiBpdCBpcworICAgaW50ZXJlc3RlZCBpbiBhbGwgdHVwbGVzIG9mIG9uZSB0eXBlLiBUbyBkZWNvZGUgdGhlIE1BQyBmcm9tIENJU1RQTF9GVU5DRSwKKyAgIGEgbmV3IGhlbHBlciAicGNtY2lhX2dldF9tYWNfZnJvbV9jaXMoKSIgd2FzIGFkZGVkLgorCiAqIE5ldyBjb25maWd1cmF0aW9uIGxvb3AgaGVscGVyIChhcyBvZiAyLjYuMjgpCiAgICBCeSBjYWxsaW5nIHBjbWNpYV9sb29wX2NvbmZpZygpLCBhIGRyaXZlciBjYW4gaXRlcmF0ZSBvdmVyIGFsbCBhdmFpbGFibGUKICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRHVyaW5nIGEgZHJpdmVyJ3MgcHJvYmUoKSBwaGFzZSwgb25lIGRvZXNuJ3QgbmVlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0CmluZGV4IGViYzUwZjguLjlkYmY0NDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQKQEAgLTQxLDYgKzQxLDEzIEBACiBPcGVyYXRpb25zIG9mIGJvdGggdHlwZXMgbWF5IHNsZWVwIGR1cmluZyBleGVjdXRpb24sIHRodXMgdHlpbmcgdXAgdGhlIHRocmVhZAogbG9hbmVkIHRvIGl0LgogCitBIGZ1cnRoZXIgY2xhc3Mgb2Ygd29yayBpdGVtIGlzIGF2YWlsYWJsZSwgYmFzZWQgb24gdGhlIHNsb3cgd29yayBpdGVtIGNsYXNzOgorCisgKCopIERlbGF5ZWQgc2xvdyB3b3JrIGl0ZW1zLgorCitUaGVzZSBhcmUgc2xvdyB3b3JrIGl0ZW1zIHRoYXQgaGF2ZSBhIHRpbWVyIHRvIGRlZmVyIHF1ZXVlaW5nIG9mIHRoZSBpdGVtIGZvcgorYSB3aGlsZS4KKwogCiBUSFJFQUQtVE8tQ0xBU1MgQUxMT0NBVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY0LDkgKzcxLDExIEBACiBGaXJzdGx5LCBhIG1vZHVsZSBvciBzdWJzeXN0ZW0gd2FudGluZyB0byBtYWtlIHVzZSBvZiBzbG93IHdvcmsgaXRlbXMgbXVzdAogcmVnaXN0ZXIgaXRzIGludGVyZXN0OgogCi0JIGludCByZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCSBpbnQgcmV0ID0gc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIoc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKIAotVGhpcyB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgLXZlIGVycm9yIHVwb24gZmFpbHVyZS4KK1RoaXMgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIC12ZSBlcnJvciB1cG9uIGZhaWx1cmUuICBUaGUgbW9kdWxlCitwb2ludGVyIHNob3VsZCBiZSB0aGUgbW9kdWxlIGludGVyZXN0ZWQgaW4gdXNpbmcgdGhpcyBmYWNpbGl0eSAoYWxtb3N0CitjZXJ0YWlubHkgVEhJU19NT0RVTEUpLgogCiAKIFNsb3cgd29yayBpdGVtcyBtYXkgdGhlbiBiZSBzZXQgdXAgYnk6CkBAIC05Myw2ICsxMDIsMTAgQEAKIAogICAgICBvcjoKIAorCWRlbGF5ZWRfc2xvd193b3JrX2luaXQoJm15aXRlbSwgJm15aXRlbV9vcHMpOworCisgICAgIG9yOgorCiAJdnNsb3dfd29ya19pbml0KCZteWl0ZW0sICZteWl0ZW1fb3BzKTsKIAogICAgICBkZXBlbmRpbmcgb24gaXRzIGNsYXNzLgpAQCAtMTAyLDE1ICsxMTUsOTIgQEAKIAlpbnQgcmV0ID0gc2xvd193b3JrX2VucXVldWUoJm15aXRlbSk7CiAKIFRoaXMgd2lsbCByZXR1cm4gYSAtdmUgZXJyb3IgaWYgdGhlIHRocmVhZCBwb29sIGlzIHVuYWJsZSB0byBnYWluIGEgcmVmZXJlbmNlCi1vbiB0aGUgaXRlbSwgMCBvdGhlcndpc2UuCitvbiB0aGUgaXRlbSwgMCBvdGhlcndpc2UsIG9yIChmb3IgZGVsYXllZCB3b3JrKToKKworCWludCByZXQgPSBkZWxheWVkX3Nsb3dfd29ya19lbnF1ZXVlKCZteWl0ZW0sIG15X2ppZmZ5X2RlbGF5KTsKIAogCiBUaGUgaXRlbXMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyB0aGVyZSBvdWdodCB0byBiZSBubyBuZWVkIGZvciBhIGZsdXNoCi1vcGVyYXRpb24uICBXaGVuIGFsbCBhIG1vZHVsZSdzIHNsb3cgd29yayBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBhbmQgdGhlCitvcGVyYXRpb24uICBCdXQgYXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBvcHRpb25hbCwgbWVhbnMgdG8gY2FuY2VsCitleGlzdGluZyB3b3JrIGl0ZW1zIGFyZSBhbHNvIGluY2x1ZGVkOgorCisJY2FuY2VsX3Nsb3dfd29yaygmbXlpdGVtKTsKKwljYW5jZWxfZGVsYXllZF9zbG93X3dvcmsoJm15aXRlbSk7CisKK2NhbiBiZSB1c2VkIHRvIGNhbmNlbCBwZW5kaW5nIHdvcmsuICBUaGUgYWJvdmUgY2FuY2VsIGZ1bmN0aW9uIHdhaXRzIGZvcgorZXhpc3Rpbmcgd29yayB0byBoYXZlIGJlZW4gZXhlY3V0ZWQgKG9yIHByZXZlbnQgZXhlY3V0aW9uIG9mIHRoZW0sIGRlcGVuZGluZworb24gdGltaW5nKS4KKworCitXaGVuIGFsbCBhIG1vZHVsZSdzIHNsb3cgd29yayBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBhbmQgdGhlCiBtb2R1bGUgaGFzIG5vIGZ1cnRoZXIgaW50ZXJlc3QgaW4gdGhlIGZhY2lsaXR5LCBpdCBzaG91bGQgdW5yZWdpc3RlciBpdHMKIGludGVyZXN0OgogCi0Jc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcigpOworCXNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKKworVGhlIG1vZHVsZSBwb2ludGVyIGlzIHVzZWQgdG8gd2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIHdvcmsgaXRlbXMgZm9yIHRoYXQKK21vZHVsZSBiZWZvcmUgY29tcGxldGluZyB0aGUgdW5yZWdpc3RyYXRpb24uICBUaGlzIHByZXZlbnRzIHRoZSBwdXRfcmVmKCkgY29kZQorZnJvbSBiZWluZyB0YWtlbiBhd2F5IGJlZm9yZSBpdCBjb21wbGV0ZXMuICBtb2R1bGUgc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkgYmUKK1RISVNfTU9EVUxFLgorCisKKz09PT09PT09PT09PT09PT0KK0hFTFBFUiBGVU5DVElPTlMKKz09PT09PT09PT09PT09PT0KKworVGhlIHNsb3ctd29yayBmYWNpbGl0eSBwcm92aWRlcyBhIGZ1bmN0aW9uIGJ5IHdoaWNoIGl0IGNhbiBiZSBkZXRlcm1pbmVkCit3aGV0aGVyIG9yIG5vdCBhbiBpdGVtIGlzIHF1ZXVlZCBmb3IgbGF0ZXIgZXhlY3V0aW9uOgorCisJYm9vbCBxdWV1ZWQgPSBzbG93X3dvcmtfaXNfcXVldWVkKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCitJZiBpdCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBpdGVtIGlzIG5vdCBvbiB0aGUgcXVldWUgKGl0IG1heSBiZSBleGVjdXRpbmcKK3dpdGggYSByZXF1ZXVlIHBlbmRpbmcpLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3b3JrIG91dCB3aGV0aGVyIGFuIGl0ZW0gb24gd2hpY2gKK2Fub3RoZXIgZGVwZW5kcyBpcyBvbiB0aGUgcXVldWUsIHRodXMgYWxsb3dpbmcgYSBkZXBlbmRlbnQgaXRlbSB0byBiZSBxdWV1ZWQKK2FmdGVyIGl0LgorCitJZiB0aGUgYWJvdmUgc2hvd3MgYW4gaXRlbSBvbiB3aGljaCBhbm90aGVyIGRlcGVuZHMgbm90IHRvIGJlIHF1ZXVlZCwgdGhlbiB0aGUKK293bmVyIG9mIHRoZSBkZXBlbmRlbnQgaXRlbSBtaWdodCBuZWVkIHRvIHdhaXQuICBIb3dldmVyLCB0byBhdm9pZCBsb2NraW5nIHVwCit0aGUgdGhyZWFkcyB1bm5lY2Vzc2FyaWx5IGJlIHNsZWVwaW5nIGluIHRoZW0sIGl0IGNhbiBtYWtlIHNlbnNlIHVuZGVyIHNvbWUKK2NpcmN1bXN0YW5jZXMgdG8gcmV0dXJuIHRoZSB3b3JrIGl0ZW0gdG8gdGhlIHF1ZXVlLCB0aHVzIGRlZmVycmluZyBpdCB1bnRpbAorc29tZSBvdGhlciBpdGVtcyBoYXZlIGhhZCBhIGNoYW5jZSB0byBtYWtlIHVzZSBvZiB0aGUgeWllbGRlZCB0aHJlYWQuCisKK1RvIHlpZWxkIGEgdGhyZWFkIGFuZCBkZWZlciBhbiBpdGVtLCB0aGUgd29yayBmdW5jdGlvbiBzaG91bGQgc2ltcGx5IGVucXVldWUKK3RoZSB3b3JrIGl0ZW0gYWdhaW4gYW5kIHJldHVybi4gIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCB3b3JrIGlmIHRoZXJlJ3Mgbm90aGluZworYWN0dWFsbHkgb24gdGhlIHF1ZXVlLCBhcyB0aGUgdGhyZWFkIGp1c3QgdmFjYXRlZCB3aWxsIGp1bXAgc3RyYWlnaHQgYmFjayBpbnRvCit0aGUgaXRlbSdzIHdvcmsgZnVuY3Rpb24sIHRodXMgYnVzeSB3YWl0aW5nIG9uIGEgQ1BVLgorCitJbnN0ZWFkLCB0aGUgaXRlbSBzaG91bGQgdXNlIHRoZSB0aHJlYWQgdG8gd2FpdCBmb3IgdGhlIGRlcGVuZGVuY3kgdG8gZ28gYXdheSwKK2J1dCByYXRoZXIgdGhhbiB1c2luZyBzY2hlZHVsZSgpIG9yIHNjaGVkdWxlX3RpbWVvdXQoKSB0byBzbGVlcCwgaXQgc2hvdWxkIHVzZQordGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworCWJvb2wgcmVxdWV1ZSA9IHNsb3dfd29ya19zbGVlcF90aWxsX3RocmVhZF9uZWVkZWQoCisJCQlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLAorCQkJc2lnbmVkIGxvbmcgKl90aW1lb3V0KTsKKworVGhpcyB3aWxsIGFkZCBhIHNlY29uZCB3YWl0IGFuZCB0aGVuIHNsZWVwLCBzdWNoIHRoYXQgaXQgd2lsbCBiZSB3b2tlbiB1cCBpZgorZWl0aGVyIHNvbWV0aGluZyBhcHBlYXJzIG9uIHRoZSBxdWV1ZSB0aGF0IGNvdWxkIHVzZWZ1bGx5IG1ha2UgdXNlIG9mIHRoZQordGhyZWFkIC0gYW5kIGJlaGluZCB3aGljaCB0aGlzIGl0ZW0gY2FuIGJlIHF1ZXVlZCwgb3IgaWYgdGhlIGV2ZW50IHRoZSBjYWxsZXIKK3NldCB1cCB0byB3YWl0IGZvciBoYXBwZW5zLiAgVHJ1ZSB3aWxsIGJlIHJldHVybmVkIGlmIHNvbWV0aGluZyBlbHNlIGFwcGVhcmVkCitvbiB0aGUgcXVldWUgYW5kIHRoaXMgd29yayBmdW5jdGlvbiBzaG91bGQgcGVyaGFwcyByZXR1cm4sIG9mIGZhbHNlIGlmCitzb21ldGhpbmcgZWxzZSB3b2tlIGl0IHVwLiAgVGhlIHRpbWVvdXQgaXMgYXMgZm9yIHNjaGVkdWxlX3RpbWVvdXQoKS4KKworRm9yIGV4YW1wbGU6CisKKwl3cSA9IGJpdF93YWl0cXVldWUoJm15X2ZsYWdzLCBNWV9CSVQpOworCWluaXRfd2FpdCgmd2FpdCk7CisJcmVxdWV1ZSA9IGZhbHNlOworCWRvIHsKKwkJcHJlcGFyZV90b193YWl0KHdxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAoIXRlc3RfYml0KE1ZX0JJVCwgJm15X2ZsYWdzKSkKKwkJCWJyZWFrOworCQlyZXF1ZXVlID0gc2xvd193b3JrX3NsZWVwX3RpbGxfdGhyZWFkX25lZWRlZCgmbXlfd29yaywKKwkJCQkJCQkgICAgICZ0aW1lb3V0KTsKKwl9IHdoaWxlICh0aW1lb3V0ID4gMCAmJiAhcmVxdWV1ZSk7CisJZmluaXNoX3dhaXQod3EsICZ3YWl0KTsKKwlpZiAoIXRlc3RfYml0KE1ZX0JJVCwgJm15X2ZsYWdzKQorCQlnb3RvIGRvX215X3RoaW5nOworCWlmIChyZXF1ZXVlKQorCQlyZXR1cm47IC8vIHRvIHNsb3dfd29yawogCiAKID09PT09PT09PT09PT09PQpAQCAtMTE4LDcgKzIwOCw4IEBACiA9PT09PT09PT09PT09PT0KIAogRWFjaCB3b3JrIGl0ZW0gcmVxdWlyZXMgYSB0YWJsZSBvZiBvcGVyYXRpb25zIG9mIHR5cGUgc3RydWN0IHNsb3dfd29ya19vcHMuCi1BbGwgbWVtYmVycyBhcmUgcmVxdWlyZWQ6CitPbmx5IC0+ZXhlY3V0ZSgpIGlzIHJlcXVpcmVkOyB0aGUgZ2V0dGluZyBhbmQgcHV0dGluZyBvZiBhIHJlZmVyZW5jZSBhbmQgdGhlCitkZXNjcmliaW5nIG9mIGFuIGl0ZW0gYXJlIGFsbCBvcHRpb25hbC4KIAogICgqKSBHZXQgYSByZWZlcmVuY2Ugb24gYW4gaXRlbToKIApAQCAtMTQ4LDYgKzIzOSwxNiBAQAogICAgICBUaGlzIHNob3VsZCBwZXJmb3JtIHRoZSB3b3JrIHJlcXVpcmVkIG9mIHRoZSBpdGVtLiAgSXQgbWF5IHNsZWVwLCBpdCBtYXkKICAgICAgcGVyZm9ybSBkaXNrIEkvTyBhbmQgaXQgbWF5IHdhaXQgZm9yIGxvY2tzLgogCisgKCopIFZpZXcgYW4gaXRlbSB0aHJvdWdoIC9wcm9jOgorCisJdm9pZCAoKmRlc2MpKHN0cnVjdCBzbG93X3dvcmsgKndvcmssIHN0cnVjdCBzZXFfZmlsZSAqbSk7CisKKyAgICAgSWYgc3VwcGxpZWQsIHRoaXMgc2hvdWxkIHByaW50IHRvICdtJyBhIHNtYWxsIHN0cmluZyBkZXNjcmliaW5nIHRoZSB3b3JrCisgICAgIHRoZSBpdGVtIGlzIHRvIGRvLiAgVGhpcyBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIGFib3V0IDQwIGNoYXJhY3RlcnMsIGFuZAorICAgICBzaG91bGRuJ3QgaW5jbHVkZSBhIG5ld2xpbmUgY2hhcmFjdGVyLgorCisgICAgIFNlZSB0aGUgJ1ZpZXdpbmcgZXhlY3V0aW5nIGFuZCBxdWV1ZWQgaXRlbXMnIHNlY3Rpb24gYmVsb3cuCisKIAogPT09PT09PT09PT09PT09PT09CiBQT09MIENPTkZJR1VSQVRJT04KQEAgLTE3MiwzICsyNzMsNTAgQEAKICAgICAgaXMgYm91bmRlZCB0byBiZXR3ZWVuIDEgYW5kIG9uZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgb2YgYWN0aXZlIHRocmVhZHMuCiAgICAgIFRoaXMgZW5zdXJlcyB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHRocmVhZCB0aGF0IGNhbiBwcm9jZXNzIHZlcnkKICAgICAgc2xvdyB3b3JrIGl0ZW1zLCBhbmQgYWx3YXlzIGF0IGxlYXN0IG9uZSB0aHJlYWQgdGhhdCB3b24ndC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWSUVXSU5HIEVYRUNVVElORyBBTkQgUVVFVUVEIElURU1TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgZW5hYmxlZCwgYSBkZWJ1Z2ZzIGZpbGUgaXMgbWFkZSBhdmFpbGFibGU6CisKKwkvc3lzL2tlcm5lbC9kZWJ1Zy9zbG93X3dvcmsvcnVucXVldWUKKwordGhyb3VnaCB3aGljaCB0aGUgbGlzdCBvZiB3b3JrIGl0ZW1zIGJlaW5nIGV4ZWN1dGVkIGFuZCB0aGUgcXVldWVzIG9mIGl0ZW1zIHRvCitiZSBleGVjdXRlZCBtYXkgYmUgdmlld2VkLiAgVGhlIG93bmVyIG9mIGEgd29yayBpdGVtIGlzIGdpdmVuIHRoZSBjaGFuY2UgdG8KK2FkZCBzb21lIGluZm9ybWF0aW9uIG9mIGl0cyBvd24uCisKK1RoZSBjb250ZW50cyBsb29rIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICBUSFIgUElEICAgSVRFTSBBRERSICAgICAgICBGTCBNQVJLICBERVNDCisgICAgPT09ID09PT09ID09PT09PT09PT09PT09PT0gPT0gPT09PT0gPT09PT09PT09PQorICAgICAgMCAgMzAwNSBmZmZmODgwMDIzZjUyMzQ4ICBhIDk1Mm1zIEZTQzogT0JKMTdkMzogTE9PSworICAgICAgMSAgMzAwNiBmZmZmODgwMDI0ZTMzNjY4ICAyIDE2MG1zIEZTQzogT0JKMTdlNSBPUDYwZDNiOiBXcml0ZTEvU3RvcmUgZmw9MgorICAgICAgMiAgMzE2NSBmZmZmODgwMDI5NmRkMTgwICBhIDQyNG1zIEZTQzogT0JKMTdlNDogTE9PSworICAgICAgMyAgNDA4OSBmZmZmODgwMDI2MmM4ZDc4ICBhIDIxMm1zIEZTQzogT0JKMTdlYTogQ1JUTgorICAgICAgNCAgNDA5MCBmZmZmODgwMDI3OTJiZWQ4ICAyIDM4OG1zIEZTQzogT0JKMTdlOCBPUDYwZDM2OiBXcml0ZTEvU3RvcmUgZmw9MgorICAgICAgNSAgNDA5MiBmZmZmODgwMDJhMGVmMzA4ICAyIDM4OG1zIEZTQzogT0JKMTdlNyBPUDYwZDJlOiBXcml0ZTEvU3RvcmUgZmw9MgorICAgICAgNiAgNDA5NCBmZmZmODgwMDJhYmFmNGI4ICAyIDEzMm1zIEZTQzogT0JKMTdlMiBPUDYwZDRlOiBXcml0ZTEvU3RvcmUgZmw9MgorICAgICAgNyAgNDA5NSBmZmZmODgwMDJiYjE4OGUwICBhIDM4OG1zIEZTQzogT0JKMTdlOTogQ1JUTgorICAgIHZzcSAgICAgLSBmZmZmODgwMDIzZDk5NjY4ICAxIDMwOG1zIEZTQzogT0JKMTdlMCBPUDYwZjkxOiBXcml0ZTEvRW5RIGZsPTIKKyAgICB2c3EgICAgIC0gZmZmZjg4MDAyOTVkMTc0MCAgMSAyMTJtcyBGU0M6IE9CSjE2YmUgT1A0ZDRiNjogV3JpdGUxL0VuUSBmbD0yCisgICAgdnNxICAgICAtIGZmZmY4ODAwMjViYTMzMDggIDEgMTYwbXMgRlNDOiBPQkoxNzlhIE9QNThkZWM6IFdyaXRlMS9FblEgZmw9MgorICAgIHZzcSAgICAgLSBmZmZmODgwMDI0ZWM4M2UwICAxIDE2MG1zIEZTQzogT0JKMTdhZSBPUDU5OWYyOiBXcml0ZTEvRW5RIGZsPTIKKyAgICB2c3EgICAgIC0gZmZmZjg4MDAyNjYxOGUwMCAgMSAxNjBtcyBGU0M6IE9CSjE3ZTYgT1A2MGQzMzogV3JpdGUxL0VuUSBmbD0yCisgICAgdnNxICAgICAtIGZmZmY4ODAwMjVhMmE0YjggIDEgMTMybXMgRlNDOiBPQkoxNmEyIE9QNGQ1ODM6IFdyaXRlMS9FblEgZmw9MgorICAgIHZzcSAgICAgLSBmZmZmODgwMDIzY2JlNmQ4ICA5IDIxMm1zIEZTQzogT0JKMTdlYjogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI0ZDM3NTkwICA5IDIxMm1zIEZTQzogT0JKMTdlYzogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI3NzQ2Y2IwICA5IDIxMm1zIEZTQzogT0JKMTdlZDogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI0ZDM3YWU4ICA5IDIxMm1zIEZTQzogT0JKMTdlZTogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI0ZDM3Y2IwICA5IDIxMm1zIEZTQzogT0JKMTdlZjogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI1MDM2NTUwICA5IDIxMm1zIEZTQzogT0JKMTdmMDogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI1MDM2OGUwICA5IDIxMm1zIEZTQzogT0JKMTdmMTogTE9PSworICAgIHZzcSAgICAgLSBmZmZmODgwMDI1MDM2YWE4ICA5IDIxMm1zIEZTQzogT0JKMTdmMjogTE9PSworCitJbiB0aGUgJ1RIUicgY29sdW1uLCBleGVjdXRpbmcgaXRlbXMgc2hvdyB0aGUgdGhyZWFkIHRoZXkncmUgb2NjdXB5aW5nIGFuZAorcXVldWVkIHRocmVhZHMgaW5kaWNhdGUgd2hpY2ggcXVldWUgdGhleSdyZSBvbi4gICdQSUQnIHNob3dzIHRoZSBwcm9jZXNzIElEIG9mCithIHNsb3ctd29yayB0aHJlYWQgdGhhdCdzIGV4ZWN1dGluZyBzb21ldGhpbmcuICAnRkwnIHNob3dzIHRoZSB3b3JrIGl0ZW0gZmxhZ3MuCisnTUFSSycgaW5kaWNhdGVzIGhvdyBsb25nIHNpbmNlIGFuIGl0ZW0gd2FzIHF1ZXVlZCBvciBiZWdhbiBleGVjdXRpbmcuICBMYXN0bHksCit0aGUgJ0RFU0MnIGNvbHVtbiBwZXJtaXRzIHRoZSBvd25lciBvZiBhbiBpdGVtIHRvIGdpdmUgc29tZSBpbmZvcm1hdGlvbi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCAxYzhlYjQ1Li5mZDlhMmY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtNTIyLDcgKzUyMiw3IEBACiAgICAgcGNtX2RldnMgICAgICAgLSBOdW1iZXIgb2YgUENNIGRldmljZXMgYXNzaWduZWQgdG8gZWFjaCBjYXJkCiAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA9IDEsIHVwIHRvIDQpCiAgICAgcGNtX3N1YnN0cmVhbXMgLSBOdW1iZXIgb2YgUENNIHN1YnN0cmVhbXMgYXNzaWduZWQgdG8gZWFjaCBQQ00KLSAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTYpCisgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA9IDgsIHVwIHRvIDEyOCkKICAgICBocnRpbWVyICAgICAgICAtIFVzZSBocnRpbWVyICg9MSwgZGVmYXVsdCkgb3Igc3lzdGVtIHRpbWVyICg9MCkKICAgICBmYWtlX2J1ZmZlciAgICAtIEZha2UgYnVmZmVyIGFsbG9jYXRpb25zIChkZWZhdWx0ID0gMSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAppbmRleCA3MGQ2OGNlLi5hODdkYzI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dApAQCAtMSw1ICsxLDUgQEAKIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgSG93IFRvCi09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXcml0dGVuIGJ5IFN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPiwgWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogCkBAIC0xMCwyMCArMTAsMjAgQEAKIAogMC4gSW50cm9kdWN0aW9uCiAKLVRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lIGRldmljZXMgKHNlbnNvcnMpCi1hbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3RlciB3aXRoIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQKLXNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCitUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIHRoZXJtYWwgem9uZQorZGV2aWNlcyAoc2Vuc29ycykgYW5kIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIChmYW4sIHByb2Nlc3Nvci4uLikgdG8gcmVnaXN0ZXIKK3dpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudCBzb2x1dGlvbiBhbmQgdG8gYmUgYSBwYXJ0IG9mIGl0LgogCi1UaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0byBwYXJ0aWNpcGF0ZQotaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgotVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMgYW5kCi1jb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgorVGhpcyBob3ctdG8gZm9jdXNlcyBvbiBlbmFibGluZyBuZXcgdGhlcm1hbCB6b25lIGFuZCBjb29saW5nIGRldmljZXMgdG8KK3BhcnRpY2lwYXRlIGluIHRoZXJtYWwgbWFuYWdlbWVudC4KK1RoaXMgc29sdXRpb24gaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgYW5kIGFueSB0eXBlIG9mIHRoZXJtYWwgem9uZSBkZXZpY2VzCithbmQgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4KIAotVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzIGFzIHdlbGwKLWFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCi1BbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIGlucHV0cwotZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQgdGVtcGVyYXR1cmUpCi1hbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KK1RoZSBtYWluIHRhc2sgb2YgdGhlIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGlzIHRvIGV4cG9zZSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcworYXMgd2VsbCBhcyBjb29saW5nIGRldmljZSBhdHRyaWJ1dGVzIHRvIHRoZSB1c2VyIHNwYWNlLgorQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIGNhbiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgoraW5wdXRzIGZyb20gdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgKHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGFuZCB0cmlwIHBvaW50Cit0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlIGRldmljZXMuCiAKIFswLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKIFsxLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKQEAgLTMxLDc3ICszMSw3NyBAQAogMS4gdGhlcm1hbCBzeXNmcyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucwogCiAxLjEgdGhlcm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCB0cmlwcywKLQkJCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKKzEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCisJCWludCB0cmlwcywgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHMpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlIChzZW5zb3IpIHRvCisgICAgL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhcyB0aGVybWFsX3pvbmVbMC0qXS4gSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlCisgICAgdGhlcm1hbCBjb29saW5nIGRldmljZXMgcmVnaXN0ZXJlZCBhdCB0aGUgc2FtZSB0aW1lLgogCi0JbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgotCXRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgotCWRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKLQlvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KLQkJLmJpbmQ6IGJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJLmdldF9tb2RlOiBnZXQgdGhlIGN1cnJlbnQgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkgICAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCi0JCQkgICAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKLQkJCSAgIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIHRha2UgY2hhcmdlIG9mIHRoZXJtYWwgbWFuYWdlbWVudC4KLQkJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KLQkJLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCQkJCXdpbGwgYmUgZmlyZWQuCisgICAgbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgorICAgIHRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKKyAgICBvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KKwkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkudW5iaW5kOiB1bmJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkgICAgLSAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCisJICAgIC0gInVzZXIiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1hbCBkcml2ZXIgYWN0aW9ucyB1cG9uIHRyaXAgcG9pbnRzCisJICAgICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgorCS5zZXRfbW9kZTogc2V0IHRoZSBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KKwkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50CisJCQl3aWxsIGJlIGZpcmVkLgogCiAxLjEuMiB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCUl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZCB1bmJpbmQgYWxsCi0JdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZS4KKyAgICBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQKKyAgICB1bmJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgogCiAxLjIgdGhlcm1hbCBjb29saW5nIGRldmljZSBpbnRlcmZhY2UKIDEuMi4xIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCi0JCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQorCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCBjb29saW5nIGRldmljZSAoZmFuL3Byb2Nlc3Nvci8uLi4pIHRvCi0JL3N5cy9jbGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4KLQlJdCB0cmllcyB0byBiaW5kIGl0c2VsZiB0byBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHJlZ2lzdGVyIGF0IHRoZSBzYW1lIHRpbWUuCi0JbmFtZTogdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YS4KLQlvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCi0JCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KLQkJLnNldF9jdXJfc3RhdGU6IHNldCB0aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikKKyAgICB0byAvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGl0c2VsZgorICAgIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KKyAgICBkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgorICAgIG9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KKwkuZ2V0X21heF9zdGF0ZTogZ2V0IHRoZSBNYXhpbXVtIHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KIAogMS4yLjIgdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZAotCWl0c2VsZiBmcm9tIGFsbAl0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBpdHNlbGYgZnJvbSBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHVzaW5nIGl0LgogCiAxLjMgaW50ZXJmYWNlIGZvciBiaW5kaW5nIGEgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQogMS4zLjEgaW50IHRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKLQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCSBpbiB0aGlzIHRoZXJtYWwgem9uZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwCisgICAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCisgICAgdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCisgICAgY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQorICAgIHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCisJICBpbiB0aGlzIHRoZXJtYWwgem9uZS4KIAogMS4zLjIgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bmJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGZyb20gdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCW9mIGEgdGhlcm1hbCB6b25lIGRldmljZS4KLQlUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCWluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbgorICAgIHRyaXAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluCisgICAgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAyLiBzeXNmcyBhdHRyaWJ1dGVzIHN0cnVjdHVyZQogCkBAIC0xMTQsMTUzICsxMTQsMTY2IEBACiAKIFRoZXJtYWwgem9uZSBkZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKIC9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKLQl8LS0tLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQotCXwtLS0tLW1vZGU6CQkJV29ya2luZyBtb2RlIG9mIHRoZSB0aGVybWFsIHpvbmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10ZW1wOgkJCUN1cnJlbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tdHJpcF9wb2ludF9bMC0qXV90eXBlOglUcmlwIHBvaW50IHR5cGUKIAogVGhlcm1hbCBjb29saW5nIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlWzAtKl06Ci0JfC0tLS0tdHlwZSA6CQkJVHlwZSBvZiB0aGUgY29vbGluZyBkZXZpY2UocHJvY2Vzc29yL2Zhbi8uLi4pCi0JfC0tLS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQotCXwtLS0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKKyAgICB8LS0tdHlwZToJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKKyAgICB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS1jdXJfc3RhdGU6CQlDdXJyZW50IGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCiAKIAotVGhlc2UgdHdvIGR5bmFtaWMgYXR0cmlidXRlcyBhcmUgY3JlYXRlZC9yZW1vdmVkIGluIHBhaXJzLgotVGhleSByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgdGhlcm1hbCB6b25lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb29saW5nIGRldmljZS4KLVRoZXkgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBmb3IgZWFjaAotdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZSBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KK1RoZW4gbmV4dCB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuIFRoZXkgcmVwcmVzZW50Cit0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgorVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCit0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlLgogCi0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl0KLQl8LS0tLS1jZGV2WzAtKl06CQlUaGUgWzAtKl10aCBjb29saW5nIGRldmljZSBpbiB0aGUgY3VycmVudCB0aGVybWFsIHpvbmUKLQl8LS0tLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKKy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKKyAgICB8LS0tY2RldlswLSpdOgkJWzAtKl10aCBjb29saW5nIGRldmljZSBpbiBjdXJyZW50IHRoZXJtYWwgem9uZQorICAgIHwtLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKIAogQmVzaWRlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZSBzeXNmcyBJL0YgYW5kIGNvb2xpbmcgZGV2aWNlIHN5c2ZzIEkvRiwKLXRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8gb2YKLXRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbiBjbGFzcyBkZXZpY2UKLWFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBBQ1BJIHRoZXJtYWwgem9uZXMuCit0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciBhbHNvIGNyZWF0ZXMgYSBod21vbiBzeXNmcyBJL0YgZm9yIGVhY2ggX3R5cGVfCitvZiB0aGVybWFsIHpvbmUgZGV2aWNlLiBFLmcuIHRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIHJlZ2lzdGVycyBvbmUgaHdtb24KK2NsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29jaWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQKK0FDUEkgdGhlcm1hbCB6b25lcy4KKwogL3N5cy9jbGFzcy9od21vbi9od21vblswLSpdOgotCXwtLS0tLW5hbWU6CQkJVGhlIHR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzLgotCXwtLS0tLXRlbXBbMS0qXV9pbnB1dDoJCVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KLQl8LS0tLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KKyAgICB8LS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMKKyAgICB8LS0tdGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKyAgICB8LS0tdGVtcFsxLSpdX2NyaXRpY2FsOglUaGUgY3JpdGljYWwgdHJpcCBwb2ludCBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKwogUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUaGVybWFsIHpvbmUgYXR0cmlidXRlcyAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotdHlwZQkJCQlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCi0JCQkJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgotCQkJCUVnOiAiYWNwaXR6IiBpbmRpY2F0ZXMgaXQncyBhbiBBQ1BJIHRoZXJtYWwgZGV2aWNlLgotCQkJCUluIG9yZGVyIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIGh3bW9uIHN5cyBhdHRyaWJ1dGUsCi0JCQkJdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbG93ZXJjYXNlIHN0cmluZywKLQkJCQlub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRoZXJtYWwgem9uZSB0eXBlLgorCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKwlFLmc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCisJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZTsgdGhpcyBzaG91bGQKKwliZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLCBub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KKwlSTywgUmVxdWlyZWQKIAotdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0ZW1wCisJQ3VycmVudCB0ZW1wZXJhdHVyZSBhcyByZXBvcnRlZCBieSB0aGVybWFsIHpvbmUgKHNlbnNvcikuCisJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCVJPLCBSZXF1aXJlZAogCi1tb2RlCQkJCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0KLQkJCQlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobQotCQkJCXRoYXQgaXMgY3VycmVudGx5IG1hbmFnaW5nIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkJSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZCBhbGdvcml0aG0KLQkJCQlvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgotCQkJCVJXCi0JCQkJT3B0aW9uYWwKLQkJCQlrZXJuZWwJPSBUaGVybWFsIG1hbmFnZW1lbnQgaW4ga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIuCi0JCQkJdXNlcgk9IFByZXZlbnRpbmcga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIgYWN0aW9ucyB1cG9uCi0JCQkJCSAgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uIGNhbiB0YWtlIGZ1bGwKLQkJCQkJICBjaGFyZ2Ugb2YgdGhlIHRoZXJtYWwgbWFuYWdlbWVudC4KK21vZGUKKwlPbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGluIFtrZXJuZWwsIHVzZXJdLgorCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5CisJbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4gSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZAorCWFsZ29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgorCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KKwl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KKwkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAorCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorCVJXLCBPcHRpb25hbAogCi10cmlwX3BvaW50X1swLSpdX3RlbXAJCVRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0cmlwIHBvaW50IHdpbGwgYmUgZmlyZWQKLQkJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90ZW1wCisJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdHlwZSAJCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQKLQkJCQlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwKLQkJCQkgICAgYWN0aXZlWzAtKl0gZm9yIEFDUEkgdGhlcm1hbCB6b25lLgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK3RyaXBfcG9pbnRfWzAtKl1fdHlwZQorCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCisJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLSpdIGZvciBBQ1BJCisJdGhlcm1hbCB6b25lLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl0JCQlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKLQkJCQlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdCisJU3lzZnMgbGluayB0byB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZSBub2RlIHdoZXJlIHRoZSBzeXMgSS9GCisJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxpbmcgY29udHJvbCByZXByZXNlbnRzLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl1fdHJpcF9wb2ludAkJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwgem9uZQotCQkJCS0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwIHBvaW50LgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK2NkZXZbMC0qXV90cmlwX3BvaW50CisJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwKKwl6b25lOyAtMSBtZWFucyB0aGUgY29vbGluZyBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJpcAorCXBvaW50LgorCVJPLCBPcHRpb25hbAogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29vbGluZyBkZXZpY2UgIGF0dHJpYnV0ZXMgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXNzaXZlCisJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9uZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUgY29vbGluZworCXBvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSB0aGVybWFsIGRyaXZlci4gRGVmYXVsdCBpcyB6ZXJvCisJYW5kIGNhbiBiZSBzZXQgdG8gYSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzKSB0byBlbmFibGUgYQorCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKKwlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KKwlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVJXLCBPcHRpb25hbAogCi10eXBlCQkJCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZQotCQkJCWVnOiBGb3IgZ2VuZXJpYyBBQ1BJOiB0aGlzIHNob3VsZCBiZSAiRmFuIiwKLQkJCQkiUHJvY2Vzc29yIiBvciAiTENEIgotCQkJCWVnLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKLQkJCQl0aGlzIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1tYXhfc3RhdGUJCQlUaGUgbWF4aW11bSBwZXJtaXNzaWJsZSBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAordHlwZQorCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgorCS0gZm9yIGdlbmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvciAiTENEIgorCS0gZm9yIG1lbW9yeSBjb250cm9sbGVyIGRldmljZSBvbiBpbnRlbF9tZW5sb3cgcGxhdGZvcm06CisJICBzaG91bGQgYmUgIk1lbW9yeSBjb250cm9sbGVyIi4KKwlSTywgUmVxdWlyZWQKIAotY3VyX3N0YXRlCQkJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgotCQkJCXRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZSwKLQkJCQljdXJfc3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCi0JCQkJY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgotCQkJCVJXCi0JCQkJUmVxdWlyZWQKK21heF9zdGF0ZQorCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KKwlSTywgUmVxdWlyZWQKKworY3VyX3N0YXRlCisJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZToKKwktIGN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKKwktIGN1cl9zdGF0ZSA9PSBtYXhfc3RhdGUgbWVhbnMgdGhlIG1heGltdW0gY29vbGluZy4KKwlSVywgUmVxdWlyZWQKIAogMy4gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24KIAotQUNQSSB0aGVybWFsIHpvbmUgbWF5IHN1cHBvcnQgbXVsdGlwbGUgdHJpcCBwb2ludHMgbGlrZSBjcml0aWNhbC9ob3QvcGFzc2l2ZS9hY3RpdmUuCi1JZiBhbiBBQ1BJIHRoZXJtYWwgem9uZSBzdXBwb3J0cyBjcml0aWNhbCwgcGFzc2l2ZSwgYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwKLWl0IG1heSByZWdpc3RlciBpdHNlbGYgYXMgYSB0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgotSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMgdGhlcm1hbF9jb29saW5nX2RldmljZS4KLUlmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMCBtZXRob2QsCi10aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CitBQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsLCBob3QsCitwYXNzaXZlLCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLAorYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwgaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhCit0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgorSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMKK3RoZXJtYWxfY29vbGluZ19kZXZpY2UuCisKK0lmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMAorbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CiAKIC9zeXMvY2xhc3MvdGhlcm1hbDoKIAogfHRoZXJtYWxfem9uZTE6Ci0JfC0tLS0tdHlwZToJCQlhY3BpdHoKLQl8LS0tLS10ZW1wOgkJCTM3MDAwCi0JfC0tLS0tbW9kZToJCQlrZXJuZWwKLQl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAotCXwtLS0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfM190eXBlOglhY3RpdmUxCi0JfC0tLS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKLQl8LS0tLS1jZGV2MF90cmlwX3BvaW50OgkJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLwotCXwtLS0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCi0JfC0tLS0tY2RldjFfdHJpcF9wb2ludDoJCTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCisgICAgfC0tLXR5cGU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXA6CQkJMzcwMDAKKyAgICB8LS0tbW9kZToJCQlrZXJuZWwKKyAgICB8LS0tdHJpcF9wb2ludF8wX3RlbXA6CTEwMDAwMAorICAgIHwtLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKKyAgICB8LS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMV90eXBlOglwYXNzaXZlCisgICAgfC0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAorICAgIHwtLS10cmlwX3BvaW50XzNfdGVtcDoJNjAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKKyAgICB8LS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKKyAgICB8LS0tY2RldjBfdHJpcF9wb2ludDoJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLworICAgIHwtLS1jZGV2MToJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMworICAgIHwtLS1jZGV2MV90cmlwX3BvaW50OgkyCS8qIGNkZXYxIGNhbiBiZSB1c2VkIGZvciBhY3RpdmVbMF0qLwogCiB8Y29vbGluZ19kZXZpY2UwOgotCXwtLS0tLXR5cGU6CQkJUHJvY2Vzc29yCi0JfC0tLS0tbWF4X3N0YXRlOgkJOAotCXwtLS0tLWN1cl9zdGF0ZToJCTAKKyAgICB8LS0tdHlwZToJCQlQcm9jZXNzb3IKKyAgICB8LS0tbWF4X3N0YXRlOgkJOAorICAgIHwtLS1jdXJfc3RhdGU6CQkwCiAKIHxjb29saW5nX2RldmljZTM6Ci0JfC0tLS0tdHlwZToJCQlGYW4KLQl8LS0tLS1tYXhfc3RhdGU6CQkyCi0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCUZhbgorICAgIHwtLS1tYXhfc3RhdGU6CQkyCisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogL3N5cy9jbGFzcy9od21vbjoKIAogfGh3bW9uMDoKLQl8LS0tLS1uYW1lOgkJCWFjcGl0egotCXwtLS0tLXRlbXAxX2lucHV0OgkJMzcwMDAKLQl8LS0tLS10ZW1wMV9jcml0OgkJMTAwMDAwCisgICAgfC0tLW5hbWU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXAxX2lucHV0OgkJMzcwMDAKKyAgICB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKaW5kZXggNzAwM2UxMC4uNjQxYTFlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CkBAIC0yMTMsMTAgKzIxMywxOSBAQAogPGRldGFpbHMgdG8gYmUgZmlsbGVkPgogCiAKLUhBVkVfRlRSQUNFX1NZU0NBTExTCitIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi08ZGV0YWlscyB0byBiZSBmaWxsZWQ+CitZb3UgbmVlZCB2ZXJ5IGZldyB0aGluZ3MgdG8gZ2V0IHRoZSBzeXNjYWxscyB0cmFjaW5nIGluIGFuIGFyY2guCisKKy0gSGF2ZSBhIE5SX3N5c2NhbGxzIHZhcmlhYmxlIGluIDxhc20vdW5pc3RkLmg+IHRoYXQgcHJvdmlkZXMgdGhlIG51bWJlcgorICBvZiBzeXNjYWxscyBzdXBwb3J0ZWQgYnkgdGhlIGFyY2guCistIEltcGxlbWVudCBhcmNoX3N5c2NhbGxfYWRkcigpIHRoYXQgcmVzb2x2ZXMgYSBzeXNjYWxsIGFkZHJlc3MgZnJvbSBhCisgIHN5c2NhbGwgbnVtYmVyLgorLSBTdXBwb3J0IHRoZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UIHRocmVhZCBmbGFncworLSBQdXQgdGhlIHRyYWNlX3N5c19lbnRlcigpIGFuZCB0cmFjZV9zeXNfZXhpdCgpIHRyYWNlcG9pbnRzIGNhbGxzIGZyb20gcHRyYWNlCisgIGluIHRoZSBwdHJhY2Ugc3lzY2FsbHMgdHJhY2luZyBwYXRoLgorLSBUYWcgdGhpcyBhcmNoIGFzIEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUy4KIAogCiBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggOTU3YjIyZi4uODE3OTY5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtMTIzMSw2ICsxMjMxLDcgQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNkZWZpbmUgX1NUUih4KSAjeAogI2RlZmluZSBTVFIoeCkgX1NUUih4KQpAQCAtMTI2NSw2ICsxMjY2LDcgQEAKICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KIAorICAgICAgIHN0cmNhdChkZWJ1Z2ZzLCAiL3RyYWNpbmcvIik7CiAgICAgICAgZGVidWdmc19mb3VuZCA9IDE7CiAKICAgICAgICByZXR1cm4gZGVidWdmczsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhYWJlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0CkBAIC0wLDAgKzEsMTQ5IEBACisgICAgICAgICAgICAgICAgICAgICAgICBLcHJvYmUtYmFzZWQgRXZlbnQgVHJhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdQorCisKK092ZXJ2aWV3CistLS0tLS0tLQorVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIHRvIHRyYWNlcG9pbnQgYmFzZWQgZXZlbnRzLiBJbnN0ZWFkIG9mIFRyYWNlcG9pbnQsCit0aGlzIGlzIGJhc2VkIG9uIGtwcm9iZXMgKGtwcm9iZSBhbmQga3JldHByb2JlKS4gU28gaXQgY2FuIHByb2JlIHdoZXJldmVyCitrcHJvYmVzIGNhbiBwcm9iZSAodGhpcyBtZWFucywgYWxsIGZ1bmN0aW9ucyBib2R5IGV4Y2VwdCBmb3IgX19rcHJvYmVzCitmdW5jdGlvbnMpLiBVbmxpa2UgdGhlIFRyYWNlcG9pbnQgYmFzZWQgZXZlbnQsIHRoaXMgY2FuIGJlIGFkZGVkIGFuZCByZW1vdmVkCitkeW5hbWljYWxseSwgb24gdGhlIGZseS4KKworVG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgYnVpbGQgeW91ciBrZXJuZWwgd2l0aCBDT05GSUdfS1BST0JFX1RSQUNJTkc9eS4KKworU2ltaWxhciB0byB0aGUgZXZlbnRzIHRyYWNlciwgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgYWN0aXZhdGVkIHZpYQorY3VycmVudF90cmFjZXIuIEluc3RlYWQgb2YgdGhhdCwgYWRkIHByb2JlIHBvaW50cyB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cywgYW5kIGVuYWJsZSBpdCB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvPEVWRU5UPi9lbmFibGVkLgorCisKK1N5bm9wc2lzIG9mIGtwcm9iZV9ldmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgcFs6W0dSUC9dRVZFTlRdIFNZTUJPTFsrb2Zmc118TUVNQUREUiBbRkVUQ0hBUkdTXQk6IFNldCBhIHByb2JlCisgIHJbOltHUlAvXUVWRU5UXSBTWU1CT0xbKzBdIFtGRVRDSEFSR1NdCQk6IFNldCBhIHJldHVybiBwcm9iZQorCisgR1JQCQk6IEdyb3VwIG5hbWUuIElmIG9taXR0ZWQsIHVzZSAia3Byb2JlcyIgZm9yIGl0LgorIEVWRU5UCQk6IEV2ZW50IG5hbWUuIElmIG9taXR0ZWQsIHRoZSBldmVudCBuYW1lIGlzIGdlbmVyYXRlZAorCQkgIGJhc2VkIG9uIFNZTUJPTCtvZmZzIG9yIE1FTUFERFIuCisgU1lNQk9MWytvZmZzXQk6IFN5bWJvbCtvZmZzZXQgd2hlcmUgdGhlIHByb2JlIGlzIGluc2VydGVkLgorIE1FTUFERFIJOiBBZGRyZXNzIHdoZXJlIHRoZSBwcm9iZSBpcyBpbnNlcnRlZC4KKworIEZFVENIQVJHUwk6IEFyZ3VtZW50cy4gRWFjaCBwcm9iZSBjYW4gaGF2ZSB1cCB0byAxMjggYXJncy4KKyAgJVJFRwkJOiBGZXRjaCByZWdpc3RlciBSRUcKKyAgQEFERFIJCTogRmV0Y2ggbWVtb3J5IGF0IEFERFIgKEFERFIgc2hvdWxkIGJlIGluIGtlcm5lbCkKKyAgQFNZTVsrfC1vZmZzXQk6IEZldGNoIG1lbW9yeSBhdCBTWU0gK3wtIG9mZnMgKFNZTSBzaG91bGQgYmUgYSBkYXRhIHN5bWJvbCkKKyAgJHN0YWNrTgk6IEZldGNoIE50aCBlbnRyeSBvZiBzdGFjayAoTiA+PSAwKQorICAkc3RhY2sJOiBGZXRjaCBzdGFjayBhZGRyZXNzLgorICAkYXJnTgkJOiBGZXRjaCBmdW5jdGlvbiBhcmd1bWVudC4gKE4gPj0gMCkoKikKKyAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKiopCisgICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKikKKyAgTkFNRT1GRVRDSEFSRzogU2V0IE5BTUUgYXMgdGhlIGFyZ3VtZW50IG5hbWUgb2YgRkVUQ0hBUkcuCisKKyAgKCopIGFOIG1heSBub3QgY29ycmVjdCBvbiBhc21saW5rYWdlZCBmdW5jdGlvbnMgYW5kIGF0IHRoZSBtaWRkbGUgb2YKKyAgICAgIGZ1bmN0aW9uIGJvZHkuCisgICgqKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgorICAoKioqKSB0aGlzIGlzIHVzZWZ1bCBmb3IgZmV0Y2hpbmcgYSBmaWVsZCBvZiBkYXRhIHN0cnVjdHVyZXMuCisKKworUGVyLVByb2JlIEV2ZW50IEZpbHRlcmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFBlci1wcm9iZSBldmVudCBmaWx0ZXJpbmcgZmVhdHVyZSBhbGxvd3MgeW91IHRvIHNldCBkaWZmZXJlbnQgZmlsdGVyIG9uIGVhY2gKK3Byb2JlIGFuZCBnaXZlcyB5b3Ugd2hhdCBhcmd1bWVudHMgd2lsbCBiZSBzaG93biBpbiB0cmFjZSBidWZmZXIuIElmIGFuIGV2ZW50CituYW1lIGlzIHNwZWNpZmllZCByaWdodCBhZnRlciAncDonIG9yICdyOicgaW4ga3Byb2JlX2V2ZW50cywgaXQgYWRkcyBhbiBldmVudAordW5kZXIgdHJhY2luZy9ldmVudHMva3Byb2Jlcy88RVZFTlQ+LCBhdCB0aGUgZGlyZWN0b3J5IHlvdSBjYW4gc2VlICdpZCcsCisnZW5hYmxlZCcsICdmb3JtYXQnIGFuZCAnZmlsdGVyJy4KKworZW5hYmxlZDoKKyAgWW91IGNhbiBlbmFibGUvZGlzYWJsZSB0aGUgcHJvYmUgYnkgd3JpdGluZyAxIG9yIDAgb24gaXQuCisKK2Zvcm1hdDoKKyAgVGhpcyBzaG93cyB0aGUgZm9ybWF0IG9mIHRoaXMgcHJvYmUgZXZlbnQuCisKK2ZpbHRlcjoKKyAgWW91IGNhbiB3cml0ZSBmaWx0ZXJpbmcgcnVsZXMgb2YgdGhpcyBldmVudC4KKworaWQ6CisgIFRoaXMgc2hvd3MgdGhlIGlkIG9mIHRoaXMgcHJvYmUgZXZlbnQuCisKKworRXZlbnQgUHJvZmlsaW5nCistLS0tLS0tLS0tLS0tLS0KKyBZb3UgY2FuIGNoZWNrIHRoZSB0b3RhbCBudW1iZXIgb2YgcHJvYmUgaGl0cyBhbmQgcHJvYmUgbWlzcy1oaXRzIHZpYQorL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfcHJvZmlsZS4KKyBUaGUgZmlyc3QgY29sdW1uIGlzIGV2ZW50IG5hbWUsIHRoZSBzZWNvbmQgaXMgdGhlIG51bWJlciBvZiBwcm9iZSBoaXRzLAordGhlIHRoaXJkIGlzIHRoZSBudW1iZXIgb2YgcHJvYmUgbWlzcy1oaXRzLgorCisKK1VzYWdlIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLQorVG8gYWRkIGEgcHJvYmUgYXMgYSBuZXcgZXZlbnQsIHdyaXRlIGEgbmV3IGRlZmluaXRpb24gdG8ga3Byb2JlX2V2ZW50cworYXMgYmVsb3cuCisKKyAgZWNobyBwOm15cHJvYmUgZG9fc3lzX29wZW4gZGZkPSRhcmcwIGZpbGVuYW1lPSRhcmcxIGZsYWdzPSRhcmcyIG1vZGU9JGFyZzMgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKworIFRoaXMgc2V0cyBhIGtwcm9iZSBvbiB0aGUgdG9wIG9mIGRvX3N5c19vcGVuKCkgZnVuY3Rpb24gd2l0aCByZWNvcmRpbmcKKzFzdCB0byA0dGggYXJndW1lbnRzIGFzICJteXByb2JlIiBldmVudC4gQXMgdGhpcyBleGFtcGxlIHNob3dzLCB1c2VycyBjYW4KK2Nob29zZSBtb3JlIGZhbWlsaWFyIG5hbWVzIGZvciBlYWNoIGFyZ3VtZW50cy4KKworICBlY2hvIHI6bXlyZXRwcm9iZSBkb19zeXNfb3BlbiAkcmV0dmFsID4+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cworCisgVGhpcyBzZXRzIGEga3JldHByb2JlIG9uIHRoZSByZXR1cm4gcG9pbnQgb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoCityZWNvcmRpbmcgcmV0dXJuIHZhbHVlIGFzICJteXJldHByb2JlIiBldmVudC4KKyBZb3UgY2FuIHNlZSB0aGUgZm9ybWF0IG9mIHRoZXNlIGV2ZW50cyB2aWEKKy9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvPEVWRU5UPi9mb3JtYXQuCisKKyAgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvbXlwcm9iZS9mb3JtYXQKK25hbWU6IG15cHJvYmUKK0lEOiA3NQorZm9ybWF0OgorCWZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOwlvZmZzZXQ6MDsJc2l6ZToyOworCWZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOwlvZmZzZXQ6MjsJc2l6ZToxOworCWZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CW9mZnNldDozOwlzaXplOjE7CisJZmllbGQ6aW50IGNvbW1vbl9waWQ7CW9mZnNldDo0OwlzaXplOjQ7CisJZmllbGQ6aW50IGNvbW1vbl90Z2lkOwlvZmZzZXQ6ODsJc2l6ZTo0OworCisJZmllbGQ6IHVuc2lnbmVkIGxvbmcgaXA7CW9mZnNldDoxNjt0c2l6ZTo4OworCWZpZWxkOiBpbnQgbmFyZ3M7CW9mZnNldDoyNDt0c2l6ZTo0OworCWZpZWxkOiB1bnNpZ25lZCBsb25nIGRmZDsJb2Zmc2V0OjMyO3RzaXplOjg7CisJZmllbGQ6IHVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7CW9mZnNldDo0MDt0c2l6ZTo4OworCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZsYWdzOwlvZmZzZXQ6NDg7dHNpemU6ODsKKwlmaWVsZDogdW5zaWduZWQgbG9uZyBtb2RlOwlvZmZzZXQ6NTY7dHNpemU6ODsKKworcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5pcCwgUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQorCisKKyBZb3UgY2FuIHNlZSB0aGF0IHRoZSBldmVudCBoYXMgNCBhcmd1bWVudHMgYXMgaW4gdGhlIGV4cHJlc3Npb25zIHlvdSBzcGVjaWZpZWQuCisKKyAgZWNobyA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cworCisgVGhpcyBjbGVhcnMgYWxsIHByb2JlIHBvaW50cy4KKworIFJpZ2h0IGFmdGVyIGRlZmluaXRpb24sIGVhY2ggZXZlbnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gRm9yIHRyYWNpbmcgdGhlc2UKK2V2ZW50cywgeW91IG5lZWQgdG8gZW5hYmxlIGl0LgorCisgIGVjaG8gMSA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2twcm9iZXMvbXlwcm9iZS9lbmFibGUKKyAgZWNobyAxID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva3Byb2Jlcy9teXJldHByb2JlL2VuYWJsZQorCisgQW5kIHlvdSBjYW4gc2VlIHRoZSB0cmFjZWQgaW5mb3JtYXRpb24gdmlhIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2UuCisKKyAgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2UKKyMgdHJhY2VyOiBub3AKKyMKKyMgICAgICAgICAgIFRBU0stUElEICAgIENQVSMgICAgVElNRVNUQU1QICBGVU5DVElPTgorIyAgICAgICAgICAgICAgfCB8ICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY4NzU6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPTMgZmlsZW5hbWU9N2ZmZmQxZWM0NDQwIGZsYWdzPTgwMDAgbW9kZT0wCisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2ODc4OiBteXJldHByb2JlOiAoc3lzX29wZW5hdCsweGMvMHhlIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPWZmZmZmZmZmZmZmZmZmZmUKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY4ODU6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPWZmZmZmZjljIGZpbGVuYW1lPTQwNDEzYyBmbGFncz04MDAwIG1vZGU9MWI2CisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2OTE1OiBteXJldHByb2JlOiAoc3lzX29wZW4rMHgxYi8weDFkIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPTMKKyAgICAgICAgICAgPC4uLj4tMTQ0NyAgWzAwMV0gMTAzODI4Mi4yODY5Njk6IG15cHJvYmU6IChkb19zeXNfb3BlbisweDAvMHhkNikgZGZkPWZmZmZmZjljIGZpbGVuYW1lPTQwNDFjNiBmbGFncz05ODgwMCBtb2RlPTEwCisgICAgICAgICAgIDwuLi4+LTE0NDcgIFswMDFdIDEwMzgyODIuMjg2OTc2OiBteXJldHByb2JlOiAoc3lzX29wZW4rMHgxYi8weDFkIDwtIGRvX3N5c19vcGVuKSAkcmV0dmFsPTMKKworCisgRWFjaCBsaW5lIHNob3dzIHdoZW4gdGhlIGtlcm5lbCBoaXRzIGFuIGV2ZW50LCBhbmQgPC0gU1lNQk9MIG1lYW5zIGtlcm5lbAorcmV0dXJucyBmcm9tIFNZTUJPTChlLmcuICJzeXNfb3BlbisweDFiLzB4MWQgPC0gZG9fc3lzX29wZW4iIG1lYW5zIGtlcm5lbAorcmV0dXJucyBmcm9tIGRvX3N5c19vcGVuIHRvIHN5c19vcGVuKzB4MWIpLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmYWRmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0CkBAIC0wLDAgKzEsMTM2IEBACitXaGF0IGlzIGh3cG9pc29uPworCitVcGNvbWluZyBJbnRlbCBDUFVzIGhhdmUgc3VwcG9ydCBmb3IgcmVjb3ZlcmluZyBmcm9tIHNvbWUgbWVtb3J5IGVycm9ycworKGBgTUNBIHJlY292ZXJ5JycpLiBUaGlzIHJlcXVpcmVzIHRoZSBPUyB0byBkZWNsYXJlIGEgcGFnZSAicG9pc29uZWQiLAora2lsbCB0aGUgcHJvY2Vzc2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgYXZvaWQgdXNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4KKworVGhpcyBwYXRjaGtpdCBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gdGhlIFZNLgorCitUbyBxdW90ZSB0aGUgb3ZlcnZpZXcgY29tbWVudDoKKworICogSGlnaCBsZXZlbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuIEhhbmRsZXMgcGFnZXMgcmVwb3J0ZWQgYnkgdGhlCisgKiBoYXJkd2FyZSBhcyBiZWluZyBjb3JydXB0ZWQgdXN1YWxseSBkdWUgdG8gYSAyYml0IEVDQyBtZW1vcnkgb3IgY2FjaGUKKyAqIGZhaWx1cmUuCisgKgorICogVGhpcyBmb2N1c3NlcyBvbiBwYWdlcyBkZXRlY3RlZCBhcyBjb3JydXB0ZWQgaW4gdGhlIGJhY2tncm91bmQuCisgKiBXaGVuIHRoZSBjdXJyZW50IENQVSB0cmllcyB0byBjb25zdW1lIGNvcnJ1cHRpb24gdGhlIGN1cnJlbnRseQorICogcnVubmluZyBwcm9jZXNzIGNhbiBqdXN0IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkLiBUaGlzIGltcGxpZXMKKyAqIHRoYXQgaWYgdGhlIGVycm9yIGNhbm5vdCBiZSBoYW5kbGVkIGZvciBzb21lIHJlYXNvbiBpdCdzIHNhZmUgdG8KKyAqIGp1c3QgaWdub3JlIGl0IGJlY2F1c2Ugbm8gY29ycnVwdGlvbiBoYXMgYmVlbiBjb25zdW1lZCB5ZXQuIEluc3RlYWQKKyAqIHdoZW4gdGhhdCBoYXBwZW5zIGFub3RoZXIgbWFjaGluZSBjaGVjayB3aWxsIGhhcHBlbi4KKyAqCisgKiBIYW5kbGVzIHBhZ2UgY2FjaGUgcGFnZXMgaW4gdmFyaW91cyBzdGF0ZXMuIFRoZSB0cmlja3kgcGFydAorICogaGVyZSBpcyB0aGF0IHdlIGNhbiBhY2Nlc3MgYW55IHBhZ2UgYXN5bmNocm9ub3VzIHRvIG90aGVyIFZNCisgKiB1c2VycywgYmVjYXVzZSBtZW1vcnkgZmFpbHVyZXMgY291bGQgaGFwcGVuIGFueXRpbWUgYW5kIGFueXdoZXJlLAorICogcG9zc2libHkgdmlvbGF0aW5nIHNvbWUgb2YgdGhlaXIgYXNzdW1wdGlvbnMuIFRoaXMgaXMgd2h5IHRoaXMgY29kZQorICogaGFzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsLiBHZW5lcmFsbHkgaXQgdHJpZXMgdG8gdXNlIG5vcm1hbCBsb2NraW5nCisgKiBydWxlcywgYXMgaW4gZ2V0IHRoZSBzdGFuZGFyZCBsb2NrcywgZXZlbiBpZiB0aGF0IG1lYW5zIHRoZQorICogZXJyb3IgaGFuZGxpbmcgdGFrZXMgcG90ZW50aWFsbHkgYSBsb25nIHRpbWUuCisgKgorICogU29tZSBvZiB0aGUgb3BlcmF0aW9ucyBoZXJlIGFyZSBzb21ld2hhdCBpbmVmZmljaWVudCBhbmQgaGF2ZSBub24KKyAqIGxpbmVhciBhbGdvcml0aG1pYyBjb21wbGV4aXR5LCBiZWNhdXNlIHRoZSBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBub3QKKyAqIGJlZW4gb3B0aW1pemVkIGZvciB0aGlzIGNhc2UuIFRoaXMgaXMgaW4gcGFydGljdWxhciB0aGUgY2FzZQorICogZm9yIHRoZSBtYXBwaW5nIGZyb20gYSB2bWEgdG8gYSBwcm9jZXNzLiBTaW5jZSB0aGlzIGNhc2UgaXMgZXhwZWN0ZWQKKyAqIHRvIGJlIHJhcmUgd2UgaG9wZSB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzLgorCitUaGUgY29kZSBjb25zaXN0cyBvZiBhIHRoZSBoaWdoIGxldmVsIGhhbmRsZXIgaW4gbW0vbWVtb3J5LWZhaWx1cmUuYywKK2EgbmV3IHBhZ2UgcG9pc29uIGJpdCBhbmQgdmFyaW91cyBjaGVja3MgaW4gdGhlIFZNIHRvIGhhbmRsZSBwb2lzb25lZAorcGFnZXMuCisKK1RoZSBtYWluIHRhcmdldCByaWdodCBub3cgaXMgS1ZNIGd1ZXN0cywgYnV0IGl0IHdvcmtzIGZvciBhbGwga2luZHMKK29mIGFwcGxpY2F0aW9ucy4gS1ZNIHN1cHBvcnQgcmVxdWlyZXMgYSByZWNlbnQgcWVtdS1rdm0gcmVsZWFzZS4KKworRm9yIHRoZSBLVk0gdXNlIHRoZXJlIHdhcyBuZWVkIGZvciBhIG5ldyBzaWduYWwgdHlwZSBzbyB0aGF0CitLVk0gY2FuIGluamVjdCB0aGUgbWFjaGluZSBjaGVjayBpbnRvIHRoZSBndWVzdCB3aXRoIHRoZSBwcm9wZXIKK2FkZHJlc3MuIFRoaXMgaW4gdGhlb3J5IGFsbG93cyBvdGhlciBhcHBsaWNhdGlvbnMgdG8gaGFuZGxlCittZW1vcnkgZmFpbHVyZXMgdG9vLiBUaGUgZXhwZWN0aW9uIGlzIHRoYXQgbmVhciBhbGwgYXBwbGljYXRpb25zCit3b24ndCBkbyB0aGF0LCBidXQgc29tZSB2ZXJ5IHNwZWNpYWxpemVkIG9uZXMgbWlnaHQuCisKKy0tLQorCitUaGVyZSBhcmUgdHdvIChhY3R1YWxseSB0aHJlZSkgbW9kaSBtZW1vcnkgZmFpbHVyZSByZWNvdmVyeSBjYW4gYmUgaW46CisKK3ZtLm1lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IHN5c2N0bCBzZXQgdG8gemVybzoKKwlBbGwgbWVtb3J5IGZhaWx1cmVzIGNhdXNlIGEgcGFuaWMuIERvIG5vdCBhdHRlbXB0IHJlY292ZXJ5LgorCShvbiB4ODYgdGhpcyBjYW4gYmUgYWxzbyBhZmZlY3RlZCBieSB0aGUgdG9sZXJhbnQgbGV2ZWwgb2YgdGhlCisJTUNFIHN1YnN5c3RlbSkKKworZWFybHkga2lsbAorCShjYW4gYmUgY29udHJvbGxlZCBnbG9iYWxseSBhbmQgcGVyIHByb2Nlc3MpCisJU2VuZCBTSUdCVVMgdG8gdGhlIGFwcGxpY2F0aW9uIGFzIHNvb24gYXMgdGhlIGVycm9yIGlzIGRldGVjdGVkCisJVGhpcyBhbGxvd3MgYXBwbGljYXRpb25zIHdobyBjYW4gcHJvY2VzcyBtZW1vcnkgZXJyb3JzIGluIGEgZ2VudGxlCisJd2F5IChlLmcuIGRyb3AgYWZmZWN0ZWQgb2JqZWN0KQorCVRoaXMgaXMgdGhlIG1vZGUgdXNlZCBieSBLVk0gcWVtdS4KKworbGF0ZSBraWxsCisJU2VuZCBTSUdCVVMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbnRvIHRoZSBjb3JydXB0ZWQgcGFnZS4KKwlUaGlzIGlzIGJlc3QgZm9yIG1lbW9yeSBlcnJvciB1bmF3YXJlIGFwcGxpY2F0aW9ucyBhbmQgZGVmYXVsdAorCU5vdGUgc29tZSBwYWdlcyBhcmUgYWx3YXlzIGhhbmRsZWQgYXMgbGF0ZSBraWxsLgorCistLS0KKworVXNlciBjb250cm9sOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeQorCVNlZSBzeXNjdGwudHh0CisKK3ZtLm1lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwKKwlFbmFibGUgZWFybHkga2lsbCBtb2RlIGdsb2JhbGx5CisKK1BSX01DRV9LSUxMCisJU2V0IGVhcmx5L2xhdGUga2lsbCBtb2RlL3JldmVydCB0byBzeXN0ZW0gZGVmYXVsdAorCWFyZzE6IFBSX01DRV9LSUxMX0NMRUFSOiBSZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9TRVQ6IGFyZzIgZGVmaW5lcyB0aHJlYWQgc3BlY2lmaWMgbW9kZQorCQlQUl9NQ0VfS0lMTF9FQVJMWTogRWFybHkga2lsbAorCQlQUl9NQ0VfS0lMTF9MQVRFOiAgTGF0ZSBraWxsCisJCVBSX01DRV9LSUxMX0RFRkFVTFQ6IFVzZSBzeXN0ZW0gZ2xvYmFsIGRlZmF1bHQKK1BSX01DRV9LSUxMX0dFVAorCXJldHVybiBjdXJyZW50IG1vZGUKKworCistLS0KKworVGVzdGluZzoKKworbWFkdmlzZShNQURWX1BPSVNPTiwgLi4uLikKKwkoYXMgcm9vdCkKKwlQb2lzb24gYSBwYWdlIGluIHRoZSBwcm9jZXNzIGZvciB0ZXN0aW5nCisKKworaHdwb2lzb24taW5qZWN0IG1vZHVsZSB0aHJvdWdoIGRlYnVnZnMKKwkvc3lzL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuCisKK0luamVjdCBod3BvaXNvbiBmYXVsdCBhdCBQRk4gZWNob2VkIGludG8gdGhpcyBmaWxlCisKKworQXJjaGl0ZWN0dXJlIHNwZWNpZmljIE1DRSBpbmplY3RvcgorCit4ODYgaGFzIG1jZS1pbmplY3QsIG1jZS10ZXN0CisKK1NvbWUgcG9ydGFibGUgaHdwb2lzb24gdGVzdCBwcm9ncmFtcyBpbiBtY2UtdGVzdCwgc2VlIGJsb3cuCisKKy0tLQorCitSZWZlcmVuY2VzOgorCitodHRwOi8vaGFsb2JhdGVzLmRlL21jZS1sYzA5LTIucGRmCisJT3ZlcnZpZXcgcHJlc2VudGF0aW9uIGZyb20gTGludXhDb24gMDkKKworZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9jcHUvbWNlL21jZS10ZXN0LmdpdAorCVRlc3Qgc3VpdGUgKGh3cG9pc29uIHNwZWNpZmljIHBvcnRhYmxlIHRlc3RzIGluIHRzcmMpCisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtaW5qZWN0LmdpdAorCXg4NiBzcGVjaWZpYyBpbmplY3RvcgorCisKKy0tLQorCitMaW1pdGF0aW9uczoKKworLSBOb3QgYWxsIHBhZ2UgdHlwZXMgYXJlIHN1cHBvcnRlZCBhbmQgbmV2ZXIgd2lsbC4gTW9zdCBrZXJuZWwgaW50ZXJuYWwKK29iamVjdHMgY2Fubm90IGJlIHJlY292ZXJlZCwgb25seSBMUlUgcGFnZXMgZm9yIG5vdy4KKy0gUmlnaHQgbm93IGh1Z2VwYWdlIHN1cHBvcnQgaXMgbWlzc2luZy4KKworLS0tCitBbmRpIEtsZWVuLCBPY3QgMjAwOQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCmluZGV4IDNlYzRmMmEuLjQ3OTNjNmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vcGFnZS10eXBlcy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLWludCBjaGVja2VkX29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgY2hlY2tlZF9vcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZmOTY4ODQuLjRmOTZhYzggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02NSw0MyArNjUsNTEgQEAKIAogOC4JSGFwcHkgaGFja2luZy4KIAotCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGVzY3JpcHRpb25zIG9mIHNlY3Rpb24gZW50cmllczoKIAotTWFpbnRhaW5lcnMgTGlzdCAodHJ5IHRvIGxvb2sgZm9yIG1vc3QgcHJlY2lzZSBhcmVhcyBmaXJzdCkKKwlQOiBQZXJzb24gKG9ic29sZXRlKQorCU06IE1haWwgcGF0Y2hlcyB0bzogRnVsbE5hbWUgPGFkZHJlc3NAZG9tYWluPgorCUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQorCVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KKwlUOiBTQ00gdHJlZSB0eXBlIGFuZCBsb2NhdGlvbi4gIFR5cGUgaXMgb25lIG9mOiBnaXQsIGhnLCBxdWlsdCwgc3RnaXQuCisJUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkgICBTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCisJICAgTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KKwkgICBPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCisJCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KKwkgICBPcnBoYW46CU5vIGN1cnJlbnQgbWFpbnRhaW5lciBbYnV0IG1heWJlIHlvdSBjb3VsZCB0YWtlIHRoZQorCQkJcm9sZSBhcyB5b3Ugd3JpdGUgeW91ciBuZXcgY29kZV0uCisJICAgT2Jzb2xldGU6CU9sZCBjb2RlLiBTb21ldGhpbmcgdGFnZ2VkIG9ic29sZXRlIGdlbmVyYWxseSBtZWFucworCQkJaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBiZXR0ZXIgc3lzdGVtIGFuZCB5b3UKKwkJCXNob3VsZCBiZSB1c2luZyB0aGF0LgorCUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgorCSAgIEEgdHJhaWxpbmcgc2xhc2ggaW5jbHVkZXMgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcnkgZmlsZXMuCisJICAgRjoJZHJpdmVycy9uZXQvCWFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgZHJpdmVycy9uZXQKKwkgICBGOglkcml2ZXJzL25ldC8qCWFsbCBmaWxlcyBpbiBkcml2ZXJzL25ldCwgYnV0IG5vdCBiZWxvdworCSAgIEY6CSovbmV0LyoJCWFsbCBmaWxlcyBpbiAiYW55IHRvcCBsZXZlbCBkaXJlY3RvcnkiL25ldAorCSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KKwlYOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKKwkgICBGaWxlcyBleGNsdXNpb25zIGFyZSB0ZXN0ZWQgYmVmb3JlIGZpbGUgbWF0Y2hlcy4KKwkgICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKKwkgICBGOgluZXQvCisJICAgWDoJbmV0L2lwdjYvCisJICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJSzogS2V5d29yZCBwZXJsIGV4dGVuZGVkIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggY29udGVudCBpbiBhCisJICAgcGF0Y2ggb3IgZmlsZS4gIEZvciBpbnN0YW5jZToKKwkgICBLOiBvZl9nZXRfcHJvZmlsZQorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gIm9mX2dldF9wcm9maWxlIgorCSAgIEs6IFxiKHByaW50a3xwcl8oaW5mb3xlcnIpKVxiCisJICAgICAgbWF0Y2hlcyBwYXRjaGVzIG9yIGZpbGVzIHRoYXQgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgd29yZHMKKwkgICAgICBwcmludGssIHByX2luZm8gb3IgcHJfZXJyCisJICAgT25lIHJlZ2V4IHBhdHRlcm4gcGVyIGxpbmUuICBNdWx0aXBsZSBLOiBsaW5lcyBhY2NlcHRhYmxlLgogCiBOb3RlOiBGb3IgdGhlIGhhcmQgb2YgdGhpbmtpbmcsIHRoaXMgbGlzdCBpcyBtZWFudCB0byByZW1haW4gaW4gYWxwaGFiZXRpY2FsCiBvcmRlci4gSWYgeW91IGNvdWxkIGFkZCB5b3Vyc2VsdmVzIHRvIGl0IGluIGFscGhhYmV0aWNhbCBvcmRlciB0aGF0IHdvdWxkIGJlCiBzbyBtdWNoIGVhc2llciBbRWRdCiAKLVA6IFBlcnNvbiAob2Jzb2xldGUpCi1NOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KLUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQotVzogV2ViLXBhZ2Ugd2l0aCBzdGF0dXMvaW5mbwotVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgotUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKK01haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCiAKLQlTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCi0JTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KLQlPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCi0JCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KLQlPcnBoYW46CQlObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKLQkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgotCU9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKLQkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91Ci0JCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KLQotRjogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggd2lsZGNhcmQgcGF0dGVybnMuCi0gICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgotCUY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0Ci0JRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKLQlGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKLSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KLVg6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBOT1QgbWFpbnRhaW5lZCwgc2FtZSBydWxlcyBhcyBGOgotICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCi0gICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKLQlGOgluZXQvCi0JWDoJbmV0L2lwdjYvCi0gICBtYXRjaGVzIGFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgbmV0IGV4Y2x1ZGluZyBuZXQvaXB2Ni8KKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogM0M1MDUgTkVUV09SSyBEUklWRVIKIE06CVBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KQEAgLTE3NCw3ICsxODIsNyBAQAogTToJTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KIEw6CXY5ZnMtZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL3N3aWsubmV0L3Y5ZnMKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9lcmljdmgvdjlmcy5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZXJpY3ZoL3Y5ZnMuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAogRjoJZnMvOXAvCkBAIC01MDQsMTAgKzUxMiwzMiBAQAogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vCiAKK0FSTSBQUklNRUNFTEwgQUFDSSBQTDA0MSBEUklWRVIKK006CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4KK1M6CU1haW50YWluZWQKK0Y6CXNvdW5kL2FybS9hYWNpLioKKworQVJNIFBSSU1FQ0VMTCBDTENEIFBMMTEwIERSSVZFUgorTToJUnVzc2VsbCBLaW5nIDxsaW51eEBhcm0ubGludXgub3JnLnVrPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy92aWRlby9hbWJhLWNsY2QuKgorCitBUk0gUFJJTUVDRUxMIEtNSSBQTDA1MCBEUklWRVIKK006CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvaW5wdXQvc2VyaW8vYW1iYWttaS4qCitGOglpbmNsdWRlL2xpbnV4L2FtYmEva21pLmgKKwogQVJNIFBSSU1FQ0VMTCBNTUNJIFBMMTgwLzEgRFJJVkVSCiBTOglPcnBoYW4KIEY6CWRyaXZlcnMvbW1jL2hvc3QvbW1jaS4qCiAKK0FSTSBQUklNRUNFTEwgQlVTIFNVUFBPUlQKK006CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtLmxpbnV4Lm9yZy51az4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYW1iYS8KK0Y6CWluY2x1ZGUvbGludXgvYW1iYS9idXMuaAorCiBBUk0vQURJIFJPQURSVU5ORVIgTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKQEAgLTg5OCw3ICs5MjgsNiBAQAogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwogCiBBU1VTIEFTQjEwMCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgpAQCAtOTkyLDcgKzEwMjEsNyBAQAogCiBBVE0KIE06CUNoYXMgV2lsbGlhbXMgPGNoYXNAY21mLm5ybC5uYXZ5Lm1pbD4KLUw6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXgtYXRtLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMTAyMCw3ICsxMDQ5LDcgQEAKIAogQVRNRUwgTENERkIgRFJJVkVSCiBNOglOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQGF0bWVsLmNvbT4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwogRjoJaW5jbHVkZS92aWRlby9hdG1lbF9sY2RjLmgKQEAgLTEyMzcsMTEgKzEyNjYsMTAgQEAKIEY6CWRyaXZlcnMvbmV0L3RnMy4qCiAKIEJST0NBREUgQkZBIEZDIFNDU0kgRFJJVkVSCi1QOiAgICAgIEppbmcgSHVhbmcKLU06ICAgICAgaHVhbmdqQGJyb2NhZGUuY29tCi1MOiAgICAgIGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCi1TOiAgICAgIFN1cHBvcnRlZAotRjogICAgICBkcml2ZXJzL3Njc2kvYmZhLworTToJSmluZyBIdWFuZyA8aHVhbmdqQGJyb2NhZGUuY29tPgorTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9zY3NpL2JmYS8KIAogQlNHIChibG9jayBsYXllciBnZW5lcmljIHNnIHY0IGRyaXZlcikKIE06CUZVSklUQSBUb21vbm9yaSA8ZnVqaXRhLnRvbW9ub3JpQGxhYi5udHQuY28uanA+CkBAIC0xNDgwLDYgKzE1MDgsNyBAQAogCiBDT1JFVEVNUCBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgogTToJUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KK006CUh1YXh1IFdhbiA8aHVheHUud2FuQGludGVsLmNvbT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKQEAgLTIxMDYsNyArMjEzNSw3IEBACiBGOglkcml2ZXJzL25ldC93YW4vc2RsYS5jCiAKIEZSQU1FQlVGRkVSIExBWUVSCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXgtZmJkZXYuc291cmNlZm9yZ2UubmV0LwogUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL2ZiLwpAQCAtMjEyOSw3ICsyMTU4LDcgQEAKIAogRlJFRVNDQUxFIElNWCAvIE1YQyBGUkFNRUJVRkZFUiBEUklWRVIKIE06CVNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oCkBAIC0yMTUxLDcgKzIxODAsNyBAQAogRjoJYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvCiBGOglhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vKnFlLmgKIAotRlJFRVNDQUxFIFVTQiBQRVJJUEhFUklBTCBEUklWRVJTCitGUkVFU0NBTEUgVVNCIFBFUklQSEVSQUwgRFJJVkVSUwogTToJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCkBAIC0yMjAyLDE4ICsyMjMxLDYgQEAKIEY6CWZzL2ZzY2FjaGUvCiBGOglpbmNsdWRlL2xpbnV4L2ZzY2FjaGUqLmgKIAotVFJBQ0lORwotTToJU3RldmVuIFJvc3RlZHQgPHJvc3RlZHRAZ29vZG1pcy5vcmc+Ci1NOglGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+Ci1NOglJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGlwL2xpbnV4LTIuNi10aXAuZ2l0IHRyYWNpbmcvY29yZQotUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0Ci1GOglhcmNoLyovKi8qL2Z0cmFjZS5oCi1GOglhcmNoLyova2VybmVsL2Z0cmFjZS5jCi1GOglpbmNsdWRlLyovZnRyYWNlLmggaW5jbHVkZS90cmFjZS8gaW5jbHVkZS9saW51eC90cmFjZSouaAotRjoJa2VybmVsL3RyYWNlLwotCiBGVUpJVFNVIEZSLVYgKEZSVikgUE9SVAogTToJRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KIFM6CU1haW50YWluZWQKQEAgLTIyNzIsOSArMjI4OSw4IEBACiBGOglpbmNsdWRlL2FzbS1nZW5lcmljCiAKIEdFTkVSSUMgVUlPIERSSVZFUiBGT1IgUENJIERFVklDRVMKLU06CU1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CitNOgkiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CiBMOglrdm1Admdlci5rZXJuZWwub3JnCi1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvdWlvL3Vpb19wY2lfZ2VuZXJpYy5jCiAKQEAgLTIzMTgsNiArMjMzNCwxMyBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKIAorR1NQQ0EgR0w4NjAgU1VCRFJJVkVSCitNOglPbGl2aWVyIExvcmluIDxvLmxvcmluQGxhcG9zdGUubmV0PgorTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21jaGVoYWIvbGludXgtMi42LmdpdAorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC8KKwogR1NQQ0EgTTU2MDIgU1VCRFJJVkVSCiBNOglFcmlrIEFuZHJlbiA8ZXJpay5hbmRyZW5AZ21haWwuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0yNTM5LDggKzI1NjIsNyBAQAogRjoJRG9jdW1lbnRhdGlvbi9pMmMvCiBGOglkcml2ZXJzL2kyYy8KIEY6CWluY2x1ZGUvbGludXgvaTJjLmgKLUY6CWluY2x1ZGUvbGludXgvaTJjLWRldi5oCi1GOglpbmNsdWRlL2xpbnV4L2kyYy1pZC5oCitGOglpbmNsdWRlL2xpbnV4L2kyYy0qLmgKIAogSTJDLVRJTlktVVNCIERSSVZFUgogTToJVGlsbCBIYXJiYXVtIDx0aWxsQGhhcmJhdW0ub3JnPgpAQCAtMjYxNSw2ICsyNjM3LDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY0MCw3ICsyNjYzLDcgQEAKIEY6CXNlY3VyaXR5L2ludGVncml0eS9pbWEvCiAKIElNUyBUV0lOVFVSQk8gRlJBTUVCVUZGRVIgRFJJVkVSCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBTOglPcnBoYW4KIEY6CWRyaXZlcnMvdmlkZW8vaW1zdHRmYi5jCiAKQEAgLTI2NzUsMTQgKzI2OTgsMTQgQEAKIAogSU5URUwgRlJBTUVCVUZGRVIgRFJJVkVSIChleGNsdWRpbmcgODEwIGFuZCA4MTUpCiBNOglTeWx2YWluIE1leWVyIDxzeWx2YWluLm1leWVyQHdvcmxkb25saW5lLmZyPgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dAogRjoJZHJpdmVycy92aWRlby9pbnRlbGZiLwogCiBJTlRFTCA4MTAvODE1IEZSQU1FQlVGRkVSIERSSVZFUgogTToJQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQGdtYWlsLmNvbT4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vaTgxMC8KIApAQCAtMjgyOCw3ICsyODUxLDcgQEAKIAogSVBNSSBTVUJTWVNURU0KIE06CUNvcmV5IE1pbnlhcmQgPG1pbnlhcmRAYWNtLm9yZz4KLUw6CW9wZW5pcG1pLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CW9wZW5pcG1pLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL29wZW5pcG1pLnNvdXJjZWZvcmdlLm5ldC8KIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9JUE1JLnR4dApAQCAtMjk5MiwxOSArMzAxNSwxNiBAQAogRjoJZnMvYXV0b2ZzNC8KIAogS0VSTkVMIEJVSUxECi1NOglTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+Ci1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NhbS9rYnVpbGQtbmV4dC5naXQKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc2FtL2tidWlsZC1maXhlcy5naXQKIEw6CWxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9rYnVpbGQvCiBGOglNYWtlZmlsZQogRjoJc2NyaXB0cy9NYWtlZmlsZS4qCiAKIEtFUk5FTCBKQU5JVE9SUwogTDoJa2VybmVsLWphbml0b3JzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3d3dy5rZXJuZWxqYW5pdG9ycy5vcmcvCi1TOglNYWludGFpbmVkCitXOglodHRwOi8vamFuaXRvci5rZXJuZWxuZXdiaWVzLm9yZy8KK1M6CU9kZCBGaXhlcwogCiBLRVJORUwgTkZTRCwgU1VOUlBDLCBBTkQgTE9DS0QgU0VSVkVSUwogTToJIkouIEJydWNlIEZpZWxkcyIgPGJmaWVsZHNAZmllbGRzZXMub3JnPgpAQCAtMzA4OSw5ICszMTA5LDEzIEBACiAKIEtNRU1DSEVDSwogTToJVmVnYXJkIE5vc3N1bSA8dmVnYXJkbm9AaWZpLnVpby5ubz4KLVAJUGVra2EgRW5iZXJnCi1NOglwZW5iZXJnQGNzLmhlbHNpbmtpLmZpCitNOglQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+CiBTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2ttZW1jaGVjay50eHQKK0Y6CWFyY2gveDg2L2luY2x1ZGUvYXNtL2ttZW1jaGVjay5oCitGOglhcmNoL3g4Ni9tbS9rbWVtY2hlY2svCitGOglpbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCitGOgltbS9rbWVtY2hlY2suYwogCiBLTUVNTEVBSwogTToJQ2F0YWxpbiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJtLmNvbT4KQEAgLTMzOTIsNyArMzQxNiw3IEBACiAKIE1BVFJPWCBGUkFNRUJVRkZFUiBEUklWRVIKIE06CVBldHIgVmFuZHJvdmVjIDx2YW5kcm92ZUB2Yy5jdnV0LmN6PgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfKgogRjoJaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCkBAIC0zNjIxLDcgKzM2NDUsNyBAQAogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCi1UOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2FiZXIvbmYtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyKgogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvCkBAIC0zNjY2LDcgKzM2OTAsOSBAQAogTToJIkRhdmlkIFMuIE1pbGxlciIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvZW4vTmV0CitXOglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9uZXRkZXYvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vbmV0LTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vbmV0LW5leHQtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJbmV0LwogRjoJaW5jbHVkZS9uZXQvCkBAIC0zNzc3LDEzICszODAzLDEzIEBACiAKIE5WSURJQSAocml2YWZiIGFuZCBudmlkaWFmYikgRlJBTUVCVUZGRVIgRFJJVkVSCiBNOglBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAZ21haWwuY29tPgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy92aWRlby9yaXZhLwogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzgxMiw3ICszODM4LDcgQEAKIAogT01BUCBGUkFNRUJVRkZFUiBTVVBQT1JUCiBNOglJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+Ci1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy92aWRlby9vbWFwLwpAQCAtMzg4OCw2ICszOTE0LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC00MDc2LDYgKzQxMTEsMTMgQEAKIE06CVBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgogTToJSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+CiBTOglTdXBwb3J0ZWQKK0Y6CWtlcm5lbC9wZXJmX2V2ZW50LmMKK0Y6CWluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCitGOglhcmNoLyovKi9rZXJuZWwvcGVyZl9ldmVudC5jCitGOglhcmNoLyovaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCitGOglhcmNoLyovbGliL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCitGOgl0b29scy9wZXJmLwogCiBQRVJTT05BTElUWSBIQU5ETElORwogTToJQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgpAQCAtNDMwMiwyMSArNDM0NCwyMyBAQAogCiBSQURFT04gRlJBTUVCVUZGRVIgRElTUExBWSBEUklWRVIKIE06CUJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbioKIEY6CWluY2x1ZGUvbGludXgvcmFkZW9uZmIuaAogCiBSQUdFMTI4IEZSQU1FQlVGRkVSIERJU1BMQVkgRFJJVkVSCiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKIAogUkFMSU5LIFJUMlgwMCBXSVJFTEVTUyBMQU4gRFJJVkVSCiBQOglydDJ4MDAgcHJvamVjdAorTToJSXZvIHZhbiBEb29ybiA8SXZEb29ybkBnbWFpbC5jb20+CitNOglHZXJ0amFuIHZhbiBXaW5nZXJkZSA8Z3dpbmdlcmRlQGdtYWlsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJdXNlcnNAcnQyeDAwLnNlcmlhbG1vbmtleS5jb20KK0w6CXVzZXJzQHJ0MngwMC5zZXJpYWxtb25rZXkuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbS8KIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaXZkL3J0MngwMC5naXQKQEAgLTQ0MDIsNyArNDQ0Niw3IEBACiBNOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GCURvY3VtZW50YXRpb24vcmZraWxsLnR4dAorRjoJRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CiBGOgluZXQvcmZraWxsLwogCiBSSVNDT004IERSSVZFUgpAQCAtNDQ0Niw3ICs0NDkwLDcgQEAKIAogUzMgU0FWQUdFIEZSQU1FQlVGRkVSIERSSVZFUgogTToJQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQGdtYWlsLmNvbT4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vc2F2YWdlLwogCkBAIC00NTI1LDEyICs0NTY5LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3NjaGVkLmgKIAogU0NPUkUgQVJDSElURUNUVVJFCi1QOglDaGVuIExpcWluCi1NOglsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20KLVA6CUxlbm5veCBXdQotTToJbGVubm94Lnd1QGdtYWlsLmNvbQorTToJQ2hlbiBMaXFpbiA8bGlxaW4uY2hlbkBzdW5wbHVzY3QuY29tPgorTToJTGVubm94IFd1IDxsZW5ub3gud3VAZ21haWwuY29tPgogVzoJaHR0cDovL3d3dy5zdW5wbHVzY3QuY29tCiBTOglTdXBwb3J0ZWQKK0Y6CWFyY2gvc2NvcmUvCiAKIFNDU0kgQ0RST00gRFJJVkVSCiBNOglKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CkBAIC00NjAzLDI3ICs0NjQ2LDI3IEBACiBGOglkcml2ZXJzL21tYy9ob3N0L3Nkcmljb2hfY3MuYwogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgRFJJVkVSCi1TOiAgICAgT3JwaGFuCi1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwotRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgorUzoJT3JwaGFuCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSwgT1BFTiBGSVJNV0FSRSBCSU5ESU5HUyAoU0RIQ0ktT0YpCiBNOglBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCi1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuKgorRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBTQU1TVU5HIERSSVZFUgogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKIAogU0VDVVJJVFkgU1VCU1lTVEVNCiBNOglKYW1lcyBNb3JyaXMgPGptb3JyaXNAbmFtZWkub3JnPgogTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZyAoc3VnZ2VzdGVkIENjOikKLVQ6CWdpdCBnaXQ6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKIFc6CWh0dHA6Ly9zZWN1cml0eS53aWtpLmtlcm5lbC5vcmcvCiBTOglTdXBwb3J0ZWQKIEY6CXNlY3VyaXR5LwpAQCAtNDY1OSwxMiArNDcwMiwxMSBAQAogRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAogCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotUDogICAgIEpheWFtb2hhbiBLYWxsaWNrYWwKLU06ICAgICBqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tCi1MOiAgICAgbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6ICAgICBodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCi1TOiAgICAgU3VwcG9ydGVkCi1GOiAgICAgZHJpdmVycy9zY3NpL2JlMmlzY3NpLworTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZTJpc2NzaS8KIAogU0VSVkVSIEVOR0lORVMgMTBHYnBzIE5JQyAtIEJsYWRlRW5naW5lIDIgRFJJVkVSCiBNOglTYXRoeWEgUGVybGEgPHNhdGh5YXBAc2VydmVyZW5naW5lcy5jb20+CkBAIC00NzE5LDggKzQ3NjEsNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MCoKIAogU0lNUExFIEZJUk1XQVJFIElOVEVSRkFDRSAoU0ZJKQotUDoJTGVuIEJyb3duCi1NOglsZW5iQGtlcm5lbC5vcmcKK006CUxlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPgogTDoJc2ZpLWRldmVsQHNpbXBsZWZpcm13YXJlLm9yZwogVzoJaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1zZmktMi42LmdpdApAQCAtNTE2OCw2ICs1MjA5LDIwIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2NoYXIvdHBtLwogCitUUkFDSU5HCitNOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KK006CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KK006CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKK0Y6CWFyY2gvKi8qLyovZnRyYWNlLmgKK0Y6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKK0Y6CWluY2x1ZGUvKi9mdHJhY2UuaAorRjoJaW5jbHVkZS9saW51eC90cmFjZSouaAorRjoJaW5jbHVkZS90cmFjZS8KK0Y6CWtlcm5lbC90cmFjZS8KKwogVFJJVklBTCBQQVRDSEVTCiBNOglKaXJpIEtvc2luYSA8dHJpdmlhbEBrZXJuZWwub3JnPgogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qaWtvcy90cml2aWFsLmdpdApAQCAtNTU5OCw3ICs1NjUzLDcgQEAKIAogVVZFU0FGQiBEUklWRVIKIE06CU1pY2hhbCBKYW51c3pld3NraSA8c3BvY2tAZ2VudG9vLm9yZz4KLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50eHQKQEAgLTU2MzEsNyArNTY4Niw3IEBACiBWSUEgVU5JQ0hST01FKFBSTykvQ0hST01FOSBGUkFNRUJVRkZFUiBEUklWRVIKIE06CUpvc2VwaCBDaGFuIDxKb3NlcGhDaGFuQHZpYS5jb20udHc+CiBNOglTY290dCBGYW5nIDxTY290dEZhbmdAdmlhdGVjaC5jb20uY24+Ci1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3ZpZGVvL3ZpYS8KIApAQCAtNTY1Niw2ICs1NzExLDEzIEBACiBGOglkcml2ZXJzL3ZseW5xL3ZseW5xLmMKIEY6CWluY2x1ZGUvbGludXgvdmx5bnEuaAogCitWTVdBUkUgVk1YTkVUMyBFVEhFUk5FVCBEUklWRVIKK006CVNocmV5YXMgQmhhdGV3YXJhIDxzYmhhdGV3YXJhQHZtd2FyZS5jb20+CitNOgkiVk13YXJlLCBJbmMuIiA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvdm14bmV0My8KKwogVk9MVEFHRSBBTkQgQ1VSUkVOVCBSRUdVTEFUT1IgRlJBTUVXT1JLCiBNOglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CkBAIC01NzI3LDggKzU3ODksNyBAQAogRjoJZHJpdmVycy9zY3NpL3dkNzAwMC5jCiAKIFdJTkJPTkQgQ0lSIERSSVZFUgotUDoJRGF2aWQgSORyZGVtYW4KLU06CWRhdmlkQGhhcmRlbWFuLm51CitNOglEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMKIApAQCAtNTc4NSw5ICs1ODQ2LDcgQEAKIEY6CWluY2x1ZGUvbGludXgvd205N3h4LmgKIAogV09MRlNPTiBNSUNST0VMRUNUUk9OSUNTIFBNSUMgRFJJVkVSUwotUDoJTWFyayBCcm93bgotTToJYnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20KLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK006CU1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogVDoJZ2l0IGdpdDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9saW51eC0yLjYtYXVkaW9wbHVzCiBXOglodHRwOi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL25vZGUvOAogUzoJU3VwcG9ydGVkCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDMyNjc5MTUuLjMzZDQ3MzIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDMyCi1FWFRSQVZFUlNJT04gPSAtcmM0CitFWFRSQVZFUlNJT04gPQogTkFNRSA9IE1hbi1FYXRpbmcgU2VhbHMgb2YgQW50aXF1aXR5CiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0yMjEsNyArMjIxLDcgQEAKIAogSE9TVENDICAgICAgID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKLUhPU1RDRkxBR1MgICA9IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCitIT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgogSE9TVENYWEZMQUdTID0gLU8yCiAKICMgRGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGJvdGguCkBAIC0zNzksNiArMzc5LDcgQEAKIFBIT05ZICs9IHNjcmlwdHNfYmFzaWMKIHNjcmlwdHNfYmFzaWM6CiAJJChRKSQoTUFLRSkgJChidWlsZCk9c2NyaXB0cy9iYXNpYworCSQoUSlybSAtZiAudG1wX3F1aWV0X3JlY29yZG1jb3VudAogCiAjIFRvIGF2b2lkIGFueSBpbXBsaWNpdCBydWxlIHRvIGtpY2sgaW4sIGRlZmluZSBhbiBlbXB0eSBjb21tYW5kLgogc2NyaXB0cy9iYXNpYy8lOiBzY3JpcHRzX2Jhc2ljIDsKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCA3ZjQxOGJiLi5lZWYzYmJiIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xMjYsNCArMTI2LDExIEBACiBjb25maWcgSEFWRV9ERUZBVUxUX05PX1NQSU5fTVVURVhFUwogCWJvb2wKIAorY29uZmlnIEhBVkVfSFdfQlJFQUtQT0lOVAorCWJvb2wKKwlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgQU5PTl9JTk9ERVMKKwlzZWxlY3QgUEVSRl9FVkVOVFMKKworCiBzb3VyY2UgImtlcm5lbC9nY292L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvb2Jqc3RyaXAuYyBiL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCmluZGV4IDlkMDcyN2QuLjM2N2Q1M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCisrKyBiL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jCkBAIC0zNSw3ICszNSw3IEBACiBjb25zdCBjaGFyICogcHJvZ19uYW1lOwogCiAKLXZvaWQKK3N0YXRpYyB2b2lkCiB1c2FnZSAodm9pZCkKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAppbmRleCBlNDI4MjNlLi4yNWRhMDAxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0yNiw4ICsyNiw2IEBACiAjZGVmaW5lIEZfR0VUT1dOCTYJLyogIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KLSNkZWZpbmUgRl9TRVRPV05fRVgJMTIKLSNkZWZpbmUgRl9HRVRPV05fRVgJMTMKIAogLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KICNkZWZpbmUgRl9SRExDSwkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDUwNzZhODguLmIzZTg4ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTUwLDMyICs1MCwzNSBAQAogcmVnaXN0ZXIgc3RydWN0IHRocmVhZF9pbmZvICpfX2N1cnJlbnRfdGhyZWFkX2luZm8gX19hc21fXygiJDgiKTsKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpICBfX2N1cnJlbnRfdGhyZWFkX2luZm8KIAorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCiAvKiBUaHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbi4gICovCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIDEKICNkZWZpbmUgVEhSRUFEX1NJWkUgKDIqUEFHRV9TSVpFKQogCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4NDAwMDAwMDAKIAogLyoKICAqIFRocmVhZCBpbmZvcm1hdGlvbiBmbGFnczoKICAqIC0gdGhlc2UgYXJlIHByb2Nlc3Mgc3RhdGUgZmxhZ3MgYW5kIHVzZWQgZnJvbSBhc3NlbWJseQotICogLSBwZW5kaW5nIHdvcmstdG8tYmUtZG9uZSBmbGFncyBjb21lIGZpcnN0IHRvIGZpdCBpbiBhbmQgaW1tZWRpYXRlIG9wZXJhbmQuCisgKiAtIHBlbmRpbmcgd29yay10by1iZS1kb25lIGZsYWdzIGNvbWUgZmlyc3QgYW5kIG11c3QgYmUgYXNzaWduZWQgdG8gYmUKKyAqICAgd2l0aGluIGJpdHMgMCB0byA3IHRvIGZpdCBpbiBhbmQgaW1tZWRpYXRlIG9wZXJhbmQuCisgKiAtIEFMUEhBX1VBQ19TSElGVCBiZWxvdyBtdXN0IGJlIGtlcHQgY29uc2lzdGVudCB3aXRoIHRoZSB1bmFsaWduZWQKKyAqICAgY29udHJvbCBmbGFncy4KICAqCiAgKiBUSUZfU1lTQ0FMTF9UUkFDRSBpcyBrbm93biB0byBiZSAwIHZpYSBibGJzLgogICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTAJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KLSNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTEJLyogc2lnbmFsIHBlbmRpbmcgKi8KLSNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkyCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KLSNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTMJLyogcG9sbF9pZGxlIGlzIHBvbGxpbmcgTkVFRF9SRVNDSEVEICovCi0jZGVmaW5lIFRJRl9ESUVfSUZfS0VSTkVMCTQJLyogZGlrIHJlY3Vyc2lvbiBsb2NrICovCi0jZGVmaW5lIFRJRl9VQUNfTk9QUklOVAkJNQkvKiBzZWUgc3lzaW5mby5oICovCi0jZGVmaW5lIFRJRl9VQUNfTk9GSVgJCTYKLSNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTcKLSNkZWZpbmUgVElGX01FTURJRQkJOAotI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KLSNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJMTAJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTEJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCisjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCisjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCisjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk4CS8qIHBvbGxfaWRsZSBpcyBwb2xsaW5nIE5FRURfUkVTQ0hFRCAqLworI2RlZmluZSBUSUZfRElFX0lGX0tFUk5FTAk5CS8qIGRpayByZWN1cnNpb24gbG9jayAqLworI2RlZmluZSBUSUZfVUFDX05PUFJJTlQJCTEwCS8qIHNlZSBzeXNpbmZvLmggKi8KKyNkZWZpbmUgVElGX1VBQ19OT0ZJWAkJMTEKKyNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTEyCisjZGVmaW5lIFRJRl9NRU1ESUUJCTEzCisjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJMTQJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQpAQCAtOTQsNyArOTcsNyBAQAogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkoX1RJRl9XT1JLX01BU0sJCVwKIAkJCQkgfCBfVElGX1NZU0NBTExfVFJBQ0UpCiAKLSNkZWZpbmUgQUxQSEFfVUFDX1NISUZUCQk2CisjZGVmaW5lIEFMUEhBX1VBQ19TSElGVAkJMTAKICNkZWZpbmUgQUxQSEFfVUFDX01BU0sJCSgxIDw8IFRJRl9VQUNfTk9QUklOVCB8IDEgPDwgVElGX1VBQ19OT0ZJWCB8IFwKIAkJCQkgMSA8PCBUSUZfVUFDX1NJR0JVUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKaW5kZXggOGUwNTllNS4uNTNkZDJmMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCkBAIC0xMTAzLDYgKzExMDMsOCBAQAogCSAqIEFsbG9jYXRlIHRoZSBpbmZvIHN0cnVjdHVyZS4KIAkgKi8KIAlhZ3AgPSBrbWFsbG9jKHNpemVvZigqYWdwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZ3ApCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBGaWxsIGl0IGluLgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jCmluZGV4IDc2Njg2NDkuLjIxOWJmMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMKQEAgLTc1Nyw2ICs3NTcsOCBAQAogCSAqIEFsbG9jYXRlIHRoZSBpbmZvIHN0cnVjdHVyZS4KIAkgKi8KIAlhZ3AgPSBrbWFsbG9jKHNpemVvZigqYWdwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZ3ApCisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBGaWxsIGl0IGluLgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwppbmRleCBjYzc4MzQ2Li5jMGRlMDcyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwpAQCAtOTIsNyArOTIsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGlycSwgaikpOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaXJxXS5jaGlwLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaXJxXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlYyVzIiwKIAkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCk/JysnOicgJywKIAkJCWFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCmluZGV4IDM4YzgwNWQuLmNmZGU4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcnRjX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJSVEMiLAorCS5uYW1lCQk9ICJSVEMiLAogCS5zdGFydHVwCT0gcnRjX3N0YXJ0dXAsCiAJLnNodXRkb3duCT0gcnRjX2VuYWJsZV9kaXNhYmxlLAogCS5lbmFibGUJCT0gcnRjX2VuYWJsZV9kaXNhYmxlLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2k4MjU5LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwppbmRleCA1MGJmZWM5Li44M2E5YWMyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwpAQCAtODQsNyArODQsNyBAQAogfQogCiBzdHJ1Y3QgaXJxX2NoaXAgaTgyNTlhX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJYVC1QSUMiLAorCS5uYW1lCQk9ICJYVC1QSUMiLAogCS5zdGFydHVwCT0gaTgyNTlhX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IGk4MjU5YV9kaXNhYmxlX2lycSwKIAkuZW5hYmxlCQk9IGk4MjU5YV9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3B5eGlzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYwppbmRleCA2OTE5OWE3Li45ODljZTQ2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYwpAQCAtNzEsNyArNzEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB5eGlzX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJQWVhJUyIsCisJLm5hbWUJCT0gIlBZWElTIiwKIAkuc3RhcnR1cAk9IHB5eGlzX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IHB5eGlzX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gcHl4aXNfZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYwppbmRleCA4NTIyOTM2Li5kNjNlOTNlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfc3JtLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qIEhhbmRsZSBpbnRlcnJ1cHRzIGZyb20gdGhlIFNSTSwgYXNzdW1pbmcgbm8gYWRkaXRpb25hbCB3ZWlyZG5lc3MuICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzcm1faXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIlNSTSIsCisJLm5hbWUJCT0gIlNSTSIsCiAJLnN0YXJ0dXAJPSBzcm1fc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duCT0gc3JtX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gc3JtX2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IDM4MjAzNWUuLjIwYTMwYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC05MCw3ICs5MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYWxjb3JfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIkFMQ09SIiwKKwkubmFtZQkJPSAiQUxDT1IiLAogCS5zdGFydHVwCT0gYWxjb3Jfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duCT0gYWxjb3JfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSBhbGNvcl9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jCmluZGV4IGVkMzQ5NDMuLmFmZmQwZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKQEAgLTcyLDcgKzcyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjYWJyaW9sZXRfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIkNBQlJJT0xFVCIsCisJLm5hbWUJCT0gIkNBQlJJT0xFVCIsCiAJLnN0YXJ0dXAJPSBjYWJyaW9sZXRfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duCT0gY2FicmlvbGV0X2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gY2FicmlvbGV0X2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCmluZGV4IDQ2ZTcwZWMuLmQ2NGUxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCkBAIC0xOTksNyArMTk5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkcDI2NF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiRFAyNjQiLAorCS5uYW1lCQk9ICJEUDI2NCIsCiAJLnN0YXJ0dXAJPSBkcDI2NF9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSBkcDI2NF9kaXNhYmxlX2lycSwKIAkuZW5hYmxlCQk9IGRwMjY0X2VuYWJsZV9pcnEsCkBAIC0yMTAsNyArMjEwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY2xpcHBlcl9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiQ0xJUFBFUiIsCisJLm5hbWUJCT0gIkNMSVBQRVIiLAogCS5zdGFydHVwCT0gY2xpcHBlcl9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gY2xpcHBlcl9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2ViNjRwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYwppbmRleCA2NjBjMjNlLi5kZjIwOTBjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYwpAQCAtNzAsNyArNzAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGViNjRwX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJFQjY0UCIsCisJLm5hbWUJCT0gIkVCNjRQIiwKIAkuc3RhcnR1cAk9IGViNjRwX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IGViNjRwX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gZWI2NHBfZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19laWdlci5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKaW5kZXggYjk5ZWE0OC4uM2NhMWRiYyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKQEAgLTgxLDcgKzgxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBlaWdlcl9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiRUlHRVIiLAorCS5uYW1lCQk9ICJFSUdFUiIsCiAJLnN0YXJ0dXAJPSBlaWdlcl9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSBlaWdlcl9kaXNhYmxlX2lycSwKIAkuZW5hYmxlCQk9IGVpZ2VyX2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKaW5kZXggZWYwYjgzYS4uN2E3YWUzNiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwpAQCAtMTE5LDcgKzExOSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgamVuc2VuX2xvY2FsX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJMT0NBTCIsCisJLm5hbWUJCT0gIkxPQ0FMIiwKIAkuc3RhcnR1cAk9IGplbnNlbl9sb2NhbF9zdGFydHVwLAogCS5zaHV0ZG93bgk9IGplbnNlbl9sb2NhbF9zaHV0ZG93biwKIAkuZW5hYmxlCQk9IGplbnNlbl9sb2NhbF9lbmFibGUsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKaW5kZXggYmJmYzRmMi4uMGJiM2I1YyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFydmVsX2xlZ2FjeV9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiTEVHQUNZIiwKKwkubmFtZQkJPSAiTEVHQUNZIiwKIAkuc3RhcnR1cAk9IG1hcnZlbF9pcnFfbm9vcF9yZXR1cm4sCiAJLnNodXRkb3duCT0gbWFydmVsX2lycV9ub29wLAogCS5lbmFibGUJCT0gbWFydmVsX2lycV9ub29wLApAQCAtMTgwLDcgKzE4MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvN19sc2lfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIkxTSSIsCisJLm5hbWUJCT0gIkxTSSIsCiAJLnN0YXJ0dXAJPSBpbzdfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duCT0gaW83X2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gaW83X2VuYWJsZV9pcnEsCkBAIC0xOTAsNyArMTkwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW83X21zaV9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiTVNJIiwKKwkubmFtZQkJPSAiTVNJIiwKIAkuc3RhcnR1cAk9IGlvN19zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSBpbzdfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSBpbzdfZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwppbmRleCA0ZTM2NjY0Li5lZTg4NjUxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCkBAIC02OSw3ICs2OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWlrYXNhX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJNSUtBU0EiLAorCS5uYW1lCQk9ICJNSUtBU0EiLAogCS5zdGFydHVwCT0gbWlrYXNhX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IG1pa2FzYV9kaXNhYmxlX2lycSwKIAkuZW5hYmxlCQk9IG1pa2FzYV9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYwppbmRleCAzNTc1M2ExLi44NjUwM2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYwpAQCAtNzQsNyArNzQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG5vcml0YWtlX2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJOT1JJVEFLRSIsCisJLm5hbWUJCT0gIk5PUklUQUtFIiwKIAkuc3RhcnR1cAk9IG5vcml0YWtlX3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IG5vcml0YWtlX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gbm9yaXRha2VfZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCmluZGV4IGYzYWVjN2UuLjI2YzMyMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcmF3aGlkZV9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiUkFXSElERSIsCisJLm5hbWUJCT0gIlJBV0hJREUiLAogCS5zdGFydHVwCT0gcmF3aGlkZV9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSByYXdoaWRlX2Rpc2FibGVfaXJxLAogCS5lbmFibGUJCT0gcmF3aGlkZV9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19ydWZmaWFuLmMKaW5kZXggZDlmOWNmZS4uOGRlMTA0NiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcnVmZmlhbi5jCkBAIC02Niw3ICs2Niw3IEBACiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwogfQogCi0jZGVmaW5lIFJVRkZJQU5fTEFUQ0gJKChQSVRfVElDS19SQVRFICsgSFogLyAyKSAvIEhaKQorI2RlZmluZSBSVUZGSUFOX0xBVENICURJVl9ST1VORF9DTE9TRVNUKFBJVF9USUNLX1JBVEUsIEhaKQogCiBzdGF0aWMgdm9pZCBfX2luaXQKIHJ1ZmZpYW5faW5pdF9ydGModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKaW5kZXggZmM5MjQ2My4uYmUxNjExMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKQEAgLTczLDcgKzczLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByeDE2NF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiUlgxNjQiLAorCS5uYW1lCQk9ICJSWDE2NCIsCiAJLnN0YXJ0dXAJPSByeDE2NF9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSByeDE2NF9kaXNhYmxlX2lycSwKIAkuZW5hYmxlCQk9IHJ4MTY0X2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCmluZGV4IDQyNmViNjkuLmIyYWJlMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCkBAIC01MDIsNyArNTAyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzYWJsZV9seW54X2lycV90eXBlID0gewotCS50eXBlbmFtZQk9ICJTQUJMRS9MWU5YIiwKKwkubmFtZQkJPSAiU0FCTEUvTFlOWCIsCiAJLnN0YXJ0dXAJPSBzYWJsZV9seW54X3N0YXJ0dXBfaXJxLAogCS5zaHV0ZG93bgk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSBzYWJsZV9seW54X2VuYWJsZV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKaW5kZXggODMwMzE4Yy4uMjMwNDY0OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYwpAQCAtNzUsNyArNzUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRha2FyYV9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiVEFLQVJBIiwKKwkubmFtZQkJPSAiVEFLQVJBIiwKIAkuc3RhcnR1cAk9IHRha2FyYV9zdGFydHVwX2lycSwKIAkuc2h1dGRvd24JPSB0YWthcmFfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSB0YWthcmFfZW5hYmxlX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggODg5NzhmYy4uMjg4MDUzMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRpdGFuX2lycV90eXBlID0gewotICAgICAgIC50eXBlbmFtZSAgICAgICA9ICJUSVRBTiIsCisgICAgICAgLm5hbWUJICAgICAgID0gIlRJVEFOIiwKICAgICAgICAuc3RhcnR1cCAgICAgICAgPSB0aXRhbl9zdGFydHVwX2lycSwKICAgICAgICAuc2h1dGRvd24gICAgICAgPSB0aXRhbl9kaXNhYmxlX2lycSwKICAgICAgICAuZW5hYmxlICAgICAgICAgPSB0aXRhbl9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCBlOTFiNGMzLi42MmZkOTcyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgd2lsZGZpcmVfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIldJTERGSVJFIiwKKwkubmFtZQkJPSAiV0lMREZJUkUiLAogCS5zdGFydHVwCT0gd2lsZGZpcmVfc3RhcnR1cF9pcnEsCiAJLnNodXRkb3duCT0gd2lsZGZpcmVfZGlzYWJsZV9pcnEsCiAJLmVuYWJsZQkJPSB3aWxkZmlyZV9lbmFibGVfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCmluZGV4IDc2NDczMjUuLmU4ZjczODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC01NSwxMCArNTUsMTAgQEAKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjk5LDcgKzI5OSw5IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTY3MCw3ICs2NzIsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NCw2ICs3ODYsNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTgyMCw2ICs4MjMsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODk2LDcgKzkwMCwxMyBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQogCiAjCiAjIEhJRCBEZXZpY2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCmluZGV4IGFmNzRjYzIuLmJjZmFkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnCkBAIC0xLDE1ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmM0Ci0jIE1vbiBNYXkgIDQgMTE6NTg6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgorIyBTYXQgTm92ICA3IDIwOjMxOjE4IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC0xOCwxMyArMTYsMTIgQEAKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00NiwxMSArNDMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOQogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtNzMsNyArNzEsNiBAQAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC04Niw2ICs4MywxMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQpAQCAtOTUsMTMgKzk2LDE3IEBACiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKIENPTkZJR19LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNCw3ICsxMTksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM1LDE5ICsxNDAsMjIgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTYsMjUgKzE2NCwyNyBAQAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9LSVJLV09PRD15Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIE1hcnZlbGwgS2lya3dvb2QgSW1wbGVtZW50YXRpb25zCkBAIC0xODUsNiArMTk1LDcgQEAKIENPTkZJR19NQUNIX01WODhGNjI4MUdUV19HRT15CiBDT05GSUdfTUFDSF9TSEVFVkFQTFVHPXkKIENPTkZJR19NQUNIX1RTMjE5PXkKK0NPTkZJR19NQUNIX09QRU5SRF9CQVNFPXkKIENPTkZJR19QTEFUX09SSU9OPXkKIAogIwpAQCAtMTk1LDcgKzIwNiw3IEBACiAjIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX0ZFUk9DRU9OPXkKIENPTkZJR19DUFVfVExCX0ZFUk9DRU9OPXkKQEAgLTIxMSw2ICsyMjIsNyBAQAogQ09ORklHX09VVEVSX0NBQ0hFPXkKIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMj15CiAjIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMl9XUklURVRIUk9VR0ggaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTIzNSwxMSArMjQ3LDEyIEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQogIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0yNTQsMTAgKzI2NywxMiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFk9eQogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMzQ1LDYgKzM2MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY3LDYgKzM4Myw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzgzLDE3ICs0MDAsMTggQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiBDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKKyMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9eQogIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExPXkKLQotIwotIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgotIwogQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKICMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKQEAgLTQxNCw2ICs0MzIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjUsOSArNDQ0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ5NCw2ICs1MTMsNyBAQAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX00yNVA4MD15CiBDT05GSUdfTTI1UFhYX1VTRV9GQVNUX1JFQUQ9eQorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTQzLDYgKzU2Myw3IEBACiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTU2NywxMCArNTg4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01ODcsNiArNjA0LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTk1LDYgKzYxNCw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC02MTEsNyArNjMxLDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYyMywxMSArNjQyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY0OSw2ICs2NzEsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY3Niw2ICs2OTksNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02OTMsMTMgKzcxNywxNiBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NjgsNiArNzk1LDkgQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtNzg5LDYgKzgxOSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKQEAgLTc5NywxMCArODI4LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiBDT05GSUdfTElCRVJUQVM9eQpAQCAtODIwLDkgKzg0OCw3IEBACiAjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NV0w4SyBpcyBub3Qgc2V0CiAjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSOTE3MF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAogIyBDT05GSUdfSVdMV0lGSSBpcyBub3Qgc2V0CkBAIC04MzIsNiArODU4LDggQEAKICMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODU1LDYgKzg4Myw3IEBACiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTg3OCwxMyArOTA3LDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05NDMsNiArOTc4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk5OCwxMCArMTAzNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMjMsMTEgKzEwNTUsNDcgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA0MSwzMyArMTEwOSwyOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTA4Nyw3ICsxMTUwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTA2LDEwICsxMTY4LDEyIEBACiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CiAjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQogQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTEyMyw5ICsxMTg3LDE0IEBACiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CiAjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CiAjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CiAjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtMTE1MCwxOCArMTIxOSwyMSBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xMjUyLDExICsxMzI0LDE0IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfTVZTRElPPXkKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC0xMjY2LDcgKzEzNDEsNyBAQAogIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKQEAgLTEyNzgsMTEgKzEzNTMsMTQgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xMzE0LDYgKzEzOTIsNyBAQAogQ09ORklHX1JUQ19EUlZfUzM1MzkwQT15CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMzI1LDYgKzE0MDQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM2MCw4ICsxNDQwLDExIEBACiAjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3OSwxMCArMTQ2MiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0NTUsNyArMTU0MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MzAsNiArMTYxNSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1NDcsNiArMTYzMyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE1NjcsMTIgKzE2NTQsMTQgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTE1ODEsMjUgKzE2NzAsMTIgQEAKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2MjMsNyArMTY5OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY2NSwxMSArMTc0MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTcxNCw2ICsxNzkxLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorQ09ORklHX0NSWVBUT19ERVZfTVZfQ0VTQT15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCmluZGV4IDhkYTc1ZGUuLjI2NGY1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwpAQCAtMzA0LDcgKzMwNCw3IEBACiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgxMEMwODAwMAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgxMDIwMDAwMAogIyBDT05GSUdfWkJPT1RfUk9NIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMwLDExNTIwMG44IgorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzIsMTE1MjAwbjgiCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCmluZGV4IDM1N2Q0MDIuLmIzYzhjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTk2OSw3ICs5NjksNiBAQAogIwogQ09ORklHX1VTQl9PVEdfVVRJTFM9eQogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfVVNCPXkKICMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwppbmRleCBiNTRhZDJlLi4xNTBkZWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKQEAgLTYxMSw3ICs2MTEsNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNjM0LDcgKzYzNCw4IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT049eQogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtODM0LDcgKzgzNSwyOSBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CitDT05GSUdfU05EX0RSSVZFUlM9eQorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DX01DQlNQPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQT15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CitDT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKKwogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEwMjAsNyArMTA0MywxMyBAQAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CitDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKKwogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTA4NCw5ICsxMTEzLDEyIEBACiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAorQ09ORklHX1JFR1VMQVRPUj15CitDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKKwogIwogIyBGaWxlIHN5c3RlbXMKICMKQEAgLTE0MDcsMyArMTQzOSwxMCBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CisKKyMgYWRkZWQgYnkgaGFuZCBmb3Igbm93CitDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15CitDT05GSUdfVVNCX09UR19VVElMUz15CitDT05GSUdfVFdMNDAzMF9VU0I9eQorQ09ORklHX01NQ19PTUFQX0hTPXkKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCmluZGV4IDhhNGE3ZTIuLjVhMzA1ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKQEAgLTE3MDMsNyArMTcwMywxNCBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKaW5kZXggOWUyMzg1Mi4uNTM4M2NkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCkBAIC0xLDE1ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmM0Ci0jIE1vbiBNYXkgIDQgMTQ6MDc6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgorIyBTYXQgTm92ICA3IDIwOjUyOjIxIDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC0xOCwxMyArMTYsMTIgQEAKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00NiwxMSArNDMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtNjksNyArNjcsNiBAQAogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODIsNiArNzksMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKICMgQ09ORklHX1NMVUJfREVCVUcgaXMgbm90IHNldApAQCAtOTEsMTMgKzkyLDE3IEBACiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKIENPTkZJR19LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTA5LDcgKzExNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzAsMTkgKzEzNSwyMiBAQAogIwogIyBTeXN0ZW0gVHlwZQogIworQ09ORklHX01NVT15CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE1MSwyNSArMTU5LDI3IEBACiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PUklPTjVYPXkKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgT3Jpb24gSW1wbGVtZW50YXRpb25zCkBAIC0xODcsNiArMTk3LDkgQEAKIENPTkZJR19NQUNIX1RTNzhYWD15CiBDT05GSUdfTUFDSF9NVjIxMjA9eQogQ09ORklHX01BQ0hfRURNSU5JX1YyPXkKK0NPTkZJR19NQUNIX0QyTkVUPXkKK0NPTkZJR19NQUNIX0JJR0RJU0s9eQorQ09ORklHX01BQ0hfTkVUMkJJRz15CiBDT05GSUdfTUFDSF9NU1MyPXkKIENPTkZJR19NQUNIX1dOUjg1NFQ9eQogQ09ORklHX01BQ0hfUkQ4OEY1MTgxTF9HRT15CkBAIC0yMDIsNyArMjE1LDcgQEAKIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX0ZFUk9DRU9OPXkKIENPTkZJR19DUFVfVExCX0ZFUk9DRU9OPXkKQEAgLTIxNSw3ICsyMjgsNyBAQAogQ09ORklHX0FSTV9USFVNQj15CiAjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yNDAsMTEgKzI1MywxMiBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CiAjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKQEAgLTI1OSwxMiArMjczLDE0IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX0NQVT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFk9eQogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMzA4LDYgKzMyNCw3IEBACiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQogCkBAIC0zNTYsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzgsNiArMzk2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zOTQsMTEgKzQxMywxNSBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDExLDYgKzQzNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyMiw5ICs0NDYsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNTM3LDYgKzU2MSw3IEBACiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CkBAIC01NTIsNyArNTc3LDkgQEAKICMKICMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU3NiwxMCArNjAzLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01OTYsNiArNjE5LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjA0LDYgKzYyOSw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC02MjAsNyArNjQ2LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYzMiwxMSArNjU3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjU4LDYgKzY4Niw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjg1LDYgKzcxNCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcwMywxMyArNzMzLDE2IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTc3Nyw2ICs4MTAsOCBAQAogIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc5OCw2ICs4MzMsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CkBAIC04MDYsMTAgKzg0Miw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzNSw2ICs4NjgsNyBAQAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC04NTUsMTMgKzg4OSwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05MTIsNiArOTUyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk2NywyMCArMTAwOCw1NSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTAzMCw2ICsxMTA2LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNDEsOSArMTExOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDU3LDMzICsxMTMzLDI2IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwOTcsNyArMTE2Niw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTExNiwxMCArMTE4NCwxMSBAQAogIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMTMwLDEwICsxMTk5LDExIEBACiAjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTExNjAsMTggKzEyMzAsMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTI0OCw3ICsxMzIxLDYgQEAKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC0xMjU4LDcgKzEzMzAsNyBAQAogIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogCkBAIC0xMjY5LDExICsxMzQxLDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTMwNiw2ICsxMzgxLDcgQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTM0NCw4ICsxNDIwLDExIEBACiAjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM1OCwxMCArMTQzNywxMCBAQAogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlM9bQotIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQyPW0KQEAgLTEzNzAsMTAgKzE0NDksMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDQ2LDcgKzE1MjgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTM3LDYgKzE2MTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTUyLDYgKzE2MzQsNyBAQAogQ09ORklHX1NDSEVEU1RBVFM9eQogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNTcyLDYgKzE2NTUsNyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CkBAIC0xNTc5LDYgKzE2NjMsNyBAQAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0xBVEVOQ1lUT1A9eQpAQCAtMTU4NywyNSArMTY3MiwxMiBAQAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTYyOSwyMCArMTcwMSwxOSBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUxHQVBJMj1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCi1DT05GSUdfQ1JZUFRPX0hBU0gyPW0KLUNPTkZJR19DUllQVE9fUk5HMj1tCi1DT05GSUdfQ1JZUFRPX1BDT01QPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTY3MCwxMSArMTc0MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjkxLDcgKzE3NjQsNyBAQAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKQEAgLTE3MTksNiArMTc5Miw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwppbmRleCA3ZDYxYWU2Li45NTNiYTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzMKLSMgVGh1IEp1bCAxNiAyMzozNjoxMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFNhdCBPY3QgMTcgMjM6MzI6MjQgMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQorQ09ORklHX0hBVkVfVENNPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTQ0LDExICs0NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MCwxNyArODEsMTUgQEAKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTMzLDYgKzEzMiw3IEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTY5LDExICsxNzAsMTMgQEAKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1UzMDA9eQogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIFNULUVyaWNzc29uIEFCIFUzMDAvVTMzMC9VMzM1L1UzNjUgUGxhdGZvcm0KQEAgLTE5NSw2ICsxOTgsNyBAQAogQ09ORklHX01BQ0hfVTMwMF9EVUFMX1JBTT15CiBDT05GSUdfVTMwMF9ERUJVRz15CiAjIENPTkZJR19NQUNIX1UzMDBfU0VNSV9JU19TSEFSRUQgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWT15CiAKICMKICMgQWxsIHRoZSBzZXR0aW5ncyBiZWxvdyBtdXN0IG1hdGNoIHRoZSBib290bG9hZGVyJ3Mgc2V0dGluZ3MKQEAgLTIwNyw3ICsyMTEsNyBAQAogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9WNFdCPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKQEAgLTIyMiw2ICsyMjYsNyBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIENPTkZJR19BUk1fVklDPXkKIENPTkZJR19BUk1fVklDX05SPTIKIENPTkZJR19DT01NT05fQ0xLREVWPXkKQEAgLTI0NSw2ICsyNTAsOCBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKQEAgLTI2NSw2ICsyNzIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKICMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldApAQCAtMzEzLDYgKzMyMSw3IEBACiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19ORVQ9eQogCkBAIC0zNTEsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTEsNiArNDAxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MDIsOSArNDEzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1Myw2ICs0NjQsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUyMCw2ICs1MzIsNyBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtNTQwLDEyICs1NTMsMTYgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01OTcsNiArNjE0LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjI5LDkgKzY0Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjUzLDE2ICs2NjgsMjEgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15CiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX01BWDE3MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC02OTAsMTAgKzcxMCwyNCBAQAogIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogQ09ORklHX0FCMzEwMF9DT1JFPXkKK0NPTkZJR19BQjMxMDBfT1RQPXkKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX0FCMzEwMD15CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03OTIsOSArODI2LDEwIEBACiAjCiBDT05GSUdfTU1DX0FSTU1NQ0k9eQogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtODIwLDEwICs4NTUsMTAgQEAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtODYzLDYgKzg5OCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC04NzgsMjcgKzkxNCwyNSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9BQjMxMDA9eQogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9QTDAzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BMMDMxIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0NPSDkwMTMzMT15CiBDT05GSUdfRE1BREVWSUNFUz15CiAKICMKICMgRE1BIERldmljZXMKICMKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotQ09ORklHX1JFR1VMQVRPUj15Ci0jIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MTMsNiArOTQ3LDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05NzUsNyArMTAxMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzMsNiArMTA2Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY2LDExICsxMTAxLDEzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEyMSw2ICsxMTU4LDcgQEAKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBmZDAzZmI2Li4zZDBjZGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00MTQsOSArNDE0LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2ljYWNoZV9hbGwodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKKwlleHRlcm4gdm9pZCB2Nl9pY2FjaGVfaW52YWxfYWxsKHZvaWQpOworCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKKyNlbHNlCiAJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJLWNhY2hlXG4iCiAJICAgIDoKIAkgICAgOiAiciIgKDApKTsKKyNlbmRpZgogfQogCiAjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0FOT05fUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjM2I5MTFlLi42YWFjM2Y1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtOTgsNiArOTgsOSBAQAogZXh0ZXJuIGludCBhcm1fZWxmX3JlYWRfaW1wbGllc19leGVjKGNvbnN0IHN0cnVjdCBlbGYzMl9oZHIgKiwgaW50KTsKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LHN0aykgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYygmKGV4KSwgc3RrKQogCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKTsKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1MgZHVtcF90YXNrX3JlZ3MKKwogI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAppbmRleCBkMTZlYzk3Li5jMDE5OTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0yMiw0ICsyMiwxMCBAQAogCUtNX1RZUEVfTlIKIH07CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorI2RlZmluZSBLTV9OTUkJCSgtMSkKKyNkZWZpbmUgS01fTk1JX1BURQkoLTEpCisjZGVmaW5lIEtNX0lSUV9QVEUJKC0xKQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYTQ1YWI1ZC4uYzJmMTYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1dCKSkKIAkJZHNiKCk7CiAKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKSkgeworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGdldF9jcHUoKSwgbW1fY3B1bWFzayhtbSkpKSB7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjNfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9GVUxMKSkKQEAgLTM2MCw2ICszNjAsNyBAQAogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJfQorCXB1dF9jcHUoKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA3MDIwMjE3Li40ZTUwNmQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNDAzLDYgKzQwMywxNSBAQAogI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzCQkoX19BUk1fTlJfQkFTRSs1KQogCiAvKgorICogKk5PVEUqOiBUaGlzIGlzIGEgZ2hvc3Qgc3lzY2FsbCBwcml2YXRlIHRvIHRoZSBrZXJuZWwuICBPbmx5IHRoZQorICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKKyAqIGV4aXN0ZW5jZS4gIERvbid0IGV2ZXIgdXNlIHRoaXMgZnJvbSB1c2VyIGNvZGUuCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fQVJNX05SX2NtcHhjaGcJCShfX0FSTV9OUl9CQVNFKzB4MDBmZmYwKQorI2VuZGlmCisKKy8qCiAgKiBUaGUgZm9sbG93aW5nIHN5c2NhbGxzIGFyZSBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgRUFCSS4KICAqLwogI2lmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAmJiAhZGVmaW5lZChfX0tFUk5FTF9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggMzIyNDEwYi4uZDI5MDNlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bWFjaC9lbnRyeS1tYWNyby5TPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgogCkBAIC02MDgsMzMgKzYwOSwzMyBAQAogIFRIVU1CKAlhZGQJcGMsIHI4CQkJKQogCW5vcAogCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzAKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMAogCVcoYikJZG9fZnBlCQkJCUAgQ1AjMSAoRlBFKQogCVcoYikJZG9fZnBlCQkJCUAgQ1AjMiAoRlBFKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMzCisJbW92d19wYwlscgkJCQlAIENQIzMKICNpZmRlZiBDT05GSUdfQ1JVTkNICiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNCAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNSAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNiAoTWF2ZXJpY2tDcnVuY2gpCiAjZWxzZQotCVcobW92KQlwYywgbHIJCQkJQCBDUCM0Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzUKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNgorCW1vdndfcGMJbHIJCQkJQCBDUCM0CisJbW92d19wYwlscgkJCQlAIENQIzUKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNgogI2VuZGlmCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzcKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOAotCVcobW92KQlwYywgbHIJCQkJQCBDUCM5CisJbW92d19wYwlscgkJCQlAIENQIzcKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjOAorCW1vdndfcGMJbHIJCQkJQCBDUCM5CiAjaWZkZWYgQ09ORklHX1ZGUAogCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTAgKFZGUCkKIAlXKGIpCWRvX3ZmcAkJCQlAIENQIzExIChWRlApCiAjZWxzZQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMCAoVkZQKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMSAoVkZQKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMCAoVkZQKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMSAoVkZQKQogI2VuZGlmCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEyCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEzCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzE0IChEZWJ1ZykKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCisJbW92d19wYwlscgkJCQlAIENQIzEyCisJbW92d19wYwlscgkJCQlAIENQIzEzCisJbW92d19wYwlscgkJCQlAIENQIzE0IChEZWJ1ZykKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCiAKICNpZmRlZiBDT05GSUdfTkVPTgogCS5hbGlnbgk2CkBAIC05MDgsMTAgKzkwOSwxMCBAQAogCSAqIEEgc3BlY2lhbCBnaG9zdCBzeXNjYWxsIGlzIHVzZWQgZm9yIHRoYXQgKHNlZSB0cmFwcy5jKS4KIAkgKi8KIAlzdG1mZAlzcCEsIHtyNywgbHJ9Ci0JbW92CXI3LCAjMHhmZjAwCQlAIDB4ZmZmMCBpbnRvIHI3IGZvciBFQUJJCi0Jb3JyCXI3LCByNywgIzB4ZjAKLQlzd2kJIzB4OWZmZmYwCisJbGRyCXI3LCA9MWYJCQlAIGl0J3MgMjAgYml0cworCXN3aQlfX0FSTV9OUl9jbXB4Y2hnCiAJbGRtZmQJc3AhLCB7cjcsIHBjfQorMToJLndvcmQJX19BUk1fTlJfY21weGNoZwogCiAjZWxpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwppbmRleCBhYzM0YzBkLi43ZTllZDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC0xMTAsNiArMTEwLDEzIEBACiAJbW92CVxyZCwgc3AsIGxzciAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJLmVuZG0KICNlbHNlCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCiAJLm1hY3JvCXN2Y19leGl0LCBycHNyCiAJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCkBAIC0xNDYsNiArMTUzLDE0IEBACiAJbHNyCVxyZCwgXHJkLCAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJbm9wCisJLmVuZG0KICNlbmRpZgkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKaW5kZXggODg1YTcyMS4uYjk1MDVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKQEAgLTk3LDcgKzk3LDcgQEAKIAlibAlwcmludGhleDgKIAlhZHIJcjAsIHN0cl9hMgogCWJsCXByaW50YXNjaWkKLQlhZHIJcjMsIDNmCisJYWRyCXIzLCA0ZgogCWxkbWlhCXIzLCB7cjQsIHI1LCByNn0JCUAgZ2V0IG1hY2hpbmUgZGVzYyBsaXN0CiAJc3ViCXI0LCByMywgcjQJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKIAlhZGQJcjUsIHI1LCByNAkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzkwZmJlZS4uMGQ5NmQwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMjgsNiArMzI4LDE1IEBACiB9CiAKIC8qCisgKiBGaWxsIGluIHRoZSB0YXNrJ3MgZWxmcmVncyBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLgorICovCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKQoreworCWVsZl9jb3JlX2NvcHlfcmVncyhlbGZyZWdzLCB0YXNrX3B0X3JlZ3ModCkpOworCXJldHVybiAxOworfQorCisvKgogICogZmlsbCBpbiB0aGUgZnBlIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuLi4KICAqLwogaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHVzZXJfZnAgKmZwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCmluZGV4IDE0MjNhMzQuLmU3NzE0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBSdXNzZWxsIEtpbmcKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogI2RlZmluZSBTV0lfU1lTX1NJR1JFVFVSTgkoMHhlZjAwMDAwMHwoX19OUl9zaWdyZXR1cm4pfChfX05SX09BQklfU1lTQ0FMTF9CQVNFKSkKICNkZWZpbmUgU1dJX1NZU19SVF9TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfcnRfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCisjZGVmaW5lIFNXSV9TWVNfUkVTVEFSVAkJKDB4ZWYwMDAwMDB8X19OUl9yZXN0YXJ0X3N5c2NhbGx8X19OUl9PQUJJX1NZU0NBTExfQkFTRSkKIAogLyoKICAqIFdpdGggRUFCSSwgdGhlIHN5c2NhbGwgbnVtYmVyIGhhcyB0byBiZSBsb2FkZWQgaW50byByNy4KQEAgLTQ5LDYgKzUwLDE4IEBACiB9OwogCiAvKgorICogRWl0aGVyIHdlIHN1cHBvcnQgT0FCSSBvbmx5LCBvciB3ZSBoYXZlIEVBQkkgd2l0aCB0aGUgT0FCSQorICogY29tcGF0IGxheWVyIGVuYWJsZWQuICBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmCisgKiB1c2VyIHNwYWNlIGlzIEVBQkkgb3Igbm90LCBhbmQgaWYgbm90IHdlIG11c3Qgbm90IGNsb2JiZXIgcjcuCisgKiBBbHdheXMgdXNpbmcgdGhlIE9BQkkgc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCisgKiBhbGwgdGhvc2UgY2FzZXMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGxvbmcgc3lzY2FsbF9yZXN0YXJ0X2NvZGVbMl0gPSB7CisJU1dJX1NZU19SRVNUQVJULAkvKiBzd2kJX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KKwkweGU0OWRmMDA0LAkJLyogbGRyCXBjLCBbc3BdLCAjNCAqLworfTsKKworLyoKICAqIGF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrKQpAQCAtNjQ1LDMyICs2NTgsMTYgQEAKIAkJCQlyZWdzLT5BUk1fcGMgLT0gNDsKICNlbHNlCiAJCQkJdTMyIF9fdXNlciAqdXNwOwotCQkJCXUzMiBzd2l2YWwgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKIAotCQkJCXJlZ3MtPkFSTV9zcCAtPSAxMjsKKwkJCQlyZWdzLT5BUk1fc3AgLT0gNDsKIAkJCQl1c3AgPSAodTMyIF9fdXNlciAqKXJlZ3MtPkFSTV9zcDsKIAotCQkJCS8qCi0JCQkJICogRWl0aGVyIHdlIHN1cHBvcnRzIE9BQkkgb25seSwgb3Igd2UgaGF2ZQotCQkJCSAqIEVBQkkgd2l0aCB0aGUgT0FCSSBjb21wYXQgbGF5ZXIgZW5hYmxlZC4KLQkJCQkgKiBJbiB0aGUgbGF0ZXIgY2FzZSB3ZSBkb24ndCBrbm93IGlmIHVzZXIKLQkJCQkgKiBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0Ci0JCQkJICogbm90IGNsb2JiZXIgcjcuICBBbHdheXMgdXNpbmcgdGhlIE9BQkkKLQkJCQkgKiBzeXNjYWxsIHNvbHZlcyB0aGF0IGlzc3VlIGFuZCB3b3JrcyBmb3IKLQkJCQkgKiBhbGwgdGhvc2UgY2FzZXMuCi0JCQkJICovCi0JCQkJc3dpdmFsID0gc3dpdmFsIC0gX19OUl9TWVNDQUxMX0JBU0UgKyBfX05SX09BQklfU1lTQ0FMTF9CQVNFOwotCi0JCQkJcHV0X3VzZXIocmVncy0+QVJNX3BjLCAmdXNwWzBdKTsKLQkJCQkvKiBzd2kgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKi8KLQkJCQlwdXRfdXNlcigweGVmMDAwMDAwIHwgc3dpdmFsLCAmdXNwWzFdKTsKLQkJCQkvKiBsZHIJcGMsIFtzcF0sICMxMiAqLwotCQkJCXB1dF91c2VyKDB4ZTQ5ZGYwMGMsICZ1c3BbMl0pOwotCi0JCQkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXVzcCwKLQkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSh1c3AgKyAzKSk7Ci0KLQkJCQlyZWdzLT5BUk1fcGMgPSByZWdzLT5BUk1fc3AgKyA0OworCQkJCWlmIChwdXRfdXNlcihyZWdzLT5BUk1fcGMsIHVzcCkgPT0gMCkgeworCQkJCQlyZWdzLT5BUk1fcGMgPSBLRVJOX1JFU1RBUlRfQ09ERTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZWdzLT5BUk1fc3AgKz0gNDsKKwkJCQkJZm9yY2Vfc2lnc2VndigwLCBjdXJyZW50KTsKKwkJCQl9CiAjZW5kaWYKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCmluZGV4IDI3YmVlY2UuLjZmY2ZlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAorKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKQEAgLTEsMTIgKzEsMTQgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgUnVzc2VsbCBLaW5nLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNkZWZpbmUgS0VSTl9TSUdSRVRVUk5fQ09ERQkoQ09ORklHX1ZFQ1RPUlNfQkFTRSArIDB4MDAwMDA1MDApCisjZGVmaW5lIEtFUk5fUkVTVEFSVF9DT0RFCShLRVJOX1NJR1JFVFVSTl9DT0RFICsgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpCiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNpZ3JldHVybl9jb2Rlc1s3XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c2NhbGxfcmVzdGFydF9jb2RlWzJdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKaW5kZXggZDM4MzFmNi4uOWFiNDE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCkBAIC0zNyw2ICszNywxMCBAQAogCXUzMiBzY3VfY3RybDsKIAogCXNjdV9jdHJsID0gX19yYXdfcmVhZGwoc2N1X2Jhc2UgKyBTQ1VfQ1RSTCk7CisJLyogYWxyZWFkeSBlbmFibGVkPyAqLworCWlmIChzY3VfY3RybCAmIDEpCisJCXJldHVybjsKKwogCXNjdV9jdHJsIHw9IDE7CiAJX19yYXdfd3JpdGVsKHNjdV9jdHJsLCBzY3VfYmFzZSArIFNDVV9DVFJMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCBmODM4ZjM2Li4zZjM2MWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgUnVzc2VsbCBLaW5nCiAgKiAgRnJhZ21lbnRzIHRoYXQgYXBwZWFyIHRoZSBzYW1lIGFzIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyAoQykgTGludXMgVG9ydmFsZHMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTI4LDcgKzUyOCw3IEBACiAJICogX19rdXNlcl9jbXB4Y2hnIGNvZGUgaW4gZW50cnktYXJtdi5TIHNob3VsZCBiZSBhd2FyZSBvZiBpdHMKIAkgKiBleGlzdGVuY2UuICBEb24ndCBldmVyIHVzZSB0aGlzIGZyb20gdXNlciBjb2RlLgogCSAqLwotCWNhc2UgMHhmZmYwOgorCWNhc2UgTlIoY21weGNoZyk6CiAJZm9yICg7OykgewogCQlleHRlcm4gdm9pZCBkb19EYXRhQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNTczLDcgKzU3Myw3IEBACiAJCSAgIGlmIG5vdCBpbXBsZW1lbnRlZCwgcmF0aGVyIHRoYW4gcmFpc2luZyBTSUdJTEwuICBUaGlzCiAJCSAgIHdheSB0aGUgY2FsbGluZyBwcm9ncmFtIGNhbiBncmFjZWZ1bGx5IGRldGVybWluZSB3aGV0aGVyCiAJCSAgIGEgZmVhdHVyZSBpcyBzdXBwb3J0ZWQuICAqLwotCQlpZiAobm8gPD0gMHg3ZmYpCisJCWlmICgobm8gJiAweGZmZmYpIDw9IDB4N2ZmKQogCQkJcmV0dXJuIC1FTk9TWVM7CiAJCWJyZWFrOwogCX0KQEAgLTc1MSw2ICs3NTEsOCBAQAogCSAqLwogCW1lbWNweSgodm9pZCAqKUtFUk5fU0lHUkVUVVJOX0NPREUsIHNpZ3JldHVybl9jb2RlcywKIAkgICAgICAgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpOworCW1lbWNweSgodm9pZCAqKUtFUk5fUkVTVEFSVF9DT0RFLCBzeXNjYWxsX3Jlc3RhcnRfY29kZSwKKwkgICAgICAgc2l6ZW9mKHN5c2NhbGxfcmVzdGFydF9jb2RlKSk7CiAKIAlmbHVzaF9pY2FjaGVfcmFuZ2UodmVjdG9ycywgdmVjdG9ycyArIFBBR0VfU0laRSk7CiAJbW9kaWZ5X2RvbWFpbihET01BSU5fVVNFUiwgRE9NQUlOX0NMSUVOVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKaW5kZXggMzliYWYxMS4uNzg2YWMyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpAQCAtMjYsNiArMjYsMTUgQEAKICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5zdWJzZXQuc3dkZXYuYWJpL2luZGV4Lmh0bWwKICAqLwogCisjaWYgIWRlZmluZWQgKF9fQVJNX0VBQklfXykKKyN3YXJuaW5nIFlvdXIgY29tcGlsZXIgZG9lcyBub3QgaGF2ZSBFQUJJIHN1cHBvcnQuCisjd2FybmluZyAgICBBUk0gdW53aW5kIGlzIGtub3duIHRvIGNvbXBpbGUgb25seSB3aXRoIEVBQkkgY29tcGlsZXJzLgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZWxpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8PSAyKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBpcyB0b28gYnVnZ3k7IGl0IGlzIGtub3duIHRvIG5vdCBjb21waWxlIEFSTSB1bndpbmQgc3VwcG9ydC4KKyN3YXJuaW5nICAgIENoYW5nZSBjb21waWxlciBvciBkaXNhYmxlIEFSTV9VTldJTkQgb3B0aW9uLgorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGUzNWQ1NGQuLjJmZDg4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0yODksMTMgKzI4OSw2IEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgogCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKLQlib29sICJBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdCBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgUmV2IEEgb3IgQiBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMuCi0KIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzIyLDcgKzMxNSwxNiBAQAogCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IgogCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcyMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgdGhhdCBlbWJlZHMgb25seSBvbmUgU0QvTU1DIHNsb3QuCisKK2NvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQworCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IHdpdGggMiBTRC9NTUMgU2xvdHMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgd2l0aCAyIFNEL01NQyBTbG90cy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgQVQ5MVNBTTlHMjAtRUsgcmV2LiBDIGFuZAorCSAgb253YXJkcy4KIAogY29uZmlnIE1BQ0hfQ1BVOUcyMAogCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgpAQCAtMzkyLDcgKzM5NCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgZGF0YSBidXMgaW50ZXJmYWNlIHRvIE5BTkQgZmxhc2giCi0JZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0FUOTFTQU05RzQ1RUtFUyB8fCBNQUNIX0FUOTFDQVA5QURLKQorCWRlcGVuZHMgb24gKE1BQ0hfQVQ5MVNBTTkyNjBFSyB8fCBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOUcxMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMgfHwgTUFDSF9BVDkxU0FNOUc0NUVLRVMgfHwgTUFDSF9BVDkxQ0FQOUFESykKIAloZWxwCiAJICBPbiBBVDkxU0FNOTI2eCBib2FyZHMgYm90aCB0eXBlcyBvZiBOQU5EIGZsYXNoIGNhbiBiZSBwcmVzZW50CiAJICAoOCBhbmQgMTYgYml0IGRhdGEgYnVzIHdpZHRoKS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCmluZGV4IGQ1ODFjZmYuLjMzMmI3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpAQCAtODM4LDcgKzgzOCw3IEBACiAgKiAgV2F0Y2hkb2cKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0dfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF0OTFfd2R0IiwKIAkuaWQJCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwppbmRleCBhMjhlNTNmLi5hNDEwMmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAqIFNQSSBkZXZpY2VzLgogICovCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkKKyNpZiAhKGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTEpKQogCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KIAkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAogCQkuY2hpcF9zZWxlY3QJPSAxLApAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBNQUNCIEV0aGVybmV0IGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMxMiwKKwkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjAsCiAJLmlzX3JtaWkJPSAxLAogfTsKIApAQCAtMTk0LDI0ICsxOTQsMjcgQEAKIAogLyoKICAqIE1DSSAoU0QvTU1DKQotICogZGV0X3BpbiBhbmQgd3BfcGluIGFyZSBub3QgY29ubmVjdGVkCisgKiB3cF9waW4gaXMgbm90IGNvbm5lY3RlZAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0lfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewogCS5zbG90WzBdID0gewogCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRU5PREVWLAorCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDMiwKIAkJLndwX3BpbgkJPSAtRU5PREVWLAogCX0sCiAJLnNsb3RbMV0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEM5LAogCQkud3BfcGluCQk9IC1FTk9ERVYsCiAJfSwKIAogfTsKICNlbHNlCi1zdGF0aWMgc3RydWN0IGFtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBhdDkxX21tY19kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CisJLnNsb3RfYgkJPSAxLAkvKiBPbmx5IG9uZSBzbG90IHNvIHVzZSBzbG90IEIgKi8KKwkud2lyZTQJCT0gMSwKKwkuZGV0X3Bpbgk9IEFUOTFfUElOX1BDOSwKIH07CiAjZW5kaWYKIApAQCAtMjIxLDEzICsyMjQsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewogCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwogCQkubmFtZQkJCT0gImRzNSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEyLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAogCQkuYWN0aXZlX2xvdwkJPSAxLAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAogCX0sCiAJewkvKiAicG93ZXIiIGxlZCwgeWVsbG93ICovCiAJCS5uYW1lCQkJPSAiZHMxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTMsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjksCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKIAl9CiB9OwpAQCAtMjU0LDcgKzI1NywxMSBAQAogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKIAkvKiBNTUMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCiAJYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbW1jX2RhdGEpOworI2Vsc2UKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CisjZW5kaWYKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CiAJLyogTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggMzRhOTUwMi4uYzIyZGYzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHMjAJMHgwMTk5MDVhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05Ukw2NAkweDAxOWIwM2EwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDUJMHg4MTliMDVhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1TVJMCTB4ODE5YjA1YTIJLyogYWthIDlHNDUtRVMyICYgbm9uIEVTIGxvdHMgKi8KKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NUVTCTB4ODE5YjA1YTEJLyogOUc0NS1FUyAoRW5naW5lZXJpbmcgU2FtcGxlKSAqLwogI2RlZmluZSBBUkNIX0lEX0FUOTFDQVA5CTB4MDM5QTAzQTAKIAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUxMjgJMHgzMjk5NzNhMApAQCAtNDEsNiArNDMsMTEgQEAKIAlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpICYgfkFUOTFfQ0lEUl9WRVJTSU9OKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KHZvaWQpCit7CisJcmV0dXJuIGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpOworfQorCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMQkweDAwMDAwMDAxCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMAkweDAwMDAwMDAyCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NQkweDAwMDAwMDA0CkBAIC0xMTgsOCArMTI1LDEwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOUc0NQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1KQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCShhdDkxX2NwdV9mdWxseV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDVFUykKICNlbHNlCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCSgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxQ0FQOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IGY5NWRjMTYuLmI0MzU3YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTIwNiw3ICsyMDYsNiBAQAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7CiAJCQlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0IoMCkpICsgaTsKLQkJCWRlc2MgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCBjYTcxY2YxLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfYm9hcmRfaW5mbykpOwogCX0gZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzA3KCkgfHwgbWFjaGluZV9pc19lZGI5MzEyKCkgfHwKIAkJICAgbWFjaGluZV9pc19lZGI5MzE1KCkpIHsKLQkJZXA5M3h4X3JlZ2lzdGVyX2kyYygmZWRiOTN4eF9pMmNfZ3Bpb19kYXRhCisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKIAkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKIAkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCBhM2VjMzNmLi40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTcsNyArMTcsNiBAQAogCiB2b2lkIGVwOTN4eF9tYXBfaW8odm9pZCk7CiB2b2lkIGVwOTN4eF9pbml0X2lycSh2b2lkKTsKLXZvaWQgZXA5M3h4X2luaXRfdGltZSh1bnNpZ25lZCBsb25nKTsKIAogLyogRVA5M3h4IFN5c3RlbSBDb250cm9sbGVyIHNvZnR3YXJlIGxvY2tlZCByZWdpc3RlciB3cml0ZSAqLwogdm9pZCBlcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHVuc2lnbmVkIGludCB2YWwsIHZvaWQgX19pb21lbSAqcmVnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKaW5kZXggZDgzYjgwNC4uZjM3NTdhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAyYjJlN2ExLi40ODkxODI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI4LDUgKzI4LDYgQEAKICNkZWZpbmUgQlVTX09GRlNFVAlVTCgweDgwMDAwMDAwKQogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoeCkgLSBQQUdFX09GRlNFVCArIEJVU19PRkZTRVQpCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKCh4KSAtIEJVU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHgpCQkoKCh4KSA8PCBQQUdFX1NISUZUKSArIEJVU19PRkZTRVQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCmluZGV4IDFkYTVkMWMuLjJlNjkxNjhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzZXR1cF9jcHVfd2luKDAsIEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX0lPX1NJWkUsCiAJCSAgICAgIFRBUkdFVF9QQ0lFLCBBVFRSX1BDSUVfSU8sIEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0UpOwogCXNldHVwX2NwdV93aW4oMSwgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFLCBLSVJLV09PRF9QQ0lFX01FTV9TSVpFLAotCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgLTEpOworCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX01FTSwgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UpOwogCiAJLyoKIAkgKiBTZXR1cCB3aW5kb3cgZm9yIE5BTkQgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBhY2I2MWYuLjI0MmRkMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJcmV0dXJuIDE2NjY2NjY2NzsKIH0KIAotc3RhdGljIHZvaWQga2lya3dvb2RfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKIHsKIAlraXJrd29vZF90Y2xrID0ga2lya3dvb2RfZmluZF90Y2xrKCk7CiAJb3Jpb25fdGltZV9pbml0KElSUV9LSVJLV09PRF9CUklER0UsIGtpcmt3b29kX3RjbGspOwpAQCAtOTE1LDYgKzkxNSwxNCBAQAogCWtpcmt3b29kX3VhcnQwX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAJa2lya3dvb2RfdWFydDFfZGF0YVswXS51YXJ0Y2xrID0ga2lya3dvb2RfdGNsazsKIAorCS8qCisJICogRGlzYWJsZSBwcm9wYWdhdGlvbiBvZiBtYnVzIGVycm9ycyB0byB0aGUgQ1BVIGxvY2FsIGJ1cywKKwkgKiBhcyB0aGlzIGNhdXNlcyBtYnVzIGVycm9ycyAod2hpY2ggY2FuIG9jY3VyIGZvciBleGFtcGxlCisJICogZm9yIFBDSSBhYm9ydHMpIHRvIHRocm93IENQVSBhYm9ydHMsIHdoaWNoIHdlJ3JlIG5vdCBzZXQKKwkgKiB1cCB0byBkZWFsIHdpdGguCisJICovCisJd3JpdGVsKHJlYWRsKENQVV9DT05GSUcpICYgfkNQVV9DT05GSUdfRVJST1JfUFJPUCwgQ1BVX0NPTkZJRyk7CisKIAlraXJrd29vZF9zZXR1cF9jcHVfbWJ1cygpOwogCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAppbmRleCA5ZTgwZDkyLi40MThmNTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKQEAgLTEzLDYgKzEzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KIAorI2RlZmluZSBDUFVfQ09ORklHCQkoQlJJREdFX1ZJUlRfQkFTRSB8IDB4MDEwMCkKKyNkZWZpbmUgQ1BVX0NPTkZJR19FUlJPUl9QUk9QCTB4MDAwMDAwMDQKKwogI2RlZmluZSBDUFVfQ09OVFJPTAkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMDQpCiAjZGVmaW5lIENQVV9SRVNFVAkJMHgwMDAwMDAwMgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBhNjQzYTg0Li40NGU4YmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9faW8odW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKChhZGRyIC0gS0lSS1dPT0RfUENJRV9JT19QSFlTX0JBU0UpCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKGFkZHIgLSBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKQogCQkJCQkrIEtJUktXT09EX1BDSUVfSU9fVklSVF9CQVNFKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKaW5kZXggNTRjMTMyNy4uYTE1Y2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEtJUktXT09EX1JFR1NfU0laRQkJU1pfMU0KIAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0UJMHhlMDAwMDAwMAorI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9CVVNfQkFTRQkweGUwMDAwMDAwCiAjZGVmaW5lIEtJUktXT09EX1BDSUVfTUVNX1NJWkUJCVNaXzEyOE0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYwppbmRleCA5NDdkZmI4Li43NzYxN2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCkBAIC03MCw4ICs3MCwyMCBAQAogCWtpcmt3b29kX2dlMDBfaW5pdCgmb3BlbnJkX2Jhc2VfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9iYXNlX3NhdGFfZGF0YSk7CiAJa2lya3dvb2Rfc2Rpb19pbml0KCZvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSk7CisKKwlraXJrd29vZF9pMmNfaW5pdCgpOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBvcGVucmRfYmFzZV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdCgpOworCisJcmV0dXJuIDA7CisgfQorc3Vic3lzX2luaXRjYWxsKG9wZW5yZF9iYXNlX3BjaV9pbml0KTsKKworCiBNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLwogCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGQ5MGI5YWEuLmE2MDRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQga2lya3dvb2RfcGNpZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCBraXJrd29vZF9jbGtfY3RybDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSAqLwogCXJlc1swXS5uYW1lID0gIlBDSWUgSS9PIFNwYWNlIjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFOworCXJlc1swXS5zdGFydCA9IEtJUktXT09EX1BDSUVfSU9fQlVTX0JBU0U7CiAJcmVzWzBdLmVuZCA9IHJlc1swXS5zdGFydCArIEtJUktXT09EX1BDSUVfSU9fU0laRSAtIDE7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgSU8gcmVzb3VyY2UgZmFpbGVkXG4iKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqLwogCXJlc1sxXS5uYW1lID0gIlBDSWUgTWVtb3J5IFNwYWNlIjsKIAlyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQlyZXNbMV0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX01FTV9QSFlTX0JBU0U7CisJcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0U7CiAJcmVzWzFdLmVuZCA9IHJlc1sxXS5zdGFydCArIEtJUktXT09EX1BDSUVfTUVNX1NJWkUgLSAxOwogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSkpCiAJCXBhbmljKCJSZXF1ZXN0IFBDSWUgTWVtb3J5IHJlc291cmNlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaCBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCmluZGV4IDU2ZDEyZTguLjk3ZThhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9yZWdzLXN3aXRjaC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIEtTODY5NV9TRUMxCQkoMHgwNCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAxICovCiAjZGVmaW5lIEtTODY5NV9TRUMyCQkoMHgwOCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAyICovCiAKLSNkZWZpbmUgS1M4Njk1X1AoeClfQyh6KQkoMHhjMCArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEtTODY5NV9TRVBYQ1ooeCx6KQkoMHgwYyArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgS1M4Njk1X1NFUDEyQU4JCSgweDQ4KQkJLyogUG9ydCAxICYgMiBBdXRvLU5lZ290aWF0aW9uICovCiAjZGVmaW5lIEtTODY5NV9TRVAzNEFOCQkoMHg0YykJCS8qIFBvcnQgMyAmIDQgQXV0by1OZWdvdGlhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKaW5kZXggYmYxMTg5Zi4uN2U4YTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICNkZWZpbmUgTU1DMV9XUF9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihNTUMxX1dQLCBBRjAsIE1FRElVTSkKIAogLyogUFdNICovCi0jZGVmaW5lIEdQSU8yNyBQV00zIEFGMgkJTUZQX0NGRyhHUElPMjcsIEFGMikKKyNkZWZpbmUgR1BJTzI3X1BXTTNfQUYyCQlNRlBfQ0ZHKEdQSU8yNywgQUYyKQogI2RlZmluZSBHUElPNTFfUFdNMl9PVVQJCU1GUF9DRkcoR1BJTzUxLCBBRjIpCiAjZGVmaW5lIEdQSU8xMTdfUFdNMV9PVVQJTUZQX0NGRyhHUElPMTE3LCBBRjIpCiAjZGVmaW5lIEdQSU8xMThfUFdNMl9PVVQJTUZQX0NGRyhHUElPMTE4LCBBRjIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggMWIyMmU0YS4uMDg0NjVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtODQ1LDYgKzg0NSw4IEBACiAJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQpIHsKIAkJaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMCkKIAkJCXJldHVybiAiTVY3ODEwMC1BMCI7CisJCWVsc2UgaWYgKHJldiA9PSBNVjc4MTAwX1JFVl9BMSkKKwkJCXJldHVybiAiTVY3ODEwMC1BMSI7CiAJCWVsc2UKIAkJCXJldHVybiAiTVY3ODEwMC1SZXYtVW5zdXBwb3J0ZWQiOwogCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgyMDBfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGQ3MTViOTIuLjc4OGJkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogI2RlZmluZSBNVjc4MTAwX0RFVl9JRAkJMHg3ODEwCiAjZGVmaW5lIE1WNzgxMDBfUkVWX0EwCQkxCisjZGVmaW5lIE1WNzgxMDBfUkVWX0ExCQkyCiAKICNkZWZpbmUgTVY3ODIwMF9ERVZfSUQJCTB4NzgyMAogI2RlZmluZSBNVjc4MjAwX1JFVl9BMAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggNDA4OTk1MS4uZmY1ZTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC02MzgsOSArNjM4LDkgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCkBAIC02NjUsNyArNjY1LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwppbmRleCBlZTY1ZGRhLi45MDZkNTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwpAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC03OCw4ICs4Myw2IEBACiAJUEM2X1BGX0kyQzJfU0NMLAogCS8qIFNQSTEgKi8KIAlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI3X1BGX0NTUEkxX1NTMSwKLQlQRDI4X1BGX0NTUEkxX1NTMCwKIAlQRDI5X1BGX0NTUEkxX1NDTEssCiAJUEQzMF9QRl9DU1BJMV9NSVNPLAogCVBEMzFfUEZfQ1NQSTFfTU9TSSwKQEAgLTE5Niw2ICsxOTksODYgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF9zcGlfY3NbXSA9IHtHUElPX1BPUlREICsgMjh9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzOF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0ID0gcGNtMDM4X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjbTAzOF9zcGlfY3MpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZGhjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjMV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHNkaGMxX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gTlVMTCwKKwkJLnN1cHBseQk9ICJpbXhfY2FtX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjYW1fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaW5pdF9kYXRhID0gJnNkaGMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0geworCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCisJLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKKwkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY20wMzhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTAzOF9waW5zLCBBUlJBWV9TSVpFKHBjbTAzOF9waW5zKSwKQEAgLTIxOSw2ICszMDIsMTUgQEAKIAkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYzI2MWY1OS4uM2NiN2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMzksNyArMzksNiBAQAogCVBCN19QRl9TRDJfRDMsCiAJUEI4X1BGX1NEMl9DTUQsCiAJUEI5X1BGX1NEMl9DTEssCi0JR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogY2FyZCBkZXRlY3QgKi8KIAkvKiBkaXNwbGF5ICovCiAJUEE1X1BGX0xTQ0xLLAogCVBBNl9QRl9MRDAsCkBAIC0yMjgsNiArMjI3LDcgQEAKIAkJCSJQQ005NzAiKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwppbmRleCBlYjEyZGUxLi42MzUxMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKQEAgLTEsNCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKaW5kZXggOTJhYTRmZC4uZDIzYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTIzLDE5ICs0MSwxMiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCiB7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCiB7CiAJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCBmZTVjNDIxLi5jNTk1MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDA2YmQ2MTguLmIyYTNiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IDhhNTc3ZjMuLmU2YWJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiAzIGNoYW5uZWxzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzBfcmVzb3VyY2VzW10gPSB7CiAJewogCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCiAJICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00NzEsNyArNDcxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8yX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTNfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTNfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDk1LDI1ICs0OTUsMjUgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTAgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzBfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMzUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA3OWYyYmU0Li5hYjg3NDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IGFkNWExMTIuLmJlZGY1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtODEsNiArODEsNyBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CkBAIC04OSw2ICs5MCw3IEBACiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwppbmRleCA0MjkyMGY5Li44YWQ1Y2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTIxOSw2ICsyMTksMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFtc19kZWx0YV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwogCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOwpAQCAtMjMxLDYgKzIzNSw4IEBACiAKIAlvbWFwX3VzYl9pbml0KCZhbXNfZGVsdGFfdXNiX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW1zX2RlbHRhX2RldmljZXMsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2RldmljZXMpKTsKKworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAweDAwMDQsIEFSTV9SU1RDVDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGFtc19kZWx0YV9tb2RlbV9wb3J0c1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBmYjQ3MjM5Li42YzhhNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtNjQsNiArNjQsMTQgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2MyYWJiYi4uY2Q2YzM5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zNzYsNiArMzc2LDI2IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJdW5zaWduZWQgY2hhciByZWc7CisKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCiAJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE1MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2RldmljZXMpKTsKIAkJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggOTBkZDA0My4uNGRlMjU4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0zNDIsNiArMzQyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggODI1NjEzOS4uZDk3MmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yODksNiArMjg5LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10dF9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdHRfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCA4MWI2YmRlLi45ODZiZDRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMzA3LDYgKzMwNywxNCBAQAogc3RhdGljIHZvaWQgX19pbml0CiBvbWFwX3BhbG16NzFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwYWxtejcxX2dwaW9fc2V0dXAoMSk7CiAJb21hcF9tcHVfd2R0X21vZGUoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDAyYzg1Y2EuLjA1NmFlNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMzc3LDYgKzM3NywxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zeDFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzeDFfZGV2aWNlcywgQVJSQVlfU0laRShzeDFfZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBzeDFfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggYzA2ZTdhNS4uMDdiMDc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0xNTIsNiArMTUyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAkvKiBXYXRjaGRvZyAqLwogCWdwaW9fcmVxdWVzdCgwLCAiV2F0Y2hkb2ciKTsKIAkvKiBzbWM5MXggcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggZWZhZjA1My4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCBlYjM3YzQwLi42MDlhNWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtNTgsNiArNTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXRfaXJxKHZvaWQpCiB7CisJb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxKTsKQEAgLTcwLDggKzcyLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IGQxMTBhN2YuLmQ1N2VjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDcwZGY2YjQuLjA4YjA4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDAgPT0gbGVkQSwgRUhDSSBuRU5fVVNCX1BXUiAob3V0LCBhY3RpdmUgbG93KSAqLwogCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIm5FTl9VU0JfUFdSIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOwogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCiAJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKaW5kZXggZTRlYzBjNS4uNGM0ZDdmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IDdmNmJmODcuLjc1MTllZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL211eC5oPgogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCkBAIC0xMzQsNTAgKzEzNCw1MCBAQAogfQogCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewotCS8qIGNvbCwgcm93LCBjb2RlICovCisJLyogcm93LCBjb2wsIGNvZGUgKi8KIAlLRVkoMCwgMCwgS0VZXzkpLAotCUtFWSgwLCAxLCBLRVlfMCksCi0JS0VZKDAsIDIsIEtFWV9CQUNLU1BBQ0UpLAotCUtFWSgwLCAzLCBLRVlfTyksCi0JS0VZKDAsIDQsIEtFWV9QKSwKLQlLRVkoMCwgNSwgS0VZX0spLAotCUtFWSgwLCA2LCBLRVlfTCksCi0JS0VZKDAsIDcsIEtFWV9FTlRFUiksCi0JS0VZKDEsIDAsIEtFWV84KSwKKwlLRVkoMCwgMSwgS0VZXzgpLAorCUtFWSgwLCAyLCBLRVlfSSksCisJS0VZKDAsIDMsIEtFWV9KKSwKKwlLRVkoMCwgNCwgS0VZX04pLAorCUtFWSgwLCA1LCBLRVlfTSksCisJS0VZKDEsIDAsIEtFWV8wKSwKIAlLRVkoMSwgMSwgS0VZXzcpLAotCUtFWSgxLCAyLCBLRVlfNiksCi0JS0VZKDEsIDMsIEtFWV81KSwKLQlLRVkoMSwgNCwgS0VZXzQpLAotCUtFWSgxLCA1LCBLRVlfMyksCi0JS0VZKDEsIDYsIEtFWV8yKSwKLQlLRVkoMSwgNywgS0VZXzEpLAotCUtFWSgyLCAwLCBLRVlfSSksCi0JS0VZKDIsIDEsIEtFWV9VKSwKKwlLRVkoMSwgMiwgS0VZX1UpLAorCUtFWSgxLCAzLCBLRVlfSCksCisJS0VZKDEsIDQsIEtFWV9CKSwKKwlLRVkoMSwgNSwgS0VZX1NQQUNFKSwKKwlLRVkoMiwgMCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDIsIDEsIEtFWV82KSwKIAlLRVkoMiwgMiwgS0VZX1kpLAotCUtFWSgyLCAzLCBLRVlfVCksCi0JS0VZKDIsIDQsIEtFWV9SKSwKLQlLRVkoMiwgNSwgS0VZX0UpLAotCUtFWSgyLCA2LCBLRVlfVyksCi0JS0VZKDIsIDcsIEtFWV9RKSwKLQlLRVkoMywgMCwgS0VZX0opLAotCUtFWSgzLCAxLCBLRVlfSCksCi0JS0VZKDMsIDIsIEtFWV9HKSwKKwlLRVkoMiwgMywgS0VZX0cpLAorCUtFWSgyLCA0LCBLRVlfViksCisJS0VZKDIsIDUsIEtFWV9GTiksCisJS0VZKDMsIDAsIEtFWV9PKSwKKwlLRVkoMywgMSwgS0VZXzUpLAorCUtFWSgzLCAyLCBLRVlfVCksCiAJS0VZKDMsIDMsIEtFWV9GKSwKLQlLRVkoMywgNCwgS0VZX0QpLAotCUtFWSgzLCA1LCBLRVlfUyksCi0JS0VZKDMsIDYsIEtFWV9BKSwKLQlLRVkoMywgNywgS0VZX0xFRlRTSElGVCksCi0JS0VZKDQsIDAsIEtFWV9OKSwKLQlLRVkoNCwgMSwgS0VZX0IpLAotCUtFWSg0LCAyLCBLRVlfViksCi0JS0VZKDQsIDMsIEtFWV9DKSwKKwlLRVkoMywgNCwgS0VZX0MpLAorCUtFWSg0LCAwLCBLRVlfUCksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX1IpLAorCUtFWSg0LCAzLCBLRVlfRCksCiAJS0VZKDQsIDQsIEtFWV9YKSwKLQlLRVkoNCwgNSwgS0VZX1opLAotCUtFWSg0LCA2LCBLRVlfRE9UKSwKLQlLRVkoNCwgNywgS0VZX0NPTU1BKSwKLQlLRVkoNSwgMCwgS0VZX00pLAotCUtFWSg1LCAxLCBLRVlfU1BBQ0UpLAotCUtFWSg1LCAyLCBLRVlfRk4pLAorCUtFWSg1LCAwLCBLRVlfSyksCisJS0VZKDUsIDEsIEtFWV8zKSwKKwlLRVkoNSwgMiwgS0VZX0UpLAorCUtFWSg1LCAzLCBLRVlfUyksCisJS0VZKDUsIDQsIEtFWV9aKSwKKwlLRVkoNiwgMCwgS0VZX0wpLAorCUtFWSg2LCAxLCBLRVlfMiksCisJS0VZKDYsIDIsIEtFWV9XKSwKKwlLRVkoNiwgMywgS0VZX0EpLAorCUtFWSg2LCA0LCBLRVlfRE9UKSwKKwlLRVkoNywgMCwgS0VZX0VOVEVSKSwKKwlLRVkoNywgMSwgS0VZXzEpLAorCUtFWSg3LCAyLCBLRVlfUSksCisJS0VZKDcsIDMsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg3LCA0LCBLRVlfQ09NTUEpLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGMxYWY1MzIuLmUzNGQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvb25lbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCXJ4NTFfdHdsZGF0YS52YXV4MyA9ICZyeDUxX3ZhdXgzX2NhbTsKIAkJcng1MV90d2xkYXRhLnZtbWMyID0gJnJ4NTFfdm1tYzI7CiAJfQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDIyMDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKIAkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY5MTk2YzMuLjc4ODY5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCBiN2IzMjIwLi41MWUwYjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yMiw2NCArMjMsNjMgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRSksCi0JS0VZKDEsIDAsIEtFWV9SKSwKLQlLRVkoMiwgMCwgS0VZX1QpLAotCUtFWSgzLCAwLCBLRVlfSE9NRSksCi0JS0VZKDYsIDAsIEtFWV9JKSwKLQlLRVkoNywgMCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDAsIDEsIEtFWV9EKSwKKwlLRVkoMCwgMSwgS0VZX1IpLAorCUtFWSgwLCAyLCBLRVlfVCksCisJS0VZKDAsIDMsIEtFWV9IT01FKSwKKwlLRVkoMCwgNiwgS0VZX0kpLAorCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMSwgMCwgS0VZX0QpLAogCUtFWSgxLCAxLCBLRVlfRiksCi0JS0VZKDIsIDEsIEtFWV9HKSwKLQlLRVkoMywgMSwgS0VZX1NFTkQpLAotCUtFWSg2LCAxLCBLRVlfSyksCi0JS0VZKDcsIDEsIEtFWV9FTlRFUiksCi0JS0VZKDAsIDIsIEtFWV9YKSwKLQlLRVkoMSwgMiwgS0VZX0MpLAorCUtFWSgxLCAyLCBLRVlfRyksCisJS0VZKDEsIDMsIEtFWV9TRU5EKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfRU5URVIpLAorCUtFWSgyLCAwLCBLRVlfWCksCisJS0VZKDIsIDEsIEtFWV9DKSwKIAlLRVkoMiwgMiwgS0VZX1YpLAotCUtFWSgzLCAyLCBLRVlfRU5EKSwKLQlLRVkoNiwgMiwgS0VZX0RPVCksCi0JS0VZKDcsIDIsIEtFWV9DQVBTTE9DSyksCi0JS0VZKDAsIDMsIEtFWV9aKSwKLQlLRVkoMSwgMywgS0VZX0tQUExVUyksCi0JS0VZKDIsIDMsIEtFWV9CKSwKKwlLRVkoMiwgMywgS0VZX0VORCksCisJS0VZKDIsIDYsIEtFWV9ET1QpLAorCUtFWSgyLCA3LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgzLCAwLCBLRVlfWiksCisJS0VZKDMsIDEsIEtFWV9LUFBMVVMpLAorCUtFWSgzLCAyLCBLRVlfQiksCiAJS0VZKDMsIDMsIEtFWV9GMSksCi0JS0VZKDYsIDMsIEtFWV9PKSwKLQlLRVkoNywgMywgS0VZX1NQQUNFKSwKLQlLRVkoMCwgNCwgS0VZX1cpLAotCUtFWSgxLCA0LCBLRVlfWSksCi0JS0VZKDIsIDQsIEtFWV9VKSwKLQlLRVkoMywgNCwgS0VZX0YyKSwKKwlLRVkoMywgNiwgS0VZX08pLAorCUtFWSgzLCA3LCBLRVlfU1BBQ0UpLAorCUtFWSg0LCAwLCBLRVlfVyksCisJS0VZKDQsIDEsIEtFWV9ZKSwKKwlLRVkoNCwgMiwgS0VZX1UpLAorCUtFWSg0LCAzLCBLRVlfRjIpLAogCUtFWSg0LCA0LCBLRVlfVk9MVU1FVVApLAotCUtFWSg2LCA0LCBLRVlfTCksCi0JS0VZKDcsIDQsIEtFWV9MRUZUKSwKLQlLRVkoMCwgNSwgS0VZX1MpLAotCUtFWSgxLCA1LCBLRVlfSCksCi0JS0VZKDIsIDUsIEtFWV9KKSwKLQlLRVkoMywgNSwgS0VZX0YzKSwKKwlLRVkoNCwgNiwgS0VZX0wpLAorCUtFWSg0LCA3LCBLRVlfTEVGVCksCisJS0VZKDUsIDAsIEtFWV9TKSwKKwlLRVkoNSwgMSwgS0VZX0gpLAorCUtFWSg1LCAyLCBLRVlfSiksCisJS0VZKDUsIDMsIEtFWV9GMyksCiAJS0VZKDUsIDUsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoNiwgNSwgS0VZX00pLAotCUtFWSg0LCA1LCBLRVlfRU5URVIpLAotCUtFWSg3LCA1LCBLRVlfUklHSFQpLAotCUtFWSgwLCA2LCBLRVlfUSksCi0JS0VZKDEsIDYsIEtFWV9BKSwKLQlLRVkoMiwgNiwgS0VZX04pLAotCUtFWSgzLCA2LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNSwgNiwgS0VZX00pLAorCUtFWSg1LCA3LCBLRVlfRU5URVIpLAorCUtFWSg2LCAwLCBLRVlfUSksCisJS0VZKDYsIDEsIEtFWV9BKSwKKwlLRVkoNiwgMiwgS0VZX04pLAorCUtFWSg2LCAzLCBLRVlfQkFDS1NQQUNFKSwKIAlLRVkoNiwgNiwgS0VZX1ApLAotCUtFWSg3LCA2LCBLRVlfVVApLAogCUtFWSg2LCA3LCBLRVlfU0VMRUNUKSwKLQlLRVkoNywgNywgS0VZX0RPV04pLAotCUtFWSgwLCA3LCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoMSwgNywgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCi0JS0VZKDIsIDcsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLwotCUtFWSgzLCA3LCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KLQkwCisJS0VZKDcsIDAsIEtFWV9QUk9HMSksCS8qTUFDUk8gMSA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCAxLCBLRVlfUFJPRzIpLAkvKk1BQ1JPIDIgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgMiwgS0VZX1BST0czKSwJLypNQUNSTyAzIDxVc2VyIGRlZmluZWQ+ICovCisJS0VZKDcsIDMsIEtFWV9QUk9HNCksCS8qTUFDUk8gNCA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCA1LCBLRVlfUklHSFQpLAorCUtFWSg3LCA2LCBLRVlfVVApLAorCUtFWSg3LCA3LCBLRVlfRE9XTikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0gewpAQCAtMjEzLDcgKzIxMyw4IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSB6b29tMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoem9vbTJfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJCSBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCmluZGV4IGJjNWQzYWMuLmUyZGJlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwpAQCAtNzY5LDYgKzc2OSw3IEBACiAJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgewogCQkJY2xrZGV2X2FkZCgmYy0+bGspOwogCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCQl9CiAKIAkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IDQ4OTU1NmUuLjdjNWMwMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtNDczLDcgKzQ3Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmaW50OwogCXUxNiBmID0gMDsKIAotCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIChuICsgMSk7CisJZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gbjsKIAogCXByX2RlYnVnKCJjbG9jazogZmludCBpcyAlbHVcbiIsIGZpbnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCBjODExOTc4Li45NTY1YzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTQ4OSw5ICs0ODksOSBAQAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfeDJfY2ssCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCiAJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggNGVmN2I0Zi4uNThhZmY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMTM3LDYgKzEzNywzNiBAQAogCX0KIH0KIAorLyoKKyAqIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAgLSBzZXQgdGhlIGh3c3VwIGlkbGUgdHJhbnNpdGlvbiBiaXQKKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqIEBlbmFibGU6IGludCAwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlCisgKgorICogSW50ZXJuYWwgaGVscGVyIGZvciBhY3R1YWxseSBzd2l0Y2hpbmcgdGhlIGJpdCB0aGF0IGNvbnRyb2xzIGh3c3VwCisgKiBpZGxlIHRyYW5zaXRpb25zIGZvciBjbGtkbS4KKyAqLworc3RhdGljIHZvaWQgX29tYXAyX2Nsa2RtX3NldF9od3N1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBpbnQgZW5hYmxlKQoreworCXUzMiB2OworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CisKKwljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKKwkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCisJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworfQogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpfY2xrZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC00NTYsOCArNDg2LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9hbGxvd19pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0JdTMyIHY7Ci0KIAlpZiAoIWNsa2RtKQogCQlyZXR1cm47CiAKQEAgLTQ3MywxOCArNTAxLDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQlfY2xrZG1fYWRkX2F1dG9kZXBzKGNsa2RtKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQllbHNlCi0JCUJVRygpOwotCi0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJICAgIENNX0NMS1NUQ1RSTCk7CisJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CiAKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogfQpAQCAtNTAwLDggKzUxNyw2IEBACiAgKi8KIHZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0JdTMyIHY7Ci0KIAlpZiAoIWNsa2RtKQogCQlyZXR1cm47CiAKQEAgLTUxNCwxNiArNTI5LDcgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGRpc2FibGluZyBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBmb3IgJXNcbiIsCiAJCSBjbGtkbS0+bmFtZSk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKLQllbHNlCi0JCUJVRygpOwotCi0JY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCi0JCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwpAQCAtNTY5LDEwICs1NzUsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKKwl9CiAKIAlwd3JkbV93YWl0X3RyYW5zaXRpb24oY2xrZG0tPnB3cmRtLnB0cik7CiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKQEAgLTYyMywxMCArNjMzLDE0IEBACiAJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8Ci0JICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpIHsKKwkJLyogRGlzYWJsZSBIVyB0cmFuc2l0aW9ucyB3aGVuIHdlIGFyZSBjaGFuZ2luZyBkZXBzICovCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKLQllbHNlCisJCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDEpOworCX0gZWxzZSB7CiAJCW9tYXAyX2Nsa2RtX3NsZWVwKGNsa2RtKTsKKwl9CiAKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IDE1ODc2ODIuLmYzYzk5MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJKmJhc2UgPSByZXMtPnN0YXJ0OwogCWdwbWNfY3Nfc2V0X3Jlc2VydmVkKGNzLCAxKTsKIG91dDoKQEAgLTM3OCw3ICszNzgsNyBAQAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewogCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7Ci0JaWYgKGNzID49IEdQTUNfQ1NfTlVNIHx8ICFncG1jX2NzX3Jlc2VydmVkKGNzKSkgeworCWlmIChjcyA+PSBHUE1DX0NTX05VTSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgbm9uLXJlc2VydmVkIEdQTUMgQ1MlZFxuIiwgY3MpOwogCQlCVUcoKTsKIAkJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGUzYTNiYWQuLjU2YmU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMwMiw3ICszMDIsOSBAQAogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOworI2VuZGlmCiAJb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7CiAJb21hcF9wbV9pZl9pbml0KCk7CiAJb21hcDJfc2RyY19pbml0KHNkcmNfY3MwLCBzZHJjX2NzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IGMwMzVhZDMuLmVmNTdiMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBtZW0gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWJveF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIW1ib3hfYmFzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDM3OGMyZjYuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNjM5LDE0ICs2MzksMTUgQEAKIAlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9JT19FTiB8IE9NQVAzNDMwX1dLVVBfRU4sCiAJCQkgIE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCk7CiAKLQkvKiBFbmFibGUgR1BJTyB3YWtldXBzIGluIFBFUiAqLworCS8qIEVuYWJsZSB3YWtldXBzIGluIFBFUiAqLwogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0VOX0dQSU8yIHwgT01BUDM0MzBfRU5fR1BJTzMgfAogCQkJICBPTUFQMzQzMF9FTl9HUElPNCB8IE9NQVAzNDMwX0VOX0dQSU81IHwKLQkJCSAgT01BUDM0MzBfRU5fR1BJTzYsIE9NQVAzNDMwX1BFUl9NT0QsIFBNX1dLRU4pOworCQkJICBPTUFQMzQzMF9FTl9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAorCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKIAkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLwogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMiB8IE9NQVAzNDMwX0VOX0dQSU8zIHwKIAkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAotCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzYsCisJCQkgIE9NQVAzNDMwX0dSUFNFTF9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAogCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMzQzMF9QTV9NUFVHUlBTRUwpOwogCiAJLyogRG9uJ3QgYXR0YWNoIElWQSBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCBhZTIxODY4Li41NGRmZWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTEwOSwxNiArMTA5LDYgQEAKIAkJLnJlZ3NoaWZ0CT0gMiwKIAkJLnVhcnRjbGsJPSBPTUFQMjRYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LCB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJLm1lbWJhc2UJPSBPTUFQMl9JT19BRERSRVNTKE9NQVBfVUFSVDRfQkFTRSksCi0JCS5tYXBiYXNlCT0gT01BUF9VQVJUNF9CQVNFLAotCQkuaXJxCQk9IDcwLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCS5yZWdzaGlmdAk9IDIsCi0JCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCi0JfSwgewotI2VuZGlmCiAJCS5mbGFncwkJPSAwCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwppbmRleCBhYWMyY2RhLi4xMDI5MTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCkBAIC00MywxMCArNDMsMTAgQEAKIAogI2RlZmluZSBDTV9YMzAwX0VUSF9QSFlTCTB4MDgwMDAwMTAKIAotI2RlZmluZSBHUElPODJfTU1DMl9JUlEJCSg4MikKLSNkZWZpbmUgR1BJTzg1X01NQzJfV1AJCSg4NSkKKyNkZWZpbmUgR1BJTzgyX01NQ19JUlEJCSg4MikKKyNkZWZpbmUgR1BJTzg1X01NQ19XUAkJKDg1KQogCi0jZGVmaW5lCUNNX1gzMDBfTU1DMl9JUlEJSVJRX0dQSU8oR1BJTzgyX01NQzJfSVJRKQorI2RlZmluZQlDTV9YMzAwX01NQ19JUlEJCUlSUV9HUElPKEdQSU84Ml9NTUNfSVJRKQogCiAjZGVmaW5lIEdQSU85NV9SVENfQ1MJCSg5NSkKICNkZWZpbmUgR1BJTzk2X1JUQ19XUgkJKDk2KQpAQCAtMjkyLDM0ICsyOTIsMzQgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQotLyogVGhlIGZpcnN0IE1NQyBzbG90IG9mIENNLVgzMDAgaXMgaGFyZHdpcmVkIHRvIExpYmVydGFzIGNhcmQgYW5kIGhhcworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5kZXRlY3RfZGVsYXkJCT0gMjAsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU84Ml9NTUNfSVJRLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJTzg1X01NQ19XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKK307CisKKy8qIFRoZSBzZWNvbmQgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCiAgICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBjbV94MzAwX21jaTJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIGlycV9oYW5kbGVyX3QgY21feDMwMF9kZXRlY3RfaW50LAorCXZvaWQgKmRhdGEpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNtX3gzMDBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY21feDMwMF9tY2kyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogfQogCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNtX3gzMDBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmRldGVjdF9kZWxheQkJPSAyMCwKLQkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJCT0gY21feDMwMF9tY2lfaW5pdCwKLQkuZXhpdAkJCT0gY21feDMwMF9tY2lfZXhpdCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAotCS5ncGlvX2NhcmRfcm8JCT0gLTEsCi0JLmdwaW9fcG93ZXIJCT0gLTEsCi19OwotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNtX3gzMDBfbWNpMl9wbGF0Zm9ybV9kYXRhID0gewogCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiAJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU84Ml9NTUMyX0lSUSwKLQkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUMyX1dQLAorCS5pbml0IAkJCT0gY21feDMwMF9tY2kyX2luaXQsCisJLmV4aXQJCQk9IGNtX3gzMDBfbWNpMl9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKIAkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCmluZGV4IDQ5NDU3MjguLmVjMGUxNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTQ1LDcgKzE0Niw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9sY2Qodm9pZCkge30KICNlbmRpZgogCi0jaWYgZGVmaW5lZChTTkRfQUM5N19DT0RFQykgfHwgZGVmaW5lZChTTkRfQUM5N19DT0RFQ19NT0RVTEUpCisjaWYJZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19TTkRfQUM5N19DT0RFQ19NT0RVTEUpCiBzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2FjOTdfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJR1BJTzM0X0FDOTdfU1lTQ0xLLAogCUdQSU8zNV9BQzk3X1NEQVRBX0lOXzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwppbmRleCA5ODNjYzhjLi45ZTRkOTgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKQEAgLTQ0Nyw2ICs0NDcsNyBAQAogCQlweGEyN3hfZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBmcmVxOwogCQlweGEyN3hfZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CiAJfQorCXB4YTI3eF9mcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKIAlweGEyN3hfZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwppbmRleCA2N2YzNGE4Li4xNDljZGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQl0YWJsZVtpXS5pbmRleCA9IGk7CiAJCXRhYmxlW2ldLmZyZXF1ZW5jeSA9IGZyZXFzW2ldLmNwdWZyZXFfbWh6ICogMTAwMDsKIAl9Ci0JdGFibGVbbnVtXS5mcmVxdWVuY3kgPSBpOworCXRhYmxlW251bV0uaW5kZXggPSBpOwogCXRhYmxlW251bV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CiAKIAlweGEzeHhfZnJlcXMgPSBmcmVxczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKaW5kZXggYWJmZjllMS4uODNiZDNjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgdHNjMjA0Nl9pbmZvID0gewogCS5tb2RlbCAgICAgICAgICAgID0gNzg0NiwKIAkudnJlZl9kZWxheV91c2VjcyA9IDEwMCwKLQkucHJlc3N1cmVfbWF4ICAgICA9IDUxMiwKKwkucHJlc3N1cmVfbWF4ICAgICA9IDEwMjQsCiAJLmRlYm91bmNlX21heCAgICAgPSAxMCwKIAkuZGVib3VuY2VfdG9sICAgICA9IDMsCiAJLmRlYm91bmNlX3JlcCAgICAgPSAxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCAyNDE4ODA2Li5hNzNiYzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtNDYsNSArNDYsNiBAQAogCQliZXEJMTAwMWYKIAkJYmljCVxpcnFzdGF0LCBcaXJxc3RhdCwgIzB4ODAwMDAwMDAKIAkJbW92CVxpcnFuciwgXGlycXN0YXQsIGxzciAjMTYKKwkJYWRkCVxpcnFuciwgXGlycW5yLCAjKFBYQV9JUlEoMCkpCiAxMDAxOgogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBkNjk0Y2UyLi42MTEyYWY0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRUwkxMjgKKwogI2RlZmluZSBJUlFfQklUKG4pCSgoKG4pIC0gUFhBX0lSUSgwKSkgJiAweDFmKQogI2RlZmluZSBfSUNNUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTVIyIDogJklDTVIpKQogI2RlZmluZSBfSUNMUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTFIyIDogJklDTFIpKQpAQCAtMTIyLDYgKzEyNCw4IEBACiB7CiAJaW50IGlycSwgaTsKIAorCUJVR19PTihpcnFfbnIgPiBNQVhfSU5URVJOQUxfSVJRUyk7CisKIAlweGFfaW50ZXJuYWxfaXJxX25yID0gaXJxX25yOwogCiAJZm9yIChpcnEgPSBQWEFfSVJRKDApOyBpcnEgPCBQWEFfSVJRKGlycV9ucik7IGlycSArPSAzMikgewpAQCAtMTQ5LDcgKzE1Myw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2ljbXJbMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yW01BWF9JTlRFUk5BTF9JUlFTLzMyXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2lwcltNQVhfSU5URVJOQUxfSVJRU107CiAKIHN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTE1OSw2ICsxNjQsOCBAQAogCQlzYXZlZF9pY21yW2ldID0gX0lDTVIoaXJxKTsKIAkJX0lDTVIoaXJxKSA9IDA7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBweGFfaW50ZXJuYWxfaXJxX25yOyBpKyspCisJCXNhdmVkX2lwcltpXSA9IElQUihpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTcxLDYgKzE3OCw4IEBACiAJCV9JQ01SKGlycSkgPSBzYXZlZF9pY21yW2ldOwogCQlfSUNMUihpcnEpID0gMDsKIAl9CisJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKKwkJSVBSKGkpID0gc2F2ZWRfaXByW2ldOwogCiAJSUNDUiA9IDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCmluZGV4IGJiMmNjMGQuLjBiOTIyOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCkBAIC0yOTIsMTAgKzI5MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtdGNfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmtleW1hcF9kYXRhCT0gJnBhbG10Y19rZXltYXBfZGF0YSwKLQkuY29sX2dwaW9zCT0gcGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3MsCi0JLm51bV9jb2xfZ3Bpb3MJPSAxMiwKLQkucm93X2dwaW9zCT0gcGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3MsCi0JLm51bV9yb3dfZ3Bpb3MJPSA0LAorCS5yb3dfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX3Jvd19ncGlvcywKKwkubnVtX3Jvd19ncGlvcwk9IEFSUkFZX1NJWkUocGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3MpLAorCS5jb2xfZ3Bpb3MJPSBwYWxtdGNfa2V5cGFkX2NvbF9ncGlvcywKKwkubnVtX2NvbF9ncGlvcwk9IEFSUkFZX1NJWkUocGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3MpLAogCS5hY3RpdmVfbG93CT0gMSwKIAogCS5kZWJvdW5jZV9tcwkJPSAyMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGVlOGQ2MDMuLmQ5ODAyM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgpAQCAtMzc1LDYgKzM3Niw0MyBAQAogfTsKIAogCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gc3BpdHpfZ3Bpb19rZXlzW10gPSB7CisJeworCQkudHlwZQk9IEVWX1BXUiwKKwkJLmNvZGUJPSBLRVlfU1VTUEVORCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX09OX0tFWSwKKwkJLmRlc2MJPSAiT24vT2ZmIiwKKwkJLndha2V1cAk9IDEsCisJfSwKKwkvKiBUd28gYnV0dG9ucyBkZXRlY3RpbmcgdGhlIGxpZCBzdGF0ZSAqLworCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAwLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dBLAorCQkuZGVzYwk9ICLvu79EaXNwbGF5IERvd24iLAorCX0sCisJeworCQkudHlwZQk9IEVWX1NXLAorCQkuY29kZQk9IDEsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19TV0IsCisJCS5kZXNjCT0gIu+7v0xpZCBDbG9zZWQiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHNwaXR6X2dwaW9fa2V5c19wbGF0Zm9ybV9kYXRhID0geworCS5idXR0b25zCT0gc3BpdHpfZ3Bpb19rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoc3BpdHpfZ3Bpb19rZXlzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6X2dwaW9fa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworCiAvKgogICogU3BpdHogTEVEcwogICovCkBAIC02ODksNiArNzI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc3BpdHpzY29vcF9kZXZpY2UsCiAJJnNwaXR6a2JkX2RldmljZSwKKwkmc3BpdHpfZ3Bpb19rZXlzX2RldmljZSwKIAkmc3BpdHpsZWRfZGV2aWNlLAogCSZzaGFycHNsX25hbmRfZGV2aWNlLAogCSZzaGFycHNsX3JvbV9kZXZpY2UsCkBAIC03NDAsMTEgKzc3OSwzNiBAQAogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FLSVRBKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0JPUlpPSSkKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc2hhcnBzbF9ha2l0YV9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNCwKKwkubGVuID0gMSwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0geworCS5lY2NieXRlcyA9IDI0LAorCS5lY2Nwb3MgPSB7CisJCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCisJCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAorCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BJVFopIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQogc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXQodm9pZCkKIHsKIAlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBTUElUWl9HUElPX0lSX09OOwogCisjaWZkZWYgQ09ORklHX01BQ0hfQk9SWk9JCisJaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKKwkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuZWNjX2xheW91dCA9ICZha2l0YV9vb2JpbmZvOworCX0KKyNlbmRpZgorCiAJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnNwaXR6X3BjbWNpYV9jb25maWc7CiAKIAljb21tb25faW5pdCgpOwpAQCAtNzY5LDIyICs4MzMsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNoYXJwc2xfYWtpdGFfYmJ0ID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDQsCi0JLmxlbiA9IDEsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgYWtpdGFfb29iaW5mbyA9IHsKLQkuZWNjYnl0ZXMgPSAyNCwKLQkuZWNjcG9zID0gewotCQkgICAweDUsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LCAweDE1LCAweDExLAotCQkgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAotCQkgICAweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3fSwKLQkub29iZnJlZSA9IHt7MHgwOCwgMHgwOX19Ci19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgYWtpdGFfaW5pdCh2b2lkKQogewogCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IEFLSVRBX0dQSU9fSVJfT047CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggZGZjOWIwYi4uYzQ4ZTFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtNzAsNiArNzAsOCBAQAogCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEJYIHBsYXRmb3JtIgogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUgaWYgQ1BVX1Y3ICYmICFISUdIX1BIWVNfT0ZGU0VUCisJc2VsZWN0IFpPTkVfRE1BIGlmIFNQQVJTRU1FTQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyBQQlggcGxhdGZvcm0uCiAKQEAgLTgyLDYgKzg0LDcgQEAKIAkgIDB4NzAwMDAwMDAsIDI1Nk1CIG9mIHdoaWNoIGJlaW5nIG1pcnJvcmVkIGF0IDB4MDAwMDAwMDAuIElmCiAJICB0aGUgYm9hcmQgc3VwcG9ydHMgNTEyTUIgb2YgUkFNLCB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlCiAJICBtZW1vcnkgdG8gYmUgYWNjZXNzZWQgY29udGlndW91c2x5IGF0IHRoZSBoaWdoIHBoeXNpY2FsCi0JICBvZmZzZXQuCisJICBvZmZzZXQuIE9uIHRoZSBQQlggYm9hcmQsIGRpc2FibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgMUdCIG9mCisJICBSQU0gdG8gYmUgdXNlZCB3aXRoIFNQQVJTRU1FTS4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBhMjA4M2I2Li45ZjI5MzQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtNTksNiArNTksMjUgQEAKIC8qIHVzZWQgYnkgZW50cnktbWFjcm8uUyBhbmQgcGxhdHNtcC5jICovCiB2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwogCisjaWZkZWYgQ09ORklHX1pPTkVfRE1BCisvKgorICogQWRqdXN0IHRoZSB6b25lcyBpZiB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIGZvciBETUEgYWNjZXNzLgorICovCit2b2lkIF9faW5pdCByZWFsdmlld19hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nICpob2xlKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX3NpemUgPSBTWl8yNTZNID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcmVhbHZpZXdfcGJ4KCkgfHwgbm9kZSB8fCAoc2l6ZVswXSA8PSBkbWFfc2l6ZSkpCisJCXJldHVybjsKKworCXNpemVbWk9ORV9OT1JNQUxdID0gc2l6ZVswXSAtIGRtYV9zaXplOworCXNpemVbWk9ORV9ETUFdID0gZG1hX3NpemU7CisJaG9sZVtaT05FX05PUk1BTF0gPSBob2xlWzBdOworCWhvbGVbWk9ORV9ETUFdID0gMDsKK30KKyNlbmRpZgorCiAvKgogICogVGhpcyBpcyB0aGUgUmVhbFZpZXcgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uICBUaGlzIGhhcwogICogYSByZXNvbHV0aW9uIG9mIDQxLjducywgYW5kIGEgbWF4aW11bSB2YWx1ZSBvZiBhYm91dCAxNzlzLgpAQCAtNTQzLDcgKzU2Miw3IEBACiAJZmItPnBhbmVsCQk9IHJlYWx2aWV3X2NsY2RfcGFuZWwoKTsKIAogCWZiLT5mYi5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoJmZiLT5kZXYtPmRldiwgZnJhbWVzaXplLAotCQkJCQkJICAgICZkbWEsIEdGUF9LRVJORUwpOworCQkJCQkJICAgICZkbWEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWZiLT5mYi5zY3JlZW5fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IHVuYWJsZSB0byBtYXAgZnJhbWVidWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc4OCwzICs4MDcsMjQgQEAKIAlyZWFsdmlld19jbG9ja3NvdXJjZV9pbml0KCk7CiAJcmVhbHZpZXdfY2xvY2tldmVudHNfaW5pdCh0aW1lcl9pcnEpOwogfQorCisvKgorICogU2V0dXAgdGhlIG1lbW9yeSBiYW5rcy4KKyAqLwordm9pZCByZWFsdmlld19maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmZyb20sCisJCSAgICBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbykKK3sKKwkvKgorCSAqIE1vc3QgUmVhbFZpZXcgcGxhdGZvcm1zIGhhdmUgNTEyTUIgY29udGlndW91cyBSQU0gYXQgMHg3MDAwMDAwMC4KKwkgKiBIYWxmIG9mIHRoaXMgaXMgbWlycm9yZWQgYXQgMC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAweDcwMDAwMDAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzUxMk07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworI2Vsc2UKKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAppbmRleCA0NmNkNmFjLi43ODFiY2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAKICNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSxidXNpZCxiYXNlLHBsYXQpCQkJXApAQCAtNDQsNiArNDUsOCBAQAogCS8qIC5kbWEJCT0gYmFzZSMjX0RNQSwqLwkJCQlcCiB9CiAKK3N0cnVjdCBtYWNoaW5lX2Rlc2M7CisKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ZsYXNoX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2NmX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2U7CkBAIC02MSw1ICs2NCw4IEBACiBleHRlcm4gaW50IHJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgbnVtKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGV4dGVybiBpbnQgcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKK2V4dGVybiB2b2lkIHJlYWx2aWV3X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQkJICAgY2hhciAqKmZyb20sIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKTsKK2V4dGVybiB2b2lkICgqcmVhbHZpZXdfcmVzZXQpKGNoYXIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKaW5kZXggOThmOGU3ZS4uMzRiODBiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmgKQEAgLTczLDQgKzczLDkgQEAKICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UJCTB4MTAwNDEwMDAgLyogR0lDIGRpc3RyaWJ1dG9yLCBvbiBGUEdBICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9MMjIwX0JBU0UJCTB4MTAxMTAwMDAgLyogTDIyMCByZWdpc3RlcnMgKi8KIAorLyoKKyAqIENvbnRyb2wgcmVnaXN0ZXIgU1lTX1JFU0VUQ1RMIGlzIHNldCB0byAxIHRvIGZvcmNlIGEgc29mdCByZXNldAorICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9TWVNfTE9DS1ZBTF9SU1RDVEwgICAgMHgwMTAwCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCMTE3Nl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCmluZGV4IGYwZDY4ZTAuLjdhYmY5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oCkBAIC04MSw0ICs4MSwxNiBAQAogI2RlZmluZSBSRUFMVklFV19UQzExTVBfR0lDX0RJU1RfQkFTRQkJMHgxRjAwMTAwMAkvKiBUZXN0IGNoaXAgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0wyMjBfQkFTRQkJMHgxRjAwMjAwMAkvKiBMMjIwIHJlZ2lzdGVycyAqLwogCisgLyoKKyAqIFZhbHVlcyBmb3IgUkVBTFZJRVdfU1lTX1JFU0VUX0NUUkwKKyAqLworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0lOSVQgICAweDAyCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9ETExSRVNFVCAgICAgMHgwMworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX1BPUiAgICAgICAgICAweDA1CisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9Eb0MgICAgICAgICAgMHgwNgorCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQorCiAjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAyOTNjMzAwLi4yNDE3YmJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjksNCArMjksNTMgQEAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfWk9ORV9ETUEpCitleHRlcm4gdm9pZCByZWFsdmlld19hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nICpob2xlKTsKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgc2l6ZSwgaG9sZSkgXAorCXJlYWx2aWV3X2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArIFNaXzI1Nk0gLSAxKQorI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFNaXzI1Nk0pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKworLyoKKyAqIFNwYXJzZW1lbSBkZWZpbml0aW9ucyBmb3IgUmVhbFZpZXcgUEJYLgorICoKKyAqIFRoZSBSZWFsVmlldyBQQlggYm9hcmQgaGFzIGFub3RoZXIgYmxvY2sgb2YgNTEyTUIgb2YgUkFNIGF0IDB4MjAwMDAwMDAsCisgKiBob3dldmVyIG9ubHkgdGhlIGJsb2NrIGF0IDB4NzAwMDAwMDAgKG9yIHRoZSAyNTZNQiBtaXJyb3IgYXQgMHgwMDAwMDAwMCkKKyAqIG1heSBiZSB1c2VkIGZvciBETUEuCisgKgorICogVGhlIG1hY3JvcyBiZWxvdyBkZWZpbmUgYSBzZWN0aW9uIHNpemUgb2YgMjU2TUIgYW5kIGEgbm9uLWxpbmVhciB2aXJ0dWFsIHRvCisgKiBwaHlzaWNhbCBtYXBwaW5nOgorICoKKyAqIDI1Nk1CIEAgMHgwMDAwMDAwMCAtPiBQQUdFX09GRlNFVAorICogNTEyTUIgQCAweDIwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMAorICogMjU2TUIgQCAweDgwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMAorICovCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKKyNlcnJvciAiU1BBUlNFTUVNIG5vdCBhdmFpbGFibGUgd2l0aCBSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUIgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMgorI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyOAorCisvKiBiYW5rIHBhZ2Ugb2Zmc2V0cyAqLworI2RlZmluZSBQQUdFX09GRlNFVDEJKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKKyNkZWZpbmUgUEFHRV9PRkZTRVQyCShQQUdFX09GRlNFVCArIDB4MzAwMDAwMDApCisKKyNkZWZpbmUgX19waHlzX3RvX3ZpcnQocGh5cykJCQkJCQlcCisJKChwaHlzKSA+PSAweDgwMDAwMDAwID8JKHBoeXMpIC0gMHg4MDAwMDAwMCArIFBBR0VfT0ZGU0VUMiA6CVwKKwkgKHBoeXMpID49IDB4MjAwMDAwMDAgPwkocGh5cykgLSAweDIwMDAwMDAwICsgUEFHRV9PRkZTRVQxIDoJXAorCSAocGh5cykgKyBQQUdFX09GRlNFVCkKKworI2RlZmluZSBfX3ZpcnRfdG9fcGh5cyh2aXJ0KQkJCQkJCVwKKwkgKCh2aXJ0KSA+PSBQQUdFX09GRlNFVDIgPyAodmlydCkgLSBQQUdFX09GRlNFVDIgKyAweDgwMDAwMDAwIDoJXAorCSAgKHZpcnQpID49IFBBR0VfT0ZGU0VUMSA/ICh2aXJ0KSAtIFBBR0VfT0ZGU0VUMSArIDB4MjAwMDAwMDAgOglcCisJICAodmlydCkgLSBQQUdFX09GRlNFVCkKKworI2VuZGlmCS8qIENPTkZJR19TUEFSU0VNRU0gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCBjOGY1MDgzLi40ZjQ2YmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTExOSwxOSArMTE5LDYgQEAKICNkZWZpbmUgUkVBTFZJRVdfU1lTX1RFU1RfT1NDMyAgICAgICAgICAgICAgIChSRUFMVklFV19TWVNfQkFTRSArIFJFQUxWSUVXX1NZU19URVNUX09TQzNfT0ZGU0VUKQogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0M0ICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDNF9PRkZTRVQpCiAKLS8qIAotICogVmFsdWVzIGZvciBSRUFMVklFV19TWVNfUkVTRVRfQ1RSTAotICovCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUiAgICAweDAxCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0lOSVQgICAweDAyCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX1BMTFJFU0VUICAgICAweDA0Ci0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX1BPUiAgICAgICAgICAweDA1Ci0jZGVmaW5lIFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2Ci0KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfTEVEICAgICAgICAgKDEgPDwgMCkKLQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBSZWFsVmlldyBjb250cm9sIHJlZ2lzdGVycwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTMsNyArMTQwLDcgQEAKICAqICAgICBTWVNfQ0xELCBTWVNfQk9PVENTCiAgKi8KICNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tfTE9DS0VEICAgICgxIDw8IDE2KQotI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4RkZGRgkJLyogd3JpdGUgMHhBMDVGIHRvIGVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KKyNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSwkweEEwNUYJICAgICAgIC8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KIAogLyoKICAqIFJFQUxWSUVXX1NZU19GTEFTSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAxYTE1YTQ0Li5hMzBmMmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAKK3ZvaWQgKCpyZWFsdmlld19yZXNldCkoY2hhciBtb2RlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCS8qCkBAIC0zNiwxNiArMzgsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKyBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOwotCXVuc2lnbmVkIGludCB2YWw7Ci0KIAkvKgogCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCiAJICogaW4gdGhlIHN5c3RlbSBGUEdBCiAJICovCi0JdmFsID0gX19yYXdfcmVhZGwoaGRyX2N0cmwpOwotCXZhbCB8PSBSRUFMVklFV19TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFI7Ci0JX19yYXdfd3JpdGVsKHZhbCwgaGRyX2N0cmwpOworCWlmIChyZWFsdmlld19yZXNldCkKKwkJcmVhbHZpZXdfcmVzZXQobW9kZSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBhODg0NThiLi4wMDkyNjU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtMTQ2LDExICsxNDYsOCBAQAogCSAqIHJlZ2lzdGVyLiBUaGUgQm9vdE1vbml0b3Igd2FpdHMgZm9yIHRoaXMgcmVnaXN0ZXIgdG8gYmVjb21lCiAJICogbm9uLXplcm8uCiAJICovCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUIDB4MzAKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQgMHgzNAogCV9fcmF3X3dyaXRlbChCU1lNKHZpcnRfdG9fcGh5cyhyZWFsdmlld19zZWNvbmRhcnlfc3RhcnR1cCkpLAotCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKwotCQkgICAgIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUKTsKKwkJICAgICBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0ZMQUdTU0VUKSk7CiAKIAltYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCmluZGV4IDFkNjVlNjQuLjkxN2Y4Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTQxNSw2ICs0MTUsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfRUJfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19FQl9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X2ViX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19lYl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IDI4MTdmZTAuLjdmYjcyNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMjkwLDYgKzI5MCwyOCBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BiMTE3Nl90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGIxMTc2X3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICpyc3RfaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLLCByc3RfaGRyX2N0cmwpOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMLCBoZHJfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywKKwkJCQkgIHN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipmcm9tLAorCQkJCSAgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisJLyoKKwkgKiBSZWFsVmlldyBQQjExNzYgb25seSBoYXMgMTI4TUIgb2YgUkFNIG1hcHBlZCBhdCAwLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzEyOE07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTMxMyw2ICszMzUsNyBAQAogI2lmZGVmIENPTkZJR19MRURTCiAJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CiAjZW5kaWYKKwlyZWFsdmlld19yZXNldCA9IHJlYWx2aWV3X3BiMTE3Nl9yZXNldDsKIH0KIAogTUFDSElORV9TVEFSVChSRUFMVklFV19QQjExNzYsICJBUk0tUmVhbFZpZXcgUEIxMTc2IikKQEAgLTMyMCw2ICszNDMsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMTc2X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BiMTE3Nl9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiMTE3Nl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGIxMTc2X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggOTQ2ODBmYy4uOWJiYmZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKQEAgLTMzMSw2ICszNDcsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMW1wX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExbXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IDk0MWJlYjIuLmZlODYxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCQThfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJhOF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJhOF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCmluZGV4IDdlNGJjNmMuLmVjMzk0ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwpAQCAtMzA0LDYgKzMwNCwyNiBAQAogCS5pbml0CQk9IHJlYWx2aWV3X3BieF90aW1lcl9pbml0LAogfTsKIAorc3RhdGljIHZvaWQgcmVhbHZpZXdfcGJ4X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLAorCQkJICAgICAgIGNoYXIgKipmcm9tLCBzdHJ1Y3QgbWVtaW5mbyAqbWVtaW5mbykKK3sKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisJLyoKKwkgKiBNZW1vcnkgY29uZmlndXJhdGlvbiB3aXRoIFNQQVJTRU1FTSBlbmFibGVkIG9uIFJlYWxWaWV3IFBCWCAoc2VlCisJICogYXNtL21hY2gvbWVtb3J5LmggZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorCSAqLworCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+YmFua1sxXS5zdGFydCA9IDB4MjAwMDAwMDA7CisJbWVtaW5mby0+YmFua1sxXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5iYW5rWzJdLnN0YXJ0ID0gMHg4MDAwMDAwMDsKKwltZW1pbmZvLT5iYW5rWzJdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMzsKKyNlbHNlCisJcmVhbHZpZXdfZml4dXAobWRlc2MsIHRhZ3MsIGZyb20sIG1lbWluZm8pOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzQ1LDYgKzM2NSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQlhfVUFSVDBfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhSRUFMVklFV19QQlhfVUFSVDBfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgwMDAwMDEwMCwKKwkuZml4dXAJCT0gcmVhbHZpZXdfcGJ4X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGJ4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYnhfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwppbmRleCA3OTc0YWZjLi45NjY0ZTAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby1mbnMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggYzNhMjYyOS4uOTJlMjY4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0xMTAsNiArMTEwLDggQEAKIAkJCQkJICAgICogd2FpdGluZyBmb3IgcmVsb2FkcyAqLwogI2RlZmluZSBTM0MyNDEwX0RNQUZfQVVUT1NUQVJUICAgICgxPDwxKSAgIC8qIGF1dG8tc3RhcnQgaWYgYnVmZmVyIHF1ZXVlZCAqLwogCisjZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkoMSA8PCAyKQkvKiBubyBjaXJjdWxhciBkbWEgc3VwcG9ydCAqLworCiAvKiBkbWEgYnVmZmVyICovCiAKIHN0cnVjdCBzM2MyNDEwX2RtYV9idWY7CkBAIC0xOTQsNCArMTk2LDkgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGRtYV9kZXZpY2VfdDsKIAorc3RhdGljIGlubGluZSBib29sIHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYgLyogX19BU01fQVJDSF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwppbmRleCBkN2JiYTkxLi5hOGI2OWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwpAQCAtMTAzLDYgKzEwMyw3IEBACiAJc2VsZWN0IExFRFNfVFJJR0dFUl9CQUNLTElHSFQKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1MzQzI0WFhfVURBMTM0WAogCXNlbGVjdCBTM0NfREVWX05BTkQKKwlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHN1cHBvcnQgZm9yIHRoZSBNSU5JMjQ0MC4gSXMgYSAxMGNtIHggMTBjbSBib2FyZAogCSAgYXZhaWxhYmxlIHZpYSB2YXJpb3VzIHNvdXJjZXMuIEl0IGNhbiBjb21lIHdpdGggYSAzLjUiIG9yIDciIHRvdWNoIExDRC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCmluZGV4IGVjNzFhNjkuLjFjMzM4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJLnR5cGUJCT0gKFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUCB8XAogCQkJICAgUzNDMjQxMF9MQ0RDT04xX1RGVCkKIAotc3RydWN0IHMzYzI0MTBmYl9kaXNwbGF5IG1pbmkyNDQwX2xjZF9jZmdbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CS8qIG1pbmkyNDQwICsgMy41IiBURlQgKyB0b3VjaHNjcmVlbiAqLwogCQlfTENEX0RFQ0xBUkUoCiAJCQk3LAkJCS8qIFRoZSAzLjUgaXMgcXVpdGUgZmFzdCAqLwpAQCAtMTkxLDcgKzE5MSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BDQ09OX01BU0soeCkJKDMgPDwgKCh4KSAqIDIpKQogI2RlZmluZSBTM0MyNDEwX0dQRENPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKIAotc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gbWluaTI0NDBfZmJfaW5mbyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKIAkuZGlzcGxheXMJID0gJm1pbmkyNDQwX2xjZF9jZmdbMF0sIC8qIG5vdCBjb25zdGFudCEgc2VlIGluaXQgKi8KIAkubnVtX2Rpc3BsYXlzCSA9IDEsCiAJLmRlZmF1bHRfZGlzcGxheSA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCAxMDY3NjE5Li42NzIzODYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTU4LDEyICs1OCw5IEBACiAJRE1BQ0hfTUFYCQkvKiB0aGUgZW5kICovCiB9OwogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3N0YXRpYyBfX2lubGluZV9fIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKIHsKLQkvKiB3ZSB3aWxsIGJlIHN1cHBvcnRpbmcgY2lydWNsYXIgYnVmZmVycyBhcyBzb29uIGFzIHdlIGhhdmUgRE1BCi0JICogZW5naW5lIHN1cHBvcnQuCi0JICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKICNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwppbmRleCA1M2ZjM2ZmLi43MmQ0YjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAogCXNlbGVjdCBSRUdVTEFUT1IKIAlzZWxlY3QgUkVHVUxBVE9SX1dNODM1MAorCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAogCXNlbGVjdCBNRkRfV004MzUwX0kyQwogCXNlbGVjdCBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBlYTUxZGJlLi45ZjFhMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTMyMCw2ICszMjAsOSBAQAogewogCWludCBpOwogCisJLyogQ29uZmlndXJlIHRoZSBJUlEgbGluZSAqLworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUE4oMTIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwogCS8qIEluc3RhbnRpYXRlIHRoZSByZWd1bGF0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod20xMTkwX3JlZ3VsYXRvcnMpOyBpKyspCiAJCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggYmU2MGQ2ZC4uNjUzZTI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC00MDgsNyArNDA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjMCIsCisJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHJ0Y19yZXNvdXJjZXMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCBlOTkzMTQwLi45MjY0ZDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEyMiwxMCArMTIyLDcgQEAKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCiAJICBUaGUgQVJNOTIwVCBpcyBsaWNlbnNlZCB0byBiZSBwcm9kdWNlZCBieSBudW1lcm91cyB2ZW5kb3JzLAotCSAgYW5kIGlzIHVzZWQgaW4gdGhlIE1hdmVyaWNrIEVQOTMxMiBhbmQgdGhlIFNhbXN1bmcgUzNDMjQxMC4KLQotCSAgTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGF0Ci0JICA8aHR0cDovL2xpbnV4ZGV2aWNlcy5jb20vcHJvZHVjdHMvUEQyMzgyODY2MDY4Lmh0bWw+LgorCSAgYW5kIGlzIHVzZWQgaW4gdGhlIENpcnJ1cyBFUDkzeHggYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCiAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk05MjBUIHByb2Nlc3Nvci4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggNmJkYTc2YS4uYTllMjJlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtNTAsMTAgKzUwLDcgQEAKIAkJaXNiKCk7CiAJCWZsdXNoX3RsYl9hbGwoKTsKIAkJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKLQkJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgotCQkJICAgICJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCA2CUAgZmx1c2ggQlRBQy9CVEJcbiIKLQkJCSAgICA6Ci0JCQkgICAgOiAiciIgKDApKTsKKwkJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCQkJZHNiKCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCBiMzA5MjVmLi5iOTU5MGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiAJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKLQlpZiAobWFzayAhPSAweGZmZmZmZmZmKQorCWlmIChtYXNrIDwgMHhmZmZmZmZmZlVMTCkKIAkJZ2ZwIHw9IEdGUF9ETUE7CiAKIAlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CkBAIC0yODksNyArMjg5LDcgQEAKIAlpZiAoIW1hc2spCiAJCWdvdG8gZXJyb3I7CiAKLQlpZiAobWFzayAhPSAweGZmZmZmZmZmKQorCWlmIChtYXNrIDwgMHhmZmZmZmZmZlVMTCkKIAkJZ2ZwIHw9IEdGUF9ETUE7CiAJdmlydCA9IGttYWxsb2Moc2l6ZSwgZ2ZwKTsKIAlpZiAoIXZpcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCBiMjc5NDI5Li43ZjI5NGYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpbmNsdWRlICJtbS5oIgogCi0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi1leHRlcm4gdm9pZCB2Nl9pY2FjaGVfaW52YWxfYWxsKHZvaWQpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQKIAogI2RlZmluZSBBTElBU19GTFVTSF9TVEFSVAkweGZmZmY0MDAwCkBAIC0zNSwxNiArMzEsMTEgQEAKIAlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOwogCiAJYXNtKAkibWNycglwMTUsIDAsICUxLCAlMCwgYzE0XG4iCi0JIgltY3IJcDE1LCAwLCAlMiwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkiCW1jcglwMTUsIDAsICUyLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjMTAsIDQiCiAJICAgIDoKIAkgICAgOiAiciIgKHRvKSwgInIiICh0byArIFBBR0VfU0laRSAtIEwxX0NBQ0hFX0JZVEVTKSwgInIiICh6ZXJvKQogCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogfQogCiB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtNTcsMTYgKzQ4LDExIEBACiAKIAlpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CiAJCWFzbSgJIm1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAwXG4iCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiCiAJCSAgICA6CiAJCSAgICA6ICJyIiAoMCkKIAkJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKQEAgLTgxLDE2ICs2NywxMSBAQAogCiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewogCQlhc20oCSJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMFxuIgotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0IgogCQkgICAgOgogCQkgICAgOiAiciIgKDApCiAJCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNDA5NDBkNy4uNTJjNDBkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjczLDcgKzI3Myw2IEBACiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwogCQlpZiAoIWJhbmstPmhpZ2htZW0pCiAJCQlmcmVlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYmFua19waHlzX3N0YXJ0KGJhbmspLCBiYW5rX3BoeXNfc2l6ZShiYW5rKSk7Ci0JCW1lbW9yeV9wcmVzZW50KG5vZGUsIGJhbmtfcGZuX3N0YXJ0KGJhbmspLCBiYW5rX3Bmbl9lbmQoYmFuaykpOwogCX0KIAogCS8qCkBAIC0zNzAsNiArMzY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBmbl92YWxpZCk7CisKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworCWludCBpOworCWZvcl9lYWNoX25vZGViYW5rKGksIG1pLCBub2RlKSB7CisJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOworCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKKwl9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgbWVtaW5mb19jbXAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQpAQCAtNDI3LDYgKzQzOSwxMiBAQAogCQkgKi8KIAkJaWYgKG5vZGUgPT0gaW5pdHJkX25vZGUpCiAJCQlib290bWVtX3Jlc2VydmVfaW5pdHJkKG5vZGUpOworCisJCS8qCisJCSAqIFNwYXJzZW1lbSB0cmllcyB0byBhbGxvY2F0ZSBib290bWVtIGluIG1lbW9yeV9wcmVzZW50KCksCisJCSAqIHNvIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZml4ZWQgcmVzZXJ2YXRpb25zCisJCSAqLworCQlhcm1fbWVtb3J5X3ByZXNlbnQobWksIG5vZGUpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDAyMjQzZWUuLmVhNjdiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0xMTcsNiArMTE3LDEzIEBACiAJfQogCWlmIChpID09IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpKQogCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGNhY2hlIHBvbGljeVxuIik7CisJLyoKKwkgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIHBhcnRseSB0byBkbyB3aXRoIHRoZSB3YXkgd2UgYm9vdDsgaXQgaXMKKwkgKiB1bnByZWRpY3RhYmxlIHRvIGhhdmUgbWVtb3J5IG1hcHBlZCB1c2luZyB0d28gZGlmZmVyZW50IHNldHMgb2YKKwkgKiBtZW1vcnkgYXR0cmlidXRlcyAoc2hhcmVkLCB0eXBlLCBhbmQgY2FjaGUgYXR0cmlicykuICBXZSBjYW4gbm90CisJICogY2hhbmdlIHRoZXNlIGF0dHJpYnV0ZXMgb25jZSB0aGUgaW5pdGlhbCBhc3NlbWJseSBoYXMgc2V0dXAgdGhlCisJICogcGFnZSB0YWJsZXMuCisJICovCiAJaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IGNhY2hlcG9saWN5PXdyaXRlYmFjayBzdXBwb3J0ZWQgb24gQVJNdjYgYW5kIGxhdGVyXG4iKTsKIAkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX1dSSVRFQkFDSzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCAxOTQ3MzdkLi43MGY3NWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0zMiw4ICszMiwxMCBAQAogCiAjaWZuZGVmIENPTkZJR19TTVAKICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9SR05fV0JXQQorI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0IKICNlbHNlCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0F8VFRCX1MKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92Nl9wcm9jX2luaXQpCkBAIC0yMjIsMTAgKzIyNCw5IEBACiAJLmxvbmcJMHgwMDA3YjAwMAogCS5sb25nCTB4MDAwN2YwMDAKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggMjNlYmNmNi4uM2EyODUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMzMsOSArMzMsMTEgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCIG5vdCBzaGFyZWFibGUsIG91dGVyIFdCIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCfFRUQl9SR05fT0NfV0IKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCV0Egc2hhcmVhYmxlLCBvdXRlciBXQldBIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCV0F8VFRCX1N8VFRCX05PU3xUVEJfUkdOX09DX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92N19wcm9jX2luaXQpCkBAIC0xODQsOSArMTg2LDEwIEBACiAgKi8KIF9fdjdfc2V0dXA6CiAjaWZkZWYgQ09ORklHX1NNUAotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEJCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCi0Jb3JyCXIwLCByMCwgIygxIDw8IDYpIHwgKDEgPDwgMCkJQCBUTEIgb3BzIGJyb2FkY2FzdGluZwotCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCisJdHN0CXIwLCAjKDEgPDwgNikJCQlAIFNNUC9uQU1QIG1vZGUgZW5hYmxlZD8KKwlvcnJlcQlyMCwgcjAsICMoMSA8PCA2KSB8ICgxIDw8IDApCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCisJbWNyZXEJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIFRMQiBvcHMgYnJvYWRjYXN0aW5nCiAjZW5kaWYKIAlhZHIJcjEyLCBfX3Y3X3NldHVwX3N0YWNrCQlAIHRoZSBsb2NhbCBzdGFjawogCXN0bWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CkBAIC0zMjYsMTAgKzMyOSw5IEBACiAJLmxvbmcJMHgwMDBmMDAwMAkJQCBSZXF1aXJlZCBJRCB2YWx1ZQogCS5sb25nCTB4MDAwZjAwMDAJCUAgTWFzayBmb3IgSUQKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwppbmRleCBmZTU4MTM4Li5mN2QyZWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTMzLDYgKzMzLDkgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogCTMsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9CQ01SSU5HCisJSVJRX1BNVUlSUSwgLyogZm9yIEJDTVJJTkcsIEFSTSBQTVUgaW50ZXJydXB0IGlzIDQzICovCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIGFybXY2X3BtdV9zdG9wKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IDE4NjhjMGQuLjM0MTIzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAl9CiAKIAkvKiBGSVhNRTogd2hhdCdzIHRoZSBhY3R1YWwgdHJhbnNpdGlvbiB0aW1lPyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMCAqIDEwMDAgKiAxMDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAzMDAgKiAxMDAwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZmQzMTU0YS4uNjhlYWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNjkxLDEzICs2OTEsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9lbmFibGVfaXJxX2xjaChpbnQgbGNoKQogewogCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJdmFsID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKIAl2YWwgfD0gMSA8PCBsY2g7CiAJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNzk5LDEwICs4MDIsMTMgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQl1MzIgdmFsOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQl2YWwgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOwogCQl2YWwgJj0gfigxIDw8IGxjaCk7CiAJCWRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBDbGVhciB0aGUgQ1NSIHJlZ2lzdGVyIGFuZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCiAJCWRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUihsY2gpKTsKQEAgLTgyOSwxMCArODM1LDEwIEBACiAgKgogICogQHBhcmFtIGFyYl9yYXRlCiAgKiBAcGFyYW0gbWF4X2ZpZm9fZGVwdGgKLSAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRoZXJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCisgKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCiAgKi8KIHZvaWQKIG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKGludCBhcmJfcmF0ZSwgaW50IG1heF9maWZvX2RlcHRoLCBpbnQgdHBhcmFtcykKQEAgLTg0NCwxMSArODUwLDE0IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobWF4X2ZpZm9fZGVwdGggPT0gMCkKKwkJbWF4X2ZpZm9fZGVwdGggPSAxOwogCWlmIChhcmJfcmF0ZSA9PSAwKQogCQlhcmJfcmF0ZSA9IDE7CiAKLQlyZWcgPSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKLQlyZWcgfD0gKDB4ZmYgJiBtYXhfZmlmb19kZXB0aCk7CisJcmVnID0gMHhmZiAmIG1heF9maWZvX2RlcHRoOworCXJlZyB8PSAoMHgzICYgdHBhcmFtcykgPDwgMTI7CisJcmVnIHw9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwogCiAJZG1hX3dyaXRlKHJlZywgR0NSKTsKIH0KQEAgLTk3NSw2ICs5ODQsMTQgQEAKIHsKIAl1MzIgbDsKIAorCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCisJbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CiAJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKQEAgLTk5MiwxOCArMTAwOSw4IEBACiAJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwogCX0KIAotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOwotCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKLQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKLQogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CkBAIC0xMTA3LDYgKzExMTQsMTQgQEAKIHsKIAlpbnQgbGNoOwogCisJLyoKKwkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKKwkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJaWYgKG9tYXBfcmVhZHcoMHhmZmZlYzAwMCArIDB4MDApICYgKDEgPDwgMCkpCisJCQlyZXR1cm4gMTsKKwogCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLwogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKIAkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNzFlYmQ3Zi4uN2MzNDViNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAogc3RhdGljIGludCBjaGVja19ncGlvKGludCBncGlvKQogewotCWlmICh1bmxpa2VseShncGlvX3ZhbGlkKGdwaW8pKSA8IDApIHsKKwlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSA8IDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAib21hcC1ncGlvOiBpbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW8pOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCmluZGV4IGQ5MWI5YmUuLjNhZTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaApAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9LRVlQQURfSAogI2RlZmluZSBBU01BUk1fQVJDSF9LRVlQQURfSAogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI3dhcm5pbmc6IFBsZWFzZSB1cGRhdGUgdGhlIGJvYXJkIHRvIHVzZSBtYXRyaXhfa2V5cGFkLmggaW5zdGVhZAogCiBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcm93czsKQEAgLTM3LDYgKzM3LDkgQEAKIAogI2RlZmluZSBLRVlfUEVSU0lTVEVOVAkJMHgwMDgwMDAwMAogI2RlZmluZSBLRVlOVU1fTUFTSwkJMHgwMEVGRkZGRgorI2RlZmluZSBLRVkoY29sLCByb3csIHZhbCkgKCgoY29sKSA8PCAyOCkgfCAoKHJvdykgPDwgMjQpIHwgKHZhbCkpCisjZGVmaW5lIFBFUlNJU1RFTlRfS0VZKGNvbCwgcm93KSAoKChjb2wpIDw8IDI4KSB8ICgocm93KSA8PCAyNCkgfCBcCisJCQkJCQlLRVlfUEVSU0lTVEVOVCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNGI2MDEyNy4uOTQ1ODRmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCQluZW50ID0gMTsgLyogZm9yIHRoZSBuZXh0IEwxIGVudHJ5ICovCiAJfSBlbHNlIHsKIAkJYnl0ZXMgPSBJT1BHRF9TSVpFOwotCQlpZiAoKmlvcGdkICYgSU9QR0RfU1VQRVIpIHsKKwkJaWYgKCgqaW9wZ2QgJiBJT1BHRF9TVVBFUikgPT0gSU9QR0RfU1VQRVIpIHsKIAkJCW5lbnQgKj0gMTY7CiAJCQkvKiByZXdpbmQgdG8gdGhlIDFzdCBlbnRyeSAqLwogCQkJaW9wZ2QgPSAodTMyICopKCh1MzIpaW9wZ2QgJiBJT1NVUEVSX01BU0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA4OGFjOTc2Li5lNjY0YjkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJcnggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKLQkJdyB8PSAodHggPyBSRElTQUJMRSA6IDApOworCQl3IHw9IChyeCA/IFJESVNBQkxFIDogMCk7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CiAJfQogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCmluZGV4IDIyMDg2ZTYuLjg1N2E2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpZm5kZWYgX19BU01fUExBVF9NRlBfSAogI2RlZmluZSBfX0FTTV9QTEFUX01GUF9ICiAKLSNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDEyOCkKKyNkZWZpbmUgbWZwX3RvX2dwaW8obSkJKChtKSAlIDI1NikKIAogLyogbGlzdCBvZiBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBNRlAgcGlucyAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCmluZGV4IDk0MDVkMDMuLmJlNThmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwppbmRleCA0ZDM2Yjc4Li5kZjQ3MzIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCkBAIC0xODksNyArMTg5LDcgQEAKIGVycjoKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19jb252ZXJ0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfcmVhZCk7CiAKIHN0YXRpYyB2b2lkIHMzY19hZGNfZGVmYXVsdF9zZWxlY3Qoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgdW5zaWduZWQgc2VsZWN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDU0NDdlNjAuLjRhZjlkZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQxMltdICA9ICJTM0MyNDEyIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MFtdICA9ICJTM0MyNDQwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MltdICA9ICJTM0MyNDQyIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MmJbXSAgPSAiUzNDMjQ0MkIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQzW10gID0gIlMzQzI0NDMiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwYVtdID0gIlMzQzI0MTBBIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MGFbXSA9ICJTM0MyNDQwQSI7CkBAIC0xMTIsNiArMTEzLDE1IEBACiAJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MgogCX0sCiAJeworCQkuaWRjb2RlCQk9IDB4MzI0NDBhYWIsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0NDJfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyYgorCX0sCisJewogCQkuaWRjb2RlCQk9IDB4MzI0MTIwMDEsCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKIAkJLm1hcF9pbwkJPSBzM2MyNDEyX21hcF9pbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCAxOTZiMTkxLi5mMDQ2ZjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0yMDgsMTQgKzIwOCwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgcmVsb2FkOwogCi0JcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKLQkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOwotCiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCWRtYXdhcm4oImJ1ZmZlciBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKKwkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOworCiAJLyogY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLwogCiAJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jCmluZGV4IDk1ZGYwNTkuLjU0Njc0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCmluZGV4IGVmZWIwMjUuLmM3NzYxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCkBAIC0yMjIsNyArMjIyLDkgQEAKIC8qIFMzQzI0MTAgYW5kIGNvbXBhdGlibGUgZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CitleHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CiAKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORwogZXh0ZXJuIGludCBzM2MyNDEwX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAogCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KTsKIApAQCAtMjMxLDggKzIzMywxMSBAQAogCiBleHRlcm4gdm9pZCBzM2MyNDEwX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwotCi1leHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisjZWxzZQorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2NhbGMgTlVMTAorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2dldCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfc2V0IE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORyAqLwogCiAvKiBTM0MyNDEyIGNvbXBhdGlibGUgcm91dGluZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaAppbmRleCBiNmRlZWVmLi44MmFiNGFhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgczNjMjQxMF9pbml0X3VhcnRzIE5VTEwKICNkZWZpbmUgczNjMjQxMF9tYXBfaW8gTlVMTAogI2RlZmluZSBzM2MyNDEwX2luaXQgTlVMTAorI2RlZmluZSBzM2MyNDEwYV9pbml0IE5VTEwKICNlbmRpZgogCiBleHRlcm4gaW50IHMzYzI0MTBfYmFzZWNsa19hZGQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKaW5kZXggMjY2YTEwNy4uZDU1NGI5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYwpAQCAtMTUxLDggKzE1MSw2IEBACiAJCXNyYyA9IGNoYW4tPmRldl9hZGRyOwogCQlkc3QgPSBkYXRhOwogCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfU1JDX0FIQjI7Ci0JCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7Ci0JCWNvbnRyb2wwIHw9IDIgPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7CiAJCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfRFNUX0lOQ1I7CiAJCWJyZWFrOwogCkBAIC0xNjAsOCArMTU4LDYgQEAKIAkJc3JjID0gZGF0YTsKIAkJZHN0ID0gY2hhbi0+ZGV2X2FkZHI7CiAJCWNvbnRyb2wwID0gUEwwODBfQ09OVFJPTF9EU1RfQUhCMjsKLQkJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVDsKLQkJY29udHJvbDAgfD0gMiA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKIAkJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9TUkNfSU5DUjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3Myw2ICsxNjksOCBAQAogCWNvbnRyb2wxID0gc2l6ZSA+PiBjaGFuLT5od193aWR0aDsJLyogc2l6ZSBpbiBubyBvZiB4ZmVycyAqLwogCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfUFJPVF9TWVM7CS8qIGFsd2F5cyBpbiBwcml2LiBtb2RlICovCiAJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9UQ19JUlFfRU47CS8qIGFsd2F5cyBmaXJlIElSUSAqLworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7CisJY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKIAogCWxsaS0+c3JjX2FkZHIgPSBzcmM7CiAJbGxpLT5kc3RfYWRkciA9IGRzdDsKQEAgLTMzOSw2ICszMzcsNyBAQAogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OwogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOwogCXN0cnVjdCBwbDA4MHNfbGxpICpsbGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTighY2hhbik7CkBAIC0zNjYsNiArMzY1LDggQEAKIAogCXMzYzY0eHhfZG1hX2ZpbGxfbGxpKGNoYW4sIGxsaSwgZGF0YSwgc2l6ZSk7CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAlpZiAoKG5leHQgPSBjaGFuLT5uZXh0KSAhPSBOVUxMKSB7CiAJCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICplbmQgPSBjaGFuLT5lbmQ7CiAJCXN0cnVjdCBwbDA4MHNfbGxpICplbmRsbGkgPSBlbmQtPmxsaTsKQEAgLTM5Nyw2ICszOTgsOCBAQAogCQlzM2M2NHh4X2xsaV90b19yZWdzKGNoYW4sIGxsaSk7CiAJfQogCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJc2hvd19sbGkobGxpKTsKIAogCWRiZ19zaG93Y2hhbihjaGFuKTsKQEAgLTU2MCwyNiArNTYzLDExIEBACiAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZnJlZSk7CiAKLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfdGNpcnEoc3RydWN0IHMzYzY0eHhfZG1hYyAqZG1hYywgaW50IG9mZnMpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBkbWFjLT5jaGFubmVscyArIG9mZnM7Ci0KLQkvKiBub3RlLCB3ZSBjdXJyZW50bHkgZG8gbm90IGJvdGhlciB0byB3b3JrIG91dCB3aGljaCBidWZmZXIKLQkgKiBvciBidWZmZXJzIGhhdmUgYmVlbiBjb21wbGV0ZWQgc2luY2UgdGhlIGxhc3QgdGMtaXJxLiAqLwotCi0JaWYgKGNoYW4tPmNhbGxiYWNrX2ZuKQotCQkoY2hhbi0+Y2FsbGJhY2tfZm4pKGNoYW4sIGNoYW4tPmN1cnItPnB3LCAwLCBTM0MyNDEwX1JFU19PSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzY0eHhfZG1hX2VycmlycShzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjLCBpbnQgb2ZmcykKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9mZnMgJWRcbiIsIF9fZnVuY19fLCBvZmZzKTsKLX0KLQogc3RhdGljIGlycXJldHVybl90IHMzYzY0eHhfZG1hX2lycShpbnQgaXJxLCB2b2lkICpwdykKIHsKIAlzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjID0gcHc7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW47CisJZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlczsKIAl1MzIgdGNzdGF0LCBlcnJzdGF0OwogCXUzMiBiaXQ7CiAJaW50IG9mZnM7CkBAIC01ODgsMTQgKzU3Niw1NCBAQAogCWVycnN0YXQgPSByZWFkbChkbWFjLT5yZWdzICsgUEwwODBfRVJSX1NUQVRVUyk7CiAKIAlmb3IgKG9mZnMgPSAwLCBiaXQgPSAxOyBvZmZzIDwgODsgb2ZmcysrLCBiaXQgPDw9IDEpIHsKKwkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZmY7CisKKwkJaWYgKCEoZXJyc3RhdCAmIGJpdCkgJiYgISh0Y3N0YXQgJiBiaXQpKQorCQkJY29udGludWU7CisKKwkJY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKKwkJcmVzID0gUzNDMjQxMF9SRVNfRVJSOworCiAJCWlmICh0Y3N0YXQgJiBiaXQpIHsKIAkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9UQ19DTEVBUik7Ci0JCQlzM2M2NHh4X2RtYV90Y2lycShkbWFjLCBvZmZzKTsKKwkJCXJlcyA9IFMzQzI0MTBfUkVTX09LOwogCQl9CiAKLQkJaWYgKGVycnN0YXQgJiBiaXQpIHsKLQkJCXMzYzY0eHhfZG1hX2VycmlycShkbWFjLCBvZmZzKTsKKwkJaWYgKGVycnN0YXQgJiBiaXQpCiAJCQl3cml0ZWwoYml0LCBkbWFjLT5yZWdzICsgUEwwODBfRVJSX0NMRUFSKTsKKworCQkvKiAnbmV4dCcgcG9pbnRzIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBuZXh0IHRvIHRoZQorCQkgKiBjdXJyZW50bHkgYWN0aXZlIGJ1ZmZlci4KKwkJICogRm9yIENJUkNVTEFSIHF1ZXVlcywgJ25leHQnIHdpbGwgYmUgc2FtZSBhcyAnY3VycicKKwkJICogd2hlbiAnZW5kJyBpcyB0aGUgYWN0aXZlIGJ1ZmZlci4KKwkJICovCisJCWJ1ZmYgPSBjaGFuLT5jdXJyOworCQl3aGlsZSAoYnVmZiAmJiBidWZmICE9IGNoYW4tPm5leHQKKwkJCQkmJiBidWZmLT5uZXh0ICE9IGNoYW4tPm5leHQpCisJCQlidWZmID0gYnVmZi0+bmV4dDsKKworCQlpZiAoIWJ1ZmYpCisJCQlCVUcoKTsKKworCQlpZiAoYnVmZiA9PSBjaGFuLT5uZXh0KQorCQkJYnVmZiA9IGNoYW4tPmVuZDsKKworCQlzM2M2NHh4X2RtYV9idWZmZmRvbmUoY2hhbiwgYnVmZiwgcmVzKTsKKworCQkvKiBGcmVlIHRoZSBub2RlIGFuZCB1cGRhdGUgY3VyciwgaWYgbm9uLWNpcmN1bGFyIHF1ZXVlICovCisJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkgeworCQkJY2hhbi0+Y3VyciA9IGJ1ZmYtPm5leHQ7CisJCQlzM2M2NHh4X2RtYV9mcmVlYnVmZihidWZmKTsKKwkJfQorCisJCS8qIFVwZGF0ZSAnbmV4dCcgKi8KKwkJYnVmZiA9IGNoYW4tPm5leHQ7CisJCWlmIChjaGFuLT5uZXh0ID09IGNoYW4tPmVuZCkgeworCQkJY2hhbi0+bmV4dCA9IGNoYW4tPmN1cnI7CisJCQlpZiAoIShjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9DSVJDVUxBUikpCisJCQkJY2hhbi0+ZW5kID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWNoYW4tPm5leHQgPSBidWZmLT5uZXh0OwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCmluZGV4IGE4Nzc3YTcuLmZmNDZlN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCkBAIC01MSw4ICs1MSw4IEBACiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHgzIDw8IDApCi0jZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHhmIDw8IDApCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fU0hJRlQJKDApCiAKIC8qIENMS0RJVjEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCmluZGV4IDk3NDU4NTIuLjZmZmEyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwpAQCAtNjc3LDYgKzY3Nyw5IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7CiAKKwkvKiBGb3Igbm93IGFzc3VtZSB0aGUgbXV4IGFsd2F5cyBzZWxlY3RzIHRoZSBjcnlzdGFsICovCisJY2xrX2V4dF94dGFsX211eC5wYXJlbnQgPSB4dGFsX2NsazsKKwogCWVwbGwgPSBzM2M2NDAwX2dldF9lcGxsKHh0YWwpOwogCW1wbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX01QTExfQ09OKSk7CiAJYXBsbCA9IHMzYzY0MDBfZ2V0X3BsbCh4dGFsLCBfX3Jhd19yZWFkbChTM0NfQVBMTF9DT04pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDk0YmU3YmIuLjA3Yjk3NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IEZyaSBTZXAgMTggMjE6NDI6MDAgMjAwOQorIyBMYXN0IHVwZGF0ZTogV2VkIE5vdiAyNSAyMjoxNDo1OCAyMDA5CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTkyOCw3ICs5MjgsNyBAQAogcGFsbXRjCQkJTUFDSF9QQUxNVEMJCVBBTE1UQwkJCTkxOAogb21hcF9hcG9sbG9uCQlNQUNIX09NQVBfQVBPTExPTglPTUFQX0FQT0xMT04JCTkxOQogbXhjMzAwMzBldmIJCU1BQ0hfTVhDMzAwMzBFVkIJTVhDMzAwMzBFVkIJCTkyMAotcmVhXzJkCQkJTUFDSF9SRUFfMkQJCVJFQV8yRAkJCTkyMQorcmVhX2NwdTIJCU1BQ0hfUkVBXzJECQlSRUFfMkQJCQk5MjEKIGV0aTNlNTI0CQlNQUNIX1RJM0U1MjQJCVRJM0U1MjQJCQk5MjIKIGF0ZWI5MjAwCQlNQUNIX0FURUI5MjAwCQlBVEVCOTIwMAkJOTIzCiBhdWNrbGFuZAkJTUFDSF9BVUNLTEFORAkJQVVDS0xBTkQJCTkyNApAQCAtMjQyMSwzICsyNDIxLDExOCBAQAogbWgzNTUJCQlNQUNIX01IMzU1CQlNSDM1NQkJCTI0MzUKIHBjNzgwMgkJCU1BQ0hfUEM3ODAyCQlQQzc4MDIJCQkyNDM2CiBnbmV0X3NnYwkJTUFDSF9HTkVUX1NHQwkJR05FVF9TR0MJCTI0MzcKK2VpbnN0ZWluMTUJCU1BQ0hfRUlOU1RFSU4xNQkJRUlOU1RFSU4xNQkJMjQzOAorY21wZAkJCU1BQ0hfQ01QRAkJQ01QRAkJCTI0MzkKK2RhdmluY2lfaGFzZTEJCU1BQ0hfREFWSU5DSV9IQVNFMQlEQVZJTkNJX0hBU0UxCQkyNDQwCitsZ2VpbmNpdGVwaG9uZQkJTUFDSF9MR0VJTkNJVEVQSE9ORQlMR0VJTkNJVEVQSE9ORQkJMjQ0MQorZWEzMTN4CQkJTUFDSF9FQTMxM1gJCUVBMzEzWAkJCTI0NDIKK2Z3YmRfMzkwNjQJCU1BQ0hfRldCRF8zOTA2NAkJRldCRF8zOTA2NAkJMjQ0MworZndiZF8zOTAxMjgJCU1BQ0hfRldCRF8zOTAxMjgJRldCRF8zOTAxMjgJCTI0NDQKK3BlbGNvX21vZQkJTUFDSF9QRUxDT19NT0UJCVBFTENPX01PRQkJMjQ0NQorbWluaW1peDI3CQlNQUNIX01JTklNSVgyNwkJTUlOSU1JWDI3CQkyNDQ2CitvbWFwM190aHVuZGVyCQlNQUNIX09NQVAzX1RIVU5ERVIJT01BUDNfVEhVTkRFUgkJMjQ0NworcGFzc2lvbmMJCU1BQ0hfUEFTU0lPTkMJCVBBU1NJT05DCQkyNDQ4CitteDI3YW1hdGEJCU1BQ0hfTVgyN0FNQVRBCQlNWDI3QU1BVEEJCTI0NDkKK2JnYXQxCQkJTUFDSF9CR0FUMQkJQkdBVDEJCQkyNDUwCitidXp6CQkJTUFDSF9CVVpaCQlCVVpaCQkJMjQ1MQorbWI5ZzIwCQkJTUFDSF9NQjlHMjAJCU1COUcyMAkJCTI0NTIKK3l1c2hhbgkJCU1BQ0hfWVVTSEFOCQlZVVNIQU4JCQkyNDUzCitsaXphcmQJCQlNQUNIX0xJWkFSRAkJTElaQVJECQkJMjQ1NAorb21hcDNwb2x5Y29tCQlNQUNIX09NQVAzUE9MWUNPTQlPTUFQM1BPTFlDT00JCTI0NTUKK3NtZGt2MjEwCQlNQUNIX1NNREtWMjEwCQlTTURLVjIxMAkJMjQ1NgorYnJhdm8JCQlNQUNIX0JSQVZPCQlCUkFWTwkJCTI0NTcKK3Npb2dlbnRvbzEJCU1BQ0hfU0lPR0VOVE9PMQkJU0lPR0VOVE9PMQkJMjQ1OAorc2lvZ2VudG9vMgkJTUFDSF9TSU9HRU5UT08yCQlTSU9HRU5UT08yCQkyNDU5CitzbTNrCQkJTUFDSF9TTTNLCQlTTTNLCQkJMjQ2MAorYWNlcl90ZW1wb19mOTAwCQlNQUNIX0FDRVJfVEVNUE9fRjkwMAlBQ0VSX1RFTVBPX0Y5MDAJCTI0NjEKK3NzdDYxdmMwMTBfZGV2CQlNQUNIX1NTVDYxVkMwMTBfREVWCVNTVDYxVkMwMTBfREVWCQkyNDYyCitnbGl0dGVydGluZAkJTUFDSF9HTElUVEVSVElORAlHTElUVEVSVElORAkJMjQ2Mworb21hcF96b29tMwkJTUFDSF9PTUFQX1pPT00zCQlPTUFQX1pPT00zCQkyNDY0CitvbWFwXzM2MzBzZHAJCU1BQ0hfT01BUF8zNjMwU0RQCU9NQVBfMzYzMFNEUAkJMjQ2NQorY3lib29rMjQ0MAkJTUFDSF9DWUJPT0syNDQwCQlDWUJPT0syNDQwCQkyNDY2Cit0b3Jpbm9fcwkJTUFDSF9UT1JJTk9fUwkJVE9SSU5PX1MJCTI0NjcKK2hhdmFuYQkJCU1BQ0hfSEFWQU5BCQlIQVZBTkEJCQkyNDY4CitiZWF1bW9udF8xMQkJTUFDSF9CRUFVTU9OVF8xMQlCRUFVTU9OVF8xMQkJMjQ2OQordmFuZ3VhcmQJCU1BQ0hfVkFOR1VBUkQJCVZBTkdVQVJECQkyNDcwCitzNXBjMTEwX2RyYWNvCQlNQUNIX1M1UEMxMTBfRFJBQ08JUzVQQzExMF9EUkFDTwkJMjQ3MQorY2FydGVzaW9fdHdvCQlNQUNIX0NBUlRFU0lPX1RXTwlDQVJURVNJT19UV08JCTI0NzIKK2FzdGVyCQkJTUFDSF9BU1RFUgkJQVNURVIJCQkyNDczCit2b2d1ZXN2MjEwCQlNQUNIX1ZPR1VFU1YyMTAJCVZPR1VFU1YyMTAJCTI0NzQKK2FjbTUwMHgJCQlNQUNIX0FDTTUwMFgJCUFDTTUwMFgJCQkyNDc1CitrbTkyNjAJCQlNQUNIX0tNOTI2MAkJS005MjYwCQkJMjQ3NgorbmlkZWZsZXhnMQkJTUFDSF9OSURFRkxFWEcxCQlOSURFRkxFWEcxCQkyNDc3CitjdGVyYV9wbHVnX2lvCQlNQUNIX0NURVJBX1BMVUdfSU8JQ1RFUkFfUExVR19JTwkJMjQ3OAorc21hcnRxNwkJCU1BQ0hfU01BUlRRNwkJU01BUlRRNwkJCTI0NzkKK2F0OTFzYW05ZzEwZWsyCQlNQUNIX0FUOTFTQU05RzEwRUsyCUFUOTFTQU05RzEwRUsyCQkyNDgwCithc3VzcDUyNwkJTUFDSF9BU1VTUDUyNwkJQVNVU1A1MjcJCTI0ODEKK2F0OTFzYW05ZzIwbXBtMgkJTUFDSF9BVDkxU0FNOUcyME1QTTIJQVQ5MVNBTTlHMjBNUE0yCQkyNDgyCit0b3Bhc2E5MDAJCU1BQ0hfVE9QQVNBOTAwCQlUT1BBU0E5MDAJCTI0ODMKK2VsZWN0cnVtXzEwMAkJTUFDSF9FTEVDVFJVTV8xMDAJRUxFQ1RSVU1fMTAwCQkyNDg0CitteDUxZ3JiCQkJTUFDSF9NWDUxR1JCCQlNWDUxR1JCCQkJMjQ4NQoreGVhMzAwCQkJTUFDSF9YRUEzMDAJCVhFQTMwMAkJCTI0ODYKK2h0Y3N0YXJ0cmVrCQlNQUNIX0hUQ1NUQVJUUkVLCUhUQ1NUQVJUUkVLCQkyNDg3CitsaW1hCQkJTUFDSF9MSU1BCQlMSU1BCQkJMjQ4OAorY3NiNzQwCQkJTUFDSF9DU0I3NDAJCUNTQjc0MAkJCTI0ODkKK3VzYl9zODgxNQkJTUFDSF9VU0JfUzg4MTUJCVVTQl9TODgxNQkJMjQ5MAord2F0c29uX2VmbV9wbHVnaW4JTUFDSF9XQVRTT05fRUZNX1BMVUdJTglXQVRTT05fRUZNX1BMVUdJTgkyNDkxCittaWxreXdheQkJTUFDSF9NSUxLWVdBWQkJTUlMS1lXQVkJCTI0OTIKK2c0ZXZtCQkJTUFDSF9HNEVWTQkJRzRFVk0JCQkyNDkzCitwaWNvbW9kNgkJTUFDSF9QSUNPTU9ENgkJUElDT01PRDYJCTI0OTQKK29tYXBsMTM4X2hhd2tib2FyZAlNQUNIX09NQVBMMTM4X0hBV0tCT0FSRAlPTUFQTDEzOF9IQVdLQk9BUkQJMjQ5NQoraXA2MDAwCQkJTUFDSF9JUDYwMDAJCUlQNjAwMAkJCTI0OTYKK2lwNjAxMAkJCU1BQ0hfSVA2MDEwCQlJUDYwMTAJCQkyNDk3Cit1dG00MDAJCQlNQUNIX1VUTTQwMAkJVVRNNDAwCQkJMjQ5OAorb21hcDNfenliZXgJCU1BQ0hfT01BUDNfWllCRVgJT01BUDNfWllCRVgJCTI0OTkKK3dpcmVsZXNzX3NwYWNlCQlNQUNIX1dJUkVMRVNTX1NQQUNFCVdJUkVMRVNTX1NQQUNFCQkyNTAwCitzeDU2MAkJCU1BQ0hfU1g1NjAJCVNYNTYwCQkJMjUwMQordHM0MXgJCQlNQUNIX1RTNDFYCQlUUzQxWAkJCTI1MDIKK2VscGhlbDEwMzczCQlNQUNIX0VMUEhFTDEwMzczCUVMUEhFTDEwMzczCQkyNTAzCityaG9ib3QJCQlNQUNIX1JIT0JPVAkJUkhPQk9UCQkJMjUwNAorbXg1MV9yZWZyZXNoCQlNQUNIX01YNTFfUkVGUkVTSAlNWDUxX1JFRlJFU0gJCTI1MDUKK2xzOTI2MAkJCU1BQ0hfTFM5MjYwCQlMUzkyNjAJCQkyNTA2CitzaGFuawkJCU1BQ0hfU0hBTksJCVNIQU5LCQkJMjUwNworcXNkOHg1MF9zdDEJCU1BQ0hfUVNEOFg1MF9TVDEJUVNEOFg1MF9TVDEJCTI1MDgKK2F0OTFzYW05bTEwZWtlcwkJTUFDSF9BVDkxU0FNOU0xMEVLRVMJQVQ5MVNBTTlNMTBFS0VTCQkyNTA5CitoaXJhbQkJCU1BQ0hfSElSQU0JCUhJUkFNCQkJMjUxMAorcGh5MzI1MAkJCU1BQ0hfUEhZMzI1MAkJUEhZMzI1MAkJCTI1MTEKK2VhMzI1MAkJCU1BQ0hfRUEzMjUwCQlFQTMyNTAJCQkyNTEyCitmZGkzMjUwCQkJTUFDSF9GREkzMjUwCQlGREkzMjUwCQkJMjUxMword2hpdGVzdG9uZQkJTUFDSF9XSElURVNUT05FCQlXSElURVNUT05FCQkyNTE0CithdDkxc2FtOTI2M25pdAkJTUFDSF9BVDkxU0FNOTI2M05JVAlBVDkxU0FNOTI2M05JVAkJMjUxNQorY2NteDUxCQkJTUFDSF9DQ01YNTEJCUNDTVg1MQkJCTI1MTYKK2NjbXg1MWpzCQlNQUNIX0NDTVg1MUpTCQlDQ01YNTFKUwkJMjUxNworY2N3bXg1MQkJCU1BQ0hfQ0NXTVg1MQkJQ0NXTVg1MQkJCTI1MTgKK2Njd214NTFqcwkJTUFDSF9DQ1dNWDUxSlMJCUNDV01YNTFKUwkJMjUxOQorbWluaTY0MTAJCU1BQ0hfTUlOSTY0MTAJCU1JTkk2NDEwCQkyNTIwCit0aW55NjQxMAkJTUFDSF9USU5ZNjQxMAkJVElOWTY0MTAJCTI1MjEKK25hbm82NDEwCQlNQUNIX05BTk82NDEwCQlOQU5PNjQxMAkJMjUyMgorYXQ1NzJkOTQwaGZubGRiCQlNQUNIX0FUNTcyRDk0MEhGTkxEQglBVDU3MkQ5NDBIRk5MREIJCTI1MjMKK2h0Y2xlbwkJCU1BQ0hfSFRDTEVPCQlIVENMRU8JCQkyNTI0CithdnAxMwkJCU1BQ0hfQVZQMTMJCUFWUDEzCQkJMjUyNQoreHhzdmlkZW9kCQlNQUNIX1hYU1ZJREVPRAkJWFhTVklERU9ECQkyNTI2Cit2cG5leHQJCQlNQUNIX1ZQTkVYVAkJVlBORVhUCQkJMjUyNworc3dhcmNvX2l0YzMJCU1BQ0hfU1dBUkNPX0lUQzMJU1dBUkNPX0lUQzMJCTI1MjgKK3R4NTEJCQlNQUNIX1RYNTEJCVRYNTEJCQkyNTI5Citkb2xieV9jYXQxMDIxCQlNQUNIX0RPTEJZX0NBVDEwMjEJRE9MQllfQ0FUMTAyMQkJMjUzMAorbXgyOGV2awkJCU1BQ0hfTVgyOEVWSwkJTVgyOEVWSwkJCTI1MzEKK3Bob2VuaXgyNjAJCU1BQ0hfUEhPRU5JWDI2MAkJUEhPRU5JWDI2MAkJMjUzMgordXZhY2Ffc3RvcmsJCU1BQ0hfVVZBQ0FfU1RPUksJVVZBQ0FfU1RPUksJCTI1MzMKK3NtYXJ0cTUJCQlNQUNIX1NNQVJUUTUJCVNNQVJUUTUJCQkyNTM0CithbGwzMDc4CQkJTUFDSF9BTEwzMDc4CQlBTEwzMDc4CQkJMjUzNQorY3RlcmFfMmJheV9kcwkJTUFDSF9DVEVSQV8yQkFZX0RTCUNURVJBXzJCQVlfRFMJCTI1MzYKK3Npb2dlbnRvbzMJCU1BQ0hfU0lPR0VOVE9PMwkJU0lPR0VOVE9PMwkJMjUzNworZXBiNTAwMAkJCU1BQ0hfRVBCNTAwMAkJRVBCNTAwMAkJCTI1MzgKK2h5OTI2MwkJCU1BQ0hfSFk5MjYzCQlIWTkyNjMJCQkyNTM5CithY2VyX3RlbXBvX205MDAJCU1BQ0hfQUNFUl9URU1QT19NOTAwCUFDRVJfVEVNUE9fTTkwMAkJMjU0MAorYWNlcl90ZW1wb19keDY1MAlNQUNIX0FDRVJfVEVNUE9fRFg5MDAJQUNFUl9URU1QT19EWDkwMAkyNTQxCithY2VyX3RlbXBvX3g5NjAJCU1BQ0hfQUNFUl9URU1QT19YOTYwCUFDRVJfVEVNUE9fWDk2MAkJMjU0MgorYWNlcl9ldGVuX3Y5MDAJCU1BQ0hfQUNFUl9FVEVOX1Y5MDAJQUNFUl9FVEVOX1Y5MDAJCTI1NDMKK2FjZXJfZXRlbl94OTAwCQlNQUNIX0FDRVJfRVRFTl9YOTAwCUFDRVJfRVRFTl9YOTAwCQkyNTQ0Citib25uZWxsCQkJTUFDSF9CT05ORUxMCQlCT05ORUxMCQkJMjU0NQorb2h0X214MjcJCU1BQ0hfT0hUX01YMjcJCU9IVF9NWDI3CQkyNTQ2CitodGNxdWFydHoJCU1BQ0hfSFRDUVVBUlRaCQlIVENRVUFSVFoJCTI1NDcKK2RhdmluY2lfZG02NDY3dGV2bQlNQUNIX0RBVklOQ0lfRE02NDY3VEVWTQlEQVZJTkNJX0RNNjQ2N1RFVk0JMjU0OAorYzNheDAzCQkJTUFDSF9DM0FYMDMJCUMzQVgwMwkJCTI1NDkKK214dF90ZDYwCQlNQUNIX01YVF9URDYwCQlNWFRfVEQ2MAkJMjU1MAorZXN5eAkJCU1BQ0hfRVNZWAkJRVNZWAkJCTI1NTEKK2J1bGxkb2cJCQlNQUNIX0JVTExET0cJCUJVTExET0cJCQkyNTUzCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9idWcuaAppbmRleCAzMzFkNDViLi4yYWEzNzNjYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC01Miw3ICs1Miw3IEBACiAjZGVmaW5lIEJVRygpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlfQlVHX09SX1dBUk4oMCk7CQkJCQlcCi0JCWZvciAoOzspOwkJCQkJCVwKKwkJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCA0NGQwYmZhLi45Yzk2YTEzIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzEsNSArMzEsOCBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxMCgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKaW5kZXggMWYxNzAyMS4uMzk0NmFmZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKQEAgLTIyNSw4ICsyMjUsMTMgQEAKIHZvaWQgYmxhY2tmaW5fZG1hX3Jlc3VtZSh2b2lkKQogewogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BX1NVU1BFTkRfQ0hBTk5FTFM7ICsraSkKLQkJZG1hX2NoW2ldLnJlZ3MtPnBlcmlwaGVyYWxfbWFwID0gZG1hX2NoW2ldLnNhdmVkX3BlcmlwaGVyYWxfbWFwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTFM7ICsraSkgeworCQlkbWFfY2hbaV0ucmVncy0+Y2ZnID0gMDsKKworCQlpZiAoaSA8IE1BWF9ETUFfU1VTUEVORF9DSEFOTkVMUykKKwkJCWRtYV9jaFtpXS5yZWdzLT5wZXJpcGhlcmFsX21hcCA9IGRtYV9jaFtpXS5zYXZlZF9wZXJpcGhlcmFsX21hcDsKKwl9CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKaW5kZXggZjdiOWNkYy4uYjUyYzFmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCkBAIC0zOCw3ICszOCw3IEBACiAKICNpZmRlZiBDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRQogCWRfY2FjaGUgPSBDUExCX0wxX0NIQkw7Ci0jaWZkZWYgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVFJPVUdICisjaWZkZWYgQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFVEhST1VHSAogCWRfY2FjaGUgfD0gQ1BMQl9MMV9BT1cgfCBDUExCX1dUOwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwppbmRleCA0MzBhZTM5Li41Y2M3ZTJlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlyZWdzLT5wYyA9IG5ld19pcDsKIAlpZiAoY3VycmVudC0+bW0pCiAJCXJlZ3MtPnA1ID0gY3VycmVudC0+bW0tPnN0YXJ0X2RhdGE7Ci0jaWZkZWYgQ09ORklHX1NNUAorI2lmbmRlZiBDT05GSUdfU01QCiAJdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+bDFfdGFza19pbmZvLnN0YWNrX3N0YXJ0ID0KIAkJKHZvaWQgKiljdXJyZW50LT5tbS0+Y29udGV4dC5zdGFja19zdGFydDsKIAl0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpLT5sMV90YXNrX2luZm8ubG93ZXN0X3NwID0gKHZvaWQgKiluZXdfc3A7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCmluZGV4IDA5ODJiNWQuLjU2YjBiYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkU6CiAJCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19DT1JFX09OTFk6CiAJCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZkYXRhLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2NvcHksIDApOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2NvcHksIDEpOwogCQkJCWlmIChjb3BpZWQpCiAJCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IGU5YzY1MzkuLjI4MjlkZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTcwLDYgKzc0LDEwIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjEgKDEpCiAvKiBTeW5jaHJvbml6YXRpb24gUHJvYmxlbSBhdCBTdGFydHVwIE1heSBDYXVzZSBTUE9SVCBUcmFuc21pdCBDaGFubmVscyB0byBNaXNhbGlnbiAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDYyICgxKQorLyogSW50ZXJydXB0ZWQgMzItQml0IFNQT1JUIERhdGEgUmVnaXN0ZXIgQWNjZXNzIFJlc3VsdHMgSW4gVW5kZXJmbG93ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzMgKDEpCisvKiBURVNUU0VUIEluc3RydWN0aW9uIENhbm5vdCBCZSBJbnRlcnJ1cHRlZCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc3ICgxKQogCiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDA5OSAoMCkKQEAgLTEzMyw1ICsxNDEsNyBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDUwICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY1ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY3ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc0ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggM2Y5MDUyNi4uMDIwNDBkZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTEsMTQgKzEsMTggQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKICAqICAtIFJldmlzaW9uIEQsIDA4LzE0LzIwMDk7IEFEU1AtQkY1MjYgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAotICogIC0gUmV2aXNpb24gRiwgMDMvMDMvMjAwOTsgQURTUC1CRjUyNyBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CisgKiAgLSBSZXZpc2lvbiBHLCAwOC8yNS8yMDA5OyBBRFNQLUJGNTI3IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKICAqLwogCiAjaWZuZGVmIF9NQUNIX0FOT01BTFlfSF8KQEAgLTIwMCw2ICsyMDQsMTAgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NyAoMSkKIC8qIFBMTCBMYXRjaGVzIEluY29ycmVjdCBTZXR0aW5ncyBEdXJpbmcgUmVzZXQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2OSAoMSkKKy8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0yNTAsNSArMjU4LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0NyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0OCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IGNkODNkYjIuLjliM2Y3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTIwMiw2ICsyMDYsMTAgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0MyAoMSkKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIHdoZW4gUkVUSSBQb2ludHMgdG8gSW52YWxpZCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MSAoMSkKKy8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKIAogLyogVGhlc2UgYW5vbWFsaWVzIGhhdmUgYmVlbiAicGhhc2VkIiBvdXQgb2YgYW5hbG9nLmNvbSBhbm9tYWx5IHNoZWV0cyBhbmQgYXJlCiAgKiBoZXJlIHRvIHNob3cgcnVubmluZyBvbiBvbGRlciBzaWxpY29uIGp1c3QgaXNuJ3QgZmVhc2libGUuCkBAIC0zNDksNSArMzU3LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ1MCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IGYwOTFhZDIuLmQyYzQyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTE1Niw2ICsxNjAsMTAgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0MyAoMSkKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIHdoZW4gUkVUSSBQb2ludHMgdG8gSW52YWxpZCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MSAoMSkKKy8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0yMDIsNSArMjEwLDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ1MCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDI2Yjc2MDguLmQ4ODJiN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTEyOCw2ICsxMzIsMTAgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ0MyAoMSkKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIHdoZW4gUkVUSSBQb2ludHMgdG8gSW52YWxpZCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MSAoMSkKKy8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0xNzYsNSArMTg0LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ1MCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2NyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NCAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDUyYjExNmEuLjdkMDhjNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTI0LDYgKzI4LDggQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDExOSAoMSkKIC8qIFJ4LkggQ2Fubm90IEJlIFVzZWQgdG8gQWNjZXNzIDE2LWJpdCBTeXN0ZW0gTU1SIFJlZ2lzdGVycyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTIyICgxKQorLyogRGF0YSBDb3JydXB0aW9uIHdpdGggQ2FjaGVkIEV4dGVybmFsIE1lbW9yeSBhbmQgTm9uLUNhY2hlZCBPbi1DaGlwIEwyIE1lbW9yeSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMjIwICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3IgZnJvbSBhbiBBY2Nlc3MgaW4gdGhlIFNoYWRvdyBvZiBhIENvbmRpdGlvbmFsIEJyYW5jaCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjQ1ICgxKQogLyogU2Vuc2l0aXZpdHkgVG8gTm9pc2Ugd2l0aCBTbG93IElucHV0IEVkZ2UgUmF0ZXMgb24gRXh0ZXJuYWwgU1BPUlQgVFggYW5kIFJYIENsb2NrcyAqLwpAQCAtMjAwLDYgKzIwNiwxNCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY2ICgxKQogLyogUG9zc2libGUgUlggZGF0YSBjb3JydXB0aW9uIHdoZW4gY29udHJvbCAmIGRhdGEgRVAgRklGT3MgYXJlIGFjY2Vzc2VkIHZpYSB0aGUgY29yZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY3ICgxKQorLyogSW50ZXJydXB0ZWQgMzItQml0IFNQT1JUIERhdGEgUmVnaXN0ZXIgQWNjZXNzIFJlc3VsdHMgSW4gVW5kZXJmbG93ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzMgKDEpCisvKiBBY2Nlc3MgdG8gRERSLVNEUkFNIGNhdXNlcyBzeXN0ZW0gaGFuZyB1bmRlciBjZXJ0YWluIFBMTC9WUiBzZXR0aW5ncyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc0ICgxKQorLyogQ29yZSBIYW5nIFdpdGggTDIvTDMgQ29uZmlndXJlZCBpbiBXcml0ZWJhY2sgQ2FjaGUgTW9kZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgxKQorLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0yMTUsNyArMjI5LDYgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDE5OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIwMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxNSAoMCkKLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyMCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMSAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCAwMjYxYTVlLi5mOTlmMTc0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC0xOSw2ICsxOSwxNiBAQAogCVxyZWdcKCkuaCA9IF9jb3JlbG9jazsKIC5lbmRtCiAKKy5tYWNybyBzYWZlX3Rlc3RzZXQgYWRkcjpyZXEsIHNjcmF0Y2g6cmVxCisjaWYgQU5PTUFMWV8wNTAwMDQ3NworCWNsaSBcc2NyYXRjaDsKKwl0ZXN0c2V0IChcYWRkcik7CisJc3RpIFxzY3JhdGNoOworI2Vsc2UKKwl0ZXN0c2V0IChcYWRkcik7CisjZW5kaWYKKy5lbmRtCisKIC8qCiAgKiByMCA9IGFkZHJlc3Mgb2YgYXRvbWljIGRhdGEgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgKDMyYml0KS4KICAqCkBAIC0zMyw3ICs0Myw3IEBACiAJY2xpIHIwOwogCWNvcmVzbG90X2xvYWRhZGRyIHAwOwogLkxyZXRyeV9jb3JlbG9jazoKLQl0ZXN0c2V0IChwMCk7CisJc2FmZV90ZXN0c2V0IHAwLCByMjsKIAlpZiBjYyBqdW1wIC5MZG9uZV9jb3JlbG9jazsKIAlTU1lOQyhyMik7CiAJanVtcCAuTHJldHJ5X2NvcmVsb2NrCkBAIC01Niw3ICs2Niw3IEBACiAJY2xpIHIwOwogCWNvcmVzbG90X2xvYWRhZGRyIHAwOwogLkxyZXRyeV9jb3JlbG9ja19ub2ZsdXNoOgotCXRlc3RzZXQgKHAwKTsKKwlzYWZlX3Rlc3RzZXQgcDAsIHIyOwogCWlmIGNjIGp1bXAgLkxkb25lX2NvcmVsb2NrX25vZmx1c2g7CiAJU1NZTkMocjIpOwogCWp1bXAgLkxyZXRyeV9jb3JlbG9ja19ub2ZsdXNoCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDcwZGE0OTUuLjVkZGM5ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xLDkgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2Fub21hbHkuaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKKyAqIFRoaXMgZmlsZSBpcyB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgYXQKKyAqICAgc3ZuOi8vc291cmNlcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy90b29sY2hhaW4vdHJ1bmsvcHJvYy1kZWZzL2hlYWRlci1mcmFncy8KKyAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KKyAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKQEAgLTIxMyw3ICsyMTcsMTEgQEAKIC8qIERpc2FibGluZyBQZXJpcGhlcmFscyB3aXRoIERNQSBSdW5uaW5nIE1heSBDYXVzZSBETUEgU3lzdGVtIEluc3RhYmlsaXR5ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIEV4Y2VwdGlvbiB3aGVuIElTUiBDb250ZXh0IElzIE5vdCBSZXN0b3JlZCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCisvKiBUZW1wb3JhcmlseSB3YWxrIGFyb3VuZCBmb3IgYnVnIDU0MjMgdGlsbCB0aGlzIGlzc3VlIGlzIGNvbmZpcm1lZCBieQorICogb2ZmaWNpYWwgYW5vbWFseSBkb2N1bWVudC4gSXQgbG9va3MgMDUwMDAyODEgc3RpbGwgZXhpc3RzIG9uIGJmNTYxCisgKiB2MC41LgorICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDw9IDUpCiAvKiBTeXN0ZW0gTU1SIFdyaXRlIElzIFN0YWxsZWQgSW5kZWZpbml0ZWx5IHdoZW4gS2lsbGVkIGluIGEgUGFydGljdWxhciBTdGFnZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgzICgxKQogLyogUmVhZHMgV2lsbCBSZWNlaXZlIEluY29ycmVjdCBEYXRhIHVuZGVyIENlcnRhaW4gQ29uZGl0aW9ucyAqLwpAQCAtMjgwLDYgKzI4OCwxMiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQzICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3Igd2hlbiBSRVRJIFBvaW50cyB0byBJbnZhbGlkIE1lbW9yeSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDYxICgxKQorLyogSW50ZXJydXB0ZWQgMzItQml0IFNQT1JUIERhdGEgUmVnaXN0ZXIgQWNjZXNzIFJlc3VsdHMgSW4gVW5kZXJmbG93ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzMgKDEpCisvKiBDb3JlIEhhbmcgV2l0aCBMMi9MMyBDb25maWd1cmVkIGluIFdyaXRlYmFjayBDYWNoZSBNb2RlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNCkKKy8qIFRFU1RTRVQgSW5zdHJ1Y3Rpb24gQ2Fubm90IEJlIEludGVycnVwdGVkICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzcgKDEpCiAKIC8qIEFub21hbGllcyB0aGF0IGRvbid0IGV4aXN0IG9uIHRoaXMgcHJvYyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTE5ICgwKQpAQCAtMzA0LDUgKzMxOCw2IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NTAgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjUgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjcgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzQgKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCmluZGV4IDlkYmFmY2QuLmYyY2EyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKQEAgLTU3LDMgKzU3LDggQEAKIAkgKCFkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFKSAmJiBkZWZpbmVkKENPTkZJR19CRklOX0wyX1dSSVRFQkFDSykpKQogIyBlcnJvciBZb3UgYXJlIGV4cG9zaW5nIEFub21hbHkgMjIwIGluIHRoaXMgY29uZmlnLCBlaXRoZXIgY29uZmlnIEwyIGFzIFdyaXRlIFRocm91Z2gsIG9yIG1ha2UgRXh0ZXJuYWwgTWVtb3J5IFdCLgogI2VuZGlmCisKKyNpZiBBTk9NQUxZXzA1MDAwNDc1ICYmIFwKKwkoZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX1dSSVRFQkFDSykpCisjIGVycm9yICJBbm9tYWx5IDQ3NSBkb2VzIG5vdCBhbGxvdyB5b3UgdG8gdXNlIFdyaXRlIEJhY2sgY2FjaGUgd2l0aCBMMiBvciBFeHRlcm5hbCBNZW1vcnkiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCmluZGV4IGQ5ODU4NWYuLmQ5MmIxNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwpAQCAtMjc2LDEwICsyNzYsOSBAQAogCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQlyZXR1cm47CiAKLQltc2cgPSBrbWFsbG9jKHNpemVvZigqbXNnKSwgR0ZQX0FUT01JQyk7CisJbXNnID0ga3phbGxvYyhzaXplb2YoKm1zZyksIEdGUF9BVE9NSUMpOwogCWlmICghbXNnKQogCQlyZXR1cm47Ci0JbWVtc2V0KG1zZywgMCwgc2l6ZW9mKG1zZykpOwogCUlOSVRfTElTVF9IRUFEKCZtc2ctPmxpc3QpOwogCW1zZy0+dHlwZSA9IEJGSU5fSVBJX1JFU0NIRURVTEU7CiAKQEAgLTMwNSwxMCArMzA0LDkgQEAKIAlpZiAoY3B1c19lbXB0eShjYWxsbWFwKSkKIAkJcmV0dXJuOwogCi0JbXNnID0ga21hbGxvYyhzaXplb2YoKm1zZyksIEdGUF9BVE9NSUMpOworCW1zZyA9IGt6YWxsb2Moc2l6ZW9mKCptc2cpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwotCW1lbXNldChtc2csIDAsIHNpemVvZihtc2cpKTsKIAlJTklUX0xJU1RfSEVBRCgmbXNnLT5saXN0KTsKIAltc2ctPnR5cGUgPSBCRklOX0lQSV9DUFVfU1RPUDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCmluZGV4IDZiMGEyYjYuLjA5NzRjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCiBub19zaWduYWw6CiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gPj0gMCkgeworCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gIT0gLTEpIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCiAJCXN3aXRjaCAoX19mcmFtZS0+Z3I4KSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAzMGJiOTMwLi4yMzllY2RjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjUsNjEgKzI1LDgyIEBACiAgKiBieSBhdG9taWNhbGx5IG5vdGluZyB0aGUgdGFpbCBhbmQgaW5jcmVtZW50aW5nIGl0IGJ5IG9uZSAodGh1cyBhZGRpbmcKICAqIG91cnNlbGYgdG8gdGhlIHF1ZXVlIGFuZCBub3Rpbmcgb3VyIHBvc2l0aW9uKSwgdGhlbiB3YWl0aW5nIHVudGlsIHRoZSBoZWFkCiAgKiBiZWNvbWVzIGVxdWFsIHRvIHRoZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGFpbC4KKyAqIFRoZSBwYWQgYml0cyBpbiB0aGUgbWlkZGxlIGFyZSB1c2VkIHRvIHByZXZlbnQgdGhlIG5leHRfdGlja2V0IG51bWJlcgorICogb3ZlcmZsb3dpbmcgaW50byB0aGUgbm93X3NlcnZpbmcgbnVtYmVyLgogICoKLSAqICAgNjMgICAgICAgICAgICAgICAgICAgICAzMiAgMzEgICAgICAgICAgICAgICAgICAgICAgMAorICogICAzMSAgICAgICAgICAgICAxNyAgMTYgICAgMTUgIDE0ICAgICAgICAgICAgICAgICAgICAwCiAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgfCAgbmV4dF90aWNrZXRfbnVtYmVyICAgICAgfCAgICAgbm93X3NlcnZpbmcgICAgICAgICB8CisgKiAgfCAgbm93X3NlcnZpbmcgICAgIHwgcGFkZGluZyB8ICAgbmV4dF90aWNrZXQgICAgICAgICB8CiAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKi8KIAotI2RlZmluZSBUSUNLRVRfU0hJRlQJMzIKKyNkZWZpbmUgVElDS0VUX1NISUZUCTE3CisjZGVmaW5lIFRJQ0tFVF9CSVRTCTE1CisjZGVmaW5lCVRJQ0tFVF9NQVNLCSgoMSA8PCBUSUNLRVRfQklUUykgLSAxKQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewotCWludAkqcCA9IChpbnQgKikmbG9jay0+bG9jaywgdHVybiwgbm93X3NlcnZpbmc7CisJaW50CSpwID0gKGludCAqKSZsb2NrLT5sb2NrLCB0aWNrZXQsIHNlcnZlOwogCi0Jbm93X3NlcnZpbmcgPSAqcDsKLQl0dXJuID0gaWE2NF9mZXRjaGFkZCgxLCBwKzEsIGFjcSk7CisJdGlja2V0ID0gaWE2NF9mZXRjaGFkZCgxLCBwLCBhY3EpOwogCi0JaWYgKHR1cm4gPT0gbm93X3NlcnZpbmcpCisJaWYgKCEoKCh0aWNrZXQgPj4gVElDS0VUX1NISUZUKSBeIHRpY2tldCkgJiBUSUNLRVRfTUFTSykpCiAJCXJldHVybjsKIAotCWRvIHsKKwlpYTY0X2ludmFsYSgpOworCisJZm9yICg7OykgeworCQlhc20gdm9sYXRpbGUgKCJsZDQuYy5uYyAlMD1bJTFdIiA6ICI9ciIoc2VydmUpIDogInIiKHApIDogIm1lbW9yeSIpOworCisJCWlmICghKCgoc2VydmUgPj4gVElDS0VUX1NISUZUKSBeIHRpY2tldCkgJiBUSUNLRVRfTUFTSykpCisJCQlyZXR1cm47CiAJCWNwdV9yZWxheCgpOwotCX0gd2hpbGUgKEFDQ0VTU19PTkNFKCpwKSAhPSB0dXJuKTsKKwl9CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3NwaW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spLCB0cnk7CisJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0JaWYgKCEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiAoKDFMIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSkpIHsKLQkJdHJ5ID0gdG1wICsgKDFMIDw8IFRJQ0tFVF9TSElGVCk7Ci0KLQkJcmV0dXJuIGlhNjRfY21weGNoZyhhY3EsICZsb2NrLT5sb2NrLCB0bXAsIHRyeSwgc2l6ZW9mICh0bXApKSA9PSB0bXA7Ci0JfQorCWlmICghKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spKQorCQlyZXR1cm4gaWE2NF9jbXB4Y2hnKGFjcSwgJmxvY2stPmxvY2ssIHRtcCwgdG1wICsgMSwgc2l6ZW9mICh0bXApKSA9PSB0bXA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2s7CisJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIAotCSh2b2lkKWlhNjRfZmV0Y2hhZGQoMSwgcCwgcmVsKTsKKwlhc20gdm9sYXRpbGUgKCJsZDIuYmlhcyAlMD1bJTFdIiA6ICI9ciIodG1wKSA6ICJyIihwKSk7CisJQUNDRVNTX09OQ0UoKnApID0gKHRtcCArIDIpICYgfjE7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludAkqcCA9IChpbnQgKikmbG9jay0+bG9jaywgdGlja2V0OworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHRpY2tldCkgOiAiciIocCkgOiAibWVtb3J5Iik7CisJCWlmICghKCgodGlja2V0ID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCWxvbmcgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlyZXR1cm4gISEoKCh0bXAgPj4gVElDS0VUX1NISUZUKSBeIHRtcCkgJiAoKDFMIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSk7CisJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0JcmV0dXJuICgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIC0gdG1wKSAmICgoMUwgPDwgVElDS0VUX1NISUZUKSAtIDEpKSA+IDE7CisJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQpAQCAtMTE2LDggKzEzNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQogewotCXdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkKLQkJY3B1X3JlbGF4KCk7CisJX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChsb2NrKTsKIH0KIAogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KQkJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA+PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBiNjFkMTM2Li40NzRlNDZmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNiw3ICs2LDcgQEAKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb2NrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwogfSByYXdfc3BpbmxvY2tfdDsKIAogI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2lvdGxiLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dpb3RsYi5oCmluZGV4IGRjYmFlYTcuLmYwYWNkZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3aW90bGIuaApAQCAtNCw4ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KIAotZXh0ZXJuIGludCBzd2lvdGxiX2ZvcmNlOwotCiAjaWZkZWYgQ09ORklHX1NXSU9UTEIKIGV4dGVybiBpbnQgc3dpb3RsYjsKIGV4dGVybiB2b2lkIHBjaV9zd2lvdGxiX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCBkMjg3N2E3Li40OTZhYzdhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTg4Nyw2ICs4ODcsNjAgQEAKIAltZW1jcHkoY3VycmVudC0+Y29tbSwgY29tbSwgc2l6ZW9mKGN1cnJlbnQtPmNvbW0pKTsKIH0KIAorc3RhdGljIHZvaWQKK2ZpbmlzaF9wdF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBwYWxfbWluX3N0YXRlX2FyZWFfdCAqbXMsCisJCXVuc2lnbmVkIGxvbmcgKm5hdCkKK3sKKwljb25zdCB1NjQgKmJhbms7CisKKwkvKiBJZiBpcHNyLmljIHRoZW4gdXNlIHBtc2Ffe2lpcCxpcHNyLGlmc30sIGVsc2UgdXNlCisJICogcG1zYV97eGlwLHhwc3IseGZzfQorCSAqLworCWlmIChpYTY0X3BzcihyZWdzKS0+aWMpIHsKKwkJcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfaWlwOworCQlyZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKKwkJcmVncy0+Y3JfaWZzID0gbXMtPnBtc2FfaWZzOworCX0gZWxzZSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX3hpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX3hmczsKKwl9CisJcmVncy0+cHIgPSBtcy0+cG1zYV9wcjsKKwlyZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKKwlyZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzMtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzgtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjgsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjksIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEwLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTEtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjExLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTIsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzEzLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMywgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTQtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE0LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTUsIG5hdCk7CisJaWYgKGlhNjRfcHNyKHJlZ3MpLT5ibikKKwkJYmFuayA9IG1zLT5wbXNhX2JhbmsxX2dyOworCWVsc2UKKwkJYmFuayA9IG1zLT5wbXNhX2JhbmswX2dyOworCWNvcHlfcmVnKCZiYW5rWzE2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIxLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIyLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjIsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI0LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI1LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjUsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNiwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI3LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI4LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjgsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyOSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMwLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzMxLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMzEsIG5hdCk7Cit9CisKIC8qIE9uIGVudHJ5IHRvIHRoaXMgcm91dGluZSwgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIHBlciBjcHUgc3RhY2ssIHNlZQogICogbWNhX2FzbS5oLiAgVGhlIG9yaWdpbmFsIHN0YWNrIGhhcyBub3QgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgZXZlbnQuICBTb21lIG9mCiAgKiB0aGUgb3JpZ2luYWwgc3RhY2sncyByZWdpc3RlcnMgd2lsbCBiZSBpbiB0aGUgUkJTIG9uIHRoaXMgc3RhY2suICBUaGlzIHN0YWNrCkBAIC05MjEsNyArOTc1LDYgQEAKIAl1NjQgcjEyID0gbXMtPnBtc2FfZ3JbMTItMV0sIHIxMyA9IG1zLT5wbXNhX2dyWzEzLTFdOwogCXU2NCBhcl9ic3BzdG9yZSA9IHJlZ3MtPmFyX2JzcHN0b3JlOwogCXU2NCBhcl9ic3AgPSByZWdzLT5hcl9ic3BzdG9yZSArIChsb2FkcnMgPj4gMTYpOwotCWNvbnN0IHU2NCAqYmFuazsKIAljb25zdCBjaGFyICptc2c7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMTAyNCw1NCArMTA3Nyw5IEBACiAJcCA9IChjaGFyICopcjEyIC0gc2l6ZW9mKCpyZWdzKTsKIAlvbGRfcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKXA7CiAJbWVtY3B5KG9sZF9yZWdzLCByZWdzLCBzaXplb2YoKnJlZ3MpKTsKLQkvKiBJZiBpcHNyLmljIHRoZW4gdXNlIHBtc2Ffe2lpcCxpcHNyLGlmc30sIGVsc2UgdXNlCi0JICogcG1zYV97eGlwLHhwc3IseGZzfQotCSAqLwotCWlmIChpYTY0X3BzcihyZWdzKS0+aWMpIHsKLQkJb2xkX3JlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKLQkJb2xkX3JlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV9pcHNyOwotCQlvbGRfcmVncy0+Y3JfaWZzID0gbXMtPnBtc2FfaWZzOwotCX0gZWxzZSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfeHBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX3hmczsKLQl9Ci0Jb2xkX3JlZ3MtPnByID0gbXMtPnBtc2FfcHI7Ci0Jb2xkX3JlZ3MtPmIwID0gbXMtPnBtc2FfYnIwOwogCW9sZF9yZWdzLT5sb2FkcnMgPSBsb2FkcnM7Ci0Jb2xkX3JlZ3MtPmFyX3JzYyA9IG1zLT5wbXNhX3JzYzsKIAlvbGRfdW5hdCA9IG9sZF9yZWdzLT5hcl91bmF0OwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzMtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEwLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzEzLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzE1LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTUsICZvbGRfdW5hdCk7Ci0JaWYgKGlhNjRfcHNyKG9sZF9yZWdzKS0+Ym4pCi0JCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKLQllbHNlCi0JCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKLQljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxNiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxNywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIxOSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syMy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNiwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syNy0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyNywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyOCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1syOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyOSwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1szMC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzMCwgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIzMSwgJm9sZF91bmF0KTsKKwlmaW5pc2hfcHRfcmVncyhvbGRfcmVncywgbXMsICZvbGRfdW5hdCk7CiAKIAkvKiBOZXh0IHN0YWNrIGEgc3RydWN0IHN3aXRjaF9zdGFjay4gIG1jYV9hc20uUyBidWlsdCBhIHBhcnRpYWwKIAkgKiBzd2l0Y2hfc3RhY2ssIGNvcHkgaXQgYW5kIGZpbGwgaW4gdGhlIGJsYW5rcyB1c2luZyBwdF9yZWdzIGFuZApAQCAtMTE0MSw2ICsxMTQ5LDggQEAKIG5vX21vZDoKIAltcHJpbnRrKEtFUk5fSU5GTyAiY3B1ICVkLCAlcyAlcywgb3JpZ2luYWwgc3RhY2sgbm90IG1vZGlmaWVkXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCB0eXBlLCBtc2cpOworCW9sZF91bmF0ID0gcmVncy0+YXJfdW5hdDsKKwlmaW5pc2hfcHRfcmVncyhyZWdzLCBtcywgJm9sZF91bmF0KTsKIAlyZXR1cm4gcHJldmlvdXNfY3VycmVudDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IDI4NWFhZTguLjUzMjkyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTQxLDcgKzQxLDcgQEAKIHZvaWQgX19pbml0IHN3aW90bGJfZG1hX2luaXQodm9pZCkKIHsKIAlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29wczsKLQlzd2lvdGxiX2luaXQoKTsKKwlzd2lvdGxiX2luaXQoMSk7CiB9CiAKIHZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKQEAgLTUxLDcgKzUxLDcgQEAKIAkJc3dpb3RsYiA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFJlLWluaXRpYWxpemUgbWFjaGluZSB2ZWN0b3IuXG4iKTsKIAkJbWFjaHZlY19pbml0KCJkaWciKTsKLQkJc3dpb3RsYl9pbml0KCk7CisJCXN3aW90bGJfaW5pdCgxKTsKIAkJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CiAjZWxzZQogCQlwYW5pYygiVW5hYmxlIHRvIGZpbmQgSW50ZWwgSU9NTVUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDZkYjA4NTkuLjc3NmRkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNjAsNyArNjAsNiBAQAogICovCiBpbnQgbm9fdW5hbGlnbmVkX3dhcm5pbmc7CiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7Ci1zdGF0aWMgaW50IG5vcHJpbnRfd2FybmluZzsKIAogLyoKICAqIEZvciBNLXVuaXQ6CkBAIC0xMzU3LDkgKzEzNTYsOCBAQAogCQkJLyogd2F0Y2ggZm9yIGNvbW1hbmQgbmFtZXMgY29udGFpbmluZyAlcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogCQl9IGVsc2UgewotCQkJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nICYmICFub3ByaW50X3dhcm5pbmcpIHsKLQkJCQlub3ByaW50X3dhcm5pbmcgPSAxOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCisJCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCiAJCQkJICAgICAgICJ1bmFsaWduZWQgZXhjZXB0aW9uIHdoaWNoIHJlcXVpcmVkXG4iCiAJCQkJICAgICAgICJrZXJuZWwgYXNzaXN0YW5jZSwgd2hpY2ggZGVncmFkZXMgIgogCQkJCSAgICAgICAidGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBmNDI2ZGM3Li5lZTA5ZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0xMDAsMjQgKzEwMCwzNiBAQAogICogdGhpcyBwcmltaXRpdmUgaXQgY2FuIGJlIG1vdmVkIHVwIHRvIGEgc3BpbmFwaG9yZS5oIGhlYWRlci4KICAqLwogc3RydWN0IHNwaW5hcGhvcmUgewotCWF0b21pY190CWN1cjsKKwl1bnNpZ25lZCBsb25nCXRpY2tldDsKKwl1bnNpZ25lZCBsb25nCXNlcnZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCiB7Ci0JYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKKwlzcy0+dGlja2V0ID0gMDsKKwlzcy0+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQuLjMwOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTE5LDcgKzExOSw2IEBACiAgKiBBZGRpdGlvbmFsbHkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciBhbHNvIGhhcyB0byBiZQogICogcmVtb3ZlZCBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oCiAgKi8KLXN0YXRpYyB1OCB3YXJfaW1wbGVtZW50ZWQgPSAwOwogCiBzdGF0aWMgczY0IHNuX2RldmljZV9maXh1cF93YXIodTY0IG5hc2lkLCB1NjQgd2lkZ2V0LCBpbnQgZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfY29tbW9uICpjb21tb24pCkBAIC0xMjgsMTEgKzEyNyw4IEBACiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgKmRldl9lbnRyeTsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnYgPSB7MCwwLDAsMH07CiAKLQlpZiAoIXdhcl9pbXBsZW1lbnRlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgIgotCQkgICAgICAgIlBST00gZmx1c2ggV0FSXG4iKTsKLQkJd2FyX2ltcGxlbWVudGVkID0gMTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCSJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgUFJPTSBmbHVzaCBXQVJcbiIpOwogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighd2FyX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0YzdlNzQ3Li41NWFjM2M0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNzg2LDE3ICs3ODYsMTggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOX0hXUEVSRl9HRVRfT0JKX05PREU6Ci0JCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGEuYXJnIDwgMCkgeworCQlpID0gYS5hcmc7CisJCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGkgPCAwKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKChyID0gc25faHdwZXJmX2VudW1fb2JqZWN0cygmbm9iaiwgJm9ianMpKSA9PSAwKSB7Ci0JCQlpZiAoYS5hcmcgPj0gbm9iaikgeworCQkJaWYgKGkgPj0gbm9iaikgewogCQkJCXIgPSAtRUlOVkFMOwogCQkJCXZmcmVlKG9ianMpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlpZiAob2Jqc1soaSA9IGEuYXJnKV0uaWQgIT0gYS5hcmcpIHsKKwkJCWlmIChvYmpzW2ldLmlkICE9IGEuYXJnKSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5vYmo7IGkrKykgewogCQkJCQlpZiAob2Jqc1tpXS5pZCA9PSBhLmFyZykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBjNDEyMzRmLi4zYTkzMTlmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMTEsNiArMTEsOSBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCiBjb25maWcgU0JVUwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDU2MDQ4NGEuLjE3NzcxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMSBAQAogIwotIyBsaW51eC9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIyBsaW51eC9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCiAjCiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogaGVhZC5vIG1pc2MubyBcCi0JCSAgIHBpZ2d5Lm8gdm1saW51eC5sZHMKK3RhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkJICAgdm1saW51eC5iaW4ubHptYSBoZWFkLm8gbWlzYy5vIHBpZ2d5Lm8gdm1saW51eC5sZHMKIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogCkBAIC0yNyw2ICsyNywxMiBAQAogJChvYmopL3ZtbGludXguYmluLmd6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKworJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCisKIENGTEFHU19taXNjLm8gKz0gLWZwaWMKIAogaWZkZWYgQ09ORklHX01NVQpAQCAtMzcsNSArNDMsOSBAQAogCiBPQkpDT1BZRkxBR1MgKz0gLVIgLmVtcHR5X3plcm9fcGFnZQogCi0kKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi5neiBGT1JDRQorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKQk9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKQk9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKQk9IGx6bWEKKworJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZDM5NDI5Mi4uMzcwZDYwOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTksMTQwICs5LDQ5IEBACiAgKiBBZGFwdGVkIGZvciBTSCBieSBTdHVhcnQgTWVuZWZ5LCBBdWcgMTk5OQogICoKICAqIDIwMDMtMDItMTI6CVN1cHBvcnQgTTMyUiBieSBUYWtlbyBUYWthaGFzaGkKLSAqIAkJVGhpcyBpcyBiYXNlZCBvbiBhcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKICAqLwotCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCiAjZGVmaW5lIFNUQVRJQyBzdGF0aWMKIAogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbWNweQogI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7Ci0KLSNkZWZpbmUgV1NJWkUgMHg4MDAwCQkvKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgKi8KLQkJCQkvKiBhbmQgYSBwb3dlciBvZiB0d28gKi8KLQotc3RhdGljIHVjaCAqaW5idWY7CSAgICAgLyogaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07ICAgIC8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplID0gMDsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHIgPSAwOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQgPSAwOyAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04gMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6aXAgZmlsZSAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIEVOQ1JZUFRFRCAgICAweDIwIC8qIGJpdCA1IHNldDogZmlsZSBpcyBlbmNyeXB0ZWQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4QzAgLyogYml0IDYsNzogICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkgIChpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgIGZpbGxfaW5idWYodm9pZCk7Ci1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCk7CiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmlucHV0X2RhdGE7Ci1zdGF0aWMgaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0ID0gMDsKLXN0YXRpYyB1Y2ggKm91dHB1dF9kYXRhOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb3V0cHV0X3B0ciA9IDA7Ci0KICNpbmNsdWRlICJtMzJyX3Npby5jIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwogCi0jZGVmaW5lIEhFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvaW5mbGF0ZS5jIgotCi12b2lkKiBtZW1zZXQodm9pZCogcywgaW50IGMsIHNpemVfdCBuKQorI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKK3N0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewotCWludCBpOwotCWNoYXIgKnNzID0gKGNoYXIqKXM7CisJY2hhciAqc3MgPSBzOwogCi0JZm9yIChpPTA7aTxuO2krKykgc3NbaV0gPSBjOworCXdoaWxlIChuLS0pCisJICAgICAgIAkqc3MrKyA9IGM7CiAJcmV0dXJuIHM7CiB9CisjZW5kaWYKIAotdm9pZCogbWVtY3B5KHZvaWQqIF9fZGVzdCwgX19jb25zdCB2b2lkKiBfX3NyYywKLQkJCSAgICBzaXplX3QgX19uKQotewotCWludCBpOwotCWNoYXIgKmQgPSAoY2hhciAqKV9fZGVzdCwgKnMgPSAoY2hhciAqKV9fc3JjOworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCiAKLQlmb3IgKGk9MDtpPF9fbjtpKyspIGRbaV0gPSBzW2ldOwotCXJldHVybiBfX2Rlc3Q7Ci19CisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyIKKyNlbmRpZgogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQlpZiAoaW5zaXplICE9IDApIHsKLQkJZXJyb3IoInJhbiBvdXQgb2YgaW5wdXQgZGF0YSIpOwotCX0KLQotCWluYnVmID0gaW5wdXRfZGF0YTsKLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgPSAxOwotCXJldHVybiBpbmJ1ZlswXTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSB0aGUgb3V0cHV0IHdpbmRvdyB3aW5kb3dbMC4ub3V0Y250LTFdIGFuZCB1cGRhdGUgY3JjIGFuZCBieXRlc19vdXQuCi0gKiAoVXNlZCBmb3IgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9ubHkuKQotICovCi1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCkKLXsKLSAgICB1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLSAgICB1bnNpZ25lZCBuOwotICAgIHVjaCAqaW4sICpvdXQsIGNoOwotCi0gICAgaW4gPSB3aW5kb3c7Ci0gICAgb3V0ID0gJm91dHB1dF9kYXRhW291dHB1dF9wdHJdOwotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICpvdXQrKyA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOwotfQorI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCisjZW5kaWYKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKQEAgLTE1MywyMCArNjIsMjAgQEAKIAl3aGlsZSgxKTsJLyogSGFsdCAqLwogfQogCi0vKiByZXR1cm4gZGVjb21wcmVzc2VkIHNpemUgKi8KIHZvaWQKIGRlY29tcHJlc3Nfa2VybmVsKGludCBtbXVfb24sIHVuc2lnbmVkIGNoYXIgKnppbWFnZV9kYXRhLAogCQkgIHVuc2lnbmVkIGludCB6aW1hZ2VfbGVuLCB1bnNpZ25lZCBsb25nIGhlYXApCiB7CisJdW5zaWduZWQgY2hhciAqaW5wdXRfZGF0YSA9IHppbWFnZV9kYXRhOworCWludCBpbnB1dF9sZW4gPSB6aW1hZ2VfbGVuOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhOworCiAJb3V0cHV0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDAKIAkJKyAobW11X29uID8gMHg4MDAwMDAwMCA6IDApOwogCWZyZWVfbWVtX3B0ciA9IGhlYXA7Ci0JZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEhFQVBfU0laRTsKLQlpbnB1dF9kYXRhID0gemltYWdlX2RhdGE7Ci0JaW5wdXRfbGVuID0gemltYWdlX2xlbjsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgQk9PVF9IRUFQX1NJWkU7CiAKLQltYWtlY3JjKCk7Ci0JcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLiAiKTsKLQlndW56aXAoKTsKLQlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcHV0cygiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXRfZGF0YSwgTlVMTCwgZXJyb3IpOworCXB1dHMoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDhhODhmMWYuLjMxY2VmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtODA2LDcgKzgwNiw3IEBACiAKIAlpZiAobWFzayAmIH5waHlzaWRzX2NvZXJjZShwaHlzX2NwdV9wcmVzZW50X21hcCkpCiAJCUJVRygpOwotCWlmIChpcGlfbnVtID49IE5SX0lQSVMpCisJaWYgKGlwaV9udW0gPj0gTlJfSVBJUyB8fCBpcGlfbnVtIDwgMCkKIAkJQlVHKCk7CiAKIAltYXNrIDw8PSBJUElfU0hJRlQ7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IGU3ZmVlMGYxLi45Y2VkY2VmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RpbWUuYwpAQCAtNzUsNyArNzUsNyBAQAogCQljb3VudCA9IDA7CiAKIAljb3VudCA9IChsYXRjaCAtIGNvdW50KSAqIFRJQ0tfU0laRTsKLQllbGFwc2VkX3RpbWUgPSAoY291bnQgKyBsYXRjaCAvIDIpIC8gbGF0Y2g7CisJZWxhcHNlZF90aW1lID0gRElWX1JPVU5EX0NMT1NFU1QoY291bnQsIGxhdGNoKTsKIAkvKiBOT1RFOiBMQVRDSCBpcyBlcXVhbCB0byB0aGUgImludGVydmFsIiB2YWx1ZSAoPSByZWxvYWQgY291bnQpLiAqLwogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCkBAIC05Myw3ICs5Myw3IEBACiAJcF9jb3VudCA9IGNvdW50OwogCiAJY291bnQgPSAobGF0Y2ggLSBjb3VudCkgKiBUSUNLX1NJWkU7Ci0JZWxhcHNlZF90aW1lID0gKGNvdW50ICsgbGF0Y2ggLyAyKSAvIGxhdGNoOworCWVsYXBzZWRfdGltZSA9IERJVl9ST1VORF9DTE9TRVNUKGNvdW50LCBsYXRjaCk7CiAJLyogTk9URTogTEFUQ0ggaXMgZXF1YWwgdG8gdGhlICJpbnRlcnZhbCIgdmFsdWUgKD0gcmVsb2FkIGNvdW50KS4gKi8KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjMxMCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJCWJ1c19jbG9jayA9IGJvb3RfY3B1X2RhdGEuYnVzX2Nsb2NrOwogCQlkaXZpZGUgPSBib290X2NwdV9kYXRhLnRpbWVyX2RpdmlkZTsKLQkJbGF0Y2ggPSAoYnVzX2Nsb2NrL2RpdmlkZSArIEhaIC8gMikgLyBIWjsKKwkJbGF0Y2ggPSBESVZfUk9VTkRfQ0xPU0VTVChidXNfY2xvY2svZGl2aWRlLCBIWik7CiAKIAkJcHJpbnRrKCJUaW1lciBzdGFydCA6IGxhdGNoID0gJWxkXG4iLCBsYXRjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4Y2ViNjE4Li43ZGE5NGVhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00Miw2ICs0Miw4IEBACiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCiAgIEVYQ0VQVElPTl9UQUJMRSgxNikKKyAgTk9URVMKKwogICBST0RBVEEKICAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggMjlkZDg0OC4uZWNkYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTU2MSw3ICs1NjEsNyBAQAogCiBjb25maWcgTVZNRTE0N19TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE0NyBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBNVk1FMTQ3CisJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE0NwogCSAgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KQEAgLTU3NiwxNCArNTc2LDE0IEBACiAKIGNvbmZpZyBNVk1FMTYyX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTYyIHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNngKKwlkZXBlbmRzIG9uIE1WTUUxNnggJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTYyIGFuZAogCSAgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBCVk1FNjAwMF9TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgQlZNRTYwMDAgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gQlZNRTYwMDAKKwlkZXBlbmRzIG9uIEJWTUU2MDAwICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgQlZNRTQwMDAgYW5kIEJWTUU2MDAwCiAJICBib2FyZHMgZnJvbSBCVk0gTHRkLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDcwNWE3YTkuLmZkNzYyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIE1JUFMKIAlib29sCiAJZGVmYXVsdCB5CisJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgpAQCAtMzU3LDcgKzM1OCwxNCBAQAogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I0WDAwCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I1MDAwCi0Jc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJIworCSMgRGlzYWJsZSBFQVJMWV9QUklOVEsgZm9yIG5vdyBzaW5jZSBpdCBsZWFkcyB0byBvdmVyd3JpdHRlbiBwcm9tCisJIyBtZW1vcnkgZHVyaW5nIGVhcmx5IGJvb3Qgb24gc29tZSBtYWNoaW5lcy4KKwkjCisJIyBTZWUgaHR0cDovL3d3dy5saW51eC1taXBzLm9yZy9jZ2ktYmluL21lc2cuY2dpP2E9bGludXgtbWlwcyZpPTIwMDkxMTE5MTY0MDA5LkdBMTUwMzglNDBkZXByZWNhdGlvbi5jeXJpdXMuY29tCisJIyBmb3IgYSBtb3JlIGRldGFpbHMgZGlzY3Vzc2lvbgorCSMKKwkjIHNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KQEAgLTQwOSw3ICs0MTcsMTQgQEAKIAlzZWxlY3QgU0dJX0hBU19aSUxPRwogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1IxMDAwMAotCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USworCSMKKwkjIERpc2FibGUgRUFSTFlfUFJJTlRLIGZvciBub3cgc2luY2UgaXQgbGVhZHMgdG8gb3ZlcndyaXR0ZW4gcHJvbQorCSMgbWVtb3J5IGR1cmluZyBlYXJseSBib290IG9uIHNvbWUgbWFjaGluZXMuCisJIworCSMgU2VlIGh0dHA6Ly93d3cubGludXgtbWlwcy5vcmcvY2dpLWJpbi9tZXNnLmNnaT9hPWxpbnV4LW1pcHMmaT0yMDA5MTExOTE2NDAwOS5HQTE1MDM4JTQwZGVwcmVjYXRpb24uY3lyaXVzLmNvbQorCSMgZm9yIGEgbW9yZSBkZXRhaWxzIGRpc2N1c3Npb24KKwkjCisJIyBzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgogICAgICAgaGVscApAQCAtMTAxMiw5ICsxMDI3LDkgQEAKIAogY29uZmlnIE1JUFNfTDFfQ0FDSEVfU0hJRlQKIAlpbnQKLQlkZWZhdWx0ICI0IiBpZiBNQUNIX0RFQ1NUQVRJT04gfHwgTUlLUk9USUtfUkI1MzIKKwlkZWZhdWx0ICI0IiBpZiBNQUNIX0RFQ1NUQVRJT04gfHwgTUlLUk9USUtfUkI1MzIgfHwgUE1DX01TUDQyMDBfRVZBTAorCWRlZmF1bHQgIjYiIGlmIE1JUFNfQ1BVX1NDQUNIRQogCWRlZmF1bHQgIjciIGlmIFNHSV9JUDIyIHx8IFNHSV9JUDI3IHx8IFNHSV9JUDI4IHx8IFNOSV9STSB8fCBDUFVfQ0FWSVVNX09DVEVPTgotCWRlZmF1bHQgIjQiIGlmIFBNQ19NU1A0MjAwX0VWQUwKIAlkZWZhdWx0ICI1IgogCiBjb25maWcgSEFWRV9TVERfUENfU0VSSUFMX1BPUlQKQEAgLTE0MzgsNiArMTQ1Myw3IEBACiAKIGNvbmZpZyBQQUdFX1NJWkVfNEtCCiAJYm9vbCAiNGtCIgorCWRlcGVuZHMgb24gIUNQVV9MT09OR1NPTjIKIAloZWxwCiAJIFRoaXMgb3B0aW9uIHNlbGVjdCB0aGUgc3RhbmRhcmQgNGtCIExpbnV4IHBhZ2Ugc2l6ZS4gIE9uIHNvbWUKIAkgUjMwMDAtZmFtaWx5IHByb2Nlc3NvcnMgdGhpcyBpcyB0aGUgb25seSBhdmFpbGFibGUgcGFnZSBzaXplLiAgVXNpbmcKQEAgLTE3NjIsNyArMTc3OCw3IEBACiAKIGNvbmZpZyBBUkNIX0ZMQVRNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gIU5VTUEKKwlkZXBlbmRzIG9uICFOVU1BICYmICFDUFVfTE9PTkdTT04yCiAKIGNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKaW5kZXggYzg4YzgyMS4uZDY3MDkyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwpAQCAtMzU0LDYgKzM1NCwyOCBAQAogCWF1X3N5bmMoKTsKIH0KIAorc3RhdGljIHZvaWQgYXUxeF9pYzBfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgYXUxeF9pYzFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGludCBiaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9XQUtFQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9NQVNLQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9SSVNJTkdDTFIpOworCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0ZBTExJTkdDTFIpOworCWF1X3N5bmMoKTsKK30KKwogc3RhdGljIGludCBhdTF4X2ljMV9zZXR3YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwpAQCAtMzc5LDI1ICs0MDEsMjEgQEAKIC8qCiAgKiBpcnFfY2hpcHMgZm9yIGJvdGggSUNzOyB0aGlzIHdheSB0aGUgbWFzayBoYW5kbGVycyBjYW4gYmUKICAqIGFzIHNob3J0IGFzIHBvc3NpYmxlLgotICoKLSAqIE5PVEU6IHRoZSAtPmFjaygpIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIGhhbmRsZV9lZGdlX2lycQotICoJIGZsb3doYW5kbGVyIG9ubHksIHRoZSAtPm1hc2tfYWNrKCkgb25lIGJ5IGhhbmRsZV9sZXZlbF9pcnEsCi0gKgkgc28gbm8gbmVlZCBmb3IgYW4gaXJxX2NoaXAgZm9yIGVhY2ggdHlwZSBvZiBpcnEgKGxldmVsL2VkZ2UpLgogICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMwX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMwIiwKLQkuYWNrCQk9IGF1MXhfaWMwX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMwX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMF9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzBfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMwX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGF1MXhfaWMxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkFsY2hlbXktSUMxIiwKLQkuYWNrCQk9IGF1MXhfaWMxX2FjaywJCS8qIGVkZ2UgKi8KKwkuYWNrCQk9IGF1MXhfaWMxX2FjaywKIAkubWFzawkJPSBhdTF4X2ljMV9tYXNrLAotCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2ssCS8qIGxldmVsICovCisJLm1hc2tfYWNrCT0gYXUxeF9pYzFfbWFza2FjaywKIAkudW5tYXNrCQk9IGF1MXhfaWMxX3VubWFzaywKIAkuc2V0X3R5cGUJPSBhdTF4X2ljX3NldHR5cGUsCiAJLnNldF93YWtlCT0gYXUxeF9pYzFfc2V0d2FrZSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCmluZGV4IGNjMzJjNjkuLjQ1YjYxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwpAQCAtNjksNiArNjksNyBAQAogI2Vsc2UKIAlhdV93cml0ZWwoMHhmLCBBdTE1MDBfUENJX0NGRyk7CiAjZW5kaWYKKwlib2FyZF9wY2lfaWRzZWwgPSBtdHgxX3BjaV9pZHNlbDsKICNlbmRpZgogCiAJLyogSW5pdGlhbGl6ZSBzeXNfcGluZnVuYyAqLwpAQCAtODUsOCArODYsNiBAQAogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMSwgMSk7CS8qIGdyZWVuIG9uICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEyLCAwKTsJLyogcmVkIG9mZiAqLwogCi0JYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7Ci0KIAlwcmludGsoS0VSTl9JTkZPICI0RyBTeXN0ZW1zIE1UWC0xIEJvYXJkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IGUyMjc4YzAuLjgzNWYzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogewogCXUxNiBjaGlwX2lkOwogCWludCByZXM7CisJdTMyICpib290Y3IsIHZhbDsKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0X3BvcnRbMl07CiAKQEAgLTU5NSw3ICs1OTYsMTMgQEAKIAogCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKIAotCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gKHUzMiAqKWlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19EQ0wsIDQpOworCXZhbCA9ICpib290Y3I7CisJaW91bm1hcChib290Y3IpOworCisJLyogUmVnaXN0ZXIgd2F0Y2hkb2cgb25seSBpZiBlbmFibGVkIGluIGhhcmR3YXJlICovCisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKQorCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOwogCiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCAwNzllMzNkLi5mYjI4NGMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBidWZbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgYnVmW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBHZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZnJvbSBDRkUgKi8KIAlpZiAoY2ZlX2dldGVudigiTElOVVhfQ01ETElORSIsIGJ1ZiwgQ0xfU0laRSkgPj0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQppbmRleCBjMTQ2ZDFlLi4wMDA2NGI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15CQkrPSBjbGsubyBjcHUubyBjcy5vIGdwaW8ubyBpcnEubyBwcm9tLm8gc2V0dXAubyB0aW1lci5vIFwKLQkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8KKwkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8gZGV2LXdkdC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwogCiBvYmoteQkJKz0gYm9hcmRzLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCA3OGUxNTVkLi4wNWEzNWNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2VuZXQuaD4KICNpbmNsdWRlIDxiY202M3h4X2Rldl9kc3AuaD4KICNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KLSNpbmNsdWRlIDxiY202M3h4X2Rldl91YXJ0Lmg+CiAjaW5jbHVkZSA8Ym9hcmRfYmNtOTYzeHguaD4KIAogI2RlZmluZSBQRlgJImJvYXJkX2JjbTk2M3h4OiAiCkBAIC03OTQsOCArNzkzLDYgQEAKIHsKIAl1MzIgdmFsOwogCi0JYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKCk7Ci0KIAlpZiAoYm9hcmQuaGFzX3BjY2FyZCkKIAkJYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvY3B1LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwppbmRleCA2ZGM0M2YwLi43MDM3OGJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgogI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgpAQCAtMjg0LDYgKzI4NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcCwgZXhwZWN0ZWRfY3B1X2lkOwogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogc29jIHJlZ2lzdGVycyBsb2NhdGlvbiBkZXBlbmRzIG9uIGNwdSB0eXBlICovCiAJZXhwZWN0ZWRfY3B1X2lkID0gMDsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCSAqIEJDTTYzMzggYXMgdGhlIHNhbWUgUHJJZCBhcyBCQ00zMzAyIHNlZSBhcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCiAJICovCiAJY2FzZSBDUFVfQkNNMzMwMjoKKwkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJDTTYzMzgiOwogCQlleHBlY3RlZF9jcHVfaWQgPSBCQ002MzM4X0NQVV9JRDsKIAkJYmNtNjN4eF9yZWdzX2Jhc2UgPSBiY205NjMzOF9yZWdzX2Jhc2U7CiAJCWJjbTYzeHhfaXJxcyA9IGJjbTk2MzM4X2lycXM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXVhcnQuYwppbmRleCA1ZjNkODljLi5iMDUxOTQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxiY202M3h4X2NwdS5oPgotI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3VhcnQuaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0X3Jlc291cmNlc1tdID0gewogCXsKQEAgLTM5LDMgKzM4LDQgQEAKIAl1YXJ0X3Jlc291cmNlc1sxXS5zdGFydCA9IGJjbTYzeHhfZ2V0X2lycV9udW1iZXIoSVJRX1VBUlQwKTsKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3VhcnRfZGV2aWNlKTsKIH0KK2FyY2hfaW5pdGNhbGwoYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZjNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJjbTYzeHhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eC13ZHQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3dkdF9yZWdpc3Rlcih2b2lkKQoreworCXdkdF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBiY202M3h4X3JlZ3NldF9hZGRyZXNzKFJTRVRfV0RUKTsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IHdkdF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJd2R0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9XRFRfU0laRSAtIDE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3dkdF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3dkdF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwppbmRleCBiMThhMGNhLi5kMDA1NjU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKQEAgLTc1LDcgKzc1LDkgQEAKIAkJYmNtNjM0OF9hMV9yZWJvb3QoKTsKIAogCXByaW50ayhLRVJOX0lORk8gInRyaWdnZXJpbmcgd2F0Y2hkb2cgc29mdC1yZXNldC4uLlxuIik7Ci0JYmNtX3BlcmZfd3JpdGVsKFNZU19QTExfU09GVF9SRVNFVCwgUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyA9IGJjbV9wZXJmX3JlYWRsKFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKKwlyZWcgfD0gU1lTX1BMTF9TT0ZUX1JFU0VUOworCWJjbV9wZXJmX3dyaXRlbChyZWcsIFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKIAl3aGlsZSAoMSkKIAkJOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDM4NGYxODQuLjZmMmFjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTE3LDYgKzE3LDE1IEBACiBERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOwogREVGSU5FX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOwogCitzdGF0aWMgaW50IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9TVzA7CkBAIC0xNTIsMTEgKzE2MSwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQllbjAgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwpAQCAtMTY3LDI2ICsxNzUsNTcgQEAKIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSwgZW4wKTsKLQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwlpbnQgaW5kZXg7CisJaW50IGNwdTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbmRleCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpICogMjsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0Jd3JpdGVfbG9jaygmb2N0ZW9uX2lycV9jaXUwX3J3bG9jayk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKQEAgLTIwMCwxMiArMjM5LDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwID0gewogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLApAQCAtMjY5LDExICszNDIsMTAgQEAKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKIAkJZW4xICY9IH4oMXVsbCA8PCBiaXQpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CkBAIC0yODQsMjYgKzM1Niw1OCBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQllbjEgJj0gfigxdWxsIDw8IGJpdCk7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpLCBlbjEpOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQorc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEKIAkJCQkoY29yZWlkICogMiArIDEpKTsKQEAgLTMxOCwxMiArNDIyLDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9jaygmb2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQorCisvKgorICogU2V0IGFmZmluaXR5IGZvciB0aGUgaXJxIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3sKKwlpbnQgY3B1OworCWludCBpbmRleDsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCQllbHNlCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAorLyoKKyAqIE5ld2VyIG9jdGVvbiBjaGlwcyBoYXZlIHN1cHBvcnQgZm9yIGxvY2tsZXNzIENJVSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92MiwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MSA9IHsKIAkubmFtZSA9ICJDSVUxIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZSwKQEAgLTQyMCw2ICs1NTgsOCBAQAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWludCBpcnE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAxOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFNldCB0aGUgZGVmYXVsdCBhZmZpbml0eSB0byB0aGUgYm9vdCBjcHUuICovCkBAIC00MzAsNiArNTcwLDE2IEBACiAJaWYgKE5SX0lSUVMgPCBPQ1RFT05fSVJRX0xBU1QpCiAJCXByX2Vycigib2N0ZW9uX2lycV9pbml0OiBOUl9JUlFTIGlzIHNldCB0b28gbG93XG4iKTsKIAorCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONThYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMl9YKSkgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF92MjsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjI7CisJfSBlbHNlIHsKKwkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTA7CisJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOworCX0KKwogCS8qIDAgLSAxNSByZXNlcnZlZCBmb3IgaTgyNTkgbWFzdGVyIGFuZCBzbGF2ZSBjb250cm9sbGVyLiAqLwogCiAJLyogMTcgLSAyMyBNaXBzIGludGVybmFsICovCkBAIC00NDAsMTQgKzU5MCwxMiBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTAsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9SRVNFUlZFRDE1MTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJm9jdGVvbl9pcnFfY2hpcF9jaXUxLAotCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC01MDUsMTQgKzY1MywxMCBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBpc19pcnFfZW5hYmxlZF9vbl9jcHUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgaXNzZXQ7Ci0jaWZkZWYgQ09ORklHX1NNUAotICAgICAgIGludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgaXNzZXQ7CisJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCWludCBiaXQgPSAoaXJxIDwgT0NURU9OX0lSUV9XRE9HMCkgPwotCQlpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCA6IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CisJCSAgIGlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKICAgICAgICBpZiAoaXJxIDwgNjQpIHsKIAkJaXNzZXQgPSAoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSkgJgogCQkJKDF1bGwgPDwgYml0KSkgPj4gYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCAzMmQ1MWEzLi5jMTk4ZWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtNjUsMTEgKzY1LDEyIEBACiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfTUJPWF9TRVRYKGNvcmVpZCksIGFjdGlvbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjcHVtYXNrX3QgbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fc2VuZF9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkJdW5zaWduZWQgaW50IGFjdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGksIG1hc2spCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKm1hc2spCiAJCW9jdGVvbl9zZW5kX2lwaV9zaW5nbGUoaSwgYWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCmluZGV4IGM2OTgxM2IuLjZjNmExOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3Ci0jIFdlZCBNYXIgIDQgMjM6MDg6MDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNgorIyBTdW4gTm92ICA4IDIyOjU5OjQ3IDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtOSwxNiArOSwxOCBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1NQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKQEAgLTQ1LDYgKzQ3LDcgQEAKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1RYWDk9eQogQ09ORklHX1RPU0hJQkFfUkJUWDQ5Mjc9eQogQ09ORklHX1RPU0hJQkFfUkJUWDQ5Mzg9eQpAQCAtODYsNyArODksNiBAQAogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKQEAgLTEwMSw3ICsxMDMsNyBAQAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCi0jIENPTkZJR19DUFVfTE9PTkdTT04yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTEzNyw2ICsxMzksNyBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CkBAIC0xNTQsNyArMTU3LDEwIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQpAQCAtMTc1LDYgKzE4MSw3IEBACiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTE5NCwxMSArMjAxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0yMDksOCArMjE3LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtMjIwLDI1ICsyMzIsMzUgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKLSMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTI0Niw4ICsyNjgsOCBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NCw2ICsyOTYsNyBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCiAjCkBAIC0yODgsNiArMzExLDcgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQpAQCAtMjk1LDcgKzMxOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTMxMSw2ICszMzQsNyBAQAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldApAQCAtMzM2LDYgKzM2MCw3IEBACiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0Nyw3ICszNzIsNiBAQAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC0zNjUsOSArMzg5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTM3Niw5ICs0MDAsOSBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorQ09ORklHX01URF9CTEtERVZTPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorQ09ORklHX01URF9CTE9DS19STz1tCiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CkBAIC00MTQsMTYgKzQzOCwyMCBAQAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JCVFg0OTM5PXkKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDM1LDcgKzQ2MywxNSBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD1tCisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9bQorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9UWFg5TkRGTUM9bQogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCkBAIC00NzEsNiArNTA3LDcgQEAKICMKICMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQogQ09ORklHX0lERV9USU1JTkdTPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAogQ09ORklHX0lERV9HRD15CkBAIC01MzQsOCArNTcxLDEzIEBACiAjCiAKICMKLSMgQSBuZXcgYWx0ZXJuYXRpdmUgRmlyZVdpcmUgc3RhY2sgaXMgYXZhaWxhYmxlIHdpdGggRVhQRVJJTUVOVEFMPXkKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KICMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNTc0LDYgKzYxNiw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX05FMjAwMD15CkBAIC02MDIsMTggKzY0NiwxNSBAQAogIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjUzLDYgKzY5NCw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX1RYWDk9eQpAQCAtNjY2LDcgKzcwOCw5IEBACiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTV9UWDQ5Mzk9bQogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC02ODYsNiArNzMwLDEwIEBACiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAKQEAgLTcwMSwxNyArNzQ5LDIyIEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NDAsMjggKzc5MywxNyBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtNzcyLDcgKzgxNCw0MiBAQAogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPW0KKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19UWFg5QUNMQz1tCitDT05GSUdfSEFTX1RYWDlfQUNMQz15CitDT05GSUdfU05EX1NPQ19UWFg5QUNMQ19BQzk3PW0KK0NPTkZJR19TTkRfU09DX1RYWDlBQ0xDX0dFTkVSSUM9bQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9bQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC03ODMsNiArODYwLDggQEAKICMgTEVEIGRyaXZlcnMKICMKIENPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtNzkyLDcgKzg3MSwxMiBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQpAQCAtODIwLDYgKzkwNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JTNUMzNDg9eQogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtODQwLDggKzkyNSwyNiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKIENPTkZJR19SVENfRFJWX1RYNDkzOT15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworQ09ORklHX1RYWDlfRE1BQz1tCitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKyMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODUzLDkgKzk1NiwxMCBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTg2Niw2ICs5NzAsMTAgQEAKIENPTkZJR19HRU5FUklDX0FDTD15CiAKICMKKyMgQ2FjaGVzCisjCisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC04OTAsNyArOTk4LDI3IEBACiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTkyMiw2ICsxMDUwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTI5LDExICsxMDU4LDkgQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19DTURMSU5FPSIiCkBAIC05NDYsNiArMTA3Myw3IEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC05NTksNiArMTA4NywxMCBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggNmNmMjljMi4uNTQwYzk4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9idWcuaApAQCAtMTEsOSArMTEsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fbm9yZXR1cm4gQlVHKHZvaWQpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImJyZWFrICUwIiA6IDogImkiIChCUktfQlVHKSk7Ci0JLyogRm9vbCBHQ0MgaW50byB0aGlua2luZyB0aGUgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4uICovCi0Jd2hpbGUgKDEpCi0JCTsKKwl1bnJlYWNoYWJsZSgpOwogfQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZDE2YWZkZC4uNjY0YmE1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAogdm9pZCAqZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKTsKQEAgLTczLDE0ICs3NCw0IEBACiBleHRlcm4gdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAotI2lmIDAKLSNkZWZpbmUgQVJDSF9IQVNfRE1BX0RFQ0xBUkVfQ09IRVJFTlRfTUVNT1JZCi0KLWV4dGVybiBpbnQgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKLQlkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLWV4dGVybiB2b2lkIGRtYV9yZWxlYXNlX2RlY2xhcmVkX21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgKiBkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAotCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplKTsKLSNlbmRpZgotCiAjZW5kaWYgLyogX0FTTV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggZWZlZGRjOC4uMGI4OWI4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNDgsOSArNDgsOSBAQAogI2RlZmluZSBGSVhfTl9DT0xPVVJTIDgKIAlGSVhfQ01BUF9CRUdJTiwKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpLAorCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTICogMiksCiAjZWxzZQotCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgRklYX05fQ09MT1VSUywKKwlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogMiksCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2NtcHJlZ3MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCmluZGV4IDM2ZmQ5NjkuLmMwY2Y3NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oCkBAIC0xOSwxNSArMTksMjAgQEAKICNkZWZpbmUgR0NNUF9HREJfT0ZTCQkweDgwMDAgLyogR2xvYmFsIERlYnVnIEJsb2NrICovCiAKIC8qIE9mZnNldHMgdG8gaW5kaXZpZHVhbCBHQ01QIHJlZ2lzdGVycyBmcm9tIEdDTVAgYmFzZSAqLwotI2RlZmluZSBHQ01QT0ZTKGJsb2NrLCB0YWcsIHJlZykJKEdDTVBfIyNibG9jayMjX09GUyArIEdDTVBfIyN0YWcjI18jI3JlZyMjX09GUykKKyNkZWZpbmUgR0NNUE9GUyhibG9jaywgdGFnLCByZWcpCVwKKwkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKQorI2RlZmluZSBHQ01QT0ZTbihibG9jaywgdGFnLCByZWcsIG4pIFwKKwkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKG4pKQogCiAjZGVmaW5lIEdDTVBHQ0JPRlMocmVnKQkJR0NNUE9GUyhHQ0IsIEdDQiwgcmVnKQorI2RlZmluZSBHQ01QR0NCT0ZTbihyZWcsIG4pCUdDTVBPRlNuKEdDQiwgR0NCLCByZWcsIG4pCiAjZGVmaW5lIEdDTVBDTENCT0ZTKHJlZykJR0NNUE9GUyhDTENCLCBDQ0IsIHJlZykKICNkZWZpbmUgR0NNUENPQ0JPRlMocmVnKQlHQ01QT0ZTKENPQ0IsIENDQiwgcmVnKQogI2RlZmluZSBHQ01QR0RCT0ZTKHJlZykJCUdDTVBPRlMoR0RCLCBHREIsIHJlZykKIAogLyogR0NNUCByZWdpc3RlciBhY2Nlc3MgKi8KICNkZWZpbmUgR0NNUEdDQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0NCT0ZTKHJlZykpCisjZGVmaW5lIEdDTVBHQ0JuKHJlZywgbikgICAgICAgICAgICAgICBSRUdQKF9nY21wX2Jhc2UsIEdDTVBHQ0JPRlNuKHJlZywgbikpCiAjZGVmaW5lIEdDTVBDTENCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBDTENCT0ZTKHJlZykpCiAjZGVmaW5lIEdDTVBDT0NCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBDT0NCT0ZTKHJlZykpCiAjZGVmaW5lIEdDTVBHREIocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUEdEQk9GUyhyZWcpKQpAQCAtNDksMTAgKzU0LDEwIEBACiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9HQ01QQkFTRV9NU0sJR0NNUEdDQk1TSyhHQ01QQl9HQ01QQkFTRSwgMTcpCiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9TSEYJMAogI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTVNLCUdDTVBHQ0JNU0soR0NNUEJfQ01ERUZUR1QsIDIpCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0JMAotI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfTUVNMQkxCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMSAyCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMiAzCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9ESVNBQkxFRAkwCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0JCTEKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxCQkyCisjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMgkJMwogI2RlZmluZSBHQ01QX0dDQl9DQ01DX09GUwkJMHgwMDEwCS8qIEdsb2JhbCBDTSBDb250cm9sICovCiAjZGVmaW5lIEdDTVBfR0NCX0dDU1JBUF9PRlMJCTB4MDAyMAkvKiBHbG9iYWwgQ1NSIEFjY2VzcyBQcml2aWxlZ2UgKi8KICNkZWZpbmUgIEdDTVBfR0NCX0dDU1JBUF9DTUFDQ0VTU19TSEYJMApAQCAtMTE1LDUgKzEyMCw2IEBACiAjZGVmaW5lIEdDTVBfQ0NCX0RCR0dST1VQX09GUwkJMHgwMTAwCQkvKiBEZWJ1Z0JyZWFrIEdyb3VwICovCiAKIGV4dGVybiBpbnQgX19pbml0IGdjbXBfcHJvYmUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci0KK2V4dGVybiBpbnQgX19pbml0IGdjbXBfbmlvY3Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgZ2NtcF9zZXRyZWdpb24oaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQpOwogI2VuZGlmIC8qIF9BU01fR0NNUFJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCmluZGV4IGE4ZjU3MzQuLjliOTQzNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUgX0FTTV9HSUNSRUdTX0gKIAogI3VuZGVmCUdJQ0lTQllURUxJVFRMRUVORElBTgotI2RlZmluZSBHSUNJU1dPUkRMSVRUTEVFTkRJQU4KIAogLyogQ29uc3RhbnRzICovCiAjZGVmaW5lIEdJQ19QT0xfUE9TCQkJMQpAQCAtMjAsMTEgKzE5LDcgQEAKICNkZWZpbmUgR0lDX1RSSUdfRURHRQkJCTEKICNkZWZpbmUgR0lDX1RSSUdfTEVWRUwJCQkwCiAKLSNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIEdJQ19OVU1fSU5UUlMJCQkoMjQgKyBOUl9DUFVTICogMikKLSNlbHNlCi0jZGVmaW5lIEdJQ19OVU1fSU5UUlMJCQkzMgotI2VuZGlmCiAKICNkZWZpbmUgTVNLKG4pICgoMSA8PCAobikpIC0gMSkKICNkZWZpbmUgUkVHMzIoYWRkcikJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoYWRkcikpCkBAIC03MCwxMyArNjUsMTMgQEAKICNkZWZpbmUgVVNNX1ZJU0lCTEVfU0VDVElPTl9TSVpFCTB4MTAwMDAKIAogLyogUmVnaXN0ZXIgTWFwIGZvciBTaGFyZWQgU2VjdGlvbiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKEdJQ0lTV09SRExJVFRMRUVORElBTikKIAogI2RlZmluZQlHSUNfU0hfQ09ORklHX09GUwkJMHgwMDAwCiAKIC8qIFNoYXJlZCBHbG9iYWwgQ291bnRlciAqLwogI2RlZmluZSBHSUNfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDEwCiAjZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMTQKKyNkZWZpbmUgR0lDX1NIX1JFVklTSU9OSURfT0ZTCQkweDAwMjAKIAogLyogSW50ZXJydXB0IFBvbGFyaXR5ICovCiAjZGVmaW5lIEdJQ19TSF9QT0xfMzFfMF9PRlMJCTB4MDEwMApAQCAtMTY0LDI0ICsxNTksMzEgQEAKIAkoR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUyArICgzMiAqIChpbnRyKSkgKyAoKCh2cGUpIC8gMzIpICogNCkpCiAjZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19CSVQodnBlKQkoMSA8PCAoKHZwZSkgJSAzMikpCiAKKy8qIENvbnZlcnQgYW4gaW50ZXJydXB0IG51bWJlciB0byBhIGJ5dGUgb2Zmc2V0L2JpdCBmb3IgbXVsdGktd29yZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0lDX0lOVFJfT0ZTKGludHIpICgoKGludHIpIC8gMzIpKjQpCisjZGVmaW5lIEdJQ19JTlRSX0JJVChpbnRyKSAoKGludHIpICUgMzIpCisKIC8qIFBvbGFyaXR5IDogUmVzZXQgVmFsdWUgaXMgYWx3YXlzIDAgKi8KICNkZWZpbmUgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMJCTB4MDEwMAogI2RlZmluZSBHSUNfU0VUX1BPTEFSSVRZKGludHIsIHBvbCkgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAocG9sKSA8PCAoKGludHIpICUgMzIpKQorCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgKHBvbCkgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBUcmlnZ2VyaW5nIDogUmVzZXQgVmFsdWUgaXMgYWx3YXlzIDAgKi8KICNkZWZpbmUgR0lDX1NIX1NFVF9UUklHR0VSX09GUwkJMHgwMTgwCiAjZGVmaW5lIEdJQ19TRVRfVFJJR0dFUihpbnRyLCB0cmlnKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKHRyaWcpIDw8ICgoaW50cikgJSAzMikpCisJR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksICh0cmlnKSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIE1hc2sgbWFuaXB1bGF0aW9uICovCiAjZGVmaW5lIEdJQ19TSF9TTUFTS19PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQorI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyKSBcCisJR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NNQVNLX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgMSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAjZGVmaW5lIEdJQ19TSF9STUFTS19PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfUk1BU0tfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKKyNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50cikgXAorCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyBcCisJCUdJQ19JTlRSX09GUyhpbnRyKSksIDEgPDwgR0lDX0lOVFJfQklUKGludHIpKQogCiAvKiBSZWdpc3RlciBNYXAgZm9yIExvY2FsIFNlY3Rpb24gKi8KICNkZWZpbmUgR0lDX1ZQRV9DVExfT0ZTCQkJMHgwMDAwCkBAIC0yMTksMTYxICsyMjEsNiBAQAogI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfMzFfMDBfT0ZTCTB4MDAwMAogI2RlZmluZSBHSUNfVU1WX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAwNAogCi0jZWxzZSAvKiBDT05GSUdfQ1BVX0JJR19FTkRJQU4gKi8KLQotI2RlZmluZQlHSUNfU0hfQ09ORklHX09GUwkJMHgwMDAwCi0KLS8qIFNoYXJlZCBHbG9iYWwgQ291bnRlciAqLwotI2RlZmluZSBHSUNfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDE0Ci0jZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMTAKLQotLyogSW50ZXJydXB0IFBvbGFyaXR5ICovCi0jZGVmaW5lIEdJQ19TSF9QT0xfMzFfMF9PRlMJCTB4MDEwNAotI2RlZmluZSBHSUNfU0hfUE9MXzYzXzMyX09GUwkJMHgwMTAwCi0jZGVmaW5lIEdJQ19TSF9QT0xfOTVfNjRfT0ZTCQkweDAxMGMKLSNkZWZpbmUgR0lDX1NIX1BPTF8xMjdfOTZfT0ZTCQkweDAxMDgKLSNkZWZpbmUgR0lDX1NIX1BPTF8xNTlfMTI4X09GUwkJMHgwMTE0Ci0jZGVmaW5lIEdJQ19TSF9QT0xfMTkxXzE2MF9PRlMJCTB4MDExMAotI2RlZmluZSBHSUNfU0hfUE9MXzIyM18xOTJfT0ZTCQkweDAxMWMKLSNkZWZpbmUgR0lDX1NIX1BPTF8yNTVfMjI0X09GUwkJMHgwMTE4Ci0KLS8qIEVkZ2UvTGV2ZWwgVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfVFJJR18zMV8wX09GUwkJMHgwMTg0Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzYzXzMyX09GUwkJMHgwMTgwCi0jZGVmaW5lIEdJQ19TSF9UUklHXzk1XzY0X09GUwkJMHgwMThjCi0jZGVmaW5lIEdJQ19TSF9UUklHXzEyN185Nl9PRlMJCTB4MDE4OAotI2RlZmluZSBHSUNfU0hfVFJJR18xNTlfMTI4X09GUwkJMHgwMTk0Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzE5MV8xNjBfT0ZTCQkweDAxOTAKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMjIzXzE5Ml9PRlMJCTB4MDE5YwotI2RlZmluZSBHSUNfU0hfVFJJR18yNTVfMjI0X09GUwkJMHgwMTk4Ci0KLS8qIER1YWwgRWRnZSBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzMxXzBfT0ZTCQkweDAyMDQKLSNkZWZpbmUgR0lDX1NIX0RVQUxfNjNfMzJfT0ZTCQkweDAyMDAKLSNkZWZpbmUgR0lDX1NIX0RVQUxfOTVfNjRfT0ZTCQkweDAyMGMKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTI3Xzk2X09GUwkJMHgwMjA4Ci0jZGVmaW5lIEdJQ19TSF9EVUFMXzE1OV8xMjhfT0ZTCQkweDAyMTQKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTkxXzE2MF9PRlMJCTB4MDIxMAotI2RlZmluZSBHSUNfU0hfRFVBTF8yMjNfMTkyX09GUwkJMHgwMjFjCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzI1NV8yMjRfT0ZTCQkweDAyMTgKLQotLyogU2V0L0NsZWFyIGNvcnJlc3BvbmRpbmcgYml0IGluIEVkZ2UgRGV0ZWN0IFJlZ2lzdGVyICovCi0jZGVmaW5lIEdJQ19TSF9XRURHRV9PRlMJCTB4MDI4MAotCi0vKiBSZXNldCBNYXNrIC0gRGlzYWJsZXMgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdJQ19TSF9STUFTS18zMV8wX09GUwkJMHgwMzA0Ci0jZGVmaW5lIEdJQ19TSF9STUFTS182M18zMl9PRlMJCTB4MDMwMAotI2RlZmluZSBHSUNfU0hfUk1BU0tfOTVfNjRfT0ZTCQkweDAzMGMKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzEyN185Nl9PRlMJCTB4MDMwOAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTU5XzEyOF9PRlMJMHgwMzE0Ci0jZGVmaW5lIEdJQ19TSF9STUFTS18xOTFfMTYwX09GUwkweDAzMTAKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzIyM18xOTJfT0ZTCTB4MDMxYwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMjU1XzIyNF9PRlMJMHgwMzE4Ci0KLS8qIFNldCBNYXNrIChXTykgLSBFbmFibGVzIEludGVycnVwdCAqLwotI2RlZmluZSBHSUNfU0hfU01BU0tfMzFfMF9PRlMJCTB4MDM4NAotI2RlZmluZSBHSUNfU0hfU01BU0tfNjNfMzJfT0ZTCQkweDAzODAKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzk1XzY0X09GUwkJMHgwMzhjCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18xMjdfOTZfT0ZTCQkweDAzODgKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzE1OV8xMjhfT0ZTCTB4MDM5NAotI2RlZmluZSBHSUNfU0hfU01BU0tfMTkxXzE2MF9PRlMJMHgwMzkwCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18yMjNfMTkyX09GUwkweDAzOWMKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzI1NV8yMjRfT0ZTCTB4MDM5OAotCi0vKiBHbG9iYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKFJPKSAtIEJpdCBTZXQgPT0gSW50ZXJydXB0IGVuYWJsZWQgKi8KLSNkZWZpbmUgR0lDX1NIX01BU0tfMzFfMF9PRlMJCTB4MDQwNAotI2RlZmluZSBHSUNfU0hfTUFTS182M18zMl9PRlMJCTB4MDQwMAotI2RlZmluZSBHSUNfU0hfTUFTS185NV82NF9PRlMJCTB4MDQwYwotI2RlZmluZSBHSUNfU0hfTUFTS18xMjdfOTZfT0ZTCQkweDA0MDgKLSNkZWZpbmUgR0lDX1NIX01BU0tfMTU5XzEyOF9PRlMJCTB4MDQxNAotI2RlZmluZSBHSUNfU0hfTUFTS18xOTFfMTYwX09GUwkJMHgwNDEwCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzIyM18xOTJfT0ZTCQkweDA0MWMKLSNkZWZpbmUgR0lDX1NIX01BU0tfMjU1XzIyNF9PRlMJCTB4MDQxOAotCi0vKiBQZW5kaW5nIEdsb2JhbCBJbnRlcnJ1cHRzIChSTykgKi8KLSNkZWZpbmUgR0lDX1NIX1BFTkRfMzFfMF9PRlMJCTB4MDQ4NAotI2RlZmluZSBHSUNfU0hfUEVORF82M18zMl9PRlMJCTB4MDQ4MAotI2RlZmluZSBHSUNfU0hfUEVORF85NV82NF9PRlMJCTB4MDQ4YwotI2RlZmluZSBHSUNfU0hfUEVORF8xMjdfOTZfT0ZTCQkweDA0ODgKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMTU5XzEyOF9PRlMJCTB4MDQ5NAotI2RlZmluZSBHSUNfU0hfUEVORF8xOTFfMTYwX09GUwkJMHgwNDkwCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzIyM18xOTJfT0ZTCQkweDA0OWMKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMjU1XzIyNF9PRlMJCTB4MDQ5OAotCi0jZGVmaW5lIEdJQ19TSF9JTlRSX01BUF9UT19QSU5fQkFTRV9PRlMJMHgwNTAwCi0KLS8qIE1hcHMgSW50ZXJydXB0IFggdG8gYSBQaW4gKi8KLSNkZWZpbmUgR0lDX1NIX01BUF9UT19QSU4oaW50cikgXAotCShHSUNfU0hfSU5UUl9NQVBfVE9fUElOX0JBU0VfT0ZTICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTCTB4MjAwNAotCi0vKgotICogTWFwcyBJbnRlcnJ1cHQgWCB0byBhIFZQRS4gIFRoaXMgaXMgbW9yZSBjb21wbGV4IHRoYW4gdGhlIExFIGNhc2UsIGFzCi0gKiBvZGQgYW5kIGV2ZW4gcmVnaXN0ZXJzIG5lZWQgdG8gYmUgdHJhbnNwb3NlZC4gIEl0IGRvZXMgd29yayAtIHRydXN0IG1lIQotICovCi0jZGVmaW5lIEdJQ19TSF9NQVBfVE9fVlBFX1JFR19PRkYoaW50ciwgdnBlKSBcCi0JKEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMgKyAoMzIgKiAoaW50cikpICsgXAotCSgoKCgodnBlKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSkKLSNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX0JJVCh2cGUpCSgxIDw8ICgodnBlKSAlIDMyKSkKLQotLyogUG9sYXJpdHkgKi8KLSNkZWZpbmUgR0lDX1NIX1NFVF9QT0xBUklUWV9PRlMJCTB4MDEwMAotI2RlZmluZSBHSUNfU0VUX1BPTEFSSVRZKGludHIsIHBvbCkgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKHBvbCkgPDwgKChpbnRyKSAlIDMyKSkKLQotLyogVHJpZ2dlcmluZyAqLwotI2RlZmluZSBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTCQkweDAxODAKLSNkZWZpbmUgR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWcpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKHRyaWcpIDw8ICgoaW50cikgJSAzMikpCi0KLS8qIE1hc2sgbWFuaXB1bGF0aW9uICovCi0jZGVmaW5lIEdJQ19TSF9TTUFTS19PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0VUX0lOVFJfTUFTSyhpbnRyLCB2YWwpIFwKLQlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAoKHZhbCkgPDwgKChpbnRyKSAlIDMyKSkpCi0KLSNkZWZpbmUgR0lDX1NIX1JNQVNLX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQotLyogUmVnaXN0ZXIgTWFwIGZvciBMb2NhbCBTZWN0aW9uICovCi0jZGVmaW5lIEdJQ19WUEVfQ1RMX09GUwkJCTB4MDAwMAotI2RlZmluZSBHSUNfVlBFX1BFTkRfT0ZTCQkweDAwMDQKLSNkZWZpbmUgR0lDX1ZQRV9NQVNLX09GUwkJMHgwMDA4Ci0jZGVmaW5lIEdJQ19WUEVfUk1BU0tfT0ZTCQkweDAwMGMKLSNkZWZpbmUgR0lDX1ZQRV9TTUFTS19PRlMJCTB4MDAxMAotI2RlZmluZSBHSUNfVlBFX1dEX01BUF9PRlMJCTB4MDA0MAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfTUFQX09GUwkJMHgwMDQ0Ci0jZGVmaW5lIEdJQ19WUEVfVElNRVJfTUFQX09GUwkJMHgwMDQ4Ci0jZGVmaW5lIEdJQ19WUEVfUEVSRkNUUl9NQVBfT0ZTCQkweDAwNTAKLSNkZWZpbmUgR0lDX1ZQRV9TV0lOVDBfTUFQX09GUwkJMHgwMDU0Ci0jZGVmaW5lIEdJQ19WUEVfU1dJTlQxX01BUF9PRlMJCTB4MDA1OAotI2RlZmluZSBHSUNfVlBFX09USEVSX0FERFJfT0ZTCQkweDAwODAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9DT05GSUcwX09GUwkJMHgwMDkwCi0jZGVmaW5lIEdJQ19WUEVfV0RfQ09VTlQwX09GUwkJMHgwMDk0Ci0jZGVmaW5lIEdJQ19WUEVfV0RfSU5JVElBTDBfT0ZTCQkweDAwOTgKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX0xPX09GUwkJMHgwMGE0Ci0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9ISV9PRlMJCTB4MDBhMAotCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1NIQURPV19TRVRfQkFTRQkweDAxMDAKLSNkZWZpbmUgR0lDX1ZQRV9FSUNfU1MoaW50cikgXAotCShHSUNfRUlDX1NIQURPV19TRVRfQkFTRSArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1ZQRV9FSUNfVkVDX0JBU0UJCTB4MDgwMAotI2RlZmluZSBHSUNfVlBFX0VJQ19WRUMoaW50cikgXAotCShHSUNfVlBFX0VJQ19WRUNfQkFTRSArICg0ICogaW50cikpCi0KLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX05NSV9PRlMJCTB4MTAwMAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfWVFfT0ZTCQkweDEwMDQKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX0lOVF8zMV8wX09GUwkweDEwODAKLSNkZWZpbmUgR0lDX1ZQRV9URU5BQkxFX0lOVF82M18zMl9PRlMJMHgxMDg0Ci0KLS8qIFVzZXIgTW9kZSBWaXNpYmxlIFNlY3Rpb24gUmVnaXN0ZXIgTWFwICovCi0jZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDA0Ci0jZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDAwCi0KLSNlbmRpZiAvKiAhTEUgKi8KLQogLyogTWFza3MgKi8KICNkZWZpbmUgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfU0hGCTI4CiAjZGVmaW5lIEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX01TSwkoTVNLKDEpIDw8IEdJQ19TSF9DT05GSUdfQ09VTlRTVE9QX1NIRikKQEAgLTQ3MywxMiArMzIwLDEzIEBACiAgKiBpbiBidWlsZGluZyBpcGlfbWFwLgogICovCiBzdHJ1Y3QgZ2ljX2ludHJfbWFwIHsKLQl1bnNpZ25lZCBpbnQgaW50cm51bTsgCS8qIEV4dCBJbnRyIE51bSAJKi8KIAl1bnNpZ25lZCBpbnQgY3B1bnVtOwkvKiBEaXJlY3RlZCB0byB0aGlzIENQVSAqLwogCXVuc2lnbmVkIGludCBwaW47CS8qIERpcmVjdGVkIHRvIHRoaXMgUGluICovCiAJdW5zaWduZWQgaW50IHBvbGFyaXR5OwkvKiBQb2xhcml0eSA6ICsvLQkqLwogCXVuc2lnbmVkIGludCB0cmlndHlwZTsJLyogVHJpZ2dlciAgOiBFZGdlL0xldmwgKi8KLQl1bnNpZ25lZCBpbnQgaXBpZmxhZzsJLyogSXMgdXNlZCBmb3IgSVBJID8JKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIE1pc2MgZmxhZ3MJKi8KKyNkZWZpbmUgR0lDX0ZMQUdfSVBJICAgICAgICAgICAweDAxCisjZGVmaW5lIEdJQ19GTEFHX1RSQU5TUEFSRU5UICAgMHgwMgogfTsKIAogZXh0ZXJuIHZvaWQgZ2ljX2luaXQodW5zaWduZWQgbG9uZyBnaWNfYmFzZV9hZGRyLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCmluZGV4IGRlNzE2OTQuLjIxY2JiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKQEAgLTc4LDYgKzc4LDkgQEAKICNkZWZpbmUgQVI3X1JFRl9DTE9DSwkyNTAwMDAwMAogI2RlZmluZSBBUjdfWFRBTF9DTE9DSwkyNDAwMDAwMAogCisvKiBEQ0wgKi8KKyNkZWZpbmUgQVI3X1dEVF9IV19FTkEJMHgxMAorCiBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIHsKIAlpbnQgcmVzZXRfYml0OwogCWludCBwb3dlcl9iaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCmluZGV4IGZlZWEwMDEuLjkxNTk1ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogCWlmICgoZ3BpbyA+PSA4KSAmJiAoZ3BpbyA8PSAxNSkpCiAJCXJldHVybiBNQUtFX0lSUSgwLCAyOSk7CQkvKiBzaGFyZWQgR1BJTzIwOF8yMTUgKi8KKworCXJldHVybiAtRU5YSU87CiB9CiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTEwMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl91YXJ0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3VhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNDhmNS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3VhcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBCQ002M1hYX0RFVl9VQVJUX0hfCi0jZGVmaW5lIEJDTTYzWFhfREVWX1VBUlRfSF8KLQotaW50IGJjbTYzeHhfdWFydF9yZWdpc3Rlcih2b2lkKTsKLQotI2VuZGlmIC8qIEJDTTYzWFhfREVWX1VBUlRfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaAppbmRleCBmNjgzNzQyLi4wOWE1OWJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCkBAIC00NCw4ICs0NCw4IEBACiAJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKIAkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAogCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCi0JLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAotCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKKwkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRSB8CVwKKwkJCQkgIFNEX0JBTEFOQ0VfRVhFQywJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAogCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBjZTViNmUyNy4uOTk0N2U1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMAogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCiAjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQotI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJMQorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJKFBBR0VfU0laRSA8IDB4NDAwMCkKICNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAogI2RlZmluZSBjcHVfaGFzX2RzcAkJMAogI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkwCkBAIC01NCw2ICs1NCw1IEBACiAjZGVmaW5lIGNwdV9oYXNfdmNlCQkwCiAjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAogI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkxCi0jZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkxCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0xPT05HU09OX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCBhMjI1MGYzLi5jODkyYmZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTc1LDYgKzc1LDcgQEAKIAogI2RlZmluZSBNQURWX01FUkdFQUJMRSAgIDEyCQkvKiBLU00gbWF5IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqLwogI2RlZmluZSBNQURWX1VOTUVSR0VBQkxFIDEzCQkvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KKyNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAxMDAJCS8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi8KIAogLyogY29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBNQVBfRklMRQkwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGQ5NzQzNTMuLjYwODNkYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KQEAgLTM2LDExICszNywxMyBAQAogI2lmZGVmIENPTkZJR18zMkJJVAogI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKQkJCQkJCVwKIAl3cml0ZV9jMF9jb250ZXh0KCh1bnNpZ25lZCBsb25nKSBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMjUpOwlcCisJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwkJCQkJXAogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQKCkJCQkJCQlcCiAJd3JpdGVfYzBfY29udGV4dCgodW5zaWduZWQgbG9uZykgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDI2KTsJXAorCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsJCQkJCVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQogI2VuZGlmCiAKQEAgLTE2NSwxMiArMTY4LDEyIEBACiAJICogaGF2aW5nIEFTSURfTUFTSyBzbWFsbGVyIHRoYW4gdGhlIGhhcmR3YXJlIG1heGltdW0sCiAJICogbWFrZSBzdXJlIG5vICJzb2Z0IiBiaXRzIGJlY29tZSAiaGFyZCIuLi4KIAkgKi8KLQl3cml0ZV9jMF9lbnRyeWhpKChyZWFkX2MwX2VudHJ5aGkoKSAmIH5IV19BU0lEX01BU0spCi0JCQl8IChjcHVfY29udGV4dChjcHUsIG5leHQpICYgQVNJRF9NQVNLKSk7CisJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKSB8CisJCQkgY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCiAJZXZwZShtdGZsYWdzKTsKICNlbHNlCi0Jd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKwl3cml0ZV9jMF9lbnRyeWhpKGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKG5leHQtPnBnZCk7CiAKQEAgLTIyNiwxMSArMjI5LDExIEBACiAJfQogCS8qIFNlZSBjb21tZW50cyBmb3Igc2ltaWxhciBjb2RlIGFib3ZlICovCiAJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKSB8Ci0JICAgICAgICAgICAgICAgICAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCSAgICAgICAgICAgICAgICAgY3B1X2FzaWQoY3B1LCBuZXh0KSk7CiAJZWhiKCk7IC8qIE1ha2Ugc3VyZSBpdCBwcm9wYWdhdGVzIHRvIFRDU3RhdHVzICovCiAJZXZwZShtdGZsYWdzKTsKICNlbHNlCi0Jd3JpdGVfYzBfZW50cnloaShjcHVfY29udGV4dChjcHUsIG5leHQpKTsKKwl3cml0ZV9jMF9lbnRyeWhpKGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKG5leHQtPnBnZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZTYwMGNlZC4uNTA1MTFhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9NSVBTX1NFVFVQX0gKICNkZWZpbmUgX01JUFNfU0VUVVBfSAogCi0jZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTI1NgorI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk0MDk2CiAKICNpZmRlZiAgX19LRVJORUxfXwogZXh0ZXJuIHZvaWQgc2V0dXBfZWFybHlfcHJpbnRrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAppbmRleCA4Y2U1MTc1Li4xNTI3OGRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaApAQCAtNDUsNiArNDUsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3Qgc210Y19pcGkgKnRhaWw7CiAJaW50IGRlcHRoOworCWludCByZXNjaGVkX2ZsYWc7CS8qIHJlc2NoZWR1bGUgYWxyZWFkeSBxdWV1ZWQgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2lwaV9ucShzdHJ1Y3Qgc210Y19pcGlfcSAqcSwgc3RydWN0IHNtdGNfaXBpICpwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3ByYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg5MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTUlQU19TUFJBTV9ICisjZGVmaW5lIF9NSVBTX1NQUkFNX0gKKworI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCitleHRlcm4gX19pbml0IHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcHJhbV9jb25maWcodm9pZCkgeyB9OworI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCisKKyNlbmRpZiAvKiBfTUlQU19TUFJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggZmNmNWY5OC4uODNiNTUwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9BU01fU1lTVEVNX0gKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIApAQCAtMTkzLDEwICsxOTQsNiBAQAogI2RlZmluZSBfX3hjaGdfdTY0IF9feGNoZ191NjRfdW5zdXBwb3J0ZWRfb25fMzJiaXRfa2VybmVscwogI2VuZGlmCiAKLS8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgotICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgeGNoZygpLiAgKi8KLWV4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQogewogCXN3aXRjaCAoc2l6ZSkgewpAQCAtMjA1LDExICsyMDIsMTcgQEAKIAljYXNlIDg6CiAJCXJldHVybiBfX3hjaGdfdTY0KHB0ciwgeCk7CiAJfQotCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCiAJcmV0dXJuIHg7CiB9CiAKLSNkZWZpbmUgeGNoZyhwdHIsIHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksIChwdHIpLCBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHhjaGcocHRyLCB4KQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCoocHRyKSkgJiB+MHhjKTsJCQkJXAorCQkJCQkJCQkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKQkJCQkJCVwKKwkJX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKSk7CVwKK30pCiAKIGV4dGVybiB2b2lkIHNldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiBleHRlcm4gdm9pZCBzZXRfdW5jYWNoZWRfaGFuZGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwMWNjMTYzLi44NDVkYTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODYsMTQgKzg2LDcgQEAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odHNrKQkJCQkJXAotKHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnJldDsJCQkJXAotCQkJCQkJCQlcCi0JcmV0ID0ga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCk7CQkJXAotCQkJCQkJCQlcCi0JcmV0OwkJCQkJCQlcCi19KQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGt6YWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZWxzZQogI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spIGttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2lycS5jIGIvYXJjaC9taXBzL2phenovaXJxLmMKaW5kZXggN2ZkMTcwZC4uN2JkMzJkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovaXJxLmMKKysrIGIvYXJjaC9taXBzL2phenovaXJxLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiByNDAzMF90aW1lcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSByNDAzMF90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJSNDAzMCB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwppbmRleCBlMDJmNzliLi5iZmVhMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWJjbTE0ODBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKaW5kZXggNjk5NmRhNC4uMDBhNGRhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGRzMTI4N19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBkczEyODdfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImRzMTI4NyIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwppbmRleCA5MjM1MWUwLi5mNWQyNjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBndDY0MXh4X3RpbWVyMF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBndDY0MXh4X3RpbWVyMF9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiZ3Q2NDF4eF90aW1lcjAiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCmluZGV4IDI2NTIzNjIuLmI0NjlhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogc3RydWN0IGlycWFjdGlvbiBjMF9jb21wYXJlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGMwX2NvbXBhcmVfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwppbmRleCBhYzU5MDNkLi5kYTc4ZWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlzYjEyNTBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYwppbmRleCA5OGJkN2RlLi5iMTAyZTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zbXRjLmMKQEAgLTE3MywxMSArMTczLDEyIEBACiAJdW5zaWduZWQgaW50IG10ZmxhZ3M7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKLQl1bnNpZ25lZCBsb25nIG5leHRzdGFtcCA9IDBMOworCXVuc2lnbmVkIGxvbmcgbmV4dHN0YW1wOwogCXVuc2lnbmVkIGxvbmcgcmVmZXJlbmNlOwogCiAKIHJlcGVhdDoKKwluZXh0c3RhbXAgPSAwTDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCSAgICAvKgogCSAgICAgKiBGaW5kIHZpcnR1YWwgQ1BVcyB3aXRoaW4gdGhlIGN1cnJlbnQgVlBFIHdobyBoYXZlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwppbmRleCAwMDM3ZjIxLi4yMThlZTZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0eHg5dG1yX2lycSA9IHsKIAkuaGFuZGxlcgk9IHR4eDl0bXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInR4eDl0bXIiLAogCS5kZXZfaWQJCT0gJnR4eDlfY2xvY2tfZXZlbnRfZGV2aWNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGY3MDk2NTcuLjdhNTE4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vd2F0Y2guaD4KLQorI2luY2x1ZGUgPGFzbS9zcHJhbS5oPgogLyoKICAqIE5vdCBhbGwgb2YgdGhlIE1JUFMgQ1BVcyBoYXZlIHRoZSAid2FpdCIgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlLiBNb3Jlb3ZlciwKICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgIndhaXQiIGZlYXR1cmUgZGlmZmVycyBiZXR3ZWVuIENQVSBmYW1pbGllcy4gVGhpcwpAQCAtNzExLDEyICs3MTEsNiBAQAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQogCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKLWV4dGVybiB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHt9Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9taXBzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMsIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJZGVjb2RlX2NvbmZpZ3MoYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IDUzMWNlN2IuLmVhNjk1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0xOTEsNiArMTkxLDcgQEAKIAkvKiBTZXQgdGhlIFNQIGFmdGVyIGFuIGVtcHR5IHB0X3JlZ3MuICAqLwogCVBUUl9MSQkJc3AsIF9USFJFQURfU0laRSAtIDMyIC0gUFRfU0laRQogCVBUUl9BRERVCXNwLCAkMjgKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCiAJc2V0X3NhdmVkX3NwCXNwLCB0MCwgdDEKIAlQVFJfU1VCVQlzcCwgNCAqIFNaUkVHCQkjIGluaXQgc3RhY2sgcG9pbnRlcgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKaW5kZXggZjdkOGQ1ZC4uZWQ1YzQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCmluZGV4IGQyMDcyY2QuLmIxODFmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCkBAIC0xNCwzOCArMTQsMjMgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZ2ljX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlLCBfbWFwc2l6ZSwgbnVtdnBlcywgbnVtaW50cnM7Ci1zdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCAqX2ludHJtYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlOworc3RhdGljIHVuc2lnbmVkIGludCBnaWNfaXJxX2ZsYWdzW0dJQ19OVU1fSU5UUlNdOworI2RlZmluZSBHSUNfSVJRX0ZMQUdfRURHRSAgICAgIDB4MDAwMQogCi1zdGF0aWMgc3RydWN0IGdpY19wY3B1X21hc2sgcGNwdV9tYXNrc1tOUl9DUFVTXTsKK3N0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IGdpY19wZW5kaW5nX3JlZ3MgcGVuZGluZ19yZWdzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfaW50cm1hc2tfcmVncyBpbnRybWFza19yZWdzW05SX0NQVVNdOwogCi0jZGVmaW5lIGdpY193ZWRnZWIyYm9rIDAJLyoKLQkJCQkgKiBDYW4gR0lDIGhhbmRsZSBiMmIgd3JpdGVzIHRvIHdlZGdlIHJlZ2lzdGVyPwotCQkJCSAqLwotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2ljX3dlZGdlYjJiX2xvY2spOwotI2VuZGlmCi0KIHZvaWQgZ2ljX3NlbmRfaXBpKHVuc2lnbmVkIGludCBpbnRyKQogewotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJcHJfZGVidWcoIkNQVSVkOiAlcyBzdGF0dXMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywKIAkJIHJlYWRfYzBfc3RhdHVzKCkpOwotCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwogCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCAweDgwMDAwMDAwIHwgaW50cik7Ci0JaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwotCX0KIH0KIAogLyogVGhpcyBpcyBNYWx0YSBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgKi8KLXN0YXRpYyB2b2lkIHZwZV9sb2NhbF9zZXR1cCh1bnNpZ25lZCBpbnQgbnVtdnBlcykKK3N0YXRpYyB2b2lkIF9faW5pdCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyB0aW1lcl9pbnRlcnJ1cHQgPSA1LCBwZXJmX2ludGVycnVwdCA9IDU7CkBAIC0xMDUsNDQgKzkwLDM0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiAKLQlpZiAoX2ludHJtYXBbaXJxXS50cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKSB7Ci0JCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKKwlpZiAoZ2ljX2lycV9mbGFnc1tpcnFdICYgR0lDX0lSUV9GTEFHX0VER0UpCiAJCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCBpcnEpOwotCQlpZiAoIWdpY193ZWRnZWIyYm9rKSB7Ci0JCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgZ2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19DTFJfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX0NMUl9JTlRSX01BU0soaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX1NFVF9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfU0VUX0lOVFJfTUFTSyhpcnEpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTU1LDkgKzEzMCw4IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCWk7CiAKLQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0KKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyglZCkgY2FsbGVkXG4iLCBfX2Z1bmNfXywgaXJxKTsKIAljcHVtYXNrX2FuZCgmdG1wLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybiAtMTsKQEAgLTE2OCwxMyArMTQyLDYgQEAKIAkJLyogUmUtcm91dGUgdGhpcyBJUlEgKi8KIAkJR0lDX1NIX01BUF9UT19WUEVfU01BU0soaXJxLCBmaXJzdF9jcHUodG1wKSk7CiAKLQkJLyoKLQkJICogRklYTUU6IGFzc3VtcHRpb24gdGhhdCBfaW50cm1hcCBpcyBvcmRlcmVkIGFuZCBoYXMgbm8gaG9sZXMKLQkJICovCi0KLQkJLyogVXBkYXRlIHRoZSBpbnRyX21hcCAqLwotCQlfaW50cm1hcFtpcnFdLmNwdW51bSA9IGZpcnN0X2NwdSh0bXApOwotCiAJCS8qIFVwZGF0ZSB0aGUgcGNwdV9tYXNrcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQkJY2xlYXJfYml0KGlycSwgcGNwdV9tYXNrc1tpXS5wY3B1X21hc2spOwpAQCAtMjAxLDggKzE2OCw5IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAotCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19zZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAorCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlLAorCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAkvKiBTZXR1cCBJbnRyIHRvIFBpbiBtYXBwaW5nICovCiAJaWYgKHBpbiAmIEdJQ19NQVBfVE9fTk1JX01TSykgewpAQCAtMjI3LDM4ICsxOTUsNDMgQEAKIAlHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZ3R5cGUpOwogCiAJLyogSW5pdCBJbnRyIE1hc2tzICovCi0JR0lDX1NFVF9JTlRSX01BU0soaW50ciwgMCk7CisJR0lDX0NMUl9JTlRSX01BU0soaW50cik7CisJLyogSW5pdGlhbGlzZSBwZXItY3B1IEludGVycnVwdCBzb2Z0d2FyZSBtYXNrcyAqLworCWlmIChmbGFncyAmIEdJQ19GTEFHX0lQSSkKKwkJc2V0X2JpdChpbnRyLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19UUkFOU1BBUkVOVCkKKwkJR0lDX1NFVF9JTlRSX01BU0soaW50cik7CisJaWYgKHRyaWd0eXBlID09IEdJQ19UUklHX0VER0UpCisJCWdpY19pcnFfZmxhZ3NbaW50cl0gfD0gR0lDX0lSUV9GTEFHX0VER0U7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19iYXNpY19pbml0KGludCBudW1pbnRycywgaW50IG51bXZwZXMsCisJCQlzdHJ1Y3QgZ2ljX2ludHJfbWFwICppbnRybWFwLCBpbnQgbWFwc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3B1OwogCiAJLyogU2V0dXAgZGVmYXVsdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0lDX05VTV9JTlRSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bWludHJzOyBpKyspIHsKIAkJR0lDX1NFVF9QT0xBUklUWShpLCBHSUNfUE9MX1BPUyk7CiAJCUdJQ19TRVRfVFJJR0dFUihpLCBHSUNfVFJJR19MRVZFTCk7Ci0JCUdJQ19TRVRfSU5UUl9NQVNLKGksIDApOworCQlHSUNfQ0xSX0lOVFJfTUFTSyhpKTsKKwkJaWYgKGkgPCBHSUNfTlVNX0lOVFJTKQorCQkJZ2ljX2lycV9mbGFnc1tpXSA9IDA7CiAJfQogCiAJLyogU2V0dXAgc3BlY2lmaWNzICovCi0JZm9yIChpID0gMDsgaSA8IF9tYXBzaXplOyBpKyspIHsKLQkJY3B1ID0gX2ludHJtYXBbaV0uY3B1bnVtOworCWZvciAoaSA9IDA7IGkgPCBtYXBzaXplOyBpKyspIHsKKwkJY3B1ID0gaW50cm1hcFtpXS5jcHVudW07CiAJCWlmIChjcHUgPT0gWCkKIAkJCWNvbnRpbnVlOwotCi0JCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgX2ludHJtYXBbaV0uaW50cm51bSA9PSAwICYmCi0JCQkJCV9pbnRybWFwW2ldLmlwaWZsYWcgPT0gMCkKKwkJaWYgKGNwdSA9PSAwICYmIGkgIT0gMCAmJiBpbnRybWFwW2ldLmZsYWdzID09IDApCiAJCQljb250aW51ZTsKLQotCQlzZXR1cF9pbnRyKF9pbnRybWFwW2ldLmludHJudW0sCi0JCQkJX2ludHJtYXBbaV0uY3B1bnVtLAotCQkJCV9pbnRybWFwW2ldLnBpbiwKLQkJCQlfaW50cm1hcFtpXS5wb2xhcml0eSwKLQkJCQlfaW50cm1hcFtpXS50cmlndHlwZSk7Ci0JCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KLQkJaWYgKF9pbnRybWFwW2ldLmlwaWZsYWcpCi0JCQlzZXRfYml0KF9pbnRybWFwW2ldLmludHJudW0sIHBjcHVfbWFza3NbY3B1XS5wY3B1X21hc2spOworCQlnaWNfc2V0dXBfaW50cihpLAorCQkJaW50cm1hcFtpXS5jcHVudW0sCisJCQlpbnRybWFwW2ldLnBpbiwKKwkJCWludHJtYXBbaV0ucG9sYXJpdHksCisJCQlpbnRybWFwW2ldLnRyaWd0eXBlLAorCQkJaW50cm1hcFtpXS5mbGFncyk7CiAJfQogCiAJdnBlX2xvY2FsX3NldHVwKG51bXZwZXMpOwpAQCAtMjczLDEyICsyNDYsMTEgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgaXJxYmFzZSkKIHsKIAl1bnNpZ25lZCBpbnQgZ2ljY29uZmlnOworCWludCBudW12cGVzLCBudW1pbnRyczsKIAogCV9naWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoZ2ljX2Jhc2VfYWRkciwKIAkJCQkJCSAgICBnaWNfYWRkcnNwYWNlX3NpemUpOwogCV9pcnFiYXNlID0gaXJxYmFzZTsKLQlfaW50cm1hcCA9IGludHJfbWFwOwotCV9tYXBzaXplID0gaW50cl9tYXBfc2l6ZTsKIAogCUdJQ1JFQUQoR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpLCBnaWNjb25maWcpOwogCW51bWludHJzID0gKGdpY2NvbmZpZyAmIEdJQ19TSF9DT05GSUdfTlVNSU5UUlNfTVNLKSA+PgpAQCAtMjkwLDUgKzI2Miw1IEBACiAKIAlwcl9kZWJ1ZygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQlnaWNfYmFzaWNfaW5pdCgpOworCWdpY19iYXNpY19pbml0KG51bWludHJzLCBudW12cGVzLCBpbnRyX21hcCwgaW50cl9tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDYyNDJiYzYuLmI3N2ZlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00MjgsMyArNDI4LDkgQEAKIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsICZyZWdzLCAwLAogCSAgICAgICAgICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9sb29rdXBfZGNvb2tpZSh1MzIgYTAsIHUzMiBhMSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwlzaXplX3QgbGVuKQoreworCXJldHVybiBzeXNfbG9va3VwX2Rjb29raWUobWVyZ2VfNjQoYTAsIGExKSwgYnVmLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDliYmY5NzcuLjE0ZGRlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCVBUUglzeXNfaW9fc3VibWl0CiAJUFRSCXN5c19pb19jYW5jZWwJCQkvKiA0MjQ1ICovCiAJUFRSCXN5c19leGl0X2dyb3VwCi0JUFRSCXN5c19sb29rdXBfZGNvb2tpZQorCVBUUglzeXMzMl9sb29rdXBfZGNvb2tpZQogCVBUUglzeXNfZXBvbGxfY3JlYXRlCiAJUFRSCXN5c19lcG9sbF9jdGwKIAlQVFIJc3lzX2Vwb2xsX3dhaXQJCQkvKiA0MjUwICovCkBAIC01MDUsNyArNTA1LDcgQEAKIAlQVFIJc3lzX2ZjaG1vZGF0CiAJUFRSCXN5c19mYWNjZXNzYXQJCQkvKiA0MzAwICovCiAJUFRSCWNvbXBhdF9zeXNfcHNlbGVjdDYKLQlQVFIJc3lzX3Bwb2xsCisJUFRSCWNvbXBhdF9zeXNfcHBvbGwKIAlQVFIJc3lzX3Vuc2hhcmUKIAlQVFIJc3lzX3NwbGljZQogCVBUUglzeXMzMl9zeW5jX2ZpbGVfcmFuZ2UJCS8qIDQzMDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKaW5kZXggNGQxODFkZi4uMjQ2MzBmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAogYXNpZHVzZSBzbXRjX2xpdmVfYXNpZFtNQVhfU01UQ19UTEJTXVtNQVhfU01UQ19BU0lEU107CiAKLQogLyoKICAqIE51bWJlciBvZiBJbnRlclByb2Nlc3NvciBJbnRlcnJ1cHQgKElQSSkgbWVzc2FnZSBidWZmZXJzIHRvIGFsbG9jYXRlCiAgKi8KQEAgLTM4OCw2ICszODcsNyBAQAogCQlJUElRW2ldLmhlYWQgPSBJUElRW2ldLnRhaWwgPSBOVUxMOwogCQlzcGluX2xvY2tfaW5pdCgmSVBJUVtpXS5sb2NrKTsKIAkJSVBJUVtpXS5kZXB0aCA9IDA7CisJCUlQSVFbaV0ucmVzY2hlZF9mbGFnID0gMDsgLyogTm8gcmVzY2hlZHVsZXMgcXVldWVkIGluaXRpYWxseSAqLwogCX0KIAogCS8qIGNwdV9kYXRhIGluZGV4IHN0YXJ0cyBhdCB6ZXJvICovCkBAIC03NDEsMTEgKzc0MSwyNCBAQAogc3RhdGljIHZvaWQgc210Y19pcGlfcWR1bXAodm9pZCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3Qgc210Y19pcGkgKnRlbXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUyA7aSsrKSB7Ci0JCXByaW50aygiSVBJUVslZF06IGhlYWQgPSAweCV4LCB0YWlsID0gMHgleCwgZGVwdGggPSAlZFxuIiwKKwkJcHJfaW5mbygiSVBJUVslZF06IGhlYWQgPSAweCV4LCB0YWlsID0gMHgleCwgZGVwdGggPSAlZFxuIiwKIAkJCWksICh1bnNpZ25lZClJUElRW2ldLmhlYWQsICh1bnNpZ25lZClJUElRW2ldLnRhaWwsCiAJCQlJUElRW2ldLmRlcHRoKTsKKwkJdGVtcCA9IElQSVFbaV0uaGVhZDsKKworCQl3aGlsZSAodGVtcCAhPSBJUElRW2ldLnRhaWwpIHsKKwkJCXByX2RlYnVnKCIlZCAlZCAlZDogIiwgdGVtcC0+dHlwZSwgdGVtcC0+ZGVzdCwKKwkJCSAgICAgICAoaW50KXRlbXAtPmFyZyk7CisjaWZkZWYJU01UQ19JUElfREVCVUcKKwkJICAgIHByX2RlYnVnKCIldSAlbHVcbiIsIHRlbXAtPnNlbmRlciwgdGVtcC0+c3RhbXApOworI2Vsc2UKKwkJICAgIHByX2RlYnVnKCJcbiIpOworI2VuZGlmCisJCSAgICB0ZW1wID0gdGVtcC0+Zmxpbms7CisJCX0KIAl9CiB9CiAKQEAgLTc4NCwxMSArNzk3LDE2IEBACiAJaW50IG10ZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0Y3Jlc3RhcnQ7CiAJZXh0ZXJuIHZvaWQgcjRrX3dhaXRfaXJxb2ZmKHZvaWQpLCBfX3Bhc3R3YWl0KHZvaWQpOworCWludCBzZXRfcmVzY2hlZF9mbGFnID0gKHR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJCWFjdGlvbiA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRik7CiAKIAlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewogCQlwcmludGsoIkNhbm5vdCBTZW5kIElQSSB0byBzZWxmIVxuIik7CiAJCXJldHVybjsKIAl9CisJaWYgKHNldF9yZXNjaGVkX2ZsYWcgJiYgSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyAhPSAwKQorCQlyZXR1cm47IC8qIFRoZXJlIGlzIGEgcmVzY2hlZHVsZSBxdWV1ZWQgYWxyZWFkeSAqLworCiAJLyogU2V0IHVwIGEgZGVzY3JpcHRvciwgdG8gYmUgZGVsaXZlcmVkIGVpdGhlciBwcm9tcHRseSBvciBxdWV1ZWQgKi8KIAlwaXBpID0gc210Y19pcGlfZHEoJmZyZWVJUElxKTsKIAlpZiAocGlwaSA9PSBOVUxMKSB7CkBAIC04MDEsNiArODE5LDcgQEAKIAlwaXBpLT5kZXN0ID0gY3B1OwogCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCAhPSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldLnZwZV9pZCkgewogCQkvKiBJZiBub3Qgb24gc2FtZSBWUEUsIGVucXVldWUgYW5kIHNlbmQgY3Jvc3MtVlBFIGludGVycnVwdCAqLworCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnIHw9IHNldF9yZXNjaGVkX2ZsYWc7CiAJCXNtdGNfaXBpX25xKCZJUElRW2NwdV0sIHBpcGkpOwogCQlMT0NLX0NPUkVfUFJBKCk7CiAJCXNldHRjKGNwdV9kYXRhW2NwdV0udGNfaWQpOwpAQCAtODQ3LDYgKzg2Niw3IEBACiAJCQkgKi8KIAkJCXdyaXRlX3RjX2MwX3RjaGFsdCgwKTsKIAkJCVVOTE9DS19DT1JFX1BSQSgpOworCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyB8PSBzZXRfcmVzY2hlZF9mbGFnOwogCQkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CiAJCX0gZWxzZSB7CiBwb3N0ZGlyZWN0OgpAQCAtOTk2LDEyICsxMDE2LDE1IEBACiAJCSAqIGFscmVhZHkgZW5hYmxlZC4KIAkJICovCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQogCQlzcGluX2xvY2soJnEtPmxvY2spOwogCQlwaXBpID0gX19zbXRjX2lwaV9kcShxKTsKIAkJc3Bpbl91bmxvY2soJnEtPmxvY2spOwotCQlpZiAocGlwaSAhPSBOVUxMKQorCQlpZiAocGlwaSAhPSBOVUxMKSB7CisJCQlpZiAocGlwaS0+dHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkgICAgKGludClwaXBpLT5hcmcgPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpCisJCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyA9IDA7CiAJCQlpcGlfZGVjb2RlKHBpcGkpOworCQl9CiAJCS8qCiAJCSAqIFRoZSB1c2Ugb2YgdGhlIF9fcmF3X2xvY2FsIHJlc3RvcmUgaXNuJ3QKIAkJICogYXMgb2J2aW91c2x5IG5lY2Vzc2FyeSBoZXJlIGFzIGluIHNtdGNfaXBpX3JlcGxheSgpLApAQCAtMTA4Miw2ICsxMTA1LDkgQEAKIAkJCQkgKiB3aXRoIGludGVycnVwdHMgb2ZmCiAJCQkJICovCiAJCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJCWlmIChwaXBpLT50eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCQkgICAgKGludClwaXBpLT5hcmcgPT0gU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpCisJCQkJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgPSAwOwogCQkJCWlwaV9kZWNvZGUocGlwaSk7CiAJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jIGIvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCmluZGV4IDZkZGI1MDcuLjE4MjFkMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYworKysgYi9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KIAotI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTk4LDggKzE5Nyw3IEBACiAJCW9mZnNldCArPSAyICogU1BSQU1fVEFHX1NUUklERTsKIAl9CiB9Ci0KLV9fY3B1aW5pdCB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKQordm9pZCBfX2NwdWluaXQgc3ByYW1fY29uZmlnKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwogCXVuc2lnbmVkIGludCBjb25maWcwOwpAQCAtMjA4LDYgKzIwNiw3IEBACiAJY2FzZSBDUFVfMjRLOgogCWNhc2UgQ1BVXzM0SzoKIAljYXNlIENQVV83NEs6CisJY2FzZSBDUFVfMTAwNEs6CiAJCWNvbmZpZzAgPSByZWFkX2MwX2NvbmZpZygpOwogCQkvKiBGSVhNRTogYWRkcmVzc2VzIGFyZSBNYWx0YSBzcGVjaWZpYyAqLwogCQlpZiAoY29uZmlnMCAmICgxPDwyNCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggM2ZlMWZjZi4uZmUwZDc5OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTMwNiw2ICszMDYsNyBAQAogCiAJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgogCQkiCWxpCSVbZXJyXSwgMAkJCQlcbiIKIAkJIjE6CWxsCSVbb2xkXSwgKCVbYWRkcl0pCQkJXG4iCiAJCSIJbW92ZQklW3RtcF0sICVbbmV3XQkJCQlcbiIKQEAgLTMyMCw2ICszMjEsNyBAQAogCQkiCSJTVFIoUFRSKSIJMWIsIDRiCQkJCVxuIgogCQkiCSJTVFIoUFRSKSIJMmIsIDRiCQkJCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCiAJCTogW29sZF0gIj0mciIgKG9sZCksCiAJCSAgW2Vycl0gIj0mciIgKGVyciksCiAJCSAgW3RtcF0gIj0mciIgKHRtcCkKQEAgLTMyOSw2ICszMzEsNyBAQAogCQk6ICJtZW1vcnkiKTsKIAl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCiAJCSIJbGkJJVtlcnJdLCAwCQkJCVxuIgogCQkiMToJbGwJJVtvbGRdLCAoJVthZGRyXSkJCQlcbiIKIAkJIgltb3ZlCSVbdG1wXSwgJVtuZXddCQkJCVxuIgpAQCAtMzQ3LDYgKzM1MCw3IEBACiAJCSIJIlNUUihQVFIpIgkxYiwgNWIJCQkJXG4iCiAJCSIJIlNUUihQVFIpIgkyYiwgNWIJCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKIAkJOiBbb2xkXSAiPSZyIiAob2xkKSwKIAkJICBbZXJyXSAiPSZyIiAoZXJyKSwKIAkJICBbdG1wXSAiPSZyIiAodG1wKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKaW5kZXggMDMwOTJhYi4uNjA0Nzc1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCkBAIC0xMTE2LDggKzExMTYsNiBAQAogCXYtPnNoYXJlZF9wdHIgPSBOVUxMOwogCXYtPl9fc3RhcnQgPSAwOwogCi0JdW5sb2NrX2tlcm5lbCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCmluZGV4IGYzNjhjNzMuLmIzMmI0YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwpAQCAtNTUsNyArNTUsNiBAQAogCSAqIGludC1oYW5kbGVyIGlzIG5vdCBvbiBib290c3RyYXAKIAkgKi8KIAljbGVhcl9jMF9zdGF0dXMoU1QwX0lNIHwgU1QwX0JFVik7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCS8qIHNldHRpbmcgaXJxIHRyaWdnZXIgbW9kZSAqLwogCXNldF9pcnFfdHJpZ2dlcl9tb2RlKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKaW5kZXggODkwZjc3OS4uNDU0YjUzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwpAQCAtMTYzLDMzICsxNjMsMzQgQEAKIAogLyoKICAqIEluIHRoZSBMaW51eCBrZXJuZWwsIHdlIHN1cHBvcnQgc2VsZWN0aW9uIG9mIEZQUiBmb3JtYXQgb24gdGhlCi0gKiBiYXNpcyBvZiB0aGUgU3RhdHVzLkZSIGJpdC4gIFRoaXMgZG9lcyBpbXBseSB0aGF0LCBpZiBhIGZ1bGwgMzIKLSAqIEZQUnMgYXJlIGRlc2lyZWQsIHRoZXJlIG5lZWRzIHRvIGJlIGEgZmxpcC1mbG9wIHRoYXQgY2FuIGJlIHdyaXR0ZW4KLSAqIHRvIG9uZSBhdCB0aGF0IGJpdCBwb3NpdGlvbi4gIEluIGFueSBjYXNlLCBPMzIgTUlQUyBBQkkgdXNlcwotICogb25seSB0aGUgZXZlbiBGUFJzIChTdGF0dXMuRlIgPSAwKS4KKyAqIGJhc2lzIG9mIHRoZSBTdGF0dXMuRlIgYml0LiAgSWYgYW4gRlBVIGlzIG5vdCBwcmVzZW50LCB0aGUgRlIgYml0CisgKiBpcyBoYXJkd2lyZWQgdG8gemVybywgd2hpY2ggd291bGQgaW1wbHkgYSAzMi1iaXQgRlBVIGV2ZW4gZm9yCisgKiA2NC1iaXQgQ1BVcy4gIEZvciA2NC1iaXQga2VybmVscyB3aXRoIG5vIEZQVSB3ZSB1c2UgVElGXzMyQklUX1JFR1MKKyAqIGFzIGEgcHJveHkgZm9yIHRoZSBGUiBiaXQgc28gdGhhdCBhIDY0LWJpdCBGUFUgaXMgZW11bGF0ZWQuICBJbiBhbnkKKyAqIGNhc2UsIGZvciBhIDMyLWJpdCBrZXJuZWwgd2hpY2ggdXNlcyB0aGUgTzMyIE1JUFMgQUJJLCBvbmx5IHRoZQorICogZXZlbiBGUFJzIGFyZSB1c2VkIChTdGF0dXMuRlIgPSAwKS4KICAqLwotCi0jZGVmaW5lIENQMF9TVEFUVVNfRlJfU1VQUE9SVAotCi0jaWZkZWYgQ1AwX1NUQVRVU19GUl9TVVBQT1JUCi0jZGVmaW5lIEZSX0JJVCBTVDBfRlIKK3N0YXRpYyBpbmxpbmUgaW50IGNvcDFfNjRiaXQoc3RydWN0IHB0X3JlZ3MgKnhjcCkKK3sKKwlpZiAoY3B1X2hhc19mcHUpCisJCXJldHVybiB4Y3AtPmNwMF9zdGF0dXMgJiBTVDBfRlI7CisjaWZkZWYgQ09ORklHXzY0QklUCisJcmV0dXJuICF0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVF9SRUdTKTsKICNlbHNlCi0jZGVmaW5lIEZSX0JJVCAwCisJcmV0dXJuIDA7CiAjZW5kaWYKK30KIAotI2RlZmluZSBTSUZST01SRUcoc2ksIHgpICgoc2kpID0gXAotCQkJKHhjcC0+Y3AwX3N0YXR1cyAmIEZSX0JJVCkgfHwgISh4ICYgMSkgPyBcCi0JCQkoaW50KWN0eC0+ZnByW3hdIDogXAotCQkJKGludCkoY3R4LT5mcHJbeCAmIH4xXSA+PiAzMiApKQotI2RlZmluZSBTSVRPUkVHKHNpLCB4KQkoY3R4LT5mcHJbeCAmIH4oKHhjcC0+Y3AwX3N0YXR1cyAmIEZSX0JJVCkgPT0gMCldID0gXAotCQkJKHhjcC0+Y3AwX3N0YXR1cyAmIEZSX0JJVCkgfHwgISh4ICYgMSkgPyBcCisjZGVmaW5lIFNJRlJPTVJFRyhzaSwgeCkgKChzaSkgPSBjb3AxXzY0Yml0KHhjcCkgfHwgISh4ICYgMSkgPyBcCisJCQkoaW50KWN0eC0+ZnByW3hdIDogKGludCkoY3R4LT5mcHJbeCAmIH4xXSA+PiAzMikpCisKKyNkZWZpbmUgU0lUT1JFRyhzaSwgeCkJKGN0eC0+ZnByW3ggJiB+KGNvcDFfNjRiaXQoeGNwKSA9PSAwKV0gPSBcCisJCQljb3AxXzY0Yml0KHhjcCkgfHwgISh4ICYgMSkgPyBcCiAJCQljdHgtPmZwclt4ICYgfjFdID4+IDMyIDw8IDMyIHwgKHUzMikoc2kpIDogXAogCQkJY3R4LT5mcHJbeCAmIH4xXSA8PCAzMiA+PiAzMiB8ICh1NjQpKHNpKSA8PCAzMikKIAotI2RlZmluZSBESUZST01SRUcoZGksIHgpICgoZGkpID0gXAotCQkJY3R4LT5mcHJbeCAmIH4oKHhjcC0+Y3AwX3N0YXR1cyAmIEZSX0JJVCkgPT0gMCldKQotI2RlZmluZSBESVRPUkVHKGRpLCB4KQkoY3R4LT5mcHJbeCAmIH4oKHhjcC0+Y3AwX3N0YXR1cyAmIEZSX0JJVCkgPT0gMCldIFwKLQkJCT0gKGRpKSkKKyNkZWZpbmUgRElGUk9NUkVHKGRpLCB4KSAoKGRpKSA9IGN0eC0+ZnByW3ggJiB+KGNvcDFfNjRiaXQoeGNwKSA9PSAwKV0pCisjZGVmaW5lIERJVE9SRUcoZGksIHgpCShjdHgtPmZwclt4ICYgfihjb3AxXzY0Yml0KHhjcCkgPT0gMCldID0gKGRpKSkKIAogI2RlZmluZSBTUEZST01SRUcoc3AsIHgpIFNJRlJPTVJFRygoc3ApLmJpdHMsIHgpCiAjZGVmaW5lIFNQVE9SRUcoc3AsIHgpCVNJVE9SRUcoKHNwKS5iaXRzLCB4KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCmluZGV4IDFjNTU1ZTYuLmQ5YWUxZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKQEAgLTYyLDggKzYyLDYgQEAKIAkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHksICJuZWciKTsKIAl9CiAKLQlpZiAoaWVlZTc1NGRwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh4LCAibmVnIiwgeCk7CiAJcmV0dXJuIHg7CiB9CiAKQEAgLTc2LDE1ICs3NCwxMiBAQAogCUNMRUFSQ1g7CiAJRkxVU0hYRFA7CiAKKwkvKiBDbGVhciBzaWduIEFMV0FZUywgaXJyZXNwZWN0aXZlIG9mIE5hTiAqLworCURQU0lHTih4KSA9IDA7CisKIAlpZiAoeGMgPT0gSUVFRTc1NF9DTEFTU19TTkFOKSB7Ci0JCVNFVENYKElFRUU3NTRfSU5WQUxJRF9PUEVSQVRJT04pOwotCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoaWVlZTc1NGRwX2luZGVmKCksICJuZWciKTsKKwkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KGllZWU3NTRkcF9pbmRlZigpLCAiYWJzIik7CiAJfQogCi0JaWYgKGllZWU3NTRkcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeCwgImFicyIsIHgpOwotCi0JLyogcXVpY2sgZml4IHVwICovCi0JRFBTSUdOKHgpID0gMDsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYwppbmRleCA3NzBmMGY0Li4zMTc1NDc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCkBAIC02Miw4ICs2Miw2IEBACiAJCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdCh5LCAibmVnIik7CiAJfQogCi0JaWYgKGllZWU3NTRzcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoeCwgIm5lZyIsIHgpOwogCXJldHVybiB4OwogfQogCkBAIC03NiwxNSArNzQsMTIgQEAKIAlDTEVBUkNYOwogCUZMVVNIWFNQOwogCisJLyogQ2xlYXIgc2lnbiBBTFdBWVMsIGlycmVzcGVjdGl2ZSBvZiBOYU4gKi8KKwlTUFNJR04oeCkgPSAwOworCiAJaWYgKHhjID09IElFRUU3NTRfQ0xBU1NfU05BTikgewotCQlTRVRDWChJRUVFNzU0X0lOVkFMSURfT1BFUkFUSU9OKTsKIAkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KGllZWU3NTRzcF9pbmRlZigpLCAiYWJzIik7CiAJfQogCi0JaWYgKGllZWU3NTRzcF9pc25hbih4KSkJLyogYnV0IG5vdCBpbmZpbml0eSAqLwotCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoeCwgImFicyIsIHgpOwotCi0JLyogcXVpY2sgZml4IHVwICovCi0JU1BTSUdOKHgpID0gMDsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKaW5kZXggN2U0OGU3Ni4uOTM2N2UzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMKQEAgLTkwLDYgKzkwLDkgQEAKIHsKIAl2b2lkICpyZXQ7CiAKKwlpZiAoZG1hX2FsbG9jX2Zyb21fY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCAmcmV0KSkKKwkJcmV0dXJuIHJldDsKKwogCWdmcCA9IG1hc3NhZ2VfZ2ZwX2ZsYWdzKGRldiwgZ2ZwKTsKIAogCXJldCA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpOwpAQCAtMTIyLDYgKzEyNSwxMCBAQAogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdmFkZHI7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCisJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpKQorCQlyZXR1cm47CiAKIAlwbGF0X3VubWFwX2RtYV9tZW0oZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDE1YWExOTAuLjhkMWY0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CkBAIC0xMzIsNyArMTMzLDEwIEBACiAJaW5jX3ByZWVtcHRfY291bnQoKTsKIAlpZHggPSAoYWRkciA+PiBQQUdFX1NISUZUKSAmIChGSVhfTl9DT0xPVVJTIC0gMSk7CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCWlkeCArPSBGSVhfTl9DT0xPVVJTICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlkeCArPSBGSVhfTl9DT0xPVVJTICogc21wX3Byb2Nlc3Nvcl9pZCgpICsKKwkJKGluX2ludGVycnVwdCgpID8gKEZJWF9OX0NPTE9VUlMgKiBOUl9DUFVTKSA6IDApOworI2Vsc2UKKwlpZHggKz0gaW5faW50ZXJydXB0KCkgPyBGSVhfTl9DT0xPVVJTIDogMDsKICNlbmRpZgogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfQ01BUF9FTkQgLSBpZHgpOwogCXB0ZSA9IG1rX3B0ZShwYWdlLCBQQUdFX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCmluZGV4IGRmOWU1MjYuLjQ2OWQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtYW1vbi5jCkBAIC03MCwxMSArNzAsMTIgQEAKIAlsYXVuY2gtPnNwID0gc3A7CiAJbGF1bmNoLT5hMCA9IGEwOwogCi0JLyogTWFrZSBzdXJlIHRhcmdldCBzZWVzIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBnbyBiaXQgKi8KLQlzbXBfbWIoKTsKLQorCXNtcF93bWIoKTsgICAgICAgICAgICAgIC8qIFRhcmdldCBtdXN0IHNlZSBwYXJhbWV0ZXJzIGJlZm9yZSBnbyAqLwogCWxhdW5jaC0+ZmxhZ3MgfD0gTEFVTkNIX0ZHTzsKKwlzbXBfd21iKCk7ICAgICAgICAgICAgICAvKiBUYXJnZXQgbXVzdCBzZWUgZ28gYmVmb3JlIHdlIHBvbGwgICovCisKIAl3aGlsZSAoKGxhdW5jaC0+ZmxhZ3MgJiBMQVVOQ0hfRkdPTkUpID09IDApCiAJCTsKKwlzbXBfcm1iKCk7ICAgICAgLyogVGFyZ2V0IHdpbGwgYmUgdXBkYXRpbmcgZmxhZ3Mgc29vbiAqLwogCXByX2RlYnVnKCJsYXVuY2g6IGNwdSVkIGdvbmUhXG4iLCBjcHUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKaW5kZXggM2UwYTliMy4uNGMzZmNhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJCWR1bW15ID0gQk9OSVRPX1BDSU1BUF9DRkc7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAKLQkJaXJxID0gcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOworCQlpcnEgPSBfX3Jhd19yZWFkbCgodTMyICopX3BjaWN0cmxfYm9uaXRvX3BjaWNmZyk7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAJCWlycSAmPSAweGZmOwogCQlCT05JVE9fUENJTUFQX0NGRyA9IDA7CkBAIC0zNzksMzggKzM3OSw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgbXNjX25yX2VpY2lycXMgPSBBUlJBWV9TSVpFKG1zY19laWNpcnFtYXApOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAvKgogICogVGhpcyBHSUMgc3BlY2lmaWMgdGFidWxhciBhcnJheSBkZWZpbmVzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIEV4dGVybmFsCiAgKiBJbnRlcnJ1cHRzIGFuZCBDUFVzL0NvcmUgSW50ZXJydXB0cy4gVGhlIG5hdHVyZSBvZiB0aGUgRXh0ZXJuYWwKICAqIEludGVycnVwdHMgaXMgYWxzbyBkZWZpbmVkIGhlcmUgLSBwb2xhcml0eS90cmlnZ2VyLgogICovCisKKyNkZWZpbmUgR0lDX0NQVV9OTUkgR0lDX01BUF9UT19OTUlfTVNLCiBzdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCBnaWNfaW50cl9tYXBbR0lDX05VTV9JTlRSU10gPSB7Ci0JeyBHSUNfRVhUX0lOVFIoMCksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEpLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigyKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMyksIAkwLAlHSUNfQ1BVX0lOVDAsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig0KSwgCTAsCUdJQ19DUFVfSU5UMSwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDUpLCAJMCwJR0lDX0NQVV9JTlQyLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNiksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig3KSwgCTAsCUdJQ19DUFVfSU5UNCwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDgpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoOSksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMCksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDExKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTIpLCAJMCwJR0lDX0NQVV9JTlQzLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTMpLCAJMCwJR0lDX01BUF9UT19OTUlfTVNLLAlHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxNCksIAkwLAlHSUNfTUFQX1RPX05NSV9NU0ssCUdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDE1KSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0vKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGdlbmVyYWwgaW50ZXJydXB0cyBub3cgd2UgZG8gSVBJIG9uZXMgKi8KKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IFgsIFgsCQkgICBYLAkgCVgsCQkwIH0sCisJeyBYLCBYLAkJICAgWCwJCVgsCQkwIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDAsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMSwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQyLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UNCwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9OTUksICBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX05NSSwgIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJICAgICAgICAwIH0sCisJLyogVGhlIHJlbWFpbmRlciBvZiB0aGlzIHRhYmxlIGlzIGluaXRpYWxpc2VkIGJ5IGZpbGxfaXBpX21hcCAqLwogfTsKLSNlbmRpZgogCiAvKgogICogR0NNUCBuZWVkcyB0byBiZSBkZXRlY3RlZCBiZWZvcmUgYW55IFNNUCBpbml0aWFsaXNhdGlvbgogICovCiBpbnQgX19pbml0IGdjbXBfcHJvYmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJaWYgKG1pcHNfcmV2aXNpb25fc2NvbmlkICE9IE1JUFNfUkVWSVNJT05fU0NPTl9ST0NJVCkgeworCQlnY21wX3ByZXNlbnQgPSAwOworCQlyZXR1cm4gZ2NtcF9wcmVzZW50OworCX0KKwogCWlmIChnY21wX3ByZXNlbnQgPj0gMCkKIAkJcmV0dXJuIGdjbXBfcHJlc2VudDsKIApAQCAtNDE5LDIwICs0MjQsMzUgQEAKIAlnY21wX3ByZXNlbnQgPSAoR0NNUEdDQihHQ01QQikgJiBHQ01QX0dDQl9HQ01QQl9HQ01QQkFTRV9NU0spID09IEdDTVBfQkFTRV9BRERSOwogCiAJaWYgKGdjbXBfcHJlc2VudCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkdDTVAgcHJlc2VudFxuIik7CisJCXByX2RlYnVnKCJHQ01QIHByZXNlbnRcbiIpOwogCXJldHVybiBnY21wX3ByZXNlbnQ7CiB9CiAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIElPQ1UncyBwcmVzZW50ICovCitpbnQgX19pbml0IGdjbXBfbmlvY3Uodm9pZCkKK3sKKyAgcmV0dXJuIGdjbXBfcHJlc2VudCA/CisgICAgKEdDTVBHQ0IoR0MpICYgR0NNUF9HQ0JfR0NfTlVNSU9DVV9NU0spID4+IEdDTVBfR0NCX0dDX05VTUlPQ1VfU0hGIDoKKyAgICAwOworfQorCisvKiBTZXQgR0NNUCByZWdpb24gYXR0cmlidXRlcyAqLwordm9pZCBfX2luaXQgZ2NtcF9zZXRyZWdpb24oaW50IHJlZ2lvbiwgdW5zaWduZWQgbG9uZyBiYXNlLAorCQkJICAgdW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgdHlwZSkKK3sKKwlHQ01QR0NCbihDTXhCQVNFLCByZWdpb24pID0gYmFzZTsKKwlHQ01QR0NCbihDTXhNQVNLLCByZWdpb24pID0gbWFzayB8IHR5cGU7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIHN0YXRpYyB2b2lkIF9faW5pdCBmaWxsX2lwaV9tYXAxKGludCBiYXNlaW50ciwgaW50IGNwdSwgaW50IGNwdXBpbikKIHsKIAlpbnQgaW50ciA9IGJhc2VpbnRyICsgY3B1OwotCWdpY19pbnRyX21hcFtpbnRyXS5pbnRybnVtID0gR0lDX0VYVF9JTlRSKGludHIpOwogCWdpY19pbnRyX21hcFtpbnRyXS5jcHVudW0gPSBjcHU7CiAJZ2ljX2ludHJfbWFwW2ludHJdLnBpbiA9IGNwdXBpbjsKIAlnaWNfaW50cl9tYXBbaW50cl0ucG9sYXJpdHkgPSBHSUNfUE9MX1BPUzsKIAlnaWNfaW50cl9tYXBbaW50cl0udHJpZ3R5cGUgPSBHSUNfVFJJR19FREdFOwotCWdpY19pbnRyX21hcFtpbnRyXS5pcGlmbGFnID0gMTsKKwlnaWNfaW50cl9tYXBbaW50cl0uZmxhZ3MgPSBHSUNfRkxBR19JUEk7CiAJaXBpX21hcFtjcHVdIHw9ICgxIDw8IChjcHVwaW4gKyAyKSk7CiB9CiAKQEAgLTQ0Nyw2ICs0NjcsMTIgQEAKIH0KICNlbmRpZgogCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXBpaXJxKGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK3sKKwlzZXR1cF9pcnEoaXJxLCBhY3Rpb24pOworCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKK30KKwogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWluaXRfaTgyNTlfaXJxcygpOwpAQCAtNDU4LDEyICs0ODQsMTcgQEAKIAkJR0NNUEdDQihHSUNCQSkgPSBHSUNfQkFTRV9BRERSIHwgR0NNUF9HQ0JfR0lDQkFfRU5fTVNLOwogCQlnaWNfcHJlc2VudCA9IDE7CiAJfSBlbHNlIHsKLQkJX21zYzAxX2JpdV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShNU0MwMV9CSVVfUkVHX0JBU0UsIE1TQzAxX0JJVV9BRERSU1BBQ0VfU1opOwotCQlnaWNfcHJlc2VudCA9IChSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpICYKLQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfTVNLKSA+PiBNU0MwMV9TQ19DRkdfR0lDUFJFU19TSEY7CisJCWlmIChtaXBzX3JldmlzaW9uX3Njb25pZCA9PSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQpIHsKKwkJCV9tc2MwMV9iaXVfYmFzZSA9ICh1bnNpZ25lZCBsb25nKQorCQkJCQlpb3JlbWFwX25vY2FjaGUoTVNDMDFfQklVX1JFR19CQVNFLAorCQkJCQkJTVNDMDFfQklVX0FERFJTUEFDRV9TWik7CisJCQlnaWNfcHJlc2VudCA9IChSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpICYKKwkJCQkJTVNDMDFfU0NfQ0ZHX0dJQ1BSRVNfTVNLKSA+PgorCQkJCQlNU0MwMV9TQ19DRkdfR0lDUFJFU19TSEY7CisJCX0KIAl9CiAJaWYgKGdpY19wcmVzZW50KQotCQlwcmludGsoS0VSTl9ERUJVRyAiR0lDIHByZXNlbnRcbiIpOworCQlwcl9kZWJ1ZygiR0lDIHByZXNlbnRcbiIpOwogCiAJc3dpdGNoIChtaXBzX3JldmlzaW9uX3Njb25pZCkgewogCWNhc2UgTUlQU19SRVZJU0lPTl9TQ09OX1NPQ0lUOgpAQCAtNTI2LDE2ICs1NTcsMTYgQEAKIAkJCQkJCSZjb3JlaGlfaXJxYWN0aW9uKTsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAlpZiAoZ2ljX3ByZXNlbnQpIHsKIAkJLyogRklYTUUgKi8KIAkJaW50IGk7Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAkJZ2ljX2NhbGxfaW50X2Jhc2UgPSBHSUNfTlVNX0lOVFJTIC0gTlJfQ1BVUzsKIAkJZ2ljX3Jlc2NoZWRfaW50X2Jhc2UgPSBnaWNfY2FsbF9pbnRfYmFzZSAtIE5SX0NQVVM7Ci0KIAkJZmlsbF9pcGlfbWFwKCk7Ci0JCWdpY19pbml0KEdJQ19CQVNFX0FERFIsIEdJQ19BRERSU1BBQ0VfU1osIGdpY19pbnRyX21hcCwgQVJSQVlfU0laRShnaWNfaW50cl9tYXApLCBNSVBTX0dJQ19JUlFfQkFTRSk7CisjZW5kaWYKKwkJZ2ljX2luaXQoR0lDX0JBU0VfQUREUiwgR0lDX0FERFJTUEFDRV9TWiwgZ2ljX2ludHJfbWFwLAorCQkJCUFSUkFZX1NJWkUoZ2ljX2ludHJfbWFwKSwgTUlQU19HSUNfSVJRX0JBU0UpOwogCQlpZiAoIWdjbXBfcHJlc2VudCkgewogCQkJLyogRW5hYmxlIHRoZSBHSUMgKi8KIAkJCWkgPSBSRUcoX21zYzAxX2JpdV9iYXNlLCBNU0MwMV9TQ19DRkcpOwpAQCAtNTQzLDcgKzU3NCw3IEBACiAJCQkJKGkgfCAoMHgxIDw8IE1TQzAxX1NDX0NGR19HSUNFTkFfU0hGKSk7CiAJCQlwcl9kZWJ1ZygiR0lDIEVuYWJsZWRcbiIpOwogCQl9Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAkJLyogc2V0IHVwIGlwaSBpbnRlcnJ1cHRzICovCiAJCWlmIChjcHVfaGFzX3ZpbnQpIHsKIAkJCXNldF92aV9oYW5kbGVyKE1JUFNDUFVfSU5UX0lQSTAsIG1hbHRhX2lwaV9pcnFkaXNwYXRjaCk7CkBAIC01NTYsMTYgKzU4NywxNCBAQAogCQl3cml0ZV9jMF9zdGF0dXMoMHgxMTAwZGMwMCk7CiAJCXByaW50aygiQ1BVJWQ6IHN0YXR1cyByZWdpc3RlciBmcmMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWFkX2MwX3N0YXR1cygpKTsKIAkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQkJc2V0dXBfaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX1JFU0NIRURfSU5UKGkpLCAmaXJxX3Jlc2NoZWQpOwotCQkJc2V0dXBfaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX0NBTExfSU5UKGkpLCAmaXJxX2NhbGwpOwotCQkJc2V0X2lycV9oYW5kbGVyKE1JUFNfR0lDX0lSUV9CQVNFICsKLQkJCQkJR0lDX1JFU0NIRURfSU5UKGkpLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoTUlQU19HSUNfSVJRX0JBU0UgKwotCQkJCQlHSUNfQ0FMTF9JTlQoaSksIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJCWFyY2hfaW5pdF9pcGlpcnEoTUlQU19HSUNfSVJRX0JBU0UgKworCQkJCQkgR0lDX1JFU0NIRURfSU5UKGkpLCAmaXJxX3Jlc2NoZWQpOworCQkJYXJjaF9pbml0X2lwaWlycShNSVBTX0dJQ19JUlFfQkFTRSArCisJCQkJCSBHSUNfQ0FMTF9JTlQoaSksICZpcnFfY2FsbCk7CiAJCX0KKyNlbmRpZgogCX0gZWxzZSB7CisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApCiAJCS8qIHNldCB1cCBpcGkgaW50ZXJydXB0cyAqLwogCQlpZiAoY3B1X2hhc192ZWljKSB7CiAJCQlzZXRfdmlfaGFuZGxlciAoTVNDMDFFX0lOVF9TVzAsIGlwaV9yZXNjaGVkX2Rpc3BhdGNoKTsKQEAgLTU4MCwxNCArNjA5LDEwIEBACiAJCQljcHVfaXBpX3Jlc2NoZWRfaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyBNSVBTX0NQVV9JUElfUkVTQ0hFRF9JUlE7CiAJCQljcHVfaXBpX2NhbGxfaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyBNSVBTX0NQVV9JUElfQ0FMTF9JUlE7CiAJCX0KLQotCQlzZXR1cF9pcnEoY3B1X2lwaV9yZXNjaGVkX2lycSwgJmlycV9yZXNjaGVkKTsKLQkJc2V0dXBfaXJxKGNwdV9pcGlfY2FsbF9pcnEsICZpcnFfY2FsbCk7Ci0KLQkJc2V0X2lycV9oYW5kbGVyKGNwdV9pcGlfcmVzY2hlZF9pcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQkJc2V0X2lycV9oYW5kbGVyKGNwdV9pcGlfY2FsbF9pcnEsIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQl9CisJCWFyY2hfaW5pdF9pcGlpcnEoY3B1X2lwaV9yZXNjaGVkX2lycSwgJmlycV9yZXNjaGVkKTsKKwkJYXJjaF9pbml0X2lwaWlycShjcHVfaXBpX2NhbGxfaXJxLCAmaXJxX2NhbGwpOwogI2VuZGlmCisJfQogfQogCiB2b2lkIG1hbHRhX2JlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCmluZGV4IDYxODg4ZmYuLjkwMzVjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwpAQCAtNTQsNyArNTQsOCBAQAogewogCWNoYXIgKm1lbXNpemVfc3RyOwogCXVuc2lnbmVkIGludCBtZW1zaXplOwotCWNoYXIgY21kbGluZVtDTF9TSVpFXSwgKnB0cjsKKwljaGFyICpwdHI7CisJc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCiAJLyogb3RoZXJ3aXNlIGxvb2sgaW4gdGhlIGVudmlyb25tZW50ICovCiAJbWVtc2l6ZV9zdHIgPSBwcm9tX2dldGVudigibWVtc2l6ZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKaW5kZXggYjk3NDMxOS4uMmZiZmExYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQorI2luY2x1ZGUgPGFzbS9nY21wcmVncy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oPgpAQCAtMjAxLDcgKzIwMSwxMSBAQAogCQltc2NfbWVtX3Jlc291cmNlLnN0YXJ0ID0gc3RhcnQgJiBtYXNrOwogCQltc2NfbWVtX3Jlc291cmNlLmVuZCA9IChzdGFydCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLm1lbV9vZmZzZXQgPSAoc3RhcnQgJiBtYXNrKSAtIChtYXAgJiBtYXNrKTsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMCwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9CQVNMLCBzdGFydCk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NU0tMLCBtYXNrKTsKIAkJTVNDX1JFQUQoTVNDMDFfUENJX1NDMlBJT01BUEwsIG1hcCk7CkBAIC0yMDksNyArMjEzLDExIEBACiAJCW1zY19pb19yZXNvdXJjZS5lbmQgPSAobWFwICYgbWFzaykgfCB+bWFzazsKIAkJbXNjX2NvbnRyb2xsZXIuaW9fb2Zmc2V0ID0gMDsKIAkJaW9wb3J0X3Jlc291cmNlLmVuZCA9IH5tYXNrOwotCisjaWZkZWYgQ09ORklHX01JUFNfQ01QCisJCWlmIChnY21wX25pb2N1KCkpCisJCQlnY21wX3NldHJlZ2lvbigxLCBzdGFydCwgbWFzaywKKwkJCQlHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9JT0NVMSk7CisjZW5kaWYKIAkJLyogSWYgcmFuZ2VzIG92ZXJsYXAgSS9PIHRha2VzIHByZWNlZGVuY2UuICAqLwogCQlzdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJZW5kID0gc3RhcnQgfCB+bWFzazsKQEAgLTI0MSwzICsyNDksMTYgQEAKIAogCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNvbnRyb2xsZXIpOwogfQorCisvKiBFbmFibGUgUENJIDIuMSBjb21wYXRpYmlsaXR5IGluIFBJSVg0ICovCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZGxjc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCBvZGxjLCBuZGxjOworCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4ODIsICZvZGxjKTsKKwkvKiBFbmFibGUgcGFzc2l2ZSByZWxlYXNlcyBhbmQgZGVsYXllZCB0cmFuc2FjdGlvbiAqLworCW5kbGMgPSBvZGxjIHwgNzsKKwkodm9pZCkgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MiwgbmRsYyk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wLAorCXF1aXJrX2RsY3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCmluZGV4IGYwODBmMTEuLjdhY2E3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2FjdGlvbiA9IHsKIAkuaGFuZGxlciA9CW5vX2FjdGlvbiwKLQkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0JCSJUaW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCmluZGV4IDE4YjE5MjcuLjg4MzZjNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vdGltZS5jCkBAIC01OSw3ICs1OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBueDh4eHhfdGltZXJfaXJxID0gewogCS5oYW5kbGVyCT0gcG54OHh4eF90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAicG54OHh4eF90aW1lciIsCiB9OwogCkBAIC03Miw3ICs3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG1vbm90b25pY19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBtb25vdG9uaWNfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAiTW9ub3RvbmljIHRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCBkZWVkMWQ1Li41NzVjZDE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBvdGhlcndpc2UsIHRoZSBvcHJvZmlsZSB0b29sIHdpbGwgbm90IHJlY29nbml6ZSB0aGlzIGFuZCBjb21wbGFpbiBhYm91dAogICogImNwdV90eXBlICd1bnNldCcgaXMgbm90IHZhbGlkIi4KICAqLwotI2RlZmluZSBMT09OR1NPTjJfQ1BVX1RZUEUJIm1pcHMvZ29kc29uMiIKKyNkZWZpbmUgTE9PTkdTT04yX0NQVV9UWVBFCSJtaXBzL2xvb25nc29uMiIKIAogI2RlZmluZSBMT09OR1NPTjJfQ09VTlRFUjFfRVZFTlQoZXZlbnQpCSgoZXZlbnQgJiAweDBmKSA8PCA1KQogI2RlZmluZSBMT09OR1NPTjJfQ09VTlRFUjJfRVZFTlQoZXZlbnQpCSgoZXZlbnQgJiAweDBmKSA8PCA5KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL2RldmljZXMuYyBiL2FyY2gvbWlwcy9yYjUzMi9kZXZpY2VzLmMKaW5kZXggOWY0MGUxZi4uMDQxZmMxYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL2RldmljZXMuYworKysgYi9hcmNoL21pcHMvcmI1MzIvZGV2aWNlcy5jCkBAIC0xMTAsNyArMTEwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtvcmluYV9kZXYwID0gewogCS5pZCA9IC0xLAogCS5uYW1lID0gImtvcmluYSIsCi0JLmRldi5kcml2ZXJfZGF0YSA9ICZrb3JpbmFfZGV2MF9kYXRhLAogCS5yZXNvdXJjZSA9IGtvcmluYV9kZXYwX3JlcywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoa29yaW5hX2RldjBfcmVzKSwKIH07CkBAIC0zMzIsNiArMzMxLDggQEAKIAkvKiBzZXQgdGhlIHVhcnQgY2xvY2sgdG8gdGhlIGN1cnJlbnQgY3B1IGZyZXF1ZW5jeSAqLwogCXJiNTMyX3VhcnRfcmVzWzBdLnVhcnRjbGsgPSBpZHRfY3B1X2ZyZXE7CiAKKwlkZXZfc2V0X2RydmRhdGEoJmtvcmluYV9kZXYwLmRldiwgJmtvcmluYV9kZXYwX2RhdGEpOworCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHJiNTMyX2RldnMsIEFSUkFZX1NJWkUocmI1MzJfZGV2cykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwppbmRleCA0NmNhMjRkLi5hZDViZDEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9zZXR1cF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBjbWRfbGluZVtDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBjbWRfbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKmNwLCAqYm9hcmQ7CiAJaW50IHByb21fYXJnYzsKIAljaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IDZkMGU1OWYuLmQ2ODAyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gaHViX3J0X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGh1Yl9ydF9jb3VudGVyX2hhbmRsZXIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiaHViLXJ0IiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggNjJkZjZhNS4uZjNiNjBlNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYTIwcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBhMjByX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lCQk9ICJhMjByLXRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwppbmRleCBjODYwODEwLi5kNjY4MDJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCkBAIC04NSw3ICs4NSw3IEBACiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJaWYgKCFzdHJjbXAoaWQsICJzcGktYmFzZWNsayIpKQotCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDQpOworCQlyZXR1cm4gKHN0cnVjdCBjbGsgKikoKHVuc2lnbmVkIGxvbmcpdHh4OV9nYnVzX2Nsb2NrIC8gMiAvIDIpOwogCWlmICghc3RyY21wKGlkLCAiaW1idXNfY2xrIikpCiAJCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyKTsKIAlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCWludCBhcmdjOwogCWludCAqYXJndjMyOwogCWludCBpOwkJCS8qIEFsd2F5cyBpZ25vcmUgdGhlICItYyIgYXQgYXJndlswXSAqLwotCWNoYXIgYnVpbHRpbltDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBidWlsdGluW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAlpZiAoZndfYXJnMCA+PSBDS1NFRzAgfHwgZndfYXJnMSA8IENLU0VHMCkgewogCQkvKgpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmVwcm9jZXNzX2NtZGxpbmUodm9pZCkKIHsKLQljaGFyIGNtZGxpbmVbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKnM7CiAKIAlzdHJjcHkoY21kbGluZSwgYXJjc19jbWRsaW5lKTsKQEAgLTgxNyw3ICs4MTcsOCBAQAogb3V0X3BkZXY6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIG91dF9ncGlvOgotCWdwaW9fcmVtb3ZlKCZpb2NsZWQtPmNoaXApOworCWlmIChncGlvY2hpcF9yZW1vdmUoJmlvY2xlZC0+Y2hpcCkpCisJCXJldHVybjsKIG91dF91bm1hcDoKIAlpb3VubWFwKGlvY2xlZC0+bW1pb2FkZHIpOwogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaAppbmRleCA1ZjM5ZDU1Li4xZTFjODI0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTI4LDggKzI4LDYgQEAKICNkZWZpbmUgRl9TRVRPV04JMTIJLyogIGZvciBzb2NrZXRzLiAqLwogI2RlZmluZSBGX1NFVFNJRwkxMwkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfR0VUU0lHCTE0CS8qICBmb3Igc29ja2V0cy4gKi8KLSNkZWZpbmUgRl9HRVRPV05fRVgJMTUKLSNkZWZpbmUgRl9TRVRPV05fRVgJMTYKIAogLyogZm9yIHBvc2l4IGZjbnRsKCkgYW5kIGxvY2tmKCkgKi8KICNkZWZpbmUgRl9SRExDSwkJMDEKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYwppbmRleCA2OWRhZDVhLi5hMzY3OTllIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIGRiZyh4Li4uKQogI2VuZGlmCiAKLSNkZWZpbmUgS0VSTkVMX1NUQVJUIChLRVJORUxfQklOQVJZX1RFWFRfU1RBUlQgLSAweDEwMDApCisjZGVmaW5lIEtFUk5FTF9TVEFSVCAoS0VSTkVMX0JJTkFSWV9URVhUX1NUQVJUKQogCiBleHRlcm4gc3RydWN0IHVud2luZF90YWJsZV9lbnRyeSBfX3N0YXJ0X19fdW53aW5kW107CiBleHRlcm4gc3RydWN0IHVud2luZF90YWJsZV9lbnRyeSBfX3N0b3BfX191bndpbmRbXTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZmRhNGJhYS4uOWRhYjRhNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTc4LDkgKzc4LDYgQEAKIAkgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlkYXRhX3N0YXJ0ID0gLjsKLQlFWENFUFRJT05fVEFCTEUoMTYpCi0KLQlOT1RFUwogCiAJLyogdW53aW5kIGluZm8gKi8KIAkuUEFSSVNDLnVud2luZCA6IHsKQEAgLTg5LDYgKzg2LDkgQEAKIAkJX19zdG9wX19fdW53aW5kID0gLjsKIAl9CiAKKwlFWENFUFRJT05fVEFCTEUoMTYpCisJTk9URVMKKwogCS8qIERhdGEgKi8KIAlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMTBhMGE1NC4uMmJhMTRlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTQxNCw2ICs0MTQsMTAgQEAKIGNvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAogCWRlZl9ib29sIHkKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBQUENfQk9PSzNTXzY0CisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IDNiMTAwNTEuLmJmMzM4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC00Niw3ICs0Niw3IEBACiAKIGNvbmZpZyBIQ0FMTF9TVEFUUwogCWJvb2wgIkh5cGVydmlzb3IgY2FsbCBpbnN0cnVtZW50YXRpb24iCi0JZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBERUJVR19GUworCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgREVCVUdfRlMgJiYgVFJBQ0VQT0lOVFMKIAloZWxwCiAJICBBZGRzIGNvZGUgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGh5cGVydmlzb3IgY2FsbHMgbWFkZSBhbmQKIAkgIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBpbiBoeXBlcnZpc29yIGNhbGxzLiAgV2FsbCB0aW1lIHNwZW50IGluCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMKaW5kZXggYzAyYTk5OS4uODkzZjQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJcmV0dXJuIDY0OwogfQotdm9pZCBnZXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgZ2V0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAl1bnNpZ25lZCBqOwogCXVuc2lnbmVkIG51bSA9IGZyZWFkKGJ1ZiwgMSwgNDA5NiwgZmlsZSk7CkBAIC02NiwxMiArNjYsMTIgQEAKIAkJYnVmW2pdID0gMDsKIH0KIAotdm9pZCBwdXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgcHV0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAlmd3JpdGUoYnVmLCAxLCA0MDk2LCBmaWxlKTsKIH0KIAotdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkgCitzdGF0aWMgdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgbXNnKTsKIAlmY2xvc2UoZmRlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCBjZWU4MDgwLi5kZDM4NjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMjEwLDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCmluZGV4IDRjMzYxODYuLjhlOWJlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0xOTksNyArMTk5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A1MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCBkZTMwYjNmLi44MmZmMmIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKQEAgLTI0Nyw3ICsyNDcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI1Niw3ICsyNTUsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKaW5kZXggZDEzY2IxMS4uZTQ1YTYzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKQEAgLTI1MSw3ICsyNTEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNjAsNyArMjU5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKaW5kZXggZTI5N2Q4Yi4uMGMzOTAyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKQEAgLTIyMyw3ICsyMjMsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yMzIsNyArMjMxLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKaW5kZXggN2JlOGNhMC4uNmNhNGZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKQEAgLTIyMiw3ICsyMjIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+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+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NTAwMDAgeworCQkJCWxhYmVsID0gInJlZC4gRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc1MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzYwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlIjsKKwkJCQlyZWcgPSA8MHgwMDc2MDAwMCAweDAwMGEwMDAwPjsKKwkJCX07CisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCAzODM4Yjc3Li4wMzk2Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDc6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMTksMTEgKzIzNywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjM5LDkgKzI1OSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNzMsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOCw2ICszNTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Miw2ICszNjUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2Nyw2ICszOTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1Nyw2ICs0ODIsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ5NSwxMCArNTIxLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxOSw3ICs1NDEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTU4LDE0ICs1NzksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzNiw2ICs2NTcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjQ2LDYgKzY2OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY2NiwyMyArNjg5LDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzEzLDI1ICs3MzYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC03NzUsMTEgKzc4NSwxMiBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4NzcsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtODg1LDEwICs5MDAsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05NTksMTIgKzk3NywxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwNjQsNiArMTA4Miw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNzMsNiArMTA5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDkwLDEwICsxMTEwLDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEwNSwxMSArMTEyOSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTE4LDIzICsxMTQzLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE1OSw3ICsxMTg2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjAwLDExICsxMjI2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKaW5kZXggMjliMGYzNC4uZjVjMDdmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTIgKzU2LDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OCwxMSArODQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNiw3ICsxMTMsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTksNiArMTI1LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyNywxNCArMTQwLDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDcsNyArMTY1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyOCwxMSArMjQ2LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDgsOSArMjY4LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjY0LDYgKzI4NSw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTM0OCw2ICszNzAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Miw2ICszODUsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4Nyw2ICs0MTEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDMxLDcgKzQ1Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC00NTQsMTAgKzQ4Miw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTQ3NSw2ICs0OTksOCBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTAyLDcgKzUyOSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC01MTQsMTEgKzU0MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU0MCw2ICs1NjksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC01ODYsMTQgKzYxNywxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02NDAsOSArNjc0LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjk4LDggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC02ODYsMTAgKzcyNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1OSw2ICs3OTUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc4Nyw2ICs4MjQsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC04MTIsMjMgKzg1MCwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04NDcsMzAgKzg4NSwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTkxMyw2ICs5MzksMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTMyLDEwICs5NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05OTIsMTIgKzEwMjUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDQxLDYgKzEwNzQsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDUwLDYgKzEwODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NywxMCArMTEwMiwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTA5NSwyMyArMTEzNSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExMzYsNyArMTE3OCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE3OCwxMSArMTIxOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCmluZGV4IDA3YjZiMjYuLjRmNzdhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0MCw3ICsxNTgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyMCwxMSArMjM4LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDAsOSArMjYwLDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjUzLDYgKzI3NCw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzI5LDYgKzM1MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQzLDYgKzM2Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY4LDYgKzM5Miw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUwOSw3IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01MDYsMTAgKzUzMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MzIsNiArNTU1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTQwLDcgKzU2NCw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzksMTQgKzYwMiwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ3LDYgKzY3MCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTcsNiArNjgxLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjc2LDIyICs3MDEsMjggQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03MzgsNiArNzY5LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC03NDcsOSArNzgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzc1LDI1ICs4MDYsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODE3LDcgKzgzNSw3IEBACiAjCiAjIExFRCBkcml2ZXJzCiAjCi0jIENPTkZJR19MRURTX0xQNTUyMSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAogCkBAIC04NjYsNiArODg0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC04OTMsNiArOTEyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMiwxMCArOTM1LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTg2LDEyICsxMDEyLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA5MSw2ICsxMTE3LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTEwMCw2ICsxMTI3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMTcsMTAgKzExNDUsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTMyLDExICsxMTY0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTExNDUsMjMgKzExNzgsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTg2LDcgKzEyMjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMjcsMTEgKzEyNjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCBhZmIxYTNkLi5mOTE2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjI1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OSwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEwNSw3ICsxMTIsNiBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsNyArMTM4LDYgQEAKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTEzMyw3ICsxNDUsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Niw3ICsxNjQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI3LDExICsyNDUsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0Nyw5ICsyNjcsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zMzYsNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNTAsNiArMzcyLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzUsNiArMzk4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY3LDYgKzQ5MSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTQ5MiwxMCArNTE3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTE1LDYgKzUzNiw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT1tCiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01MzYsNiArNTU4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTg3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTgyLDE0ICs2MDYsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjM2LDE2ICs2NjMsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcyMiw2ICs3NDksNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc1MCw2ICs3NzgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC03NzYsMjMgKzgwNSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTEsMzAgKzg0MCwxOCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtODcxLDE1ICs4ODgsMTcgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTk5NSw2ICsxMDE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDIyLDYgKzEwNDIsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0MSwxMiArMTA2NSwxNiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CkBAIC0xMTE0LDcgKzExNDIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAxLDYgKzEyMjgsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjEwLDYgKzEyMzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMywyMyArMTI1MiwxMiBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKaW5kZXggODU4NWM3Yy4uNzVjODM1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6NTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDUsNyArMTYzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjUsMTEgKzI0MywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ1LDkgKzI2NSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICsyNzksNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMzNCw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNzEsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3Myw2ICszOTcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM4Miw5ICs0MDcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ4OSw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTAyLDEwICs1MjgsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTI5LDYgKzU1MSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1NjEsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc3LDE0ICs1OTksMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1NCw2ICs2NzYsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjY0LDYgKzY4Nyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY4NSwyMiArNzA5LDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc3Nyw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzU2LDkgKzc4OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc4OSwyNSArODE5LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODUxLDExICs4NjgsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC05NjksNiArOTg3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05OTYsNiArMTAxNSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDE1LDEwICsxMDM4LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTA4OSwxMiArMTExNSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTExOTQsNiArMTIyMCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMDMsNiArMTIzMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIwLDEwICsxMjQ4LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTIzNSwxMSArMTI2NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMjQ4LDIzICsxMjgxLDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTI4OSw3ICsxMzI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMzMxLDExICsxMzY1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwppbmRleCBhMmRmMDYzLi40NjZmMDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNSw5ICs0MzIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15CkBAIC02MjgsNyArNjM1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NTgsMTAgKzY2Nyw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2MCw2ICs3NjYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgxNCw5ICs4MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgzNCw2ICs4MzgsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODgzLDYgKzg5Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTg5NCw3ICs5MDQsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKQEAgLTkzNCw2ICs5NDMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05NDQsNiArOTU0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkwLDYgKzEwMDEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDU3LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDYsNiArMTE1OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjE1LDcgKzEyMjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzI3LDYgKzEzNDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM0NCw2ICsxMzU4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNjUsNyArMTM4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQwNywxMSArMTQyMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKaW5kZXggOTNlYmQ0NC4uNjY5NGZiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTE5LDIwICsxMjEsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDAsNiArMTQxLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTAsNiArMjUzLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Nyw2ICsyNzEsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC0zOTYsOSArNDAyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC01NjUsMTggKzU3MSwxNiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjMsNiArNjY3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5Myw5ICs2OTgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcxMyw3ICs3MTUsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzMyLDYgKzczMyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTc4NCw2ICs3ODYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04NTQsNyArODU3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTI2LDYgKzkyOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTQyLDYgKzk0NSw3IEBACiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKaW5kZXggZmYzM2E3ZC4uODZkZjE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00ODgsNiArNDk1LDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYwNSw2ICs2MTMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY0Myw3ICs2NTIsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzQxLDkgKzc1MiwxMSBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc5MSwxMCArODA0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODk2LDYgKzkwNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTUwLDkgKzk2MSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTg0LDYgKzk5MiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTAzNiw2ICsxMDQ5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA0OCw5ICsxMDYyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDg4LDggKzExMDAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwOTksNiArMTExMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExMTIsNyArMTEyNyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE2NCw2ICsxMTc4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MCw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldApAQCAtMTI3Myw2ICsxMjg5LDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTMzNCw2ICsxMzUxLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzODQsNiArMTQwMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDUzLDcgKzE0NzIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTY5LDYgKzE1ODcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU4Niw2ICsxNjA1LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2MDQsMTAgKzE2MjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYzMCwxMCArMTY1MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2NjAsNyArMTY4Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTcwMiwxMSArMTcyMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZwppbmRleCA3NjIzN2Q0Li43YmY3MWQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI3LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDg4LDYgKzQ5NSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjEzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDQsMTEgKzY1MywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs2ODMsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3MTEsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MDIsOSArODE2LDExIEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODUyLDEwICs4NjgsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NTcsNiArOTcwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDExLDkgKzEwMjUsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTA1NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTA5Nyw2ICsxMTEzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTEwOSw5ICsxMTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTQ5LDggKzExNjQsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTExNjAsNiArMTE3Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNzMsNyArMTE5MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIyNSw2ICsxMjQyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzMTYsNiArMTMzNCw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldApAQCAtMTMzNCw2ICsxMzUzLDcgQEAKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldApAQCAtMTM5NSw2ICsxNDE1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0NDUsNiArMTQ2Niw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTE0LDcgKzE1MzYsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjMwLDYgKzE2NTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY0Nyw2ICsxNjY5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2NjUsMTAgKzE2ODgsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTY5MSwxMCArMTcxNiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE3MjEsNyArMTc0Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTc2MywxMSArMTc4NywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwppbmRleCBlMGUzNmExLi43ZGVmODM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Nyw2ICsyNjAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTA0LDYgKzUxMSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTQyLDcgKzU1MCw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02MTIsNyArNjIyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MzUsNyArNjQ3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjYzLDEwICs2NzQsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTksNiArNzY3LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MTIsOSArODIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzIsNiArODM4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg4MSw2ICs4OTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04OTIsOSArOTA0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTI3LDYgKzkzNyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTkzNyw2ICs5NDgsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05NTAsNyArOTYyLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwNzAsNiArMTA4MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTI4LDcgKzExNDAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjAyLDYgKzEyMTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIxOSw2ICsxMjMxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNDAsNyArMTI1Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTI4MiwxMSArMTI5NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwppbmRleCA0ZjI3ZDQ1Li5iMzk4YjliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Nyw2ICsyNjAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTA3LDYgKzUxNCw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTQ1LDcgKzU1Myw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02MTcsNyArNjI3LDkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY0MCw3ICs2NTIsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC02NjgsMTAgKzY3OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc3Niw2ICs3ODQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgzMCw5ICs4MzksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg2Myw2ICs4NjksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTkxNSw2ICs5MjYsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MjcsOSArOTM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05NjcsOCArOTc3LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05NzgsNiArOTkwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTkxLDcgKzEwMDQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDMsNiArMTA1NSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMTQ2LDYgKzExNTksOCBAQAogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldApAQCAtMTE4Niw2ICsxMjAxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNDcsNyArMTI2Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNjUsNiArMTM4MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzgyLDYgKzEzOTgsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTQwMyw3ICsxNDIwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDQ1LDExICsxNDYxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCmluZGV4IDY0OGRhYzAuLmY2NzMxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjQsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00ODMsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NDUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY3NiwxMSArNjg1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzAzLDYgKzcxNSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzMwLDYgKzc0Myw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTg0NSwxMCArODU5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTMwLDYgKzk0MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTg0LDkgKzk5Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9eQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMTcsNyArMTAyNiw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwNTUsOCArMTA2MywxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTA2Niw2ICsxMDc2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTExMSw2ICsxMTIyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTI4OCw2ICsxMzAxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNTAsNyArMTM2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0NjUsNiArMTQ3OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDgyLDYgKzE0OTYsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTUwMyw3ICsxNTE4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTQ1LDExICsxNTU5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwppbmRleCBiZjZkZWI4Li5hNjY4MTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNCw5ICs0MzEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ4Myw2ICs0OTAsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTg5LDYgKzU5Nyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjI3LDcgKzYzNiw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03MjUsMTAgKzczNiw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxMCw2ICs4MTgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2NCw5ICs4NzMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04OTcsNyArOTAzLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTM1LDggKzk0MCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTQ2LDYgKzk1Myw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MSw2ICs5OTksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9VSENJX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEwNTksNiArMTA2OCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzExMjcsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTE2Nyw2ICsxMTc4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMjksNyArMTI0MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNDQsNiArMTM1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzYxLDYgKzEzNzMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM4Miw3ICsxMzk1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNDI0LDExICsxNDM2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCmluZGV4IDMyMzZjNDcuLmM0ZTkyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NTYsOSArNTYzLDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02MDYsMTAgKzYxNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY5OSw2ICs3MDUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc1Miw5ICs3NTksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc3Miw2ICs3NzYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtODIxLDYgKzgzMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTgzMiw5ICs4NDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04NjcsNiArODc1LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODc3LDYgKzg4Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTg5MCw3ICs5MDAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTAxMCw2ICsxMDE5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjgsNyArMTA3OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExNDAsNiArMTE0OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTU3LDYgKzExNjcsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTE3OCw3ICsxMTg5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjIwLDExICsxMjMwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCmluZGV4IDhjNTI5OWQuLjRmNDM0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU1LDYgKzI1OCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzIsNiArMjc2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjcsNiArMzcyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDAyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MTAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTYsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjMsOSArNDMwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDYgKzU5Miw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjIzLDcgKzYzMSw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02OTMsNyArNzAzLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MTYsNyArNzI4LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNzQ0LDEwICs3NTUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NDAsNiArODQ4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04OTMsOSArOTAyLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MTMsNiArOTE5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk2Miw2ICs5NzMsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NzMsOSArOTg1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTAwOCw2ICsxMDE4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAxOCw2ICsxMDI5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTAzMSw3ICsxMDQzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExNTEsNiArMTE2Miw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjEwLDcgKzEyMjIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMjg0LDYgKzEyOTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMwMSw2ICsxMzEzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzMjIsNyArMTMzNSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTM2NCwxMSArMTM3NiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwppbmRleCBmZjMxNjY3Li5iNTJlYzA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NSw2ICsyNTgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcyLDYgKzI3Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDUsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTAwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYzOSw3ICs2NDcsNiBAQAogQ09ORklHX0ZTTF9QUV9NRElPPXkKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC02NDksMTAgKzY1Niw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc1MCw2ICs3NTQsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgwNCw5ICs4MDksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg1MywxNyArODU1LDIyIEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04OTcsOCArOTA0LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05MDgsNiArOTE3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05OTIsNyArMTAwMiw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDM4LDYgKzEwNDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEwNyw3ICsxMTE3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTE4Myw2ICsxMTkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMDAsNiArMTIxMCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjMyLDcgKzEyNDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyNzQsMTEgKzEyODQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKaW5kZXggZTI4NWVjMC4uNzMwMDYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDIxICsxMjcsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDcsNiArMTQ4LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA0LDcgKzQxMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwMyw2ICs1MTAsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0MiwxMSArNTUwLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY5LDYgKzU4MCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTk2LDYgKzYwOCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY3Miw3ICs2ODUsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcyMCwxMCArNzM1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODE2LDYgKzgyOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY5LDkgKzg4Miw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg5LDYgKzg5OSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MzgsNiArOTUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTQ5LDkgKzk2NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk4NCw2ICs5OTgsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05OTQsNiArMTAwOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMDcsNyArMTAyMyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDcyLDYgKzEwODcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEzMCw3ICsxMTQ2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwNiw2ICsxMjIxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjEsNiArMTIzNyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQyLDcgKzEyNTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyODQsMTEgKzEzMDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKaW5kZXggMWFiM2U0Yy4uOWU5MTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDIxICsxMjcsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDcsNiArMTQ4LDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2Myw2ICszNjgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Miw2ICszOTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk5LDcgKzQwNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0MTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5OCw2ICs1MDUsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01MzcsMTEgKzU0NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1NzUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs2MDMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02MTAsNiArNjIzLDcgQEAKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldApAQCAtNjc4LDcgKzY5Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzA4LDEwICs3MjQsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTMsNiArODI2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjcsOSArODgxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04ODcsNiArODk4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkzNiw2ICs5NTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05NDcsOSArOTY0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTg3LDYgKzEwMDIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTAxMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMTAsNyArMTAyNyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDQ5LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTA4NSw2ICsxMTAyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE2MCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTg4LDYgKzEyMDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI0Niw3ICsxMjY2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTM2MSw2ICsxMzgwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM3Niw2ICsxMzk2LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzOTYsMTIgKzE0MTcsMTMgQEAKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ0MywxMSArMTQ2NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggM2E2OGY4Ni4uNmIzOTkxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQotIyBUdWUgQXVnIDExIDE5OjU3OjUxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyNyArMTI2LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU0LDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzEsNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjYsNiArMzcxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTUsNiArNDAxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMiw3ICs0MDksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTUsNiArNDIxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjIsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02NTEsNyArNjU4LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02ODEsMTAgKzY5MCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc4Niw2ICs3OTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg0MCw5ICs4NDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg2MCw2ICs4NjQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTA5LDYgKzkxOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTkyMCw5ICs5MzAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05NjAsNiArOTY4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTcwLDYgKzk3OSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTgzLDcgKzk5Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzNSw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTExNDgsNiArMTE1OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjA3LDcgKzEyMTgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzA2LDYgKzEzMTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMyMSw2ICsxMzMyLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNDIsNyArMTM1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTM4NCwxMSArMTM5NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKaW5kZXggZmYwNGUxMC4uYTViZGU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEyMywyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKIENPTkZJR19LU0k4NTYwPXkKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNDgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM1NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc3LDYgKzM4NSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODQsNyArMzkzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTgyLDYgKzU5MSw4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC01OTEsMTAgKzYwMiw3IEBACiBDT05GSUdfR0lBTkZBUj15CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcwNCwxMCArNzEyLDE5IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03MTksOSArNzM2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc1NSw3ICs3NzAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODE4LDYgKzgzMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04NzcsNyArODkyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NDUsNiArOTU5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjIsNiArOTc3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk4MSwxMCArOTk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwMDgsMTAgKzEwMjYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTAzOSw3ICsxMDU3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwNzAsMTEgKzEwODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZwppbmRleCBmYjEwY2M4Li5jMTBlMjZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI3ICsxMjksMjggQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODksNiArMTkzLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0NCw2ICsyNDksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYxLDYgKzI2Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ5LDYgKzM1Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM4Niw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODUsNyArMzk0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgzLDE1ICs0OTIsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODgsNiArNTk2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU5OCw5ICs2MTEsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjM0LDcgKzY0NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC02OTYsNiArNzA2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc1NCw3ICs3NjUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTgyMiw2ICs4MzIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODM5LDYgKzg1MCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC04NTcsMTAgKzg2OSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC04ODMsMTAgKzg5NywxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTkxMiw3ICs5MjYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTQzLDExICs5NTYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwppbmRleCA1YzhjZTY5Li44ZDlmMGE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI3LDI5ICsxMzAsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkyLDYgKzE5Niw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUyLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2NCw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2MSw2ICszNjgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MCw2ICszOTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk3LDcgKzQwNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMCw2ICs0MTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUzMCw3ICs1MzksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNTgyLDEwICs1OTMsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTgsMTQgKzcwNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC03MjEsOSArNzM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc0Niw2ICs3NjIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03NTksNyArNzc2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTgyNCw2ICs4NDAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODgyLDcgKzg5OSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTUwLDYgKzk2Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjcsNiArOTg0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk4NSwxMCArMTAwMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDExLDEwICsxMDMxLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTA0MCw3ICsxMDYwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwNzEsMTEgKzEwOTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwppbmRleCAxNThlNjNlLi45YjYzZTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI4ICsxMjksMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0NSw2ICsyNTAsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYyLDYgKzI2OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU5LDYgKzM2Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg4LDYgKzM5Niw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTUsNyArNDA0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA4LDYgKzQxNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTgyLDcgKzU5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjMwLDEwICs2NDEsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MzcsNiArNzQ1LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTc1MSw5ICs3NjQsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzc2LDYgKzc4Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTc4OSw3ICs4MDEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODU0LDYgKzg2NSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05MTIsNyArOTI0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05ODAsNiArOTkxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk5Nyw2ICsxMDA5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwMTUsMTAgKzEwMjgsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA0MSwxMCArMTA1NiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwNzAsNyArMTA4NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTAxLDExICsxMTE1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCmluZGV4IDI3MjZmY2ExLi4xYjIzNTY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyNyArMTI4LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDIsNiArMjQ3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OSw2ICsyNjUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1NSw2ICszNjIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICszOTIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkxLDcgKzQwMCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwNCw2ICs0MTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUyMSw3ICs1MzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTU2OSwxMCArNTgwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc2LDYgKzY4NCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC02OTAsOSArNzAzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxNSw2ICs3MjYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03NTgsNiArNzcwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTgxNiw3ICs4MjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg3Miw2ICs4ODQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODg3LDYgKzkwMCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC05MDcsNyArOTIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkzOCwxMSArOTUxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCmluZGV4IGIwYzQ2OTguLjk1OWQwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDI2ICsxMjksMjcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Miw2ICsyNDcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU5LDYgKzI2NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ3LDYgKzM1NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc2LDYgKzM4NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODMsNyArMzkyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgxLDE1ICs0OTAsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODQsNiArNTkyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU5NCw5ICs2MDcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjMwLDcgKzY0MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03MjEsNiArNzMxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc3OSw3ICs3OTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg0Nyw2ICs4NTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg2Myw2ICs4NzQsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTg4MSwxMCArODkzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTkwNywxMCArOTIxLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtOTQ3LDcgKzk2MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05NzgsMTEgKzk5MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCmluZGV4IDA0Yzg1ZGEuLjdmNWVjMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Myw2ICsxOTcsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKIENPTkZJR19TT0NSQVRFUz15CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Nyw2ICsyNTIsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY0LDYgKzI3MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU4LDYgKzM2NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMyw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjEsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00ODIsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTY2OCw3ICs2NzcsOSBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjk4LDEwICs3MDksNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjUsNiArNzczLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldApAQCAtNzc0LDcgKzc4Myw2IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC04MzQsNiArODQyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODgsOSArODk3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsNiArOTI3LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKIENPTkZJR19IV01PTl9WSUQ9eQorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTk3Myw2ICs5ODQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05ODUsOSArOTk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMDYsOCArMTAxNiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTAxNyw2ICsxMDI5LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTEyLDcgKzExMjUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzUsNiArMTE0Nyw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTE4NCw2ICsxMTk3LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzMTksNiArMTMzMyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzY5LDYgKzEzODQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQzOCw3ICsxNDU0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU1Miw2ICsxNTY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1NjksNiArMTU4NSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNTg5LDcgKzE2MDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTYyMSwxMSArMTYzNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZwppbmRleCBlN2U4MWQ2Li5jODMyN2U4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMiArMTMwLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUwLDcgKzE1Miw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Nyw2ICsyMDEsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjUyLDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjksNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTUsNiArNDYzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ2Miw3ICs0NzEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzUsNiArNDgzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MjIsNiArNjMxLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NjIsNyArNjcyLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTczMiw4ICs3NDQsMTAgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTc4MiwxMCArNzk2LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODI3LDExICs4MzgsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC04NDIsNiArODU3LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC05MDksNiArOTI1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPW0KQEAgLTk2Nyw5ICs5ODQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMDMsMTQgKzEwMTcsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA2MSw2ICsxMDg1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA3Miw5ICsxMDk3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwOTIsNiArMTExNSw3IEBACiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExMDIsNiArMTEyNiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKIENPTkZJR19BR1A9bQorQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT1tCiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CkBAIC0xMTI1LDcgKzExNTAsNiBAQAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE5MCw2ICsxMjE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNTQsNyArMTI3OSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNTIsNiArMTM3Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzY5LDYgKzEzOTQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTM4OCwxMCArMTQxNCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNDE0LDEwICsxNDQyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTQ0Myw3ICsxNDcxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE0NzUsMTEgKzE1MDIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKaW5kZXggMmM0MDc1Mi4uODI1NjM3MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Myw2ICsyNDgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU0LDYgKzM2MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzgzLDYgKzM5MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTAsNyArMzk5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjc3LDkgKzY4NSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzI3LDEwICs3MzcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjQsNiArODMxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NzYsOSArODg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04OTYsNiArOTAxLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NDUsNiArOTU1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTU2LDkgKzk2Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTc3LDYgKzk4Niw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk4Nyw2ICs5OTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMDAsNyArMTAxMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDY1LDYgKzEwNzUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEzNCw3ICsxMTQ1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjAzLDYgKzEyMTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMCw2ICsxMjMxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNDAsNyArMTI1Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjcxLDExICsxMjgyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCmluZGV4IDg0NTczMWQuLjkxZDg1ZDczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKaW5kZXggNGYyMjhhOS4uZGViZTI2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjYsMjIgKzEyOSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0OSw2ICsxNTEsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Niw2ICsyMDAsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjUyLDYgKzI1Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjksNiArMjc1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNzEsNiArMzc4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsNiArNDE5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjAsOSArNDI5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjMwLDcgKzYzOSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjc4LDEwICs2ODksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NzIsNiArNzgwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MjUsOSArODM0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NDUsNiArODUxLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg5NCw2ICs5MDUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MDUsOSArOTE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkyNiw2ICs5MzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtOTQ5LDcgKzk2MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDQyLDYgKzEwNTMsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTExMSw3ICsxMTIzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMTgwLDYgKzExOTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE5Nyw2ICsxMjA5LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEyMTYsMTAgKzEyMjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTI0MiwxMCArMTI1NywxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEyNzEsNyArMTI4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzAzLDExICsxMzE3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCmluZGV4IDkxOTY3MjQuLjc0NTE1NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI5ICsxMjgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Myw2ICsyNjksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1Nyw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkzLDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY4MSw5ICs2ODksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKQEAgLTczMiwxMCArNzQyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODMxLDYgKzgzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg2LDkgKzg5NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDE0ICs5MjYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk3OSw2ICs5OTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05OTAsOSArMTAwNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTl9ERUJVR19DSElQPXkKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAxMiw2ICsxMDI2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDM3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDM1LDcgKzEwNTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTEwMCw2ICsxMTE1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExNjksNyArMTE4NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTUsNiArMTI3MSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjc1LDcgKzEyOTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwNiwxMSArMTMyMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZwppbmRleCAyZTQ5YTZlLi42MzFkOTJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwppbmRleCAxMDI1ZGEyLi41MmFjYmFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OSwxMSArOTEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyOCwyMiArMTMxLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUxLDcgKzE1Myw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIwMSw2ICsyMDUsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogQ09ORklHX1hFU19NUEM4NXh4PXkKQEAgLTI1Niw2ICsyNjEsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA1LDYgKzQxMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQ2LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ1Nyw5ICs0NjYsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTYzNSw2ICs2NDQsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzQsMTEgKzY4NCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzI4LDYgKzc0Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTgwNCw3ICs4MTksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTgzNCwxMCArODUxLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTUxLDYgKzk2NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAwNiw4ICsxMDIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDEsMTQgKzEwNTQsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA5OSw2ICsxMTIyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTExMCw5ICsxMTM0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE1MSw2ICsxMTczLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE2MSw2ICsxMTg0LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTE4MSw3ICsxMjA1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjA0LDYgKzEyMjcsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEyNDksNiArMTI3Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lTUDE3NjBfSENEPXkKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTQ2Niw2ICsxNDkxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NDEsNyArMTU2Nyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2NTgsNiArMTY4Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjc1LDYgKzE3MDEsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTY5NCwxMCArMTcyMSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE3MjAsMTAgKzE3NDksMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzQ5LDcgKzE3NzgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3OTAsMTEgKzE4MTgsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggNTI3YWQxYS4uMjg5ODA3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjozMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Niw2ICsyNTksNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDY0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDY3LDkgKzQ3NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02ODAsNiArNjg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzE5LDEyICs3MjcsMTUgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03NDcsNiArNzU4LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03NzUsNiArNzg3LDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NTEsNyArODY0LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04ODEsMTAgKzg5Niw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTEwMTYsNiArMTAyOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA3MSw5ICsxMDg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTEwNiwxNCArMTExNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTY0LDYgKzExODQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTc1LDkgKzExOTYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMjE3LDYgKzEyMzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMjQ3LDcgKzEyNjgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzAsNiArMTI5MCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEzMjIsNiArMTM0Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTEzOTcsNiArMTQxOSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xNTAxLDYgKzE1MjQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTU3Niw3ICsxNjAwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTY4Miw2ICsxNzA1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjk3LDYgKzE3MjEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTcxOCw3ICsxNzQzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE3NjEsMTEgKzE3ODUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz1tCiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKaW5kZXggY2QzMzhkNC4uZTE5OWQxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEyICsxNTMsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU2LDYgKzI1OSw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0NjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NjcsOSArNDc0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTY4MCw2ICs2ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03MTksMTIgKzcyNywxNSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC03OTYsNyArODA3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MjYsMTAgKzgzOSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk2MSw2ICs5NzEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMTYsOSArMTAyNyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNTEsMTQgKzEwNTksMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTEwOSw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTEyMCw5ICsxMTM5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE2Miw2ICsxMTc5LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE3Miw2ICsxMTkwLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTE5Miw3ICsxMjExLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjE1LDYgKzEyMzMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjY3LDYgKzEyODYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzQyLDYgKzEzNjIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTQ0Niw2ICsxNDY3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MjEsNyArMTU0Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2MjcsNiArMTY0OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY0Miw2ICsxNjY0LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE2NjMsNyArMTY4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNzA2LDExICsxNzI4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IGJhNDc4ODMuLjNiMGZiZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjozMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjEgKzEzMywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MywxMiArMTU0LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Nyw2ICsyNjAsNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC01MDMsNiArNTA4LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiBDT05GSUdfVElQQz1tCiAjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldApAQCAtNTgyLDYgKzU4OCw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTU4OSw3ICs1OTYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MDIsNiArNjA4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MTEsOSArNjE4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNzgwLDYgKzc4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTgxOSwxMSArODI3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtODQ2LDYgKzg1Nyw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtODczLDYgKzg4NSw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTk0OSw3ICs5NjIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTk3OSwxMCArOTk0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTEyMCw2ICsxMTMyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMTc1LDkgKzExODgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMjExLDE0ICsxMjIxLDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEyNjksNiArMTI4OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEyODAsOSArMTMwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEzMjIsNiArMTM0MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEzMzIsNiArMTM1Miw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEzNTIsNyArMTM3Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3NSw2ICsxMzk1LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTQyNyw2ICsxNDQ4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTUwMiw2ICsxNTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKQEAgLTE2MDcsNiArMTYzMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNjY5LDcgKzE2OTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNzc1LDYgKzE3OTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE3OTEsNiArMTgxNSw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTgxMCwxMCArMTgzNSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xODM3LDEwICsxODY0LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTg3Miw3ICsxODk5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE5MTUsMTEgKzE5NDEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKaW5kZXggYTYxZjE4My4uZGU0ZDUyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODMsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjYsMjIgKzEyOCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE0OSw2ICsxNTAsOCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MSw2ICsyNTQsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY4LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzg1LDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDE0LDYgKzQyMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjEsNyArNDI4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM0LDYgKzQ0MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ0NSw5ICs0NTIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC02NjIsNiArNjY5LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzAxLDExICs3MDksMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzI4LDYgKzczOSw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTc1NSw2ICs3NjcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MTgsMTQgKzgzMSwxMyBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkyOSw2ICs5NDEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTgyLDkgKzk5NSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTAwMiw3ICsxMDEyLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjEsNiArMTAzMCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMzEsNiArMTA0MSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExMDcsNiArMTExOCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMjA5LDcgKzEyMjEsNiBAQAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTMyOSw2ICsxMzQwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTM4OCw3ICsxNDAwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUwNSw2ICsxNTE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjIsNiArMTUzNCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNTQxLDEwICsxNTU0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE1NjcsMTAgKzE1ODIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNTk3LDcgKzE2MTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTYyOSwxMSArMTY0MywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggNzAxNmNlNy4uNzU0YTc5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODcsMTEgKzg4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjIgKzEzMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1Myw3ICsxNTQsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTEsMTMgKzI1NCwxMyBAQAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzUsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDA4LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDM0LDYgKzQzOSw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0MSw3ICs0NDcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NTQsNiArNDU5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTQ2LDYgKzU1Miw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTg1LDExICs1OTIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjEyLDYgKzYyMiw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzOSw2ICs2NTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MTUsNyArNzI3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03NjMsMTAgKzc3Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4MCw2ICs4OTEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTM0LDkgKzk0Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTU0LDcgKzk2Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05NzMsNiArOTgxLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTgzLDYgKzk5Miw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwMDIsNiArMTAxMiw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTEwNSw3ICsxMTE2LDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEyOCw2ICsxMTM4LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE4MCw2ICsxMTkxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMzU4LDYgKzEzNzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQyOCw3ICsxNDQxLDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NDYsNiArMTU1OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTYzLDYgKzE1NzYsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU4MiwxMCArMTU5NiwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNjA4LDEwICsxNjI0LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTYzOCw3ICsxNjU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNjgwLDExICsxNjk1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKaW5kZXggZjVjYTJlMC4uODk5OTFmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg3LDExICs4OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTMgKzE1MywxNSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCiAjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTcsNiArMjYwLDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNTAyLDYgKzUwNyw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQogIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU4MSw2ICs1ODcsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC01ODgsNyArNTk1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjAxLDYgKzYwNyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjEwLDkgKzYxNyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTgzMyw3ICs4NDAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg2MywxMCArODcyLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTk2LDYgKzEwMDIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwNDksOSArMTA1Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA2OSw2ICsxMDczLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMTgsNiArMTEyNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMjksOSArMTEzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNjQsNiArMTE3Miw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTE4Myw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTQsNyArMTIwNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMjc0LDYgKzEyODMsNyBAQAogIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQzLDcgKzEzNTMsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQ1MSw2ICsxNDYwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ2Nyw2ICsxNDc3LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNDg2LDEwICsxNDk3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE1MTQsMTAgKzE1MjcsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTU1MCw3ICsxNTYzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE1OTMsMTEgKzE2MDUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKaW5kZXggYWVjZTZiYi4uMDUyY2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03OCwxMSArODAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNiwyOCArMTE5LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM1LDEwICsyMzksMTAgQEAKICMgQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU2LDYgKzI2MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzM4LDYgKzM0Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzQsNyArMzgxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzg3LDYgKzM5Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTMwLDE2ICs1MzcsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01ODAsNiArNTg2LDcgQEAKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01OTAsNiArNTk3LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03MTYsNiArNzI0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzc1LDcgKzc4NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg0Nyw2ICs4NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjQsNiArODczLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04ODAsMTAgKzg5MCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC05MDYsMTAgKzkxOCwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZwppbmRleCA4MTA1MzYwLi4wZmI2NWE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1k9eQpAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs5MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTM1LDIzICsxMzgsMjQgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKQEAgLTE2MSwxMiArMTY1LDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjc1LDEyICsyODEsMTIgQEAKIENPTkZJR19CSU5GTVRfTUlTQz15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjk4LDYgKzMwNCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzA5LDYgKzMxNiw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtNjc0LDEwICs2ODIsMTIgQEAKICMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkZVU0I9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTY4Niw3ICs2OTYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02OTksNiArNzA4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNzEwLDkgKzcyMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPW0KIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC03NjMsNiArNzczLDcgQEAKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTg1Nyw2ICs4NjgsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQ9bQogQ09ORklHX1NDU0lfM1dfOVhYWD1tCiBDT05GSUdfU0NTSV9BQ0FSRD1tCkBAIC05MTIsNyArOTI0LDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTk4Miw3ICs5OTYsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTEwMTAsMTAgKzEwMjYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMTQ1LDYgKzExNTgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9bQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEyMDAsOSArMTIxNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19TRU5TT1JTX1BDRjg1NzQ9bQotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEyMjAsNiArMTIzMSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj1tCiBDT05GSUdfSFdNT05fVklEPW0KKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQEAgLTEyNjksNiArMTI4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVklBNjg2QT1tCiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMjgwLDcgKzEyOTcsNiBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkBAIC0xMzE3LDYgKzEzMzMsNyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEzMjcsNiArMTM0NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTM3OCw2ICsxMzk2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1ODgsNiArMTYwNyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNjY4LDcgKzE2ODgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNzcwLDcgKzE3ODksNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDX1QxMERJRj1tCiBDT05GSUdfQ1JDX0lUVV9UPW0KIENPTkZJR19DUkMzMj15CkBAIC0xNzk3LDYgKzE4MTYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xODE0LDYgKzE4MzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKQEAgLTE4MzQsMTEgKzE4NTUsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTE4NTIsNiArMTg3NSw3IEBACiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQpAQCAtMTg2OSw2ICsxODkzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE4OTksNiArMTkyNCw3IEBACiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfTFNNX01NQVBfTUlOX0FERFI9NjU1MzYKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTT15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1fVkFMVUU9MQpAQCAtMTkxMyw3ICsxOTM5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPW0KQEAgLTE5NTYsMTEgKzE5ODEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCmluZGV4IDBhYTViNDMuLmVmNWVkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExNiwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1MCw2ICsxNTMsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMyw2ICsyMzcsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM5NCw2ICs0MDAsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAxLDcgKzQwOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MTMsNiArNDE5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MDAsNyArNjA3LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY0OCwxMCArNjU3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzM2LDE1ICs3NDIsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc2Nyw2ICs3NzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk2OCw2ICs5NzksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk5OCwxMCArMTAxMCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDI0LDYgKzEwMzgsNyBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMDUyLDcgKzEwNjcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEwOTQsNiArMTEwOCw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKaW5kZXggMmMyOTJlMi4uNzNlZjliZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc3LDExICs3OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE1LDI4ICsxMTgsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMzQsMTAgKzIzOCwxMCBAQAogQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU1LDYgKzI1OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzM3LDYgKzM0Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY2LDYgKzM3Miw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzMsNyArMzgwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5Miw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTI5LDE2ICs1MzYsMTUgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MTEsNyArNjE3LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY3Miw2ICs2NzcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03MzEsNyArNzM3LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODAzLDYgKzgwOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODIwLDYgKzgyNiw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODM2LDEwICs4NDMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtODYxLDEwICs4NzAsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKaW5kZXggNDU2NzFlNy4uNjNjM2U4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODMsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzEsMjIgKzEzMywyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDExICsxNTUsMTMgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTgsNiArMjYxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NSw2ICsyNzksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQ4Miw2ICs0ODcsNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNTExLDYgKzUxNyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC01MTksNyArNTI2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTMyLDYgKzUzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0Myw5ICs1NTAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTcxMSw2ICs3MTgsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTc1MCwxMSArNzU4LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzc3LDYgKzc4OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtODA0LDYgKzgxNiw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTg3MCw3ICs4ODMsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTkxOCwxMCArOTMzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTA0Myw2ICsxMDU1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDk3LDkgKzExMTAsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTExMTcsNiArMTEyNywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTY2LDYgKzExODEsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTc3LDkgKzExOTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTE5OCw2ICsxMjEyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTIwOCw2ICsxMjIzLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTIyNyw3ICsxMjQzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcxLDYgKzEyODYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTUwMCw2ICsxNTE2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NjcsNyArMTU4NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2ODEsNiArMTY5Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY5OCw2ICsxNzE1LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE3MTYsMTAgKzE3MzQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTc0Miw2ICsxNzYyLDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE3NzEsNyArMTc5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTgxMywxMSArMTgzMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKaW5kZXggMzBiNjhiZi4uNTIwYjA0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQotIyBGcmkgQXVnICA3IDA4OjE5OjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyMywyOCArMTI1LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0Nyw2ICsyNTAsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI2MCw2ICsyNjQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM5MCw2ICszOTUsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk3LDcgKzQwMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MDksNiArNDE0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC02MDgsNyArNjE0LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02MTYsMTAgKzYyNCw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjg1LDYgKzY5MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzQwLDcgKzc0Niw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTc3MSwxNSArNzc2LDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03OTksNiArODA4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODA5LDYgKzgxOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAyMiw2ICsxMDMzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA1MiwxMCArMTA2NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDc5LDYgKzEwOTMsNyBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwOSw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTUxLDYgKzExNjUsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCmluZGV4IDFhZTg1YTMuLjQzYzNjNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NiwxMSArNzgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNywyNyArMTIwLDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM3LDEwICsyNDEsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0NCw2ICszNDksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Myw2ICszNzksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgwLDcgKzM4Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTU1MywxNiArNTU5LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX0ZFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUX01ESU9fRkVDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MzUsNyArNjQwLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcwNyw2ICs3MTEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzc2LDcgKzc4MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg1MSw2ICs4NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs4NzAsNyBAQAogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC04ODcsNyArODkzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkxOCwxMSArOTIzLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKaW5kZXggYWFhNDQxNi4uNTIzZDVmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgTW9uIEFwciAyMCAxMTowNjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKQEAgLTUzLDEyICs1NywxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzksMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEwMyw3ICsxMTAsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTYsNiArMTIyLDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyNCwxNCArMTM3LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDQsNyArMTYyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIwNSw3ICsyMjMsNyBAQAogQ09ORklHX1BQQ19CRVNUQ09NTT15CiBDT05GSUdfUFBDX0JFU1RDT01NX0FUQT15CiBDT05GSUdfUFBDX0JFU1RDT01NX0ZFQz15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU0lNUExFX0dQSU89eQogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMjksMTEgKzI0NywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ5LDkgKzI2OSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI2NSw2ICsyODYsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zNDksNiArMzcxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzg2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODgsNiArNDEyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsOSArNDIyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NTgsNiArNDgzLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQ5Myw2ICs1MTksNyBAQAogQ09ORklHX09GX0dQSU89eQogQ09ORklHX09GX0kyQz15CiBDT05GSUdfT0ZfU1BJPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MjksNyArNTU2LDkgQEAKIENPTkZJR19FRVBST01fQVQyND15CiAjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NTIsMTAgKzU4MSw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01NzIsNiArNTk3LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTgwLDYgKzYwNyw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC01OTksNyArNjI3LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYxMSwxMSArNjM4LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjM3LDYgKzY2Nyw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjY1LDYgKzY5Niw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY4NCwxNCArNzE2LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTczOSwxNiArNzc0LDE3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODU0LDYgKzg5MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD15CkBAIC04ODMsNiArOTIwLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKQEAgLTkxMCwxMCArOTQ4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTM1LDYgKzk2OSwxMSBAQAogIwogQ09ORklHX1NQSV9TUElERVY9bQogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CkBAIC05NTcsMTYgKzk5NiwyNyBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwMTksNiArMTA2OSw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDMxLDkgKzEwODMsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwNzMsMzEgKzExMjMsMjAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT15CiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CkBAIC0xMTY3LDYgKzEyMDYsNyBAQAogIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KKyMgQ09ORklHX0xDRF9MTVMyODNHRjA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKQEAgLTExOTgsNyArMTIzOCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNywxMCArMTI1NiwxMSBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMjMxLDEwICsxMjcxLDExIEBACiAjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEyNjEsMTUgKzEzMDIsMTcgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtMTQwMCw2ICsxNDQzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDExLDYgKzE0NTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTQzNCw2ICsxNDc5LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NTMsMTAgKzE1MDIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNTMzLDEyICsxNTg1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTYyNCw2ICsxNjc2LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTYzMyw2ICsxNjg2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NTAsMTAgKzE3MDQsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xNjY1LDExICsxNzIzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTE2NzgsMjMgKzE3MzcsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xNzE5LDcgKzE3ODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3NjEsMTEgKzE4MjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCmluZGV4IGYyMzQyOGMuLmQ4YjM2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjMsMjggKzEyNSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0MSw2ICsyNDQsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU4LDYgKzI2Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzUwLDYgKzM1NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc5LDYgKzM4NSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODYsNyArMzkzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk5LDYgKzQwNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDc4LDYgKzQ4NSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTE3LDExICs1MjUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NDMsNiArNTU0LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NzAsNiArNTgyLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjY2LDkgKzY3OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzE1LDEwICs3MzAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjIsNiArODM0LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTgzNiw5ICs4NTMsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODYxLDYgKzg3Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTg3NCw3ICs4OTAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtOTM5LDYgKzk1NCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05OTcsNyArMTAxMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA2OSw2ICsxMDg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwODYsNiArMTEwMiw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMTA3LDcgKzExMjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTEzOCwxMSArMTE1NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKaW5kZXggMDI3MTZmNy4uMDBmYWQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTYsMjkgKzExOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTEsNiArMTU0LDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzYsNiArMjQwLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNDksNiArMjU0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDE2LDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDc3LDcgKzQ4NCw2IEBACiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1NCQzgyNDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTYwNCw3ICs2MTAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNjUyLDEwICs2NjAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MDQsNiArNzA5LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTcxNCw2ICs3MjAsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKQEAgLTc5MywxNSArODAwLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjQsNiArODM1LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDMyLDYgKzEwNDQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjcsMTAgKzEwODAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA5Myw2ICsxMTA4LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEyMSw3ICsxMTM3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTYzLDYgKzExNzgsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKaW5kZXggNGE5NmNiNi4uNjRkZmYyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg2LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI3LDIxICsxMjksMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUwLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNjMsNiArMjY2LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4MCw2ICsyODQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0Myw3ICszNDgsOCBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMzU4LDcgKzM2NCw3IEBACiAjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM3Nyw2ICszODMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MTMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDEzLDcgKzQyMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyNiw2ICs0MzMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQzMyw5ICs0NDEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02MDgsNiArNjE2LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDcsMTEgKzY1NiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY3NCw2ICs2ODYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcwMSw2ICs3MTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03NzcsNyArNzkxLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MDAsNyArODE2LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTgyOCwxMCArODQzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTM1LDYgKzk0Nyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTkwLDkgKzEwMDMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMjUsMTQgKzEwMzUsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA4Myw2ICsxMTAzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA5NCw5ICsxMTE1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTEzNSw2ICsxMTU0LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTE0NSw2ICsxMTY1LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTE1OCw3ICsxMTc5LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTgxLDYgKzEyMDEsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjMzLDYgKzEyNTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSENJX0hDRCBpcyBub3Qgc2V0CkBAIC0xMjkxLDYgKzEzMTMsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTMzOCw2ICsxMzYxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzOTcsNyArMTQyMSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MTQsNiArMTUzNyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTI5LDYgKzE1NTMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTU1MCw3ICsxNTc1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE1OTEsMTMgKzE2MTUsMTUgQEAKICMKICMgSGFzaCBtb2RlcwogIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2MDUsMTYgKzE2MzEsMTYgQEAKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCBlZTZhY2M2Li5hMTJlN2JhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjU6MjAgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs5MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIyICsxMzQsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTQsNyArMTU2LDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg5LDYgKzE5Myw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTIwNiw3ICsyMTEsNyBAQAogQ09ORklHX01QQzg1eHhfUkRCPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CitDT05GSUdfWEVTX01QQzg1eHg9eQogQ09ORklHX1NUWF9HUDM9eQogQ09ORklHX1RRTTg1NDA9eQogQ09ORklHX1RRTTg1NDE9eQpAQCAtMjU5LDEwICsyNjQsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjgwLDYgKzI4NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzA3LDcgKzMxMyw3IEBACiBDT05GSUdfUENJX1NZU0NBTEw9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9NU0k9eQogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldApAQCAtMzE1LDcgKzMyMSw4IEBACiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogQ09ORklHX0hBU19SQVBJRElPPXkKLSMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAorQ09ORklHX1JBUElESU89eQorQ09ORklHX1JBUElESU9fRElTQ19USU1FT1VUPTMwCiAKICMKICMgQWR2YW5jZWQgc2V0dXAKQEAgLTM0NSw3ICszNTIsNyBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX05FVF9LRVk9bQorQ09ORklHX05FVF9LRVk9eQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzY5LDEyICszNzYsMTIgQEAKIENPTkZJR19BUlBEPXkKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorQ09ORklHX0lORVRfRVNQPXkKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfVFVOTkVMPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CkBAIC00MTEsNiArNDE4LDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQxLDYgKzQ0OSw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0OCw3ICs0NTcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjEsNiArNDY5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTU0LDYgKzU2Myw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTkzLDExICs2MDMsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjIwLDYgKzYzMyw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0Nyw2ICs2NjEsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MjMsNyArNzM4LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC03NTAsNyArNzY3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTc3OCwxMCArNzk0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzk4LDYgKzgxMSw3IEBACiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SSU9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldApAQCAtODk4LDYgKzkxMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NTUsOSArOTcwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05OTEsMTUgKzEwMDMsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjAsNiArMTAzNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMzAsNiArMTA0Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwNDksNiArMTA2Nyw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTE1Miw3ICsxMTcxLDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3NSw2ICsxMTkzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjQ2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMjQxLDcgKzEyNjEsNiBAQAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xNDI5LDYgKzE0NDgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ5OSw3ICsxNTE5LDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2MjAsNiArMTYzOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTYzNyw2ICsxNjU3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2NTYsMTAgKzE2NzcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTY4MywxMCArMTcwNiwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzE0LDcgKzE3MzcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTc1NywxMSArMTc3OSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNzY5LDE2ICsxNzkzLDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKaW5kZXggZGIwODJjZS4uY2Q3MGI0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjY6MDEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OSwxMSArOTEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMiwyMiArMTM1LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU1LDggKzE1NywxMCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkyLDYgKzE5Niw3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKQEAgLTIwNiw5ICsyMTEsMTAgQEAKIENPTkZJR19NUEM4NXh4X01EUz15CiBDT05GSUdfTVBDODUzNl9EUz15CiBDT05GSUdfTVBDODV4eF9EUz15CitDT05GSUdfTVBDODV4eF9SREI9eQogQ09ORklHX1NPQ1JBVEVTPXkKIENPTkZJR19LU0k4NTYwPXkKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKK0NPTkZJR19YRVNfTVBDODV4eD15CiBDT05GSUdfU1RYX0dQMz15CiBDT05GSUdfVFFNODU0MD15CiBDT05GSUdfVFFNODU0MT15CkBAIC0yNjEsMTEgKzI2NywxMSBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKIENPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjgzLDYgKzI4OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzEwLDcgKzMxNyw3IEBACiBDT05GSUdfUENJX1NZU0NBTEw9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9NU0k9eQogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldApAQCAtMzE4LDcgKzMyNSw4IEBACiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogQ09ORklHX0hBU19SQVBJRElPPXkKLSMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAorQ09ORklHX1JBUElESU89eQorQ09ORklHX1JBUElESU9fRElTQ19USU1FT1VUPTMwCiAKICMKICMgQWR2YW5jZWQgc2V0dXAKQEAgLTM0OCw3ICszNTYsNyBAQAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX05FVF9LRVk9bQorQ09ORklHX05FVF9LRVk9eQogIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzcyLDEyICszODAsMTIgQEAKIENPTkZJR19BUlBEPXkKICMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorQ09ORklHX0lORVRfRVNQPXkKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfVFVOTkVMPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CkBAIC00MTQsNiArNDIyLDcgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQ0LDYgKzQ1Myw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ1MSw3ICs0NjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjQsNiArNDczLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTU3LDYgKzU2Nyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTk2LDExICs2MDcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjIzLDYgKzYzNyw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY1MCw2ICs2NjUsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MjYsNyArNzQyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKIENPTkZJR19GU19FTkVUX0hBU19TQ0M9eQogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC03NTMsNyArNzcxLDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTc4MSwxMCArNzk4LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODAxLDYgKzgxNSw3IEBACiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SSU9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldApAQCAtOTAxLDYgKzkxNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NTgsOSArOTc0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05OTQsMTUgKzEwMDcsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjMsNiArMTA0MCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMzMsNiArMTA1MSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTEwNTIsNiArMTA3MSw3IEBACiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTE1NSw3ICsxMTc1LDYgQEAKIENPTkZJR19BQzk3X0JVUz15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3OCw2ICsxMTk3LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzMCw2ICsxMjUwLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CkBAIC0xMjQ0LDcgKzEyNjUsNiBAQAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xNDMyLDYgKzE0NTIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTUwMiw3ICsxNTIzLDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2MjMsNiArMTY0Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY0MCw2ICsxNjYxLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2NTksMTAgKzE2ODEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTY4NiwxMCArMTcxMCwxMCBAQAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzE3LDcgKzE3NDEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTc2MCwxMSArMTc4MywxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNzcyLDE2ICsxNzk3LDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCmluZGV4IDY4MDliNjEuLjQwZDZmMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTE2LDYgKzE2LDcgQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzh4eD15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfUFBDMzI9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTc2LDExICs3OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTEzLDI4ICsxMTYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMzMsMTAgKzIzNywxMCBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjU0LDYgKzI1OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQwLDYgKzM0NSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzY5LDYgKzM3NSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzYsNyArMzgzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY3LDYgKzQ3Myw4IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQpAQCAtNDc2LDEwICs0ODQsNyBAQAogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTUyMCw2ICs1MjUsNyBAQAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTUzMCw2ICs1MzYsNyBAQAogQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQogQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKICMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MDIsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjA1LDkgKzYxNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02NDEsNyArNjUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTcwNSw2ICs3MTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzYzLDcgKzc3Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTgzNiw2ICs4NDUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODUxLDYgKzg2MSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC04NzEsNyArODgyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkwMiwxMSArOTEyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKaW5kZXggMGU4Njg0YS4uNWIzYWJiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIyICsxMzMsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTQsNyArMTU1LDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUzLDEzICsyNTYsMTMgQEAKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc3LDYgKzI4MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA2LDYgKzQxMCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzNiw2ICs0NDEsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDMsNyArNDQ5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDU2LDYgKzQ2MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0OSw2ICs1NTUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4OCwxMSArNTk1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxNSw2ICs2MjUsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDIsNiArNjUzLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzE4LDcgKzczMCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzY2LDEwICs3ODAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04ODMsNiArODk0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTkzOCw5ICs5NTAsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk3NCwxNSArOTgzLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDAzLDYgKzEwMTYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDEzLDYgKzEwMjcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDMyLDYgKzEwNDcsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExMzUsNyArMTE1MSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNTgsNiArMTE3Myw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMTAsNiArMTIyNiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTM4OSw2ICsxNDA2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0NTksNyArMTQ3Nyw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTc3LDYgKzE1OTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU5NCw2ICsxNjEyLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2MTMsMTAgKzE2MzIsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYzOSwxMCArMTY2MCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2NjksNyArMTY5MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTcxMSwxMSArMTczMSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCmluZGV4IGRiZThlODY5Li4xZGEzNDg4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NywxMSArNzksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNSwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjQxLDEwICsyNDUsMTAgQEAKIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Miw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0NCw2ICszNDksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Myw2ICszNzksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgwLDcgKzM4Nyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICszOTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU0MCwxNiArNTQ3LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjIyLDcgKzYyOCw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02ODMsNiArNjg4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzQyLDcgKzc0OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTgxNCw2ICs4MTksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgzMSw2ICs4MzcsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTg0NywxMCArODU0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTg3MiwxMCArODgxLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKaW5kZXggNGY4NjgxYy4uMjBiYTBjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCkBAIC0xLDQ5ICsxLDU4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmMzCi0jIFR1ZSBNYXkgMjcgMTY6MDg6MDYgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjMworIyBUdWUgT2N0ICA2IDEwOjI3OjE4IDIwMDkKICMKIENPTkZJR19QUEM2ND15CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKK0NPTkZJR19QUENfQk9PSzNTXzY0PXkKKyMgQ09ORklHX1BQQ19CT09LM0VfNjQgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM1M9eQogQ09ORklHX1BPV0VSNF9PTkxZPXkKIENPTkZJR19QT1dFUjQ9eQogIyBDT05GSUdfVFVORV9DRUxMIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKKyMgQ09ORklHX1ZTWCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzY0PXkKIENPTkZJR19QUENfTU1fU0xJQ0VTPXkKICMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHXzY0QklUPXkKIENPTkZJR19XT1JEX1NJWkU9NjQKLUNPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQorQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogQ09ORklHX1BQQ19PRj15CiBDT05GSUdfT0Y9eQpAQCAtNTEsMTEgKzYwLDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcyLDEwICs4NCwyMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTg0LDEzICsxMDYsMTcgQEAKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtOTgsMzIgKzEyNCw1MiBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMzEsMTEgKzE3NywxMCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DS19DT01QQVQ9eQogCiAjCkBAIC0xNTAsMTkgKzE5NSwxNCBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BBU0VNST15CkBAIC0xNzgsOCArMjE4LDEwIEBACiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMRUIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfUVBBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTkFUSVZFPXkKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKICMgQ09ORklHX0lQSUMgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CkBAIC0yMTMsNiArMjU1LDcgQEAKICMKIENPTkZJR19QUENfUEFTRU1JX0NQVUZSRVE9eQogIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMjYsMTYgKzI2OSwxOSBAQAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19IWj0xMDAwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQogQ09ORklHX0lPTU1VX1ZNRVJHRT15CiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CkBAIC0yNDMsNiArMjg5LDcgQEAKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CkBAIC0yNTMsMjAgKzMwMCwyOCBAQAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfSEFTX0hBU0hfNjRLPXkKKyMgQ09ORklHX1BQQ180S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfNjRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKICMgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CkBAIC0yODUsNiArMzQwLDggQEAKIENPTkZJR19QQ0lfTVNJPXkKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQogQ09ORklHX1BDTUNJQV9ERUJVRz15CiBDT05GSUdfUENNQ0lBPXkKQEAgLTMwMSwxMyArMzU4LDEwIEBACiBDT05GSUdfRUxFQ1RSQV9DRj15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMDAwMDAwMDAwCiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAwMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMzU2LDkgKzQxMCwxMSBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zNjgsMjUgKzQyNCwzMiBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzk4LDE1ICs0NjEsMTkgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0CiAKQEAgLTQ3OCwxMSArNTQ1LDE3IEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTAxLDI5ICs1NzQsNDEgQEAKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fTEVHQUNZPXkKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKICMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVTQ1NJPXkKIENPTkZJR19JREVfVEFTS19JT0NUTD15CiBDT05GSUdfSURFX1BST0NfRlM9eQogCkBAIC01NDIsMTQgKzYyNywxMyBAQAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKQEAgLTU2Myw4ICs2NDcsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEX09OTFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydApAQCAtNTg2LDEwICs2NjgsNiBAQAogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKIENPTkZJR19DSFJfREVWX1NDSD15Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQpAQCAtNjA2LDYgKzY4NCw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjE0LDExICs2OTQsMTYgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKQEAgLTYyNiw3ICs3MTEsNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjM3LDEwICs3MjEsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTDI0PXkKQEAgLTY2Miw2ICs3NTAsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY5MCw2ICs3NzksNyBAQAogQ09ORklHX1BBVEFfUENNQ0lBPXkKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MDMsMTIgKzc5MywxNSBAQAogIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPXkKIENPTkZJR19NRF9SQUlENDU2PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKKyMgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENl9QUT15CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtNzI1LDEyICs4MTgsMTkgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVk9eQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTc1Myw2ICs4NTMsOSBAQAogIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03NjEsMTkgKzg2NCwyMyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC03ODMsMTkgKzg5MCwyMiBAQAogIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC04MDYsMzAgKzkxNiw0MCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKIENPTkZJR19QQVNFTUlfTUFDPXkKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC04NzQsMTcgKzk5NCwyMyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTkwMCw2ICsxMDI2LDcgQEAKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKQEAgLTkyNiwxMCArMTA1MywxMyBAQAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET01fUEFTRU1JPXkKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTk0OCw1NyArMTA3OCw4NSBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfUEFTRU1JPXkKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BBU0VNST15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk9NX0xFR0FDWT15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKIENPTkZJR19IV01PTl9WSUQ9eQorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtMTAwNiwxNCArMTE2NCwxNyBAQAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTEwMjgsMTAgKzExODksMTQgQEAKIENPTkZJR19TRU5TT1JTX0xNOTA9eQogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CkBAIC0xMDM5LDYgKzEyMDQsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA1MCw0NCArMTIxNyw0MCBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT15CitDT05GSUdfRFJNX0tNU19IRUxQRVI9eQorQ09ORklHX0RSTV9UVE09eQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAogQ09ORklHX0RSTV9SQURFT049eQpAQCAtMTA5OSw2ICsxMjYyLDcgQEAKIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15CiBDT05GSUdfRkJfRERDPXkKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC0xMTQwLDYgKzEzMDQsNyBAQAogIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKQEAgLTExNDgsMTIgKzEzMTMsMTYgQEAKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKICMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0NPUkdJIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtMTE3NywxNSArMTM0Niw5IEBACiBDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTE5OCwyNCArMTM2MSwyNCBAQAogQ09ORklHX1NORF9QQ01fT1NTPXkKIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUkFXTUlESV9TRVE9eQorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIFBDSSBkZXZpY2VzCi0jCitDT05GSUdfU05EX1BDST15CiAjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldApAQCAtMTIzNCw2ICsxMzk3LDcgQEAKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKQEAgLTEyNDYsNiArMTQxMCw4IEBACiAjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC0xMjYyLDYgKzE0MjgsNyBAQAogIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldApAQCAtMTI3Nyw1NyArMTQ0NCw2NCBAQAogIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFBvd2VyTWFjIGRldmljZXMKLSMKLQotIwotIyBBTFNBIFBvd2VyUEMgZGV2aWNlcwotIwotCi0jCi0jIFVTQiBkZXZpY2VzCi0jCitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1VTQj15CiBDT05GSUdfU05EX1VTQl9BVURJTz15CiBDT05GSUdfU05EX1VTQl9VU1gyWT15CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ01DSUE9eQogIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgU29DIGF1ZGlvIGZvciBGcmVlc2NhbGUgU09DcwotIwotCi0jCi0jIFNvQyBBdWRpbyBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIE9NQVAKLSMKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9LWUU9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEzNDMsMTggKzE1MTcsMjYgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEzNjMsNiArMTU0NSw4IEBACiBDT05GSUdfVVNCX1NMODExX0hDRD15CiAjIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTM3MCwyMCArMTU1NCwyMCBAQAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC0xMzk5LDcgKzE1ODMsNiBAQAogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwpAQCAtMTQxMiw3ICsxNTk1LDcgQEAKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldApAQCAtMTQyMCw3ICsxNjAzLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xNDI5LDcgKzE2MTEsMTUgQEAKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTE0NDMsNiArMTYzMyw3IEBACiAjIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FREFDX01NX0VEQUM9eQogQ09ORklHX0VEQUNfUEFTRU1JPXkKKyMgQ09ORklHX0VEQUNfQ1BDOTI1IGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTE0NzIsNiArMTY2Myw5IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE0ODEsMjEgKzE2NzUsMzEgQEAKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTE1MDQsMTEgKzE3MDgsMTMgQEAKICMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CkBAIC0xNTE2LDYgKzE3MjIsMTAgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE1MjUsNiArMTczNSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfSVNPOTY2MF9GUz15CkBAIC0xNTQ5LDE2ICsxNzY0LDE0IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfQ09ORklHRlNfRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTU3OCw4ICsxNzkxLDEwIEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xNTkwLDE4ICsxODA1LDE3IEBACiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CiAjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTY3MiwyNSArMTg4NiwzMCBAQAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTcwMCwxOCArMTkxOSwyNSBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE3MjEsMjYgKzE5NDcsNzEgQEAKICMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKICMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMTc0OSwyMyArMjAyMCwzNCBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19YT1JfQkxPQ0tTPXkKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwogQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTc5MywxNCArMjA3NSwyMCBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CkBAIC0xODMwLDcgKzIxMTgsMTMgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhZjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTAsMCArMSwyMTk5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIEZyaSBPY3QgMTYgMTE6Mzc6MTUgMjAwOQorIworQ09ORklHX1BQQzY0PXkKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0JPT0szU182NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szRV82ND15CitDT05GSUdfUFBDX0JPT0szRT15CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF82ND15CitDT05GSUdfUFBDX0JPT0szRV9NTVU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0zMgorQ09ORklHXzY0QklUPXkKK0NPTkZJR19XT1JEX1NJWkU9NjQKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1RBU0tTVEFUUz15CitDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKKyMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKKyMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DS19DT01QQVQ9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1UzX0RBUlQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfSU9NTVVfVk1FUkdFPXkKK0NPTkZJR19JT01NVV9IRUxQRVI9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CitDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVA9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgaXMgbm90IHNldAorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKK0NPTkZJR19QQ0lfTVNJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19QQ0k9bQorIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTkVUPXkKK0NPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUz15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9eQorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKKyMgQ09ORklHX05GX0NUX1BST1RPX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCisjIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU09DS0VUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9eQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorQ09ORklHX0JMS19ERVZfRkQ9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9USU1JTkdTPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQU1ENzRYWD15CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9eQorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CitDT05GSUdfU0NTSV9JUFI9eQorQ09ORklHX1NDU0lfSVBSX1RSQUNFPXkKK0NPTkZJR19TQ1NJX0lQUl9EVU1QPXkKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTFBGQz1tCisjIENPTkZJR19TQ1NJX0xQRkNfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfREVCVUc9bQorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKK0NPTkZJR19BVEFfU0ZGPXkKK0NPTkZJR19TQVRBX1NWVz15CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CitDT05GSUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQorQ09ORklHX01EX1JBSUQxMD15CitDT05GSUdfTURfUkFJRDQ1Nj15CisjIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KKyMgQ09ORklHX0RNX0xPR19VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCisjIENPTkZJR19ETV9NVUxUSVBBVEhfUUwgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5ND15CitDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9eQorIyBDT05GSUdfSUVFRTEzOTRfUENJTFlOWCBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTRfU0JQMj1tCitDT05GSUdfSUVFRTEzOTRfRVRIMTM5NF9ST01fRU5UUlk9eQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X1JBV0lPPXkKK0NPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCisjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorQ09ORklHX1dJTkRGQVJNPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9bQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5HRU09eQorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKK0NPTkZJR19WT1JURVg9eQorIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKK0NPTkZJR19QQ05FVDMyPXkKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKK0NPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CitDT05GSUdfVElHT04zPXkKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQj1tCisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVFI9eQorQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfUkFXX0RSSVZFUj15CitDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQU1EODExMT15CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CitDT05GSUdfRkJfRERDPXkKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQUNNT0RFUz15CitDT05GSUdfRkJfQkFDS0xJR0hUPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9PRj15CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFUUk9YPXkKK0NPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKK0NPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQorQ09ORklHX0ZCX01BVFJPWF9HPXkKK0NPTkZJR19GQl9NQVRST1hfSTJDPW0KK0NPTkZJR19GQl9NQVRST1hfTUFWRU49bQorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX0lCTV9HWFQ0NTAwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENNQ0lBPXkKKyMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9LWUU9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkQ9bQorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQorQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQorQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQorIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KK0NPTkZJR19FREFDPXkKKworIworIyBSZXBvcnRpbmcgc3Vic3lzdGVtcworIworIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRURBQ19NTV9FREFDPXkKKyMgQ09ORklHX0VEQUNfQ1BDOTI1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRDI9eQorIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CitDT05GSUdfUkVJU0VSRlNfRlM9eQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CitDT05GSUdfSkZTX0ZTPXkKK0NPTkZJR19KRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz1tCisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfU1VOUlBDX1hQUlRfUkRNQT1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9eQorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorQ09ORklHX1NDSEVEU1RBVFM9eQorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfSVJRU09GRl9UUkFDRVI9eQorQ09ORklHX1NDSEVEX1RSQUNFUj15CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKK0NPTkZJR19YTU9OPXkKKyMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX0lSUVNUQUNLUz15CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkKK0NPTkZJR19BU1lOQ19NRU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ1RSPW0KKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz1tCisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcKaW5kZXggZmY5NmJiNC4uYjc5MTEyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTIwLDI5ICsxMjIsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTU1LDYgKzE1OCw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM5LDYgKzI0Myw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjUyLDYgKzI1Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDAxLDYgKzQwNyw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDgsNyArNDE1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQyMCw2ICs0MjYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MSw3ICs0ODgsNiBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9TQkM4MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02NjQsNyArNjcwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTcxMiwxMCArNzIwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzY0LDYgKzc2OSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC03NzQsNiArNzgwLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC04NTUsMTUgKzg2MiwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODg2LDYgKzg5Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTkwNSw3ICs5MTcsNiBAQAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwpAQCAtOTIyLDYgKzkzMyw3IEBACiAjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldApAQCAtOTQwLDYgKzk1Miw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTExNDgsNiArMTE2MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE4MywxMCArMTE5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMjA5LDYgKzEyMjUsNyBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjM3LDcgKzEyNTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyNzksNiArMTI5NSw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKaW5kZXggMTI5M2M0Ni4uZWY1MGNlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEzMSwyOCArMTMzLDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjQ0LDEyICsyNDcsMTIgQEAKIENPTkZJR19CSU5GTVRfTUlTQz15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY3LDYgKzI3MCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzYwLDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg5LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTYsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA5LDYgKzQxNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTYzMyw2ICs2MzksNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY3MiwxMSArNjc5LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjk4LDYgKzcwOCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzI1LDYgKzczNiw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTgyMyw5ICs4MzUsMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg3MSwxMCArODg1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTc3LDYgKzk4OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAzMSw5ICsxMDQzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDUxLDYgKzEwNjAsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTEwMCw2ICsxMTE0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTExMSw5ICsxMTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTExMzIsNiArMTE0NSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE1Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExNjIsNyArMTE3Nyw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4Niw2ICsxMjAwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQogQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzOSw2ICsxMjU0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTQwNCw2ICsxNDIwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0NjMsNyArMTQ4MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTU3Niw2ICsxNTkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1OTMsNiArMTYxMCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNjE0LDcgKzE2MzIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTY0NSwxMSArMTY2MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IGYxODg5YWIuLmM1NjgzMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xNjgzLDcgKzE2ODMsNyBAQAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQ0FMTF9TVEFUUz15CisjIENPTkZJR19IQ0FMTF9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3N0b3JjZW50ZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKaW5kZXggMjgzODRkYy4uNTI0MjYzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTE4LDI4ICsxMjAsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDMsNiArMjQ2LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQwNSw5ICs0MTIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjE5LDYgKzYyNiw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTY1Nyw3ICs2NjUsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjcwLDYgKzY4MCw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTcyOSwxMCArNzQwLDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg3Niw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MDYsNiArOTExLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTE2LDYgKzkyMiw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTYxLDYgKzk2OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTExNDEsNiArMTE0OSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjEwLDcgKzEyMTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogQ09ORklHX0VYUE9SVEZTPW0KIApAQCAtMTMwNyw2ICsxMzE1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTMyNCw2ICsxMzMzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzNDQsNiArMTM1NCw4IEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaAppbmRleCA5MTU0ZTg1Li5mMGZiNGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VtdWxhdGVkX29wcy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19FTVVMQVRFRF9PUFNfSAogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogCiAjaWZkZWYgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUwpAQCAtNTcsNyArNTgsNyBAQAogCiBleHRlcm4gdm9pZCBwcGNfd2Fybl9lbXVsYXRlZF9wcmludChjb25zdCBjaGFyICp0eXBlKTsKIAotI2RlZmluZSBQUENfV0FSTl9FTVVMQVRFRCh0eXBlKQkJCQkJCSBcCisjZGVmaW5lIF9fUFBDX1dBUk5fRU1VTEFURUQodHlwZSkJCQkJCSBcCiAJZG8gewkJCQkJCQkJIFwKIAkJYXRvbWljX2luYygmcHBjX2VtdWxhdGVkLnR5cGUudmFsKTsJCQkgXAogCQlpZiAocHBjX3dhcm5fZW11bGF0ZWQpCQkJCQkgXApAQCAtNjYsOCArNjcsMjIgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19QUENfRU1VTEFURURfU1RBVFMgKi8KIAotI2RlZmluZSBQUENfV0FSTl9FTVVMQVRFRCh0eXBlKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fUFBDX1dBUk5fRU1VTEFURUQodHlwZSkJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogIUNPTkZJR19QUENfRU1VTEFURURfU1RBVFMgKi8KIAorI2RlZmluZSBQUENfV0FSTl9FTVVMQVRFRCh0eXBlLCByZWdzKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMsCQlcCisJCQkxLCAwLCByZWdzLCAwKTsJCQkJCVwKKwkJX19QUENfV0FSTl9FTVVMQVRFRCh0eXBlKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUFBDX1dBUk5fQUxJR05NRU5UKHR5cGUsIHJlZ3MpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUywJCVwKKwkJCTEsIDAsIHJlZ3MsIHJlZ3MtPmRhcik7CQkJCVwKKwkJX19QUENfV0FSTl9FTVVMQVRFRCh0eXBlKTsJCQkJXAorCX0gd2hpbGUgKDApCisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfRU1VTEFURURfT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKaW5kZXggM2ExNzk4Mi4uMjA3NzhhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9WSU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDQwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUkRNQQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwODAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9MTEFOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDEwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0JVTEsJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAyMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9YREFCUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDQwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX01VTFRJVENFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwODAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfU1BMUEFSCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCkBAIC00NSw4ICs0NSw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfTFBBUgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDQwMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9QUzNfTFYxCUFTTV9DT05TVCgweDAwMDAwMDAwMDA4MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfQkVBVAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMTAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLX1JFTU9WRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0NNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwNDAwMDAwMCkKKyNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDIwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTU4LDggKzU3LDkgQEAKIAkJRldfRkVBVFVSRV9QRVJGIHwgRldfRkVBVFVSRV9EVU1QIHwgRldfRkVBVFVSRV9JTlRFUlJVUFQgfAogCQlGV19GRUFUVVJFX01JR1JBVEUgfCBGV19GRUFUVVJFX1BFUkZNT04gfCBGV19GRUFUVVJFX0NSUSB8CiAJCUZXX0ZFQVRVUkVfVklPIHwgRldfRkVBVFVSRV9SRE1BIHwgRldfRkVBVFVSRV9MTEFOIHwKLQkJRldfRkVBVFVSRV9CVUxLIHwgRldfRkVBVFVSRV9YREFCUiB8IEZXX0ZFQVRVUkVfTVVMVElUQ0UgfAotCQlGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8IEZXX0ZFQVRVUkVfQ01PLAorCQlGV19GRUFUVVJFX0JVTEtfUkVNT1ZFIHwgRldfRkVBVFVSRV9YREFCUiB8CisJCUZXX0ZFQVRVUkVfTVVMVElUQ0UgfCBGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8CisJCUZXX0ZFQVRVUkVfQ01PLAogCUZXX0ZFQVRVUkVfUFNFUklFU19BTFdBWVMgPSAwLAogCUZXX0ZFQVRVUkVfSVNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX0lTRVJJRVNfQUxXQVlTID0gRldfRkVBVFVSRV9JU0VSSUVTIHwgRldfRkVBVFVSRV9MUEFSLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCmluZGV4IDYyNTFhNGIuLmMyN2NhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKQEAgLTI3NCw2ICsyNzQsOCBAQAogCXVuc2lnbmVkIGxvbmcJbnVtX2NhbGxzOwkvKiBudW1iZXIgb2YgY2FsbHMgKG9uIHRoaXMgQ1BVKSAqLwogCXVuc2lnbmVkIGxvbmcJdGJfdG90YWw7CS8qIHRvdGFsIHdhbGwgdGltZSAobWZ0Yikgb2YgY2FsbHMuICovCiAJdW5zaWduZWQgbG9uZwlwdXJyX3RvdGFsOwkvKiB0b3RhbCBjcHUgdGltZSAoUFVSUikgb2YgY2FsbHMuICovCisJdW5zaWduZWQgbG9uZwl0Yl9zdGFydDsKKwl1bnNpZ25lZCBsb25nCXB1cnJfc3RhcnQ7CiB9OwogI2RlZmluZSBIQ0FMTF9TVEFUX0FSUkFZX1NJWkUJKChNQVhfSENBTExfT1BDT0RFID4+IDIpICsgMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKaW5kZXggYjZiYWM2Zi4uOTE2MzY5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0yOSw1ICsyOSwxNiBAQAogCUtNX1RZUEVfTlIKIH07CiAKKy8qCisgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJ1aWxkIGZpeCB0aGF0IChzbyB0aGV5IHNheSBvbiBsa21sLi4uLikgc2hvdWxkIG5vIGxvbmdlcgorICogYmUgcmVxdWlyZWQgYWZ0ZXIgMi42LjMzLCBiZWNhdXNlIG9mIGNoYW5nZXMgcGxhbm5lZCB0byB0aGUga21hcCBjb2RlLgorICogTGV0J3MgdHJ5IHRvIHJlbW92ZSB0aGlzIGNydWZ0IHRoZW4uCisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorI2RlZmluZSBLTV9OTUkJCSgtMSkKKyNkZWZpbmUgS01fTk1JX1BURQkoLTEpCisjZGVmaW5lIEtNX0lSUV9QVEUJKC0xKQorI2VuZGlmCisKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX0tNQVBfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCmluZGV4IDYzMTVlZGMuLmJjOGRkNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKQEAgLTQ4OSw2ICs0ODksOCBAQAogI2RlZmluZSBTUFJOX01NQ1IxCTc5OAogI2RlZmluZSBTUFJOX01NQ1JBCTB4MzEyCiAjZGVmaW5lICAgTU1DUkFfU0RTWU5DCTB4ODAwMDAwMDBVTCAvKiBTREFSIHN5bmNlZCB3aXRoIFNJQVIgKi8KKyNkZWZpbmUgICBNTUNSQV9TREFSX0RDQUNIRV9NSVNTIDB4NDAwMDAwMDBVTAorI2RlZmluZSAgIE1NQ1JBX1NEQVJfRVJBVF9NSVNTICAgMHgyMDAwMDAwMFVMCiAjZGVmaW5lICAgTU1DUkFfU0lIVgkweDEwMDAwMDAwVUwgLyogc3RhdGUgb2YgTVNSIEhWIHdoZW4gU0lBUiBzZXQgKi8KICNkZWZpbmUgICBNTUNSQV9TSVBSCTB4MDgwMDAwMDBVTCAvKiBzdGF0ZSBvZiBNU1IgUFIgd2hlbiBTSUFSIHNldCAqLwogI2RlZmluZSAgIE1NQ1JBX1NMT1QJMHgwNzAwMDAwMFVMIC8qIFNMT1QgYml0cyAoMzctMzkpICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTIyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHJhY2UuaApAQCAtMCwwICsxLDEzMyBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gcG93ZXJwYworCisjaWYgIWRlZmluZWQoX1RSQUNFX1BPV0VSUENfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX1BPV0VSUENfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworVFJBQ0VfRVZFTlQoaXJxX2VudHJ5LAorCisJVFBfUFJPVE8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpLAorCisJVFBfQVJHUyhyZWdzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IHB0X3JlZ3MgKiwgcmVncykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJlZ3MgPSByZWdzOworCSksCisKKwlUUF9wcmludGsoInB0X3JlZ3M9JXAiLCBfX2VudHJ5LT5yZWdzKQorKTsKKworVFJBQ0VfRVZFTlQoaXJxX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcHRfcmVncyAqcmVncyksCisKKwlUUF9BUkdTKHJlZ3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cmVncyA9IHJlZ3M7CisJKSwKKworCVRQX3ByaW50aygicHRfcmVncz0lcCIsIF9fZW50cnktPnJlZ3MpCispOworCitUUkFDRV9FVkVOVCh0aW1lcl9pbnRlcnJ1cHRfZW50cnksCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcHRfcmVncyAqcmVncyksCisKKwlUUF9BUkdTKHJlZ3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cmVncyA9IHJlZ3M7CisJKSwKKworCVRQX3ByaW50aygicHRfcmVncz0lcCIsIF9fZW50cnktPnJlZ3MpCispOworCitUUkFDRV9FVkVOVCh0aW1lcl9pbnRlcnJ1cHRfZXhpdCwKKworCVRQX1BST1RPKHN0cnVjdCBwdF9yZWdzICpyZWdzKSwKKworCVRQX0FSR1MocmVncyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5yZWdzID0gcmVnczsKKwkpLAorCisJVFBfcHJpbnRrKCJwdF9yZWdzPSVwIiwgX19lbnRyeS0+cmVncykKKyk7CisKKyNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKK2V4dGVybiB2b2lkIGhjYWxsX3RyYWNlcG9pbnRfcmVnZnVuYyh2b2lkKTsKK2V4dGVybiB2b2lkIGhjYWxsX3RyYWNlcG9pbnRfdW5yZWdmdW5jKHZvaWQpOworCitUUkFDRV9FVkVOVF9GTihoY2FsbF9lbnRyeSwKKworCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKSwKKworCVRQX0FSR1Mob3Bjb2RlLCBhcmdzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgb3Bjb2RlKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+b3Bjb2RlID0gb3Bjb2RlOworCSksCisKKwlUUF9wcmludGsoIm9wY29kZT0lbHUiLCBfX2VudHJ5LT5vcGNvZGUpLAorCisJaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jLCBoY2FsbF90cmFjZXBvaW50X3VucmVnZnVuYworKTsKKworVFJBQ0VfRVZFTlRfRk4oaGNhbGxfZXhpdCwKKworCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJldHZhbCwKKwkJdW5zaWduZWQgbG9uZyAqcmV0YnVmKSwKKworCVRQX0FSR1Mob3Bjb2RlLCByZXR2YWwsIHJldGJ1ZiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG9wY29kZSkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCByZXR2YWwpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5vcGNvZGUgPSBvcGNvZGU7CisJCV9fZW50cnktPnJldHZhbCA9IHJldHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJvcGNvZGU9JWx1IHJldHZhbD0lbHUiLCBfX2VudHJ5LT5vcGNvZGUsIF9fZW50cnktPnJldHZhbCksCisKKwloY2FsbF90cmFjZXBvaW50X3JlZ2Z1bmMsIGhjYWxsX3RyYWNlcG9pbnRfdW5yZWdmdW5jCispOworI2VuZGlmCisKKyNlbmRpZiAvKiBfVFJBQ0VfUE9XRVJQQ19IICovCisKKyN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKKyN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUKKworI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggYXNtCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZQorCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKaW5kZXggYTViNjMyZTUuLjM4Mzk4MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKQEAgLTczMiw3ICs3MzIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NQRQogCWlmICgoaW5zdHIgPj4gMjYpID09IDB4NCkgewotCQlQUENfV0FSTl9FTVVMQVRFRChzcGUpOworCQlQUENfV0FSTl9BTElHTk1FTlQoc3BlLCByZWdzKTsKIAkJcmV0dXJuIGVtdWxhdGVfc3BlKHJlZ3MsIHJlZywgaW5zdHIpOwogCX0KICNlbmRpZgpAQCAtNzg2LDcgKzc4Niw3IEBACiAJCQlmbGFncyB8PSBTUExUOwogCQkJbmIgPSA4OwogCQl9Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKHZzeCk7CisJCVBQQ19XQVJOX0FMSUdOTUVOVCh2c3gsIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIpOwogCX0KICNlbmRpZgpAQCAtNzk0LDcgKzc5NCw3IEBACiAJICogdGhlIGV4Y2VwdGlvbiBvZiBEQ0JaIHdoaWNoIGlzIGhhbmRsZWQgYXMgYSBzcGVjaWFsIGNhc2UgaGVyZQogCSAqLwogCWlmIChpbnN0ciA9PSBEQ0JaKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKGRjYnopOworCQlQUENfV0FSTl9BTElHTk1FTlQoZGNieiwgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX2RjYnoocmVncywgYWRkcik7CiAJfQogCWlmICh1bmxpa2VseShuYiA9PSAwKSkKQEAgLTgwNCw3ICs4MDQsNyBAQAogCSAqIGZ1bmN0aW9uCiAJICovCiAJaWYgKGZsYWdzICYgTSkgewotCQlQUENfV0FSTl9FTVVMQVRFRChtdWx0aXBsZSk7CisJCVBQQ19XQVJOX0FMSUdOTUVOVChtdWx0aXBsZSwgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX211bHRpcGxlKHJlZ3MsIGFkZHIsIHJlZywgbmIsCiAJCQkJCWZsYWdzLCBpbnN0ciwgc3dpeik7CiAJfQpAQCAtODI1LDExICs4MjUsMTEgQEAKIAogCS8qIFNwZWNpYWwgY2FzZSBmb3IgMTYtYnl0ZSBGUCBsb2FkcyBhbmQgc3RvcmVzICovCiAJaWYgKG5iID09IDE2KSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKGZwX3BhaXIpOworCQlQUENfV0FSTl9BTElHTk1FTlQoZnBfcGFpciwgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX2ZwX3BhaXIoYWRkciwgcmVnLCBmbGFncyk7CiAJfQogCi0JUFBDX1dBUk5fRU1VTEFURUQodW5hbGlnbmVkKTsKKwlQUENfV0FSTl9BTElHTk1FTlQodW5hbGlnbmVkLCByZWdzKTsKIAogCS8qIElmIHdlIGFyZSBsb2FkaW5nLCBnZXQgdGhlIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCBlbHNlCiAJICogZ2V0IGl0IGZyb20gcmVnaXN0ZXIgdmFsdWVzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggMGI5YzkxMy4uMDNjODYyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtNzExLDYgKzcxMSw4IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKKwkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc1MCIsCisJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKIAl9LAogCXsJLyogNzQ1Lzc1NSAqLwogCQkucHZyX21hc2sJCT0gMHhmZmZmZjAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA5MDBlMGVlLi5iZGNiNTU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC01NTEsNyArNTUxLDcgQEAKIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OCiAJbGQJcjUsU09GVEUocjEpCiBGV19GVFJfU0VDVElPTl9FTFNFCi0JYglpc2VyaWVzX2NoZWNrX3BlbmRpbmdfaXJxcworCWIJLkxpc2VyaWVzX2NoZWNrX3BlbmRpbmdfaXJxcwogQUxUX0ZXX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihGV19GRUFUVVJFX0lTRVJJRVMpCiAyOgogCVRSQUNFX0FORF9SRVNUT1JFX0lSUShyNSk7CkBAIC02MjMsNyArNjIzLDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCiAKLWlzZXJpZXNfY2hlY2tfcGVuZGluZ19pcnFzOgorLkxpc2VyaWVzX2NoZWNrX3BlbmRpbmdfaXJxczoKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAlsZAlyNSxTT0ZURShyMSkKIAljbXBkaQkwLHI1LDAKQEAgLTY1OCw0MiArNjU4LDQzIEBACiAJY21wZGkJcjAsMAogCWNyYW5kYwllcSxjcjEqNCtlcSxlcQogCWJuZQlyZXN0b3JlCi0JLyogaGVyZSB3ZSBhcmUgcHJlZW1wdGluZyB0aGUgY3VycmVudCB0YXNrICovCi0xOgotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCS50cmFjZV9oYXJkaXJxc19vbgotCS8qIE5vdGU6IHdlIGp1c3QgY2xvYmJlcmVkIHIxMCB3aGljaCB1c2VkIHRvIGNvbnRhaW4gdGhlIHByZXZpb3VzCi0JICogTVNSIGJlZm9yZSB0aGUgaGFyZC1kaXNhYmxpbmcgZG9uZSBieSB0aGUgY2FsbGVyIG9mIGRvX3dvcmsuCi0JICogV2UgZG9uJ3QgaGF2ZSB0aGF0IHZhbHVlIGFueW1vcmUsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhcwotCSAqIHdlIHdpbGwgaGFyZC1lbmFibGUgdW5jb25kaXRpb25hbGx5LCB3ZSBjYW4ganVzdCByZWxvYWQgdGhlCi0JICogY3VycmVudCBNU1IgaW50byByMTAKKworCS8qIEhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzay4KKwkgKgorCSAqIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBzb2Z0LWRpc2FibGVkLiBXZSBhbHNvIHByb3Blcmx5IG1hcmsKKwkgKiB0aGUgUEFDQSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgaGFyZC1kaXNhYmxlZAorCSAqIGFuZCB0cmFjZSB0aGUgY2hhbmdlCiAJICovCi0JbWZtc3IJcjEwCi0jZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCi0JbGkJcjAsMQorCWxpCXIwLDAKIAlzdGIJcjAsUEFDQVNPRlRJUlFFTihyMTMpCiAJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCVRSQUNFX0RJU0FCTEVfSU5UUworCisJLyogQ2FsbCB0aGUgc2NoZWR1bGVyIHdpdGggc29mdCBJUlFzIG9mZiAqLworMToJYmwJLnByZWVtcHRfc2NoZWR1bGVfaXJxCisKKwkvKiBIYXJkLWRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAoYW5kIHVwZGF0ZSBQQUNBKSAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCi0Jd3J0ZWVpCTEKLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCXdydGVlaQkwCiAjZWxzZQotCW9yaQlyMTAscjEwLE1TUl9FRQotCW10bXNyZAlyMTAsMQkJLyogcmVlbmFibGUgaW50ZXJydXB0cyAqLwotCWJsCS5wcmVlbXB0X3NjaGVkdWxlCiAJbWZtc3IJcjEwCi0JY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAotCXJsZGljbAlyMTAscjEwLDQ4LDEJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJcmxkaWNsCXIxMCxyMTAsNDgsMQogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRtc3JkCXIxMCwxCiAjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwlsaQlyMCwwCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCisJLyogUmUtdGVzdCBmbGFncyBhbmQgZXZlbnR1YWxseSBsb29wICovCisJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAogCWxkCXI0LFRJX0ZMQUdTKHI5KQogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYm5lCTFiCiAJYglyZXN0b3JlCiAKIHVzZXJfd29yazoKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCiAJd3J0ZWVpCTEKQEAgLTEwMzgsOCArMTAzOSw3IEBACiAJICogV2UgYXJlIGluIGEgbW9kdWxlIHVzaW5nIHRoZSBtb2R1bGUncyBUT0MuCiAJICogU3dpdGNoIHRvIG91ciBUT0MgdG8gcnVuIGluc2lkZSB0aGUgY29yZSBrZXJuZWwuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcikKLQlsZAlyMiwgOChyNCkKKwlsZAlyMiwgUEFDQVRPQyhyMTMpCiAKIAlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCiAJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKaW5kZXggMTgwODg3Ni4uYzdlYjRlMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUwpAQCAtMTg1LDEyICsxODUsMTUgQEAKIAkgKiBwcm9sb2cgY29kZSBvZiB0aGUgUGVyZm9ybWFuY2VNb25pdG9yIG9uZS4gQSBsaXR0bGUKIAkgKiB0cmlja2VyeSBpcyB0aHVzIG5lY2Vzc2FyeQogCSAqLworcGVyZm9ybWFuY2VfbW9uaXRvcl9wU2VyaWVzXzE6CiAJLiA9IDB4ZjAwCiAJYglwZXJmb3JtYW5jZV9tb25pdG9yX3BTZXJpZXMKIAorYWx0aXZlY191bmF2YWlsYWJsZV9wU2VyaWVzXzE6CiAJLiA9IDB4ZjIwCiAJYglhbHRpdmVjX3VuYXZhaWxhYmxlX3BTZXJpZXMKIAordnN4X3VuYXZhaWxhYmxlX3BTZXJpZXNfMToKIAkuID0gMHhmNDAKIAliCXZzeF91bmF2YWlsYWJsZV9wU2VyaWVzCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGU1ZDEyMTEuLjAyYTMzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNzAsNiArNzAsOCBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CiAjZW5kaWYKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOwogc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKQEAgLTMyNSw2ICszMjcsOCBAQAogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCisJdHJhY2VfaXJxX2VudHJ5KHJlZ3MpOworCiAJaXJxX2VudGVyKCk7CiAKIAljaGVja19zdGFja19vdmVyZmxvdygpOwpAQCAtMzQ4LDYgKzM1Miw4IEBACiAJCXRpbWVyX2ludGVycnVwdChyZWdzKTsKIAl9CiAjZW5kaWYKKworCXRyYWNlX2lycV9leGl0KHJlZ3MpOwogfQogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCBmZThmNzFkLi42NDFjNzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMjgyLDEyICsyODIsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgKnB0ciA9IGdkYl9yZWdzOwogCWludCByZWc7Ci0jaWZkZWYgQ09ORklHX1NQRQotCXVuaW9uIHsKLQkJdTMyIHYzMlsyXTsKLQkJdTY0IHY2NDsKLQl9IGFjYzsKLSNlbmRpZgogCiAJZm9yIChyZWcgPSAwOyByZWcgPCAzMjsgcmVnKyspCiAJCVVOUEFDSzY0KHJlZ3MtPmdwcltyZWddLCBwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBiYjgyMDllLi5lOGRmZGJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKICAqIFJlcGFyZW50IHJlc291cmNlIGNoaWxkcmVuIG9mIHByIHRoYXQgY29uZmxpY3Qgd2l0aCByZXMKICAqIHVuZGVyIHJlcywgYW5kIG1ha2UgcmVzIHJlcGxhY2UgdGhvc2UgY2hpbGRyZW4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKK3N0YXRpYyBpbnQgcmVwYXJlbnRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpwLCAqKnBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggYmE5NDlhMi4uY2NmNTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC05Nyw3ICs5Nyw5IEBACiAJICogdG8gZG8gYW4gYXBwcm9wcmlhdGUgVExCIGZsdXNoIGhlcmUgdG9vCiAJICovCiAJaWYgKGJ1cy0+c2VsZikgeworI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07CisjZW5kaWYKIAogCQlwcl9kZWJ1ZygiSU8gdW5tYXBwaW5nIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJCSBwY2lfbmFtZShidXMtPnNlbGYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYmJjYmFlMS4uMWViODVmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTExNiwyMCArMTE2LDIzIEBACiBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKKwl1bnNpZ25lZCBsb25nIHNpaHYgPSBNTUNSQV9TSUhWOworCXVuc2lnbmVkIGxvbmcgc2lwciA9IE1NQ1JBX1NJUFI7CiAKIAlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKIAkJcmV0dXJuIDA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KIAogCWlmIChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpIHsKLQkJaWYgKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJSFYpCi0JCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCQlyZXR1cm4gKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJUFIpID8KLQkJCVBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlzaWh2ID0gUE9XRVI2X01NQ1JBX1NJSFY7CisJCXNpcHIgPSBQT1dFUjZfTU1DUkFfU0lQUjsKIAl9Ci0JaWYgKG1tY3JhICYgTU1DUkFfU0lIVikKKworCS8qIFBSIGhhcyBwcmlvcml0eSBvdmVyIEhWLCBzbyBvcmRlciBiZWxvdyBpcyBpbXBvcnRhbnQgKi8KKwlpZiAobW1jcmEgJiBzaXByKQorCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCWlmICgobW1jcmEgJiBzaWh2KSAmJiAoZnJlZXplX2V2ZW50c19rZXJuZWwgIT0gTU1DUjBfRkNIVikpCiAJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7Ci0JcmV0dXJuIChtbWNyYSAmIE1NQ1JBX1NJUFIpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDoKLQkJUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CisJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwogfQogCiAvKgpAQCAtMTE2Miw3ICsxMTY1LDcgQEAKIAkgKi8KIAlpZiAocmVjb3JkKSB7CiAJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGEgPSB7Ci0JCQkuYWRkcgk9IDAsCisJCQkuYWRkcgk9IH4wVUxMLAogCQkJLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZCwKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jCmluZGV4IDBmNGMxYzcuLjE5OWRlNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMKQEAgLTczLDEwICs3Myw2IEBACiAjZGVmaW5lIE1NQ1IxX1BNQ1NFTF9NU0sJMHg3ZgogCiAvKgotICogQml0cyBpbiBNTUNSQQotICovCi0KLS8qCiAgKiBMYXlvdXQgb2YgY29uc3RyYWludCBiaXRzOgogICogNjY2NjU1NTU1NTU1NTU0NDQ0NDQ0NDQ0MzMzMzMzMzMzMzIyMjIyMjIyMjIxMTExMTExMTExMDAwMDAwMDAwMAogICogMzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNS1wbXUuYwppbmRleCBjMzUxYjNhLi45OGI2YTcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNS1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNS1wbXUuYwpAQCAtNzMsMTAgKzczLDYgQEAKICNkZWZpbmUgTU1DUjFfUE1DU0VMX01TSwkweDdmCiAKIC8qCi0gKiBCaXRzIGluIE1NQ1JBCi0gKi8KLQotLyoKICAqIExheW91dCBvZiBjb25zdHJhaW50IGJpdHM6CiAgKiA2NjY2NTU1NTU1NTU1NTQ0NDQ0NDQ0NDQzMzMzMzMzMzMzMjIyMjIyMjIyMjExMTExMTExMTEwMDAwMDAwMDAwCiAgKiAzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCkBAIC0zOTAsNyArMzg2LDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaHdjW10sIHVuc2lnbmVkIGxvbmcgbW1jcltdKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcjEgPSAwOwotCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSAwOworCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSBNTUNSQV9TREFSX0RDQUNIRV9NSVNTIHwgTU1DUkFfU0RBUl9FUkFUX01JU1M7CiAJdW5zaWduZWQgaW50IHBtYywgdW5pdCwgYnl0ZSwgcHNlbDsKIAl1bnNpZ25lZCBpbnQgdHRtLCBncnA7CiAJaW50IGksIGlzYnVzLCBiaXQsIGdyc2VsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNi1wbXUuYwppbmRleCBjYTM5OWJhLi44NGE2MDdiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNi1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNi1wbXUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgaHdjW10sIHVuc2lnbmVkIGxvbmcgbW1jcltdKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcjEgPSAwOwotCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSAwOworCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSBNTUNSQV9TREFSX0RDQUNIRV9NSVNTIHwgTU1DUkFfU0RBUl9FUkFUX01JU1M7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IHBtYywgZXYsIGIsIHUsIHMsIHBzZWw7CiAJdW5zaWduZWQgaW50IHR0bXNldCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI3LXBtdS5jCmluZGV4IDI4YTRkYWEuLjg1MmY3YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI3LXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI3LXBtdS5jCkBAIC01MSwxMCArNTEsNiBAQAogI2RlZmluZSBNTUNSMV9QTUNTRUxfTVNLCTB4ZmYKIAogLyoKLSAqIEJpdHMgaW4gTU1DUkEKLSAqLwotCi0vKgogICogTGF5b3V0IG9mIGNvbnN0cmFpbnQgYml0czoKICAqIDY2NjY1NTU1NTU1NTU1NDQ0NDQ0NDQ0NDMzMzMzMzMzMzMyMjIyMjIyMjIyMTExMTExMTExMTAwMDAwMDAwMDAKICAqIDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKQEAgLTIzMCw3ICsyMjYsNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCBod2NbXSwgdW5zaWduZWQgbG9uZyBtbWNyW10pCiB7CiAJdW5zaWduZWQgbG9uZyBtbWNyMSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtbWNyYSA9IDA7CisJdW5zaWduZWQgbG9uZyBtbWNyYSA9IE1NQ1JBX1NEQVJfRENBQ0hFX01JU1MgfCBNTUNSQV9TREFSX0VSQVRfTUlTUzsKIAl1bnNpZ25lZCBpbnQgcG1jLCB1bml0LCBjb21iaW5lLCBsMnNlbCwgcHNlbDsKIAl1bnNpZ25lZCBpbnQgcG1jX2ludXNlID0gMDsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKaW5kZXggNDc5NTc0NC4uOGVmZjQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGM5NzAtcG11LmMKQEAgLTg0LDEwICs4NCw2IEBACiB9OwogCiAvKgotICogQml0cyBpbiBNTUNSQQotICovCi0KLS8qCiAgKiBMYXlvdXQgb2YgY29uc3RyYWludCBiaXRzOgogICogNjY2NjU1NTU1NTU1NTU0NDQ0NDQ0NDQ0MzMzMzMzMzMzMzIyMjIyMjIyMjIxMTExMTExMTExMDAwMDAwMDAwMAogICogMzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAxMTY4YzVmLi5jOTMwYWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTAxNiw5ICsxMDE2LDEzIEBACiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCWludCBjdXJyX2ZyYW1lID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CiAJZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBydGggPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIG1ydGggPSAtMTsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworCWV4dGVybiB2b2lkIG1vZF9yZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwlydGggPSAqKHVuc2lnbmVkIGxvbmcgKilydGg7CisJbXJ0aCA9ICh1bnNpZ25lZCBsb25nKW1vZF9yZXR1cm5fdG9faGFuZGxlcjsKKwltcnRoID0gKih1bnNpZ25lZCBsb25nICopbXJ0aDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTEwNDQsNyArMTA0OCw3IEBACiAJCWlmICghZmlyc3RmcmFtZSB8fCBpcCAhPSBscikgewogCQkJcHJpbnRrKCJbIlJFRyJdIFsiUkVHIl0gJXBTIiwgc3AsIGlwLCAodm9pZCAqKWlwKTsKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JCQlpZiAoaXAgPT0gYWRkciAmJiBjdXJyX2ZyYW1lID49IDApIHsKKwkJCWlmICgoaXAgPT0gcnRoIHx8IGlwID09IG1ydGgpICYmIGN1cnJfZnJhbWUgPj0gMCkgewogCQkJCXByaW50aygiICglcFMpIiwKIAkJCQkgICAgICAgKHZvaWQgKiljdXJyZW50LT5yZXRfc3RhY2tbY3Vycl9mcmFtZV0ucmV0KTsKIAkJCQljdXJyX2ZyYW1lLS07CkBAIC0xMTY4LDcgKzExNzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKIAkvKgogCSAqIElmIHdlIGFyZSB1c2luZyAxVEIgc2VnbWVudHMgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIHJhbmRvbWlzZQogCSAqIHRoZSBoZWFwLCB3ZSBjYW4gcHV0IGl0IGFib3ZlIDFUQiBzbyBpdCBpcyBiYWNrZWQgYnkgYSAxVEIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDQyNzFmN2EuLjg0NWM3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtNjYwLDYgKzY2MCw3IEBACiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0cnVjdCBkZW50cnkgKnBvd2VycGNfZGVidWdmc19yb290OworRVhQT1JUX1NZTUJPTChwb3dlcnBjX2RlYnVnZnNfcm9vdCk7CiAKIHN0YXRpYyBpbnQgcG93ZXJwY19kZWJ1Z2ZzX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCA1M2JjZjNkLi5iMTUyZGUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJaWYgKHBwY19zd2lvdGxiX2VuYWJsZSkKLQkJc3dpb3RsYl9pbml0KCk7CisJCXN3aW90bGJfaW5pdCgxKTsKICNlbmRpZgogCiAJcGFnaW5nX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA3OTdlYTk1Li5kZjJjOWU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL21tdS1oYXNoNjQuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CkBAIC01NTEsNyArNTUwLDcgQEAKIAogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJaWYgKHBwY19zd2lvdGxiX2VuYWJsZSkKLQkJc3dpb3RsYl9pbml0KCk7CisJCXN3aW90bGJfaW5pdCgxKTsKICNlbmRpZgogCiAJcGFnaW5nX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggOTJkYzg0NC4uMzY3MDdkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxhc20vdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTU3MSw2ICs1NzIsOCBAQAogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZkZWNyZW1lbnRlci0+ZXZlbnQ7CiAJdTY0IG5vdzsKIAorCXRyYWNlX3RpbWVyX2ludGVycnVwdF9lbnRyeShyZWdzKTsKKwogCS8qIEVuc3VyZSBhIHBvc2l0aXZlIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIGRlY3JlbWVudGVyLCBvciBlbHNlCiAJICogc29tZSBDUFVzIHdpbGwgY29udGludXVlIHRvIHRha2UgZGVjcmVtZW50ZXIgZXhjZXB0aW9ucyAqLwogCXNldF9kZWMoREVDUkVNRU5URVJfTUFYKTsKQEAgLTU5MCw2ICs1OTMsNyBAQAogCQlub3cgPSBkZWNyZW1lbnRlci0+bmV4dF90YiAtIG5vdzsKIAkJaWYgKG5vdyA8PSBERUNSRU1FTlRFUl9NQVgpCiAJCQlzZXRfZGVjKChpbnQpbm93KTsKKwkJdHJhY2VfdGltZXJfaW50ZXJydXB0X2V4aXQocmVncyk7CiAJCXJldHVybjsKIAl9CiAJb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CkBAIC02MjAsNiArNjI0LDggQEAKIAogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKKworCXRyYWNlX3RpbWVyX2ludGVycnVwdF9leGl0KHJlZ3MpOwogfQogCiB2b2lkIHdha2V1cF9kZWNyZW1lbnRlcih2b2lkKQpAQCAtNzc3LDcgKzc4Myw3IEBACiAJcmV0dXJuIHBwY19tZC5zZXRfcnRjX3RpbWUoJnRtKTsKIH0KIAotdm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3N0YXRpYyB2b2lkIF9fcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCXN0YXRpYyBpbnQgZmlyc3QgPSAxOwpAQCAtODAwLDEwICs4MDYsMjMgQEAKIAkJcmV0dXJuOwogCX0KIAlwcGNfbWQuZ2V0X3J0Y190aW1lKCZ0bSk7CisKIAl0cy0+dHZfc2VjID0gbWt0aW1lKHRtLnRtX3llYXIrMTkwMCwgdG0udG1fbW9uKzEsIHRtLnRtX21kYXksCiAJCQkgICAgdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOwogfQogCit2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCV9fcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHRzKTsKKworCS8qIFNhbml0aXplIGl0IGluIGNhc2UgcmVhbCB0aW1lIGNsb2NrIGlzIHNldCBiZWxvdyBFUE9DSCAqLworCWlmICh0cy0+dHZfc2VjIDwgMCkgeworCQl0cy0+dHZfc2VjID0gMDsKKwkJdHMtPnR2X25zZWMgPSAwOworCX0KKwkJCit9CisKIC8qIGNsb2Nrc291cmNlIGNvZGUgKi8KIHN0YXRpYyBjeWNsZV90IHJ0Y19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggNmYwYWUxYS4uOWQxZjkzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNzU5LDcgKzc1OSw3IEBACiAKIAkvKiBFbXVsYXRlIHRoZSBtZnNwciByRCwgUFZSLiAqLwogCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9NRlNQUl9QVlJfTUFTSykgPT0gUFBDX0lOU1RfTUZTUFJfUFZSKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKG1mcHZyKTsKKwkJUFBDX1dBUk5fRU1VTEFURUQobWZwdnIsIHJlZ3MpOwogCQlyZCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwogCQlyZWdzLT5ncHJbcmRdID0gbWZzcHIoU1BSTl9QVlIpOwogCQlyZXR1cm4gMDsKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCiAJLyogRW11bGF0aW5nIHRoZSBkY2JhIGluc24gaXMganVzdCBhIG5vLW9wLiAgKi8KIAlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfRENCQV9NQVNLKSA9PSBQUENfSU5TVF9EQ0JBKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKGRjYmEpOworCQlQUENfV0FSTl9FTVVMQVRFRChkY2JhLCByZWdzKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03NzYsNyArNzc2LDcgQEAKIAkJaW50IHNoaWZ0ID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWM7CiAJCXVuc2lnbmVkIGxvbmcgbXNrID0gMHhmMDAwMDAwMFVMID4+IHNoaWZ0OwogCi0JCVBQQ19XQVJOX0VNVUxBVEVEKG1jcnhyKTsKKwkJUFBDX1dBUk5fRU1VTEFURUQobWNyeHIsIHJlZ3MpOwogCQlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgfm1zaykgfCAoKHJlZ3MtPnhlciA+PiBzaGlmdCkgJiBtc2spOwogCQlyZWdzLT54ZXIgJj0gfjB4ZjAwMDAwMDBVTDsKIAkJcmV0dXJuIDA7CkBAIC03ODQsMTkgKzc4NCwxOSBAQAogCiAJLyogRW11bGF0ZSBsb2FkL3N0b3JlIHN0cmluZyBpbnNuLiAqLwogCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfR0VOX01BU0spID09IFBQQ19JTlNUX1NUUklORykgewotCQlQUENfV0FSTl9FTVVMQVRFRChzdHJpbmcpOworCQlQUENfV0FSTl9FTVVMQVRFRChzdHJpbmcsIHJlZ3MpOwogCQlyZXR1cm4gZW11bGF0ZV9zdHJpbmdfaW5zdChyZWdzLCBpbnN0d29yZCk7CiAJfQogCiAJLyogRW11bGF0ZSB0aGUgcG9wY250YiAoUG9wdWxhdGlvbiBDb3VudCBCeXRlcykgaW5zdHJ1Y3Rpb24uICovCiAJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1BPUENOVEJfTUFTSykgPT0gUFBDX0lOU1RfUE9QQ05UQikgewotCQlQUENfV0FSTl9FTVVMQVRFRChwb3BjbnRiKTsKKwkJUFBDX1dBUk5fRU1VTEFURUQocG9wY250YiwgcmVncyk7CiAJCXJldHVybiBlbXVsYXRlX3BvcGNudGJfaW5zdChyZWdzLCBpbnN0d29yZCk7CiAJfQogCiAJLyogRW11bGF0ZSBpc2VsIChJbnRlZ2VyIFNlbGVjdCkgaW5zdHJ1Y3Rpb24gKi8KIAlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfSVNFTF9NQVNLKSA9PSBQUENfSU5TVF9JU0VMKSB7Ci0JCVBQQ19XQVJOX0VNVUxBVEVEKGlzZWwpOworCQlQUENfV0FSTl9FTVVMQVRFRChpc2VsLCByZWdzKTsKIAkJcmV0dXJuIGVtdWxhdGVfaXNlbChyZWdzLCBpbnN0d29yZCk7CiAJfQogCkBAIC05OTUsNyArOTk1LDcgQEAKICNpZmRlZiBDT05GSUdfTUFUSF9FTVVMQVRJT04KIAllcnJjb2RlID0gZG9fbWF0aGVtdShyZWdzKTsKIAlpZiAoZXJyY29kZSA+PSAwKQotCQlQUENfV0FSTl9FTVVMQVRFRChtYXRoKTsKKwkJUFBDX1dBUk5fRU1VTEFURUQobWF0aCwgcmVncyk7CiAKIAlzd2l0Y2ggKGVycmNvZGUpIHsKIAljYXNlIDA6CkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfOFhYX01JTklNQUxfRlBFTVUpCiAJZXJyY29kZSA9IFNvZnRfZW11bGF0ZV84eHgocmVncyk7CiAJaWYgKGVycmNvZGUgPj0gMCkKLQkJUFBDX1dBUk5fRU1VTEFURUQoOHh4KTsKKwkJUFBDX1dBUk5fRU1VTEFURUQoOHh4LCByZWdzKTsKIAogCXN3aXRjaCAoZXJyY29kZSkgewogCWNhc2UgMDoKQEAgLTExMjksNyArMTEyOSw3IEBACiAKIAlmbHVzaF9hbHRpdmVjX3RvX3RocmVhZChjdXJyZW50KTsKIAotCVBQQ19XQVJOX0VNVUxBVEVEKGFsdGl2ZWMpOworCVBQQ19XQVJOX0VNVUxBVEVEKGFsdGl2ZWMsIHJlZ3MpOwogCWVyciA9IGVtdWxhdGVfYWx0aXZlYyhyZWdzKTsKIAlpZiAoZXJyID09IDApIHsKIAkJcmVncy0+bmlwICs9IDQ7CQkvKiBza2lwIGVtdWxhdGVkIGluc3RydWN0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCmluZGV4IDk0ZTJkZjMuLjEzN2RjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCkBAIC01MCw2ICs1MCw5IEBACiAvKiBNYXggc3VwcG9ydGVkIHNpemUgZm9yIHN5bWJvbCBuYW1lcyAqLwogI2RlZmluZSBNQVhfU1lNTkFNRQk2NAogCisvKiBUaGUgYWxpZ25tZW50IG9mIHRoZSB2RFNPICovCisjZGVmaW5lIFZEU09fQUxJR05NRU5UCSgxIDw8IDE2KQorCiBleHRlcm4gY2hhciB2ZHNvMzJfc3RhcnQsIHZkc28zMl9lbmQ7CiBzdGF0aWMgdm9pZCAqdmRzbzMyX2tiYXNlID0gJnZkc28zMl9zdGFydDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmRzbzMyX3BhZ2VzOwpAQCAtMjMxLDE1ICsyMzQsMjEgQEAKIAkgKiBwaWNrIGEgYmFzZSBhZGRyZXNzIGZvciB0aGUgdkRTTyBpbiBwcm9jZXNzIHNwYWNlLiBXZSB0cnkgdG8gcHV0IGl0CiAJICogYXQgdmRzb19iYXNlIHdoaWNoIGlzIHRoZSAibmF0dXJhbCIgYmFzZSBmb3IgaXQsIGJ1dCB3ZSBtaWdodCBmYWlsCiAJICogYW5kIGVuZCB1cCBwdXR0aW5nIGl0IGVsc2V3aGVyZS4KKwkgKiBBZGQgZW5vdWdoIHRvIHRoZSBzaXplIHNvIHRoYXQgdGhlIHJlc3VsdCBjYW4gYmUgYWxpZ25lZC4KIAkgKi8KIAlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXZkc29fYmFzZSA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIHZkc29fYmFzZSwKLQkJCQkgICAgICB2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIDAsIDApOworCQkJCSAgICAgICh2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQpICsKKwkJCQkgICAgICAoKFZEU09fQUxJR05NRU5UIC0gMSkgJiBQQUdFX01BU0spLAorCQkJCSAgICAgIDAsIDApOwogCWlmIChJU19FUlJfVkFMVUUodmRzb19iYXNlKSkgewogCQlyYyA9IHZkc29fYmFzZTsKIAkJZ290byBmYWlsX21tYXBzZW07CiAJfQogCisJLyogQWRkIHJlcXVpcmVkIGFsaWdubWVudC4gKi8KKwl2ZHNvX2Jhc2UgPSBBTElHTih2ZHNvX2Jhc2UsIFZEU09fQUxJR05NRU5UKTsKKwogCS8qCiAJICogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdC4gV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBjYWxsaW5nCiAJICogaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcgb3IgdGhlIHBlcmYgY291bnRlciBtbWFwIHRyYWNraW5nIGNvZGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA5MDRlZjEzLi4wNTQ2YmNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCkBAIC0yNSw3ICsyNSw3IEBACiAJLiA9IEFMSUdOKDE2KTsKIAkudGV4dAkJOiB7CiAJCSooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKiBfX2Z0cl9hbHRfKikKLQl9CisJfQkJICAgICAgCSAgICAgIAkJCTp0ZXh0CiAJUFJPVklERShfX2V0ZXh0ID0gLik7CiAJUFJPVklERShfZXRleHQgPSAuKTsKIAlQUk9WSURFKGV0ZXh0ID0gLik7CkBAIC01Niw3ICs1Niw3IEBACiAJLmZpeHVwCQk6IHsgKiguZml4dXApIH0KIAogCS5keW5hbWljCTogeyAqKC5keW5hbWljKSB9CQk6dGV4dAk6ZHluYW1pYwotCS5nb3QJCTogeyAqKC5nb3QpIH0KKwkuZ290CQk6IHsgKiguZ290KSB9CQkJOnRleHQKIAkucGx0CQk6IHsgKigucGx0KSB9CiAKIAlfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmNTY0MjkzLi4yNzczNWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yMzYsNiArMjM2LDcgQEAKIAkJUkVBRF9NT1NUTFlfREFUQShMMV9DQUNIRV9CWVRFUykKIAl9CiAKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkuZGF0YV9ub3NhdmUgOiBBVChBRERSKC5kYXRhX25vc2F2ZSkgLSBMT0FEX09GRlNFVCkgewogCQlOT1NBVkVfREFUQQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmggYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCmluZGV4IGJiMTNiMWYuLjgwNmVmNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaApAQCAtNDgsNyArNDgsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfYWNjb3VudF9leGl0X3N0YXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHlwZSkKIHsKIAkvKiB0eXBlIGhhcyB0byBiZSBrbm93biBhdCBidWlsZCB0aW1lIGZvciBvcHRpbWl6YXRpb24gKi8KKworCS8qIFRoZSBCVUlMRF9CVUdfT04gYmVsb3cgYnJlYWtzIGluIGZ1bm55IHdheXMsIGNvbW1lbnRlZCBvdXQKKwkgKiBmb3Igbm93IC4uLiAtQmVuSAogCUJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcCh0eXBlKSk7CisJKi8KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEVYVF9JTlRSX0VYSVRTOgogCQl2Y3B1LT5zdGF0LmV4dF9pbnRyX2V4aXRzKys7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggNzVmMzI2Ny4uZTY4YmVhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtMjYsMTEgKzI2LDExIEBACiAJc3JkCXI4LHI1LHIxMQogCiAJbXRjdHIJcjgKLXNldHVwOgorLkxzZXR1cDoKIAlkY2J0CXI5LHI0CiAJZGNieglyOSxyMwogCWFkZAlyOSxyOSxyMTIKLQliZG56CXNldHVwCisJYmRuegkuTHNldHVwCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DUF9VU0VfRENCVFopCiAJYWRkaQlyMyxyMywtOAogCXNyZGkgICAgcjgscjUsNwkJLyogcGFnZSBpcyBjb3BpZWQgaW4gMTI4IGJ5dGUgc3RyaWRlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IGMyZjkzZGMuLmJlNGYzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTI1LDggKzI1LDggQEAKICAqICAgICBhbHNvIGNsZWFyIG1tLT5jcHVfdm1fbWFzayBiaXRzIHdoZW4gcHJvY2Vzc2VzIGFyZSBtaWdyYXRlZAogICovCiAKLSNkZWZpbmUgREVCVUdfTUFQX0NPTlNJU1RFTkNZCi0jZGVmaW5lIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVCAgIDMxCisvLyNkZWZpbmUgREVCVUdfTUFQX0NPTlNJU1RFTkNZCisvLyNkZWZpbmUgREVCVUdfQ0xBTVBfTEFTVF9DT05URVhUICAgMzEKIC8vI2RlZmluZSBERUJVR19IQVJERVIKIAogLyogV2UgZG9uJ3QgdXNlIERFQlVHIGJlY2F1c2UgaXQgdGVuZHMgdG8gYmUgY29tcGlsZWQgaW4gYWx3YXlzIG5vd2FkYXlzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwppbmRleCBiYzQ0ZGM0Li45NWNlMzU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKQEAgLTcyLDE5ICs3MiwxNyBAQAogMToKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAgKi8KIAotCS8qIHZtYWxsb2MvaW9yZW1hcCBtYXBwaW5nIGVuY29kaW5nIGJpdHMsIHRoZSAibGkiIGluc3RydWN0aW9ucyBiZWxvdwotCSAqIHdpbGwgYmUgcGF0Y2hlZCBieSB0aGUga2VybmVsIGF0IGJvb3QKKwkvKiB2bWFsbG9jIG1hcHBpbmcgZ2V0cyB0aGUgZW5jb2RpbmcgZnJvbSB0aGUgUEFDQSBhcyB0aGUgbWFwcGluZworCSAqIGNhbiBiZSBkZW1vdGVkIGZyb20gNjRLIC0+IDRLIGR5bmFtaWNhbGx5IG9uIHNvbWUgbWFjaGluZXMKIAkgKi8KLUJFR0lOX0ZUUl9TRUNUSU9OCi0JLyogY2hlY2sgd2hldGhlciB0aGlzIGlzIGluIHZtYWxsb2Mgb3IgaW9yZW1hcCBzcGFjZSAqLwogCWNscmxkaQlyMTEscjEwLDQ4CiAJY21wbGRpCXIxMSwoVk1BTExPQ19TSVpFID4+IDI4KSAtIDEKIAliZ3QJNWYKIAlsaHoJcjExLFBBQ0FWTUFMTE9DU0xMUChyMTMpCiAJYgk2ZgogNToKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCi1fR0xPQkFMKHNsYl9taXNzX2tlcm5lbF9sb2FkX2lvKQorCS8qIElPIG1hcHBpbmcgKi8KKwlfR0xPQkFMKHNsYl9taXNzX2tlcm5lbF9sb2FkX2lvKQogCWxpCXIxMSwwCiA2OgogQkVHSU5fRlRSX1NFQ1RJT04KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKaW5kZXggYzMxZTViNS4uZDQ1YmU1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKQEAgLTUxLDYgKzUxLDggQEAKIC8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KIHN0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CiAJImludGVyY29udHJvbCxkaWdzeS1tdGMiLAorCSJtYW5yb2xhbmQsbXVjbWM1MiIsCisJIm1hbnJvbGFuZCx1YzEwMSIsCiAJInBoeXRlYyxwY20wMzAiLAogCSJwaHl0ZWMscGNtMDMyIiwKIAkicHJvbWVzcyxtb3Rpb25wcm8iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKaW5kZXggNTFmY2FlNC4uZjlhZWUxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCkBAIC0xMzIsMTIgKzEzMiwyNSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1cy0+aXJxID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9idXM7CisJfQogCiAJYnVzLT5uYW1lID0gImVwODI0OGUtbWRpby1iaXRiYW5nIjsKIAlidXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwogCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcmVzLnN0YXJ0KTsKIAotCXJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgb2ZkZXYtPm5vZGUpOworCXJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlX2lycToKKwlrZnJlZShidXMtPmlycSk7CitlcnJfZnJlZV9idXM6CisJZnJlZV9tZGlvX2JpdGJhbmcoYnVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGVwODI0OGVfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYXhvbl9tc2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCmluZGV4IGFjYTU3NDEuLmE4NmMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYXhvbl9tc2k6IGNvdWxkbid0IHBhcnNlIGRjciBwcm9wZXJ0aWVzIG9uICVzXG4iLAogCQkJZG4tPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX21zaWM7CiAJfQogCiAJbXNpYy0+ZGNyX2hvc3QgPSBkY3JfbWFwKGRuLCBkY3JfYmFzZSwgZGNyX2xlbik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKaW5kZXggY2M3MTYxZi4uY2UwMTQ5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQpAQCAtMSwxOCArMSw5IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogCi1leHRyYS15ICs9IGR0Lm8KLQogb2JqLXkgKz0gZXhjZXB0aW9uLm8KLW9iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdF9tb2QubyBtZi5vIGxwZXZlbnRzLm8gXAorb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0Lm8gbWYubyBscGV2ZW50cy5vIFwKIAlodmNhbGwubyBwcm9jLm8gaHRhYi5vIGlvbW11Lm8gbWlzYy5vIGlycS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIG9iai0kKENPTkZJR19WSU9QQVRIKSArPSB2aW9wYXRoLm8gdmlvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrc3ltcy5vCi0KLXF1aWV0X2NtZF9kdF9zdHJpbmdzID0gRFRfU1RSICAkQAotICAgICAgY21kX2R0X3N0cmluZ3MgPSAkKE9CSkNPUFkpIC0tcmVuYW1lLXNlY3Rpb24gLnJvZGF0YS5zdHIxLjg9LmR0X3N0cmluZ3MgXAotCQkJCSQ8ICRACi0KLSQob2JqKS9kdF9tb2QubzoJJChvYmopL2R0Lm8KLQkkKGNhbGwgaWZfY2hhbmdlZCxkdF9zdHJpbmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwppbmRleCBjNWE4N2E3Li43ZjQ1YTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwpAQCAtNTEsMTEgKzUxLDE2IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgY3JlYXRlZCBieSB0aGUgbGlua2VyIHNjcmlwdCBhdCB0aGUgc3RhcnQgYW5kIGVuZAotICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGZpbGUuCisgKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBtYXJrZWQgd2l0aCB0aGUgRFMgbWFjcm8uCiAgKi8KIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19zdGFydFtdOwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX2VuZFtdOwogCisjZGVmaW5lIERTKHMpCSh7CVwKKwlzdGF0aWMgY29uc3QgY2hhciBfX3NbXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRfc3RyaW5ncyIpKSkgPSBzOyBcCisJX19zOwkJXAorfSkKKwogc3RydWN0IGlzZXJpZXNfZmxhdF9kdCB7CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIGhlYWRlcjsKIAl1NjQgcmVzZXJ2ZV9tYXBbMl07CkBAIC02NCw5ICs2OSw4IEBACiBzdGF0aWMgdm9pZCAqIF9faW5pdGRhdGEgZHRfZGF0YTsKIAogLyoKLSAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSBzZWN0aW9uCi0gKiB0aGF0IHdlIHJlbmFtZSB0byAuZHRfc3RyaW5ncyB1c2luZyBvYmpjb3B5IGFuZCBjYXB0dXJlCi0gKiBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgorICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIC5kdF9zdHJpbmdzIHNlY3Rpb24KKyAqIHRoYXQgd2UgY2FwdHVyZSBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX2NwdVtdID0gImNwdSI7CiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX21lbW9yeVtdID0gIm1lbW9yeSI7CkBAIC0xNzMsNyArMTc3LDcgQEAKIAogI2RlZmluZSBkdF9lbmRfbm9kZShkdCkgZHRfcHVzaF91MzIoZHQsIE9GX0RUX0VORF9OT0RFKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0xOTEsNDQgKzE5NSwzMiBAQAogCS8qIFRoZSBhY3R1YWwgZGF0YS4gKi8KIAlkdF9wdXNoX2J5dGVzKGR0LCBkYXRhLCBsZW4pOwogfQorI2RlZmluZSBkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBsZW4pCV9fZHRfcHJvcCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpLCAobGVuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Bfc3RyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICpkYXRhKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHN0cmxlbihkYXRhKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KLX0KKyNkZWZpbmUgZHRfcHJvcF9zdHIoZHQsIG5hbWUsIGRhdGEpCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc3RybGVuKChkYXRhKSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQl1MzIgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91MzIoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91MzIoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGR0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQl1NjQgZGF0YSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBfX2R0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAorCQljb25zdCBjaGFyICpuYW1lLCB1NjQgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91NjQoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91NjQoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTY0X2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHU2NCkgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91NjRfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTY0KSAqIChuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyX2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHUzMikgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91MzJfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTMyKSAqIChuKSkKIAotI2lmZGVmIG5vdHlldAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfZW1wdHkoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgTlVMTCwgMCk7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgZHRfcHJvcF9lbXB0eShkdCwgbmFtZSkJCWR0X3Byb3AoKGR0KSwgbmFtZSwgTlVMTCwgMCkKIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2NwdXMoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDIxMjI2YjcuLjQxNGNhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC01NDAsOCArNTQwLDExIEBACiAJLyogTWFrZSBzdXJlIElSUSBpcyBkaXNhYmxlZCAqLwogCWt3X3dyaXRlX3JlZyhyZWdfaWVyLCAwKTsKIAotCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQgKi8KLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCAwLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKKwkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0LiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0CisJICogd2FudCB0aGF0IGludGVycnVwdCBkaXNhYmxlZCBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIKKwkgKiBzdXNwZW5kIG9yIHdlJ2xsIGhhdmUgaXNzdWVzIHJ1bm5pbmcgdGhlIHBmdW5jcworCSAqLworCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfVElNRVIsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMKaW5kZXggNWE3MDdkYS4uMGExNGQ4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMKQEAgLTUxLDExICs1MSwxMCBAQAogCXtGV19GRUFUVVJFX1ZJTywJCSJoY2FsbC12aW8ifSwKIAl7RldfRkVBVFVSRV9SRE1BLAkJImhjYWxsLXJkbWEifSwKIAl7RldfRkVBVFVSRV9MTEFOLAkJImhjYWxsLWxMQU4ifSwKLQl7RldfRkVBVFVSRV9CVUxLLAkJImhjYWxsLWJ1bGsifSwKKwl7RldfRkVBVFVSRV9CVUxLX1JFTU9WRSwJImhjYWxsLWJ1bGsifSwKIAl7RldfRkVBVFVSRV9YREFCUiwJCSJoY2FsbC14ZGFiciJ9LAogCXtGV19GRUFUVVJFX01VTFRJVENFLAkJImhjYWxsLW11bHRpLXRjZSJ9LAogCXtGV19GRUFUVVJFX1NQTFBBUiwJCSJoY2FsbC1zcGxwYXIifSwKLQl7RldfRkVBVFVSRV9CVUxLX1JFTU9WRSwJImhjYWxsLWJ1bGsifSwKIH07CiAKIC8qIEJ1aWxkIHVwIHRoZSBmaXJtd2FyZSBmZWF0dXJlcyBiaXRtYXNrIHVzaW5nIHRoZSBjb250ZW50cyBvZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCmluZGV4IGMxNDI3YjMuLjM4M2E1ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKQEAgLTE0LDY4ICsxNCw5NCBAQAogCQogI2RlZmluZSBTVEtfUEFSTShpKSAgICAgKDQ4ICsgKChpKS0zKSo4KQogCi0jaWZkZWYgQ09ORklHX0hDQUxMX1NUQVRTCisjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCisKKwkuc2VjdGlvbgkiLnRvYyIsImF3IgorCisJLmdsb2JsIGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQKK2hjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQ6CisJLmxsb25nCTAKKworCS5zZWN0aW9uCSIudGV4dCIKKwogLyoKICAqIHByZWNhbGwgbXVzdCBwcmVzZXJ2ZSBhbGwgcmVnaXN0ZXJzLiAgdXNlIHVudXNlZCBTVEtfUEFSTSgpCi0gKiBhcmVhcyB0byBzYXZlIHNuYXBzaG90cyBhbmQgb3Bjb2RlLgorICogYXJlYXMgdG8gc2F2ZSBzbmFwc2hvdHMgYW5kIG9wY29kZS4gV2UgYnJhbmNoIGFyb3VuZCB0aGlzCisgKiBpbiBlYXJseSBpbml0IChlZyB3aGVuIHBvcHVsYXRpbmcgdGhlIE1NVSBoYXNodGFibGUpIGJ5IHVzaW5nIGFuCisgKiB1bmNvbmRpdGlvbmFsIGNwdSBmZWF0dXJlLgogICovCi0jZGVmaW5lIEhDQUxMX0lOU1RfUFJFQ0FMTAkJCQkJXAotCXN0ZAlyMyxTVEtfUEFSTShyMykocjEpOwkvKiBzYXZlIG9wY29kZSAqLwlcCi0JbWZ0YglyMDsJCQkvKiBnZXQgdGltZWJhc2UgYW5kICovCVwKLQlzdGQgICAgIHIwLFNUS19QQVJNKHI1KShyMSk7CS8qIHNhdmUgZm9yIGxhdGVyICovCVwKKyNkZWZpbmUgSENBTExfSU5TVF9QUkVDQUxMKEZJUlNUX1JFRykJCQkJXAogQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJXAotCW1mc3ByCXIwLFNQUk5fUFVSUjsJCS8qIGdldCBQVVJSIGFuZCAqLwlcCi0Jc3RkCXIwLFNUS19QQVJNKHI2KShyMSk7CS8qIHNhdmUgZm9yIGxhdGVyICovCVwKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1BVUlIpOwotCQorCWIJMWY7CQkJCQkJXAorRU5EX0ZUUl9TRUNUSU9OKDAsIDEpOwkJCQkJCVwKKwlsZCAgICAgIHIxMixoY2FsbF90cmFjZXBvaW50X3JlZmNvdW50QHRvYyhyMik7CQlcCisJY21wZGkJcjEyLDA7CQkJCQkJXAorCWJlcSsJMWY7CQkJCQkJXAorCW1mbHIJcjA7CQkJCQkJXAorCXN0ZAlyMyxTVEtfUEFSTShyMykocjEpOwkJCQlcCisJc3RkCXI0LFNUS19QQVJNKHI0KShyMSk7CQkJCVwKKwlzdGQJcjUsU1RLX1BBUk0ocjUpKHIxKTsJCQkJXAorCXN0ZAlyNixTVEtfUEFSTShyNikocjEpOwkJCQlcCisJc3RkCXI3LFNUS19QQVJNKHI3KShyMSk7CQkJCVwKKwlzdGQJcjgsU1RLX1BBUk0ocjgpKHIxKTsJCQkJXAorCXN0ZAlyOSxTVEtfUEFSTShyOSkocjEpOwkJCQlcCisJc3RkCXIxMCxTVEtfUEFSTShyMTApKHIxKTsJCQkJXAorCXN0ZAlyMCwxNihyMSk7CQkJCQlcCisJYWRkaQlyNCxyMSxTVEtfUEFSTShGSVJTVF9SRUcpOwkJCVwKKwlzdGR1CXIxLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSk7CQkJXAorCWJsCS5fX3RyYWNlX2hjYWxsX2VudHJ5OwkJCQlcCisJYWRkaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQlcCisJbGQJcjAsMTYocjEpOwkJCQkJXAorCWxkCXIzLFNUS19QQVJNKHIzKShyMSk7CQkJCVwKKwlsZAlyNCxTVEtfUEFSTShyNCkocjEpOwkJCQlcCisJbGQJcjUsU1RLX1BBUk0ocjUpKHIxKTsJCQkJXAorCWxkCXI2LFNUS19QQVJNKHI2KShyMSk7CQkJCVwKKwlsZAlyNyxTVEtfUEFSTShyNykocjEpOwkJCQlcCisJbGQJcjgsU1RLX1BBUk0ocjgpKHIxKTsJCQkJXAorCWxkCXI5LFNUS19QQVJNKHI5KShyMSk7CQkJCVwKKwlsZAlyMTAsU1RLX1BBUk0ocjEwKShyMSk7CQkJCVwKKwltdGxyCXIwOwkJCQkJCVwKKzE6CisKIC8qCiAgKiBwb3N0Y2FsbCBpcyBwZXJmb3JtZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGZ1bmN0aW9uIHJldHVybiB3aGljaAogICogYWxsb3dzIGxpYmVyYWwgdXNlIG9mIHZvbGF0aWxlIHJlZ2lzdGVycy4gIFdlIGJyYW5jaCBhcm91bmQgdGhpcwogICogaW4gZWFybHkgaW5pdCAoZWcgd2hlbiBwb3B1bGF0aW5nIHRoZSBNTVUgaGFzaHRhYmxlKSBieSB1c2luZyBhbgogICogdW5jb25kaXRpb25hbCBjcHUgZmVhdHVyZS4KICAqLwotI2RlZmluZSBIQ0FMTF9JTlNUX1BPU1RDQUxMCQkJCQlcCisjZGVmaW5lIF9fSENBTExfSU5TVF9QT1NUQ0FMTAkJCQkJXAogQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJXAogCWIJMWY7CQkJCQkJXAogRU5EX0ZUUl9TRUNUSU9OKDAsIDEpOwkJCQkJCVwKLQlsZAlyNCxTVEtfUEFSTShyMykocjEpOwkvKiB2YWxpZGF0ZSBvcGNvZGUgKi8JXAotCWNtcGxkaQljcjcscjQsTUFYX0hDQUxMX09QQ09ERTsJCQlcCi0JYmd0LQljcjcsMWY7CQkJCQkJXAotCQkJCQkJCQlcCi0JLyogZ2V0IHRpbWUgYW5kIFBVUlIgc25hcHNob3RzIGFmdGVyIGhjYWxsICovCQlcCi0JbWZ0YglyNzsJCQkvKiB0aW1lYmFzZSBhZnRlciAqLwlcCi1CRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCi0JbWZzcHIJcjgsU1BSTl9QVVJSOwkJLyogUFVSUiBhZnRlciAqLwlcCi0JbGQJcjYsU1RLX1BBUk0ocjYpKHIxKTsJLyogUFVSUiBiZWZvcmUgKi8JXAotCXN1YmYJcjYscjYscjg7CQkvKiBkZWx0YSAqLwkJXAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7CQkJCVwKLQlsZAlyNSxTVEtfUEFSTShyNSkocjEpOwkvKiB0aW1lYmFzZSBiZWZvcmUgKi8JXAotCXN1YmYJcjUscjUscjc7CQkvKiB0aW1lIGRlbHRhICovCVwKLQkJCQkJCQkJXAotCS8qIGNhbGN1bGF0ZSBhZGRyZXNzIG9mIHN0YXQgc3RydWN0dXJlIHI0ID0gb3Bjb2RlICovCVwKLQlzcmRpCXI0LHI0LDI7CQkvKiBpbmRleCBpbnRvIGFycmF5ICovCVwKLQltdWxsaQlyNCxyNCxIQ0FMTF9TVEFUX1NJWkU7CQkJCVwKLQlMT0FEX1JFR19BRERSKHI3LCBwZXJfY3B1X19oY2FsbF9zdGF0cyk7CQlcCi0JYWRkCXI0LHI0LHI3OwkJCQkJXAotCWxkCXI3LFBBQ0FfREFUQV9PRkZTRVQocjEzKTsgLyogcGVyIGNwdSBvZmZzZXQgKi8JXAotCWFkZAlyNCxyNCxyNzsJCQkJCVwKLQkJCQkJCQkJXAotCS8qIHVwZGF0ZSBzdGF0cwkqLwkJCQkJXAotCWxkCXI3LEhDQUxMX1NUQVRfQ0FMTFMocjQpOyAvKiBjb3VudCAqLwkJXAotCWFkZGkJcjcscjcsMTsJCQkJCVwKLQlzdGQJcjcsSENBTExfU1RBVF9DQUxMUyhyNCk7CQkJXAotCWxkICAgICAgcjcsSENBTExfU1RBVF9UQihyNCk7CS8qIHRpbWViYXNlICovCQlcCi0JYWRkCXI3LHI3LHI1OwkJCQkJXAotCXN0ZAlyNyxIQ0FMTF9TVEFUX1RCKHI0KTsJCQkJXAotQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJXAotCWxkCXI3LEhDQUxMX1NUQVRfUFVSUihyNCk7CS8qIFBVUlIgKi8JCVwKLQlhZGQJcjcscjcscjY7CQkJCQlcCi0Jc3RkCXI3LEhDQUxMX1NUQVRfUFVSUihyNCk7CQkJCVwKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1BVUlIpOwkJCQlcCisJbGQgICAgICByMTIsaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudEB0b2MocjIpOwkJXAorCWNtcGRpCXIxMiwwOwkJCQkJCVwKKwliZXErCTFmOwkJCQkJCVwKKwltZmxyCXIwOwkJCQkJCVwKKwlsZAlyNixTVEtfUEFSTShyMykocjEpOwkJCQlcCisJc3RkCXIzLFNUS19QQVJNKHIzKShyMSk7CQkJCVwKKwltcglyNCxyMzsJCQkJCQlcCisJbXIJcjMscjY7CQkJCQkJXAorCXN0ZAlyMCwxNihyMSk7CQkJCQlcCisJc3RkdQlyMSwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpOwkJCVwKKwlibAkuX190cmFjZV9oY2FsbF9leGl0OwkJCQlcCisJYWRkaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQlcCisJbGQJcjAsMTYocjEpOwkJCQkJXAorCWxkCXIzLFNUS19QQVJNKHIzKShyMSk7CQkJCVwKKwltdGxyCXIwOwkJCQkJCVwKIDE6CisKKyNkZWZpbmUgSENBTExfSU5TVF9QT1NUQ0FMTF9OT1JFVFMJCQkJXAorCWxpCXI1LDA7CQkJCQkJXAorCV9fSENBTExfSU5TVF9QT1NUQ0FMTAorCisjZGVmaW5lIEhDQUxMX0lOU1RfUE9TVENBTEwoQlVGUkVHKQkJCQlcCisJbXIJcjUsQlVGUkVHOwkJCQkJXAorCV9fSENBTExfSU5TVF9QT1NUQ0FMTAorCiAjZWxzZQotI2RlZmluZSBIQ0FMTF9JTlNUX1BSRUNBTEwKLSNkZWZpbmUgSENBTExfSU5TVF9QT1NUQ0FMTAorI2RlZmluZSBIQ0FMTF9JTlNUX1BSRUNBTEwoRklSU1RfQVJHKQorI2RlZmluZSBIQ0FMTF9JTlNUX1BPU1RDQUxMX05PUkVUUworI2RlZmluZSBIQ0FMTF9JTlNUX1BPU1RDQUxMKEJVRlJFRykKICNlbmRpZgogCiAJLnRleHQKQEAgLTg2LDExICsxMTIsMTEgQEAKIAltZmNyCXIwCiAJc3R3CXIwLDgocjEpCiAKLQlIQ0FMTF9JTlNUX1BSRUNBTEwKKwlIQ0FMTF9JTlNUX1BSRUNBTEwocjQpCiAKIAlIVlNDCQkJCS8qIGludm9rZSB0aGUgaHlwZXJ2aXNvciAqLwogCi0JSENBTExfSU5TVF9QT1NUQ0FMTAorCUhDQUxMX0lOU1RfUE9TVENBTExfTk9SRVRTCiAKIAlsd3oJcjAsOChyMSkKIAltdGNyZgkweGZmLHIwCkBAIC0xMDIsNyArMTI4LDcgQEAKIAltZmNyCXIwCiAJc3R3CXIwLDgocjEpCiAKLQlIQ0FMTF9JTlNUX1BSRUNBTEwKKwlIQ0FMTF9JTlNUX1BSRUNBTEwocjUpCiAKIAlzdGQgICAgIHI0LFNUS19QQVJNKHI0KShyMSkgICAgIC8qIFNhdmUgcmV0IGJ1ZmZlciAqLwogCkBAIC0xMjEsNyArMTQ3LDcgQEAKIAlzdGQJcjYsIDE2KHIxMikKIAlzdGQJcjcsIDI0KHIxMikKIAotCUhDQUxMX0lOU1RfUE9TVENBTEwKKwlIQ0FMTF9JTlNUX1BPU1RDQUxMKHIxMikKIAogCWx3eglyMCw4KHIxKQogCW10Y3JmCTB4ZmYscjAKQEAgLTE2OCw3ICsxOTQsNyBAQAogCW1mY3IJcjAKIAlzdHcJcjAsOChyMSkKIAotCUhDQUxMX0lOU1RfUFJFQ0FMTAorCUhDQUxMX0lOU1RfUFJFQ0FMTChyNSkKIAogCXN0ZCAgICAgcjQsU1RLX1BBUk0ocjQpKHIxKSAgICAgLyogU2F2ZSByZXQgYnVmZmVyICovCiAKQEAgLTE5Niw3ICsyMjIsNyBAQAogCXN0ZAlyMTEsNTYocjEyKQogCXN0ZAlyMCwgNjQocjEyKQogCi0JSENBTExfSU5TVF9QT1NUQ0FMTAorCUhDQUxMX0lOU1RfUE9TVENBTEwocjEyKQogCiAJbHd6CXIwLDgocjEpCiAJbXRjcmYJMHhmZixyMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwppbmRleCAzNjMxYTRmLi4yZjU4YzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdHJhY2UuaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGhjYWxsX3N0YXRzW0hDQUxMX1NUQVRfQVJSQVlfU0laRV0sIGhjYWxsX3N0YXRzKTsKIApAQCAtMTAwLDYgKzEwMSwzNSBAQAogI2RlZmluZQlIQ0FMTF9ST09UX0RJUgkJImhjYWxsX2luc3QiCiAjZGVmaW5lIENQVV9OQU1FX0JVRl9TSVpFCTMyCiAKKworc3RhdGljIHZvaWQgcHJvYmVfaGNhbGxfZW50cnkodW5zaWduZWQgbG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJc3RydWN0IGhjYWxsX3N0YXRzICpoOworCisJaWYgKG9wY29kZSA+IE1BWF9IQ0FMTF9PUENPREUpCisJCXJldHVybjsKKworCWggPSAmZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOworCWgtPnRiX3N0YXJ0ID0gbWZ0YigpOworCWgtPnB1cnJfc3RhcnQgPSBtZnNwcihTUFJOX1BVUlIpOworfQorCitzdGF0aWMgdm9pZCBwcm9iZV9oY2FsbF9leGl0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIHJldHZhbCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqcmV0YnVmKQoreworCXN0cnVjdCBoY2FsbF9zdGF0cyAqaDsKKworCWlmIChvcGNvZGUgPiBNQVhfSENBTExfT1BDT0RFKQorCQlyZXR1cm47CisKKwloID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOworCWgtPm51bV9jYWxscysrOworCWgtPnRiX3RvdGFsID0gbWZ0YigpIC0gaC0+dGJfc3RhcnQ7CisJaC0+cHVycl90b3RhbCA9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OworCisJcHV0X2NwdV92YXIoaGNhbGxfc3RhdHMpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBoY2FsbF9pbnN0X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpoY2FsbF9yb290OwpAQCAtMTEwLDYgKzE0MCwxNCBAQAogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAocmVnaXN0ZXJfdHJhY2VfaGNhbGxfZW50cnkocHJvYmVfaGNhbGxfZW50cnkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZWdpc3Rlcl90cmFjZV9oY2FsbF9leGl0KHByb2JlX2hjYWxsX2V4aXQpKSB7CisJCXVucmVnaXN0ZXJfdHJhY2VfaGNhbGxfZW50cnkocHJvYmVfaGNhbGxfZW50cnkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAloY2FsbF9yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEhDQUxMX1JPT1RfRElSLCBOVUxMKTsKIAlpZiAoIWhjYWxsX3Jvb3QpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggOTAzZWI5ZS4uMDcwNzY1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogI2luY2x1ZGUgInBzZXJpZXMuaCIKQEAgLTY2MSwzICs2NjIsMzUgQEAKIEVYUE9SVF9TWU1CT0woYXJjaF9mcmVlX3BhZ2UpOwogCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworLyoKKyAqIFdlIG9wdGltaXNlIG91ciBoY2FsbCBwYXRoIGJ5IHBsYWNpbmcgaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudAorICogZGlyZWN0bHkgaW4gdGhlIFRPQyBzbyB3ZSBjYW4gY2hlY2sgaWYgdGhlIGhjYWxsIHRyYWNlcG9pbnRzIGFyZQorICogZW5hYmxlZCB2aWEgYSBzaW5nbGUgbG9hZC4KKyAqLworCisvKiBOQjogcmVnL3VucmVnIGFyZSBjYWxsZWQgd2hpbGUgZ3VhcmRlZCB3aXRoIHRoZSB0cmFjZXBvaW50c19tdXRleCAqLworZXh0ZXJuIGxvbmcgaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudDsKKwordm9pZCBoY2FsbF90cmFjZXBvaW50X3JlZ2Z1bmModm9pZCkKK3sKKwloY2FsbF90cmFjZXBvaW50X3JlZmNvdW50Kys7Cit9CisKK3ZvaWQgaGNhbGxfdHJhY2Vwb2ludF91bnJlZ2Z1bmModm9pZCkKK3sKKwloY2FsbF90cmFjZXBvaW50X3JlZmNvdW50LS07Cit9CisKK3ZvaWQgX190cmFjZV9oY2FsbF9lbnRyeSh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqYXJncykKK3sKKwl0cmFjZV9oY2FsbF9lbnRyeShvcGNvZGUsIGFyZ3MpOworfQorCit2b2lkIF9fdHJhY2VfaGNhbGxfZXhpdChsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyByZXR2YWwsCisJCQl1bnNpZ25lZCBsb25nICpyZXRidWYpCit7CisJdHJhY2VfaGNhbGxfZXhpdChvcGNvZGUsIHJldHZhbCwgcmV0YnVmKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCmluZGV4IGJmMmUxYWMuLjExNjRjMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTQzMiw4ICs0MzIsNiBAQAogCQkvKiBSZWFkIGNvbmZpZyBzcGFjZSBiYWNrIHNvIHdlIGNhbiByZXN0b3JlIGFmdGVyIHJlc2V0ICovCiAJCXJlYWRfbXNpX21zZyh2aXJxLCAmbXNnKTsKIAkJZW50cnktPm1zZyA9IG1zZzsKLQotCQl1bm1hc2tfbXNpX2lycSh2aXJxKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDQxOWY4YTYuLmI5YmYwZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgpAQCAtMjE5LDYgKzIyMCwxNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cCh1bnNpZ25lZCBpbnQgdmlycSkKIHsKKwkvKgorCSAqIFRoZSBnZW5lcmljIE1TSSBjb2RlIHJldHVybnMgd2l0aCB0aGUgaW50ZXJydXB0IGRpc2FibGVkIG9uIHRoZQorCSAqIGNhcmQsIHVzaW5nIHRoZSBNU0kgbWFzayBiaXRzLiBGaXJtd2FyZSBkb2Vzbid0IGFwcGVhciB0byB1bm1hc2sKKwkgKiBhdCB0aGF0IGxldmVsLCBzbyB3ZSBkbyBpdCBoZXJlIGJ5IGhhbmQuCisJICovCisJaWYgKGlycV90b19kZXNjKHZpcnEpLT5tc2lfZGVzYykKKwkJdW5tYXNrX21zaV9pcnEodmlycSk7CisKIAkvKiB1bm1hc2sgaXQgKi8KIAl4aWNzX3VubWFza19pcnEodmlycSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggYzZmMGE3MWIuLmJkYmU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTUxNyw2ICs1MTcsMTUgQEAKIAlpbl94bW9uID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0JPT0tFCisJaWYgKHJlZ3MtPm1zciAmIE1TUl9ERSkgeworCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKKwkJaWYgKGJwICE9IE5VTEwpIHsKKwkJCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKSAmYnAtPmluc3RyWzBdOworCQkJYXRvbWljX2luYygmYnAtPnJlZl9jb3VudCk7CisJCX0KKwl9CisjZWxzZQogCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKSB7CiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCQlpZiAoYnAgIT0gTlVMTCkgewpAQCAtNTMwLDcgKzUzOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0KKyNlbmRpZgogCWluc2VydF9jcHVfYnB0cygpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODk0LDYgKzkwMywxNCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19CT09LRQorc3RhdGljIGludCBkb19zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CisJcmV0dXJuIDE7Cit9CisjZWxzZQogLyoKICAqIFN0ZXAgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCiAgKiBTb21lIGluc3RydWN0aW9ucyB3ZSBlbXVsYXRlLCBvdGhlcnMgd2UgZXhlY3V0ZSB3aXRoIE1TUl9TRSBzZXQuCkBAIC05MjQsNiArOTQxLDcgQEAKIAlyZWdzLT5tc3IgfD0gTVNSX1NFOwogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGJvb3RjbWRzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDQzYzBhY2EuLjE2YzY3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC05NSw2ICs5NSwzNCBAQAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DS19CSAorCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX0xPQ0sKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0JICisJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DS19JUlEKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0sKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfQkgKKwlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUKKwlzZWxlY3QgQVJDSF9JTkxJTkVfUkVBRF9UUllMT0NLCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1JFQURfTE9DSworCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX0xPQ0tfQkgKKwlzZWxlY3QgQVJDSF9JTkxJTkVfUkVBRF9MT0NLX0lSUQorCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRQorCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX1VOTE9DSworCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX1VOTE9DS19CSAorCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX1VOTE9DS19JUlEKKwlzZWxlY3QgQVJDSF9JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRQorCXNlbGVjdCBBUkNIX0lOTElORV9XUklURV9UUllMT0NLCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1dSSVRFX0xPQ0sKKwlzZWxlY3QgQVJDSF9JTkxJTkVfV1JJVEVfTE9DS19CSAorCXNlbGVjdCBBUkNIX0lOTElORV9XUklURV9MT0NLX0lSUQorCXNlbGVjdCBBUkNIX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUKKwlzZWxlY3QgQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19CSAorCXNlbGVjdCBBUkNIX0lOTElORV9XUklURV9VTkxPQ0tfSVJRCisJc2VsZWN0IEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFCiAKIGNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA3MDRkZDM5Li43N2RmNzI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQl9CiAJCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKVNVQkNfU1RJQjYgfAogCQkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7Ci0JCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNzsKKwkJCWRpYWcyMDRfc3RvcmVfc2MgPSBTVUJDX1NUSUI2OwogCQkJZGlhZzIwNF9pbmZvX3R5cGUgPSBJTkZPX0VYVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggN2VmZDBhYi4uZWZiNzRmZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaApAQCAtNDksNyArNDksNyBAQAogCiAjZGVmaW5lIEJVRygpIGRvIHsJCQkJCVwKIAlfX0VNSVRfQlVHKDApOwkJCQkJXAotCWZvciAoOzspOwkJCQkJXAorCXVucmVhY2hhYmxlKCk7CQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFdBUk5fT04oeCkgKHsJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCmluZGV4IDI0YjEyNDQuLmYyMzk2MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaApAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGNwdXRpbWVfdG9fbXNlY3MoY29uc3QgY3B1dGltZV90IGNwdXRpbWUpCiB7Ci0JcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDApOworCXJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwKTsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QKQEAgLTE2MCw3ICsxNjAsNyBAQAogc3RhdGljIGlubGluZSBjbG9ja190CiBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV90IGNwdXRpbWUpCiB7Ci0JcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKKwlyZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdApAQCAtMTc1LDcgKzE3NSw3IEBACiBzdGF0aWMgaW5saW5lIGNsb2NrX3QKIGNwdXRpbWU2NF90b19jbG9ja190KGNwdXRpbWU2NF90IGNwdXRpbWUpCiB7Ci0gICAgICAgcmV0dXJuIF9fZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKKyAgICAgICByZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOwogfQogCiBzdHJ1Y3QgczM5MF9pZGxlX2RhdGEgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCA0MWNlNjg2Li5jOWFmMGQxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE5MSwzMyArMTkxLDQgQEAKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9jawotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfbG9jawotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX2xvY2sKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX2xvY2tfYmgKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX2xvY2tfYmgKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2JoCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl9sb2NrX2lycQotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfbG9ja19pcnEKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycQotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19pcnFzYXZlCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2lycXNhdmUKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycXNhdmUKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3RyeWxvY2sKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3RyeWxvY2sKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV90cnlsb2NrCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl90cnlsb2NrX2JoCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2sKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9jawotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9jawotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdW5sb2NrX2JoCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2tfYmgKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfYmgKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9ja19pcnEKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19pcnEKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZQotCiAjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGJmOGI0YWUuLmU0OWU5ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkJZGlzYWJsZWRfd2FpdCgwKTsKIAogCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBUT0RfVU5JWF9FUE9DSDsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOwogfQogCiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKQEAgLTE2Nyw2ICsxNjgsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qIHJlLWluaXRpYWxpemUgY3B1dGltZSBhY2NvdW50aW5nLiAqLworCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBnZXRfY2xvY2soKTsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKwlTMzkwX2xvd2NvcmUudXNlcl90aW1lciA9IDA7CisJUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciA9IDA7CisJYXNtIHZvbGF0aWxlKCJTUFQgMCglMCkiIDogOiAiYSIgKCZTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIpKTsKKwogCS8qIHJlLXNldHVwIGJvb3QgY29tbWFuZCBsaW5lIHdpdGggbmV3IGlwbCB2bSBwYXJtcyAqLwogCWlwbF91cGRhdGVfcGFyYW1ldGVycygpOwogCXNldHVwX2Jvb3RfY29tbWFuZF9saW5lKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZjQzZDJlZS4uNDgyMTVkMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtNTY1LDEwICs1NjUsMTAgQEAKIAlsaAklcjcsMHg4YQkJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0JbAklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg0LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsCSVyOCxfX1RJX3Rhc2soJXI5KQorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCiAJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggYTZmN2IyMC4uOWFmZjFkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTU0MywxMCArNTQzLDEwIEBACiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCiAJbGxnaAklcjcsX19MQ19TVkNfSU5UX0NPREUJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKLQlsZwklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsZwklcjgsX19USV90YXNrKCVyOSkKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXI4KSxfX0xDX1BFUl9BVE1JRAorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyOCksX19MQ19QRVJfQUREUkVTUworCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXI4KSxfX0xDX1BFUl9BQ0NFU1NfSUQKIAlvaQlfX1RJX2ZsYWdzKzcoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAogCVRSQUNFX0lSUVNfT04KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwppbmRleCBmNWZlMzRkLi41YTgyYmM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTIwMyw3MyArMjAzLDEwIEBACiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YVtdOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOwogCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKipzeXNjYWxsc19tZXRhZGF0YTsKLQotc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c2NhbGxfbnJfdG9fbWV0YShpbnQgbnIpCit1bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCiB7Ci0JaWYgKCFzeXNjYWxsc19tZXRhZGF0YSB8fCBuciA+PSBOUl9zeXNjYWxscyB8fCBuciA8IDApCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwogfQotCi1pbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQotCQlyZXR1cm4gLTE7Ci0JZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspCi0JCWlmIChzeXNjYWxsc19tZXRhZGF0YVtpXSkKLQkJCWlmICghc3RyY21wKHN5c2NhbGxzX21ldGFkYXRhW2ldLT5uYW1lLCBuYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZW50ZXJfaWQoaW50IG51bSwgaW50IGlkKQotewotCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmVudGVyX2lkID0gaWQ7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZXhpdF9pZChpbnQgbnVtLCBpbnQgaWQpCi17Ci0Jc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZXhpdF9pZCA9IGlkOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKLXsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RhcnQ7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0b3A7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKLQotCXN0YXJ0ID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKLQlzdG9wID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOwotCWthbGxzeW1zX2xvb2t1cChzeXNjYWxsLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCi0JZm9yICggOyBzdGFydCA8IHN0b3A7IHN0YXJ0KyspIHsKLQkJaWYgKHN0YXJ0LT5uYW1lICYmICFzdHJjbXAoc3RhcnQtPm5hbWUgKyAzLCBzdHIgKyAzKSkKLQkJCXJldHVybiBzdGFydDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqbWV0YTsKLQlpbnQgaTsKLQlzeXNjYWxsc19tZXRhZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjYWxsc19tZXRhZGF0YSkgKiBOUl9zeXNjYWxscywKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspIHsKLQkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKCh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW2ldKTsKLQkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOwotCX0KLQlyZXR1cm4gMDsKLX0KLWFyY2hfaW5pdGNhbGwoYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IGVlNTdhNDIuLjQ4OTBhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMTU5NSwxMCArMTU5NSw5IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZWxzZSB7Ci0JCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApOwotCQlmb3IgKDs7KTsKLQl9CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CisJZm9yICg7Oyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHN0b3BfYWN0aW9uID0ge1NIVVRET1dOX0FDVElPTl9TVE9QX1NUUiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgwMmM4YWIuLjA3MjlmMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMzEsOSArMzEsOSBAQAogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzEwXSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IiwgImV0ZjNlaCIKKwkJImVkYXQiLCAiZXRmM2VoIiwgImhpZ2hncHJzIgogCX07CiAJc3RydWN0IF9sb3djb3JlICpsYzsKIAl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CkBAIC00OCw3ICs0OCw3IEBACiAJCQkgICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAogCQkJICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7CiAJCXNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKIAkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwogCQlzZXFfcHV0cyhtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGM5MzJjYWEuLjkzZTUyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNzYsNyArNzYsNiBAQAogCV9fdTMyIHN0YXR1czsKIAogCXN3aXRjaCAoc2lnbmFsX3Byb2Nlc3Nvcl9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2UpKSB7Ci0JY2FzZSBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ6CiAJY2FzZSBzaWdwX3N0YXR1c19zdG9yZWQ6CiAJCS8qIENoZWNrIGZvciBzdG9wcGVkIGFuZCBjaGVjayBzdG9wIHN0YXRlICovCiAJCWlmIChzdGF0dXMgJiAweDUwKQpAQCAtNjM4LDYgKzYzNyw4IEBACiAJLyogV2FpdCB1bnRpbCB0YXJnZXQgY3B1IGlzIGRvd24gKi8KIAl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCWNwdV9yZWxheCgpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CiB9CkBAIC02NDUsOCArNjQ2LDggQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JQlVHKCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CiAJZm9yICg7Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IDdjODY1M2UuLjBjMjZjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTk5LDYgKzE5OSw3IEBACiAJYnJjCTIsNGIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDU6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TVE9QCS8qIHN0b3AgcmVzdW1lIChjdXJyZW50KSBDUFUgKi8KKwlicmMJMiw1YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNjoJagk2YgogCiByZXN0YXJ0X3N1c3BlbmQ6CkBAIC0yMDYsNiArMjA3LDcgQEAKIAlsbGdoCSVyMiwwKCVyMSkKIDc6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciByZXN1bWUgQ1BVICovCisJYnJjCTgsN2IJCQkvKiBhY2NlcHRlZCwgc3RhdHVzIDAsIHN0aWxsIHJ1bm5pbmcgKi8KIAlicmMJMiw3YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogCXRtbGwJJXI5LDB4NDAJCS8qIFRlc3QgaWYgcmVzdW1lIENQVSBpcyBzdG9wcGVkICovCiAJanoJN2IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBiOTQwNDI0Li44OGNkZWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0zNyw3ICszNyw2IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0Jc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCkBAIC0xMjIsNiArMTIxLDkgQEAKIAlib29sCiAJc2VsZWN0IEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWJvb2wKKwogY29uZmlnIFNZU19TVVBQT1JUU19TTVAKIAlib29sCiAKQEAgLTE5Niw2ICsxOTgsNyBAQAogCXNlbGVjdCBDUFVfSEFTX1NSX1JCCiAJc2VsZWN0IENQVV9IQVNfRlBVIGlmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IFNZU19TVVBQT1JUU19UTVUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBNTVUKIAogY29uZmlnIENQVV9TSDRBCiAJYm9vbApAQCAtMjEwLDYgKzIxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfSEFTX0ZQVQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0hYMgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGZjNTFhOTEuLjY2ZTQwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTk5LDcgKzE5OSw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgXAorQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAogCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCiBQSE9OWSArPSBtYWtldG9vbHMgJChCT09UX1RBUkdFVFMpIEZPUkNFCiAKQEAgLTIyNSw2ICsyMjUsNyBAQAogCUBlY2hvICcgIHZtbGludXguc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIEVMRiBTLXJlY29yZCcKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKKwlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCAyNWNkZjczLi41MjgwMTMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTM1LDcgKzM0LDcgQEAKIAlpbnQgbWlub3I7CiAJaW50IHJldCA9IC1FTk9FTlQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CiAJaWYgKG1pbm9yIDwgREVWQ09VTlQpIHsKIAkJaWYgKG9wZW5DbnQgPiAwKSB7CkBAIC00NSw3ICs0NCw3IEBACiAJCQlyZXQgPSAwOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYwLDggKzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgZ2lvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGFkZHIgPSAwOwpAQCAtMTI5LDcgKzEyNyw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBnaW9fb3BlbiwJLyogb3BlbiAqLwogCS5yZWxlYXNlID0gZ2lvX2Nsb3NlLAkvKiByZWxlYXNlICovCi0JLmlvY3RsID0gZ2lvX2lvY3RsLAkvKiBpb2N0bCAqLworCS51bmxvY2tlZF9pb2N0bCA9IGdpb19pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdpb19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCmluZGV4IDRhZjNhNzcuLmMzNzYxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCkBAIC0xMSwxMCArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKaW5kZXggYWY2NGQwMy4uYTVjMGRmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCkBAIC0xNSwxNCArMTUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2lmZGVmIENPTkZJR19NVEQKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJza19wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCkBAIC00MSw2ICszOSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhID0geworCS5wYXJ0cwkJPSByc2tfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKSwKIAkud2lkdGgJCT0gMiwKIH07CiAKQEAgLTYwLDcgKzYwLDggQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOworI2lmZGVmIENPTkZJR19NVEQKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9pbmZvIHJza19mbGFzaF9tYXAgPSB7CiAJLm5hbWUJCT0gIlJTSysgRmxhc2giLApAQCAtNjgsNiArNjksMTAgQEAKIAkuYmFua3dpZHRoCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKKwogc3RhdGljIHZvaWQgX19pbml0IHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKQogewogCWludCBucl9wYXJ0cyA9IDA7CkBAIC03NywxNCArODIsMTQgQEAKIAlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCwgcHJvYmVzLAogCQkJCQkmcGFyc2VkX3BhcnRpdGlvbnMsIDApOwogCS8qIElmIHRoZXJlIGlzIG5vIHBhcnRpdGlvbiB0YWJsZSwgdXNlZCB0aGUgaGFyZCBjb2RlZCB0YWJsZSAqLwotCWlmIChucl9wYXJ0cyA8PSAwKSB7Ci0JCWZsYXNoX2RhdGEucGFydHMgPSByc2tfcGFydGl0aW9uczsKLQkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUocnNrX3BhcnRpdGlvbnMpOwotCX0gZWxzZSB7CisJaWYgKG5yX3BhcnRzID4gMCkgewogCQlmbGFzaF9kYXRhLm5yX3BhcnRzID0gbnJfcGFydHM7CiAJCWZsYXNoX2RhdGEucGFydHMgPSBwYXJzZWRfcGFydGl0aW9uczsKIAl9CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKSB7fQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyc2tfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmZsYXNoX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBhMTMxNjg3Li5jYjhjZjU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0yMCwxMSArMjAsMTIgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogCitzdWZmaXgteSA6PSBiaW4KIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYQordGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIApAQCAtODgsNiArODksOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmJpbjogJChvYmopL3ZtbGludXguYmluCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLG5vbmUpCisKIE9CSkNPUFlGTEFHU192bWxpbnV4LnNyZWMgOj0gLUkgYmluYXJ5IC1PIHNyZWMKICQob2JqKS92bWxpbnV4LnNyZWM6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXgKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCmluZGV4IDE5ODdmM2UuLjA2ZTIyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAotCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgXAorCXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIF9fU1BJTl9MT0NLX1VOTE9DS0VEKChuYW1lKS53YWl0X2xvY2spLCBcCiAJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCiAJICBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwppbmRleCA2YjVkMTkxLi5hMzUxZWQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCkBAIC02OCw3ICs2OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW1hc2tfaXJxX2NoaXAgPSB7Ci0JLnR5cGVuYW1lCT0gIlNSLklNQVNLIiwKKwkubmFtZQkJPSAiU1IuSU1BU0siLAogCS5tYXNrCQk9IG1hc2tfaW1hc2tfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX2ltYXNrX2lycSwKIAkubWFza19hY2sJPSBtYXNrX2ltYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwppbmRleCA2YzA5MmYxLi4wNmU3ZTI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCkBAIC04NSw3ICs4NSw3IEBACiBzdGF0aWMgdm9pZCBlbmRfaW50Y19pcnEodW5zaWduZWQgaW50IGlycSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW50Y19pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiSU5UQyIsCisJLm5hbWUgPSAiSU5UQyIsCiAJLnN0YXJ0dXAgPSBzdGFydHVwX2ludGNfaXJxLAogCS5zaHV0ZG93biA9IHNodXRkb3duX2ludGNfaXJxLAogCS5lbmFibGUgPSBlbmFibGVfaW50Y19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwppbmRleCAwM2IzNjE2Li5kNzZhMjMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CkBAIC01NTQsOSArNTU1LDMwIEBACiAJICogTk9URTogdGhlIHJldHVybiBhZGRyZXNzIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0dXAgYnkgdGhlCiAJICogdGltZSB0aGlzIGZ1bmN0aW9uIG1ha2VzIGl0cyBmaXJzdCBmdW5jdGlvbiBjYWxsLgogCSAqLwotCWlmICghcGMgJiYgIXByZXYpCisJaWYgKCFwYyB8fCAhcHJldikKIAkJcGMgPSAodW5zaWduZWQgbG9uZyljdXJyZW50X3RleHRfYWRkcigpOwogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS8qCisJICogSWYgb3VyIHN0YWNrIGhhcyBiZWVuIHBhdGNoZWQgYnkgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlcgorCSAqIHRoZW4gd2UgbWlnaHQgc2VlIHRoZSBhZGRyZXNzIG9mIHJldHVybl90b19oYW5kbGVyKCkgd2hlcmUgd2UKKwkgKiBleHBlY3RlZCB0byBmaW5kIHRoZSByZWFsIHJldHVybiBhZGRyZXNzLgorCSAqLworCWlmIChwYyA9PSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXIpIHsKKwkJaW50IGluZGV4ID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CisKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGhhdmUgbm8gd2F5IG9mIHRyYWNraW5nIGhvdyBtYW55CisJCSAqIHJldHVybl90b19oYW5kbGVyKCkncyB3ZSd2ZSBzZWVuLiBJZiB0aGVyZSBpcyBtb3JlCisJCSAqIHRoYW4gb25lIHBhdGNoZWQgcmV0dXJuIGFkZHJlc3Mgb24gb3VyIHN0YWNrLAorCQkgKiBjb21wbGFpbiBsb3VkbHkuCisJCSAqLworCQlXQVJOX09OKGluZGV4ID4gMCk7CisKKwkJcGMgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldDsKKwl9CisjZW5kaWYKKwogCWZyYW1lID0gbWVtcG9vbF9hbGxvYyhkd2FyZl9mcmFtZV9wb29sLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWZyYW1lKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZHdhcmYgZnJhbWVcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA2OGQ5MjIzLi4zZWI4NDkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMTIxLDcgKzEyMSw3IEBACiBFTlRSWShyZXN1bWVfdXNlcnNwYWNlKQogCSEgcjg6IGN1cnJlbnRfdGhyZWFkX2luZm8KIAljbGkKLQlUUkFDRV9JUlFTX09mRgorCVRSQUNFX0lSUVNfT0ZGCiAJbW92LmwJQChUSV9GTEFHUyxyOCksIHIwCQkhIGN1cnJlbnRfdGhyZWFkX2luZm8tPmZsYWdzCiAJdHN0CSMoX1RJRl9XT1JLX01BU0sgJiAweGZmKSwgcjAKIAlidC9zCV9fcmVzdG9yZV9hbGwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTNkY2M2ZC4uMmM0OGUyNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKQEAgLTI5MSwzMSArMjkxLDQ4IEBACiAJcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKIH0KIAotdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCitpbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQorCQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspCisJCWlmIChzeXNjYWxsc19tZXRhZGF0YVtpXSkKKwkJCWlmICghc3RyY21wKHN5c2NhbGxzX21ldGFkYXRhW2ldLT5uYW1lLCBuYW1lKSkKKwkJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgc2V0X3N5c2NhbGxfZW50ZXJfaWQoaW50IG51bSwgaW50IGlkKQoreworCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmVudGVyX2lkID0gaWQ7Cit9CisKK3ZvaWQgc2V0X3N5c2NhbGxfZXhpdF9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZXhpdF9pZCA9IGlkOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CiAJdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKLQlzdGF0aWMgYXRvbWljX3QgcmVmczsKLQotCWlmIChhdG9taWNfaW5jX3JldHVybigmcmVmcykgIT0gMSkKLQkJZ290byBlbmQ7CiAKIAlzeXNjYWxsc19tZXRhZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjYWxsc19tZXRhZGF0YSkgKgogCQkJCQlGVFJBQ0VfU1lTQ0FMTF9NQVgsIEdGUF9LRVJORUwpOwogCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpIHsKIAkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NZU0NBTExfTUFYOyBpKyspIHsKIAkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKHBzeXNfc3lzY2FsbF90YWJsZVtpXSk7CiAJCXN5c2NhbGxzX21ldGFkYXRhW2ldID0gbWV0YTsKIAl9Ci0JcmV0dXJuOwogCi0JLyogUGFyYW5vaWQ6IGF2b2lkIG92ZXJmbG93ICovCi1lbmQ6Ci0JYXRvbWljX2RlYygmcmVmcyk7CisJcmV0dXJuIDA7CiB9CithcmNoX2luaXRjYWxsKGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHMpOwogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggN2NiOTMzYi4uZWFjN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEwNiw3ICsxMDcsNyBAQAogc3RhdGljIHVuaW9uIGlycV9jdHggKnNvZnRpcnFfY3R4W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKIAotYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSBfX2lycV9lbnRyeSBpbnQgZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCBmOWQ0NGY4Li45OWI0ZmI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTU0OSw2ICs1NDksOCBAQAogCiAJaWYgKGNwdSA9PSAwKQogCQlzZXFfcHJpbnRmKG0sICJtYWNoaW5lXHRcdDogJXNcbiIsIGdldF9zeXN0ZW1fdHlwZSgpKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGNwdSk7CiAJc2VxX3ByaW50ZihtLCAiY3B1IGZhbWlseVx0OiAlc1xuIiwgaW5pdF91dHNuYW1lKCktPm1hY2hpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKaW5kZXggODZjMjcwNC4uNDQ0Y2NlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCkBAIC04NSw2ICs4NSwyMCBAQAogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyU0kxMl9pNCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbSk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJOCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTE2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyMCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTI4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMzYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0NCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTUyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k1Nik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNjApOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyX2k0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggNjcyOTcwMy4uM2RiMzc0MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQorCWlmICghKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiAwOwogCiAJaWYgKCF1c2VkX21hdGgoKSkgewpAQCAtMTk5LDcgKzE5OSw3IEBACiAjdW5kZWYgQ09QWQogCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQotCWlmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CiAJCWludCBvd25lZF9mcDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCkBAIC00NzIsNiArNDcyLDcgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoT1JfUjBfUjAsICZmcmFtZS0+cmV0Y29kZVs2XSk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChfX05SX3J0X3NpZ3JldHVybiksICZmcmFtZS0+cmV0Y29kZVs3XSk7CiAJCXJlZ3MtPnByID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVncy0+cHIsIHJlZ3MtPnByICsgc2l6ZW9mKGZyYW1lLT5yZXRjb2RlKSk7CiAJfQogCiAJaWYgKGVycikKQEAgLTQ5Nyw4ICs0OTgsNiBAQAogCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKIAkJIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBmcmFtZSwgcmVncy0+cGMsIHJlZ3MtPnByKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKLQogCXJldHVybiAwOwogCiBnaXZlX3NpZ3NlZ3Y6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDQ0MmQ4ZDQuLjE2MGRiMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0zNSw2ICszNSw4IEBACiB7CiAJc3RydWN0IHNoX2NwdWluZm8gKmMgPSBjcHVfZGF0YSArIGNwdTsKIAorCW1lbWNweShjLCAmYm9vdF9jcHVfZGF0YSwgc2l6ZW9mKHN0cnVjdCBzaF9jcHVpbmZvKSk7CisKIAljLT5sb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IGUwYjVlNGIuLjdhMmVlM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpAQCAtMTU5LDEyICsxNjAsMTIgQEAKIAogCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKIAogCXByaW50aygiJXM6ICUwNGx4IFsjJWRdXG4iLCBzdHIsIGVyciAmIDB4ZmZmZiwgKytkaWVfY291bnRlcik7Ci0KKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJcHJpbnRfbW9kdWxlcygpOwogCXNob3dfcmVncyhyZWdzKTsKIApAQCAtMTgwLDYgKzE4MSw3IEBACiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CisJb29wc19leGl0KCk7CiAKIAlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpKQogCQljcmFzaF9rZXhlYyhyZWdzKTsKQEAgLTE5MCw3ICsxOTIsNiBAQAogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAKLQlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggNjRkYzFhZC4uN2Y3YjUyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMjI3LDcgKzIyNyw3IEBACiAKIGNob2ljZQogCXByb21wdCAiSHVnZVRMQiBwYWdlIHNpemUiCi0JZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UgJiYgKENQVV9TSDQgfHwgQ1BVX1NINSkgJiYgTU1VCisJZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UKIAlkZWZhdWx0IEhVR0VUTEJfUEFHRV9TSVpFXzFNQiBpZiBQQUdFX1NJWkVfNjRLQgogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfNjRLCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IGE5OGM3ZDguLmI3ZjIzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBNQVhfRENBQ0hFX1BBR0VTCTY0CS8qIFhYWDogVHVuZSBmb3Igd2F5cyAqLwogI2RlZmluZSBNQVhfSUNBQ0hFX1BBR0VTCTMyCiAKLXN0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKK3N0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpOwogCiAvKgpAQCAtNzIsNiArNzIsNyBAQAogCiAJZm9yICh2ID0gc3RhcnQ7IHYgPCBlbmQ7IHYgKz0gTDFfQ0FDSEVfQllURVMpIHsKIAkJdW5zaWduZWQgbG9uZyBpY2FjaGVhZGRyOworCQlpbnQgaiwgbjsKIAogCQlfX29jYndiKHYpOwogCkBAIC03OSw4ICs4MCwxMCBAQAogCQkJCWNwdV9kYXRhLT5pY2FjaGUuZW50cnlfbWFzayk7CiAKIAkJLyogQ2xlYXIgaS1jYWNoZSBsaW5lIHZhbGlkLWJpdCAqLworCQluID0gYm9vdF9jcHVfZGF0YS5pY2FjaGUubl9hbGlhc2VzOwogCQlmb3IgKGkgPSAwOyBpIDwgY3B1X2RhdGEtPmljYWNoZS53YXlzOyBpKyspIHsKLQkJCV9fcmF3X3dyaXRlbCgwLCBpY2FjaGVhZGRyKTsKKwkJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspCisJCQkJX19yYXdfd3JpdGVsKDAsIGljYWNoZWFkZHIgKyAoaiAqIFBBR0VfU0laRSkpOwogCQkJaWNhY2hlYWRkciArPSBjcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyOwogCQl9CiAJfQpAQCAtODksOCArOTIsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgZXhlY19vZmZzZXQgPSAwOwogCkBAIC0xMDMsOCArMTA1LDcgQEAKIAkJZXhlY19vZmZzZXQgPSAweDIwMDAwMDAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fZmx1c2hfY2FjaGVfNDA5NihzdGFydCB8IFNIX0NBQ0hFX0FTU09DLAotCQkJICAgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CisJX19mbHVzaF9jYWNoZV9vbmUoc3RhcnQgfCBTSF9DQUNIRV9BU1NPQywgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xMjksOCArMTMwLDggQEAKIAogCQkvKiBMb29wIGFsbCB0aGUgRC1jYWNoZSAqLwogCQluID0gYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IDQwOTYpCi0JCQlmbHVzaF9jYWNoZV80MDk2KGFkZHIsIHBoeXMpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkKKwkJCWZsdXNoX2NhY2hlX29uZShhZGRyLCBwaHlzKTsKIAl9CiAKIAl3bWIoKTsKQEAgLTMxOCwxMSArMzE5LDExIEBACiAJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIEQtY2FjaGUgd2hlbiB3ZSBoYXZlIGFsaWFzICovCiAJaWYgKChhZGRyZXNzXnBoeXMpICYgYWxpYXNfbWFzaykgewogCQkvKiBMb29wIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJCS8qIExvb3AgYW5vdGhlciA0SyBvZiB0aGUgRC1jYWNoZSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHBoeXMgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTMzNyw3ICszMzgsNyBAQAogCQkgKiBrZXJuZWwgaGFzIG5ldmVyIGV4ZWN1dGVkIHRoZSBjb2RlIHRocm91Z2ggaXRzIGlkZW50aXR5CiAJCSAqIHRyYW5zbGF0aW9uLgogCQkgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CkBAIC0zOTMsNyArMzk0LDcgQEAKIH0KIAogLyoqCi0gKiBfX2ZsdXNoX2NhY2hlXzQwOTYKKyAqIF9fZmx1c2hfY2FjaGVfb25lCiAgKgogICogQGFkZHI6ICBhZGRyZXNzIGluIG1lbW9yeSBtYXBwZWQgY2FjaGUgYXJyYXkKICAqIEBwaHlzOiAgUDEgYWRkcmVzcyB0byBmbHVzaCAoaGFzIHRvIG1hdGNoIHRhZ3MgaWYgYWRkciBoYXMgJ0EnIGJpdApAQCAtNDA2LDcgKzQwNyw3IEBACiAgKiBvcGVyYXRpb24gKHB1cmdlL3dyaXRlLWJhY2spIGlzIHNlbGVjdGVkIGJ5IHRoZSBsb3dlciAyIGJpdHMgb2YKICAqICdwaHlzJy4KICAqLwotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCkKIHsKIAlpbnQgd2F5X2NvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS5jIGIvYXJjaC9zaC9tbS9jYWNoZS5jCmluZGV4IDM1YzM3YjcuLmEyZGM3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyZXR1cm47CiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQlpZiAocGZuX3ZhbGlkKHBmbikgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpKSB7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CiAJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJCWlmIChkaXJ0eSkgewogCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMjY1LDYgKzI2NSw4IEBACiAKIHZvaWQgX19pbml0IGNwdV9jYWNoZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNhY2hlX2Rpc2FibGVkID0gIShfX3Jhd19yZWFkbChDQ1IpICYgQ0NSX0NBQ0hFX0VOQUJMRSk7CisKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmljYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5kY2FjaGUpOwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuc2NhY2hlKTsKQEAgLTI3Myw2ICsyNzUsMTMgQEAKIAlfX2ZsdXNoX3B1cmdlX3JlZ2lvbgkJPSBub29wX19mbHVzaF9yZWdpb247CiAJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbgk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAorCS8qCisJICogTm8gZmx1c2hpbmcgaXMgbmVjZXNzYXJ5IGluIHRoZSBkaXNhYmxlZCBjYWNoZSBjYXNlIHNvIHdlIGNhbgorCSAqIGp1c3Qga2VlcCB0aGUgbm9vcCBmdW5jdGlvbnMgaW4gbG9jYWxfZmx1c2hfLi4oKSBhbmQgX19mbHVzaF8uLigpCisJICovCisJaWYgKHVubGlrZWx5KGNhY2hlX2Rpc2FibGVkKSkKKwkJZ290byBza2lwOworCiAJaWYgKGJvb3RfY3B1X2RhdGEuZmFtaWx5ID09IENQVV9GQU1JTFlfU0gyKSB7CiAJCWV4dGVybiB2b2lkIF9fd2VhayBzaDJfY2FjaGVfaW5pdCh2b2lkKTsKIApAQCAtMzEyLDUgKzMyMSw2IEBACiAJCXNoNV9jYWNoZV9pbml0KCk7CiAJfQogCitza2lwOgogCWVtaXRfY2FjaGVfcGFyYW1zKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCmluZGV4IDUyYTQyMDguLmJiZjkxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9idGZpeHVwcHJlcC5jCkBAIC02MSwxNCArNjEsMTQgQEAKIHVuc2lnbmVkIGxvbmcgbGFzdGZyZWxubzsKIGJ0Zml4dXAgKmxhc3RmOwogCi12b2lkIGZhdGFsKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci12b2lkIGZhdGFsKHZvaWQpCitzdGF0aWMgdm9pZCBmYXRhbCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworc3RhdGljIHZvaWQgZmF0YWwodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIk1hbGZvcm1lZCBvdXRwdXQgZnJvbSBvYmpkdW1wXG4lc1xuIiwgYnVmZmVyKTsKIAlleGl0KDEpOwogfQogCi1idGZpeHVwICpmaW5kKGludCB0eXBlLCBjaGFyICpuYW1lKQorc3RhdGljIGJ0Zml4dXAgKmZpbmQoaW50IHR5cGUsIGNoYXIgKm5hbWUpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgewpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiBhcnJheSArIGxhc3QgLSAxOwogfQogCi12b2lkIHNldF9tb2RlIChjaGFyICpidWZmZXIpCitzdGF0aWMgdm9pZCBzZXRfbW9kZSAoY2hhciAqYnVmZmVyKQogewogICAJZm9yIChtb2RlID0gMDs7IG1vZGUrKykKIAkJaWYgKGJ1ZmZlclttb2RlXSA8ICcwJyB8fCBidWZmZXJbbW9kZV0gPiAnOScpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKaW5kZXggZThkYzlhZC4uYWM5NDRhZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCisrKyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYwpAQCAtMzUsMTcgKzM1LDE3IEBACiAgKiBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmx5LgogICovCiAKLXVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IGxkMihjaGFyICpwKQogewogCXJldHVybiAocFswXSA8PCA4KSB8IHBbMV07CiB9CiAKLXVuc2lnbmVkIGludCBsZDQoY2hhciAqcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGQ0KGNoYXIgKnApCiB7CiAJcmV0dXJuIChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKIH0KIAotdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCitzdGF0aWMgdm9pZCBzdDQoY2hhciAqcCwgdW5zaWduZWQgaW50IHgpCiB7CiAJcFswXSA9IHggPj4gMjQ7CiAJcFsxXSA9IHggPj4gMTY7CkBAIC01Myw3ICs1Myw3IEBACiAJcFszXSA9IHg7CiB9CiAKLXZvaWQgdXNhZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7CiAJLyogZnNfaW1nLmd6IGlzIGFuIGltYWdlIG9mIGluaXRpYWwgcmFtZGlzay4gKi8KIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBwaWdneWJhY2sgdm1saW51eC5hb3V0IFN5c3RlbS5tYXAgZnNfaW1nLmd6XG4iKTsKQEAgLTYxLDcgKzYxLDcgQEAKIAlleGl0KDEpOwogfQogCi12b2lkIGRpZShjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBkaWUoY2hhciAqc3RyKQogewogCXBlcnJvciAoc3RyKTsKIAlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCmluZGV4IGM2M2ZkMWIuLmEyNmE2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIC8qIE5vdGU6IHJ1biB0aGlzIG9uIGFuIGEub3V0IGtlcm5lbCAodXNlIGVsZnRvYW91dCBmb3IgaXQpLCBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmxseQogICAgdXNhZ2U6IHBpZ2d5YmFjayB2bWxpbnV4IFN5c3RlbS5tYXAgdGFpbCwgd2hlcmUgdGFpbCBpcyBnemlwcGVkIGZzIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sgKi8KIAotdm9pZCBkaWUoY2hhciAqc3RyKQorc3RhdGljIHZvaWQgZGllKGNoYXIgKnN0cikKIHsKIAlwZXJyb3IgKHN0cik7CiAJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IDI1ZTg0OGYuLmQ0N2E5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtNjMsNiArNjMsMTAgQEAKIAkJCSAgICAgOiA6IDogIm1lbW9yeSIpOyBcCiB9IHdoaWxlICgwKQogCisvKiBUaGUga2VybmVsIGFsd2F5cyBleGVjdXRlcyBpbiBUU08gbWVtb3J5IG1vZGVsIHRoZXNlIGRheXMsCisgKiBhbmQgZnVydGhlcm1vcmUgbW9zdCBzcGFyYzY0IGNoaXBzIGltcGxlbWVudCBtb3JlIHN0cmluZ2VudAorICogbWVtb3J5IG9yZGVyaW5nIHRoYW4gcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljYXRpb25zLgorICovCiAjZGVmaW5lIG1iKCkJbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKQogI2RlZmluZSBybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQogI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwppbmRleCBhZGY1ZjI3Li5jYjNjNzJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZGMuYwpAQCAtMTI0MiwxMyArMTI0MiwxMyBAQAogCXNucHJpbnRmKGxwLT50eF9pcnFfbmFtZSwgTERDX0lSUV9OQU1FX01BWCwgIiVzIFRYIiwgbmFtZSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShscC0+Y2ZnLnJ4X2lycSwgbGRjX3J4LAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCQkJICBscC0+cnhfaXJxX25hbWUsIGxwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gcmVxdWVzdF9pcnEobHAtPmNmZy50eF9pcnEsIGxkY190eCwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSAgbHAtPnR4X2lycV9uYW1lLCBscCk7CiAJaWYgKGVycikgewogCQlmcmVlX2lycShscC0+Y2ZnLnJ4X2lycSwgbHApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDA0ZGI5MjcuLmZhNTkzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCS5sb3dlcl9zaGlmdAk9IDYsCiAJLmV2ZW50X21hc2sJPSAweGZmZiwKIAkuaHZfYml0CQk9IDB4OCwKLQkuaXJxX2JpdAk9IDB4MDMsCisJLmlycV9iaXQJPSAweDMwLAogCS51cHBlcl9ub3AJPSAweDIyMCwKIAkubG93ZXJfbm9wCT0gMHgyMjAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKaW5kZXggMTM4OTEwYy4uZDgwYTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCkBAIC03OSw2ICs3OSw3IEBACiAKIAllcnIgPSAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAl3cml0ZV9sb2NrKCZkZXZ0cmVlX2xvY2spOwogCXByZXZwID0gJmRwLT5wcm9wZXJ0aWVzOwogCXdoaWxlICgqcHJldnApIHsKQEAgLTg4LDkgKzg5LDcgQEAKIAkJCXZvaWQgKm9sZF92YWwgPSBwcm9wLT52YWx1ZTsKIAkJCWludCByZXQ7CiAKLQkJCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAJCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPm5vZGUsIG5hbWUsIHZhbCwgbGVuKTsKLQkJCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWlmIChyZXQgPj0gMCkgewpAQCAtMTA5LDYgKzEwOCw3IEBACiAJCXByZXZwID0gJigqcHJldnApLT5uZXh0OwogCX0KIAl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCiAJLyogWFhYIFVwYXRlIHByb2NmcyBpZiBuZWNlc3NhcnkuLi4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCmluZGV4IGI5NTZmZDcuLmQyMzFjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogCQlyczIgPSBmcHNfcmVndmFsKGYsIFJTMihpbnNuKSk7CiAKIAkJcmRfdmFsID0gMDsKLQkJc3JjMiA9IChyczIgPj4gKG9wZiA9PSBGTVVMOHgxNkFVX09QRikgPyAxNiA6IDApOworCQlzcmMyID0gcnMyID4+IChvcGYgPT0gRk1VTDh4MTZBVV9PUEYgPyAxNiA6IDApOwogCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgNDsgYnl0ZSsrKSB7CiAJCQl1MTYgc3JjMSA9IChyczEgPj4gKGJ5dGUgKiA4KSkgJiAweDAwZmY7CiAJCQl1MzIgcHJvZCA9IHNyYzEgKiBzcmMyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCBhNzBhNWUxLi4xODg2ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQlpZiAocGFnZSAmJiBwYWdlX21hcHBpbmcocGFnZSkpIHsKKwlpZiAocGFnZSkgewogCQl1bnNpZ25lZCBsb25nIHBnX2ZsYWdzOwogCiAJCXBnX2ZsYWdzID0gcGFnZS0+ZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuaCBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5oCmluZGV4IGMyZjc3MmQuLjc3ZDFiMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5oCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5oCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIFZNRU1NQVBfQUxJR04oeCkJKCgoeCkrVk1FTU1BUF9DSFVOSy0xVUwpJlZNRU1NQVBfQ0hVTktfTUFTSykKIAogI2RlZmluZSBWTUVNTUFQX1NJWkUJKCgoKDFVTCA8PCBNQVhfUEhZU0FERFJfQklUUykgPj4gUEFHRV9TSElGVCkgKiBcCi0JCQkgIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSkgPj4gVk1FTU1BUF9DSFVOS19TSElGVCkKKwkJCSAgc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPj4gVk1FTU1BUF9DSFVOS19TSElGVCkKIGV4dGVybiB1bnNpZ25lZCBsb25nIHZtZW1tYXBfdGFibGVbVk1FTU1BUF9TSVpFXTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBjODc2YmFjLi4xNzgwODRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTQ5LDYgKzQ5LDcgQEAKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCisJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAogCXNlbGVjdCBIQVZFX0FSQ0hfS01FTUNIRUNLCiAKIGNvbmZpZyBPVVRQVVRfRk9STUFUCkBAIC00OTEsNyArNDkyLDcgQEAKIHNvdXJjZSAiYXJjaC94ODYveGVuL0tjb25maWciCiAKIGNvbmZpZyBWTUkKLQlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCIKKwlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJc2VsZWN0IFBBUkFWSVJUCiAJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCkBAIC01MDAsNiArNTAxLDE1IEBACiAJICBhdCB0aGUgbW9tZW50KSwgYnkgbGlua2luZyB0aGUga2VybmVsIHRvIGEgR1BMLWVkIFJPTSBtb2R1bGUKIAkgIHByb3ZpZGVkIGJ5IHRoZSBoeXBlcnZpc29yLgogCisJICBBcyBvZiBTZXB0ZW1iZXIgMjAwOSwgVk13YXJlIGhhcyBzdGFydGVkIGEgcGhhc2VkIHJldGlyZW1lbnQKKwkgIG9mIHRoaXMgZmVhdHVyZSBmcm9tIFZNd2FyZSdzIHByb2R1Y3RzLiBQbGVhc2Ugc2VlCisJICBmZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGZvciBkZXRhaWxzLiAgSWYgeW91IGFyZQorCSAgcGxhbm5pbmcgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW5ub3QKKwkgIGxpdmUgbWlncmF0ZSBhIFZNSSBlbmFibGVkIFZNIHRvIGEgZnV0dXJlIFZNd2FyZSBwcm9kdWN0LAorCSAgd2hpY2ggZG9lc24ndCBzdXBwb3J0IFZNSS4gU28gaWYgeW91IGV4cGVjdCB5b3VyIGtlcm5lbCB0bworCSAgc2VhbWxlc3NseSBtaWdyYXRlIHRvIG5ld2VyIFZNd2FyZSBwcm9kdWN0cywga2VlcCB0aGlzCisJICBkaXNhYmxlZC4KKwogY29uZmlnIEtWTV9DTE9DSwogCWJvb2wgIktWTSBwYXJhdmlydHVhbGl6ZWQgY2xvY2siCiAJc2VsZWN0IFBBUkFWSVJUCkBAIC0xNDM0LDEyICsxNDQ0LDggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KIAotY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SX0FMTAotCWJvb2wKLQogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCi0Jc2VsZWN0IENDX1NUQUNLUFJPVEVDVE9SX0FMTAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSAtZnN0YWNrLXByb3RlY3RvciBHQ0MgZmVhdHVyZS4gVGhpcwogCSAgZmVhdHVyZSBwdXRzLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGZ1bmN0aW9ucywgYSBjYW5hcnkgdmFsdWUgb24KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggZjI4MjRmYi4uNWU5OTc2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTQwMCwxMyArNDAwLDEzIEBACiAKIGNvbmZpZyBYODZfQ01QWENIRzY0CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X1BBRSB8fCBYODZfNjQgfHwgTUNPUkUyIHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1BVE9NCisJZGVwZW5kcyBvbiAhTTM4NiAmJiAhTTQ4NgogCiAjIHRoaXMgc2hvdWxkIGJlIHNldCBmb3IgYWxsIC1tYXJjaD0uLiBvcHRpb25zIHdoZXJlIHRoZSBjb21waWxlcgogIyBnZW5lcmF0ZXMgY21vdi4KIGNvbmZpZyBYODZfQ01PVgogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIChNSzggfHwgTUs3IHx8IE1DT1JFMiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgWDg2XzY0IHx8IE1BVE9NKQorCWRlcGVuZHMgb24gKE1LOCB8fCBNSzcgfHwgTUNPUkUyIHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBYODZfNjQgfHwgTUFUT00gfHwgTUdFT0RFX0xYKQogCiBjb25maWcgWDg2X01JTklNVU1fQ1BVX0ZBTUlMWQogCWludApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gveDg2L0tjb25maWcuZGVidWcKaW5kZXggZDEwNWYyOS4uNzMxMzE4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCkBAIC0xODYsNiArMTg2LDE1IEBACiBjb25maWcgSEFWRV9NTUlPVFJBQ0VfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIFg4Nl9ERUNPREVSX1NFTEZURVNUCisgICAgIGJvb2wgIng4NiBpbnN0cnVjdGlvbiBkZWNvZGVyIHNlbGZ0ZXN0IgorICAgICBkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCS0tLWhlbHAtLS0KKwkgUGVyZm9ybSB4ODYgaW5zdHJ1Y3Rpb24gZGVjb2RlciBzZWxmdGVzdHMgYXQgYnVpbGQgdGltZS4KKwkgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBjaGVja2luZyB0aGUgc2FuaXR5IG9mIHg4NiBpbnN0cnVjdGlvbgorCSBkZWNvZGVyIGNvZGUuCisJIElmIHVuc3VyZSwgc2F5ICJOIi4KKwogIwogIyBJTyBkZWxheSB0eXBlczoKICMKQEAgLTI4Nyw0ICsyOTYsMTggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIERFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCisJYm9vbCAiU3RyaWN0IGNvcHkgc2l6ZSBjaGVja3MiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIVRSQUNFX0JSQU5DSF9QUk9GSUxJTkcKKwktLS1oZWxwLS0tCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB0dXJucyBhIGNlcnRhaW4gc2V0IG9mIHNhbml0eSBjaGVja3MgZm9yIHVzZXIKKwkgIGNvcHkgb3BlcmF0aW9ucyBpbnRvIGNvbXBpbGUgdGltZSBmYWlsdXJlcy4KKworCSAgVGhlIGNvcHlfZnJvbV91c2VyKCkgZXRjIGNoZWNrcyBhcmUgdGhlcmUgdG8gaGVscCB0ZXN0IGlmIHRoZXJlCisJICBhcmUgc3VmZmljaWVudCBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGxlbmd0aCBhcmd1bWVudCBvZgorCSAgdGhlIGNvcHkgb3BlcmF0aW9uLCBieSBoYXZpbmcgZ2NjIHByb3ZlIHRoYXQgdGhlIGFyZ3VtZW50IGlzCisJICB3aXRoaW4gYm91bmRzLgorCisJICBJZiB1bnN1cmUsIG9yIGlmIHlvdSBydW4gYW4gb2xkZXIgKHByZSA0LjQpIGdjYywgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggYTAxMmVlOC4uNzhiMzJiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGUKQEAgLTc2LDcgKzc2LDYgQEAKIAljY19oYXNfc3AgOj0gJChzcmN0cmVlKS9zY3JpcHRzL2djYy14ODZfJChCSVRTKS1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCiAgICAgICAgIGlmZXEgKCQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2NfaGFzX3NwKSAkKENDKSAkKGJpYXJjaCkpLHkpCiAgICAgICAgICAgICAgICAgc3RhY2twLXkgOj0gLWZzdGFjay1wcm90ZWN0b3IKLSAgICAgICAgICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKICAgICAgICAgICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoc3RhY2twLXkpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAkKHdhcm5pbmcgc3RhY2sgcHJvdGVjdG9yIGVuYWJsZWQgYnV0IG5vIGNvbXBpbGVyIHN1cHBvcnQpCkBAIC0xNTYsNiArMTU1LDkgQEAKIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL2J6SW1hZ2UKIAogYnpJbWFnZTogdm1saW51eAoraWZlcSAoJChDT05GSUdfWDg2X0RFQ09ERVJfU0VMRlRFU1QpLHkpCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC94ODYvdG9vbHMgcG9zdHRlc3QKK2VuZGlmCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKEtCVUlMRF9JTUFHRSkKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9hcmNoLyQoVVRTX01BQ0hJTkUpL2Jvb3QKIAkkKFEpbG4gLWZzbiAuLi8uLi94ODYvYm9vdC9iekltYWdlICQob2JqdHJlZSkvYXJjaC8kKFVUU19NQUNISU5FKS9ib290LyRACmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUgYi9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKaW5kZXggMzBlOWEyNi4uY2JmMDc3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CisrKyBiL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQpAQCAtNDEsNyArNDEsNyBAQAogCiAjIEdlb2RlIEdYMSBzdXBwb3J0CiBjZmxhZ3MtJChDT05GSUdfTUdFT0RFR1gxKQkrPSAtbWFyY2g9cGVudGl1bS1tbXgKLQorY2ZsYWdzLSQoQ09ORklHX01HRU9ERV9MWCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9Z2VvZGUsLW1hcmNoPXBlbnRpdW0tbW14KQogIyBhZGQgYXQgdGhlIGVuZCB0byBvdmVyd3JpdGUgZXZlbnR1YWwgdHVuaW5nIG9wdGlvbnMgZnJvbSBlYXJsaWVyCiAjIGNwdSBlbnRyaWVzCiBjZmxhZ3MtJChDT05GSUdfWDg2X0dFTkVSSUMpIAkrPSAkKGNhbGwgdHVuZSxnZW5lcmljLCQoY2FsbCB0dW5lLGk2ODYpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZCBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKaW5kZXggMGY2ZWM0NTUuLjAzYzA2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKKysrIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZApAQCAtNTMsNiArNTMsOSBAQAogCiAJL0RJU0NBUkQvIDogeyAqKC5ub3RlKikgfQogCisJLyoKKwkgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorCSAqLwogCS4gPSBBU1NFUlQoX2VuZCA8PSAweDgwMDAsICJTZXR1cCB0b28gYmlnISIpOwogCS4gPSBBU1NFUlQoaGRyID09IDB4MWYxLCAiVGhlIHNldHVwIGhlYWRlciBoYXMgdGhlIHdyb25nIG9mZnNldCEiKTsKIAkvKiBOZWNlc3NhcnkgZm9yIHRoZSB2ZXJ5LW9sZC1sb2FkZXIgY2hlY2sgdG8gd29yay4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggNTg1ZWRlYi4uNDljNTUyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC04Miw3ICs4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2VuY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0xMTYsNyArMTE2LDcgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTM0Miw3ICszNDIsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CkBAIC0zNjMsNyArMzYzLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggMTczM2Y5Zi4uNTgxYjA1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0yMDQsNyArMjA0LDcgQEAKIAltb3ZsIFJESS1BUkdPRkZTRVQoJXJzcCksJXI4ZAkvKiByZWxvYWQgNXRoIHN5c2NhbGwgYXJnICovCiAJLmVuZG0KIAotCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQsZWJwc2F2ZT1SQlAKKwkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0CiAJdGVzdGwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVyMTApCiAJam56IGlhMzJfcmV0X2Zyb21fc3lzX2NhbGwKIAlUUkFDRV9JUlFTX09OCkBAIC0yMTcsNyArMjE3LDYgQEAKIAljYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdAogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW1vdmwgUkFYLUFSR09GRlNFVCglcnNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwotCW1vdmwgXGVicHNhdmUtQVJHT0ZGU0VUKCVyc3ApLCVlYnAgLyogcmVsb2FkIHVzZXIgcmVnaXN0ZXIgdmFsdWUgKi8KIAltb3ZsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwlZWRpCiAJY2xpCiAJVFJBQ0VfSVJRU19PRkYKQEAgLTM1MSw3ICszNTAsNyBAQAogCWptcCBjc3Rhcl9kaXNwYXRjaAogCiBzeXNyZXRsX2F1ZGl0OgotCWF1ZGl0c3lzX2V4aXQgc3lzcmV0bF9mcm9tX3N5c19jYWxsLCBSQ1ggLyogdXNlciAlZWJwIGluIFJDWCBzbG90ICovCisJYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwKICNlbmRpZgogCiBjc3Rhcl90cmFjZXN5czoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL0tidWlsZCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCA0YThlODBjLi45ZjgyOGY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vS2J1aWxkCkBAIC0xMCw2ICsxMCw3IEBACiBoZWFkZXIteSArPSBzaWdjb250ZXh0MzIuaAogaGVhZGVyLXkgKz0gdWNvbnRleHQuaAogaGVhZGVyLXkgKz0gcHJvY2Vzc29yLWZsYWdzLmgKK2hlYWRlci15ICs9IGh3X2JyZWFrcG9pbnQuaAogCiB1bmlmZGVmLXkgKz0gZTgyMC5oCiB1bmlmZGVmLXkgKz0gaXN0LmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LWNvcmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Eub3V0LWNvcmUuaAppbmRleCBiYjcwZTM5Li43YTE1NTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hLm91dC1jb3JlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYS5vdXQtY29yZS5oCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgogCiAvKgogICogZmlsbCBpbiB0aGUgdXNlciBzdHJ1Y3R1cmUgZm9yIGFuIGEub3V0IGNvcmUgZHVtcApAQCAtMzIsMTQgKzMzLDcgQEAKIAkJCT4+IFBBR0VfU0hJRlQ7CiAJZHVtcC0+dV9kc2l6ZSAtPSBkdW1wLT51X3RzaXplOwogCWR1bXAtPnVfc3NpemUgPSAwOwotCWR1bXAtPnVfZGVidWdyZWdbMF0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcwOwotCWR1bXAtPnVfZGVidWdyZWdbMV0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcxOwotCWR1bXAtPnVfZGVidWdyZWdbMl0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWcyOwotCWR1bXAtPnVfZGVidWdyZWdbM10gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWczOwotCWR1bXAtPnVfZGVidWdyZWdbNF0gPSAwOwotCWR1bXAtPnVfZGVidWdyZWdbNV0gPSAwOwotCWR1bXAtPnVfZGVidWdyZWdbNl0gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2OwotCWR1bXAtPnVfZGVidWdyZWdbN10gPSBjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3OworCWFvdXRfZHVtcF9kZWJ1Z3JlZ3MoZHVtcCk7CiAKIAlpZiAoZHVtcC0+c3RhcnRfc3RhY2sgPCBUQVNLX1NJWkUpCiAJCWR1bXAtPnVfc3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpKFRBU0tfU0laRSAtIGR1bXAtPnN0YXJ0X3N0YWNrKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKaW5kZXggZTIwNzdkMy4uYjk3Zjc4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKQEAgLTEsMTcgKzEsMTMgQEAKICNpZmRlZiBfX0FTU0VNQkxZX18KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIFg4Nl9BTElHTiAubG9uZwotI2Vsc2UKLSMgZGVmaW5lIFg4Nl9BTElHTiAucXVhZAotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogCS5tYWNybyBMT0NLX1BSRUZJWAogMToJbG9jawogCS5zZWN0aW9uIC5zbXBfbG9ja3MsImEiCi0JLmFsaWduIDQKLQlYODZfQUxJR04gMWIKKwlfQVNNX0FMSUdOCisJX0FTTV9QVFIgMWIKIAkucHJldmlvdXMKIAkuZW5kbQogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCmluZGV4IGMyNDBlZmMuLjY5Yjc0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtODQsNiArODQsNyBAQAogICAgICAgIgkgLmJ5dGUgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCS8qIGZlYXR1cmUgYml0ICAgICAqLwlcCiAgICAgICAiCSAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkvKiBzb3VyY2VsZW4gICAgICAgKi8JXAogICAgICAgIgkgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJLyogcmVwbGFjZW1lbnRsZW4gICovCVwKKyAgICAgICIJIC5ieXRlIDB4ZmYgKyAoNjY0Zi02NjNmKSAtICg2NjJiLTY2MWIpXG4iIC8qIHJsZW4gPD0gc2xlbiAqLwlcCiAgICAgICAiLnByZXZpb3VzXG4iCQkJCQkJCVwKICAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsIFwiYXhcIlxuIgkJCVwKICAgICAgICI2NjM6XG5cdCIgbmV3aW5zdHIgIlxuNjY0OlxuIgkJLyogcmVwbGFjZW1lbnQgICAgICovCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKaW5kZXggYWM5NTk5NS4uNWFmMjk4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgogICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgogICogICAgICAgICBMZW8gRHVyYW4gPGxlby5kdXJhbkBhbWQuY29tPgogICoKQEAgLTIzLDE4ICsyMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogCiAjaWZkZWYgQ09ORklHX0FNRF9JT01NVQotZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKTsKLWV4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfcGFzc3Rocm91Z2godm9pZCk7CisKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKHZvaWQpOwotZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpOwotZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3NodXRkb3duKHZvaWQpOworCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2luaXQodm9pZCkgeyByZXR1cm4gLUVOT0RFVjsgfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfc2h1dGRvd24odm9pZCkgeyB9CisKICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ODZmYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9YODZfQU1EX0lPTU1VX1BST1RPX0gKKyNkZWZpbmUgX0FTTV9YODZfQU1EX0lPTU1VX1BST1RPX0gKKworc3RydWN0IGFtZF9pb21tdTsKKworZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9kbWFfb3BzKHZvaWQpOworZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBhbWRfaW9tbXVfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RvbWFpbnModm9pZCk7CitleHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpOworZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3Jlc2V0X2NtZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpOworCisjaWZuZGVmIENPTkZJR19BTURfSU9NTVVfU1RBVFMKKworc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9zdGF0c19pbml0KHZvaWQpIHsgfQorCisjZW5kaWYgLyogIUNPTkZJR19BTURfSU9NTVVfU1RBVFMgKi8KKworI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9QUk9UT19IICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAppbmRleCAyYTJjYzdhLi5iYTE5YWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiAgKiBBdXRob3I6IEpvZXJnIFJvZWRlbCA8am9lcmcucm9lZGVsQGFtZC5jb20+CiAgKiAgICAgICAgIExlbyBEdXJhbiA8bGVvLmR1cmFuQGFtZC5jb20+CiAgKgpAQCAtMjUsNiArMjUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgorICogTWF4aW11bSBudW1iZXIgb2YgSU9NTVVzIHN1cHBvcnRlZAorICovCisjZGVmaW5lIE1BWF9JT01NVVMJMzIKKworLyoKICAqIHNvbWUgc2l6ZSBjYWxjdWxhdGlvbiBjb25zdGFudHMKICAqLwogI2RlZmluZSBERVZfVEFCTEVfRU5UUllfU0laRQkJMzIKQEAgLTIwNiw2ICsyMTEsOSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQU1ELVZpOiAiIGZvcm1hdCwgIyMgYXJnKTsJXAogCX0gd2hpbGUoMCk7CiAKKy8qIGdsb2JhbCBmbGFnIGlmIElPTU1VcyBjYWNoZSBub24tcHJlc2VudCBlbnRyaWVzICovCitleHRlcm4gYm9vbCBhbWRfaW9tbXVfbnBfY2FjaGU7CisKIC8qCiAgKiBNYWtlIGl0ZXJhdGluZyBvdmVyIGFsbCBJT01NVXMgZWFzaWVyCiAgKi8KQEAgLTIyNiw2ICsyMzQsOCBAQAogICogaW5kZXBlbmRlbnQgb2YgdGhlaXIgdXNlLgogICovCiBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgIC8qIGZvciBsaXN0IG9mIGFsbCBwcm90ZWN0aW9uIGRvbWFpbnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OyAvKiBMaXN0IG9mIGFsbCBkZXZpY2VzIGluIHRoaXMgZG9tYWluICovCiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBtb3N0bHkgdXNlZCB0byBsb2NrIHRoZSBwYWdlIHRhYmxlKi8KIAl1MTYgaWQ7CQkJLyogdGhlIGRvbWFpbiBpZCB3cml0dGVuIHRvIHRoZSBkZXZpY2UgdGFibGUgKi8KIAlpbnQgbW9kZTsJCS8qIHBhZ2luZyBtb2RlICgwLTYgbGV2ZWxzKSAqLwpAQCAtMjMzLDcgKzI0MywyMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CS8qIGZsYWdzIHRvIGZpbmQgb3V0IHR5cGUgb2YgZG9tYWluICovCiAJYm9vbCB1cGRhdGVkOwkJLyogY29tcGxldGUgZG9tYWluIGZsdXNoIHJlcXVpcmVkICovCiAJdW5zaWduZWQgZGV2X2NudDsJLyogZGV2aWNlcyBhc3NpZ25lZCB0byB0aGlzIGRvbWFpbiAqLworCXVuc2lnbmVkIGRldl9pb21tdVtNQVhfSU9NTVVTXTsgLyogcGVyLUlPTU1VIHJlZmVyZW5jZSBjb3VudCAqLwogCXZvaWQgKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgKi8KKworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0IGNvbnRhaW5zIGRldmljZSBzcGVjaWZpYyBkYXRhIGZvciB0aGUgSU9NTVUKKyAqLworc3RydWN0IGlvbW11X2Rldl9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkgIC8qIEZvciBkb21haW4tPmRldl9saXN0ICovCisJc3RydWN0IGRldmljZSAqZGV2OwkJICAvKiBEZXZpY2UgdGhpcyBkYXRhIGJlbG9uZyB0byAqLworCXN0cnVjdCBkZXZpY2UgKmFsaWFzOwkJICAvKiBUaGUgQWxpYXMgRGV2aWNlICovCisJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47IC8qIERvbWFpbiB0aGUgZGV2aWNlIGlzIGJvdW5kIHRvICovCisJYXRvbWljX3QgYmluZDsJCQkgIC8qIERvbWFpbiBhdHRhY2ggcmV2ZXJlbnQgY291bnQgKi8KIH07CiAKIC8qCkBAIC0yOTEsNiArMzE0LDkgQEAKIHN0cnVjdCBhbWRfaW9tbXUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAorCS8qIEluZGV4IHdpdGhpbiB0aGUgSU9NTVUgYXJyYXkgKi8KKwlpbnQgaW5kZXg7CisKIAkvKiBsb2NrcyB0aGUgYWNjZXNzZXMgdG8gdGhlIGhhcmR3YXJlICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCkBAIC0zNTcsNiArMzgzLDIxIEBACiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbWRfaW9tbXVfbGlzdDsKIAogLyoKKyAqIEFycmF5IHdpdGggcG9pbnRlcnMgdG8gZWFjaCBJT01NVSBzdHJ1Y3QKKyAqIFRoZSBpbmRpY2VzIGFyZSByZWZlcmVuY2VkIGluIHRoZSBwcm90ZWN0aW9uIGRvbWFpbnMKKyAqLworZXh0ZXJuIHN0cnVjdCBhbWRfaW9tbXUgKmFtZF9pb21tdXNbTUFYX0lPTU1VU107CisKKy8qIE51bWJlciBvZiBJT01NVXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtICovCitleHRlcm4gaW50IGFtZF9pb21tdXNfcHJlc2VudDsKKworLyoKKyAqIERlY2xhcmF0aW9ucyBmb3IgdGhlIGdsb2JhbCBsaXN0IG9mIGFsbCBwcm90ZWN0aW9uIGRvbWFpbnMKKyAqLworZXh0ZXJuIHNwaW5sb2NrX3QgYW1kX2lvbW11X3BkX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbWRfaW9tbXVfcGRfbGlzdDsKKworLyoKICAqIFN0cnVjdHVyZSBkZWZpbmluZyBvbmUgZW50cnkgaW4gdGhlIGRldmljZSB0YWJsZQogICovCiBzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5IHsKQEAgLTQxNiwxNSArNDU3LDkgQEAKIC8qIGxhcmdlc3QgUENJIGRldmljZSBpZCB3ZSBleHBlY3QgdHJhbnNsYXRpb24gcmVxdWVzdHMgZm9yICovCiBleHRlcm4gdTE2IGFtZF9pb21tdV9sYXN0X2JkZjsKIAotLyogZGF0YSBzdHJ1Y3R1cmVzIGZvciBwcm90ZWN0aW9uIGRvbWFpbiBoYW5kbGluZyAqLwotZXh0ZXJuIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqKmFtZF9pb21tdV9wZF90YWJsZTsKLQogLyogYWxsb2NhdGlvbiBiaXRtYXAgZm9yIGRvbWFpbiBpZHMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nICphbWRfaW9tbXVfcGRfYWxsb2NfYml0bWFwOwogCi0vKiB3aWxsIGJlIDEgaWYgZGV2aWNlIGlzb2xhdGlvbiBpcyBlbmFibGVkICovCi1leHRlcm4gYm9vbCBhbWRfaW9tbXVfaXNvbGF0ZTsKLQogLyoKICAqIElmIHRydWUsIHRoZSBhZGRyZXNzZXMgd2lsbCBiZSBmbHVzaGVkIG9uIHVubWFwIHRpbWUsIG5vdCB3aGVuCiAgKiB0aGV5IGFyZSByZXVzZWQKQEAgLTQ2MiwxMSArNDk3LDYgQEAKICNkZWZpbmUgQUREX1NUQVRTX0NPVU5URVIobmFtZSwgeCkKICNkZWZpbmUgU1VCX1NUQVRTX0NPVU5URVIobmFtZSwgeCkKIAotc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9zdGF0c19pbml0KHZvaWQpIHsgfQotCiAjZW5kaWYgLyogQ09ORklHX0FNRF9JT01NVV9TVEFUUyAqLwogCi0vKiBzb21lIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIGFtZF9pb21tdV9yZXNldF9jbWRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KTsKLQogI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggNDc0ZDgwZC4uYjRhYzJjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMjk3LDIwICsyOTcsMjAgQEAKIAlpbnQgZGlzYWJsZV9lc3I7CiAKIAlpbnQgZGVzdF9sb2dpY2FsOwotCXVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfdXNlZCkocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpOworCXVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfdXNlZCkocGh5c2lkX21hc2tfdCAqbWFwLCBpbnQgYXBpY2lkKTsKIAl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3ByZXNlbnQpKGludCBhcGljaWQpOwogCiAJdm9pZCAoKnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikoaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spOwogCXZvaWQgKCppbml0X2FwaWNfbGRyKSh2b2lkKTsKIAotCXBoeXNpZF9tYXNrX3QgKCppb2FwaWNfcGh5c19pZF9tYXApKHBoeXNpZF9tYXNrX3QgbWFwKTsKKwl2b2lkICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190ICpwaHlzX21hcCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKTsKIAogCXZvaWQgKCpzZXR1cF9hcGljX3JvdXRpbmcpKHZvaWQpOwogCWludCAoKm11bHRpX3RpbWVyX2NoZWNrKShpbnQgYXBpYywgaW50IGlycSk7CiAJaW50ICgqYXBpY2lkX3RvX25vZGUpKGludCBsb2dpY2FsX2FwaWNpZCk7CiAJaW50ICgqY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKShpbnQgY3B1KTsKIAlpbnQgKCpjcHVfcHJlc2VudF90b19hcGljaWQpKGludCBtcHNfY3B1KTsKLQlwaHlzaWRfbWFza190ICgqYXBpY2lkX3RvX2NwdV9wcmVzZW50KShpbnQgcGh5c19hcGljaWQpOworCXZvaWQgKCphcGljaWRfdG9fY3B1X3ByZXNlbnQpKGludCBwaHlzX2FwaWNpZCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKTsKIAl2b2lkICgqc2V0dXBfcG9ydGlvX3JlbWFwKSh2b2lkKTsKIAlpbnQgKCpjaGVja19waHlzX2FwaWNpZF9wcmVzZW50KShpbnQgcGh5c19hcGljaWQpOwogCXZvaWQgKCplbmFibGVfYXBpY19tb2RlKSh2b2lkKTsKQEAgLTQ4OCw2ICs0ODgsOCBAQAogCiBleHRlcm4gdm9pZCBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKIAorZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfbm9vcDsKKwogI2lmZGVmIENPTkZJR19YODZfMzIKIAogZXh0ZXJuIHN0cnVjdCBhcGljIGFwaWNfZGVmYXVsdDsKQEAgLTUzMiw5ICs1MzQsOSBAQAogCXJldHVybiAodW5zaWduZWQgaW50KShtYXNrMSAmIG1hc2syICYgbWFzazMpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWZhdWx0X2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgKm1hcCwgaW50IGFwaWNpZCkKIHsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgKm1hcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWZhdWx0X2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCkBAIC01NDIsOSArNTQ0LDkgQEAKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWZhdWx0X2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190ICpwaHlzX21hcCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKQogewotCXJldHVybiBwaHlzX21hcDsKKwkqcmV0bWFwID0gKnBoeXNfbWFwOwogfQogCiAvKiBNYXBwaW5nIGZyb20gY3B1IG51bWJlciB0byBsb2dpY2FsIGFwaWNpZCAqLwpAQCAtNTgzLDExICs1ODUsNiBAQAogZXh0ZXJuIGludCBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKTsKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgZGVmYXVsdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkKQotewotCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c19hcGljaWQpOwotfQotCiAjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKaW5kZXggM2I2MmRhOS4uN2ZlM2IzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaApAQCAtMTEsNiArMTEsMTIgQEAKICNkZWZpbmUgSU9fQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkweGZlYzAwMDAwCiAjZGVmaW5lCUFQSUNfREVGQVVMVF9QSFlTX0JBU0UJCTB4ZmVlMDAwMDAKIAorLyoKKyAqIFRoaXMgaXMgdGhlIElPLUFQSUMgcmVnaXN0ZXIgc3BhY2UgYXMgc3BlY2lmaWVkCisgKiBieSBJbnRlbCBkb2NzOgorICovCisjZGVmaW5lIElPX0FQSUNfU0xPVF9TSVpFCQkxMDI0CisKICNkZWZpbmUJQVBJQ19JRAkJMHgyMAogCiAjZGVmaW5lCUFQSUNfTFZSCTB4MzAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNudW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNudW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJmNjEzYy4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljbnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0FQSUNOVU1fSAotI2RlZmluZSBfQVNNX1g4Nl9BUElDTlVNX0gKLQotLyogZGVmaW5lIE1BWF9JT19BUElDUyAqLwotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIE1BWF9JT19BUElDUyA2NAotI2Vsc2UKLSMgZGVmaW5lIE1BWF9JT19BUElDUyAxMjgKLSMgZGVmaW5lIE1BWF9MT0NBTF9BUElDIDMyNzY4Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fWDg2X0FQSUNOVU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaAppbmRleCBkOWNmMWNkLi5mNjU0ZDFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9idWcuaApAQCAtMjIsMTQgKzIyLDE0IEBACiAJCSAgICAgIi5wb3BzZWN0aW9uIgkJCQlcCiAJCSAgICAgOiA6ICJpIiAoX19GSUxFX18pLCAiaSIgKF9fTElORV9fKSwJXAogCQkgICAgICJpIiAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSk7CQlcCi0JZm9yICg7OykgOwkJCQkJCVwKKwl1bnJlYWNoYWJsZSgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNlbHNlCiAjZGVmaW5lIEJVRygpCQkJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlhc20gdm9sYXRpbGUoInVkMiIpOwkJCQkJXAotCWZvciAoOzspIDsJCQkJCQlcCisJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGdhcnkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGdhcnkuaAppbmRleCBiMDNiZWRiLi4wOTE4NjU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxnYXJ5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsZ2FyeS5oCkBAIC02MiwxMCArNjIsOCBAQAogZXh0ZXJuIGludCB1c2VfY2FsZ2FyeTsKIAogI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VCi1leHRlcm4gaW50IGNhbGdhcnlfaW9tbXVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGRldGVjdF9jYWxnYXJ5KHZvaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGNhbGdhcnlfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV0ZWN0X2NhbGdhcnkodm9pZCkgeyByZXR1cm47IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKaW5kZXggZWUxOTMxYi4uZmZiOWJiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaApAQCAtOCwxNCArOCw1MCBAQAogICogICAgICAgeW91IG5lZWQgdG8gdGVzdCBmb3IgdGhlIGZlYXR1cmUgaW4gYm9vdF9jcHVfZGF0YS4KICAqLwogCi0jZGVmaW5lIHhjaGcocHRyLCB2KQkJCQkJCQlcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwgKHB0ciksIHNpemVvZigqKHB0cikpKSkKK2V4dGVybiB2b2lkIF9feGNoZ193cm9uZ19zaXplKHZvaWQpOworCisvKgorICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQorICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAorICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKi8KIAogc3RydWN0IF9feGNoZ19kdW1teSB7CiAJdW5zaWduZWQgbG9uZyBhWzEwMF07CiB9OwogI2RlZmluZSBfX3hnKHgpICgoc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKIAorI2RlZmluZSBfX3hjaGcoeCwgcHRyLCBzaXplKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mKCoocHRyKSkgX194ID0gKHgpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoInhjaGdiICViMCwlMSIJCQkJXAorCQkJICAgICA6ICI9cSIgKF9feCkJCQkJXAorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hndyAldzAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ2wgJTAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9feGNoZ193cm9uZ19zaXplKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCV9feDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgeGNoZyhwdHIsIHYpCQkJCQkJCVwKKwlfX3hjaGcoKHYpLCAocHRyKSwgc2l6ZW9mKCpwdHIpKQorCiAvKgogICogVGhlIHNlbWFudGljcyBvZiBYQ0hHQ01QOEIgYXJlIGEgYml0IHN0cmFuZ2UsIHRoaXMgaXMgd2h5CiAgKiB0aGVyZSBpcyBhIGxvb3AgYW5kIHRoZSBsb2FkaW5nIG9mICUlZWF4IGFuZCAlJWVkeCBoYXMgdG8KQEAgLTcxLDU3ICsxMDcsNjMgQEAKIAkJICAgICAgICh1bnNpZ25lZCBpbnQpKCh2YWx1ZSkgPj4gMzIpKQkJCVwKIAkgOiBfX3NldF82NGJpdChwdHIsIGxsX2xvdygodmFsdWUpKSwgbGxfaGlnaCgodmFsdWUpKSkpCiAKLS8qCi0gKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5Ci0gKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCi0gKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkgICBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgotCQkJICAgICA6ICI9cSIgKHgpCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoInhjaGd3ICV3MCwlMSIKLQkJCSAgICAgOiAiPXIiICh4KQotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlMCwlMSIKLQkJCSAgICAgOiAiPXIiICh4KQotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4geDsKLX0KK2V4dGVybiB2b2lkIF9fY21weGNoZ193cm9uZ19zaXplKHZvaWQpOwogCiAvKgogICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKICAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcwogICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCiAgKi8KKyNkZWZpbmUgX19yYXdfY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzaXplLCBsb2NrKQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAob2xkKTsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlYjEsJTIiCQkJXAorCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKKwkJCSAgICAgOiAicSIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICV3MSwlMiIJCQlcCisJCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAorCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ2wgJTEsJTIiCQkJXAorCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKKwkJCSAgICAgOiAiciIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19jbXB4Y2hnX3dyb25nX3NpemUoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzaXplKQkJCQkJXAorCV9fcmF3X2NtcHhjaGcoKHB0ciksIChvbGQpLCAobmV3KSwgKHNpemUpLCBMT0NLX1BSRUZJWCkKKworI2RlZmluZSBfX3N5bmNfY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzaXplKQkJCQlcCisJX19yYXdfY21weGNoZygocHRyKSwgKG9sZCksIChuZXcpLCAoc2l6ZSksICJsb2NrOyAiKQorCisjZGVmaW5lIF9fY21weGNoZ19sb2NhbChwdHIsIG9sZCwgbmV3LCBzaXplKQkJCQlcCisJX19yYXdfY21weGNoZygocHRyKSwgKG9sZCksIChuZXcpLCAoc2l6ZSksICIiKQogCiAjaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQotI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAkJXAotCQkJCSAgICAgICBzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fc3luY19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKLQkJCQkJICAgICh1bnNpZ25lZCBsb25nKShuKSwJCVwKLQkJCQkJICAgIHNpemVvZigqKHB0cikpKSkKLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQlcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKLQkJCQkJICAgICAodW5zaWduZWQgbG9uZykobiksCVwKLQkJCQkJICAgICBzaXplb2YoKihwdHIpKSkpCisKKyNkZWZpbmUgY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJCQkJCVwKKwlfX2NtcHhjaGcoKHB0ciksIChvbGQpLCAobmV3KSwgc2l6ZW9mKCpwdHIpKQorCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJCQkJXAorCV9fc3luY19jbXB4Y2hnKChwdHIpLCAob2xkKSwgKG5ldyksIHNpemVvZigqcHRyKSkKKworI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCQkJCQlcCisJX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAob2xkKSwgKG5ldyksIHNpemVvZigqcHRyKSkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKQEAgLTEzMyw5NCArMTc1LDYgQEAKIAkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ2IgJWIxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0vKgotICogQWx3YXlzIHVzZSBsb2NrZWQgb3BlcmF0aW9ucyB3aGVuIHRvdWNoaW5nIG1lbW9yeSBzaGFyZWQgd2l0aCBhCi0gKiBoeXBlcnZpc29yLCBzaW5jZSB0aGUgc3lzdGVtIG1heSBiZSBTTVAgZXZlbiBpZiB0aGUgZ3Vlc3Qga2VybmVsCi0gKiBpc24ndC4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc3luY19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2wgJTEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoImNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSgiY21weGNoZ2wgJTEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19jbXB4Y2hnNjQodm9sYXRpbGUgdm9pZCAqcHRyLAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsCiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5ldykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfNjQuaAppbmRleCA1MmRlNzJlLi40ODVhZTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ182NC5oCkBAIC0zLDkgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+IC8qIFByb3ZpZGVzIExPQ0tfUFJFRklYICovCiAKLSNkZWZpbmUgeGNoZyhwdHIsIHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksIFwKLQkJCQkJCSAocHRyKSwgc2l6ZW9mKCoocHRyKSkpKQotCiAjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBsb25nICopKHgpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0XzY0Yml0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCkBAIC0xNSwxNjcgKzEyLDExOCBAQAogCiAjZGVmaW5lIF9zZXRfNjRiaXQgc2V0XzY0Yml0CiAKK2V4dGVybiB2b2lkIF9feGNoZ193cm9uZ19zaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX3dyb25nX3NpemUodm9pZCk7CisKIC8qCiAgKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5CiAgKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCiAgKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkgICBpbnQgc2l6ZSkKLXsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgotCQkJICAgICA6ICI9cSIgKHgpCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoInhjaGd3ICV3MCwlMSIKLQkJCSAgICAgOiAiPXIiICh4KQotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlazAsJTEiCi0JCQkgICAgIDogIj1yIiAoeCkKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCWFzbSB2b2xhdGlsZSgieGNoZ3EgJTAsJTEiCi0JCQkgICAgIDogIj1yIiAoeCkKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHg7Ci19CisjZGVmaW5lIF9feGNoZyh4LCBwdHIsIHNpemUpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2YoKihwdHIpKSBfX3ggPSAoeCk7CQkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgkJCQlcCisJCQkgICAgIDogIj1xIiAoX194KQkJCQlcCisJCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoInhjaGd3ICV3MCwlMSIJCQkJXAorCQkJICAgICA6ICI9ciIgKF9feCkJCQkJXAorCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hnbCAlazAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ3EgJTAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKKwkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9feGNoZ193cm9uZ19zaXplKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCV9feDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgeGNoZyhwdHIsIHYpCQkJCQkJCVwKKwlfX3hjaGcoKHYpLCAocHRyKSwgc2l6ZW9mKCpwdHIpKQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQogCiAvKgogICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKICAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcwogICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCiAgKi8KKyNkZWZpbmUgX19yYXdfY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzaXplLCBsb2NrKQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAob2xkKTsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlYjEsJTIiCQkJXAorCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKKwkJCSAgICAgOiAicSIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICV3MSwlMiIJCQlcCisJCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAorCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ2wgJWsxLCUyIgkJCVwKKwkJCSAgICAgOiAiPWEiKF9fcmV0KQkJCQlcCisJCQkgICAgIDogInIiKF9fbmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIoX19vbGQpCVwKKwkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hncSAlMSwlMiIJCQlcCisJCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAorCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2NtcHhjaGdfd3Jvbmdfc2l6ZSgpOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisjZGVmaW5lIF9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzaXplKQkJCQkJXAorCV9fcmF3X2NtcHhjaGcoKHB0ciksIChvbGQpLCAobmV3KSwgKHNpemUpLCBMT0NLX1BSRUZJWCkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZ2wgJWsxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA4OgotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImNtcHhjaGdxICUxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JfQotCXJldHVybiBvbGQ7Ci19CisjZGVmaW5lIF9fc3luY19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHNpemUpCQkJCVwKKwlfX3Jhd19jbXB4Y2hnKChwdHIpLCAob2xkKSwgKG5ldyksIChzaXplKSwgImxvY2s7ICIpCiAKLS8qCi0gKiBBbHdheXMgdXNlIGxvY2tlZCBvcGVyYXRpb25zIHdoZW4gdG91Y2hpbmcgbWVtb3J5IHNoYXJlZCB3aXRoIGEKLSAqIGh5cGVydmlzb3IsIHNpbmNlIHRoZSBzeXN0ZW0gbWF5IGJlIFNNUCBldmVuIGlmIHRoZSBndWVzdCBrZXJuZWwKLSAqIGlzbid0LgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zeW5jX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSgibG9jazsgY21weGNoZ2IgJWIxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUoImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQorI2RlZmluZSBfX2NtcHhjaGdfbG9jYWwocHRyLCBvbGQsIG5ldywgc2l6ZSkJCQkJXAorCV9fcmF3X2NtcHhjaGcoKHB0ciksIChvbGQpLCAobmV3KSwgKHNpemUpLCAiIikKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlhc20gdm9sYXRpbGUoImNtcHhjaGdiICViMSwlMiIKLQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCWNhc2UgMjoKLQkJYXNtIHZvbGF0aWxlKCJjbXB4Y2hndyAldzEsJTIiCi0JCQkgICAgIDogIj1hIihwcmV2KQotCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSgiY21weGNoZ2wgJWsxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA4OgotCQlhc20gdm9sYXRpbGUoImNtcHhjaGdxICUxLCUyIgotCQkJICAgICA6ICI9YSIocHJldikKLQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JfQotCXJldHVybiBvbGQ7Ci19CisjZGVmaW5lIGNtcHhjaGcocHRyLCBvbGQsIG5ldykJCQkJCQlcCisJX19jbXB4Y2hnKChwdHIpLCAob2xkKSwgKG5ldyksIHNpemVvZigqcHRyKSkKIAotI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikJCQkJCQlcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsIG9sZCwgbmV3KQkJCQkJXAorCV9fc3luY19jbXB4Y2hnKChwdHIpLCAob2xkKSwgKG5ldyksIHNpemVvZigqcHRyKSkKKworI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCQkJCQlcCisJX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAob2xkKSwgKG5ldyksIHNpemVvZigqcHRyKSkKKwogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKICh7CQkJCQkJCQkJXAogCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJXAogCWNtcHhjaGcoKHB0ciksIChvKSwgKG4pKTsJCQkJCVwKIH0pCi0jZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpKG4pLAlcCi0JCQkJCSAgICAgc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSBzeW5jX2NtcHhjaGcocHRyLCBvLCBuKQkJCQkJCVwKLQkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNfY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAlcCi0JCQkJCSAgICAodW5zaWduZWQgbG9uZykobiksCQlcCi0JCQkJCSAgICBzaXplb2YoKihwdHIpKSkpCisKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKICh7CQkJCQkJCQkJXAogCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKaW5kZXggM2VhNmYzNy4uODI0MGY3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIERSX1RSQVAxCSgweDIpCQkvKiBkYjEgKi8KICNkZWZpbmUgRFJfVFJBUDIJKDB4NCkJCS8qIGRiMiAqLwogI2RlZmluZSBEUl9UUkFQMwkoMHg4KQkJLyogZGIzICovCisjZGVmaW5lIERSX1RSQVBfQklUUwkoRFJfVFJBUDB8RFJfVFJBUDF8RFJfVFJBUDJ8RFJfVFJBUDMpCiAKICNkZWZpbmUgRFJfU1RFUAkJKDB4NDAwMCkJLyogc2luZ2xlLXN0ZXAgKi8KICNkZWZpbmUgRFJfU1dJVENICSgweDgwMDApCS8qIHRhc2sgc3dpdGNoICovCkBAIC00OSw2ICs1MCw4IEBACiAKICNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUIDAgICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGxvY2FsIGVuYWJsZSBiaXQgKi8KICNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9TSElGVCAxICAgLyogRXh0cmEgc2hpZnQgdG8gdGhlIGdsb2JhbCBlbmFibGUgYml0ICovCisjZGVmaW5lIERSX0xPQ0FMX0VOQUJMRSAoMHgxKSAgICAgIC8qIExvY2FsIGVuYWJsZSBmb3IgcmVnIDAgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRSAoMHgyKSAgICAgLyogR2xvYmFsIGVuYWJsZSBmb3IgcmVnIDAgKi8KICNkZWZpbmUgRFJfRU5BQkxFX1NJWkUgMiAgICAgICAgICAgLyogMiBlbmFibGUgYml0cyBwZXIgcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBEUl9MT0NBTF9FTkFCTEVfTUFTSyAoMHg1NSkgIC8qIFNldCAgbG9jYWwgYml0cyBmb3IgYWxsIDQgcmVncyAqLwpAQCAtNjcsNCArNzAsMzQgQEAKICNkZWZpbmUgRFJfTE9DQUxfU0xPV0RPV04gKDB4MTAwKSAgIC8qIExvY2FsIHNsb3cgdGhlIHBpcGVsaW5lICovCiAjZGVmaW5lIERSX0dMT0JBTF9TTE9XRE9XTiAoMHgyMDApICAvKiBHbG9iYWwgc2xvdyB0aGUgcGlwZWxpbmUgKi8KIAorLyoKKyAqIEhXIGJyZWFrcG9pbnQgYWRkaXRpb25zCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfZHI3KTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X2JyZWFrcG9pbnRfZGlzYWJsZSh2b2lkKQoreworCS8qIFplcm8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgZm9yIEhXIEJyZWFrcG9pbnQgKi8KKwlzZXRfZGVidWdyZWcoMFVMLCA3KTsKKworCS8qIFplcm8tb3V0IHRoZSBpbmRpdmlkdWFsIEhXIGJyZWFrcG9pbnQgYWRkcmVzcyByZWdpc3RlcnMgKi8KKwlzZXRfZGVidWdyZWcoMFVMLCAwKTsKKwlzZXRfZGVidWdyZWcoMFVMLCAxKTsKKwlzZXRfZGVidWdyZWcoMFVMLCAyKTsKKwlzZXRfZGVidWdyZWcoMFVMLCAzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaHdfYnJlYWtwb2ludF9hY3RpdmUodm9pZCkKK3sKKwlyZXR1cm4gX19nZXRfY3B1X3ZhcihjcHVfZHI3KSAmIERSX0dMT0JBTF9FTkFCTEVfTUFTSzsKK30KKworZXh0ZXJuIHZvaWQgYW91dF9kdW1wX2RlYnVncmVncyhzdHJ1Y3QgdXNlciAqZHVtcCk7CisKK2V4dGVybiB2b2lkIGh3X2JyZWFrcG9pbnRfcmVzdG9yZSh2b2lkKTsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X0RFQlVHUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBlOGRlMmY2Li42MTdiZDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZXNjX2Jhc2UoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQogewotCXJldHVybiBkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KTsKKwlyZXR1cm4gKHVuc2lnbmVkKShkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19iYXNlKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBiYXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCBjZWUzNGU5Li4wMjlmMjMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtOCw3ICs4LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRE1BUgorI2lmIGRlZmluZWQoQ09ORklHX0RNQVIpIHx8IGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkKIAl2b2lkICppb21tdTsgLyogaG9vayBmb3IgSU9NTVUgc3BlY2lmaWMgZXh0ZW5zaW9uICovCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAwZWU3NzBkLi4wZjZjMDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE0LDcgKzE0LDE0IEBACiAjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAotZXh0ZXJuIGRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzOworI2lmZGVmIENPTkZJR19JU0EKKyMgZGVmaW5lIElTQV9ETUFfQklUX01BU0sgRE1BX0JJVF9NQVNLKDI0KQorI2Vsc2UKKyMgZGVmaW5lIElTQV9ETUFfQklUX01BU0sgRE1BX0JJVF9NQVNLKDMyKQorI2VuZGlmCisKKyNkZWZpbmUgRE1BX0VSUk9SX0NPREUJMAorCiBleHRlcm4gaW50IGlvbW11X21lcmdlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgeDg2X2RtYV9mYWxsYmFja19kZXY7CiBleHRlcm4gaW50IHBhbmljX29uX292ZXJmbG93OwpAQCAtNDIsNyArNDksNyBAQAogCWlmIChvcHMtPm1hcHBpbmdfZXJyb3IpCiAJCXJldHVybiBvcHMtPm1hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7CiAKLQlyZXR1cm4gKGRtYV9hZGRyID09IGJhZF9kbWFfYWRkcmVzcyk7CisJcmV0dXJuIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSk7CiB9CiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQpAQCAtMTI0LDEwICsxMzEsOCBAQAogCWlmIChkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZtZW1vcnkpKQogCQlyZXR1cm4gbWVtb3J5OwogCi0JaWYgKCFkZXYpIHsKKwlpZiAoIWRldikKIAkJZGV2ID0gJng4Nl9kbWFfZmFsbGJhY2tfZGV2OwotCQlnZnAgfD0gR0ZQX0RNQTsKLQl9CiAKIAlpZiAoIWlzX2RldmljZV9kbWFfY2FwYWJsZShkZXYpKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dhcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dhcnQuaAppbmRleCA2Y2ZkYWZhLi40YWM1YjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2FydC5oCkBAIC0zNSw4ICszNSw3IEBACiBleHRlcm4gaW50IGdhcnRfaW9tbXVfYXBlcnR1cmVfZGlzYWJsZWQ7CiAKIGV4dGVybiB2b2lkIGVhcmx5X2dhcnRfaW9tbXVfY2hlY2sodm9pZCk7Ci1leHRlcm4gdm9pZCBnYXJ0X2lvbW11X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBnYXJ0X2lvbW11X3NodXRkb3duKHZvaWQpOworZXh0ZXJuIGludCBnYXJ0X2lvbW11X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZ2FydF9wYXJzZV9vcHRpb25zKGNoYXIgKik7CiBleHRlcm4gdm9pZCBnYXJ0X2lvbW11X2hvbGVfaW5pdCh2b2lkKTsKIApAQCAtNDgsMTIgKzQ3LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9nYXJ0X2lvbW11X2NoZWNrKHZvaWQpCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9pb21tdV9pbml0KHZvaWQpCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FydF9pb21tdV9zaHV0ZG93bih2b2lkKQotewotfQogc3RhdGljIGlubGluZSB2b2lkIGdhcnRfcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zKQogewogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDgyZTNlOGYuLjEwOGViNmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTIwLDExICsyMCwxMSBAQAogCXVuc2lnbmVkIGludCBpcnFfY2FsbF9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaXJxX3RsYl9jb3VudDsKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCisjaWZkZWYgQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUgogCXVuc2lnbmVkIGludCBpcnFfdGhlcm1hbF9jb3VudDsKLSMgaWZkZWYgQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xECisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9USFJFU0hPTEQKIAl1bnNpZ25lZCBpbnQgaXJxX3RocmVzaG9sZF9jb3VudDsKLSMgZW5kaWYKICNlbmRpZgogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzVhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZglfSTM4Nl9IV19CUkVBS1BPSU5UX0gKKyNkZWZpbmUJX0kzODZfSFdfQlJFQUtQT0lOVF9ICisKKyNpZmRlZglfX0tFUk5FTF9fCisjZGVmaW5lCV9fQVJDSF9IV19CUkVBS1BPSU5UX0gKKworLyoKKyAqIFRoZSBuYW1lIHNob3VsZCBwcm9iYWJseSBiZSBzb21ldGhpbmcgZGVhbHQgaW4KKyAqIGEgaGlnaGVyIGxldmVsLiBXaGlsZSBkZWFsaW5nIHdpdGggdGhlIHVzZXIKKyAqIChkaXNwbGF5L3Jlc29sdmluZykKKyAqLworc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCB7CisJY2hhcgkJKm5hbWU7IC8qIENvbnRhaW5zIG5hbWUgb2YgdGhlIHN5bWJvbCB0byBzZXQgYmtwdCAqLworCXVuc2lnbmVkIGxvbmcJYWRkcmVzczsKKwl1OAkJbGVuOworCXU4CQl0eXBlOworfTsKKworI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyogQXZhaWxhYmxlIEhXIGJyZWFrcG9pbnQgbGVuZ3RoIGVuY29kaW5ncyAqLworI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fMQkJMHg0MAorI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fMgkJMHg0NAorI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fNAkJMHg0YworI2RlZmluZSBYODZfQlJFQUtQT0lOVF9MRU5fRVhFQ1VURQkweDQwCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl84CQkweDQ4CisjZW5kaWYKKworLyogQXZhaWxhYmxlIEhXIGJyZWFrcG9pbnQgdHlwZSBlbmNvZGluZ3MgKi8KKworLyogdHJpZ2dlciBvbiBpbnN0cnVjdGlvbiBleGVjdXRlICovCisjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEUJMHg4MAorLyogdHJpZ2dlciBvbiBtZW1vcnkgd3JpdGUgKi8KKyNkZWZpbmUgWDg2X0JSRUFLUE9JTlRfV1JJVEUJMHg4MQorLyogdHJpZ2dlciBvbiBtZW1vcnkgcmVhZCBvciB3cml0ZSAqLworI2RlZmluZSBYODZfQlJFQUtQT0lOVF9SVwkweDgzCisKKy8qIFRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgSFcgYnJlYWtwb2ludCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSEJQX05VTSA0CisKK3N0cnVjdCBwZXJmX2V2ZW50Oworc3RydWN0IHBtdTsKKworZXh0ZXJuIGludCBhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1OCBoYnBfbGVuKTsKK2V4dGVybiBpbnQgYXJjaF92YWxpZGF0ZV9od2JrcHRfc2V0dGluZ3Moc3RydWN0IHBlcmZfZXZlbnQgKmJwLAorCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIGludCBod19icmVha3BvaW50X2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisKKworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK2V4dGVybiB2b2lkCithcmNoX2ZpbGxfcGVyZl9icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK3Vuc2lnbmVkIGxvbmcgZW5jb2RlX2RyNyhpbnQgZHJudW0sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCB0eXBlKTsKK2ludCBkZWNvZGVfZHI3KHVuc2lnbmVkIGxvbmcgZHI3LCBpbnQgYnBudW0sIHVuc2lnbmVkICpsZW4sIHVuc2lnbmVkICp0eXBlKTsKKworZXh0ZXJuIGludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCB4ODZfbGVuLCBpbnQgeDg2X3R5cGUsCisJCQkJICBpbnQgKmdlbl9sZW4sIGludCAqZ2VuX3R5cGUpOworCitleHRlcm4gc3RydWN0IHBtdSBwZXJmX29wc19icDsKKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgkvKiBfSTM4Nl9IV19CUkVBS1BPSU5UX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBiYTE4MGQ5Li42ZTEyNDI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtNzksMTQgKzc5LDMyIEBACiAJCQkJCWludCBpb2FwaWMsIGludCBpb2FwaWNfcGluLAogCQkJCQlpbnQgdHJpZ2dlciwgaW50IHBvbGFyaXR5KQogewotCWlycV9hdHRyLT5pb2FwaWMgICAgID0gaW9hcGljOwotCWlycV9hdHRyLT5pb2FwaWNfcGluID0gaW9hcGljX3BpbjsKLQlpcnFfYXR0ci0+dHJpZ2dlciAgICA9IHRyaWdnZXI7Ci0JaXJxX2F0dHItPnBvbGFyaXR5ICAgPSBwb2xhcml0eTsKKwlpcnFfYXR0ci0+aW9hcGljCT0gaW9hcGljOworCWlycV9hdHRyLT5pb2FwaWNfcGluCT0gaW9hcGljX3BpbjsKKwlpcnFfYXR0ci0+dHJpZ2dlcgk9IHRyaWdnZXI7CisJaXJxX2F0dHItPnBvbGFyaXR5CT0gcG9sYXJpdHk7CiB9CiAKLWV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IGRldmZuLCBpbnQgcGluLAotCQkJCQlzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqaXJxX2F0dHIpOworLyoKKyAqIFRoaXMgaXMgcGVyZm9ybWFuY2UtY3JpdGljYWwsIHdlIHdhbnQgdG8gZG8gaXQgTygxKQorICoKKyAqIE1vc3QgaXJxcyBhcmUgbWFwcGVkIDE6MSB3aXRoIHBpbnMuCisgKi8KK3N0cnVjdCBpcnFfY2ZnIHsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0CSppcnFfMl9waW47CisJY3B1bWFza192YXJfdAkJZG9tYWluOworCWNwdW1hc2tfdmFyX3QJCW9sZF9kb21haW47CisJdTgJCQl2ZWN0b3I7CisJdTgJCQltb3ZlX2luX3Byb2dyZXNzIDogMTsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXJxX2NmZyAqaXJxX2NmZyh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQsIHN0cnVjdCBpcnFfY2ZnICosIGNvbnN0IHN0cnVjdCBjcHVtYXNrICopOworZXh0ZXJuIHZvaWQgc2VuZF9jbGVhbnVwX3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqKTsKKworc3RydWN0IGlycV9kZXNjOworZXh0ZXJuIHVuc2lnbmVkIGludCBzZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKiwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKik7CitleHRlcm4gaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBkZXZmbiwgaW50IHBpbiwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKTsKIGV4dGVybiB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpOwogCiBleHRlcm4gdm9pZCBlbmFibGVfSU9fQVBJQyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDViMDYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5hdC5oCkBAIC0wLDAgKzEsMjIwIEBACisjaWZuZGVmIF9BU01fWDg2X0lOQVRfSAorI2RlZmluZSBfQVNNX1g4Nl9JTkFUX0gKKy8qCisgKiB4ODYgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlcworICoKKyAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9pbmF0X3R5cGVzLmg+CisKKy8qCisgKiBJbnRlcm5hbCBiaXRzLiBEb24ndCB1c2UgYml0bWFza3MgZGlyZWN0bHksIGJlY2F1c2UgdGhlc2UgYml0cyBhcmUKKyAqIHVuc3RhYmxlLiBZb3Ugc2hvdWxkIHVzZSBjaGVja2luZyBmdW5jdGlvbnMuCisgKi8KKworI2RlZmluZSBJTkFUX09QQ09ERV9UQUJMRV9TSVpFIDI1NgorI2RlZmluZSBJTkFUX0dST1VQX1RBQkxFX1NJWkUgOAorCisvKiBMZWdhY3kgbGFzdCBwcmVmaXhlcyAqLworI2RlZmluZSBJTkFUX1BGWF9PUE5EU1oJMQkvKiAweDY2ICovIC8qIExQRlgxICovCisjZGVmaW5lIElOQVRfUEZYX1JFUEUJMgkvKiAweEYzICovIC8qIExQRlgyICovCisjZGVmaW5lIElOQVRfUEZYX1JFUE5FCTMJLyogMHhGMiAqLyAvKiBMUEZYMyAqLworLyogT3RoZXIgTGVnYWN5IHByZWZpeGVzICovCisjZGVmaW5lIElOQVRfUEZYX0xPQ0sJNAkvKiAweEYwICovCisjZGVmaW5lIElOQVRfUEZYX0NTCTUJLyogMHgyRSAqLworI2RlZmluZSBJTkFUX1BGWF9EUwk2CS8qIDB4M0UgKi8KKyNkZWZpbmUgSU5BVF9QRlhfRVMJNwkvKiAweDI2ICovCisjZGVmaW5lIElOQVRfUEZYX0ZTCTgJLyogMHg2NCAqLworI2RlZmluZSBJTkFUX1BGWF9HUwk5CS8qIDB4NjUgKi8KKyNkZWZpbmUgSU5BVF9QRlhfU1MJMTAJLyogMHgzNiAqLworI2RlZmluZSBJTkFUX1BGWF9BRERSU1oJMTEJLyogMHg2NyAqLworLyogeDg2LTY0IFJFWCBwcmVmaXggKi8KKyNkZWZpbmUgSU5BVF9QRlhfUkVYCTEyCS8qIDB4NFggKi8KKy8qIEFWWCBWRVggcHJlZml4ZXMgKi8KKyNkZWZpbmUgSU5BVF9QRlhfVkVYMgkxMwkvKiAyLWJ5dGVzIFZFWCBwcmVmaXggKi8KKyNkZWZpbmUgSU5BVF9QRlhfVkVYMwkxNAkvKiAzLWJ5dGVzIFZFWCBwcmVmaXggKi8KKworI2RlZmluZSBJTkFUX0xTVFBGWF9NQVgJMworI2RlZmluZSBJTkFUX0xHQ1BGWF9NQVgJMTEKKworLyogSW1tZWRpYXRlIHNpemUgKi8KKyNkZWZpbmUgSU5BVF9JTU1fQllURQkJMQorI2RlZmluZSBJTkFUX0lNTV9XT1JECQkyCisjZGVmaW5lIElOQVRfSU1NX0RXT1JECQkzCisjZGVmaW5lIElOQVRfSU1NX1FXT1JECQk0CisjZGVmaW5lIElOQVRfSU1NX1BUUgkJNQorI2RlZmluZSBJTkFUX0lNTV9WV09SRDMyCTYKKyNkZWZpbmUgSU5BVF9JTU1fVldPUkQJCTcKKworLyogTGVnYWN5IHByZWZpeCAqLworI2RlZmluZSBJTkFUX1BGWF9PRkZTCTAKKyNkZWZpbmUgSU5BVF9QRlhfQklUUwk0CisjZGVmaW5lIElOQVRfUEZYX01BWCAgICAoKDEgPDwgSU5BVF9QRlhfQklUUykgLSAxKQorI2RlZmluZSBJTkFUX1BGWF9NQVNLCShJTkFUX1BGWF9NQVggPDwgSU5BVF9QRlhfT0ZGUykKKy8qIEVzY2FwZSBvcGNvZGVzICovCisjZGVmaW5lIElOQVRfRVNDX09GRlMJKElOQVRfUEZYX09GRlMgKyBJTkFUX1BGWF9CSVRTKQorI2RlZmluZSBJTkFUX0VTQ19CSVRTCTIKKyNkZWZpbmUgSU5BVF9FU0NfTUFYCSgoMSA8PCBJTkFUX0VTQ19CSVRTKSAtIDEpCisjZGVmaW5lIElOQVRfRVNDX01BU0sJKElOQVRfRVNDX01BWCA8PCBJTkFUX0VTQ19PRkZTKQorLyogR3JvdXAgb3Bjb2RlcyAoMS0xNikgKi8KKyNkZWZpbmUgSU5BVF9HUlBfT0ZGUwkoSU5BVF9FU0NfT0ZGUyArIElOQVRfRVNDX0JJVFMpCisjZGVmaW5lIElOQVRfR1JQX0JJVFMJNQorI2RlZmluZSBJTkFUX0dSUF9NQVgJKCgxIDw8IElOQVRfR1JQX0JJVFMpIC0gMSkKKyNkZWZpbmUgSU5BVF9HUlBfTUFTSwkoSU5BVF9HUlBfTUFYIDw8IElOQVRfR1JQX09GRlMpCisvKiBJbW1lZGlhdGVzICovCisjZGVmaW5lIElOQVRfSU1NX09GRlMJKElOQVRfR1JQX09GRlMgKyBJTkFUX0dSUF9CSVRTKQorI2RlZmluZSBJTkFUX0lNTV9CSVRTCTMKKyNkZWZpbmUgSU5BVF9JTU1fTUFTSwkoKCgxIDw8IElOQVRfSU1NX0JJVFMpIC0gMSkgPDwgSU5BVF9JTU1fT0ZGUykKKy8qIEZsYWdzICovCisjZGVmaW5lIElOQVRfRkxBR19PRkZTCShJTkFUX0lNTV9PRkZTICsgSU5BVF9JTU1fQklUUykKKyNkZWZpbmUgSU5BVF9NT0RSTQkoMSA8PCAoSU5BVF9GTEFHX09GRlMpKQorI2RlZmluZSBJTkFUX0ZPUkNFNjQJKDEgPDwgKElOQVRfRkxBR19PRkZTICsgMSkpCisjZGVmaW5lIElOQVRfU0NORElNTQkoMSA8PCAoSU5BVF9GTEFHX09GRlMgKyAyKSkKKyNkZWZpbmUgSU5BVF9NT0ZGU0VUCSgxIDw8IChJTkFUX0ZMQUdfT0ZGUyArIDMpKQorI2RlZmluZSBJTkFUX1ZBUklBTlQJKDEgPDwgKElOQVRfRkxBR19PRkZTICsgNCkpCisjZGVmaW5lIElOQVRfVkVYT0sJKDEgPDwgKElOQVRfRkxBR19PRkZTICsgNSkpCisjZGVmaW5lIElOQVRfVkVYT05MWQkoMSA8PCAoSU5BVF9GTEFHX09GRlMgKyA2KSkKKy8qIEF0dHJpYnV0ZSBtYWtpbmcgbWFjcm9zIGZvciBhdHRyaWJ1dGUgdGFibGVzICovCisjZGVmaW5lIElOQVRfTUFLRV9QUkVGSVgocGZ4KQkocGZ4IDw8IElOQVRfUEZYX09GRlMpCisjZGVmaW5lIElOQVRfTUFLRV9FU0NBUEUoZXNjKQkoZXNjIDw8IElOQVRfRVNDX09GRlMpCisjZGVmaW5lIElOQVRfTUFLRV9HUk9VUChncnApCSgoZ3JwIDw8IElOQVRfR1JQX09GRlMpIHwgSU5BVF9NT0RSTSkKKyNkZWZpbmUgSU5BVF9NQUtFX0lNTShpbW0pCShpbW0gPDwgSU5BVF9JTU1fT0ZGUykKKworLyogQXR0cmlidXRlIHNlYXJjaCBBUElzICovCitleHRlcm4gaW5zbl9hdHRyX3QgaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBvcGNvZGUpOworZXh0ZXJuIGluc25fYXR0cl90IGluYXRfZ2V0X2VzY2FwZV9hdHRyaWJ1dGUoaW5zbl9ieXRlX3Qgb3Bjb2RlLAorCQkJCQkgICAgIGluc25fYnl0ZV90IGxhc3RfcGZ4LAorCQkJCQkgICAgIGluc25fYXR0cl90IGVzY19hdHRyKTsKK2V4dGVybiBpbnNuX2F0dHJfdCBpbmF0X2dldF9ncm91cF9hdHRyaWJ1dGUoaW5zbl9ieXRlX3QgbW9kcm0sCisJCQkJCSAgICBpbnNuX2J5dGVfdCBsYXN0X3BmeCwKKwkJCQkJICAgIGluc25fYXR0cl90IGVzY19hdHRyKTsKK2V4dGVybiBpbnNuX2F0dHJfdCBpbmF0X2dldF9hdnhfYXR0cmlidXRlKGluc25fYnl0ZV90IG9wY29kZSwKKwkJCQkJICBpbnNuX2J5dGVfdCB2ZXhfbSwKKwkJCQkJICBpbnNuX2J5dGVfdCB2ZXhfcHApOworCisvKiBBdHRyaWJ1dGUgY2hlY2tpbmcgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2lzX2xlZ2FjeV9wcmVmaXgoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlhdHRyICY9IElOQVRfUEZYX01BU0s7CisJcmV0dXJuIGF0dHIgJiYgYXR0ciA8PSBJTkFUX0xHQ1BGWF9NQVg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfYWRkcmVzc19zaXplX3ByZWZpeChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfUEZYX01BU0spID09IElOQVRfUEZYX0FERFJTWjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc19vcGVyYW5kX3NpemVfcHJlZml4KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIChhdHRyICYgSU5BVF9QRlhfTUFTSykgPT0gSU5BVF9QRlhfT1BORFNaOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2lzX3JleF9wcmVmaXgoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gKGF0dHIgJiBJTkFUX1BGWF9NQVNLKSA9PSBJTkFUX1BGWF9SRVg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfbGFzdF9wcmVmaXhfaWQoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlpZiAoKGF0dHIgJiBJTkFUX1BGWF9NQVNLKSA+IElOQVRfTFNUUEZYX01BWCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gYXR0ciAmIElOQVRfUEZYX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfdmV4X3ByZWZpeChpbnNuX2F0dHJfdCBhdHRyKQoreworCWF0dHIgJj0gSU5BVF9QRlhfTUFTSzsKKwlyZXR1cm4gYXR0ciA9PSBJTkFUX1BGWF9WRVgyIHx8IGF0dHIgPT0gSU5BVF9QRlhfVkVYMzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc192ZXgzX3ByZWZpeChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfUEZYX01BU0spID09IElOQVRfUEZYX1ZFWDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfZXNjYXBlKGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX0VTQ19NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2VzY2FwZV9pZChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiAoYXR0ciAmIElOQVRfRVNDX01BU0spID4+IElOQVRfRVNDX09GRlM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaXNfZ3JvdXAoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfR1JQX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfZ3JvdXBfaWQoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gKGF0dHIgJiBJTkFUX0dSUF9NQVNLKSA+PiBJTkFUX0dSUF9PRkZTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2dyb3VwX2NvbW1vbl9hdHRyaWJ1dGUoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIH5JTkFUX0dSUF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2hhc19pbW1lZGlhdGUoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfSU1NX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaW1tZWRpYXRlX3NpemUoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gKGF0dHIgJiBJTkFUX0lNTV9NQVNLKSA+PiBJTkFUX0lNTV9PRkZTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2hhc19tb2RybShpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9NT0RSTTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9pc19mb3JjZTY0KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX0ZPUkNFNjQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfaGFzX3NlY29uZF9pbW1lZGlhdGUoaW5zbl9hdHRyX3QgYXR0cikKK3sKKwlyZXR1cm4gYXR0ciAmIElOQVRfU0NORElNTTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9oYXNfbW9mZnNldChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9NT0ZGU0VUOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbmF0X2hhc192YXJpYW50KGluc25fYXR0cl90IGF0dHIpCit7CisJcmV0dXJuIGF0dHIgJiBJTkFUX1ZBUklBTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluYXRfYWNjZXB0X3ZleChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9WRVhPSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5hdF9tdXN0X3ZleChpbnNuX2F0dHJfdCBhdHRyKQoreworCXJldHVybiBhdHRyICYgSU5BVF9WRVhPTkxZOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYzIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luYXRfdHlwZXMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9BU01fWDg2X0lOQVRfVFlQRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9JTkFUX1RZUEVTX0gKKy8qCisgKiB4ODYgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlcworICoKKyAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisvKiBJbnN0cnVjdGlvbiBhdHRyaWJ1dGVzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBpbnNuX2F0dHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBpbnNuX2J5dGVfdDsKK3R5cGVkZWYgc2lnbmVkIGludCBpbnNuX3ZhbHVlX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5zbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzJlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmgKQEAgLTAsMCArMSwxODQgQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5TTl9ICisjZGVmaW5lIF9BU01fWDg2X0lOU05fSAorLyoKKyAqIHg4NiBpbnN0cnVjdGlvbiBhbmFseXNpcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDkKKyAqLworCisvKiBpbnNuX2F0dHJfdCBpcyBkZWZpbmVkIGluIGluYXQuaCAqLworI2luY2x1ZGUgPGFzbS9pbmF0Lmg+CisKK3N0cnVjdCBpbnNuX2ZpZWxkIHsKKwl1bmlvbiB7CisJCWluc25fdmFsdWVfdCB2YWx1ZTsKKwkJaW5zbl9ieXRlX3QgYnl0ZXNbNF07CisJfTsKKwkvKiAhMCBpZiB3ZSd2ZSBydW4gaW5zbl9nZXRfeHh4KCkgZm9yIHRoaXMgZmllbGQgKi8KKwl1bnNpZ25lZCBjaGFyIGdvdDsKKwl1bnNpZ25lZCBjaGFyIG5ieXRlczsKK307CisKK3N0cnVjdCBpbnNuIHsKKwlzdHJ1Y3QgaW5zbl9maWVsZCBwcmVmaXhlczsJLyoKKwkJCQkJICogUHJlZml4ZXMKKwkJCQkJICogcHJlZml4ZXMuYnl0ZXNbM106IGxhc3QgcHJlZml4CisJCQkJCSAqLworCXN0cnVjdCBpbnNuX2ZpZWxkIHJleF9wcmVmaXg7CS8qIFJFWCBwcmVmaXggKi8KKwlzdHJ1Y3QgaW5zbl9maWVsZCB2ZXhfcHJlZml4OwkvKiBWRVggcHJlZml4ICovCisJc3RydWN0IGluc25fZmllbGQgb3Bjb2RlOwkvKgorCQkJCQkgKiBvcGNvZGUuYnl0ZXNbMF06IG9wY29kZTEKKwkJCQkJICogb3Bjb2RlLmJ5dGVzWzFdOiBvcGNvZGUyCisJCQkJCSAqIG9wY29kZS5ieXRlc1syXTogb3Bjb2RlMworCQkJCQkgKi8KKwlzdHJ1Y3QgaW5zbl9maWVsZCBtb2RybTsKKwlzdHJ1Y3QgaW5zbl9maWVsZCBzaWI7CisJc3RydWN0IGluc25fZmllbGQgZGlzcGxhY2VtZW50OworCXVuaW9uIHsKKwkJc3RydWN0IGluc25fZmllbGQgaW1tZWRpYXRlOworCQlzdHJ1Y3QgaW5zbl9maWVsZCBtb2Zmc2V0MTsJLyogZm9yIDY0Yml0IE1PViAqLworCQlzdHJ1Y3QgaW5zbl9maWVsZCBpbW1lZGlhdGUxOwkvKiBmb3IgNjRiaXQgaW1tIG9yIG9mZjE2LzMyICovCisJfTsKKwl1bmlvbiB7CisJCXN0cnVjdCBpbnNuX2ZpZWxkIG1vZmZzZXQyOwkvKiBmb3IgNjRiaXQgTU9WICovCisJCXN0cnVjdCBpbnNuX2ZpZWxkIGltbWVkaWF0ZTI7CS8qIGZvciA2NGJpdCBpbW0gb3Igc2VnMTYgKi8KKwl9OworCisJaW5zbl9hdHRyX3QgYXR0cjsKKwl1bnNpZ25lZCBjaGFyIG9wbmRfYnl0ZXM7CisJdW5zaWduZWQgY2hhciBhZGRyX2J5dGVzOworCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgeDg2XzY0OworCisJY29uc3QgaW5zbl9ieXRlX3QgKmthZGRyOwkvKiBrZXJuZWwgYWRkcmVzcyBvZiBpbnNuIHRvIGFuYWx5emUgKi8KKwljb25zdCBpbnNuX2J5dGVfdCAqbmV4dF9ieXRlOworfTsKKworI2RlZmluZSBYODZfTU9EUk1fTU9EKG1vZHJtKSAoKChtb2RybSkgJiAweGMwKSA+PiA2KQorI2RlZmluZSBYODZfTU9EUk1fUkVHKG1vZHJtKSAoKChtb2RybSkgJiAweDM4KSA+PiAzKQorI2RlZmluZSBYODZfTU9EUk1fUk0obW9kcm0pICgobW9kcm0pICYgMHgwNykKKworI2RlZmluZSBYODZfU0lCX1NDQUxFKHNpYikgKCgoc2liKSAmIDB4YzApID4+IDYpCisjZGVmaW5lIFg4Nl9TSUJfSU5ERVgoc2liKSAoKChzaWIpICYgMHgzOCkgPj4gMykKKyNkZWZpbmUgWDg2X1NJQl9CQVNFKHNpYikgKChzaWIpICYgMHgwNykKKworI2RlZmluZSBYODZfUkVYX1cocmV4KSAoKHJleCkgJiA4KQorI2RlZmluZSBYODZfUkVYX1IocmV4KSAoKHJleCkgJiA0KQorI2RlZmluZSBYODZfUkVYX1gocmV4KSAoKHJleCkgJiAyKQorI2RlZmluZSBYODZfUkVYX0IocmV4KSAoKHJleCkgJiAxKQorCisvKiBWRVggYml0IGZsYWdzICAqLworI2RlZmluZSBYODZfVkVYX1codmV4KQkoKHZleCkgJiAweDgwKQkvKiBWRVgzIEJ5dGUyICovCisjZGVmaW5lIFg4Nl9WRVhfUih2ZXgpCSgodmV4KSAmIDB4ODApCS8qIFZFWDIvMyBCeXRlMSAqLworI2RlZmluZSBYODZfVkVYX1godmV4KQkoKHZleCkgJiAweDQwKQkvKiBWRVgzIEJ5dGUxICovCisjZGVmaW5lIFg4Nl9WRVhfQih2ZXgpCSgodmV4KSAmIDB4MjApCS8qIFZFWDMgQnl0ZTEgKi8KKyNkZWZpbmUgWDg2X1ZFWF9MKHZleCkJKCh2ZXgpICYgMHgwNCkJLyogVkVYMyBCeXRlMiwgVkVYMiBCeXRlMSAqLworLyogVkVYIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgWDg2X1ZFWDNfTSh2ZXgpCSgodmV4KSAmIDB4MWYpCQkvKiBWRVgzIEJ5dGUxICovCisjZGVmaW5lIFg4Nl9WRVgyX00JMQkJCS8qIFZFWDIuTSBhbHdheXMgMSAqLworI2RlZmluZSBYODZfVkVYX1YodmV4KQkoKCh2ZXgpICYgMHg3OCkgPj4gMykJLyogVkVYMyBCeXRlMiwgVkVYMiBCeXRlMSAqLworI2RlZmluZSBYODZfVkVYX1AodmV4KQkoKHZleCkgJiAweDAzKQkJLyogVkVYMyBCeXRlMiwgVkVYMiBCeXRlMSAqLworI2RlZmluZSBYODZfVkVYX01fTUFYCTB4MWYJCQkvKiBWRVgzLk0gTWF4aW11bSB2YWx1ZSAqLworCisvKiBUaGUgbGFzdCBwcmVmaXggaXMgbmVlZGVkIGZvciB0d28tYnl0ZSBhbmQgdGhyZWUtYnl0ZSBvcGNvZGVzICovCitzdGF0aWMgaW5saW5lIGluc25fYnl0ZV90IGluc25fbGFzdF9wcmVmaXgoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc24tPnByZWZpeGVzLmJ5dGVzWzNdOworfQorCitleHRlcm4gdm9pZCBpbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgeDg2XzY0KTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X3ByZWZpeGVzKHN0cnVjdCBpbnNuICppbnNuKTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X29wY29kZShzdHJ1Y3QgaW5zbiAqaW5zbik7CitleHRlcm4gdm9pZCBpbnNuX2dldF9tb2RybShzdHJ1Y3QgaW5zbiAqaW5zbik7CitleHRlcm4gdm9pZCBpbnNuX2dldF9zaWIoc3RydWN0IGluc24gKmluc24pOworZXh0ZXJuIHZvaWQgaW5zbl9nZXRfZGlzcGxhY2VtZW50KHN0cnVjdCBpbnNuICppbnNuKTsKK2V4dGVybiB2b2lkIGluc25fZ2V0X2ltbWVkaWF0ZShzdHJ1Y3QgaW5zbiAqaW5zbik7CitleHRlcm4gdm9pZCBpbnNuX2dldF9sZW5ndGgoc3RydWN0IGluc24gKmluc24pOworCisvKiBBdHRyaWJ1dGUgd2lsbCBiZSBkZXRlcm1pbmVkIGFmdGVyIGdldHRpbmcgTW9kUk0gKGZvciBvcGNvZGUgZ3JvdXBzKSAqLworc3RhdGljIGlubGluZSB2b2lkIGluc25fZ2V0X2F0dHJpYnV0ZShzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlpbnNuX2dldF9tb2RybShpbnNuKTsKK30KKworLyogSW5zdHJ1Y3Rpb24gdXNlcyBSSVAtcmVsYXRpdmUgYWRkcmVzc2luZyAqLworZXh0ZXJuIGludCBpbnNuX3JpcF9yZWxhdGl2ZShzdHJ1Y3QgaW5zbiAqaW5zbik7CisKKy8qIEluaXQgaW5zbiBmb3Iga2VybmVsIHRleHQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxfaW5zbl9pbml0KHN0cnVjdCBpbnNuICppbnNuLCBjb25zdCB2b2lkICprYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaW5zbl9pbml0KGluc24sIGthZGRyLCAxKTsKKyNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KKwlpbnNuX2luaXQoaW5zbiwga2FkZHIsIDApOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluc25faXNfYXZ4KHN0cnVjdCBpbnNuICppbnNuKQoreworCWlmICghaW5zbi0+cHJlZml4ZXMuZ290KQorCQlpbnNuX2dldF9wcmVmaXhlcyhpbnNuKTsKKwlyZXR1cm4gKGluc24tPnZleF9wcmVmaXgudmFsdWUgIT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW5zbl9ieXRlX3QgaW5zbl92ZXhfbV9iaXRzKHN0cnVjdCBpbnNuICppbnNuKQoreworCWlmIChpbnNuLT52ZXhfcHJlZml4Lm5ieXRlcyA9PSAyKQkvKiAyIGJ5dGVzIFZFWCAqLworCQlyZXR1cm4gWDg2X1ZFWDJfTTsKKwllbHNlCisJCXJldHVybiBYODZfVkVYM19NKGluc24tPnZleF9wcmVmaXguYnl0ZXNbMV0pOworfQorCitzdGF0aWMgaW5saW5lIGluc25fYnl0ZV90IGluc25fdmV4X3BfYml0cyhzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlpZiAoaW5zbi0+dmV4X3ByZWZpeC5uYnl0ZXMgPT0gMikJLyogMiBieXRlcyBWRVggKi8KKwkJcmV0dXJuIFg4Nl9WRVhfUChpbnNuLT52ZXhfcHJlZml4LmJ5dGVzWzFdKTsKKwllbHNlCisJCXJldHVybiBYODZfVkVYX1AoaW5zbi0+dmV4X3ByZWZpeC5ieXRlc1syXSk7Cit9CisKKy8qIE9mZnNldCBvZiBlYWNoIGZpZWxkIGZyb20ga2FkZHIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluc25fb2Zmc2V0X3JleF9wcmVmaXgoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc24tPnByZWZpeGVzLm5ieXRlczsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGluc25fb2Zmc2V0X3ZleF9wcmVmaXgoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc25fb2Zmc2V0X3JleF9wcmVmaXgoaW5zbikgKyBpbnNuLT5yZXhfcHJlZml4Lm5ieXRlczsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGluc25fb2Zmc2V0X29wY29kZShzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gaW5zbl9vZmZzZXRfdmV4X3ByZWZpeChpbnNuKSArIGluc24tPnZleF9wcmVmaXgubmJ5dGVzOworfQorc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfbW9kcm0oc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc25fb2Zmc2V0X29wY29kZShpbnNuKSArIGluc24tPm9wY29kZS5uYnl0ZXM7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbnNuX29mZnNldF9zaWIoc3RydWN0IGluc24gKmluc24pCit7CisJcmV0dXJuIGluc25fb2Zmc2V0X21vZHJtKGluc24pICsgaW5zbi0+bW9kcm0ubmJ5dGVzOworfQorc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfZGlzcGxhY2VtZW50KHN0cnVjdCBpbnNuICppbnNuKQoreworCXJldHVybiBpbnNuX29mZnNldF9zaWIoaW5zbikgKyBpbnNuLT5zaWIubmJ5dGVzOworfQorc3RhdGljIGlubGluZSBpbnQgaW5zbl9vZmZzZXRfaW1tZWRpYXRlKHN0cnVjdCBpbnNuICppbnNuKQoreworCXJldHVybiBpbnNuX29mZnNldF9kaXNwbGFjZW1lbnQoaW5zbikgKyBpbnNuLT5kaXNwbGFjZW1lbnQubmJ5dGVzOworfQorCisjZW5kaWYgLyogX0FTTV9YODZfSU5TTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCBmZDZkMjFiLi4zNDVjOTljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X0lPTU1VX0gKICNkZWZpbmUgX0FTTV9YODZfSU9NTVVfSAogCi1leHRlcm4gdm9pZCBwY2lfaW9tbXVfc2h1dGRvd24odm9pZCk7Ci1leHRlcm4gdm9pZCBub19pb21tdV9pbml0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzOwogZXh0ZXJuIGludCBmb3JjZV9pb21tdSwgbm9faW9tbXU7CiBleHRlcm4gaW50IGlvbW11X2RldGVjdGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBkZGRhNmNiLi5mZmQ3MDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIGV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7CitleHRlcm4gdm9pZCBpcnFfZm9yY2VfY29tcGxldGVfbW92ZShpbnQpOwogI2VuZGlmCiAKIGV4dGVybiB2b2lkICgqZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggZjEzNjNiNy4uODU4YmFhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTEwOCw2ICsxMDgsOCBAQAogI2RlZmluZSBLOF9NQ0VfVEhSRVNIT0xEX0JBTktfNSAgICAoTUNFX1RIUkVTSE9MRF9CQVNFICsgNSAqIDkpCiAjZGVmaW5lIEs4X01DRV9USFJFU0hPTERfRFJBTV9FQ0MgIChNQ0VfVEhSRVNIT0xEX0JBTktfNCArIDApCiAKK2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgeDg2X21jZV9kZWNvZGVyX2NoYWluOworCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CkBAIC0xMTgsOSArMTIwLDExIEBACiBleHRlcm4gaW50IG1jZV9wNV9lbmFibGVkOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLXZvaWQgbWNoZWNrX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK2ludCBtY2hlY2tfaW5pdCh2b2lkKTsKK3ZvaWQgbWNoZWNrX2NwdV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykge30KK3N0YXRpYyBpbmxpbmUgaW50IG1jaGVja19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2hlY2tfY3B1X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7fQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0FOQ0lFTlRfTUNFCkBAIC0yMTQsNSArMjE4LDExIEBACiAKIHZvaWQgbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChfX3U2NCBzdGF0dXMpOwogCisjaWZkZWYgQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUgorZXh0ZXJuIHZvaWQgbWNoZWNrX2ludGVsX3RoZXJtX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1jaGVja19pbnRlbF90aGVybV9pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9YODZfTUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKaW5kZXggNzljOTQ1MC4uNjFkOTBiMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKQEAgLTE2MywxNCArMTYzLDE2IEBACiAjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKQkJCQlcCiAJYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCiAKLSNkZWZpbmUgcGh5c2lkc19jb2VyY2UobWFwKQkJCSgobWFwKS5tYXNrWzBdKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBoeXNpZHNfY29lcmNlKHBoeXNpZF9tYXNrX3QgKm1hcCkKK3sKKwlyZXR1cm4gbWFwLT5tYXNrWzBdOworfQogCi0jZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCi0JCV9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7CQkJXAotCQlfX3BoeXNpZF9tYXNrOwkJCQkJCVwKLQl9KQorc3RhdGljIGlubGluZSB2b2lkIHBoeXNpZHNfcHJvbW90ZSh1bnNpZ25lZCBsb25nIHBoeXNpZHMsIHBoeXNpZF9tYXNrX3QgKm1hcCkKK3sKKwlwaHlzaWRzX2NsZWFyKCptYXApOworCW1hcC0+bWFza1swXSA9IHBoeXNpZHM7Cit9CiAKIC8qIE5vdGU6IHdpbGwgY3JlYXRlIHZlcnkgbGFyZ2Ugc3RhY2sgZnJhbWVzIGlmIHBoeXNpZF9tYXNrX3QgaXMgYmlnICovCiAjZGVmaW5lIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzaWQpCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCmluZGV4IDdlMmI2YmEuLjViZWY5MzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0yNDcsOCArMjQ3LDggQEAKICNpZmRlZiBDT05GSUdfU01QCiBpbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKTsKIGludCB3cm1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKTsKLXZvaWQgcmRtc3Jfb25fY3B1cyhjb25zdCBjcHVtYXNrX3QgKm1hc2ssIHUzMiBtc3Jfbm8sIHN0cnVjdCBtc3IgKm1zcnMpOwotdm9pZCB3cm1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycyk7Cit2b2lkIHJkbXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sIHN0cnVjdCBtc3IgKm1zcnMpOwordm9pZCB3cm1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKTsKIGludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCk7CiBpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKTsKIGludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiByZWdzWzhdKTsKQEAgLTI2NCwxMiArMjY0LDEyIEBACiAJd3Jtc3IobXNyX25vLCBsLCBoKTsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbSwgdTMyIG1zcl9ubywKK3N0YXRpYyBpbmxpbmUgdm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptLCB1MzIgbXNyX25vLAogCQkJCXN0cnVjdCBtc3IgKm1zcnMpCiB7CiAgICAgICAgcmRtc3Jfb25fY3B1KDAsIG1zcl9ubywgJihtc3JzWzBdLmwpLCAmKG1zcnNbMF0uaCkpOwogfQotc3RhdGljIGlubGluZSB2b2lkIHdybXNyX29uX2NwdXMoY29uc3QgY3B1bWFza190ICptLCB1MzIgbXNyX25vLAorc3RhdGljIGlubGluZSB2b2lkIHdybXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm0sIHUzMiBtc3Jfbm8sCiAJCQkJc3RydWN0IG1zciAqbXNycykKIHsKICAgICAgICB3cm1zcl9vbl9jcHUoMCwgbXNyX25vLCBtc3JzWzBdLmwsIG1zcnNbMF0uaCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCA4YWViY2M0Li5lZmIzODk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTg0MCw0MiArODQwLDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmOwotCi0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnNhdmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gZjsKKwlyZXR1cm4gUFZPUF9DQUxMRUUwKHVuc2lnbmVkIGxvbmcsIHB2X2lycV9vcHMuc2F2ZV9mbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6ICI9YSIoZikKLQkJICAgICA6IFBWX0ZMQUdTX0FSRyhmKSwKLQkJICAgICAgIHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5yZXN0b3JlX2ZsKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisJUFZPUF9WQ0FMTEVFMShwdl9pcnFfb3BzLnJlc3RvcmVfZmwsIGYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDoKLQkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZGlzYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2Rpc2FibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9lbmFibGUpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIik7CisJUFZPUF9WQ0FMTEVFMChwdl9pcnFfb3BzLmlycV9lbmFibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCmluZGV4IGRkMGY1YjMuLjkzNTc0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaApAQCAtNDk0LDEwICs0OTQsMTEgQEAKICNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMKICNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCiAjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworLyogW3JlXWF4IGlzbid0IGFuIGFyZywgYnV0IHRoZSByZXR1cm4gdmFsICovCiAjZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19lZGkgPSBfX2VkaSwgX19lc2kgPSBfX2VzaSwJXAotCQlfX2VkeCA9IF9fZWR4LCBfX2VjeCA9IF9fZWN4Ci0jZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQlQVk9QX1ZDQUxMX0FSR1MsIF9fZWF4CisJCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gsIF9fZWF4ID0gX19lYXgKKyNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUwogCiAjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQpAQCAtNTA5LDYgKzUxMCw3IEBACiAJCQkJIj1jIiAoX19lY3gpCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwlQVk9QX1ZDQUxMX0NMT0JCRVJTLCAiPWEiIChfX2VheCkKIAorLyogdm9pZCBmdW5jdGlvbnMgYXJlIHN0aWxsIGFsbG93ZWQgW3JlXWF4IGZvciBzY3JhdGNoICovCiAjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkiPWEiIChfX2VheCkKICNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCiAKQEAgLTU4Myw4ICs1ODUsOCBAQAogCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAogCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQogCi0jZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAotCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKyNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAorCV9fX19QVk9QX1ZDQUxMKG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQkJXAogCQkgICAgICBQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMsICwJCQkJXAogCQkgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCBhZDdjZTNmLi44ZDlmODU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0yOCw5ICsyOCwyMCBAQAogICovCiAjZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9NQVNLCQkJCSAgICAweGZmZmYKIAorLyoKKyAqIGZpbHRlciBtYXNrIHRvIHZhbGlkYXRlIGZpeGVkIGNvdW50ZXIgZXZlbnRzLgorICogdGhlIGZvbGxvd2luZyBmaWx0ZXJzIGRpc3F1YWxpZnkgZm9yIGZpeGVkIGNvdW50ZXJzOgorICogIC0gaW52CisgKiAgLSBlZGdlCisgKiAgLSBjbnQtbWFzaworICogIFRoZSBvdGhlciBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgZml4ZWQgY291bnRlcnMuCisgKiAgVGhlIGFueS10aHJlYWQgb3B0aW9uIGlzIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHYzLgorICovCisjZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSwkJCTB4ZmY4NDAwMDAKKwogI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfU0VMCQkgICAgICAweDNjCiAjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19VTUFTSwkJKDB4MDAgPDwgOCkKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYIAkJIDAKKyNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYCQkJIDAKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1BSRVNFTlQgXAogCQkoMSA8PCAoQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBjMzQyOWU4Li42ZjhlYzFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAorI2RlZmluZSBIQlBfTlVNIDQKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CiAgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCkBAIC00MjIsNiArNDIzLDggQEAKIGV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcDsKIAorc3RydWN0IHBlcmZfZXZlbnQ7CisKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKIAkvKiBDYWNoZWQgVExTIGRlc2NyaXB0b3JzOiAqLwogCXN0cnVjdCBkZXNjX3N0cnVjdAl0bHNfYXJyYXlbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKQEAgLTQ0MywxMyArNDQ2LDEwIEBACiAJdW5zaWduZWQgbG9uZwkJZnM7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlnczsKLQkvKiBIYXJkd2FyZSBkZWJ1Z2dpbmcgcmVnaXN0ZXJzOiAqLwotCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnMDsKLQl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzE7Ci0JdW5zaWduZWQgbG9uZwkJZGVidWdyZWcyOwotCXVuc2lnbmVkIGxvbmcJCWRlYnVncmVnMzsKLQl1bnNpZ25lZCBsb25nCQlkZWJ1Z3JlZzY7Ci0JdW5zaWduZWQgbG9uZwkJZGVidWdyZWc3OworCS8qIFNhdmUgbWlkZGxlIHN0YXRlcyBvZiBwdHJhY2UgYnJlYWtwb2ludHMgKi8KKwlzdHJ1Y3QgcGVyZl9ldmVudAkqcHRyYWNlX2Jwc1tIQlBfTlVNXTsKKwkvKiBEZWJ1ZyBzdGF0dXMgdXNlZCBmb3IgdHJhcHMsIHNpbmdsZSBzdGVwcywgZXRjLi4uICovCisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgZGVidWdyZWc2OwogCS8qIEZhdWx0IGluZm86ICovCiAJdW5zaWduZWQgbG9uZwkJY3IyOwogCXVuc2lnbmVkIGxvbmcJCXRyYXBfbm87CkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkJKCoodW5zaWduZWQgbG9uZyAqKSgodCktPnRocmVhZC5zcCAtIDgpKQogCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spCSgoc3RydWN0IHB0X3JlZ3MgKikodHNrKS0+dGhyZWFkLnNwMCAtIDEpCi0jZGVmaW5lIEtTVEtfRVNQKHRzaykJCS0xIC8qIHNvcnJ5LiBkb2Vzbid0IHdvcmsgZm9yIHN5c2NhbGwuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19pcCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMGYwZDkwOC4uM2QxMWZkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTcsNiArNyw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0yMTYsNiArMjE3LDY3IEBACiAJcmV0dXJuIHJlZ3MtPnNwOwogfQogCisvKiBRdWVyeSBvZmZzZXQvbmFtZSBvZiByZWdpc3RlciBmcm9tIGl0cyBuYW1lL29mZnNldCAqLworZXh0ZXJuIGludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCk7CisjZGVmaW5lIE1BWF9SRUdfT0ZGU0VUIChvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3MpKQorCisvKioKKyAqIHJlZ3NfZ2V0X3JlZ2lzdGVyKCkgLSBnZXQgcmVnaXN0ZXIgdmFsdWUgZnJvbSBpdHMgb2Zmc2V0CisgKiBAcmVnczoJcHRfcmVncyBmcm9tIHdoaWNoIHJlZ2lzdGVyIHZhbHVlIGlzIGdvdHRlbi4KKyAqIEBvZmZzZXQ6CW9mZnNldCBudW1iZXIgb2YgdGhlIHJlZ2lzdGVyLgorICoKKyAqIHJlZ3NfZ2V0X3JlZ2lzdGVyIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIuIFRoZSBAb2Zmc2V0IGlzIHRoZQorICogb2Zmc2V0IG9mIHRoZSByZWdpc3RlciBpbiBzdHJ1Y3QgcHRfcmVncyBhZGRyZXNzIHdoaWNoIHNwZWNpZmllZCBieSBAcmVncy4KKyAqIElmIEBvZmZzZXQgaXMgYmlnZ2VyIHRoYW4gTUFYX1JFR19PRkZTRVQsIHRoaXMgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVnc19nZXRfcmVnaXN0ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJaWYgKHVubGlrZWx5KG9mZnNldCA+IE1BWF9SRUdfT0ZGU0VUKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZylyZWdzICsgb2Zmc2V0KTsKK30KKworLyoqCisgKiByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soKSAtIGNoZWNrIHRoZSBhZGRyZXNzIGluIHRoZSBzdGFjaworICogQHJlZ3M6CXB0X3JlZ3Mgd2hpY2ggY29udGFpbnMga2VybmVsIHN0YWNrIHBvaW50ZXIuCisgKiBAYWRkcjoJYWRkcmVzcyB3aGljaCBpcyBjaGVja2VkLgorICoKKyAqIHJlZ3Nfd2l0aGluX2tlcm5lbF9zdGFjaygpIGNoZWNrcyBAYWRkciBpcyB3aXRoaW4gdGhlIGtlcm5lbCBzdGFjayBwYWdlKHMpLgorICogSWYgQGFkZHIgaXMgd2l0aGluIHRoZSBrZXJuZWwgc3RhY2ssIGl0IHJldHVybnMgdHJ1ZS4gSWYgbm90LCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKChhZGRyICYgfihUSFJFQURfU0laRSAtIDEpKSAgPT0KKwkJKGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpICYgfihUSFJFQURfU0laRSAtIDEpKSk7Cit9CisKKy8qKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIC0gZ2V0IE50aCBlbnRyeSBvZiB0aGUgc3RhY2sKKyAqIEByZWdzOglwdF9yZWdzIHdoaWNoIGNvbnRhaW5zIGtlcm5lbCBzdGFjayBwb2ludGVyLgorICogQG46CQlzdGFjayBlbnRyeSBudW1iZXIuCisgKgorICogcmVnc19nZXRfa2VybmVsX3N0YWNrX250aCgpIHJldHVybnMgQG4gdGggZW50cnkgb2YgdGhlIGtlcm5lbCBzdGFjayB3aGljaAorICogaXMgc3BlY2lmaWVkIGJ5IEByZWdzLiBJZiB0aGUgQG4gdGggZW50cnkgaXMgTk9UIGluIHRoZSBrZXJuZWwgc3RhY2ssCisgKiB0aGlzIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKilrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKTsKKwlhZGRyICs9IG47CisJaWYgKHJlZ3Nfd2l0aGluX2tlcm5lbF9zdGFjayhyZWdzLCAodW5zaWduZWQgbG9uZylhZGRyKSkKKwkJcmV0dXJuICphZGRyOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIEdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbCAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbik7CisKIC8qCiAgKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaAppbmRleCBhZTkwN2U2Li4zZDNlODM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfMzIuaApAQCAtMTc3LDEwICsxNzcsMTUgQEAKICAqLwogCiAjaWZuZGVmIENPTkZJR19LTUVNQ0hFQ0sKKworI2lmIChfX0dOVUNfXyA+PSA0KQorI2RlZmluZSBtZW1jcHkodCwgZiwgbikgX19idWlsdGluX21lbWNweSh0LCBmLCBuKQorI2Vsc2UKICNkZWZpbmUgbWVtY3B5KHQsIGYsIG4pCQkJCVwKIAkoX19idWlsdGluX2NvbnN0YW50X3AoKG4pKQkJXAogCSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0KSwgKGYpLCAobikpCVwKIAkgOiBfX21lbWNweSgodCksIChmKSwgKG4pKSkKKyNlbmRpZgogI2Vsc2UKIC8qCiAgKiBrbWVtY2hlY2sgYmVjb21lcyB2ZXJ5IGhhcHB5IGlmIHdlIHVzZSB0aGUgUkVQIGluc3RydWN0aW9ucyB1bmNvbmRpdGlvbmFsbHksCkBAIC0zMTYsMTEgKzMyMSwxNSBAQAogCSA6IF9fbWVtc2V0X2dlbmVyaWMoKHMpLCAoYyksIChjb3VudCkpKQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAorI2lmIChfX0dOVUNfXyA+PSA0KQorI2RlZmluZSBtZW1zZXQocywgYywgY291bnQpIF9fYnVpbHRpbl9tZW1zZXQocywgYywgY291bnQpCisjZWxzZQogI2RlZmluZSBtZW1zZXQocywgYywgY291bnQpCQkJCQkJXAogCShfX2J1aWx0aW5fY29uc3RhbnRfcChjKQkJCQkJXAogCSA/IF9fY29uc3RhbnRfY194X21lbXNldCgocyksICgweDAxMDEwMTAxVUwgKiAodW5zaWduZWQgY2hhcikoYykpLCBcCiAJCQkJIChjb3VudCkpCQkJCVwKIAkgOiBfX21lbXNldCgocyksIChjKSwgKGNvdW50KSkpCisjZW5kaWYKIAogLyoKICAqIGZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYnl0ZSAnYycsIG9yIDEgcGFzdCB0aGUgYXJlYSBpZiBub25lCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2lvdGxiLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKaW5kZXggYjllNGUyMC4uODdmZmNiMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3dpb3RsYi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N3aW90bGIuaApAQCAtMywxNyArMywxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3dpb3RsYi5oPgogCi0vKiBTV0lPVExCIGludGVyZmFjZSAqLwotCi1leHRlcm4gaW50IHN3aW90bGJfZm9yY2U7Ci0KICNpZmRlZiBDT05GSUdfU1dJT1RMQgogZXh0ZXJuIGludCBzd2lvdGxiOwotZXh0ZXJuIHZvaWQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHN3aW90bGIgMAotc3RhdGljIGlubGluZSB2b2lkIHBjaV9zd2lvdGxiX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKIHsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGYwOGY5NzMuLjAyMmE4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMjgsOCArMTI4LDYgQEAKIAkgICAgICJtb3ZxICUlcnNwLCVQW3RocmVhZHJzcF0oJVtwcmV2XSlcblx0IiAvKiBzYXZlIFJTUCAqLwkgIFwKIAkgICAgICJtb3ZxICVQW3RocmVhZHJzcF0oJVtuZXh0XSksJSVyc3Bcblx0IiAvKiByZXN0b3JlIFJTUCAqLwkgIFwKIAkgICAgICJjYWxsIF9fc3dpdGNoX3RvXG5cdCIJCQkJCSAgXAotCSAgICAgIi5nbG9ibCB0aHJlYWRfcmV0dXJuXG4iCQkJCQkgIFwKLQkgICAgICJ0aHJlYWRfcmV0dXJuOlxuXHQiCQkJCQkgIFwKIAkgICAgICJtb3ZxICJfX3BlcmNwdV9hcmcoW2N1cnJlbnRfdGFza10pIiwlJXJzaVxuXHQiCQkgIFwKIAkgICAgIF9fc3dpdGNoX2NhbmFyeQkJCQkJCSAgXAogCSAgICAgIm1vdnEgJVBbdGhyZWFkX2luZm9dKCUlcnNpKSwlJXI4XG5cdCIJCQkgIFwKQEAgLTE1NywxOSArMTU1LDIyIEBACiAgKiBMb2FkIGEgc2VnbWVudC4gRmFsbCBiYWNrIG9uIGxvYWRpbmcgdGhlIHplcm8KICAqIHNlZ21lbnQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuLgogICovCi0jZGVmaW5lIGxvYWRzZWdtZW50KHNlZywgdmFsdWUpCQkJXAotCWFzbSB2b2xhdGlsZSgiXG4iCQkJXAotCQkgICAgICIxOlx0IgkJCVwKLQkJICAgICAibW92bCAlazAsJSUiICNzZWcgIlxuIglcCi0JCSAgICAgIjI6XG4iCQkJXAotCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKLQkJICAgICAiMzpcdCIJCQlcCi0JCSAgICAgIm1vdmwgJWsxLCAlJSIgI3NlZyAiXG5cdCIJXAotCQkgICAgICJqbXAgMmJcbiIJCQlcCi0JCSAgICAgIi5wcmV2aW91c1xuIgkJXAotCQkgICAgIF9BU01fRVhUQUJMRSgxYiwzYikJXAotCQkgICAgIDogOiJyIiAodmFsdWUpLCAiciIgKDApIDogIm1lbW9yeSIpCi0KKyNkZWZpbmUgbG9hZHNlZ21lbnQoc2VnLCB2YWx1ZSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHNob3J0IF9fdmFsID0gKHZhbHVlKTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIgkJCQkJCVxuIglcCisJCSAgICAgIjE6CW1vdmwgJWswLCUlIiAjc2VnICIJCVxuIglcCisJCQkJCQkJCQlcCisJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkgICAgICIyOgl4b3JsICVrMCwlazAJCQlcbiIJXAorCQkgICAgICIJCWptcCAxYgkJCQlcbiIJXAorCQkgICAgICIucHJldmlvdXMJCQkJCVxuIglcCisJCQkJCQkJCQlcCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAyYikJCQkJXAorCQkJCQkJCQkJXAorCQkgICAgIDogIityIiAoX192YWwpIDogOiAibWVtb3J5Iik7CQkJXAorfSB3aGlsZSAoMCkKIAogLyoKICAqIFNhdmUgYSBzZWdtZW50IHJlZ2lzdGVyIGF3YXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDI1YTkyODQuLjQwZTM3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMTQzLDYgKzE0Myw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDAqU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJCVwKIAkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IGQyYzZjOTMuLmFiZDNlMGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTU3MCw3ICs1NzAsNiBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgaW5jbHVkZSAidWFjY2Vzc18zMi5oIgogI2Vsc2UKLSMgZGVmaW5lIEFSQ0hfSEFTX1NFQVJDSF9FWFRBQkxFCiAjIGluY2x1ZGUgInVhY2Nlc3NfNjQuaCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKaW5kZXggNjMyZmI0NC4uMGM5ODI1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaApAQCAtMTg3LDkgKzE4NywzNCBAQAogCiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLAogCQkJCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwotdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCit1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCiAJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBuKTsKKworCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworCV9fY29tcGlsZXRpbWVfZXJyb3IoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQorI2Vsc2UKKwlfX2NvbXBpbGV0aW1lX3dhcm5pbmcoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQorI2VuZGlmCis7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCisJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuKQoreworCWludCBzeiA9IF9fY29tcGlsZXRpbWVfb2JqZWN0X3NpemUodG8pOworCWludCByZXQgPSAtRUZBVUxUOworCisJaWYgKGxpa2VseShzeiA9PSAtMSB8fCBzeiA+PSBuKSkKKwkJcmV0ID0gX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKwllbHNlCisJCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBsb25nIF9fbXVzdF9jaGVjayBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsCiAJCQkJICAgIGxvbmcgY291bnQpOwogbG9uZyBfX211c3RfY2hlY2sgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKaW5kZXggZGIyNGIyMS4uNDYzMjRjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtMTksMTIgKzE5LDM3IEBACiBjb3B5X3VzZXJfZ2VuZXJpYyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKIAogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKLWNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbik7CitfY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCi1jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxlbik7CitfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsZW4pOwogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcKIGNvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsZW4pOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIGNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAorCQkJCQkgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCW1pZ2h0X2ZhdWx0KCk7CisJaWYgKGxpa2VseShzeiA9PSAtMSB8fCBzeiA+PSBuKSkKKwkJcmV0ID0gX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKwllbHNlCisJCVdBUk4oMSwgIkJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCFcbiIpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sKK2ludCBjb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBzaXplKQoreworCW1pZ2h0X2ZhdWx0KCk7CisKKwlyZXR1cm4gX2NvcHlfdG9fdXNlcihkc3QsIHNyYywgc2l6ZSk7Cit9CisKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19tdXN0X2NoZWNrCiBpbnQgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCiB7CkBAIC0xNzYsOCArMjAxLDExIEBACiBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CiAKLV9fbXVzdF9jaGVjayBsb25nIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkgICAgdW5zaWduZWQgc2l6ZSk7CitzdGF0aWMgX19tdXN0X2NoZWNrIF9fYWx3YXlzX2lubGluZSBpbnQKK19fY29weV9mcm9tX3VzZXJfaW5hdG9taWModm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQoreworCXJldHVybiBjb3B5X3VzZXJfZ2VuZXJpYyhkc3QsIChfX2ZvcmNlIGNvbnN0IHZvaWQgKilzcmMsIHNpemUpOworfQogCiBzdGF0aWMgX19tdXN0X2NoZWNrIF9fYWx3YXlzX2lubGluZSBpbnQKIF9fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggMDRlYjZjOS4uZDE0MTRhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgogCiAKIC8qCkBAIC0xMTQsNyArMTE2LDcgQEAKIC8qCiAgKiBUaGUgbGFyZ2VzdCBwb3NzaWJsZSBOQVNJRCBvZiBhIEMgb3IgTSBicmljayAoKyAyKQogICovCi0jZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX05PREVTICogMikKKyNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfQkxBREVTICogMikKIAogc3RydWN0IHV2X3NjaXJfcyB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC0yMzAsNiArMjMyLDIwIEBACiAJcmV0dXJuIHV2X3NvY19waHlzX3JhbV90b19ncGEoX19wYSh2KSk7CiB9CiAKKy8qIGdub2RlIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ3BhX3RvX2dub2RlKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXJldHVybiBncGEgPj4gdXZfaHViX2luZm8tPm1fdmFsOworfQorCisvKiBncGEgLT4gcG5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHV2X2dwYV90b19wbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwl1bnNpZ25lZCBsb25nIG5fbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisKKwlyZXR1cm4gdXZfZ3BhX3RvX2dub2RlKGdwYSkgJiBuX21hc2s7Cit9CisKIC8qIHBub2RlLCBvZmZzZXQgLS0+IHNvY2tldCB2aXJ0dWFsICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnV2X3Bub2RlX29mZnNldF90b192YWRkcihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewpAQCAtNDIxLDkgKzQzNywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHV2X2h1Yl9zZW5kX2lwaShpbnQgcG5vZGUsIGludCBhcGljaWQsIGludCB2ZWN0b3IpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBkbW9kZSA9IGRlc3RfRml4ZWQ7CisKKwlpZiAodmVjdG9yID09IE5NSV9WRUNUT1IpCisJCWRtb2RlID0gZGVzdF9OTUk7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAogCQkJKChhcGljaWQpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCQkJKGRtb2RlIDw8IFVWSF9JUElfSU5UX0RFTElWRVJZX01PREVfU0hGVCkgfAogCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaXJxLmgKaW5kZXggOTYxM2M4Yy4uZDZiMTdjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaXJxLmgKQEAgLTI1LDEyICsyNSwxNCBAQAogCQlkZXN0CQk6IDMyOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCB1dl9pcnFfY2hpcDsKK2VudW0geworCVVWX0FGRklOSVRZX0FMTCwKKwlVVl9BRkZJTklUWV9OT0RFLAorCVVWX0FGRklOSVRZX0NQVQorfTsKIAotZXh0ZXJuIGludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGFyY2hfZGlzYWJsZV91dl9pcnEoaW50LCB1bnNpZ25lZCBsb25nKTsKLQotZXh0ZXJuIGludCB1dl9zZXR1cF9pcnEoY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCB1dl9pcnFfMl9tbXJfaW5mbyhpbnQsIHVuc2lnbmVkIGxvbmcgKiwgaW50ICopOworZXh0ZXJuIGludCB1dl9zZXR1cF9pcnEoY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZywgaW50KTsKK2V4dGVybiB2b2lkIHV2X3RlYXJkb3duX2lycSh1bnNpZ25lZCBpbnQpOwogCiAjZW5kaWYgLyogX0FTTV9YODZfVVZfVVZfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDJjNzU2ZmQuLmQ4ZTcxNDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtOTEsNiArOTEsMTQgQEAKIH07CiAKIC8qKgorICogc3RydWN0IHg4Nl9pbml0X2lvbW11IC0gcGxhdGZvcm0gc3BlY2lmaWMgaW9tbXUgc2V0dXAKKyAqIEBpb21tdV9pbml0OgkJCXBsYXRmb3JtIHNwZWNpZmljIGlvbW11IHNldHVwCisgKi8KK3N0cnVjdCB4ODZfaW5pdF9pb21tdSB7CisJaW50ICgqaW9tbXVfaW5pdCkodm9pZCk7Cit9OworCisvKioKICAqIHN0cnVjdCB4ODZfaW5pdF9vcHMgLSBmdW5jdGlvbnMgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHNldHVwCiAgKgogICovCkBAIC0xMDEsNiArMTA5LDcgQEAKIAlzdHJ1Y3QgeDg2X2luaXRfb2VtCQlvZW07CiAJc3RydWN0IHg4Nl9pbml0X3BhZ2luZwkJcGFnaW5nOwogCXN0cnVjdCB4ODZfaW5pdF90aW1lcnMJCXRpbWVyczsKKwlzdHJ1Y3QgeDg2X2luaXRfaW9tbXUJCWlvbW11OwogfTsKIAogLyoqCkBAIC0xMjEsNiArMTMwLDcgQEAKIAl1bnNpZ25lZCBsb25nICgqY2FsaWJyYXRlX3RzYykodm9pZCk7CiAJdW5zaWduZWQgbG9uZyAoKmdldF93YWxsY2xvY2spKHZvaWQpOwogCWludCAoKnNldF93YWxsY2xvY2spKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7CisJdm9pZCAoKmlvbW11X3NodXRkb3duKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgeDg2X2luaXRfb3BzIHg4Nl9pbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGQ4ZTVkMGMuLjRmMmU2NmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTQwLDcgKzQwLDcgQEAKIG9iai0kKENPTkZJR19YODZfNjQpCSs9IHN5c2NhbGxfNjQubyB2c3lzY2FsbF82NC5vCiBvYmoteQkJCSs9IGJvb3RmbGFnLm8gZTgyMC5vCiBvYmoteQkJCSs9IHBjaS1kbWEubyBxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8ga2RlYnVnZnMubwotb2JqLXkJCQkrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8gcGNpLW5vbW11Lm8KK29iai15CQkJKz0gYWx0ZXJuYXRpdmUubyBpODI1My5vIHBjaS1ub21tdS5vIGh3X2JyZWFrcG9pbnQubwogb2JqLXkJCQkrPSB0c2MubyBpb19kZWxheS5vIHJ0Yy5vCiAKIG9iai0kKENPTkZJR19YODZfVFJBTVBPTElORSkJKz0gdHJhbXBvbGluZS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCmluZGV4IGQyOTZmNGEuLmQ4NWQxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3Byb2Nlc3Nvci5jCkBAIC03OSw3ICs3OSw4IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHByLT5pZCk7CiAKIAlwci0+cGRjID0gTlVMTDsKLQlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQorCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgfHwKKwkgICAgYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpCiAJCWluaXRfaW50ZWxfcGRjKHByLCBjKTsKIAogCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwppbmRleCA3ZGEwMGI3Li4wNjBmZmY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCkBAIC01Nyw1ICs1Nyw4IEBACiAJCSooLm5vdGUqKQogCX0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gV0FLRVVQX1NJWkUsICJXYWtldXAgdG9vIGJpZyEiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA5OGYyMzBmLi4zMmZiMDkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KICAqIEF1dGhvcjogSm9lcmcgUm9lZGVsIDxqb2VyZy5yb2VkZWxAYW1kLmNvbT4KICAqICAgICAgICAgTGVvIER1cmFuIDxsZW8uZHVyYW5AYW1kLmNvbT4KICAqCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vYW1kX2lvbW11X3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUuaD4KIApAQCAtNTYsMjAgKzU3LDExNSBAQAogCXUzMiBkYXRhWzRdOwogfTsKIAotc3RhdGljIGludCBkbWFfb3BzX3VuaXR5X21hcChzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCi0JCQkgICAgIHN0cnVjdCB1bml0eV9tYXBfZW50cnkgKmUpOwotc3RhdGljIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZmluZF9wcm90ZWN0aW9uX2RvbWFpbih1MTYgZGV2aWQpOwotc3RhdGljIHU2NCAqYWxsb2NfcHRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBlbmRfbHZsLAotCQkgICAgICB1NjQgKipwdGVfcGFnZSwgZ2ZwX3QgZ2ZwKTsKLXN0YXRpYyB2b2lkIGRtYV9vcHNfcmVzZXJ2ZV9hZGRyZXNzZXMoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBwYWdlcyk7CiBzdGF0aWMgdm9pZCByZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7Ci1zdGF0aWMgdTY0ICpmZXRjaF9wdGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG1hcF9zaXplKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9kb21haW4oc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEhlbHBlciBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB1MTYgZ2V0X2RldmljZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlyZXR1cm4gY2FsY19kZXZpZChwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOworfQorCitzdGF0aWMgc3RydWN0IGlvbW11X2Rldl9kYXRhICpnZXRfZGV2X2RhdGEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmFyY2hkYXRhLmlvbW11OworfQorCisvKgorICogSW4gdGhpcyBmdW5jdGlvbiB0aGUgbGlzdCBvZiBwcmVhbGxvY2F0ZWQgcHJvdGVjdGlvbiBkb21haW5zIGlzIHRyYXZlcnNlZCB0bworICogZmluZCB0aGUgZG9tYWluIGZvciBhIHNwZWNpZmljIGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGRtYV9vcHNfZG9tYWluICpmaW5kX3Byb3RlY3Rpb25fZG9tYWluKHUxNiBkZXZpZCkKK3sKKwlzdHJ1Y3QgZG1hX29wc19kb21haW4gKmVudHJ5LCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBhbGlhcyA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwlpZiAobGlzdF9lbXB0eSgmaW9tbXVfcGRfbGlzdCkpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11X3BkX2xpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmlvbW11X3BkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGVudHJ5LT50YXJnZXRfZGV2ID09IGRldmlkIHx8CisJCSAgICBlbnRyeS0+dGFyZ2V0X2RldiA9PSBhbGlhcykgeworCQkJcmV0ID0gZW50cnk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11X3BkX2xpc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBkcml2ZXIgZ290IGEgdmFsaWQgZGV2aWNlIGZyb20gdGhlIGNhbGxlciB0bworICogYXZvaWQgZGVyZWZlcmVuY2luZyBpbnZhbGlkIHBvaW50ZXJzLgorICovCitzdGF0aWMgYm9vbCBjaGVja19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXUxNiBkZXZpZDsKKworCWlmICghZGV2IHx8ICFkZXYtPmRtYV9tYXNrKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBObyBkZXZpY2Ugb3Igbm8gUENJIGRldmljZSAqLworCWlmICghZGV2IHx8IGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWRldmlkID0gZ2V0X2RldmljZV9pZChkZXYpOworCisJLyogT3V0IG9mIG91ciBzY29wZT8gKi8KKwlpZiAoZGV2aWQgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgaW9tbXVfaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTE2IGRldmlkLCBhbGlhczsKKworCWlmIChkZXYtPmFyY2hkYXRhLmlvbW11KQorCQlyZXR1cm4gMDsKKworCWRldl9kYXRhID0ga3phbGxvYyhzaXplb2YoKmRldl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfZGF0YS0+ZGV2ID0gZGV2OworCisJZGV2aWQgPSBnZXRfZGV2aWNlX2lkKGRldik7CisJYWxpYXMgPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdOworCXBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdChQQ0lfQlVTKGFsaWFzKSwgYWxpYXMgJiAweGZmKTsKKwlpZiAocGRldikKKwkJZGV2X2RhdGEtPmFsaWFzID0gJnBkZXYtPmRldjsKKworCWF0b21pY19zZXQoJmRldl9kYXRhLT5iaW5kLCAwKTsKKworCWRldi0+YXJjaGRhdGEuaW9tbXUgPSBkZXZfZGF0YTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlvbW11X3VuaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWtmcmVlKGRldi0+YXJjaGRhdGEuaW9tbXUpOworfQogI2lmZGVmIENPTkZJR19BTURfSU9NTVVfU1RBVFMKIAogLyoKQEAgLTkwLDcgKzE4Niw2IEBACiBERUNMQVJFX1NUQVRTX0NPVU5URVIodG90YWxfbWFwX3JlcXVlc3RzKTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnN0YXRzX2RpcjsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZV9pc29sYXRlOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmRlX2ZmbHVzaDsKIAogc3RhdGljIHZvaWQgYW1kX2lvbW11X3N0YXRzX2FkZChzdHJ1Y3QgX19pb21tdV9jb3VudGVyICpjbnQpCkBAIC0xMDgsOSArMjAzLDYgQEAKIAlpZiAoc3RhdHNfZGlyID09IE5VTEwpCiAJCXJldHVybjsKIAotCWRlX2lzb2xhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpc29sYXRpb24iLCAwNDQ0LCBzdGF0c19kaXIsCi0JCQkJCSAodTMyICopJmFtZF9pb21tdV9pc29sYXRlKTsKLQogCWRlX2ZmbHVzaCAgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJmdWxsZmx1c2giLCAwNDQ0LCBzdGF0c19kaXIsCiAJCQkJCSAodTMyICopJmFtZF9pb21tdV91bm1hcF9mbHVzaCk7CiAKQEAgLTEzMCwxMiArMjIyLDYgQEAKIAogI2VuZGlmCiAKLS8qIHJldHVybnMgITAgaWYgdGhlIElPTU1VIGlzIGNhY2hpbmcgbm9uLXByZXNlbnQgZW50cmllcyBpbiBpdHMgVExCICovCi1zdGF0aWMgaW50IGlvbW11X2hhc19ucGNhY2hlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQotewotCXJldHVybiBpb21tdS0+Y2FwICYgKDFVTCA8PCBJT01NVV9DQVBfTlBDQUNIRSk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogSW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucwpAQCAtMTk5LDYgKzI4NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfVFlQRV9JTExfQ01EOgogCQlwcmludGsoIklMTEVHQUxfQ09NTUFORF9FUlJPUiBhZGRyZXNzPTB4JTAxNmxseF1cbiIsIGFkZHJlc3MpOworCQlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSB0cnVlOwogCQlyZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihpb21tdSk7CiAJCWR1bXBfY29tbWFuZChhZGRyZXNzKTsKIAkJYnJlYWs7CkBAIC0zMjEsMTEgKzQwOCw4IEBACiAJc3RhdHVzICY9IH5NTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSzsKIAl3cml0ZWwoc3RhdHVzLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19TVEFUVVNfT0ZGU0VUKTsKIAotCWlmICh1bmxpa2VseShpID09IEVYSVRfTE9PUF9DT1VOVCkpIHsKLQkJc3Bpbl91bmxvY2soJmlvbW11LT5sb2NrKTsKLQkJcmVzZXRfaW9tbXVfY29tbWFuZF9idWZmZXIoaW9tbXUpOwotCQlzcGluX2xvY2soJmlvbW11LT5sb2NrKTsKLQl9CisJaWYgKHVubGlrZWx5KGkgPT0gRVhJVF9MT09QX0NPVU5UKSkKKwkJaW9tbXUtPnJlc2V0X2luX3Byb2dyZXNzID0gdHJ1ZTsKIH0KIAogLyoKQEAgLTM3MiwyNiArNDU2LDQ2IEBACiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MpCisJCXJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKGlvbW11KTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9jb21wbGV0ZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhbWRfaW9tbXVzX3ByZXNlbnQ7ICsraSkgeworCQlpZiAoIWRvbWFpbi0+ZGV2X2lvbW11W2ldKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRGV2aWNlcyBvZiB0aGlzIGRvbWFpbiBhcmUgYmVoaW5kIHRoaXMgSU9NTVUKKwkJICogV2UgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGFsbCBjb21tYW5kcy4KKwkJICovCisJCWlvbW11X2NvbXBsZXRpb25fd2FpdChhbWRfaW9tbXVzW2ldKTsKKwl9Cit9CisKIC8qCiAgKiBDb21tYW5kIHNlbmQgZnVuY3Rpb24gZm9yIGludmFsaWRhdGluZyBhIGRldmljZSB0YWJsZSBlbnRyeQogICovCi1zdGF0aWMgaW50IGlvbW11X3F1ZXVlX2ludl9kZXZfZW50cnkoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkZXZpZCkKK3N0YXRpYyBpbnQgaW9tbXVfZmx1c2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKLQlpbnQgcmV0OworCXUxNiBkZXZpZDsKIAotCUJVR19PTihpb21tdSA9PSBOVUxMKTsKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAorCS8qIEJ1aWxkIGNvbW1hbmQgKi8KIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCUNNRF9TRVRfVFlQRSgmY21kLCBDTURfSU5WX0RFVl9FTlRSWSk7CiAJY21kLmRhdGFbMF0gPSBkZXZpZDsKIAotCXJldCA9IGlvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsICZjbWQpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW9tbXVfYnVpbGRfaW52X2lvbW11X3BhZ2VzKHN0cnVjdCBpb21tdV9jbWQgKmNtZCwgdTY0IGFkZHJlc3MsCkBAIC00MzAsMTEgKzUzNCwxMSBAQAogICogSXQgaW52YWxpZGF0ZXMgYSBzaW5nbGUgUFRFIGlmIHRoZSByYW5nZSB0byBmbHVzaCBpcyB3aXRoaW4gYSBzaW5nbGUKICAqIHBhZ2UuIE90aGVyd2lzZSBpdCBmbHVzaGVzIHRoZSB3aG9sZSBUTEIgb2YgdGhlIElPTU1VLgogICovCi1zdGF0aWMgaW50IGlvbW11X2ZsdXNoX3BhZ2VzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZG9taWQsCi0JCXU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkIF9faW9tbXVfZmx1c2hfcGFnZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCisJCQkJdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgcGRlKQogewotCWludCBzID0gMDsKLQl1bnNpZ25lZCBwYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyZXNzLCBzaXplLCBQQUdFX1NJWkUpOworCWludCBzID0gMCwgaTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHJlc3MsIHNpemUsIFBBR0VfU0laRSk7CiAKIAlhZGRyZXNzICY9IFBBR0VfTUFTSzsKIApAQCAtNDQ3LDExMyArNTUxLDk2IEBACiAJCXMgPSAxOwogCX0KIAotCWlvbW11X3F1ZXVlX2ludl9pb21tdV9wYWdlcyhpb21tdSwgYWRkcmVzcywgZG9taWQsIDAsIHMpOwogCi0JcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IGFtZF9pb21tdXNfcHJlc2VudDsgKytpKSB7CisJCWlmICghZG9tYWluLT5kZXZfaW9tbXVbaV0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXZpY2VzIG9mIHRoaXMgZG9tYWluIGFyZSBiZWhpbmQgdGhpcyBJT01NVQorCQkgKiBXZSBuZWVkIGEgVExCIGZsdXNoCisJCSAqLworCQlpb21tdV9xdWV1ZV9pbnZfaW9tbXVfcGFnZXMoYW1kX2lvbW11c1tpXSwgYWRkcmVzcywKKwkJCQkJICAgIGRvbWFpbi0+aWQsIHBkZSwgcyk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9wYWdlcyhzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplKQoreworCV9faW9tbXVfZmx1c2hfcGFnZXMoZG9tYWluLCBhZGRyZXNzLCBzaXplLCAwKTsKIH0KIAogLyogRmx1c2ggdGhlIHdob2xlIElPL1RMQiBmb3IgYSBnaXZlbiBwcm90ZWN0aW9uIGRvbWFpbiAqLwotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfdGxiKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZG9taWQpCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF90bGIoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7Ci0JdTY0IGFkZHJlc3MgPSBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTOwotCi0JSU5DX1NUQVRTX0NPVU5URVIoZG9tYWluX2ZsdXNoX3NpbmdsZSk7Ci0KLQlpb21tdV9xdWV1ZV9pbnZfaW9tbXVfcGFnZXMoaW9tbXUsIGFkZHJlc3MsIGRvbWlkLCAwLCAxKTsKKwlfX2lvbW11X2ZsdXNoX3BhZ2VzKGRvbWFpbiwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywgMCk7CiB9CiAKIC8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gLSBpbmNsdWRpbmcgUERFICovCi1zdGF0aWMgdm9pZCBpb21tdV9mbHVzaF90bGJfcGRlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZG9taWQpCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF90bGJfcGRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQogewotICAgICAgIHU2NCBhZGRyZXNzID0gQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUzsKLQotICAgICAgIElOQ19TVEFUU19DT1VOVEVSKGRvbWFpbl9mbHVzaF9zaW5nbGUpOwotCi0gICAgICAgaW9tbXVfcXVldWVfaW52X2lvbW11X3BhZ2VzKGlvbW11LCBhZGRyZXNzLCBkb21pZCwgMSwgMSk7CisJX19pb21tdV9mbHVzaF9wYWdlcyhkb21haW4sIDAsIENNRF9JTlZfSU9NTVVfQUxMX1BBR0VTX0FERFJFU1MsIDEpOwogfQogCisKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgb25lIGRvbWFpbiBvbiBvbmUgSU9NTVUKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgRFRFcyBmb3IgYWxsIGRldmljZXMgaW4gZG9tYWluCiAgKi8KLXN0YXRpYyB2b2lkIGZsdXNoX2RvbWFpbl9vbl9pb21tdShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTE2IGRvbWlkKQorc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfZG9tYWluX2RldmljZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7Ci0Jc3RydWN0IGlvbW11X2NtZCBjbWQ7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JX19pb21tdV9idWlsZF9pbnZfaW9tbXVfcGFnZXMoJmNtZCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywKLQkJCQkgICAgICBkb21pZCwgMSwgMSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+bG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7Ci0JX19pb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKLQlfX2lvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7Ci0JX19pb21tdV93YWl0X2Zvcl9jb21wbGV0aW9uKGlvbW11KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KQorCQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2X2RhdGEtPmRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgZmx1c2hfYWxsX2RvbWFpbnNfb25faW9tbXUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9hbGxfZG9tYWluX2RldmljZXModm9pZCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yIChpID0gMTsgaSA8IE1BWF9ET01BSU5fSUQ7ICsraSkgewotCQlpZiAoIXRlc3RfYml0KGksIGFtZF9pb21tdV9wZF9hbGxvY19iaXRtYXApKQotCQkJY29udGludWU7Ci0JCWZsdXNoX2RvbWFpbl9vbl9pb21tdShpb21tdSwgaSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJmFtZF9pb21tdV9wZF9saXN0LCBsaXN0KSB7CisJCWlvbW11X2ZsdXNoX2RvbWFpbl9kZXZpY2VzKGRvbWFpbik7CisJCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXModm9pZCkKK3sKKwlpb21tdV9mbHVzaF9hbGxfZG9tYWluX2RldmljZXMoKTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmbHVzaCB0aGUgSU8vVExCIGZvciBhIGdpdmVuIHByb3RlY3Rpb24gZG9tYWluCi0gKiBvbiBldmVyeSBJT01NVSBpbiB0aGUgc3lzdGVtCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgaGVhdnkgbG9ja2luZyBhbmQgbWF5IGRpc2FibGUgaXJxcyBmb3Igc29tZSB0aW1lLiBCdXQKKyAqIHRoaXMgaXMgbm8gaXNzdWUgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgcmVzdW1lLgogICovCi1zdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9kb21haW4odTE2IGRvbWlkKQotewotCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCi0JSU5DX1NUQVRTX0NPVU5URVIoZG9tYWluX2ZsdXNoX2FsbCk7Ci0KLQlmb3JfZWFjaF9pb21tdShpb21tdSkKLQkJZmx1c2hfZG9tYWluX29uX2lvbW11KGlvbW11LCBkb21pZCk7Ci19Ci0KIHZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKHZvaWQpCiB7Ci0Jc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CisJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWZvcl9lYWNoX2lvbW11KGlvbW11KQotCQlmbHVzaF9hbGxfZG9tYWluc19vbl9pb21tdShpb21tdSk7Ci19CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7CiAKLXN0YXRpYyB2b2lkIGZsdXNoX2FsbF9kZXZpY2VzX2Zvcl9pb21tdShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2kpIHsKLQkJaWYgKGlvbW11ICE9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2ldKQotCQkJY29udGludWU7Ci0KLQkJaW9tbXVfcXVldWVfaW52X2Rldl9lbnRyeShpb21tdSwgaSk7Ci0JCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZhbWRfaW9tbXVfcGRfbGlzdCwgbGlzdCkgeworCQlzcGluX2xvY2soJmRvbWFpbi0+bG9jayk7CisJCWlvbW11X2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKKwkJaW9tbXVfZmx1c2hfY29tcGxldGUoZG9tYWluKTsKKwkJc3Bpbl91bmxvY2soJmRvbWFpbi0+bG9jayk7CiAJfQotfQogCi1zdGF0aWMgdm9pZCBmbHVzaF9kZXZpY2VzX2J5X2RvbWFpbihzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKLXsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2kpIHsKLQkJaWYgKChkb21haW4gPT0gTlVMTCAmJiBhbWRfaW9tbXVfcGRfdGFibGVbaV0gPT0gTlVMTCkgfHwKLQkJICAgIChhbWRfaW9tbXVfcGRfdGFibGVbaV0gIT0gZG9tYWluKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbaV07Ci0JCWlmICghaW9tbXUpCi0JCQljb250aW51ZTsKLQotCQlpb21tdV9xdWV1ZV9pbnZfZGV2X2VudHJ5KGlvbW11LCBpKTsKLQkJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKLQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcmVzZXRfaW9tbXVfY29tbWFuZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCkBAIC01NjMsMjAgKzY1MCwxMyBAQAogCWlmIChpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MpCiAJCXBhbmljKCJBTUQtVmk6IElMTEVHQUxfQ09NTUFORF9FUlJPUiB3aGlsZSByZXNldHRpbmcgY29tbWFuZCBidWZmZXJcbiIpOwogCi0JaW9tbXUtPnJlc2V0X2luX3Byb2dyZXNzID0gdHJ1ZTsKLQogCWFtZF9pb21tdV9yZXNldF9jbWRfYnVmZmVyKGlvbW11KTsKLQlmbHVzaF9hbGxfZGV2aWNlc19mb3JfaW9tbXUoaW9tbXUpOwotCWZsdXNoX2FsbF9kb21haW5zX29uX2lvbW11KGlvbW11KTsKKwlhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXMoKTsKKwlhbWRfaW9tbXVfZmx1c2hfYWxsX2RvbWFpbnMoKTsKIAogCWlvbW11LT5yZXNldF9pbl9wcm9ncmVzcyA9IGZhbHNlOwogfQogCi12b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZGV2aWNlcyh2b2lkKQotewotCWZsdXNoX2RldmljZXNfYnlfZG9tYWluKE5VTEwpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgdGhlIGNyZWF0ZSB0aGUgcGFnZSB0YWJsZSBtYXBwaW5ncyBmb3IKQEAgLTU4NSw2ICs2NjUsMTAwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgYW5vdGhlciBsZXZlbCB0byBhbiBJTyBwYWdlIHRhYmxlLiBBZGRpbmcKKyAqIGFub3RoZXIgbGV2ZWwgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGJ5IDkgYml0cyB0byBhIHNpemUgdXAKKyAqIHRvIDY0IGJpdHMuCisgKi8KK3N0YXRpYyBib29sIGluY3JlYXNlX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCisJCQkJICAgZ2ZwX3QgZ2ZwKQoreworCXU2NCAqcHRlOworCisJaWYgKGRvbWFpbi0+bW9kZSA9PSBQQUdFX01PREVfNl9MRVZFTCkKKwkJLyogYWRkcmVzcyBzcGFjZSBhbHJlYWR5IDY0IGJpdCBsYXJnZSAqLworCQlyZXR1cm4gZmFsc2U7CisKKwlwdGUgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShnZnApOworCWlmICghcHRlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqcHRlICAgICAgICAgICAgID0gUE1fTEVWRUxfUERFKGRvbWFpbi0+bW9kZSwKKwkJCQkJdmlydF90b19waHlzKGRvbWFpbi0+cHRfcm9vdCkpOworCWRvbWFpbi0+cHRfcm9vdCAgPSBwdGU7CisJZG9tYWluLT5tb2RlICAgICs9IDE7CisJZG9tYWluLT51cGRhdGVkICA9IHRydWU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHU2NCAqYWxsb2NfcHRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgICAgIGludCBlbmRfbHZsLAorCQkgICAgICB1NjQgKipwdGVfcGFnZSwKKwkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXU2NCAqcHRlLCAqcGFnZTsKKwlpbnQgbGV2ZWw7CisKKwl3aGlsZSAoYWRkcmVzcyA+IFBNX0xFVkVMX1NJWkUoZG9tYWluLT5tb2RlKSkKKwkJaW5jcmVhc2VfYWRkcmVzc19zcGFjZShkb21haW4sIGdmcCk7CisKKwlsZXZlbCA9ICBkb21haW4tPm1vZGUgLSAxOworCXB0ZSAgID0gJmRvbWFpbi0+cHRfcm9vdFtQTV9MRVZFTF9JTkRFWChsZXZlbCwgYWRkcmVzcyldOworCisJd2hpbGUgKGxldmVsID4gZW5kX2x2bCkgeworCQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKSB7CisJCQlwYWdlID0gKHU2NCAqKWdldF96ZXJvZWRfcGFnZShnZnApOworCQkJaWYgKCFwYWdlKQorCQkJCXJldHVybiBOVUxMOworCQkJKnB0ZSA9IFBNX0xFVkVMX1BERShsZXZlbCwgdmlydF90b19waHlzKHBhZ2UpKTsKKwkJfQorCisJCWxldmVsIC09IDE7CisKKwkJcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7CisKKwkJaWYgKHB0ZV9wYWdlICYmIGxldmVsID09IGVuZF9sdmwpCisJCQkqcHRlX3BhZ2UgPSBwdGU7CisKKwkJcHRlID0gJnB0ZVtQTV9MRVZFTF9JTkRFWChsZXZlbCwgYWRkcmVzcyldOworCX0KKworCXJldHVybiBwdGU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGVyZSBpcyBhIFBURSBmb3IgYSBnaXZlbiBkbWEgYWRkcmVzcy4gSWYKKyAqIHRoZXJlIGlzIG9uZSwgaXQgcmV0dXJucyB0aGUgcG9pbnRlciB0byBpdC4KKyAqLworc3RhdGljIHU2NCAqZmV0Y2hfcHRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBtYXBfc2l6ZSkKK3sKKwlpbnQgbGV2ZWw7CisJdTY0ICpwdGU7CisKKwlsZXZlbCA9ICBkb21haW4tPm1vZGUgLSAxOworCXB0ZSAgID0gJmRvbWFpbi0+cHRfcm9vdFtQTV9MRVZFTF9JTkRFWChsZXZlbCwgYWRkcmVzcyldOworCisJd2hpbGUgKGxldmVsID4gbWFwX3NpemUpIHsKKwkJaWYgKCFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKKwkJCXJldHVybiBOVUxMOworCisJCWxldmVsIC09IDE7CisKKwkJcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7CisJCXB0ZSA9ICZwdGVbUE1fTEVWRUxfSU5ERVgobGV2ZWwsIGFkZHJlc3MpXTsKKworCQlpZiAoKFBNX1BURV9MRVZFTCgqcHRlKSA9PSAwKSAmJiBsZXZlbCAhPSBtYXBfc2l6ZSkgeworCQkJcHRlID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHB0ZTsKK30KKworLyoKICAqIEdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbnMuIEl0IG1hcHMgYSBwaHlzaWNhbCBhZGRyZXNzIGludG8gYSBETUEKICAqIGFkZHJlc3Mgc3BhY2UuIEl0IGFsbG9jYXRlcyB0aGUgcGFnZSB0YWJsZSBwYWdlcyBpZiBuZWNlc3NhcnkuCiAgKiBJbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBleHRlbmRlZCB0byBhIGdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbgpAQCAtNjU0LDI4ICs4MjgsNiBAQAogfQogCiAvKgotICogSW5pdCB0aGUgdW5pdHkgbWFwcGluZ3MgZm9yIGEgc3BlY2lmaWMgSU9NTVUgaW4gdGhlIHN5c3RlbQotICoKLSAqIEJhc2ljYWxseSBpdGVyYXRlcyBvdmVyIGFsbCB1bml0eSBtYXBwaW5nIGVudHJpZXMgYW5kIGFwcGxpZXMgdGhlbSB0bwotICogdGhlIGRlZmF1bHQgZG9tYWluIERNQSBvZiB0aGF0IElPTU1VIGlmIG5lY2Vzc2FyeS4KLSAqLwotc3RhdGljIGludCBpb21tdV9pbml0X3VuaXR5X21hcHBpbmdzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQotewotCXN0cnVjdCB1bml0eV9tYXBfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1kX2lvbW11X3VuaXR5X21hcCwgbGlzdCkgewotCQlpZiAoIWlvbW11X2Zvcl91bml0eV9tYXAoaW9tbXUsIGVudHJ5KSkKLQkJCWNvbnRpbnVlOwotCQlyZXQgPSBkbWFfb3BzX3VuaXR5X21hcChpb21tdS0+ZGVmYXVsdF9kb20sIGVudHJ5KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGFwcGxpZXMgdGhlIG1hcHBpbmcgdG8gdGhlIHBhZ2UgdGFibGUgb2YgdGhlCiAgKiBkbWFfb3BzIGRvbWFpbi4KICAqLwpAQCAtNzA0LDYgKzg1NiwyOCBAQAogfQogCiAvKgorICogSW5pdCB0aGUgdW5pdHkgbWFwcGluZ3MgZm9yIGEgc3BlY2lmaWMgSU9NTVUgaW4gdGhlIHN5c3RlbQorICoKKyAqIEJhc2ljYWxseSBpdGVyYXRlcyBvdmVyIGFsbCB1bml0eSBtYXBwaW5nIGVudHJpZXMgYW5kIGFwcGxpZXMgdGhlbSB0bworICogdGhlIGRlZmF1bHQgZG9tYWluIERNQSBvZiB0aGF0IElPTU1VIGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCBpb21tdV9pbml0X3VuaXR5X21hcHBpbmdzKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXN0cnVjdCB1bml0eV9tYXBfZW50cnkgKmVudHJ5OworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1kX2lvbW11X3VuaXR5X21hcCwgbGlzdCkgeworCQlpZiAoIWlvbW11X2Zvcl91bml0eV9tYXAoaW9tbXUsIGVudHJ5KSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBkbWFfb3BzX3VuaXR5X21hcChpb21tdS0+ZGVmYXVsdF9kb20sIGVudHJ5KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBJbml0cyB0aGUgdW5pdHkgbWFwcGluZ3MgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgZGV2aWNlCiAgKi8KIHN0YXRpYyBpbnQgaW5pdF91bml0eV9tYXBwaW5nc19mb3JfZGV2aWNlKHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG1hX2RvbSwKQEAgLTc0MCwzNCArOTE0LDIzIEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZXJlIGlzIGEgUFRFIGZvciBhIGdpdmVuIGRtYSBhZGRyZXNzLiBJZgotICogdGhlcmUgaXMgb25lLCBpdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGl0LgorICogVXNlZCB0byByZXNlcnZlIGFkZHJlc3MgcmFuZ2VzIGluIHRoZSBhcGVydHVyZSAoZS5nLiBmb3IgZXhjbHVzaW9uCisgKiByYW5nZXMuCiAgKi8KLXN0YXRpYyB1NjQgKmZldGNoX3B0ZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbWFwX3NpemUpCitzdGF0aWMgdm9pZCBkbWFfb3BzX3Jlc2VydmVfYWRkcmVzc2VzKHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG9tLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGFnZXMpCiB7Ci0JaW50IGxldmVsOwotCXU2NCAqcHRlOworCXVuc2lnbmVkIGludCBpLCBsYXN0X3BhZ2UgPSBkb20tPmFwZXJ0dXJlX3NpemUgPj4gUEFHRV9TSElGVDsKIAotCWxldmVsID0gIGRvbWFpbi0+bW9kZSAtIDE7Ci0JcHRlICAgPSAmZG9tYWluLT5wdF9yb290W1BNX0xFVkVMX0lOREVYKGxldmVsLCBhZGRyZXNzKV07CisJaWYgKHN0YXJ0X3BhZ2UgKyBwYWdlcyA+IGxhc3RfcGFnZSkKKwkJcGFnZXMgPSBsYXN0X3BhZ2UgLSBzdGFydF9wYWdlOwogCi0Jd2hpbGUgKGxldmVsID4gbWFwX3NpemUpIHsKLQkJaWYgKCFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKLQkJCXJldHVybiBOVUxMOwotCi0JCWxldmVsIC09IDE7Ci0KLQkJcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7Ci0JCXB0ZSA9ICZwdGVbUE1fTEVWRUxfSU5ERVgobGV2ZWwsIGFkZHJlc3MpXTsKLQotCQlpZiAoKFBNX1BURV9MRVZFTCgqcHRlKSA9PSAwKSAmJiBsZXZlbCAhPSBtYXBfc2l6ZSkgewotCQkJcHRlID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9CisJZm9yIChpID0gc3RhcnRfcGFnZTsgaSA8IHN0YXJ0X3BhZ2UgKyBwYWdlczsgKytpKSB7CisJCWludCBpbmRleCA9IGkgLyBBUEVSVFVSRV9SQU5HRV9QQUdFUzsKKwkJaW50IHBhZ2UgID0gaSAlIEFQRVJUVVJFX1JBTkdFX1BBR0VTOworCQlfX3NldF9iaXQocGFnZSwgZG9tLT5hcGVydHVyZVtpbmRleF0tPmJpdG1hcCk7CiAJfQotCi0JcmV0dXJuIHB0ZTsKIH0KIAogLyoKQEAgLTc3NSwxMSArOTM4LDExIEBACiAgKiBhcGVydHVyZSBpbiBjYXNlIG9mIGRtYV9vcHMgZG9tYWluIGFsbG9jYXRpb24gb3IgYWRkcmVzcyBhbGxvY2F0aW9uCiAgKiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IGFsbG9jX25ld19yYW5nZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKLQkJCSAgIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG1hX2RvbSwKK3N0YXRpYyBpbnQgYWxsb2NfbmV3X3JhbmdlKHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG1hX2RvbSwKIAkJCSAgIGJvb2wgcG9wdWxhdGUsIGdmcF90IGdmcCkKIHsKIAlpbnQgaW5kZXggPSBkbWFfZG9tLT5hcGVydHVyZV9zaXplID4+IEFQRVJUVVJFX1JBTkdFX1NISUZUOworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX0lPTU1VX1NUUkVTUwpAQCAtODE5LDE0ICs5ODIsMTcgQEAKIAlkbWFfZG9tLT5hcGVydHVyZV9zaXplICs9IEFQRVJUVVJFX1JBTkdFX1NJWkU7CiAKIAkvKiBJbnRpYWxpemUgdGhlIGV4Y2x1c2lvbiByYW5nZSBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCAmJgotCSAgICBpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0ID49IGRtYV9kb20tPmFwZXJ0dXJlW2luZGV4XS0+b2Zmc2V0ICYmCi0JICAgIGlvbW11LT5leGNsdXNpb25fc3RhcnQgPCBkbWFfZG9tLT5hcGVydHVyZV9zaXplKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRwYWdlID0gaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCA+PiBQQUdFX1NISUZUOwotCQlpbnQgcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCwKLQkJCQkJICAgIGlvbW11LT5leGNsdXNpb25fbGVuZ3RoLAotCQkJCQkgICAgUEFHRV9TSVpFKTsKLQkJZG1hX29wc19yZXNlcnZlX2FkZHJlc3NlcyhkbWFfZG9tLCBzdGFydHBhZ2UsIHBhZ2VzKTsKKwlmb3JfZWFjaF9pb21tdShpb21tdSkgeworCQlpZiAoaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCAmJgorCQkgICAgaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCA+PSBkbWFfZG9tLT5hcGVydHVyZVtpbmRleF0tPm9mZnNldAorCQkgICAgJiYgaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCA8IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRwYWdlOworCQkJaW50IHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGlvbW11LT5leGNsdXNpb25fc3RhcnQsCisJCQkJCQkgICAgaW9tbXUtPmV4Y2x1c2lvbl9sZW5ndGgsCisJCQkJCQkgICAgUEFHRV9TSVpFKTsKKwkJCXN0YXJ0cGFnZSA9IGlvbW11LT5leGNsdXNpb25fc3RhcnQgPj4gUEFHRV9TSElGVDsKKwkJCWRtYV9vcHNfcmVzZXJ2ZV9hZGRyZXNzZXMoZG1hX2RvbSwgc3RhcnRwYWdlLCBwYWdlcyk7CisJCX0KIAl9CiAKIAkvKgpAQCAtOTI4LDcgKzEwOTQsNyBAQAogCX0KIAogCWlmICh1bmxpa2VseShhZGRyZXNzID09IC0xKSkKLQkJYWRkcmVzcyA9IGJhZF9kbWFfYWRkcmVzczsKKwkJYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwogCiAJV0FSTl9PTigoYWRkcmVzcyArIChQQUdFX1NJWkUqcGFnZXMpKSA+IGRvbS0+YXBlcnR1cmVfc2l6ZSk7CiAKQEAgLTk3Myw2ICsxMTM5LDMxIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBwcm90ZWN0aW9uIGRvbWFpbiB0byB0aGUgZ2xvYmFsIHByb3RlY3Rpb24gZG9tYWluIGxpc3QKKyAqLworc3RhdGljIHZvaWQgYWRkX2RvbWFpbl90b19saXN0KHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZG9tYWluLT5saXN0LCAmYW1kX2lvbW11X3BkX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBwcm90ZWN0aW9uIGRvbWFpbiB0byB0aGUgZ2xvYmFsCisgKiBwcm90ZWN0aW9uIGRvbWFpbiBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGRlbF9kb21haW5fZnJvbV9saXN0KHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmZG9tYWluLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfaW9tbXVfcGRfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdTE2IGRvbWFpbl9pZF9hbGxvYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDAwLDI2ICsxMTkxLDYgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIH0KIAotLyoKLSAqIFVzZWQgdG8gcmVzZXJ2ZSBhZGRyZXNzIHJhbmdlcyBpbiB0aGUgYXBlcnR1cmUgKGUuZy4gZm9yIGV4Y2x1c2lvbgotICogcmFuZ2VzLgotICovCi1zdGF0aWMgdm9pZCBkbWFfb3BzX3Jlc2VydmVfYWRkcmVzc2VzKHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG9tLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGFnZXMpCi17Ci0JdW5zaWduZWQgaW50IGksIGxhc3RfcGFnZSA9IGRvbS0+YXBlcnR1cmVfc2l6ZSA+PiBQQUdFX1NISUZUOwotCi0JaWYgKHN0YXJ0X3BhZ2UgKyBwYWdlcyA+IGxhc3RfcGFnZSkKLQkJcGFnZXMgPSBsYXN0X3BhZ2UgLSBzdGFydF9wYWdlOwotCi0JZm9yIChpID0gc3RhcnRfcGFnZTsgaSA8IHN0YXJ0X3BhZ2UgKyBwYWdlczsgKytpKSB7Ci0JCWludCBpbmRleCA9IGkgLyBBUEVSVFVSRV9SQU5HRV9QQUdFUzsKLQkJaW50IHBhZ2UgID0gaSAlIEFQRVJUVVJFX1JBTkdFX1BBR0VTOwotCQlfX3NldF9iaXQocGFnZSwgZG9tLT5hcGVydHVyZVtpbmRleF0tPmJpdG1hcCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBmcmVlX3BhZ2V0YWJsZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKIAlpbnQgaSwgajsKQEAgLTEwNjEsNiArMTIzMiw4IEBACiAJaWYgKCFkb20pCiAJCXJldHVybjsKIAorCWRlbF9kb21haW5fZnJvbV9saXN0KCZkb20tPmRvbWFpbik7CisKIAlmcmVlX3BhZ2V0YWJsZSgmZG9tLT5kb21haW4pOwogCiAJZm9yIChpID0gMDsgaSA8IEFQRVJUVVJFX01BWF9SQU5HRVM7ICsraSkgewpAQCAtMTA3OCw3ICsxMjUxLDcgQEAKICAqIEl0IGFsc28gaW50aWFsaXplcyB0aGUgcGFnZSB0YWJsZSBhbmQgdGhlIGFkZHJlc3MgYWxsb2NhdG9yIGRhdGEKICAqIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIHRoZSBkbWFfb3BzIGludGVyZmFjZQogICovCi1zdGF0aWMgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfb3BzX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3N0YXRpYyBzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9vcHNfZG9tYWluX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tOwogCkBAIC0xMDkxLDYgKzEyNjQsNyBAQAogCWRtYV9kb20tPmRvbWFpbi5pZCA9IGRvbWFpbl9pZF9hbGxvYygpOwogCWlmIChkbWFfZG9tLT5kb21haW4uaWQgPT0gMCkKIAkJZ290byBmcmVlX2RtYV9kb207CisJSU5JVF9MSVNUX0hFQUQoJmRtYV9kb20tPmRvbWFpbi5kZXZfbGlzdCk7CiAJZG1hX2RvbS0+ZG9tYWluLm1vZGUgPSBQQUdFX01PREVfMl9MRVZFTDsKIAlkbWFfZG9tLT5kb21haW4ucHRfcm9vdCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWRtYV9kb20tPmRvbWFpbi5mbGFncyA9IFBEX0RNQV9PUFNfTUFTSzsKQEAgLTExMDEsNyArMTI3NSw5IEBACiAJZG1hX2RvbS0+bmVlZF9mbHVzaCA9IGZhbHNlOwogCWRtYV9kb20tPnRhcmdldF9kZXYgPSAweGZmZmY7CiAKLQlpZiAoYWxsb2NfbmV3X3JhbmdlKGlvbW11LCBkbWFfZG9tLCB0cnVlLCBHRlBfS0VSTkVMKSkKKwlhZGRfZG9tYWluX3RvX2xpc3QoJmRtYV9kb20tPmRvbWFpbik7CisKKwlpZiAoYWxsb2NfbmV3X3JhbmdlKGRtYV9kb20sIHRydWUsIEdGUF9LRVJORUwpKQogCQlnb3RvIGZyZWVfZG1hX2RvbTsKIAogCS8qCkBAIC0xMTI5LDIyICsxMzA1LDYgQEAKIAlyZXR1cm4gZG9tYWluLT5mbGFncyAmIFBEX0RNQV9PUFNfTUFTSzsKIH0KIAotLyoKLSAqIEZpbmQgb3V0IHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gUENJIGRldmljZS4gVGhpcwotICogd2lsbCBnaXZlIHVzIHRoZSBwb2ludGVyIHRvIHRoZSBwYWdlIHRhYmxlIHJvb3QgZm9yIGV4YW1wbGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbl9mb3JfZGV2aWNlKHUxNiBkZXZpZCkKLXsKLQlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmVhZF9sb2NrX2lycXNhdmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7Ci0JZG9tID0gYW1kX2lvbW11X3BkX3RhYmxlW2RldmlkXTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGRvbTsKLX0KLQogc3RhdGljIHZvaWQgc2V0X2R0ZV9lbnRyeSh1MTYgZGV2aWQsIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQogewogCXU2NCBwdGVfcm9vdCA9IHZpcnRfdG9fcGh5cyhkb21haW4tPnB0X3Jvb3QpOwpAQCAtMTE1Niw0MiArMTMxNiwxMjMgQEAKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gZG9tYWluLT5pZDsKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gdXBwZXJfMzJfYml0cyhwdGVfcm9vdCk7CiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVswXSA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOworfQogCi0JYW1kX2lvbW11X3BkX3RhYmxlW2RldmlkXSA9IGRvbWFpbjsKK3N0YXRpYyB2b2lkIGNsZWFyX2R0ZV9lbnRyeSh1MTYgZGV2aWQpCit7CisJLyogcmVtb3ZlIGVudHJ5IGZyb20gdGhlIGRldmljZSB0YWJsZSBzZWVuIGJ5IHRoZSBoYXJkd2FyZSAqLworCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMF0gPSBJT01NVV9QVEVfUCB8IElPTU1VX1BURV9UVjsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gMDsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gMDsKKworCWFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKGRldmlkKTsKK30KKworc3RhdGljIHZvaWQgZG9fYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCit7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKKwlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKwl1MTYgZGV2aWQ7CisKKwlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKKwlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCisJLyogVXBkYXRlIGRhdGEgc3RydWN0dXJlcyAqLworCWRldl9kYXRhLT5kb21haW4gPSBkb21haW47CisJbGlzdF9hZGQoJmRldl9kYXRhLT5saXN0LCAmZG9tYWluLT5kZXZfbGlzdCk7CisJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluKTsKKworCS8qIERvIHJlZmVyZW5jZSBjb3VudGluZyAqLworCWRvbWFpbi0+ZGV2X2lvbW11W2lvbW11LT5pbmRleF0gKz0gMTsKKwlkb21haW4tPmRldl9jbnQgICAgICAgICAgICAgICAgICs9IDE7CisKKwkvKiBGbHVzaCB0aGUgRFRFIGVudHJ5ICovCisJaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKKwlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKwl1MTYgZGV2aWQ7CisKKwlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKKwlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCisJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXJzICovCisJZGV2X2RhdGEtPmRvbWFpbi0+ZGV2X2lvbW11W2lvbW11LT5pbmRleF0gLT0gMTsKKwlkZXZfZGF0YS0+ZG9tYWluLT5kZXZfY250ICAgICAgICAgICAgICAgICAtPSAxOworCisJLyogVXBkYXRlIGRhdGEgc3RydWN0dXJlcyAqLworCWRldl9kYXRhLT5kb21haW4gPSBOVUxMOworCWxpc3RfZGVsKCZkZXZfZGF0YS0+bGlzdCk7CisJY2xlYXJfZHRlX2VudHJ5KGRldmlkKTsKKworCS8qIEZsdXNoIHRoZSBEVEUgZW50cnkgKi8KKwlpb21tdV9mbHVzaF9kZXZpY2UoZGV2KTsKIH0KIAogLyoKICAqIElmIGEgZGV2aWNlIGlzIG5vdCB5ZXQgYXNzb2NpYXRlZCB3aXRoIGEgZG9tYWluLCB0aGlzIGZ1bmN0aW9uIGRvZXMKICAqIGFzc2lnbnMgaXQgdmlzaWJsZSBmb3IgdGhlIGhhcmR3YXJlCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0YWNoX2RldmljZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKLQkJCSAgICBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKLQkJCSAgICB1MTYgZGV2aWQpCitzdGF0aWMgaW50IF9fYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKKwlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhLCAqYWxpYXNfZGF0YTsKKworCWRldl9kYXRhICAgPSBnZXRfZGV2X2RhdGEoZGV2KTsKKwlhbGlhc19kYXRhID0gZ2V0X2Rldl9kYXRhKGRldl9kYXRhLT5hbGlhcyk7CisKKwlpZiAoIWFsaWFzX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogbG9jayBkb21haW4gKi8KIAlzcGluX2xvY2soJmRvbWFpbi0+bG9jayk7CiAKLQkvKiB1cGRhdGUgRFRFIGVudHJ5ICovCi0Jc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluKTsKKwkvKiBTb21lIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoYWxpYXNfZGF0YS0+ZG9tYWluICE9IE5VTEwgJiYKKwkgICAgYWxpYXNfZGF0YS0+ZG9tYWluICE9IGRvbWFpbikKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWRvbWFpbi0+ZGV2X2NudCArPSAxOworCWlmIChkZXZfZGF0YS0+ZG9tYWluICE9IE5VTEwgJiYKKwkgICAgZGV2X2RhdGEtPmRvbWFpbiAhPSBkb21haW4pCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBEbyByZWFsIGFzc2lnbm1lbnQgKi8KKwlpZiAoZGV2X2RhdGEtPmFsaWFzICE9IGRldikgeworCQlhbGlhc19kYXRhID0gZ2V0X2Rldl9kYXRhKGRldl9kYXRhLT5hbGlhcyk7CisJCWlmIChhbGlhc19kYXRhLT5kb21haW4gPT0gTlVMTCkKKwkJCWRvX2F0dGFjaChkZXZfZGF0YS0+YWxpYXMsIGRvbWFpbik7CisKKwkJYXRvbWljX2luYygmYWxpYXNfZGF0YS0+YmluZCk7CisJfQorCisJaWYgKGRldl9kYXRhLT5kb21haW4gPT0gTlVMTCkKKwkJZG9fYXR0YWNoKGRldiwgZG9tYWluKTsKKworCWF0b21pY19pbmMoJmRldl9kYXRhLT5iaW5kKTsKIAogCS8qIHJlYWR5ICovCiAJc3Bpbl91bmxvY2soJmRvbWFpbi0+bG9jayk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIElmIGEgZGV2aWNlIGlzIG5vdCB5ZXQgYXNzb2NpYXRlZCB3aXRoIGEgZG9tYWluLCB0aGlzIGZ1bmN0aW9uIGRvZXMKICAqIGFzc2lnbnMgaXQgdmlzaWJsZSBmb3IgdGhlIGhhcmR3YXJlCiAgKi8KLXN0YXRpYyB2b2lkIGF0dGFjaF9kZXZpY2Uoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCi0JCQkgIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAotCQkJICB1MTYgZGV2aWQpCitzdGF0aWMgaW50IGF0dGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKLQlfX2F0dGFjaF9kZXZpY2UoaW9tbXUsIGRvbWFpbiwgZGV2aWQpOworCXJldCA9IF9fYXR0YWNoX2RldmljZShkZXYsIGRvbWFpbik7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtMTE5OSw5NiArMTQ0MCwxMjUgQEAKIAkgKiBsZWZ0IHRoZSBjYWNoZXMgaW4gdGhlIElPTU1VIGRpcnR5LiBTbyB3ZSBoYXZlIHRvIGZsdXNoCiAJICogaGVyZSB0byBldmljdCBhbGwgZGlydHkgc3R1ZmYuCiAJICovCi0JaW9tbXVfcXVldWVfaW52X2Rldl9lbnRyeShpb21tdSwgZGV2aWQpOwotCWlvbW11X2ZsdXNoX3RsYl9wZGUoaW9tbXUsIGRvbWFpbi0+aWQpOworCWlvbW11X2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBSZW1vdmVzIGEgZGV2aWNlIGZyb20gYSBwcm90ZWN0aW9uIGRvbWFpbiAodW5sb2NrZWQpCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV0YWNoX2RldmljZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwgdTE2IGRldmlkKQorc3RhdGljIHZvaWQgX19kZXRhY2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhID0gZ2V0X2Rldl9kYXRhKGRldik7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICphbGlhc19kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBsb2NrIGRvbWFpbiAqLwotCXNwaW5fbG9jaygmZG9tYWluLT5sb2NrKTsKKwlCVUdfT04oIWRldl9kYXRhLT5kb21haW4pOwogCi0JLyogcmVtb3ZlIGRvbWFpbiBmcm9tIHRoZSBsb29rdXAgdGFibGUgKi8KLQlhbWRfaW9tbXVfcGRfdGFibGVbZGV2aWRdID0gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X2RhdGEtPmRvbWFpbi0+bG9jaywgZmxhZ3MpOwogCi0JLyogcmVtb3ZlIGVudHJ5IGZyb20gdGhlIGRldmljZSB0YWJsZSBzZWVuIGJ5IHRoZSBoYXJkd2FyZSAqLwotCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMF0gPSBJT01NVV9QVEVfUCB8IElPTU1VX1BURV9UVjsKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gMDsKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gMDsKKwlpZiAoZGV2X2RhdGEtPmFsaWFzICE9IGRldikgeworCQlhbGlhc19kYXRhID0gZ2V0X2Rldl9kYXRhKGRldl9kYXRhLT5hbGlhcyk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbGlhc19kYXRhLT5iaW5kKSkKKwkJCWRvX2RldGFjaChkZXZfZGF0YS0+YWxpYXMpOworCX0KIAotCS8qIGRlY3JlYXNlIHJlZmVyZW5jZSBjb3VudGVyICovCi0JZG9tYWluLT5kZXZfY250IC09IDE7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldl9kYXRhLT5iaW5kKSkKKwkJZG9fZGV0YWNoKGRldik7CiAKLQkvKiByZWFkeSAqLwotCXNwaW5fdW5sb2NrKCZkb21haW4tPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9kYXRhLT5kb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogSWYgd2UgcnVuIGluIHBhc3N0aHJvdWdoIG1vZGUgdGhlIGRldmljZSBtdXN0IGJlIGFzc2lnbmVkIHRvIHRoZQogCSAqIHBhc3N0aHJvdWdoIGRvbWFpbiBpZiBpdCBpcyBkZXRhY2hlZCBmcm9tIGFueSBvdGhlciBkb21haW4KIAkgKi8KLQlpZiAoaW9tbXVfcGFzc190aHJvdWdoKSB7Ci0JCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbZGV2aWRdOwotCQlfX2F0dGFjaF9kZXZpY2UoaW9tbXUsIHB0X2RvbWFpbiwgZGV2aWQpOwotCX0KKwlpZiAoaW9tbXVfcGFzc190aHJvdWdoICYmIGRldl9kYXRhLT5kb21haW4gPT0gTlVMTCkKKwkJX19hdHRhY2hfZGV2aWNlKGRldiwgcHRfZG9tYWluKTsKIH0KIAogLyoKICAqIFJlbW92ZXMgYSBkZXZpY2UgZnJvbSBhIHByb3RlY3Rpb24gZG9tYWluICh3aXRoIGRldnRhYmxlX2xvY2sgaGVsZCkKICAqLwotc3RhdGljIHZvaWQgZGV0YWNoX2RldmljZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwgdTE2IGRldmlkKQorc3RhdGljIHZvaWQgZGV0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGxvY2sgZGV2aWNlIHRhYmxlICovCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOwotCV9fZGV0YWNoX2RldmljZShkb21haW4sIGRldmlkKTsKKwlfX2RldGFjaF9kZXZpY2UoZGV2KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIH0KIAorLyoKKyAqIEZpbmQgb3V0IHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gUENJIGRldmljZS4gVGhpcworICogd2lsbCBnaXZlIHVzIHRoZSBwb2ludGVyIHRvIHRoZSBwYWdlIHRhYmxlIHJvb3QgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbl9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbTsKKwlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhLCAqYWxpYXNfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBkZXZpZCwgYWxpYXM7CisKKwlkZXZpZCAgICAgID0gZ2V0X2RldmljZV9pZChkZXYpOworCWFsaWFzICAgICAgPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdOworCWRldl9kYXRhICAgPSBnZXRfZGV2X2RhdGEoZGV2KTsKKwlhbGlhc19kYXRhID0gZ2V0X2Rldl9kYXRhKGRldl9kYXRhLT5hbGlhcyk7CisJaWYgKCFhbGlhc19kYXRhKQorCQlyZXR1cm4gTlVMTDsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOworCWRvbSA9IGRldl9kYXRhLT5kb21haW47CisJaWYgKGRvbSA9PSBOVUxMICYmCisJICAgIGFsaWFzX2RhdGEtPmRvbWFpbiAhPSBOVUxMKSB7CisJCV9fYXR0YWNoX2RldmljZShkZXYsIGFsaWFzX2RhdGEtPmRvbWFpbik7CisJCWRvbSA9IGFsaWFzX2RhdGEtPmRvbWFpbjsKKwl9CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGRvbTsKK30KKwogc3RhdGljIGludCBkZXZpY2VfY2hhbmdlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXUxNiBkZXZpZCA9IGNhbGNfZGV2aWQocGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKKwl1MTYgZGV2aWQ7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47CiAJc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tYWluOwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoZGV2aWQgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCi0JCWdvdG8gb3V0OworCWlmICghY2hlY2tfZGV2aWNlKGRldikpCisJCXJldHVybiAwOwogCi0JZGV2aWQgPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdOwotCi0JaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07Ci0JaWYgKGlvbW11ID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JZG9tYWluID0gZG9tYWluX2Zvcl9kZXZpY2UoZGV2aWQpOwotCi0JaWYgKGRvbWFpbiAmJiAhZG1hX29wc19kb21haW4oZG9tYWluKSkKLQkJV0FSTl9PTkNFKDEsICJBTUQgSU9NTVUgV0FSTklORzogZGV2aWNlICVzIGFscmVhZHkgYm91bmQgIgotCQkJICAidG8gYSBub24tZG1hLW9wcyBkb21haW5cbiIsIGRldl9uYW1lKGRldikpOworCWRldmlkICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSAgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUjoKKworCQlkb21haW4gPSBkb21haW5fZm9yX2RldmljZShkZXYpOworCiAJCWlmICghZG9tYWluKQogCQkJZ290byBvdXQ7CiAJCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCiAJCQlicmVhazsKLQkJZGV0YWNoX2RldmljZShkb21haW4sIGRldmlkKTsKKwkJZGV0YWNoX2RldmljZShkZXYpOwogCQlicmVhazsKIAljYXNlIEJVU19OT1RJRllfQUREX0RFVklDRToKKworCQlpb21tdV9pbml0X2RldmljZShkZXYpOworCisJCWRvbWFpbiA9IGRvbWFpbl9mb3JfZGV2aWNlKGRldik7CisKIAkJLyogYWxsb2NhdGUgYSBwcm90ZWN0aW9uIGRvbWFpbiBpZiBhIGRldmljZSBpcyBhZGRlZCAqLwogCQlkbWFfZG9tYWluID0gZmluZF9wcm90ZWN0aW9uX2RvbWFpbihkZXZpZCk7CiAJCWlmIChkbWFfZG9tYWluKQogCQkJZ290byBvdXQ7Ci0JCWRtYV9kb21haW4gPSBkbWFfb3BzX2RvbWFpbl9hbGxvYyhpb21tdSk7CisJCWRtYV9kb21haW4gPSBkbWFfb3BzX2RvbWFpbl9hbGxvYygpOwogCQlpZiAoIWRtYV9kb21haW4pCiAJCQlnb3RvIG91dDsKIAkJZG1hX2RvbWFpbi0+dGFyZ2V0X2RldiA9IGRldmlkOwpAQCAtMTI5OCwxMSArMTU2OCwxNSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdV9wZF9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlicmVhazsKKwljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKKworCQlpb21tdV91bmluaXRfZGV2aWNlKGRldik7CisKIAlkZWZhdWx0OgogCQlnb3RvIG91dDsKIAl9CiAKLQlpb21tdV9xdWV1ZV9pbnZfZGV2X2VudHJ5KGlvbW11LCBkZXZpZCk7CisJaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7CiAJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKIAogb3V0OgpAQCAtMTMyMCwxMDYgKzE1OTQsNDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBkcml2ZXIgZ290IGEgdmFsaWQgZGV2aWNlIGZyb20gdGhlIGNhbGxlciB0bwotICogYXZvaWQgZGVyZWZlcmVuY2luZyBpbnZhbGlkIHBvaW50ZXJzLgotICovCi1zdGF0aWMgYm9vbCBjaGVja19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCWlmICghZGV2IHx8ICFkZXYtPmRtYV9tYXNrKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIEluIHRoaXMgZnVuY3Rpb24gdGhlIGxpc3Qgb2YgcHJlYWxsb2NhdGVkIHByb3RlY3Rpb24gZG9tYWlucyBpcyB0cmF2ZXJzZWQgdG8KLSAqIGZpbmQgdGhlIGRvbWFpbiBmb3IgYSBzcGVjaWZpYyBkZXZpY2UKLSAqLwotc3RhdGljIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZmluZF9wcm90ZWN0aW9uX2RvbWFpbih1MTYgZGV2aWQpCi17Ci0Jc3RydWN0IGRtYV9vcHNfZG9tYWluICplbnRyeSwgKnJldCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChsaXN0X2VtcHR5KCZpb21tdV9wZF9saXN0KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXVfcGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaW9tbXVfcGRfbGlzdCwgbGlzdCkgewotCQlpZiAoZW50cnktPnRhcmdldF9kZXYgPT0gZGV2aWQpIHsKLQkJCXJldCA9IGVudHJ5OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdV9wZF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiBJbiB0aGUgZG1hX29wcyBwYXRoIHdlIG9ubHkgaGF2ZSB0aGUgc3RydWN0IGRldmljZS4gVGhpcyBmdW5jdGlvbgogICogZmluZHMgdGhlIGNvcnJlc3BvbmRpbmcgSU9NTVUsIHRoZSBwcm90ZWN0aW9uIGRvbWFpbiBhbmQgdGhlCiAgKiByZXF1ZXN0b3IgaWQgZm9yIGEgZ2l2ZW4gZGV2aWNlLgogICogSWYgdGhlIGRldmljZSBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIGRvbWFpbiB0aGlzIGlzIGFsc28gZG9uZQogICogaW4gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBnZXRfZGV2aWNlX3Jlc291cmNlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGFtZF9pb21tdSAqKmlvbW11LAotCQkJCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqKmRvbWFpbiwKLQkJCQl1MTYgKmJkZikKK3N0YXRpYyBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmdldF9kb21haW4oc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluOwogCXN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG1hX2RvbTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwotCXUxNiBfYmRmOworCXUxNiBkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAotCSppb21tdSA9IE5VTEw7Ci0JKmRvbWFpbiA9IE5VTEw7Ci0JKmJkZiA9IDB4ZmZmZjsKKwlpZiAoIWNoZWNrX2RldmljZShkZXYpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWlmIChkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gMDsKKwlkb21haW4gPSBkb21haW5fZm9yX2RldmljZShkZXYpOworCWlmIChkb21haW4gIT0gTlVMTCAmJiAhZG1hX29wc19kb21haW4oZG9tYWluKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKIAotCXBjaWRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlfYmRmID0gY2FsY19kZXZpZChwY2lkZXYtPmJ1cy0+bnVtYmVyLCBwY2lkZXYtPmRldmZuKTsKKwlpZiAoZG9tYWluICE9IE5VTEwpCisJCXJldHVybiBkb21haW47CiAKLQkvKiBkZXZpY2Ugbm90IHRyYW5zbGF0ZWQgYnkgYW55IElPTU1VIGluIHRoZSBzeXN0ZW0/ICovCi0JaWYgKF9iZGYgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCi0JCXJldHVybiAwOworCS8qIERldmljZSBub3QgYm91bnQgeWV0IC0gYmluZCBpdCAqLworCWRtYV9kb20gPSBmaW5kX3Byb3RlY3Rpb25fZG9tYWluKGRldmlkKTsKKwlpZiAoIWRtYV9kb20pCisJCWRtYV9kb20gPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0tPmRlZmF1bHRfZG9tOworCWF0dGFjaF9kZXZpY2UoZGV2LCAmZG1hX2RvbS0+ZG9tYWluKTsKKwlEVU1QX3ByaW50aygiVXNpbmcgcHJvdGVjdGlvbiBkb21haW4gJWQgZm9yIGRldmljZSAlc1xuIiwKKwkJICAgIGRtYV9kb20tPmRvbWFpbi5pZCwgZGV2X25hbWUoZGV2KSk7CiAKLQkqYmRmID0gYW1kX2lvbW11X2FsaWFzX3RhYmxlW19iZGZdOwotCi0JKmlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbKmJkZl07Ci0JaWYgKCppb21tdSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQkqZG9tYWluID0gZG9tYWluX2Zvcl9kZXZpY2UoKmJkZik7Ci0JaWYgKCpkb21haW4gPT0gTlVMTCkgewotCQlkbWFfZG9tID0gZmluZF9wcm90ZWN0aW9uX2RvbWFpbigqYmRmKTsKLQkJaWYgKCFkbWFfZG9tKQotCQkJZG1hX2RvbSA9ICgqaW9tbXUpLT5kZWZhdWx0X2RvbTsKLQkJKmRvbWFpbiA9ICZkbWFfZG9tLT5kb21haW47Ci0JCWF0dGFjaF9kZXZpY2UoKmlvbW11LCAqZG9tYWluLCAqYmRmKTsKLQkJRFVNUF9wcmludGsoIlVzaW5nIHByb3RlY3Rpb24gZG9tYWluICVkIGZvciBkZXZpY2UgJXNcbiIsCi0JCQkgICAgKCpkb21haW4pLT5pZCwgZGV2X25hbWUoZGV2KSk7Ci0JfQotCi0JaWYgKGRvbWFpbl9mb3JfZGV2aWNlKF9iZGYpID09IE5VTEwpCi0JCWF0dGFjaF9kZXZpY2UoKmlvbW11LCAqZG9tYWluLCBfYmRmKTsKLQotCXJldHVybiAxOworCXJldHVybiAmZG1hX2RvbS0+ZG9tYWluOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfZGV2aWNlX3RhYmxlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAotCWZvciAoaSA9IDA7IGkgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2kpIHsKLQkJaWYgKGFtZF9pb21tdV9wZF90YWJsZVtpXSAhPSBkb21haW4pCi0JCQljb250aW51ZTsKLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOwotCQlzZXRfZHRlX2VudHJ5KGksIGRvbWFpbik7Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KSB7CisJCXUxNiBkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2X2RhdGEtPmRldik7CisJCXNldF9kdGVfZW50cnkoZGV2aWQsIGRvbWFpbik7CiAJfQogfQogCkBAIC0xNDI5LDc2ICsxNjQzLDEzIEBACiAJCXJldHVybjsKIAogCXVwZGF0ZV9kZXZpY2VfdGFibGUoZG9tYWluKTsKLQlmbHVzaF9kZXZpY2VzX2J5X2RvbWFpbihkb21haW4pOwotCWlvbW11X2ZsdXNoX2RvbWFpbihkb21haW4tPmlkKTsKKwlpb21tdV9mbHVzaF9kb21haW5fZGV2aWNlcyhkb21haW4pOworCWlvbW11X2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIAogCWRvbWFpbi0+dXBkYXRlZCA9IGZhbHNlOwogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCBhbm90aGVyIGxldmVsIHRvIGFuIElPIHBhZ2UgdGFibGUuIEFkZGluZwotICogYW5vdGhlciBsZXZlbCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgYnkgOSBiaXRzIHRvIGEgc2l6ZSB1cAotICogdG8gNjQgYml0cy4KLSAqLwotc3RhdGljIGJvb2wgaW5jcmVhc2VfYWRkcmVzc19zcGFjZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKLQkJCQkgICBnZnBfdCBnZnApCi17Ci0JdTY0ICpwdGU7Ci0KLQlpZiAoZG9tYWluLT5tb2RlID09IFBBR0VfTU9ERV82X0xFVkVMKQotCQkvKiBhZGRyZXNzIHNwYWNlIGFscmVhZHkgNjQgYml0IGxhcmdlICovCi0JCXJldHVybiBmYWxzZTsKLQotCXB0ZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKGdmcCk7Ci0JaWYgKCFwdGUpCi0JCXJldHVybiBmYWxzZTsKLQotCSpwdGUgICAgICAgICAgICAgPSBQTV9MRVZFTF9QREUoZG9tYWluLT5tb2RlLAotCQkJCQl2aXJ0X3RvX3BoeXMoZG9tYWluLT5wdF9yb290KSk7Ci0JZG9tYWluLT5wdF9yb290ICA9IHB0ZTsKLQlkb21haW4tPm1vZGUgICAgKz0gMTsKLQlkb21haW4tPnVwZGF0ZWQgID0gdHJ1ZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdTY0ICphbGxvY19wdGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgaW50IGVuZF9sdmwsCi0JCSAgICAgIHU2NCAqKnB0ZV9wYWdlLAotCQkgICAgICBnZnBfdCBnZnApCi17Ci0JdTY0ICpwdGUsICpwYWdlOwotCWludCBsZXZlbDsKLQotCXdoaWxlIChhZGRyZXNzID4gUE1fTEVWRUxfU0laRShkb21haW4tPm1vZGUpKQotCQlpbmNyZWFzZV9hZGRyZXNzX3NwYWNlKGRvbWFpbiwgZ2ZwKTsKLQotCWxldmVsID0gIGRvbWFpbi0+bW9kZSAtIDE7Ci0JcHRlICAgPSAmZG9tYWluLT5wdF9yb290W1BNX0xFVkVMX0lOREVYKGxldmVsLCBhZGRyZXNzKV07Ci0KLQl3aGlsZSAobGV2ZWwgPiBlbmRfbHZsKSB7Ci0JCWlmICghSU9NTVVfUFRFX1BSRVNFTlQoKnB0ZSkpIHsKLQkJCXBhZ2UgPSAodTY0ICopZ2V0X3plcm9lZF9wYWdlKGdmcCk7Ci0JCQlpZiAoIXBhZ2UpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQkqcHRlID0gUE1fTEVWRUxfUERFKGxldmVsLCB2aXJ0X3RvX3BoeXMocGFnZSkpOwotCQl9Ci0KLQkJbGV2ZWwgLT0gMTsKLQotCQlwdGUgPSBJT01NVV9QVEVfUEFHRSgqcHRlKTsKLQotCQlpZiAocHRlX3BhZ2UgJiYgbGV2ZWwgPT0gZW5kX2x2bCkKLQkJCSpwdGVfcGFnZSA9IHB0ZTsKLQotCQlwdGUgPSAmcHRlW1BNX0xFVkVMX0lOREVYKGxldmVsLCBhZGRyZXNzKV07Ci0JfQotCi0JcmV0dXJuIHB0ZTsKLX0KLQotLyoKICAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgUFRFIGZvciBhIGdpdmVuIGFkZHJlc3MgaW4gdGhlIGFwZXJ0dXJlCiAgKi8KIHN0YXRpYyB1NjQqIGRtYV9vcHNfZ2V0X3B0ZShzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRvbSwKQEAgLTE1MjgsOCArMTY3OSw3IEBACiAgKiBUaGlzIGlzIHRoZSBnZW5lcmljIG1hcCBmdW5jdGlvbi4gSXQgbWFwcyBvbmUgNGtiIHBhZ2UgYXQgcGFkZHIgdG8KICAqIHRoZSBnaXZlbiBhZGRyZXNzIGluIHRoZSBETUEgYWRkcmVzcyBzcGFjZSBmb3IgdGhlIGRvbWFpbi4KICAqLwotc3RhdGljIGRtYV9hZGRyX3QgZG1hX29wc19kb21haW5fbWFwKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LAotCQkJCSAgICAgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCitzdGF0aWMgZG1hX2FkZHJfdCBkbWFfb3BzX2RvbWFpbl9tYXAoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkJICAgICBwaHlzX2FkZHJfdCBwYWRkciwKIAkJCQkgICAgIGludCBkaXJlY3Rpb24pCkBAIC0xNTQyLDcgKzE2OTIsNyBAQAogCiAJcHRlICA9IGRtYV9vcHNfZ2V0X3B0ZShkb20sIGFkZHJlc3MpOwogCWlmICghcHRlKQotCQlyZXR1cm4gYmFkX2RtYV9hZGRyZXNzOworCQlyZXR1cm4gRE1BX0VSUk9SX0NPREU7CiAKIAlfX3B0ZSA9IHBhZGRyIHwgSU9NTVVfUFRFX1AgfCBJT01NVV9QVEVfRkM7CiAKQEAgLTE1NjMsOCArMTcxMyw3IEBACiAvKgogICogVGhlIGdlbmVyaWMgdW5tYXBwaW5nIGZ1bmN0aW9uIGZvciBvbiBwYWdlIGluIHRoZSBETUEgYWRkcmVzcyBzcGFjZS4KICAqLwotc3RhdGljIHZvaWQgZG1hX29wc19kb21haW5fdW5tYXAoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCi0JCQkJIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG9tLAorc3RhdGljIHZvaWQgZG1hX29wc19kb21haW5fdW5tYXAoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3QgYXBlcnR1cmVfcmFuZ2UgKmFwZXJ0dXJlOwpAQCAtMTU5NSw3ICsxNzQ0LDYgQEAKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRvbWFpbiBsb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyBkbWFfYWRkcl90IF9fbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCiAJCQkgICAgICAgc3RydWN0IGRtYV9vcHNfZG9tYWluICpkbWFfZG9tLAogCQkJICAgICAgIHBoeXNfYWRkcl90IHBhZGRyLAogCQkJICAgICAgIHNpemVfdCBzaXplLApAQCAtMTYyMyw3ICsxNzcxLDcgQEAKIHJldHJ5OgogCWFkZHJlc3MgPSBkbWFfb3BzX2FsbG9jX2FkZHJlc3NlcyhkZXYsIGRtYV9kb20sIHBhZ2VzLCBhbGlnbl9tYXNrLAogCQkJCQkgIGRtYV9tYXNrKTsKLQlpZiAodW5saWtlbHkoYWRkcmVzcyA9PSBiYWRfZG1hX2FkZHJlc3MpKSB7CisJaWYgKHVubGlrZWx5KGFkZHJlc3MgPT0gRE1BX0VSUk9SX0NPREUpKSB7CiAJCS8qCiAJCSAqIHNldHRpbmcgbmV4dF9hZGRyZXNzIGhlcmUgd2lsbCBsZXQgdGhlIGFkZHJlc3MKIAkJICogYWxsb2NhdG9yIG9ubHkgc2NhbiB0aGUgbmV3IGFsbG9jYXRlZCByYW5nZSBpbiB0aGUKQEAgLTE2MzEsNyArMTc3OSw3IEBACiAJCSAqLwogCQlkbWFfZG9tLT5uZXh0X2FkZHJlc3MgPSBkbWFfZG9tLT5hcGVydHVyZV9zaXplOwogCi0JCWlmIChhbGxvY19uZXdfcmFuZ2UoaW9tbXUsIGRtYV9kb20sIGZhbHNlLCBHRlBfQVRPTUlDKSkKKwkJaWYgKGFsbG9jX25ld19yYW5nZShkbWFfZG9tLCBmYWxzZSwgR0ZQX0FUT01JQykpCiAJCQlnb3RvIG91dDsKIAogCQkvKgpAQCAtMTY0Myw4ICsxNzkxLDggQEAKIAogCXN0YXJ0ID0gYWRkcmVzczsKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7ICsraSkgewotCQlyZXQgPSBkbWFfb3BzX2RvbWFpbl9tYXAoaW9tbXUsIGRtYV9kb20sIHN0YXJ0LCBwYWRkciwgZGlyKTsKLQkJaWYgKHJldCA9PSBiYWRfZG1hX2FkZHJlc3MpCisJCXJldCA9IGRtYV9vcHNfZG9tYWluX21hcChkbWFfZG9tLCBzdGFydCwgcGFkZHIsIGRpcik7CisJCWlmIChyZXQgPT0gRE1BX0VSUk9SX0NPREUpCiAJCQlnb3RvIG91dF91bm1hcDsKIAogCQlwYWRkciArPSBQQUdFX1NJWkU7CkBAIC0xNjU1LDEwICsxODAzLDEwIEBACiAJQUREX1NUQVRTX0NPVU5URVIoYWxsb2NlZF9pb19tZW0sIHNpemUpOwogCiAJaWYgKHVubGlrZWx5KGRtYV9kb20tPm5lZWRfZmx1c2ggJiYgIWFtZF9pb21tdV91bm1hcF9mbHVzaCkpIHsKLQkJaW9tbXVfZmx1c2hfdGxiKGlvbW11LCBkbWFfZG9tLT5kb21haW4uaWQpOworCQlpb21tdV9mbHVzaF90bGIoJmRtYV9kb20tPmRvbWFpbik7CiAJCWRtYV9kb20tPm5lZWRfZmx1c2ggPSBmYWxzZTsKLQl9IGVsc2UgaWYgKHVubGlrZWx5KGlvbW11X2hhc19ucGNhY2hlKGlvbW11KSkpCi0JCWlvbW11X2ZsdXNoX3BhZ2VzKGlvbW11LCBkbWFfZG9tLT5kb21haW4uaWQsIGFkZHJlc3MsIHNpemUpOworCX0gZWxzZSBpZiAodW5saWtlbHkoYW1kX2lvbW11X25wX2NhY2hlKSkKKwkJaW9tbXVfZmx1c2hfcGFnZXMoJmRtYV9kb20tPmRvbWFpbiwgYWRkcmVzcywgc2l6ZSk7CiAKIG91dDoKIAlyZXR1cm4gYWRkcmVzczsKQEAgLTE2NjcsMjAgKzE4MTUsMTkgQEAKIAogCWZvciAoLS1pOyBpID49IDA7IC0taSkgewogCQlzdGFydCAtPSBQQUdFX1NJWkU7Ci0JCWRtYV9vcHNfZG9tYWluX3VubWFwKGlvbW11LCBkbWFfZG9tLCBzdGFydCk7CisJCWRtYV9vcHNfZG9tYWluX3VubWFwKGRtYV9kb20sIHN0YXJ0KTsKIAl9CiAKIAlkbWFfb3BzX2ZyZWVfYWRkcmVzc2VzKGRtYV9kb20sIGFkZHJlc3MsIHBhZ2VzKTsKIAotCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CisJcmV0dXJuIERNQV9FUlJPUl9DT0RFOwogfQogCiAvKgogICogRG9lcyB0aGUgcmV2ZXJzZSBvZiB0aGUgX19tYXBfc2luZ2xlIGZ1bmN0aW9uLiBNdXN0IGJlIGNhbGxlZCB3aXRoCiAgKiB0aGUgZG9tYWluIGxvY2sgaGVsZCB0b28KICAqLwotc3RhdGljIHZvaWQgX191bm1hcF9zaW5nbGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsCi0JCQkgICBzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCitzdGF0aWMgdm9pZCBfX3VubWFwX3NpbmdsZShzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCiAJCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyLAogCQkJICAgc2l6ZV90IHNpemUsCiAJCQkgICBpbnQgZGlyKQpAQCAtMTY4OCw3ICsxODM1LDcgQEAKIAlkbWFfYWRkcl90IGksIHN0YXJ0OwogCXVuc2lnbmVkIGludCBwYWdlczsKIAotCWlmICgoZG1hX2FkZHIgPT0gYmFkX2RtYV9hZGRyZXNzKSB8fAorCWlmICgoZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpIHx8CiAJICAgIChkbWFfYWRkciArIHNpemUgPiBkbWFfZG9tLT5hcGVydHVyZV9zaXplKSkKIAkJcmV0dXJuOwogCkBAIC0xNjk3LDcgKzE4NDQsNyBAQAogCXN0YXJ0ID0gZG1hX2FkZHI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7ICsraSkgewotCQlkbWFfb3BzX2RvbWFpbl91bm1hcChpb21tdSwgZG1hX2RvbSwgc3RhcnQpOworCQlkbWFfb3BzX2RvbWFpbl91bm1hcChkbWFfZG9tLCBzdGFydCk7CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAl9CiAKQEAgLTE3MDYsNyArMTg1Myw3IEBACiAJZG1hX29wc19mcmVlX2FkZHJlc3NlcyhkbWFfZG9tLCBkbWFfYWRkciwgcGFnZXMpOwogCiAJaWYgKGFtZF9pb21tdV91bm1hcF9mbHVzaCB8fCBkbWFfZG9tLT5uZWVkX2ZsdXNoKSB7Ci0JCWlvbW11X2ZsdXNoX3BhZ2VzKGlvbW11LCBkbWFfZG9tLT5kb21haW4uaWQsIGRtYV9hZGRyLCBzaXplKTsKKwkJaW9tbXVfZmx1c2hfcGFnZXMoJmRtYV9kb20tPmRvbWFpbiwgZG1hX2FkZHIsIHNpemUpOwogCQlkbWFfZG9tLT5uZWVkX2ZsdXNoID0gZmFsc2U7CiAJfQogfQpAQCAtMTcyMCwzNiArMTg2NywyOSBAQAogCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKLQl1MTYgZGV2aWQ7CiAJZG1hX2FkZHJfdCBhZGRyOwogCXU2NCBkbWFfbWFzazsKIAlwaHlzX2FkZHJfdCBwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKIAogCUlOQ19TVEFUU19DT1VOVEVSKGNudF9tYXBfc2luZ2xlKTsKIAotCWlmICghY2hlY2tfZGV2aWNlKGRldikpCi0JCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CisJZG9tYWluID0gZ2V0X2RvbWFpbihkZXYpOworCWlmIChQVFJfRVJSKGRvbWFpbikgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIChkbWFfYWRkcl90KXBhZGRyOworCWVsc2UgaWYgKElTX0VSUihkb21haW4pKQorCQlyZXR1cm4gRE1BX0VSUk9SX0NPREU7CiAKIAlkbWFfbWFzayA9ICpkZXYtPmRtYV9tYXNrOwogCi0JZ2V0X2RldmljZV9yZXNvdXJjZXMoZGV2LCAmaW9tbXUsICZkb21haW4sICZkZXZpZCk7Ci0KLQlpZiAoaW9tbXUgPT0gTlVMTCB8fCBkb21haW4gPT0gTlVMTCkKLQkJLyogZGV2aWNlIG5vdCBoYW5kbGVkIGJ5IGFueSBBTUQgSU9NTVUgKi8KLQkJcmV0dXJuIChkbWFfYWRkcl90KXBhZGRyOwotCi0JaWYgKCFkbWFfb3BzX2RvbWFpbihkb21haW4pKQotCQlyZXR1cm4gYmFkX2RtYV9hZGRyZXNzOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+bG9jaywgZmxhZ3MpOwotCWFkZHIgPSBfX21hcF9zaW5nbGUoZGV2LCBpb21tdSwgZG9tYWluLT5wcml2LCBwYWRkciwgc2l6ZSwgZGlyLCBmYWxzZSwKKworCWFkZHIgPSBfX21hcF9zaW5nbGUoZGV2LCBkb21haW4tPnByaXYsIHBhZGRyLCBzaXplLCBkaXIsIGZhbHNlLAogCQkJICAgIGRtYV9tYXNrKTsKLQlpZiAoYWRkciA9PSBiYWRfZG1hX2FkZHJlc3MpCisJaWYgKGFkZHIgPT0gRE1BX0VSUk9SX0NPREUpCiAJCWdvdG8gb3V0OwogCi0JaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKKwlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CkBAIC0xNzY0LDI1ICsxOTA0LDE5IEBACiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47Ci0JdTE2IGRldmlkOwogCiAJSU5DX1NUQVRTX0NPVU5URVIoY250X3VubWFwX3NpbmdsZSk7CiAKLQlpZiAoIWNoZWNrX2RldmljZShkZXYpIHx8Ci0JICAgICFnZXRfZGV2aWNlX3Jlc291cmNlcyhkZXYsICZpb21tdSwgJmRvbWFpbiwgJmRldmlkKSkKLQkJLyogZGV2aWNlIG5vdCBoYW5kbGVkIGJ5IGFueSBBTUQgSU9NTVUgKi8KLQkJcmV0dXJuOwotCi0JaWYgKCFkbWFfb3BzX2RvbWFpbihkb21haW4pKQorCWRvbWFpbiA9IGdldF9kb21haW4oZGV2KTsKKwlpZiAoSVNfRVJSKGRvbWFpbikpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAotCV9fdW5tYXBfc2luZ2xlKGlvbW11LCBkb21haW4tPnByaXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOworCV9fdW5tYXBfc2luZ2xlKGRvbWFpbi0+cHJpdiwgZG1hX2FkZHIsIHNpemUsIGRpcik7CiAKLQlpb21tdV9jb21wbGV0aW9uX3dhaXQoaW9tbXUpOworCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE4MTQsOSArMTk0OCw3IEBACiAJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKLQl1MTYgZGV2aWQ7CiAJaW50IGk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCXBoeXNfYWRkcl90IHBhZGRyOwpAQCAtMTgyNSwyNSArMTk1NywyMCBAQAogCiAJSU5DX1NUQVRTX0NPVU5URVIoY250X21hcF9zZyk7CiAKLQlpZiAoIWNoZWNrX2RldmljZShkZXYpKQorCWRvbWFpbiA9IGdldF9kb21haW4oZGV2KTsKKwlpZiAoUFRSX0VSUihkb21haW4pID09IC1FSU5WQUwpCisJCXJldHVybiBtYXBfc2dfbm9faW9tbXUoZGV2LCBzZ2xpc3QsIG5lbGVtcywgZGlyKTsKKwllbHNlIGlmIChJU19FUlIoZG9tYWluKSkKIAkJcmV0dXJuIDA7CiAKIAlkbWFfbWFzayA9ICpkZXYtPmRtYV9tYXNrOwogCi0JZ2V0X2RldmljZV9yZXNvdXJjZXMoZGV2LCAmaW9tbXUsICZkb21haW4sICZkZXZpZCk7Ci0KLQlpZiAoIWlvbW11IHx8ICFkb21haW4pCi0JCXJldHVybiBtYXBfc2dfbm9faW9tbXUoZGV2LCBzZ2xpc3QsIG5lbGVtcywgZGlyKTsKLQotCWlmICghZG1hX29wc19kb21haW4oZG9tYWluKSkKLQkJcmV0dXJuIDA7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG5lbGVtcywgaSkgewogCQlwYWRkciA9IHNnX3BoeXMocyk7CiAKLQkJcy0+ZG1hX2FkZHJlc3MgPSBfX21hcF9zaW5nbGUoZGV2LCBpb21tdSwgZG9tYWluLT5wcml2LAorCQlzLT5kbWFfYWRkcmVzcyA9IF9fbWFwX3NpbmdsZShkZXYsIGRvbWFpbi0+cHJpdiwKIAkJCQkJICAgICAgcGFkZHIsIHMtPmxlbmd0aCwgZGlyLCBmYWxzZSwKIAkJCQkJICAgICAgZG1hX21hc2spOwogCkBAIC0xODU0LDcgKzE5ODEsNyBAQAogCQkJZ290byB1bm1hcDsKIAl9CiAKLQlpb21tdV9jb21wbGV0aW9uX3dhaXQoaW9tbXUpOworCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKQEAgLTE4NjMsNyArMTk5MCw3IEBACiB1bm1hcDoKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG1hcHBlZF9lbGVtcywgaSkgewogCQlpZiAocy0+ZG1hX2FkZHJlc3MpCi0JCQlfX3VubWFwX3NpbmdsZShpb21tdSwgZG9tYWluLT5wcml2LCBzLT5kbWFfYWRkcmVzcywKKwkJCV9fdW5tYXBfc2luZ2xlKGRvbWFpbi0+cHJpdiwgcy0+ZG1hX2FkZHJlc3MsCiAJCQkJICAgICAgIHMtPmRtYV9sZW5ndGgsIGRpcik7CiAJCXMtPmRtYV9hZGRyZXNzID0gcy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQpAQCAtMTg4MiwzMCArMjAwOSwyNSBAQAogCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwotCXUxNiBkZXZpZDsKIAlpbnQgaTsKIAogCUlOQ19TVEFUU19DT1VOVEVSKGNudF91bm1hcF9zZyk7CiAKLQlpZiAoIWNoZWNrX2RldmljZShkZXYpIHx8Ci0JICAgICFnZXRfZGV2aWNlX3Jlc291cmNlcyhkZXYsICZpb21tdSwgJmRvbWFpbiwgJmRldmlkKSkKLQkJcmV0dXJuOwotCi0JaWYgKCFkbWFfb3BzX2RvbWFpbihkb21haW4pKQorCWRvbWFpbiA9IGdldF9kb21haW4oZGV2KTsKKwlpZiAoSVNfRVJSKGRvbWFpbikpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgcywgbmVsZW1zLCBpKSB7Ci0JCV9fdW5tYXBfc2luZ2xlKGlvbW11LCBkb21haW4tPnByaXYsIHMtPmRtYV9hZGRyZXNzLAorCQlfX3VubWFwX3NpbmdsZShkb21haW4tPnByaXYsIHMtPmRtYV9hZGRyZXNzLAogCQkJICAgICAgIHMtPmRtYV9sZW5ndGgsIGRpcik7CiAJCXMtPmRtYV9hZGRyZXNzID0gcy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQogCi0JaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKKwlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0xOTE4LDQ5ICsyMDQwLDQ0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICp2aXJ0X2FkZHI7Ci0Jc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47Ci0JdTE2IGRldmlkOwogCXBoeXNfYWRkcl90IHBhZGRyOwogCXU2NCBkbWFfbWFzayA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2s7CiAKIAlJTkNfU1RBVFNfQ09VTlRFUihjbnRfYWxsb2NfY29oZXJlbnQpOwogCi0JaWYgKCFjaGVja19kZXZpY2UoZGV2KSkKKwlkb21haW4gPSBnZXRfZG9tYWluKGRldik7CisJaWYgKFBUUl9FUlIoZG9tYWluKSA9PSAtRUlOVkFMKSB7CisJCXZpcnRfYWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOworCQkqZG1hX2FkZHIgPSBfX3BhKHZpcnRfYWRkcik7CisJCXJldHVybiB2aXJ0X2FkZHI7CisJfSBlbHNlIGlmIChJU19FUlIoZG9tYWluKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWdldF9kZXZpY2VfcmVzb3VyY2VzKGRldiwgJmlvbW11LCAmZG9tYWluLCAmZGV2aWQpKQotCQlmbGFnICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0RNQTMyKTsKKwlkbWFfbWFzayAgPSBkZXYtPmNvaGVyZW50X2RtYV9tYXNrOworCWZsYWcgICAgICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0RNQTMyKTsKKwlmbGFnICAgICB8PSBfX0dGUF9aRVJPOwogCi0JZmxhZyB8PSBfX0dGUF9aRVJPOwogCXZpcnRfYWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOwogCWlmICghdmlydF9hZGRyKQogCQlyZXR1cm4gTlVMTDsKIAogCXBhZGRyID0gdmlydF90b19waHlzKHZpcnRfYWRkcik7CiAKLQlpZiAoIWlvbW11IHx8ICFkb21haW4pIHsKLQkJKmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpcGFkZHI7Ci0JCXJldHVybiB2aXJ0X2FkZHI7Ci0JfQotCi0JaWYgKCFkbWFfb3BzX2RvbWFpbihkb21haW4pKQotCQlnb3RvIG91dF9mcmVlOwotCiAJaWYgKCFkbWFfbWFzaykKIAkJZG1hX21hc2sgPSAqZGV2LT5kbWFfbWFzazsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAotCSpkbWFfYWRkciA9IF9fbWFwX3NpbmdsZShkZXYsIGlvbW11LCBkb21haW4tPnByaXYsIHBhZGRyLAorCSpkbWFfYWRkciA9IF9fbWFwX3NpbmdsZShkZXYsIGRvbWFpbi0+cHJpdiwgcGFkZHIsCiAJCQkJIHNpemUsIERNQV9CSURJUkVDVElPTkFMLCB0cnVlLCBkbWFfbWFzayk7CiAKLQlpZiAoKmRtYV9hZGRyID09IGJhZF9kbWFfYWRkcmVzcykgeworCWlmICgqZG1hX2FkZHIgPT0gRE1BX0VSUk9SX0NPREUpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKKwlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE5ODAsMjggKzIwOTcsMTkgQEAKIAkJCSAgdm9pZCAqdmlydF9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47Ci0JdTE2IGRldmlkOwogCiAJSU5DX1NUQVRTX0NPVU5URVIoY250X2ZyZWVfY29oZXJlbnQpOwogCi0JaWYgKCFjaGVja19kZXZpY2UoZGV2KSkKLQkJcmV0dXJuOwotCi0JZ2V0X2RldmljZV9yZXNvdXJjZXMoZGV2LCAmaW9tbXUsICZkb21haW4sICZkZXZpZCk7Ci0KLQlpZiAoIWlvbW11IHx8ICFkb21haW4pCi0JCWdvdG8gZnJlZV9tZW07Ci0KLQlpZiAoIWRtYV9vcHNfZG9tYWluKGRvbWFpbikpCisJZG9tYWluID0gZ2V0X2RvbWFpbihkZXYpOworCWlmIChJU19FUlIoZG9tYWluKSkKIAkJZ290byBmcmVlX21lbTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAotCV9fdW5tYXBfc2luZ2xlKGlvbW11LCBkb21haW4tPnByaXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CisJX191bm1hcF9zaW5nbGUoZG9tYWluLT5wcml2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwogCi0JaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKKwlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTIwMTUsMjIgKzIxMjMsNyBAQAogICovCiBzdGF0aWMgaW50IGFtZF9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0JdTE2IGJkZjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwotCi0JLyogTm8gZGV2aWNlIG9yIG5vIFBDSSBkZXZpY2UgKi8KLQlpZiAoIWRldiB8fCBkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gMDsKLQotCXBjaWRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQotCWJkZiA9IGNhbGNfZGV2aWQocGNpZGV2LT5idXMtPm51bWJlciwgcGNpZGV2LT5kZXZmbik7Ci0KLQkvKiBPdXQgb2Ygb3VyIHNjb3BlPyAqLwotCWlmIChiZGYgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7CisJcmV0dXJuIGNoZWNrX2RldmljZShkZXYpOwogfQogCiAvKgpAQCAtMjA0NCwyNSArMjEzNywzMCBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCXN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZG1hX2RvbTsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIAl1MTYgZGV2aWQ7CiAKIAl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJZGV2aWQgPSBjYWxjX2RldmlkKGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4pOwotCQlpZiAoZGV2aWQgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCisKKwkJLyogRG8gd2UgaGFuZGxlIHRoaXMgZGV2aWNlPyAqLworCQlpZiAoIWNoZWNrX2RldmljZSgmZGV2LT5kZXYpKQogCQkJY29udGludWU7Ci0JCWRldmlkID0gYW1kX2lvbW11X2FsaWFzX3RhYmxlW2RldmlkXTsKLQkJaWYgKGRvbWFpbl9mb3JfZGV2aWNlKGRldmlkKSkKKworCQlpb21tdV9pbml0X2RldmljZSgmZGV2LT5kZXYpOworCisJCS8qIElzIHRoZXJlIGFscmVhZHkgYW55IGRvbWFpbiBmb3IgaXQ/ICovCisJCWlmIChkb21haW5fZm9yX2RldmljZSgmZGV2LT5kZXYpKQogCQkJY29udGludWU7Ci0JCWlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbZGV2aWRdOwotCQlpZiAoIWlvbW11KQotCQkJY29udGludWU7Ci0JCWRtYV9kb20gPSBkbWFfb3BzX2RvbWFpbl9hbGxvYyhpb21tdSk7CisKKwkJZGV2aWQgPSBnZXRfZGV2aWNlX2lkKCZkZXYtPmRldik7CisKKwkJZG1hX2RvbSA9IGRtYV9vcHNfZG9tYWluX2FsbG9jKCk7CiAJCWlmICghZG1hX2RvbSkKIAkJCWNvbnRpbnVlOwogCQlpbml0X3VuaXR5X21hcHBpbmdzX2Zvcl9kZXZpY2UoZG1hX2RvbSwgZGV2aWQpOwogCQlkbWFfZG9tLT50YXJnZXRfZGV2ID0gZGV2aWQ7CiAKKwkJYXR0YWNoX2RldmljZSgmZGV2LT5kZXYsICZkbWFfZG9tLT5kb21haW4pOworCiAJCWxpc3RfYWRkX3RhaWwoJmRtYV9kb20tPmxpc3QsICZpb21tdV9wZF9saXN0KTsKIAl9CiB9CkBAIC0yMDkxLDcgKzIxODksNyBAQAogCSAqIHByb3RlY3Rpb24gZG9tYWluIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGRlZmF1bHQgb25lLgogCSAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7Ci0JCWlvbW11LT5kZWZhdWx0X2RvbSA9IGRtYV9vcHNfZG9tYWluX2FsbG9jKGlvbW11KTsKKwkJaW9tbXUtPmRlZmF1bHRfZG9tID0gZG1hX29wc19kb21haW5fYWxsb2MoKTsKIAkJaWYgKGlvbW11LT5kZWZhdWx0X2RvbSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlvbW11LT5kZWZhdWx0X2RvbS0+ZG9tYWluLmZsYWdzIHw9IFBEX0RFRkFVTFRfTUFTSzsKQEAgLTIxMDEsMTUgKzIxOTksMTIgQEAKIAl9CiAKIAkvKgotCSAqIElmIGRldmljZSBpc29sYXRpb24gaXMgZW5hYmxlZCwgcHJlLWFsbG9jYXRlIHRoZSBwcm90ZWN0aW9uCi0JICogZG9tYWlucyBmb3IgZWFjaCBkZXZpY2UuCisJICogUHJlLWFsbG9jYXRlIHRoZSBwcm90ZWN0aW9uIGRvbWFpbnMgZm9yIGVhY2ggZGV2aWNlLgogCSAqLwotCWlmIChhbWRfaW9tbXVfaXNvbGF0ZSkKLQkJcHJlYWxsb2NfcHJvdGVjdGlvbl9kb21haW5zKCk7CisJcHJlYWxsb2NfcHJvdGVjdGlvbl9kb21haW5zKCk7CiAKIAlpb21tdV9kZXRlY3RlZCA9IDE7Ci0JZm9yY2VfaW9tbXUgPSAxOwotCWJhZF9kbWFfYWRkcmVzcyA9IDA7CisJc3dpb3RsYiA9IDA7CiAjaWZkZWYgQ09ORklHX0dBUlRfSU9NTVUKIAlnYXJ0X2lvbW11X2FwZXJ0dXJlX2Rpc2FibGVkID0gMTsKIAlnYXJ0X2lvbW11X2FwZXJ0dXJlID0gMDsKQEAgLTIxNDgsMTQgKzIyNDMsMTcgQEAKIAogc3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YSwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MTYgZGV2aWQ7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGRldmlkID0gMDsgZGV2aWQgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2RldmlkKQotCQlpZiAoYW1kX2lvbW11X3BkX3RhYmxlW2RldmlkXSA9PSBkb21haW4pCi0JCQlfX2RldGFjaF9kZXZpY2UoZG9tYWluLCBkZXZpZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldl9kYXRhLCBuZXh0LCAmZG9tYWluLT5kZXZfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZfZGF0YS0+ZGV2OworCisJCWRvX2RldGFjaChkZXYpOworCQlhdG9taWNfc2V0KCZkZXZfZGF0YS0+YmluZCwgMCk7CisJfQogCiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7CiB9CkBAIC0yMTY1LDYgKzIyNjMsOCBAQAogCWlmICghZG9tYWluKQogCQlyZXR1cm47CiAKKwlkZWxfZG9tYWluX2Zyb21fbGlzdChkb21haW4pOworCiAJaWYgKGRvbWFpbi0+aWQpCiAJCWRvbWFpbl9pZF9mcmVlKGRvbWFpbi0+aWQpOwogCkBAIC0yMTgzLDYgKzIyODMsOSBAQAogCWRvbWFpbi0+aWQgPSBkb21haW5faWRfYWxsb2MoKTsKIAlpZiAoIWRvbWFpbi0+aWQpCiAJCWdvdG8gb3V0X2VycjsKKwlJTklUX0xJU1RfSEVBRCgmZG9tYWluLT5kZXZfbGlzdCk7CisKKwlhZGRfZG9tYWluX3RvX2xpc3QoZG9tYWluKTsKIAogCXJldHVybiBkb21haW47CiAKQEAgLTIyMzksMjYgKzIzNDIsMjMgQEAKIHN0YXRpYyB2b2lkIGFtZF9pb21tdV9kZXRhY2hfZGV2aWNlKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbSwKIAkJCQkgICAgc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluID0gZG9tLT5wcml2OworCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGEgPSBkZXYtPmFyY2hkYXRhLmlvbW11OwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXUxNiBkZXZpZDsKIAotCWlmIChkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKQorCWlmICghY2hlY2tfZGV2aWNlKGRldikpCiAJCXJldHVybjsKIAotCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJZGV2aWQgPSBnZXRfZGV2aWNlX2lkKGRldik7CiAKLQlkZXZpZCA9IGNhbGNfZGV2aWQocGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKLQotCWlmIChkZXZpZCA+IDApCi0JCWRldGFjaF9kZXZpY2UoZG9tYWluLCBkZXZpZCk7CisJaWYgKGRldl9kYXRhLT5kb21haW4gIT0gTlVMTCkKKwkJZGV0YWNoX2RldmljZShkZXYpOwogCiAJaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CiAJaWYgKCFpb21tdSkKIAkJcmV0dXJuOwogCi0JaW9tbXVfcXVldWVfaW52X2Rldl9lbnRyeShpb21tdSwgZGV2aWQpOworCWlvbW11X2ZsdXNoX2RldmljZShkZXYpOwogCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiB9CiAKQEAgLTIyNjYsMzUgKzIzNjYsMzAgQEAKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4gPSBkb20tPnByaXY7Ci0Jc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpvbGRfZG9tYWluOworCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGE7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJaW50IHJldDsKIAl1MTYgZGV2aWQ7CiAKLQlpZiAoZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSkKKwlpZiAoIWNoZWNrX2RldmljZShkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJZGV2X2RhdGEgPSBkZXYtPmFyY2hkYXRhLmlvbW11OwogCi0JZGV2aWQgPSBjYWxjX2RldmlkKHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7Ci0KLQlpZiAoZGV2aWQgPj0gYW1kX2lvbW11X2xhc3RfYmRmIHx8Ci0JCQlkZXZpZCAhPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAogCWlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbZGV2aWRdOwogCWlmICghaW9tbXUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jb2xkX2RvbWFpbiA9IGRvbWFpbl9mb3JfZGV2aWNlKGRldmlkKTsKLQlpZiAob2xkX2RvbWFpbikKLQkJZGV0YWNoX2RldmljZShvbGRfZG9tYWluLCBkZXZpZCk7CisJaWYgKGRldl9kYXRhLT5kb21haW4pCisJCWRldGFjaF9kZXZpY2UoZGV2KTsKIAotCWF0dGFjaF9kZXZpY2UoaW9tbXUsIGRvbWFpbiwgZGV2aWQpOworCXJldCA9IGF0dGFjaF9kZXZpY2UoZGV2LCBkb21haW4pOwogCiAJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW1kX2lvbW11X21hcF9yYW5nZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb20sCkBAIC0yMzQwLDcgKzI0MzUsNyBAQAogCQlpb3ZhICArPSBQQUdFX1NJWkU7CiAJfQogCi0JaW9tbXVfZmx1c2hfZG9tYWluKGRvbWFpbi0+aWQpOworCWlvbW11X2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIH0KIAogc3RhdGljIHBoeXNfYWRkcl90IGFtZF9pb21tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tLApAQCAtMjM5MSw4ICsyNDg2LDkgQEAKIAogaW50IF9faW5pdCBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCh2b2lkKQogeworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCXUxNiBkZXZpZCwgZGV2aWQyOworCXUxNiBkZXZpZDsKIAogCS8qIGFsbG9jYXRlIHBhc3N0aHJvdWcgZG9tYWluICovCiAJcHRfZG9tYWluID0gcHJvdGVjdGlvbl9kb21haW5fYWxsb2MoKTsKQEAgLTI0MDIsMjAgKzI0OTgsMTcgQEAKIAlwdF9kb21haW4tPm1vZGUgfD0gUEFHRV9NT0RFX05PTkU7CiAKIAl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAKLQkJZGV2aWQgPSBjYWxjX2RldmlkKGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4pOwotCQlpZiAoZGV2aWQgPiBhbWRfaW9tbXVfbGFzdF9iZGYpCisJCWlmICghY2hlY2tfZGV2aWNlKCZkZXYtPmRldikpCiAJCQljb250aW51ZTsKIAotCQlkZXZpZDIgPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdOworCQlkZXZpZCA9IGdldF9kZXZpY2VfaWQoJmRldi0+ZGV2KTsKIAotCQlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkMl07CisJCWlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbZGV2aWRdOwogCQlpZiAoIWlvbW11KQogCQkJY29udGludWU7CiAKLQkJX19hdHRhY2hfZGV2aWNlKGlvbW11LCBwdF9kb21haW4sIGRldmlkKTsKLQkJX19hdHRhY2hfZGV2aWNlKGlvbW11LCBwdF9kb21haW4sIGRldmlkMik7CisJCWF0dGFjaF9kZXZpY2UoJmRldi0+ZGV2LCBwdF9kb21haW4pOwogCX0KIAogCXByX2luZm8oIkFNRC1WaTogSW5pdGlhbGl6ZWQgZm9yIFBhc3N0aHJvdWdoIE1vZGVcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCBiNGI2MWQ0Li43ZmZjMzk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiAgKiBBdXRob3I6IEpvZXJnIFJvZWRlbCA8am9lcmcucm9lZGVsQGFtZC5jb20+CiAgKiAgICAgICAgIExlbyBEdXJhbiA8bGVvLmR1cmFuQGFtZC5jb20+CiAgKgpAQCAtMjUsMTAgKzI1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KKyNpbmNsdWRlIDxhc20vYW1kX2lvbW11X3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgorI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgogCiAvKgogICogZGVmaW5pdGlvbnMgZm9yIHRoZSBBQ1BJIHNjYW5uaW5nIGNvZGUKQEAgLTEyMywxOCArMTI1LDI0IEBACiAJCQkJCSAgIHRvIGhhbmRsZSAqLwogTElTVF9IRUFEKGFtZF9pb21tdV91bml0eV9tYXApOwkJLyogYSBsaXN0IG9mIHJlcXVpcmVkIHVuaXR5IG1hcHBpbmdzCiAJCQkJCSAgIHdlIGZpbmQgaW4gQUNQSSAqLwotI2lmZGVmIENPTkZJR19JT01NVV9TVFJFU1MKLWJvb2wgYW1kX2lvbW11X2lzb2xhdGUgPSBmYWxzZTsKLSNlbHNlCi1ib29sIGFtZF9pb21tdV9pc29sYXRlID0gdHJ1ZTsJCS8qIGlmIHRydWUsIGRldmljZSBpc29sYXRpb24gaXMKLQkJCQkJICAgZW5hYmxlZCAqLwotI2VuZGlmCi0KIGJvb2wgYW1kX2lvbW11X3VubWFwX2ZsdXNoOwkJLyogaWYgdHJ1ZSwgZmx1c2ggb24gZXZlcnkgdW5tYXAgKi8KIAogTElTVF9IRUFEKGFtZF9pb21tdV9saXN0KTsJCS8qIGxpc3Qgb2YgYWxsIEFNRCBJT01NVXMgaW4gdGhlCiAJCQkJCSAgIHN5c3RlbSAqLwogCisvKiBBcnJheSB0byBhc3NpZ24gaW5kaWNlcyB0byBJT01NVXMqLworc3RydWN0IGFtZF9pb21tdSAqYW1kX2lvbW11c1tNQVhfSU9NTVVTXTsKK2ludCBhbWRfaW9tbXVzX3ByZXNlbnQ7CisKKy8qIElPTU1VcyBoYXZlIGEgbm9uLXByZXNlbnQgY2FjaGU/ICovCitib29sIGFtZF9pb21tdV9ucF9jYWNoZSBfX3JlYWRfbW9zdGx5OworCisvKgorICogTGlzdCBvZiBwcm90ZWN0aW9uIGRvbWFpbnMgLSB1c2VkIGR1cmluZyByZXN1bWUKKyAqLworTElTVF9IRUFEKGFtZF9pb21tdV9wZF9saXN0KTsKK3NwaW5sb2NrX3QgYW1kX2lvbW11X3BkX2xvY2s7CisKIC8qCiAgKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgdGFibGUgd2hpY2ggaXMgc2hhcmVkIGJ5IGFsbCBBTUQgSU9NTVVzCiAgKiBpdCBpcyBpbmRleGVkIGJ5IHRoZSBQQ0kgZGV2aWNlIGlkIG9yIHRoZSBIVCB1bml0IGlkIGFuZCBjb250YWlucwpAQCAtMTU3LDEyICsxNjUsNiBAQAogc3RydWN0IGFtZF9pb21tdSAqKmFtZF9pb21tdV9ybG9va3VwX3RhYmxlOwogCiAvKgotICogVGhlIHBkIHRhYmxlIChwcm90ZWN0aW9uIGRvbWFpbiB0YWJsZSkgaXMgdXNlZCB0byBmaW5kIHRoZSBwcm90ZWN0aW9uIGRvbWFpbgotICogZGF0YSBzdHJ1Y3R1cmUgYSBkZXZpY2UgYmVsb25ncyB0by4gSW5kZXhlZCB3aXRoIHRoZSBQQ0kgZGV2aWNlIGlkIHRvby4KLSAqLwotc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICoqYW1kX2lvbW11X3BkX3RhYmxlOwotCi0vKgogICogQU1EIElPTU1VIGFsbG93cyB1cCB0byAyXjE2IGRpZmZlcmVuZCBwcm90ZWN0aW9uIGRvbWFpbnMuIFRoaXMgaXMgYSBiaXRtYXAKICAqIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgYWxyZWFkeSBpbiB1c2UuCiAgKi8KQEAgLTI0MCw3ICsyNDIsNyBAQAogCXdyaXRlbChjdHJsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DT05UUk9MX09GRlNFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpb21tdV9mZWF0dXJlX2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU4IGJpdCkKK3N0YXRpYyB2b2lkIGlvbW11X2ZlYXR1cmVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTggYml0KQogewogCXUzMiBjdHJsOwogCkBAIC01MTksNiArNTIxLDI2IEBACiAJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVtpXSB8PSAoMSA8PCBfYml0KTsKIH0KIAorc3RhdGljIGludCBnZXRfZGV2X2VudHJ5X2JpdCh1MTYgZGV2aWQsIHU4IGJpdCkKK3sKKwlpbnQgaSA9IChiaXQgPj4gNSkgJiAweDA3OworCWludCBfYml0ID0gYml0ICYgMHgxZjsKKworCXJldHVybiAoYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVtpXSAmICgxIDw8IF9iaXQpKSA+PiBfYml0OworfQorCisKK3ZvaWQgYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjModTE2IGRldmlkKQoreworCWludCBzeXNtZ3Q7CisKKwlzeXNtZ3QgPSBnZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX1NZU01HVDEpIHwKKwkJIChnZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX1NZU01HVDIpIDw8IDEpOworCisJaWYgKHN5c21ndCA9PSAweDAxKQorCQlzZXRfZGV2X2VudHJ5X2JpdChkZXZpZCwgREVWX0VOVFJZX0lXKTsKK30KKwogLyogV3JpdGVzIHRoZSBzcGVjaWZpYyBJT01NVSBmb3IgYSBkZXZpY2UgaW50byB0aGUgcmxvb2t1cCB0YWJsZSAqLwogc3RhdGljIHZvaWQgX19pbml0IHNldF9pb21tdV9mb3JfZGV2aWNlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1MTYgZGV2aWQpCiB7CkBAIC01NDcsNiArNTY5LDggQEAKIAlpZiAoZmxhZ3MgJiBBQ1BJX0RFVkZMQUdfTElOVDEpCiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfTElOVDFfUEFTUyk7CiAKKwlhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82MyhkZXZpZCk7CisKIAlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgZGV2aWQpOwogfQogCkBAIC04MTYsNyArODQwLDE4IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X29uZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGl2aGRfaGVhZGVyICpoKQogewogCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7CisKKwkvKiBBZGQgSU9NTVUgdG8gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzICovCiAJbGlzdF9hZGRfdGFpbCgmaW9tbXUtPmxpc3QsICZhbWRfaW9tbXVfbGlzdCk7CisJaW9tbXUtPmluZGV4ICAgICAgICAgICAgID0gYW1kX2lvbW11c19wcmVzZW50Kys7CisKKwlpZiAodW5saWtlbHkoaW9tbXUtPmluZGV4ID49IE1BWF9JT01NVVMpKSB7CisJCVdBUk4oMSwgIkFNRC1WaTogU3lzdGVtIGhhcyBtb3JlIElPTU1VcyB0aGFuIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIik7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCS8qIEluZGV4IGlzIGZpbmUgLSBhZGQgSU9NTVUgdG8gdGhlIGFycmF5ICovCisJYW1kX2lvbW11c1tpb21tdS0+aW5kZXhdID0gaW9tbXU7CiAKIAkvKgogCSAqIENvcHkgZGF0YSBmcm9tIEFDUEkgdGFibGUgZW50cnkgdG8gdGhlIGlvbW11IHN0cnVjdApAQCAtODQ2LDYgKzg4MSw5IEBACiAJaW5pdF9pb21tdV9mcm9tX2FjcGkoaW9tbXUsIGgpOwogCWluaXRfaW9tbXVfZGV2aWNlcyhpb21tdSk7CiAKKwlpZiAoaW9tbXUtPmNhcCAmICgxVUwgPDwgSU9NTVVfQ0FQX05QQ0FDSEUpKQorCQlhbWRfaW9tbXVfbnBfY2FjaGUgPSB0cnVlOworCiAJcmV0dXJuIHBjaV9lbmFibGVfZGV2aWNlKGlvbW11LT5kZXYpOwogfQogCkBAIC05MDMsNyArOTQxLDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBfX2luaXQgaW9tbXVfc2V0dXBfbXNpKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQorc3RhdGljIGludCBpb21tdV9zZXR1cF9tc2koc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7CiAJaW50IHI7CiAKQEAgLTExNTQsMTkgKzExOTIsMTAgQEAKICAqIGZ1bmN0aW9ucy4gRmluYWxseSBpdCBwcmludHMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBBTUQgSU9NTVVzIGFuZAogICogdGhlIGRyaXZlciBzdGF0ZSBhbmQgZW5hYmxlcyB0aGUgaGFyZHdhcmUuCiAgKi8KLWludCBfX2luaXQgYW1kX2lvbW11X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFtZF9pb21tdV9pbml0KHZvaWQpCiB7CiAJaW50IGksIHJldCA9IDA7CiAKLQotCWlmIChub19pb21tdSkgewotCQlwcmludGsoS0VSTl9JTkZPICJBTUQtVmkgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghYW1kX2lvbW11X2RldGVjdGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qCiAJICogRmlyc3QgcGFyc2UgQUNQSSB0YWJsZXMgdG8gZmluZCB0aGUgbGFyZ2VzdCBCdXMvRGV2L0Z1bmMKIAkgKiB3ZSBuZWVkIHRvIGhhbmRsZS4gVXBvbiB0aGlzIGluZm9ybWF0aW9uIHRoZSBzaGFyZWQgZGF0YQpAQCAtMTIwMywxNSArMTIzMiw2IEBACiAJaWYgKGFtZF9pb21tdV9ybG9va3VwX3RhYmxlID09IE5VTEwpCiAJCWdvdG8gZnJlZTsKIAotCS8qCi0JICogUHJvdGVjdGlvbiBEb21haW4gdGFibGUgLSBtYXBzIGRldmljZXMgdG8gcHJvdGVjdGlvbiBkb21haW5zCi0JICogVGhpcyB0YWJsZSBoYXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgcmxvb2t1cF90YWJsZQotCSAqLwotCWFtZF9pb21tdV9wZF90YWJsZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKLQkJCQkgICAgIGdldF9vcmRlcihybG9va3VwX3RhYmxlX3NpemUpKTsKLQlpZiAoYW1kX2lvbW11X3BkX3RhYmxlID09IE5VTEwpCi0JCWdvdG8gZnJlZTsKLQogCWFtZF9pb21tdV9wZF9hbGxvY19iaXRtYXAgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoCiAJCQkJCSAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKIAkJCQkJICAgIGdldF9vcmRlcihNQVhfRE9NQUlOX0lELzgpKTsKQEAgLTEyMzMsNiArMTI1Myw4IEBACiAJICovCiAJYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcFswXSA9IDE7CiAKKwlzcGluX2xvY2tfaW5pdCgmYW1kX2lvbW11X3BkX2xvY2spOworCiAJLyoKIAkgKiBub3cgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBiYXNpY2FsbHkgaW5pdGlhbGl6ZWQKIAkgKiBzdGFydCB0aGUgcmVhbCBhY3BpIHRhYmxlIHNjYW4KQEAgLTEyNjQsMTcgKzEyODYsMTIgQEAKIAlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQogCQlnb3RvIG91dDsKIAotCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogZGV2aWNlIGlzb2xhdGlvbiAiKTsKLQlpZiAoYW1kX2lvbW11X2lzb2xhdGUpCi0JCXByaW50aygiZW5hYmxlZFxuIik7Ci0JZWxzZQotCQlwcmludGsoImRpc2FibGVkXG4iKTsKLQogCWlmIChhbWRfaW9tbXVfdW5tYXBfZmx1c2gpCiAJCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogSU8vVExCIGZsdXNoIG9uIHVubWFwIGVuYWJsZWRcbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQU1ELVZpOiBMYXp5IElPL1RMQiBmbHVzaGluZyBlbmFibGVkXG4iKTsKIAorCXg4Nl9wbGF0Zm9ybS5pb21tdV9zaHV0ZG93biA9IGRpc2FibGVfaW9tbXVzOwogb3V0OgogCXJldHVybiByZXQ7CiAKQEAgLTEyODIsOSArMTI5OSw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhbWRfaW9tbXVfcGRfYWxsb2NfYml0bWFwLAogCQkgICBnZXRfb3JkZXIoTUFYX0RPTUFJTl9JRC84KSk7CiAKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFtZF9pb21tdV9wZF90YWJsZSwKLQkJICAgZ2V0X29yZGVyKHJsb29rdXBfdGFibGVfc2l6ZSkpOwotCiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhbWRfaW9tbXVfcmxvb2t1cF90YWJsZSwKIAkJICAgZ2V0X29yZGVyKHJsb29rdXBfdGFibGVfc2l6ZSkpOwogCkBAIC0xMzAxLDExICsxMzE1LDYgQEAKIAlnb3RvIG91dDsKIH0KIAotdm9pZCBhbWRfaW9tbXVfc2h1dGRvd24odm9pZCkKLXsKLQlkaXNhYmxlX2lvbW11cygpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEVhcmx5IGRldGVjdCBjb2RlLiBUaGlzIGNvZGUgcnVucyBhdCBJT01NVSBkZXRlY3Rpb24gdGltZSBpbiB0aGUgRE1BCkBAIC0xMzIwLDE2ICsxMzI5LDEzIEBACiAKIHZvaWQgX19pbml0IGFtZF9pb21tdV9kZXRlY3Qodm9pZCkKIHsKLQlpZiAoc3dpb3RsYiB8fCBub19pb21tdSB8fCAoaW9tbXVfZGV0ZWN0ZWQgJiYgIWdhcnRfaW9tbXVfYXBlcnR1cmUpKQorCWlmIChub19pb21tdSB8fCAoaW9tbXVfZGV0ZWN0ZWQgJiYgIWdhcnRfaW9tbXVfYXBlcnR1cmUpKQogCQlyZXR1cm47CiAKIAlpZiAoYWNwaV90YWJsZV9wYXJzZSgiSVZSUyIsIGVhcmx5X2FtZF9pb21tdV9kZXRlY3QpID09IDApIHsKIAkJaW9tbXVfZGV0ZWN0ZWQgPSAxOwogCQlhbWRfaW9tbXVfZGV0ZWN0ZWQgPSAxOwotI2lmZGVmIENPTkZJR19HQVJUX0lPTU1VCi0JCWdhcnRfaW9tbXVfYXBlcnR1cmVfZGlzYWJsZWQgPSAxOwotCQlnYXJ0X2lvbW11X2FwZXJ0dXJlID0gMDsKLSNlbmRpZgorCQl4ODZfaW5pdC5pb21tdS5pb21tdV9pbml0ID0gYW1kX2lvbW11X2luaXQ7CiAJfQogfQogCkBAIC0xMzUwLDEwICsxMzU2LDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cikKIHsKIAlmb3IgKDsgKnN0cjsgKytzdHIpIHsKLQkJaWYgKHN0cm5jbXAoc3RyLCAiaXNvbGF0ZSIsIDcpID09IDApCi0JCQlhbWRfaW9tbXVfaXNvbGF0ZSA9IHRydWU7Ci0JCWlmIChzdHJuY21wKHN0ciwgInNoYXJlIiwgNSkgPT0gMCkKLQkJCWFtZF9pb21tdV9pc29sYXRlID0gZmFsc2U7CiAJCWlmIChzdHJuY21wKHN0ciwgImZ1bGxmbHVzaCIsIDkpID09IDApCiAJCQlhbWRfaW9tbXVfdW5tYXBfZmx1c2ggPSB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKaW5kZXggMTI4MTExZC4uZTBkZmI2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vazguaD4KKyNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KIAogaW50IGdhcnRfaW9tbXVfYXBlcnR1cmU7CiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZV9kaXNhYmxlZCBfX2luaXRkYXRhOwpAQCAtNDAwLDYgKzQwMSw3IEBACiAKIAkJCWlvbW11X2RldGVjdGVkID0gMTsKIAkJCWdhcnRfaW9tbXVfYXBlcnR1cmUgPSAxOworCQkJeDg2X2luaXQuaW9tbXUuaW9tbXVfaW5pdCA9IGdhcnRfaW9tbXVfaW5pdDsKIAogCQkJYXBlcl9vcmRlciA9IChyZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAzLCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwpID4+IDEpICYgNzsKIAkJCWFwZXJfc2l6ZSA9ICgzMiAqIDEwMjQgKiAxMDI0KSA8PCBhcGVyX29yZGVyOwpAQCAtNDU2LDcgKzQ1OCw3IEBACiAKIAlpZiAoYXBlcl9hbGxvYykgewogCQkvKiBHb3QgdGhlIGFwZXJ0dXJlIGZyb20gdGhlIEFHUCBicmlkZ2UgKi8KLQl9IGVsc2UgaWYgKHN3aW90bGIgJiYgIXZhbGlkX2FncCkgeworCX0gZWxzZSBpZiAoIXZhbGlkX2FncCkgewogCQkvKiBEbyBub3RoaW5nICovCiAJfSBlbHNlIGlmICgoIW5vX2lvbW11ICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB8fAogCQkgICBmb3JjZV9pb21tdSB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQppbmRleCBkYTdiN2I5Li41NjVjMWJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIGxvY2FsIEFQSUMgZHJpdmVycyBhbmQgZm9yIHRoZSBJTy1BUElDIGNvZGUKICMKIAotb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gcHJvYmVfJChCSVRTKS5vIGlwaS5vIG5taS5vCitvYmotJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCSs9IGFwaWMubyBhcGljX25vb3AubyBwcm9iZV8kKEJJVFMpLm8gaXBpLm8gbm1pLm8KIG9iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpYy5vCiBvYmotJChDT05GSUdfU01QKQkJKz0gaXBpLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IDg5NGFhOTcuLmFkOGM3NWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTI0MSwyOCArMjQxLDEzIEBACiB9CiAKIC8qCi0gKiBiYXJlIGZ1bmN0aW9uIHRvIHN1YnN0aXR1dGUgd3JpdGUgb3BlcmF0aW9uCi0gKiBhbmQgaXQncyBfdGhhdF8gZmFzdCA6KQotICovCi1zdGF0aWMgdm9pZCBuYXRpdmVfYXBpY193cml0ZV9kdW1teSh1MzIgcmVnLCB1MzIgdikKLXsKLQlXQVJOX09OX09OQ0UoKGNwdV9oYXNfYXBpYyB8fCAhZGlzYWJsZV9hcGljKSk7Ci19Ci0KLXN0YXRpYyB1MzIgbmF0aXZlX2FwaWNfcmVhZF9kdW1teSh1MzIgcmVnKQotewotCVdBUk5fT05fT05DRSgoY3B1X2hhc19hcGljICYmICFkaXNhYmxlX2FwaWMpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHJpZ2h0IGFmdGVyIHRoaXMgY2FsbCBhcGljLT53cml0ZS9yZWFkIGRvZXNuJ3QgZG8gYW55dGhpbmcKLSAqIG5vdGUgdGhhdCB0aGVyZSBpcyBubyByZXN0b3JlIG9wZXJhdGlvbiBpdCB3b3JrcyBvbmUgd2F5CisgKiByaWdodCBhZnRlciB0aGlzIGNhbGwgYXBpYyBiZWNvbWUgTk9PUCBkcml2ZW4KKyAqIHNvIGFwaWMtPndyaXRlL3JlYWQgZG9lc24ndCBkbyBhbnl0aGluZwogICovCiB2b2lkIGFwaWNfZGlzYWJsZSh2b2lkKQogewotCWFwaWMtPnJlYWQgPSBuYXRpdmVfYXBpY19yZWFkX2R1bW15OwotCWFwaWMtPndyaXRlID0gbmF0aXZlX2FwaWNfd3JpdGVfZHVtbXk7CisJcHJfaW5mbygiQVBJQzogc3dpdGNoZWQgdG8gYXBpYyBOT09QXG4iKTsKKwlhcGljID0gJmFwaWNfbm9vcDsKIH0KIAogdm9pZCBuYXRpdmVfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCkBAIC00NTksNyArNDQ0LDcgQEAKIAkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwogCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwogCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgMHhmZmZmZmZmZik7CisJCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgogCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KQEAgLTEzOTIsMTQgKzEzNzcsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICoqaW9hcGljX2VudHJpZXMgPSBOVUxMOwogCWludCByZXQsIHgyYXBpY19lbmFibGVkID0gMDsKLQlpbnQgZG1hcl90YWJsZV9pbml0X3JldCA9IDA7CisJaW50IGRtYXJfdGFibGVfaW5pdF9yZXQ7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWRtYXJfdGFibGVfaW5pdF9yZXQgPSBkbWFyX3RhYmxlX2luaXQoKTsKLQlpZiAoZG1hcl90YWJsZV9pbml0X3JldCkKLQkJcHJfZGVidWcoImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwKLQkJCQlkbWFyX3RhYmxlX2luaXRfcmV0KTsKLSNlbmRpZgorCWlmIChkbWFyX3RhYmxlX2luaXRfcmV0ICYmICF4MmFwaWNfc3VwcG9ydGVkKCkpCisJCXJldHVybjsKIAogCWlvYXBpY19lbnRyaWVzID0gYWxsb2NfaW9hcGljX2VudHJpZXMoKTsKIAlpZiAoIWlvYXBpY19lbnRyaWVzKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX25vb3AuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YWNjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX25vb3AuYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE5PT1AgQVBJQyBkcml2ZXIuCisgKgorICogRG9lcyBhbG1vc3Qgbm90aGluZyBhbmQgc2hvdWxkIGJlIHN1YnN0aXR1dGVkIGJ5IGEgcmVhbCBhcGljIGRyaXZlciB2aWEKKyAqIHByb2JlIHJvdXRpbmUuCisgKgorICogVGhvdWdoIGluIGNhc2UgaWYgYXBpYyBpcyBkaXNhYmxlZCAoZm9yIHNvbWUgcmVhc29uKSB3ZSB0cnkKKyAqIHRvIG5vdCB1Z2xpZnkgdGhlIGNhbGxlcidzIGNvZGUgYW5kIGFsbG93IHRvIGNhbGwgKHNvbWUpIGFwaWMgcm91dGluZXMKKyAqIGxpa2Ugc2VsZi1pcGksIGV0Yy4uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxhc20vaXBpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisKK3N0YXRpYyB2b2lkIG5vb3BfaW5pdF9hcGljX2xkcih2b2lkKSB7IH0KK3N0YXRpYyB2b2lkIG5vb3Bfc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikgeyB9CitzdGF0aWMgdm9pZCBub29wX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgaW50IHZlY3RvcikgeyB9CitzdGF0aWMgdm9pZCBub29wX3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikgeyB9CitzdGF0aWMgdm9pZCBub29wX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKSB7IH0KK3N0YXRpYyB2b2lkIG5vb3Bfc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKSB7IH0KK3N0YXRpYyB2b2lkIG5vb3BfYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpIHsgfQorc3RhdGljIHZvaWQgbm9vcF9hcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpIHsgfQorCitzdGF0aWMgaW50IG5vb3Bfd2FrZXVwX3NlY29uZGFyeV9jcHUoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdTMyIG5vb3Bfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBub29wX2FwaWNfaWNyX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub29wX2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vb3BfcGh5c19wa2dfaWQoaW50IGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbm9vcF9nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm9vcF9wcm9iZSh2b2lkKQoreworCS8qCisJICogTk9PUCBhcGljIHNob3VsZCBub3QgZXZlciBiZQorCSAqIGVuYWJsZWQgdmlhIHByb2JlIHJvdXRpbmUKKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub29wX2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQoreworCS8qCisJICogaWYgd2Ugd291bGQgYmUgcmVhbGx5ICJwZWRhbnRpYyIKKwkgKiB3ZSBzaG91bGQgcGFzcyByZWFkX2FwaWNfaWQoKSBoZXJlCisJICogYnV0IHNpbmNlIE5PT1Agc3VwcG9zZSBBUElDIElEID0gMAorCSAqIGxldHMgc2F2ZSBhIGZldyBjeWNsZXMKKwkgKi8KKwlyZXR1cm4gcGh5c2lkX2lzc2V0KDAsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpub29wX3RhcmdldF9jcHVzKHZvaWQpCit7CisJLyogb25seSBCU1AgaGVyZSAqLworCXJldHVybiBjcHVtYXNrX29mKDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBub29wX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgKm1hcCwgaW50IGFwaWNpZCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgKm1hcCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5vb3BfY2hlY2tfYXBpY2lkX3ByZXNlbnQoaW50IGJpdCkKK3sKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGJpdCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCitzdGF0aWMgdm9pZCBub29wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKK3sKKwlpZiAoY3B1ICE9IDApCisJCXByX3dhcm5pbmcoIkFQSUM6IFZlY3RvciBhbGxvY2F0ZWQgZm9yIG5vbi1CU1AgY3B1XG4iKTsKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldG1hc2spOworfQorCitpbnQgbm9vcF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCit7CisJLyogd2UncmUgYWx3YXlzIG9uIG5vZGUgMCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIG5vb3BfYXBpY19yZWFkKHUzMiByZWcpCit7CisJV0FSTl9PTl9PTkNFKChjcHVfaGFzX2FwaWMgJiYgIWRpc2FibGVfYXBpYykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBub29wX2FwaWNfd3JpdGUodTMyIHJlZywgdTMyIHYpCit7CisJV0FSTl9PTl9PTkNFKChjcHVfaGFzX2FwaWMgfHwgIWRpc2FibGVfYXBpYykpOworfQorCitzdHJ1Y3QgYXBpYyBhcGljX25vb3AgPSB7CisJLm5hbWUJCQkJPSAibm9vcCIsCisJLnByb2JlCQkJCT0gbm9vcF9wcm9iZSwKKwkuYWNwaV9tYWR0X29lbV9jaGVjawkJPSBOVUxMLAorCisJLmFwaWNfaWRfcmVnaXN0ZXJlZAkJPSBub29wX2FwaWNfaWRfcmVnaXN0ZXJlZCwKKworCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCisJLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIENQVXM6ICovCisJLmlycV9kZXN0X21vZGUJCQk9IDEsCisKKwkudGFyZ2V0X2NwdXMJCQk9IG5vb3BfdGFyZ2V0X2NwdXMsCisJLmRpc2FibGVfZXNyCQkJPSAwLAorCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAorCS5jaGVja19hcGljaWRfdXNlZAkJPSBub29wX2NoZWNrX2FwaWNpZF91c2VkLAorCS5jaGVja19hcGljaWRfcHJlc2VudAkJPSBub29wX2NoZWNrX2FwaWNpZF9wcmVzZW50LAorCisJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IG5vb3BfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAorCS5pbml0X2FwaWNfbGRyCQkJPSBub29wX2luaXRfYXBpY19sZHIsCisKKwkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGRlZmF1bHRfaW9hcGljX3BoeXNfaWRfbWFwLAorCS5zZXR1cF9hcGljX3JvdXRpbmcJCT0gTlVMTCwKKwkubXVsdGlfdGltZXJfY2hlY2sJCT0gTlVMTCwKKwkuYXBpY2lkX3RvX25vZGUJCQk9IG5vb3BfYXBpY2lkX3RvX25vZGUsCisKKwkuY3B1X3RvX2xvZ2ljYWxfYXBpY2lkCQk9IG5vb3BfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLAorCS5jcHVfcHJlc2VudF90b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkLAorCisJLnNldHVwX3BvcnRpb19yZW1hcAkJPSBOVUxMLAorCS5jaGVja19waHlzX2FwaWNpZF9wcmVzZW50CT0gZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50LAorCS5lbmFibGVfYXBpY19tb2RlCQk9IE5VTEwsCisKKwkucGh5c19wa2dfaWQJCQk9IG5vb3BfcGh5c19wa2dfaWQsCisKKwkubXBzX29lbV9jaGVjawkJCT0gTlVMTCwKKworCS5nZXRfYXBpY19pZAkJCT0gbm9vcF9nZXRfYXBpY19pZCwKKwkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCisJLmFwaWNfaWRfbWFzawkJCT0gMHgwRiA8PCAyNCwKKworCS5jcHVfbWFza190b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCisJLnNlbmRfSVBJX21hc2sJCQk9IG5vb3Bfc2VuZF9JUElfbWFzaywKKwkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gbm9vcF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCisJLnNlbmRfSVBJX2FsbGJ1dHNlbGYJCT0gbm9vcF9zZW5kX0lQSV9hbGxidXRzZWxmLAorCS5zZW5kX0lQSV9hbGwJCQk9IG5vb3Bfc2VuZF9JUElfYWxsLAorCS5zZW5kX0lQSV9zZWxmCQkJPSBub29wX3NlbmRfSVBJX3NlbGYsCisKKwkud2FrZXVwX3NlY29uZGFyeV9jcHUJCT0gbm9vcF93YWtldXBfc2Vjb25kYXJ5X2NwdSwKKworCS8qIHNob3VsZCBiZSBzYWZlICovCisJLnRyYW1wb2xpbmVfcGh5c19sb3cJCT0gREVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfTE9XLAorCS50cmFtcG9saW5lX3BoeXNfaGlnaAkJPSBERUZBVUxUX1RSQU1QT0xJTkVfUEhZU19ISUdILAorCisJLndhaXRfZm9yX2luaXRfZGVhc3NlcnQJCT0gTlVMTCwKKworCS5zbXBfY2FsbGluX2NsZWFyX2xvY2FsX2FwaWMJPSBOVUxMLAorCS5pbnF1aXJlX3JlbW90ZV9hcGljCQk9IE5VTEwsCisKKwkucmVhZAkJCQk9IG5vb3BfYXBpY19yZWFkLAorCS53cml0ZQkJCQk9IG5vb3BfYXBpY193cml0ZSwKKwkuaWNyX3JlYWQJCQk9IG5vb3BfYXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlCQkJPSBub29wX2FwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlCQkJPSBub29wX2FwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5vb3Bfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwppbmRleCA3N2EwNjQxLi4zOGRjZWNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwpAQCAtMzUsNyArMzUsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJpZ3NtcF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJpZ3NtcF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190ICptYXAsIGludCBhcGljaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MywxMSArOTMsNiBAQAogCXJldHVybiBCQURfQVBJQ0lEOwogfQogCi1zdGF0aWMgcGh5c2lkX21hc2tfdCBiaWdzbXBfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKLXsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKHBoeXNfYXBpY2lkKTsKLX0KLQogLyogTWFwcGluZyBmcm9tIGNwdSBudW1iZXIgdG8gbG9naWNhbCBhcGljaWQgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoaW50IGNwdSkKIHsKQEAgLTEwNiwxMCArMTAxLDEwIEBACiAJcmV0dXJuIGNwdV9waHlzaWNhbF9pZChjcHUpOwogfQogCi1zdGF0aWMgcGh5c2lkX21hc2tfdCBiaWdzbXBfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCitzdGF0aWMgdm9pZCBiaWdzbXBfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgKnBoeXNfbWFwLCBwaHlzaWRfbWFza190ICpyZXRtYXApCiB7CiAJLyogRm9yIGNsdXN0ZXJlZCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZG8gdGhpcyB5ZXQgLSBoYWNrICovCi0JcmV0dXJuIHBoeXNpZHNfcHJvbW90ZSgweEZGTCk7CisJcGh5c2lkc19wcm9tb3RlKDB4RkZMLCByZXRtYXApOwogfQogCiBzdGF0aWMgaW50IGJpZ3NtcF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKQEAgLTIzMCw3ICsyMjUsNyBAQAogCS5hcGljaWRfdG9fbm9kZQkJCT0gYmlnc21wX2FwaWNpZF90b19ub2RlLAogCS5jcHVfdG9fbG9naWNhbF9hcGljaWQJCT0gYmlnc21wX2NwdV90b19sb2dpY2FsX2FwaWNpZCwKIAkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGJpZ3NtcF9jcHVfcHJlc2VudF90b19hcGljaWQsCi0JLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBiaWdzbXBfYXBpY2lkX3RvX2NwdV9wcmVzZW50LAorCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gcGh5c2lkX3NldF9tYXNrX29mX3BoeXNpZCwKIAkuc2V0dXBfcG9ydGlvX3JlbWFwCQk9IE5VTEwsCiAJLmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQJPSBiaWdzbXBfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKIAkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYwppbmRleCA4OTE3NGY4Li5lODVmOGZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYwpAQCAtNDY2LDExICs0NjYsMTEgQEAKIAlyZXR1cm4gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZXM3MDAwX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZXM3MDAwX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgKm1hcCwgaW50IGFwaWNpZCkKIHsKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZXM3MDAwX2NoZWNrX2FwaWNpZF9wcmVzZW50KGludCBiaXQpCiB7CiAJcmV0dXJuIHBoeXNpZF9pc3NldChiaXQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKQEAgLTUzOSwxNCArNTM5LDEwIEBACiAKIHN0YXRpYyBpbnQgY3B1X2lkOwogCi1zdGF0aWMgcGh5c2lkX21hc2tfdCBlczcwMDBfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKK3N0YXRpYyB2b2lkIGVzNzAwMF9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IHBoeXNfYXBpY2lkLCBwaHlzaWRfbWFza190ICpyZXRtYXApCiB7Ci0JcGh5c2lkX21hc2tfdCBtYXNrOwotCi0JbWFzayA9IHBoeXNpZF9tYXNrX29mX3BoeXNpZChjcHVfaWQpOworCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoY3B1X2lkLCByZXRtYXApOwogCSsrY3B1X2lkOwotCi0JcmV0dXJuIG1hc2s7CiB9CiAKIC8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCkBAIC01NjEsMTAgKzU1NywxMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBwaHlzaWRfbWFza190IGVzNzAwMF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCBwaHlzX21hcCkKK3N0YXRpYyB2b2lkIGVzNzAwMF9pb2FwaWNfcGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCAqcGh5c19tYXAsIHBoeXNpZF9tYXNrX3QgKnJldG1hcCkKIHsKIAkvKiBGb3IgY2x1c3RlcmVkIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkbyB0aGlzIHlldCAtIGhhY2sgKi8KLQlyZXR1cm4gcGh5c2lkc19wcm9tb3RlKDB4ZmYpOworCXBoeXNpZHNfcHJvbW90ZSgweEZGTCwgcmV0bWFwKTsKIH0KIAogc3RhdGljIGludCBlczcwMDBfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgY3B1X3BoeXNpY2FsX2FwaWNpZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCBkYzY5ZjI4Li5jMGI0NDY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC02MCw4ICs2MCw2IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+Ci0jaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIApAQCAtMTQwLDIwICsxMzgsNiBAQAogCXJldHVybiBwaW47CiB9CiAKLS8qCi0gKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKLSAqCi0gKiBNb3N0IGlycXMgYXJlIG1hcHBlZCAxOjEgd2l0aCBwaW5zLgotICovCi1zdHJ1Y3QgaXJxX2NmZyB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqaXJxXzJfcGluOwotCWNwdW1hc2tfdmFyX3QgZG9tYWluOwotCWNwdW1hc2tfdmFyX3Qgb2xkX2RvbWFpbjsKLQl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7Ci0JdTggdmVjdG9yOwotCXU4IG1vdmVfaW5fcHJvZ3Jlc3MgOiAxOwotfTsKLQogLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W10gPSB7CkBAIC0yMDksNyArMTkzLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCi1zdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKK3N0cnVjdCBpcnFfY2ZnICppcnFfY2ZnKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZyA9IE5VTEw7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwpAQCAtMzYxLDcgKzM0NSw3IEBACiAvKiBlbmQgZm9yIG1vdmVfaXJxX2Rlc2MgKi8KIAogI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NmZyAqaXJxX2NmZyh1bnNpZ25lZCBpbnQgaXJxKQorc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKIHsKIAlyZXR1cm4gaXJxIDwgbnJfaXJxcyA/IGlycV9jZmd4ICsgaXJxIDogTlVMTDsKIH0KQEAgLTU1NSwyMyArNTM5LDQxIEBACiAJYWRkX3Bpbl90b19pcnFfbm9kZShjZmcsIG5vZGUsIG5ld2FwaWMsIG5ld3Bpbik7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW9fYXBpY19tb2RpZnlfaXJxKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5LAorCQkJCSBpbnQgbWFza19hbmQsIGludCBtYXNrX29yLAorCQkJCSB2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnLCBwaW47CisKKwlwaW4gPSBlbnRyeS0+cGluOworCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOworCXJlZyAmPSBtYXNrX2FuZDsKKwlyZWcgfD0gbWFza19vcjsKKwlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIsIHJlZyk7CisJaWYgKGZpbmFsKQorCQlmaW5hbChlbnRyeSk7Cit9CisKIHN0YXRpYyB2b2lkIGlvX2FwaWNfbW9kaWZ5X2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLAogCQkJICAgICAgIGludCBtYXNrX2FuZCwgaW50IG1hc2tfb3IsCiAJCQkgICAgICAgdm9pZCAoKmZpbmFsKShzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkpCiB7Ci0JaW50IHBpbjsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAotCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7Ci0JCXVuc2lnbmVkIGludCByZWc7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOwotCQlyZWcgJj0gbWFza19hbmQ7Ci0JCXJlZyB8PSBtYXNrX29yOwotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIsIHJlZyk7Ci0JCWlmIChmaW5hbCkKLQkJCWZpbmFsKGVudHJ5KTsKLQl9CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pCisJCV9faW9fYXBpY19tb2RpZnlfaXJxKGVudHJ5LCBtYXNrX2FuZCwgbWFza19vciwgZmluYWwpOworfQorCitzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpCit7CisJX19pb19hcGljX21vZGlmeV9pcnEoZW50cnksIH5JT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsCisJCQkgICAgIElPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KQoreworCV9faW9fYXBpY19tb2RpZnlfaXJxKGVudHJ5LCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsCisJCQkgICAgIElPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCkBAIC01OTUsMTggKzU5Nyw2IEBACiAJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfjAsIElPX0FQSUNfUkVESVJfTUFTS0VELCAmaW9fYXBpY19zeW5jKTsKIH0KIAotc3RhdGljIHZvaWQgX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCi17Ci0JaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwKLQkJCUlPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcpCi17Ci0JaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELAotCQkJSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLCBOVUxMKTsKLX0KLQogc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwpAQCAtMTE3Nyw3ICsxMTY3LDcgQEAKIAlpbnQgY3B1LCBlcnI7CiAJY3B1bWFza192YXJfdCB0bXBfbWFzazsKIAotCWlmICgoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB8fCBjZmctPm1vdmVfY2xlYW51cF9jb3VudCkKKwlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wX21hc2ssIEdGUF9BVE9NSUMpKQpAQCAtMTIzNyw4ICsxMjI3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50Ci1hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK2ludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTk5LDkgKzE1ODgsNiBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQogCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgTVAgSVJRIHNvdXJjZXM6ICVkLlxuIiwgbXBfaXJxX2VudHJpZXMpOwogCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspCiAJCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgSU8tQVBJQyAjJWQgcmVnaXN0ZXJzOiAlZC5cbiIsCkBAIC0xNzA4LDkgKzE2OTQsNiBAQAogewogCWludCBpOwogCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQogCXByaW50ayhLRVJOX0RFQlVHKTsKIAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC0xNzI0LDkgKzE3MDcsNiBAQAogCXVuc2lnbmVkIGludCBpLCB2LCB2ZXIsIG1heGx2dDsKIAl1NjQgaWNyOwogCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQogCXByaW50ayhLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwogCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7CkBAIC0xODI0LDEzICsxODA0LDE5IEBACiAJcHJpbnRrKCJcbiIpOwogfQogCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfYWxsX2xvY2FsX0FQSUNzKHZvaWQpCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQ3MoaW50IG1heGNwdSkKIHsKIAlpbnQgY3B1OwogCisJaWYgKCFtYXhjcHUpCisJCXJldHVybjsKKwogCXByZWVtcHRfZGlzYWJsZSgpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgPj0gbWF4Y3B1KQorCQkJYnJlYWs7CiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHByaW50X2xvY2FsX0FQSUMsIE5VTEwsIDEpOworCX0KIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCkBAIC0xODM5LDcgKzE4MjUsNyBAQAogCXVuc2lnbmVkIGludCB2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCB8fCAhbnJfbGVnYWN5X2lycXMpCisJaWYgKCFucl9sZWdhY3lfaXJxcykKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKQEAgLTE4NjYsMjEgKzE4NTIsNDEgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKIH0KIAotX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQorc3RhdGljIGludCBfX2luaXRkYXRhIHNob3dfbGFwaWMgPSAxOworc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfc2hvd19sYXBpYyhjaGFyICphcmcpCiB7CisJaW50IG51bSA9IC0xOworCisJaWYgKHN0cmNtcChhcmcsICJhbGwiKSA9PSAwKSB7CisJCXNob3dfbGFwaWMgPSBDT05GSUdfTlJfQ1BVUzsKKwl9IGVsc2UgeworCQlnZXRfb3B0aW9uKCZhcmcsICZudW0pOworCQlpZiAobnVtID49IDApCisJCQlzaG93X2xhcGljID0gbnVtOworCX0KKworCXJldHVybiAxOworfQorX19zZXR1cCgic2hvd19sYXBpYz0iLCBzZXR1cF9zaG93X2xhcGljKTsKKworX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfSUNzKHZvaWQpCit7CisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybiAwOworCiAJcHJpbnRfUElDKCk7CiAKIAkvKiBkb24ndCBwcmludCBvdXQgaWYgYXBpYyBpcyBub3QgdGhlcmUgKi8KIAlpZiAoIWNwdV9oYXNfYXBpYyAmJiAhYXBpY19mcm9tX3NtcF9jb25maWcoKSkKIAkJcmV0dXJuIDA7CiAKLQlwcmludF9hbGxfbG9jYWxfQVBJQ3MoKTsKKwlwcmludF9sb2NhbF9BUElDcyhzaG93X2xhcGljKTsKIAlwcmludF9JT19BUElDKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotZnNfaW5pdGNhbGwocHJpbnRfYWxsX0lDcyk7Citmc19pbml0Y2FsbChwcmludF9JQ3MpOwogCiAKIC8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCkBAIC0yMDMxLDcgKzIwMzcsNyBAQAogCSAqIFRoaXMgaXMgYnJva2VuOyBhbnl0aGluZyB3aXRoIGEgcmVhbCBjcHUgY291bnQgaGFzIHRvCiAJICogY2lyY3VtdmVudCB0aGlzIGlkaW9jeSByZWdhcmRsZXNzLgogCSAqLwotCXBoeXNfaWRfcHJlc2VudF9tYXAgPSBhcGljLT5pb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOworCWFwaWMtPmlvYXBpY19waHlzX2lkX21hcCgmcGh5c19jcHVfcHJlc2VudF9tYXAsICZwaHlzX2lkX3ByZXNlbnRfbWFwKTsKIAogCS8qCiAJICogU2V0IHRoZSBJT0FQSUMgSUQgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgpAQCAtMjA1OCw3ICsyMDY0LDcgQEAKIAkJICogc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCiAJCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgogCQkgKi8KLQkJaWYgKGFwaWMtPmNoZWNrX2FwaWNpZF91c2VkKHBoeXNfaWRfcHJlc2VudF9tYXAsCisJCWlmIChhcGljLT5jaGVja19hcGljaWRfdXNlZCgmcGh5c19pZF9wcmVzZW50X21hcCwKIAkJCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEICVkIGlzIGFscmVhZHkgdXNlZCEuLi5cbiIsCiAJCQkJYXBpY19pZCwgbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOwpAQCAtMjA3Myw3ICsyMDc5LDcgQEAKIAkJCW1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkID0gaTsKIAkJfSBlbHNlIHsKIAkJCXBoeXNpZF9tYXNrX3QgdG1wOwotCQkJdG1wID0gYXBpYy0+YXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkKTsKKwkJCWFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgJnRtcCk7CiAJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJTZXR0aW5nICVkIGluIHRoZSAiCiAJCQkJCSJwaHlzX2lkX3ByZXNlbnRfbWFwXG4iLAogCQkJCQltcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCk7CkBAIC0yMjI4LDIwICsyMjM0LDE2IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNlbmRfY2xlYW51cF92ZWN0b3Ioc3RydWN0IGlycV9jZmcgKmNmZykKK3ZvaWQgc2VuZF9jbGVhbnVwX3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQogewogCWNwdW1hc2tfdmFyX3QgY2xlYW51cF9tYXNrOwogCiAJaWYgKHVubGlrZWx5KCFhbGxvY19jcHVtYXNrX3ZhcigmY2xlYW51cF9tYXNrLCBHRlBfQVRPTUlDKSkpIHsKIAkJdW5zaWduZWQgaW50IGk7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gMDsKLQkJZm9yX2VhY2hfY3B1X2FuZChpLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzaykKLQkJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50Kys7CiAJCWZvcl9lYWNoX2NwdV9hbmQoaSwgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spCiAJCQlhcGljLT5zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoaSksIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKIAl9IGVsc2UgewogCQljcHVtYXNrX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXNrKTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVtYXNrX3dlaWdodChjbGVhbnVwX21hc2spOwogCQlhcGljLT5zZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwogCQlmcmVlX2NwdW1hc2tfdmFyKGNsZWFudXBfbWFzayk7CiAJfQpAQCAtMjI3MiwxNSArMjI3NCwxMiBAQAogCX0KIH0KIAotc3RhdGljIGludAotYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwotCiAvKgogICogRWl0aGVyIHNldHMgZGVzYy0+YWZmaW5pdHkgdG8gYSB2YWxpZCB2YWx1ZSwgYW5kIHJldHVybnMKICAqIC0+Y3B1X21hc2tfdG9fYXBpY2lkIG9mIHRoYXQsIG9yIHJldHVybnMgQkFEX0FQSUNJRCBhbmQKICAqIGxlYXZlcyBkZXNjLT5hZmZpbml0eSB1bnRvdWNoZWQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGludAogc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwpAQCAtMjQzMyw4ICsyNDMyLDYgQEAKIAogCQljZmcgPSBpcnFfY2ZnKGlycSk7CiAJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCi0JCQlnb3RvIHVubG9jazsKIAogCQlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkKIAkJCWdvdG8gdW5sb2NrOwpAQCAtMjQ1Miw3ICsyNDQ5LDYgQEAKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCV9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXSA9IC0xOwotCQljZmctPm1vdmVfY2xlYW51cF9jb3VudC0tOwogdW5sb2NrOgogCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJfQpAQCAtMjQ2MCwyMSArMjQ1NiwzMyBAQAogCWlycV9leGl0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHN0cnVjdCBpcnFfZGVzYyAqKmRlc2NwKQorc3RhdGljIHZvaWQgX19pcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCwgdW5zaWduZWQgdmVjdG9yKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9ICpkZXNjcDsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCXVuc2lnbmVkIHZlY3RvciwgbWU7CisJdW5zaWduZWQgbWU7CiAKIAlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKQogCQlyZXR1cm47CiAKLQl2ZWN0b3IgPSB+Z2V0X2lycV9yZWdzKCktPm9yaWdfYXg7CiAJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkKIAkJc2VuZF9jbGVhbnVwX3ZlY3RvcihjZmcpOwogfQorCitzdGF0aWMgdm9pZCBpcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCkKK3sKKwlfX2lycV9jb21wbGV0ZV9tb3ZlKGRlc2NwLCB+Z2V0X2lycV9yZWdzKCktPm9yaWdfYXgpOworfQorCit2b2lkIGlycV9mb3JjZV9jb21wbGV0ZV9tb3ZlKGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCisJX19pcnFfY29tcGxldGVfbW92ZSgmZGVzYywgY2ZnLT52ZWN0b3IpOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKipkZXNjcCkge30KICNlbmRpZgpAQCAtMjQ5MCw2ICsyNDk4LDU5IEBACiAKIGF0b21pY190IGlycV9taXNfY291bnQ7CiAKKy8qCisgKiBJTy1BUElDIHZlcnNpb25zIGJlbG93IDB4MjAgZG9uJ3Qgc3VwcG9ydCBFT0kgcmVnaXN0ZXIuCisgKiBGb3IgdGhlIHJlY29yZCwgaGVyZSBpcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyB2ZXJzaW9uczoKKyAqICAgICAwWGggICAgIDgyNDg5RFgKKyAqICAgICAxWGggICAgIEkvT0FQSUMgb3IgSS9PKHgpQVBJQyB3aGljaCBhcmUgbm90IFBDSSAyLjIgQ29tcGxpYW50CisgKiAgICAgMlhoICAgICBJL08oeClBUElDIHdoaWNoIGlzIFBDSSAyLjIgQ29tcGxpYW50CisgKiAgICAgMzBoLUZGaCBSZXNlcnZlZAorICoKKyAqIFNvbWUgb2YgdGhlIEludGVsIElDSCBTcGVjcyAoSUNIMiB0byBJQ0g1KSBkb2N1bWVudHMgdGhlIGlvLWFwaWMKKyAqIHZlcnNpb24gYXMgMHgyLiBUaGlzIGlzIGFuIGVycm9yIHdpdGggZG9jdW1lbnRhdGlvbiBhbmQgdGhlc2UgSUNIIGNoaXBzCisgKiB1c2UgaW8tYXBpYydzIG9mIHZlcnNpb24gMHgyMC4KKyAqCisgKiBGb3IgSU8tQVBJQydzIHdpdGggRU9JIHJlZ2lzdGVyLCB3ZSB1c2UgdGhhdCB0byBkbyBhbiBleHBsaWNpdCBFT0kuCisgKiBPdGhlcndpc2UsIHdlIHNpbXVsYXRlIHRoZSBFT0kgbWVzc2FnZSBtYW51YWxseSBieSBjaGFuZ2luZyB0aGUgdHJpZ2dlcgorICogbW9kZSB0byBlZGdlIGFuZCB0aGVuIGJhY2sgdG8gbGV2ZWwsIHdpdGggUlRFIGJlaW5nIG1hc2tlZCBkdXJpbmcgdGhpcy4KKyovCitzdGF0aWMgdm9pZCBfX2VvaV9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwlmb3JfZWFjaF9pcnFfcGluKGVudHJ5LCBjZmctPmlycV8yX3BpbikgeworCQlpZiAobXBfaW9hcGljc1tlbnRyeS0+YXBpY10uYXBpY3ZlciA+PSAweDIwKSB7CisJCQkvKgorCQkJICogSW50ci1yZW1hcHBpbmcgdXNlcyBwaW4gbnVtYmVyIGFzIHRoZSB2aXJ0dWFsIHZlY3RvcgorCQkJICogaW4gdGhlIFJURS4gQWN0dWFsIHZlY3RvciBpcyBwcm9ncmFtbWVkIGluCisJCQkgKiBpbnRyLXJlbWFwcGluZyB0YWJsZSBlbnRyeS4gSGVuY2UgZm9yIHRoZSBpby1hcGljCisJCQkgKiBFT0kgd2UgdXNlIHRoZSBwaW4gbnVtYmVyLgorCQkJICovCisJCQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpCisJCQkJaW9fYXBpY19lb2koZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOworCQkJZWxzZQorCQkJCWlvX2FwaWNfZW9pKGVudHJ5LT5hcGljLCBjZmctPnZlY3Rvcik7CisJCX0gZWxzZSB7CisJCQlfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoZW50cnkpOworCQkJX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKGVudHJ5KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZW9pX2lvYXBpY19pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gZGVzYy0+aXJxOworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9fZW9pX2lvYXBpY19pcnEoaXJxLCBjZmcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKQEAgLTI1MjUsNiArMjU4NiwxOSBAQAogCSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuICBXZSBtYXNrIHRoZSBzb3VyY2UgZm9yIHRoZSB0aW1lIG9mIHRoZQogCSAqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCiAJICogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KKwkgKgorCSAqIEFsc28gaW4gdGhlIGNhc2Ugd2hlbiBjcHUgZ29lcyBvZmZsaW5lLCBmaXh1cF9pcnFzKCkgd2lsbCBmb3J3YXJkCisJICogYW55IHVuaGFuZGxlZCBpbnRlcnJ1cHQgb24gdGhlIG9mZmxpbmVkIGNwdSB0byB0aGUgbmV3IGNwdQorCSAqIGRlc3RpbmF0aW9uIHRoYXQgaXMgaGFuZGxpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0LiBUaGlzCisJICogaW50ZXJydXB0IGZvcndhcmRpbmcgaXMgZG9uZSB2aWEgSVBJJ3MuIEhlbmNlLCBpbiB0aGlzIGNhc2UgYWxzbworCSAqIGxldmVsLXRyaWdnZXJlZCBpby1hcGljIGludGVycnVwdCB3aWxsIGJlIHNlZW4gYXMgYW4gZWRnZQorCSAqIGludGVycnVwdCBpbiB0aGUgSVJSLiBBbmQgd2UgY2FuJ3QgcmVseSBvbiB0aGUgY3B1J3MgRU9JCisJICogdG8gYmUgYnJvYWRjYXN0ZWQgdG8gdGhlIElPLUFQSUMncyB3aGljaCB3aWxsIGNsZWFyIHRoZSByZW1vdGVJUlIKKwkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LiBIZW5jZSBvbiBJTy1BUElDJ3MKKwkgKiBzdXBwb3J0aW5nIEVPSSByZWdpc3Rlciwgd2UgZG8gYW4gZXhwbGljaXQgRU9JIHRvIGNsZWFyIHRoZQorCSAqIHJlbW90ZSBJUlIgYW5kIG9uIElPLUFQSUMncyB3aGljaCBkb24ndCBoYXZlIGFuIEVPSSByZWdpc3RlciwKKwkgKiB3ZSB1c2UgdGhlIGFib3ZlIGxvZ2ljIChtYXNrK2VkZ2UgZm9sbG93ZWQgYnkgdW5tYXNrK2xldmVsKSBmcm9tCisJICogTWFuZnJlZCBTcHJhdWwgdG8gY2xlYXIgdGhlIHJlbW90ZSBJUlIuCiAJICovCiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCWkgPSBjZmctPnZlY3RvcjsKQEAgLTI1MzYsNiArMjYxMCwxOSBAQAogCSAqLwogCWFja19BUElDX2lycSgpOwogCisJLyoKKwkgKiBUYWlsIGVuZCBvZiBjbGVhcmluZyByZW1vdGUgSVJSIGJpdCAoZWl0aGVyIGJ5IGRlbGl2ZXJpbmcgdGhlIEVPSQorCSAqIG1lc3NhZ2UgdmlhIGlvLWFwaWMgRU9JIHJlZ2lzdGVyIHdyaXRlIG9yIHNpbXVsYXRpbmcgaXQgdXNpbmcKKwkgKiBtYXNrK2VkZ2UgZm9sbG93ZWQgYnkgdW5uYXNrK2xldmVsIGxvZ2ljKSBtYW51YWxseSB3aGVuIHRoZQorCSAqIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMgc2VlbiBhcyB0aGUgZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0CisJICogYXQgdGhlIGNwdS4KKwkgKi8KKwlpZiAoISh2ICYgKDEgPDwgKGkgJiAweDFmKSkpKSB7CisJCWF0b21pY19pbmMoJmlycV9taXNfY291bnQpOworCisJCWVvaV9pb2FwaWNfaXJxKGRlc2MpOworCX0KKwogCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCiAJaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7CiAJCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCkBAIC0yNTY5LDQxICsyNjU2LDkgQEAKIAkJCW1vdmVfbWFza2VkX2lycShpcnEpOwogCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAl9Ci0KLQkvKiBUYWlsIGVuZCBvZiB2ZXJzaW9uIDB4MTEgSS9PIEFQSUMgYnVnIHdvcmthcm91bmQgKi8KLQlpZiAoISh2ICYgKDEgPDwgKGkgJiAweDFmKSkpKSB7Ci0JCWF0b21pY19pbmMoJmlycV9taXNfY291bnQpOwotCQlzcGluX2xvY2soJmlvYXBpY19sb2NrKTsKLQkJX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKGNmZyk7Ci0JCV9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShjZmcpOwotCQlzcGluX3VubG9jaygmaW9hcGljX2xvY2spOwotCX0KIH0KIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBfX2VvaV9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Ci0KLQlmb3JfZWFjaF9pcnFfcGluKGVudHJ5LCBjZmctPmlycV8yX3BpbikKLQkJaW9fYXBpY19lb2koZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOwotfQotCi1zdGF0aWMgdm9pZAotZW9pX2lvYXBpY19pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JaXJxID0gZGVzYy0+aXJxOwotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fZW9pX2lvYXBpY19pcnEoaXJxLCBjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlyX2Fja19hcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKIHsKIAlhY2tfQVBJQ19pcnEoKTsKQEAgLTMxNTcsNiArMzIxMiw3IEBACiAJCQljb250aW51ZTsKIAogCQlkZXNjX25ldyA9IG1vdmVfaXJxX2Rlc2MoZGVzY19uZXcsIG5vZGUpOworCQljZmdfbmV3ID0gZGVzY19uZXctPmNoaXBfZGF0YTsKIAogCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIGNmZ19uZXcsIGFwaWMtPnRhcmdldF9jcHVzKCkpID09IDApCiAJCQlpcnEgPSBuZXc7CkBAIC0zNzA4LDc1ICszNzY0LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCiAKLSNpZmRlZiBDT05GSUdfWDg2X1VWCi0vKgotICogUmUtdGFyZ2V0IHRoZSBpcnEgdG8gdGhlIHNwZWNpZmllZCBDUFUgYW5kIGVuYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkCi0gKiBvbiB0aGUgc3BlY2lmaWVkIGJsYWRlIHRvIGFsbG93IHRoZSBzZW5kaW5nIG9mIE1TSXMgdG8gdGhlIHNwZWNpZmllZCBDUFUuCi0gKi8KLWludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqaXJxX25hbWUsIHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUsIGludCBtbXJfYmxhZGUsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQpCi17Ci0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKmVsaWdpYmxlX2NwdSA9IGNwdW1hc2tfb2YoY3B1KTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCWludCBtbXJfcG5vZGU7Ci0JdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7Ci0Jc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0KLQljZmcgPSBpcnFfY2ZnKGlycSk7Ci0KLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgZWxpZ2libGVfY3B1KTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ1dl9pcnFfY2hpcCwgaGFuZGxlX3BlcmNwdV9pcnEsCi0JCQkJICAgICAgaXJxX25hbWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0KLQltbXJfdmFsdWUgPSAwOwotCWVudHJ5ID0gKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICopJm1tcl92YWx1ZTsKLQllbnRyeS0+dmVjdG9yCQk9IGNmZy0+dmVjdG9yOwotCWVudHJ5LT5kZWxpdmVyeV9tb2RlCT0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7Ci0JZW50cnktPmRlc3RfbW9kZQk9IGFwaWMtPmlycV9kZXN0X21vZGU7Ci0JZW50cnktPnBvbGFyaXR5CQk9IDA7Ci0JZW50cnktPnRyaWdnZXIJCT0gMDsKLQllbnRyeS0+bWFzawkJPSAwOwotCWVudHJ5LT5kZXN0CQk9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZChlbGlnaWJsZV9jcHUpOwotCi0JbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobW1yX2JsYWRlKTsKLQl1dl93cml0ZV9nbG9iYWxfbW1yNjQobW1yX3Bub2RlLCBtbXJfb2Zmc2V0LCBtbXJfdmFsdWUpOwotCi0JaWYgKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykKLQkJc2VuZF9jbGVhbnVwX3ZlY3RvcihjZmcpOwotCi0JcmV0dXJuIGlycTsKLX0KLQotLyoKLSAqIERpc2FibGUgdGhlIHNwZWNpZmllZCBNTVIgbG9jYXRlZCBvbiB0aGUgc3BlY2lmaWVkIGJsYWRlIHNvIHRoYXQgTVNJcyBhcmUKLSAqIGxvbmdlciBhbGxvd2VkIHRvIGJlIHNlbnQuCi0gKi8KLXZvaWQgYXJjaF9kaXNhYmxlX3V2X2lycShpbnQgbW1yX2JsYWRlLCB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7Ci0Jc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OwotCWludCBtbXJfcG5vZGU7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5KSAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCi0JbW1yX3ZhbHVlID0gMDsKLQllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7Ci0JZW50cnktPm1hc2sgPSAxOwotCi0JbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobW1yX2JsYWRlKTsKLQl1dl93cml0ZV9nbG9iYWxfbW1yNjQobW1yX3Bub2RlLCBtbXJfb2Zmc2V0LCBtbXJfdmFsdWUpOwotfQotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogaW50IF9faW5pdCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKQogewogCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKQEAgLTM5NDQsNyArMzkzMSw3IEBACiAJICovCiAKIAlpZiAocGh5c2lkc19lbXB0eShhcGljX2lkX21hcCkpCi0JCWFwaWNfaWRfbWFwID0gYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwkJYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKCZwaHlzX2NwdV9wcmVzZW50X21hcCwgJmFwaWNfaWRfbWFwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKQEAgLTM5NjAsMTAgKzM5NDcsMTAgQEAKIAkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCiAJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCiAJICovCi0JaWYgKGFwaWMtPmNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgeworCWlmIChhcGljLT5jaGVja19hcGljaWRfdXNlZCgmYXBpY19pZF9tYXAsIGFwaWNfaWQpKSB7CiAKIAkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKSB7Ci0JCQlpZiAoIWFwaWMtPmNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBpKSkKKwkJCWlmICghYXBpYy0+Y2hlY2tfYXBpY2lkX3VzZWQoJmFwaWNfaWRfbWFwLCBpKSkKIAkJCQlicmVhazsKIAkJfQogCkBAIC0zOTc2LDcgKzM5NjMsNyBAQAogCQlhcGljX2lkID0gaTsKIAl9CiAKLQl0bXAgPSBhcGljLT5hcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7CisJYXBpYy0+YXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNfaWQsICZ0bXApOwogCXBoeXNpZHNfb3IoYXBpY19pZF9tYXAsIGFwaWNfaWRfbWFwLCB0bXApOwogCiAJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKQEAgLTQxMDYsNyArNDA5Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewogCQlyZXNbaV0ubmFtZSA9IG1lbTsKIAkJcmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7Ci0JCXNwcmludGYobWVtLCAgIklPQVBJQyAldSIsIGkpOworCQlzbnByaW50ZihtZW0sIElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUsICJJT0FQSUMgJXUiLCBpKTsKIAkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7CiAJfQogCkBAIC00MTQwLDE4ICs0MTI3LDE3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZmFrZV9pb2FwaWNfcGFnZToKICNlbmRpZgotCQkJaW9hcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykKLQkJCQlhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKIAkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7CiAJCX0KIAkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCi0JCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKLQkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIElPQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLAorCQkJX19maXhfdG9fdmlydChpZHgpICsgKGlvYXBpY19waHlzICYgflBBR0VfTUFTSyksCisJCQlpb2FwaWNfcGh5cyk7CiAJCWlkeCsrOwogCiAJCWlvYXBpY19yZXMtPnN0YXJ0ID0gaW9hcGljX3BoeXM7Ci0JCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7CisJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgSU9fQVBJQ19TTE9UX1NJWkUgLSAxOwogCQlpb2FwaWNfcmVzKys7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwppbmRleCA3ZmY2MWQ2Li42Mzg5NDMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwpAQCAtMzksNyArMzksOCBAQAogaW50IHVua25vd25fbm1pX3BhbmljOwogaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwogCi1zdGF0aWMgY3B1bWFza190IGJhY2t0cmFjZV9tYXNrIF9fcmVhZF9tb3N0bHk7CisvKiBGb3IgcmVsaWFiaWxpdHksIHdlJ3JlIHByZXBhcmVkIHRvIHdhc3RlIGJpdHMgaGVyZS4gKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChiYWNrdHJhY2VfbWFzaywgTlJfQ1BVUykgX19yZWFkX21vc3RseTsKIAogLyogbm1pX2FjdGl2ZToKICAqID4wOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZApAQCAtNDE0LDcgKzQxNSw3IEBACiAJfQogCiAJLyogV2UgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY2hlY2tfbm1pX3dhdGNoZG9nLCBoZW5jZSBOVUxMIGNoZWNrLiAqLwotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmJhY2t0cmFjZV9tYXNrKSkgeworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpKSB7CiAJCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7CS8qIFNlcmlhbGlzZSB0aGUgcHJpbnRrcyAqLwogCiAJCXNwaW5fbG9jaygmbG9jayk7CkBAIC00MjIsNyArNDIzLDcgQEAKIAkJc2hvd19yZWdzKHJlZ3MpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmYmFja3RyYWNlX21hc2spOworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKTsKIAogCQlyYyA9IDE7CiAJfQpAQCAtNTU4LDE0ICs1NTksMTQgQEAKIHsKIAlpbnQgaTsKIAotCWNwdW1hc2tfY29weSgmYmFja3RyYWNlX21hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jb3B5KHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spLCBjcHVfb25saW5lX21hc2spOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAic2VuZGluZyBOTUkgdG8gYWxsIENQVXM6XG4iKTsKIAlhcGljLT5zZW5kX0lQSV9hbGwoTk1JX1ZFQ1RPUik7CiAKIAkvKiBXYWl0IGZvciB1cCB0byAxMCBzZWNvbmRzIGZvciBhbGwgQ1BVcyB0byBkbyB0aGUgYmFja3RyYWNlICovCiAJZm9yIChpID0gMDsgaSA8IDEwICogMTAwMDsgaSsrKSB7Ci0JCWlmIChjcHVtYXNrX2VtcHR5KCZiYWNrdHJhY2VfbWFzaykpCisJCWlmIChjcHVtYXNrX2VtcHR5KHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKSkKIAkJCWJyZWFrOwogCQltZGVsYXkoMSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKaW5kZXggZWZhMDBlMi4uMDdjZGJkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCkBAIC0zMzQsMTAgKzMzNCw5IEBACiAJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1udW1hcV9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bWFxX2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgKm1hcCwgaW50IGFwaWNpZCkKIHsKLQlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKKwlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgKm1hcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBudW1hcV9jaGVja19hcGljaWRfcHJlc2VudChpbnQgYml0KQpAQCAtMzcxLDEwICszNzAsMTAgQEAKIAlyZXR1cm4gYXBpYyAhPSAwICYmIGlycSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHBoeXNpZF9tYXNrX3QgbnVtYXFfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgcGh5c19tYXApCitzdGF0aWMgaW5saW5lIHZvaWQgbnVtYXFfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgKnBoeXNfbWFwLCBwaHlzaWRfbWFza190ICpyZXRtYXApCiB7CiAJLyogV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhGVUwpOworCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHhGVUwsIHJldG1hcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG51bWFxX2NwdV90b19sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQpAQCAtNDAyLDEyICs0MDEsMTIgQEAKIAlyZXR1cm4gbG9naWNhbF9hcGljaWQgPj4gNDsKIH0KIAotc3RhdGljIGlubGluZSBwaHlzaWRfbWFza190IG51bWFxX2FwaWNpZF90b19jcHVfcHJlc2VudChpbnQgbG9naWNhbF9hcGljaWQpCitzdGF0aWMgdm9pZCBudW1hcV9hcGljaWRfdG9fY3B1X3ByZXNlbnQoaW50IGxvZ2ljYWxfYXBpY2lkLCBwaHlzaWRfbWFza190ICpyZXRtYXApCiB7CiAJaW50IG5vZGUgPSBudW1hcV9hcGljaWRfdG9fbm9kZShsb2dpY2FsX2FwaWNpZCk7CiAJaW50IGNwdSA9IF9fZmZzKGxvZ2ljYWxfYXBpY2lkICYgMHhmKTsKIAotCXJldHVybiBwaHlzaWRfbWFza19vZl9waHlzaWQoY3B1ICsgNCpub2RlKTsKKwlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGNwdSArIDQqbm9kZSwgcmV0bWFwKTsKIH0KIAogLyogV2hlcmUgdGhlIElPIGFyZWEgd2FzIG1hcHBlZCBvbiBtdWx0aXF1YWQsIGFsd2F5cyAwIG90aGVyd2lzZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKaW5kZXggMGMwMTgyYy4uMWE2NTU5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkuYXBpY2lkX3RvX25vZGUJCQk9IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUsCiAJLmNwdV90b19sb2dpY2FsX2FwaWNpZAkJPSBkZWZhdWx0X2NwdV90b19sb2dpY2FsX2FwaWNpZCwKIAkuY3B1X3ByZXNlbnRfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkLAotCS5hcGljaWRfdG9fY3B1X3ByZXNlbnQJCT0gZGVmYXVsdF9hcGljaWRfdG9fY3B1X3ByZXNlbnQsCisJLmFwaWNpZF90b19jcHVfcHJlc2VudAkJPSBwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkLAogCS5zZXR1cF9wb3J0aW9fcmVtYXAJCT0gTlVMTCwKIAkuY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudAk9IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCwKIAkuZW5hYmxlX2FwaWNfbW9kZQkJPSBOVUxMLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvc3VtbWl0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwppbmRleCA2NDVlY2M0Li45YjQxOTI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJcmV0dXJuIGNwdW1hc2tfb2YoMCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN1bW1pdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN1bW1pdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190ICptYXAsIGludCBhcGljaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjEsMTUgKzI2MSwxNSBAQAogCQlyZXR1cm4gQkFEX0FQSUNJRDsKIH0KIAotc3RhdGljIHBoeXNpZF9tYXNrX3Qgc3VtbWl0X2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190IHBoeXNfaWRfbWFwKQorc3RhdGljIHZvaWQgc3VtbWl0X2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190ICpwaHlzX2lkX21hcCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKQogewogCS8qIEZvciBjbHVzdGVyZWQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIGRvIHRoaXMgeWV0IC0gaGFjayAqLwotCXJldHVybiBwaHlzaWRzX3Byb21vdGUoMHgwRik7CisJcGh5c2lkc19wcm9tb3RlKDB4MEZMLCByZXRtYXApOwogfQogCi1zdGF0aWMgcGh5c2lkX21hc2tfdCBzdW1taXRfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBhcGljaWQpCitzdGF0aWMgdm9pZCBzdW1taXRfYXBpY2lkX3RvX2NwdV9wcmVzZW50KGludCBhcGljaWQsIHBoeXNpZF9tYXNrX3QgKnJldG1hcCkKIHsKLQlyZXR1cm4gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKDApOworCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoMCwgcmV0bWFwKTsKIH0KIAogc3RhdGljIGludCBzdW1taXRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgcGh5c2ljYWxfYXBpY2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggZjVmNTg4Ni4uMTMwYzRiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zNTIsMTQgKzM1MiwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkaXJfYWRkcnMpOyBpKyspIHsKIAkJYWxpYXMudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLmFsaWFzKTsKLQkJaWYgKGFsaWFzLnMuYmFzZSA9PSAwKSB7CisJCWlmIChhbGlhcy5zLmVuYWJsZSAmJiBhbGlhcy5zLmJhc2UgPT0gMCkgewogCQkJKnNpemUgPSAoMVVMIDw8IGFsaWFzLnMubV9hbGlhcyk7CiAJCQlyZWRpcmVjdC52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0ucmVkaXJlY3QpOwogCQkJKmJhc2UgPSAodW5zaWduZWQgbG9uZylyZWRpcmVjdC5zLmRlc3RfYmFzZSA8PCBERVNUX1NISUZUOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCUJVRygpOworCSpiYXNlID0gKnNpemUgPSAwOwogfQogCiBlbnVtIG1hcF90eXBlIHttYXBfd2IsIG1hcF91Y307CkBAIC00MDksNiArNDA5LDEyIEBACiAJCW1hcF9oaWdoKCJNTUlPSCIsIG1taW9oLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKIH0KIAorc3RhdGljIF9faW5pdCB2b2lkIG1hcF9sb3dfbW1ycyh2b2lkKQoreworCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9HTE9CQUxfTU1SMzJfQkFTRSwgVVZfR0xPQkFMX01NUjMyX1NJWkUpOworCWluaXRfZXh0cmFfbWFwcGluZ191YyhVVl9MT0NBTF9NTVJfQkFTRSwgVVZfTE9DQUxfTU1SX1NJWkUpOworfQorCiBzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX2luaXQodm9pZCkKIHsKIAlsb25nIHN0YXR1czsKQEAgLTU1MCw2ICs1NTYsOCBAQAogCXVuc2lnbmVkIGxvbmcgbW1yX2Jhc2UsIHByZXNlbnQsIHBhZGRyOwogCXVuc2lnbmVkIHNob3J0IHBub2RlX21hc2s7CiAKKwltYXBfbG93X21tcnMoKTsKKwogCW1fbl9jb25maWcudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9TSV9BRERSX01BUF9DT05GSUcpOwogCW1fdmFsID0gbV9uX2NvbmZpZy5zLm1fc2t0OwogCW5fdmFsID0gbV9uX2NvbmZpZy5zLm5fc2t0OwpAQCAtNjE5LDEyICs2MjcsMTIgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF9iYXNlID0gbG93bWVtX3JlZGlyX2Jhc2U7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfdG9wID0gbG93bWVtX3JlZGlyX3NpemU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5tX3ZhbCA9IG1fdmFsOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBtX3ZhbDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbl92YWw7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGUgPSBwbm9kZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSBwbm9kZV9tYXNrOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDFVTCA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggMTUxYWNlNi4uYjViNmIyMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMjA0LDcgKzIwNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC00MDMsNiArNDAyLDcgQEAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhcG1fc3VzcGVuZF93YWl0cXVldWUpOwogc3RhdGljIHN0cnVjdCBhcG1fdXNlciAqdXNlcl9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyh1c2VyX2xpc3RfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGFwbV9tdXRleCk7CiAKIC8qCiAgKiBTZXQgdXAgYSBzZWdtZW50IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVhbCBtb2RlIHNlZ21lbnQgMHg0MApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQVBNX0lPQ19TVEFOREJZOgotCQlsb2NrX2tlcm5lbCgpOworCQltdXRleF9sb2NrKCZhcG1fbXV0ZXgpOwogCQlpZiAoYXMtPnN0YW5kYnlzX3JlYWQgPiAwKSB7CiAJCQlhcy0+c3RhbmRieXNfcmVhZC0tOwogCQkJYXMtPnN0YW5kYnlzX3BlbmRpbmctLTsKQEAgLTE1NDAsMTAgKzE1NDAsMTAgQEAKIAkJCXF1ZXVlX2V2ZW50KEFQTV9VU0VSX1NUQU5EQlksIGFzKTsKIAkJaWYgKHN0YW5kYnlzX3BlbmRpbmcgPD0gMCkKIAkJCXN0YW5kYnkoKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmFwbV9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgQVBNX0lPQ19TVVNQRU5EOgotCQlsb2NrX2tlcm5lbCgpOworCQltdXRleF9sb2NrKCZhcG1fbXV0ZXgpOwogCQlpZiAoYXMtPnN1c3BlbmRzX3JlYWQgPiAwKSB7CiAJCQlhcy0+c3VzcGVuZHNfcmVhZC0tOwogCQkJYXMtPnN1c3BlbmRzX3BlbmRpbmctLTsKQEAgLTE1NTIsMTMgKzE1NTIsMTQgQEAKIAkJCXF1ZXVlX2V2ZW50KEFQTV9VU0VSX1NVU1BFTkQsIGFzKTsKIAkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPD0gMCkgewogCQkJcmV0ID0gc3VzcGVuZCgxKTsKKwkJCW11dGV4X3VubG9jaygmYXBtX211dGV4KTsKIAkJfSBlbHNlIHsKIAkJCWFzLT5zdXNwZW5kX3dhaXQgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZhcG1fbXV0ZXgpOwogCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFwbV9zdXNwZW5kX3dhaXRxdWV1ZSwKIAkJCQkJYXMtPnN1c3BlbmRfd2FpdCA9PSAwKTsKIAkJCXJldCA9IGFzLT5zdXNwZW5kX3Jlc3VsdDsKIAkJfQotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiByZXQ7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CkBAIC0xNjA4LDEyICsxNjA5LDEwIEBACiB7CiAJc3RydWN0IGFwbV91c2VyICphczsKIAotCWxvY2tfa2VybmVsKCk7CiAJYXMgPSBrbWFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImFwbTogY2Fubm90IGFsbG9jYXRlIHN0cnVjdCBvZiBzaXplICVkIGJ5dGVzXG4iLAogCQkgICAgICAgc2l6ZW9mKCphcykpOwotCQkgICAgICAgdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJYXMtPm1hZ2ljID0gQVBNX0JJT1NfTUFHSUM7CkBAIC0xNjM1LDcgKzE2MzQsNiBAQAogCXVzZXJfbGlzdCA9IGFzOwogCXNwaW5fdW5sb2NrKCZ1c2VyX2xpc3RfbG9jayk7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gYXM7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCA2ODUzN2U5Li4xZDJjYjM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiAjIERvbid0IHRyYWNlIGVhcmx5IHN0YWdlcyBvZiBhIHNlY29uZGFyeSBDUFUgYm9vdAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogQ0ZMQUdTX1JFTU9WRV9jb21tb24ubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9wZXJmX2V2ZW50Lm8gPSAtcGcKIGVuZGlmCiAKICMgTWFrZSBzdXJlIGxvYWRfcGVyY3B1X3NlZ21lbnQgaGFzIG5vIHN0YWNrcHJvdGVjdG9yCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCBjOTEwYTcxLi43MTI4YjM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogCQl9CiAJfQogCi0JZGlzcGxheV9jYWNoZWluZm8oYyk7CisJY3B1X2RldGVjdF9jYWNoZV9zaXplcyhjKTsKIAogCS8qIE11bHRpIGNvcmUgQ1BVPyAqLwogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA4KSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCmluZGV4IGM5NWU4MzEuLmU1OGQ5NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCkBAIC0yOTQsNyArMjk0LDcgQEAKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUkVQX0dPT0QpOwogCX0KIAotCWRpc3BsYXlfY2FjaGVpbmZvKGMpOworCWNwdV9kZXRlY3RfY2FjaGVfc2l6ZXMoYyk7CiB9CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggY2MyNWMyYi4uYTRlYzhiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZGVmYXVsdF9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JZGlzcGxheV9jYWNoZWluZm8oYyk7CisJY3B1X2RldGVjdF9jYWNoZV9zaXplcyhjKTsKICNlbHNlCiAJLyogTm90IG11Y2ggd2UgY2FuIGRvIGhlcmUuLi4gKi8KIAkvKiBDaGVjayBpZiBhdCBsZWFzdCBpdCBoYXMgY3B1aWQgKi8KQEAgLTM4Myw3ICszODMsNyBAQAogCX0KIH0KIAotdm9pZCBfX2NwdWluaXQgZGlzcGxheV9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKQordm9pZCBfX2NwdWluaXQgY3B1X2RldGVjdF9jYWNoZV9zaXplcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdW5zaWduZWQgaW50IG4sIGR1bW15LCBlYngsIGVjeCwgZWR4LCBsMnNpemU7CiAKQEAgLTM5MSw4ICszOTEsNiBAQAogCiAJaWYgKG4gPj0gMHg4MDAwMDAwNSkgewogCQljcHVpZCgweDgwMDAwMDA1LCAmZHVtbXksICZlYngsICZlY3gsICZlZHgpOwotCQlwcmludGsoS0VSTl9JTkZPICJDUFU6IEwxIEkgQ2FjaGU6ICVkSyAoJWQgYnl0ZXMvbGluZSksIEQgY2FjaGUgJWRLICglZCBieXRlcy9saW5lKVxuIiwKLQkJCQllZHg+PjI0LCBlZHgmMHhGRiwgZWN4Pj4yNCwgZWN4JjB4RkYpOwogCQljLT54ODZfY2FjaGVfc2l6ZSA9IChlY3g+PjI0KSArIChlZHg+PjI0KTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCS8qIE9uIEs4IEwxIFRMQiBpcyBpbmNsdXNpdmUsIHNvIGRvbid0IGNvdW50IGl0ICovCkBAIC00MjIsOSArNDIwLDYgQEAKICNlbmRpZgogCiAJYy0+eDg2X2NhY2hlX3NpemUgPSBsMnNpemU7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDUFU6IEwyIENhY2hlOiAlZEsgKCVkIGJ5dGVzL2xpbmUpXG4iLAotCQkJbDJzaXplLCBlY3ggJiAweEZGKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgZGV0ZWN0X2h0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTY1OSwyNCArNjU0LDMxIEBACiAJY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNvbnN0ICpjZGV2OwogCWludCBjb3VudCA9IDA7CiAKKyNpZmRlZiBQUk9DRVNTT1JfU0VMRUNUCiAJcHJpbnRrKEtFUk5fSU5GTyAiS0VSTkVMIHN1cHBvcnRlZCBjcHVzOlxuIik7CisjZW5kaWYKKwogCWZvciAoY2RldiA9IF9feDg2X2NwdV9kZXZfc3RhcnQ7IGNkZXYgPCBfX3g4Nl9jcHVfZGV2X2VuZDsgY2RldisrKSB7CiAJCWNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjcHVkZXYgPSAqY2RldjsKLQkJdW5zaWduZWQgaW50IGo7CiAKIAkJaWYgKGNvdW50ID49IFg4Nl9WRU5ET1JfTlVNKQogCQkJYnJlYWs7CiAJCWNwdV9kZXZzW2NvdW50XSA9IGNwdWRldjsKIAkJY291bnQrKzsKIAotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpZiAoIWNwdWRldi0+Y19pZGVudFtqXSkKLQkJCQljb250aW51ZTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiAgJXMgJXNcbiIsIGNwdWRldi0+Y192ZW5kb3IsCi0JCQkJY3B1ZGV2LT5jX2lkZW50W2pdKTsKLQkJfQotCX0KKyNpZmRlZiBQUk9DRVNTT1JfU0VMRUNUCisJCXsKKwkJCXVuc2lnbmVkIGludCBqOwogCisJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQkJaWYgKCFjcHVkZXYtPmNfaWRlbnRbal0pCisJCQkJCWNvbnRpbnVlOworCQkJCXByaW50ayhLRVJOX0lORk8gIiAgJXMgJXNcbiIsIGNwdWRldi0+Y192ZW5kb3IsCisJCQkJCWNwdWRldi0+Y19pZGVudFtqXSk7CisJCQl9CisJCX0KKyNlbmRpZgorCX0KIAllYXJseV9pZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOwogfQogCkBAIC04MzcsMTAgKzgzOSw4IEBACiAJCQlib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5W2ldICY9IGMtPng4Nl9jYXBhYmlsaXR5W2ldOwogCX0KIAotI2lmZGVmIENPTkZJR19YODZfTUNFCiAJLyogSW5pdCBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiBpZiBhdmFpbGFibGUuICovCi0JbWNoZWNrX2luaXQoYyk7Ci0jZW5kaWYKKwltY2hlY2tfY3B1X2luaXQoYyk7CiAKIAlzZWxlY3RfaWRsZV9yb3V0aW5lKGMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaAppbmRleCA2ZGU5YTkwLi4zNjI0ZThhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKQEAgLTMyLDYgKzMyLDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqY29uc3QgX194ODZfY3B1X2Rldl9zdGFydFtdLAogCQkJICAgICpjb25zdCBfX3g4Nl9jcHVfZGV2X2VuZFtdOwogCi1leHRlcm4gdm9pZCBkaXNwbGF5X2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworZXh0ZXJuIHZvaWQgY3B1X2RldGVjdF9jYWNoZV9zaXplcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCA3ZDVjM2IwLi44YjU4MWQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC01MjYsMTUgKzUyNiwyMSBAQAogCiBzdGF0aWMgaW50IGFjcGlfY3B1ZnJlcV9ibGFja2xpc3Qoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCS8qIGh0dHA6Ly93d3cuaW50ZWwuY29tL0Fzc2V0cy9QREYvc3BlY3VwZGF0ZS8zMTQ1NTQucGRmCisJLyogSW50ZWwgWGVvbiBQcm9jZXNzb3IgNzEwMCBTZXJpZXMgU3BlY2lmaWNhdGlvbiBVcGRhdGUKKwkgKiBodHRwOi8vd3d3LmludGVsLmNvbS9Bc3NldHMvUERGL3NwZWN1cGRhdGUvMzE0NTU0LnBkZgogCSAqIEFMMzA6IEEgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gKE1DRSkgT2NjdXJyaW5nIGR1cmluZyBhbgogCSAqIEVuaGFuY2VkIEludGVsIFNwZWVkU3RlcCBUZWNobm9sb2d5IFJhdGlvIENoYW5nZSBNYXkgQ2F1c2UKLQkgKiBCb3RoIFByb2Nlc3NvciBDb3JlcyB0byBMb2NrIFVwIHdoZW4gSFQgaXMgZW5hYmxlZCovCisJICogQm90aCBQcm9jZXNzb3IgQ29yZXMgdG8gTG9jayBVcC4gKi8KIAlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CiAJCWlmICgoYy0+eDg2ID09IDE1KSAmJgogCQkgICAgKGMtPng4Nl9tb2RlbCA9PSA2KSAmJgotCQkgICAgKGMtPng4Nl9tYXNrID09IDgpICYmIHNtdF9jYXBhYmxlKCkpCisJCSAgICAoYy0+eDg2X21hc2sgPT0gOCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImFjcGktY3B1ZnJlcTogSW50ZWwoUikgIgorCQkJICAgICJYZW9uKFIpIDcxMDAgRXJyYXRhIEFMMzAsIHByb2Nlc3NvcnMgbWF5ICIKKwkJCSAgICAibG9jayB1cCBvbiBmcmVxdWVuY3kgY2hhbmdlczogZGlzYWJsaW5nICIKKwkJCSAgICAiYWNwaS1jcHVmcmVxLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJICAgIH0KIAkJfQogCXJldHVybiAwOwogfQpAQCAtNTQ5LDEzICs1NTUsMTggQEAKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEocG9saWN5LT5jcHUpOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqcGVyZjsKKyNpZmRlZiBDT05GSUdfU01QCisJc3RhdGljIGludCBibGFja2xpc3RlZDsKKyNlbmRpZgogCiAJZHByaW50aygiYWNwaV9jcHVmcmVxX2NwdV9pbml0XG4iKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlyZXN1bHQgPSBhY3BpX2NwdWZyZXFfYmxhY2tsaXN0KGMpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7CisJaWYgKGJsYWNrbGlzdGVkKQorCQlyZXR1cm4gYmxhY2tsaXN0ZWQ7CisJYmxhY2tsaXN0ZWQgPSBhY3BpX2NwdWZyZXFfYmxhY2tsaXN0KGMpOworCWlmIChibGFja2xpc3RlZCkKKwkJcmV0dXJuIGJsYWNrbGlzdGVkOwogI2VuZGlmCiAKIAlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGNlMmVkM2UuLmNhYmQyZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC04MTMsNyArODEzLDcgQEAKIAkJCW1lbWNweShlYmxjciwgc2FtdWVsMl9lYmxjciwgc2l6ZW9mKHNhbXVlbDJfZWJsY3IpKTsKIAkJCWJyZWFrOwogCQljYXNlIDEgLi4uIDE1OgotCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CisJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMjsKIAkJCWlmIChjLT54ODZfbWFzayA8IDgpIHsKIAkJCQljcHVfbW9kZWwgPSBDUFVfU0FNVUVMMjsKIAkJCQljcHVuYW1lID0gIkMzICdTYW11ZWwgMicgW0M1Ql0iOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA2Mzk0YWE1Li4zZjEyZGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAkJICogc2V0IGl0IHRvIDEgdG8gYXZvaWQgcHJvYmxlbXMgaW4gdGhlIGZ1dHVyZS4KIAkJICogRm9yIGFsbCBvdGhlcnMgaXQncyBhIEJJT1MgYnVnLgogCQkgKi8KLQkJaWYgKCFib290X2NwdV9kYXRhLng4NiA9PSAweDExKQorCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgIT0gMHgxMSkKIAkJCXByaW50ayhLRVJOX0VSUiBGV19XQVJOIFBGWCAiSW52YWxpZCB6ZXJvIHRyYW5zaXRpb24gIgogCQkJCSJsYXRlbmN5XG4iKTsKIAkJbWF4X2xhdGVuY3kgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggNjkxMWU5MS4uM2FlNWE3YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC0yMzIsMjggKzIzMiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZ2V0X2ZyZXFfZGF0YSB7Ci0JdW5zaWduZWQgaW50IHNwZWVkOwotCXVuc2lnbmVkIGludCBwcm9jZXNzb3I7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRfZnJlcV9kYXRhKHZvaWQgKl9kYXRhKQorc3RhdGljIHZvaWQgZ2V0X2ZyZXFfZGF0YSh2b2lkICpfc3BlZWQpCiB7Ci0Jc3RydWN0IGdldF9mcmVxX2RhdGEgKmRhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBpbnQgKnNwZWVkID0gX3NwZWVkOwogCi0JZGF0YS0+c3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShkYXRhLT5wcm9jZXNzb3IpOworCSpzcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgZ2V0X2ZyZXFfZGF0YSBkYXRhID0geyAucHJvY2Vzc29yID0gY3B1IH07CisJdW5zaWduZWQgaW50IHNwZWVkOwogCiAJLyogWW91J3JlIHN1cHBvc2VkIHRvIGVuc3VyZSBDUFUgaXMgb25saW5lLiAqLwotCWlmIChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBnZXRfZnJlcV9kYXRhLCAmZGF0YSwgMSkgIT0gMCkKKwlpZiAoc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZ2V0X2ZyZXFfZGF0YSwgJnNwZWVkLCAxKSAhPSAwKQogCQlCVUcoKTsKIAotCWRwcmludGsoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgZGF0YS5zcGVlZCk7Ci0JcmV0dXJuIGRhdGEuc3BlZWQ7CisJZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CisJcmV0dXJuIHNwZWVkOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwppbmRleCAxOTgwN2I4Li40ZmJkMzg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAkvKiBIYW5kbGUgdGhlIEdYIChGb3JtYWxseSBrbm93biBhcyB0aGUgR1gyKSAqLwogCiAJaWYgKGMtPng4NiA9PSA1ICYmIGMtPng4Nl9tb2RlbCA9PSA1KQotCQlkaXNwbGF5X2NhY2hlaW5mbyhjKTsKKwkJY3B1X2RldGVjdF9jYWNoZV9zaXplcyhjKTsKIAllbHNlCiAJCWluaXRfY3lyaXgoYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCA4MDRjNDBlLi4wZGY0YzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTQ4OCwyMiArNDg4LDYgQEAKICNlbmRpZgogCX0KIAotCWlmICh0cmFjZSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiBUcmFjZSBjYWNoZTogJWRLIHVvcHMiLCB0cmFjZSk7Ci0JZWxzZSBpZiAobDFpKQotCQlwcmludGsoS0VSTl9JTkZPICJDUFU6IEwxIEkgY2FjaGU6ICVkSyIsIGwxaSk7Ci0KLQlpZiAobDFkKQotCQlwcmludGsoS0VSTl9DT05UICIsIEwxIEQgY2FjaGU6ICVkS1xuIiwgbDFkKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0KLQlpZiAobDIpCi0JCXByaW50ayhLRVJOX0lORk8gIkNQVTogTDIgY2FjaGU6ICVkS1xuIiwgbDIpOwotCi0JaWYgKGwzKQotCQlwcmludGsoS0VSTl9JTkZPICJDUFU6IEwzIGNhY2hlOiAlZEtcbiIsIGwzKTsKLQogCWMtPng4Nl9jYWNoZV9zaXplID0gbDMgPyBsMyA6IChsMiA/IGwyIDogKGwxaStsMWQpKTsKIAogCXJldHVybiBsMjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggYjE1OThhOS4uMGJjYWEzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTQ2LDYgKzQ2LDkgQEAKIAogI2luY2x1ZGUgIm1jZS1pbnRlcm5hbC5oIgogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvbWNlLmg+CisKIGludCBtY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseTsKIAogI2RlZmluZSBNSVNDX01DRUxPR19NSU5PUgkyMjcKQEAgLTg1LDE4ICs4OCwyNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2UsIG1jZXNfc2Vlbik7CiBzdGF0aWMgaW50CQkJY3B1X21pc3Npbmc7CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQorLyoKKyAqIENQVS9jaGlwc2V0IHNwZWNpZmljIEVEQUMgY29kZSBjYW4gcmVnaXN0ZXIgYSBub3RpZmllciBjYWxsIGhlcmUgdG8gcHJpbnQKKyAqIE1DRSBlcnJvcnMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtLgorICovCitBVE9NSUNfTk9USUZJRVJfSEVBRCh4ODZfbWNlX2RlY29kZXJfY2hhaW4pOworRVhQT1JUX1NZTUJPTF9HUEwoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKKworc3RhdGljIGludCBkZWZhdWx0X2RlY29kZV9tY2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKIHsKIAlwcl9lbWVyZygiTm8gaHVtYW4gcmVhZGFibGUgTUNFIGRlY29kaW5nIHN1cHBvcnQgb24gdGhpcyBDUFUgdHlwZS5cbiIpOwogCXByX2VtZXJnKCJSdW4gdGhlIG1lc3NhZ2UgdGhyb3VnaCAnbWNlbG9nIC0tYXNjaWknIHRvIGRlY29kZS5cbiIpOworCisJcmV0dXJuIE5PVElGWV9TVE9QOwogfQogCi0vKgotICogQ1BVL2NoaXBzZXQgc3BlY2lmaWMgRURBQyBjb2RlIGNhbiByZWdpc3RlciBhIGNhbGxiYWNrIGhlcmUgdG8gcHJpbnQKLSAqIE1DRSBlcnJvcnMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtOgotICovCi12b2lkICgqeDg2X21jZV9kZWNvZGVfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pID0gZGVmYXVsdF9kZWNvZGVfbWNlOwotRVhQT1JUX1NZTUJPTCh4ODZfbWNlX2RlY29kZV9jYWxsYmFjayk7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1jZV9kZWNfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkZWZhdWx0X2RlY29kZV9tY2UsCisJLnByaW9yaXR5ICAgICAgPSAtMSwKK307CiAKIC8qIE1DQSBiYW5rcyBwb2xsZWQgYnkgdGhlIHBlcmlvZCBwb2xsaW5nIHRpbWVyIGZvciBjb3JyZWN0ZWQgZXZlbnRzICovCiBERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpID0gewpAQCAtMTQxLDYgKzE1Miw5IEBACiB7CiAJdW5zaWduZWQgbmV4dCwgZW50cnk7CiAKKwkvKiBFbWl0IHRoZSB0cmFjZSByZWNvcmQ6ICovCisJdHJhY2VfbWNlX3JlY29yZChtY2UpOworCiAJbWNlLT5maW5pc2hlZCA9IDA7CiAJd21iKCk7CiAJZm9yICg7OykgewpAQCAtMjA0LDkgKzIxOCw5IEBACiAKIAkvKgogCSAqIFByaW50IG91dCBodW1hbi1yZWFkYWJsZSBkZXRhaWxzIGFib3V0IHRoZSBNQ0UgZXJyb3IsCi0JICogKGlmIHRoZSBDUFUgaGFzIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGF0KToKKwkgKiAoaWYgdGhlIENQVSBoYXMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoYXQpCiAJICovCi0JeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sobSk7CisJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgbSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZV9oZWFkKHZvaWQpCkBAIC0xMTIyLDcgKzExMzYsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgbWNlX25leHRfaW50ZXJ2YWwpOyAvKiBpbiBqaWZmaWVzICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRpbWVyX2xpc3QsIG1jZV90aW1lcik7CiAKLXN0YXRpYyB2b2lkIG1jaGVja190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBtY2Vfc3RhcnRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB0aW1lcl9saXN0ICp0ID0gJnBlcl9jcHUobWNlX3RpbWVyLCBkYXRhKTsKIAlpbnQgKm47CkBAIC0xMTg3LDcgKzEyMDEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobWNlX25vdGlmeV9pcnEpOwogCi1zdGF0aWMgaW50IG1jZV9iYW5rc19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBfX21jaGVja19jcHVfbWNlX2JhbmtzX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTIwNiw3ICsxMjIwLDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIE1hY2hpbmUgQ2hlY2tzIGZvciBhIENQVS4KICAqLwotc3RhdGljIGludCBfX2NwdWluaXQgbWNlX2NhcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBfX21jaGVja19jcHVfY2FwX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBiOwogCXU2NCBjYXA7CkBAIC0xMjE0LDcgKzEyMjgsOCBAQAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwogCiAJYiA9IGNhcCAmIE1DR19CQU5LQ05UX01BU0s7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKKwlpZiAoIWJhbmtzKQorCQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOwogCiAJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTIyNyw3ICsxMjQyLDcgQEAKIAlXQVJOX09OKGJhbmtzICE9IDAgJiYgYiAhPSBiYW5rcyk7CiAJYmFua3MgPSBiOwogCWlmICghbWNlX2JhbmtzKSB7Ci0JCWludCBlcnIgPSBtY2VfYmFua3NfaW5pdCgpOworCQlpbnQgZXJyID0gX19tY2hlY2tfY3B1X21jZV9iYW5rc19pbml0KCk7CiAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xMjQzLDcgKzEyNTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtY2VfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19tY2hlY2tfY3B1X2luaXRfZ2VuZXJpYyh2b2lkKQogewogCW1jZV9iYW5rc190IGFsbF9iYW5rczsKIAl1NjQgY2FwOwpAQCAtMTI3Miw3ICsxMjg3LDcgQEAKIH0KIAogLyogQWRkIHBlciBDUFUgc3BlY2lmaWMgd29ya2Fyb3VuZHMgaGVyZSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgbWNlX2NwdV9xdWlya3Moc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIGludCBfX2NwdWluaXQgX19tY2hlY2tfY3B1X2FwcGx5X3F1aXJrcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9VTktOT1dOKSB7CiAJCXByX2luZm8oIk1DRTogdW5rbm93biBDUFUgdHlwZSAtIG5vdCBlbmFibGluZyBNQ0Ugc3VwcG9ydC5cbiIpOwpAQCAtMTM0MCw3ICsxMzU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IG1jZV9hbmNpZW50X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IF9fbWNoZWNrX2NwdV9hbmNpZW50X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWlmIChjLT54ODYgIT0gNSkKIAkJcmV0dXJuOwpAQCAtMTM1NCw3ICsxMzY5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG1jZV9jcHVfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgX19tY2hlY2tfY3B1X2luaXRfdmVuZG9yKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlzd2l0Y2ggKGMtPng4Nl92ZW5kb3IpIHsKIAljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CkBAIC0xMzY4LDcgKzEzODMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbWNlX2luaXRfdGltZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fbWNoZWNrX2NwdV9pbml0X3RpbWVyKHZvaWQpCiB7CiAJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpOwogCWludCAqbiA9ICZfX2dldF9jcHVfdmFyKG1jZV9uZXh0X2ludGVydmFsKTsKQEAgLTEzNzksNyArMTM5NCw3IEBACiAJKm4gPSBjaGVja19pbnRlcnZhbCAqIEhaOwogCWlmICghKm4pCiAJCXJldHVybjsKLQlzZXR1cF90aW1lcih0LCBtY2hlY2tfdGltZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc2V0dXBfdGltZXIodCwgbWNlX3N0YXJ0X3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXQtPmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAqbik7CiAJYWRkX3RpbWVyX29uKHQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CkBAIC0xMzk5LDI3ICsxNDE0LDI4IEBACiAgKiBDYWxsZWQgZm9yIGVhY2ggYm9vdGVkIENQVSB0byBzZXQgdXAgbWFjaGluZSBjaGVja3MuCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgb2ZmOgogICovCi12b2lkIF9fY3B1aW5pdCBtY2hlY2tfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit2b2lkIF9fY3B1aW5pdCBtY2hlY2tfY3B1X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWlmIChtY2VfZGlzYWJsZWQpCiAJCXJldHVybjsKIAotCW1jZV9hbmNpZW50X2luaXQoYyk7CisJX19tY2hlY2tfY3B1X2FuY2llbnRfaW5pdChjKTsKIAogCWlmICghbWNlX2F2YWlsYWJsZShjKSkKIAkJcmV0dXJuOwogCi0JaWYgKG1jZV9jYXBfaW5pdCgpIDwgMCB8fCBtY2VfY3B1X3F1aXJrcyhjKSA8IDApIHsKKwlpZiAoX19tY2hlY2tfY3B1X2NhcF9pbml0KCkgPCAwIHx8IF9fbWNoZWNrX2NwdV9hcHBseV9xdWlya3MoYykgPCAwKSB7CiAJCW1jZV9kaXNhYmxlZCA9IDE7CiAJCXJldHVybjsKIAl9CiAKIAltYWNoaW5lX2NoZWNrX3ZlY3RvciA9IGRvX21hY2hpbmVfY2hlY2s7CiAKLQltY2VfaW5pdCgpOwotCW1jZV9jcHVfZmVhdHVyZXMoYyk7Ci0JbWNlX2luaXRfdGltZXIoKTsKKwlfX21jaGVja19jcHVfaW5pdF9nZW5lcmljKCk7CisJX19tY2hlY2tfY3B1X2luaXRfdmVuZG9yKGMpOworCV9fbWNoZWNrX2NwdV9pbml0X3RpbWVyKCk7CiAJSU5JVF9XT1JLKCZfX2dldF9jcHVfdmFyKG1jZV93b3JrKSwgbWNlX3Byb2Nlc3Nfd29yayk7CisKIH0KIAogLyoKQEAgLTE2MzksNiArMTY1NSwxNSBAQAogfQogX19zZXR1cCgibWNlIiwgbWNoZWNrX2VuYWJsZSk7CiAKK2ludCBfX2luaXQgbWNoZWNrX2luaXQodm9pZCkKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgJm1jZV9kZWNfbmIpOworCisJbWNoZWNrX2ludGVsX3RoZXJtX2luaXQoKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU3lzZnMgc3VwcG9ydAogICovCkBAIC0xNjQ3LDcgKzE2NzIsNyBAQAogICogRGlzYWJsZSBtYWNoaW5lIGNoZWNrcyBvbiBzdXNwZW5kIGFuZCBzaHV0ZG93bi4gV2UgY2FuJ3QgcmVhbGx5IGhhbmRsZQogICogdGhlbSBsYXRlci4KICAqLwotc3RhdGljIGludCBtY2VfZGlzYWJsZSh2b2lkKQorc3RhdGljIGludCBtY2VfZGlzYWJsZV9lcnJvcl9yZXBvcnRpbmcodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTY2MiwxMiArMTY4NywxMiBAQAogCiBzdGF0aWMgaW50IG1jZV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gbWNlX2Rpc2FibGUoKTsKKwlyZXR1cm4gbWNlX2Rpc2FibGVfZXJyb3JfcmVwb3J0aW5nKCk7CiB9CiAKIHN0YXRpYyBpbnQgbWNlX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIG1jZV9kaXNhYmxlKCk7CisJcmV0dXJuIG1jZV9kaXNhYmxlX2Vycm9yX3JlcG9ydGluZygpOwogfQogCiAvKgpAQCAtMTY3Nyw4ICsxNzAyLDggQEAKICAqLwogc3RhdGljIGludCBtY2VfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JbWNlX2luaXQoKTsKLQltY2VfY3B1X2ZlYXR1cmVzKCZjdXJyZW50X2NwdV9kYXRhKTsKKwlfX21jaGVja19jcHVfaW5pdF9nZW5lcmljKCk7CisJX19tY2hlY2tfY3B1X2luaXRfdmVuZG9yKCZjdXJyZW50X2NwdV9kYXRhKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY4OCw4ICsxNzEzLDggQEAKIAlkZWxfdGltZXJfc3luYygmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpKTsKIAlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQogCQlyZXR1cm47Ci0JbWNlX2luaXQoKTsKLQltY2VfaW5pdF90aW1lcigpOworCV9fbWNoZWNrX2NwdV9pbml0X2dlbmVyaWMoKTsKKwlfX21jaGVja19jcHVfaW5pdF90aW1lcigpOwogfQogCiAvKiBSZWluaXQgTUNFcyBhZnRlciB1c2VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLwpAQCAtMTcxNSw3ICsxNzQwLDcgQEAKIAljbWNpX3JlZW5hYmxlKCk7CiAJY21jaV9yZWNoZWNrKCk7CiAJaWYgKGFsbCkKLQkJbWNlX2luaXRfdGltZXIoKTsKKwkJX19tY2hlY2tfY3B1X2luaXRfdGltZXIoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbWNlX3N5c2NsYXNzID0gewpAQCAtMTkyOCwxMyArMTk1MywxNCBAQAogfQogCiAvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1hY2hpbmUgY2hlY2tzIG9uIG9mZmxpbmVkIENQVXMuICovCi1zdGF0aWMgdm9pZCBtY2VfZGlzYWJsZV9jcHUodm9pZCAqaCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBtY2VfZGlzYWJsZV9jcHUodm9pZCAqaCkKIHsKIAl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CiAJaW50IGk7CiAKIAlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQogCQlyZXR1cm47CisKIAlpZiAoIShhY3Rpb24gJiBDUFVfVEFTS1NfRlJPWkVOKSkKIAkJY21jaV9jbGVhcigpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CkBAIC0xOTQ1LDcgKzE5NzEsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbWNlX3JlZW5hYmxlX2NwdSh2b2lkICpoKQorc3RhdGljIHZvaWQgX19jcHVpbml0IG1jZV9yZWVuYWJsZV9jcHUodm9pZCAqaCkKIHsKIAl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CiAJaW50IGk7CkBAIC0yMDI0LDcgKzIwNTAsNyBAQAogCX0KIH0KIAotc3RhdGljIF9faW5pdCBpbnQgbWNlX2luaXRfZGV2aWNlKHZvaWQpCitzdGF0aWMgX19pbml0IGludCBtY2hlY2tfaW5pdF9kZXZpY2Uodm9pZCkKIHsKIAlpbnQgZXJyOwogCWludCBpID0gMDsKQEAgLTIwNTIsNyArMjA3OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotZGV2aWNlX2luaXRjYWxsKG1jZV9pbml0X2RldmljZSk7CitkZXZpY2VfaW5pdGNhbGwobWNoZWNrX2luaXRfZGV2aWNlKTsKIAogLyoKICAqIE9sZCBzdHlsZSBib290IG9wdGlvbnMgcGFyc2luZy4gT25seSBmb3IgY29tcGF0aWJpbGl0eS4KQEAgLTIxMDAsNyArMjEyNiw3IEBACiBERUZJTkVfU0lNUExFX0FUVFJJQlVURShmYWtlX3BhbmljX2ZvcHMsIGZha2VfcGFuaWNfZ2V0LAogCQkJZmFrZV9wYW5pY19zZXQsICIlbGx1XG4iKTsKIAotc3RhdGljIGludCBfX2luaXQgbWNlX2RlYnVnZnNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWNoZWNrX2RlYnVnZnNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmRtY2UsICpmZmFrZV9wYW5pYzsKIApAQCAtMjExNCw1ICsyMTQwLDUgQEAKIAogCXJldHVybiAwOwogfQotbGF0ZV9pbml0Y2FsbChtY2VfZGVidWdmc19pbml0KTsKK2xhdGVfaW5pdGNhbGwobWNoZWNrX2RlYnVnZnNfaW5pdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IGIzYTFkYmEuLjRmZWY5ODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtNDksNiArNDksOCBAQAogCiBzdGF0aWMgYXRvbWljX3QgdGhlcm1fdGhyb3RfZW4JPSBBVE9NSUNfSU5JVCgwKTsKIAorc3RhdGljIHUzMiBsdnR0aG1yX2luaXQgX19yZWFkX21vc3RseTsKKwogI2lmZGVmIENPTkZJR19TWVNGUwogI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhfbmFtZSkJCQkJXAogCXN0YXRpYyBTWVNERVZfQVRUUihfbmFtZSwgMDQ0NCwgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNfbmFtZSwgTlVMTCkKQEAgLTI1NCw2ICsyNTYsMTggQEAKIAlhY2tfQVBJQ19pcnEoKTsKIH0KIAordm9pZCBfX2luaXQgbWNoZWNrX2ludGVsX3RoZXJtX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gYm9vdCBDUFUuIFNhdmUgdGhlIGluaXQgdGhlcm1hbAorCSAqIExWVCB2YWx1ZSBvbiBCU1AgYW5kIHVzZSB0aGF0IHZhbHVlIHRvIHJlc3RvcmUgQVBzJyB0aGVybWFsIExWVAorCSAqIGVudHJ5IEJJT1MgcHJvZ3JhbW1lZCBsYXRlcgorCSAqLworCWlmIChjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BQ1BJKSAmJgorCQljcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BQ0MpKQorCQlsdnR0aG1yX2luaXQgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKK30KKwogdm9pZCBpbnRlbF9pbml0X3RoZXJtYWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yNzAsNyArMjg0LDIwIEBACiAJICogc2luY2UgaXQgbWlnaHQgYmUgZGVsaXZlcmVkIHZpYSBTTUkgYWxyZWFkeToKIAkgKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7Ci0JaCA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOworCisJLyoKKwkgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGVybWFsIExWVCBlbnRyaWVzIG9uIGFsbCBBUHMgYWx3YXlzIHJlYWRzCisJICogMHgxMDAwMCBiZWNhdXNlIEFQcyBhcmUgd29rZW4gdXAgYnkgQlNQIGlzc3VpbmcgSU5JVC1TSVBJLVNJUEkKKwkgKiBzZXF1ZW5jZSB0byB0aGVtIGFuZCBMVlQgcmVnaXN0ZXJzIGFyZSByZXNldCB0byAwcyBleGNlcHQgZm9yCisJICogdGhlIG1hc2sgYml0cyB3aGljaCBhcmUgc2V0IHRvIDFzIHdoZW4gQVBzIHJlY2VpdmUgSU5JVCBJUEkuCisJICogQWx3YXlzIHJlc3RvcmUgdGhlIHZhbHVlIHRoYXQgQklPUyBoYXMgcHJvZ3JhbW1lZCBvbiBBUCBiYXNlZCBvbgorCSAqIEJTUCdzIGluZm8gd2Ugc2F2ZWQgc2luY2UgQklPUyBpcyBhbHdheXMgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZQorCSAqIGZvciBhbGwgdGhyZWFkcy9jb3JlcworCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBsdnR0aG1yX2luaXQpOworCisJaCA9IGx2dHRobXJfaW5pdDsKKwogCWlmICgobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSkgJiYgKGggJiBBUElDX0RNX1NNSSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICJDUFUlZDogVGhlcm1hbCBtb25pdG9yaW5nIGhhbmRsZWQgYnkgU01JXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMzE1NzM4Yy4uNzNjODZkYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC04NDYsNyArODQ2LDcgQEAKIAlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwogCiAJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKLQlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAidG90YWwgUkFNIGNvdmVyZWQ6ICVsZE1cbiIsCiAJICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOwogCiAJaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCBiNTgwMWMzLi5jMWJiZWQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtNzcsNiArNzcsMTggQEAKIAlzdHJ1Y3QgZGVidWdfc3RvcmUJKmRzOwogfTsKIAorc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgeworCXVuc2lnbmVkIGxvbmcJaWR4bXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJaW50CQljb2RlOworfTsKKworI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UKGMsIG0pIHsgLmNvZGUgPSAoYyksIC5pZHhtc2tbMF0gPSAobSkgfQorI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORCAgeyAuY29kZSA9IDAsIC5pZHhtc2tbMF0gPSAwIH0KKworI2RlZmluZSBmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGUsIGMpIFwKKwlmb3IgKChlKSA9IChjKTsgKGUpLT5pZHhtc2tbMF07IChlKSsrKQorCisKIC8qCiAgKiBzdHJ1Y3QgeDg2X3BtdSAtIGdlbmVyaWMgeDg2IHBtdQogICovCkBAIC0xMDIsNiArMTE0LDggQEAKIAl1NjQJCWludGVsX2N0cmw7CiAJdm9pZAkJKCplbmFibGVfYnRzKSh1NjQgY29uZmlnKTsKIAl2b2lkCQkoKmRpc2FibGVfYnRzKSh2b2lkKTsKKwlpbnQJCSgqZ2V0X2V2ZW50X2lkeCkoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCSBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSB4ODZfcG11IF9fcmVhZF9tb3N0bHk7CkBAIC0xMTAsNiArMTI0LDggQEAKIAkuZW5hYmxlZCA9IDEsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnRzOworCiAvKgogICogTm90IHN1cmUgYWJvdXQgc29tZSBvZiB0aGVzZQogICovCkBAIC0xNTUsNiArMTcxLDE2IEBACiAJcmV0dXJuIGh3X2V2ZW50ICYgUDZfRVZOVFNFTF9NQVNLOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRVZFTlRfQ09OU1RSQUlOVCgweGMxLCAweDEpLAkvKiBGTE9QUyAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHgxMCwgMHgxKSwJLyogRlBfQ09NUF9PUFNfRVhFICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDEpLAkvKiBGUF9BU1NJU1QgKi8KKwlFVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksCS8qIE1VTCAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHgxMywgMHgyKSwJLyogRElWICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDE0LCAweDEpLAkvKiBDWUNMRVNfRElWX0JVU1kgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKIAogLyoKICAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgpAQCAtMTcwLDYgKzE5NiwzNSBAQAogICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlFVkVOVF9DT05TVFJBSU5UKDB4MTAsIDB4MSksCS8qIEZQX0NPTVBfT1BTX0VYRSAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHgxMSwgMHgyKSwJLyogRlBfQVNTSVNUICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDEyLCAweDIpLAkvKiBNVUwgKi8KKwlFVkVOVF9DT05TVFJBSU5UKDB4MTMsIDB4MiksCS8qIERJViAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHgxNCwgMHgxKSwJLyogQ1lDTEVTX0RJVl9CVVNZICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDE4LCAweDEpLAkvKiBJRExFX0RVUklOR19ESVYgKi8KKwlFVkVOVF9DT05TVFJBSU5UKDB4MTksIDB4MiksCS8qIERFTEFZRURfQllQQVNTICovCisJRVZFTlRfQ09OU1RSQUlOVCgweGExLCAweDEpLAkvKiBSU19VT1BTX0RJU1BBVENIX0NZQ0xFUyAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHhjYiwgMHgxKSwJLyogTUVNX0xPQURfUkVUSVJFRCAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlFVkVOVF9DT05TVFJBSU5UKDB4NDAsIDB4MyksCS8qIEwxRF9DQUNIRV9MRCAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHg0MSwgMHgzKSwJLyogTDFEX0NBQ0hFX1NUICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDQyLCAweDMpLAkvKiBMMURfQ0FDSEVfTE9DSyAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHg0MywgMHgzKSwJLyogTDFEX0FMTF9SRUYgKi8KKwlFVkVOVF9DT05TVFJBSU5UKDB4NGUsIDB4MyksCS8qIEwxRF9QUkVGRVRDSCAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHg0YywgMHgzKSwJLyogTE9BRF9ISVRfUFJFICovCisJRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLAkvKiBMMUQgKi8KKwlFVkVOVF9DT05TVFJBSU5UKDB4NTIsIDB4MyksCS8qIEwxRF9DQUNIRV9QUkVGRVRDSF9MT0NLX0ZCX0hJVCAqLworCUVWRU5UX0NPTlNUUkFJTlQoMHg1MywgMHgzKSwJLyogTDFEX0NBQ0hFX0xPQ0tfRkJfSElUICovCisJRVZFTlRfQ09OU1RSQUlOVCgweGM1LCAweDMpLAkvKiBDQUNIRV9MT0NLX0NZQ0xFUyAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCiBzdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQogewogCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07CkBAIC0xOTAsNyArMjQ1LDcgQEAKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CiAKLXN0YXRpYyBjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9ldmVudF9pZHMKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KQEAgLTI4MSw3ICszMzYsNyBAQAogIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcworc3RhdGljIF9faW5pdGNvbnN0IHU2NCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KQEAgLTM3Miw3ICs0MjcsNyBAQAogIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9CkBAIC00NjksNyArNTI0LDcgQEAKICNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAogI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCiAjZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJMHhGRjAwMDAwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKIAogI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAogCShDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKQEAgLTQ4MSw3ICs1MzYsNyBAQAogCXJldHVybiBod19ldmVudCAmIENPUkVfRVZOVFNFTF9NQVNLOwogfQogCi1zdGF0aWMgY29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcwogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQpAQCAtOTMyLDYgKzk4Nyw4IEBACiAJICovCiAJaHdjLT5jb25maWcgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfSU5UOwogCisJaHdjLT5pZHggPSAtMTsKKwogCS8qCiAJICogQ291bnQgdXNlciBhbmQgT1MgZXZlbnRzIHVubGVzcyByZXF1ZXN0ZWQgbm90IHRvLgogCSAqLwpAQCAtMTMzNCw4ICsxMzkxLDcgQEAKIAkJeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwogfQogCi1zdGF0aWMgaW50Ci1maXhlZF9tb2RlX2lkeChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCitzdGF0aWMgaW50IGZpeGVkX21vZGVfaWR4KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCiB7CiAJdW5zaWduZWQgaW50IGh3X2V2ZW50OwogCkBAIC0xMzQ5LDYgKzE0MDUsMTIgQEAKIAlpZiAoIXg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKIAkJcmV0dXJuIC0xOwogCisJLyoKKwkgKiBmaXhlZCBjb3VudGVycyBkbyBub3QgdGFrZSBhbGwgcG9zc2libGUgZmlsdGVycworCSAqLworCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSykKKwkJcmV0dXJuIC0xOworCiAJaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKSkpCiAJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9JTlNUUlVDVElPTlM7CiAJaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUykpKQpAQCAtMTM2MCwyMiArMTQyMiw1NyBAQAogfQogCiAvKgotICogRmluZCBhIFBNQyBzbG90IGZvciB0aGUgZnJlc2hseSBlbmFibGVkIC8gc2NoZWR1bGVkIGluIGV2ZW50OgorICogZ2VuZXJpYyBjb3VudGVyIGFsbG9jYXRvcjogZ2V0IG5leHQgZnJlZSBjb3VudGVyCiAgKi8KLXN0YXRpYyBpbnQgeDg2X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorc3RhdGljIGludAorZ2VuX2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCiB7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgaWR4OwogCi0JaWR4ID0gZml4ZWRfbW9kZV9pZHgoZXZlbnQsIGh3Yyk7CisJaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChjcHVjLT51c2VkX21hc2ssIHg4Nl9wbXUubnVtX2V2ZW50cyk7CisJcmV0dXJuIGlkeCA9PSB4ODZfcG11Lm51bV9ldmVudHMgPyAtMSA6IGlkeDsKK30KKworLyoKKyAqIGludGVsLXNwZWNpZmljIGNvdW50ZXIgYWxsb2NhdG9yOiBjaGVjayBldmVudCBjb25zdHJhaW50cworICovCitzdGF0aWMgaW50CitpbnRlbF9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQoreworCWNvbnN0IHN0cnVjdCBldmVudF9jb25zdHJhaW50ICpldmVudF9jb25zdHJhaW50OworCWludCBpLCBjb2RlOworCisJaWYgKCFldmVudF9jb25zdHJhaW50cykKKwkJZ290byBza2lwOworCisJY29kZSA9IGh3Yy0+Y29uZmlnICYgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0s7CisKKwlmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGV2ZW50X2NvbnN0cmFpbnQsIGV2ZW50X2NvbnN0cmFpbnRzKSB7CisJCWlmIChjb2RlID09IGV2ZW50X2NvbnN0cmFpbnQtPmNvZGUpIHsKKwkJCWZvcl9lYWNoX2JpdChpLCBldmVudF9jb25zdHJhaW50LT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgeworCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBjcHVjLT51c2VkX21hc2spKQorCQkJCQlyZXR1cm4gaTsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCX0KK3NraXA6CisJcmV0dXJuIGdlbl9nZXRfZXZlbnRfaWR4KGNwdWMsIGh3Yyk7Cit9CisKK3N0YXRpYyBpbnQKK3g4Nl9zY2hlZHVsZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKK3sKKwlpbnQgaWR4OworCisJaWR4ID0gZml4ZWRfbW9kZV9pZHgoaHdjKTsKIAlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgewogCQkvKiBCVFMgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi8KIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJaHdjLT5jb25maWdfYmFzZQk9IDA7Ci0JCWh3Yy0+ZXZlbnRfYmFzZQk9IDA7CisJCWh3Yy0+ZXZlbnRfYmFzZQkJPSAwOwogCQlod2MtPmlkeAkJPSBpZHg7CiAJfSBlbHNlIGlmIChpZHggPj0gMCkgewogCQkvKgpAQCAtMTM5NiwyMCArMTQ5MywzNSBAQAogCX0gZWxzZSB7CiAJCWlkeCA9IGh3Yy0+aWR4OwogCQkvKiBUcnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBnZW5lcmljIGV2ZW50IGFnYWluICovCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkgeworCQlpZiAoaWR4ID09IC0xIHx8IHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKSB7CiB0cnlfZ2VuZXJpYzoKLQkJCWlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoY3B1Yy0+dXNlZF9tYXNrLAotCQkJCQkJICB4ODZfcG11Lm51bV9ldmVudHMpOwotCQkJaWYgKGlkeCA9PSB4ODZfcG11Lm51bV9ldmVudHMpCisJCQlpZHggPSB4ODZfcG11LmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKKwkJCWlmIChpZHggPT0gLTEpCiAJCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJCXNldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwogCQkJaHdjLT5pZHggPSBpZHg7CiAJCX0KLQkJaHdjLT5jb25maWdfYmFzZSAgPSB4ODZfcG11LmV2ZW50c2VsOwotCQlod2MtPmV2ZW50X2Jhc2UgPSB4ODZfcG11LnBlcmZjdHI7CisJCWh3Yy0+Y29uZmlnX2Jhc2UgPSB4ODZfcG11LmV2ZW50c2VsOworCQlod2MtPmV2ZW50X2Jhc2UgID0geDg2X3BtdS5wZXJmY3RyOwogCX0KIAorCXJldHVybiBpZHg7Cit9CisKKy8qCisgKiBGaW5kIGEgUE1DIHNsb3QgZm9yIHRoZSBmcmVzaGx5IGVuYWJsZWQgLyBzY2hlZHVsZWQgaW4gZXZlbnQ6CisgKi8KK3N0YXRpYyBpbnQgeDg2X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJaW50IGlkeDsKKworCWlkeCA9IHg4Nl9zY2hlZHVsZV9ldmVudChjcHVjLCBod2MpOworCWlmIChpZHggPCAwKQorCQlyZXR1cm4gaWR4OworCiAJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwogCiAJeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKQEAgLTE4NTIsNyArMTk2NCw3IEBACiAJLnByaW9yaXR5CQk9IDEKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7CitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgcDZfcG11ID0gewogCS5uYW1lCQkJPSAicDYiLAogCS5oYW5kbGVfaXJxCQk9IHA2X3BtdV9oYW5kbGVfaXJxLAogCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCkBAIC0xODc3LDkgKzE5ODksMTAgQEAKIAkgKi8KIAkuZXZlbnRfYml0cwkJPSAzMiwKIAkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAorCS5nZXRfZXZlbnRfaWR4CQk9IGludGVsX2dldF9ldmVudF9pZHgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0geworc3RhdGljIF9faW5pdGNvbnN0IHN0cnVjdCB4ODZfcG11IGludGVsX3BtdSA9IHsKIAkubmFtZQkJCT0gIkludGVsIiwKIAkuaGFuZGxlX2lycQkJPSBpbnRlbF9wbXVfaGFuZGxlX2lycSwKIAkuZGlzYWJsZV9hbGwJCT0gaW50ZWxfcG11X2Rpc2FibGVfYWxsLApAQCAtMTkwMCw5ICsyMDEzLDEwIEBACiAJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKIAkuZW5hYmxlX2J0cwkJPSBpbnRlbF9wbXVfZW5hYmxlX2J0cywKIAkuZGlzYWJsZV9idHMJCT0gaW50ZWxfcG11X2Rpc2FibGVfYnRzLAorCS5nZXRfZXZlbnRfaWR4CQk9IGludGVsX2dldF9ldmVudF9pZHgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0gewogCS5uYW1lCQkJPSAiQU1EIiwKIAkuaGFuZGxlX2lycQkJPSBhbWRfcG11X2hhbmRsZV9pcnEsCiAJLmRpc2FibGVfYWxsCQk9IGFtZF9wbXVfZGlzYWJsZV9hbGwsCkBAIC0xOTIwLDkgKzIwMzQsMTAgQEAKIAkuYXBpYwkJCT0gMSwKIAkvKiB1c2UgaGlnaGVzdCBiaXQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCiAJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgNDcpIC0gMSwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBnZW5fZ2V0X2V2ZW50X2lkeCwKIH07CiAKLXN0YXRpYyBpbnQgcDZfcG11X2luaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IHA2X3BtdV9pbml0KHZvaWQpCiB7CiAJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewogCWNhc2UgMToKQEAgLTE5MzIsMTAgKzIwNDcsMTIgQEAKIAljYXNlIDc6CiAJY2FzZSA4OgogCWNhc2UgMTE6IC8qIFBlbnRpdW0gSUlJICovCisJCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHM7CiAJCWJyZWFrOwogCWNhc2UgOToKIAljYXNlIDEzOgogCQkvKiBQZW50aXVtIE0gKi8KKwkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50czsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfY29udCgidW5zdXBwb3J0ZWQgcDYgQ1BVIG1vZGVsICVkICIsCkBAIC0xOTU0LDcgKzIwNzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgX19pbml0IGludCBpbnRlbF9wbXVfaW5pdCh2b2lkKQogewogCXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKIAl1bmlvbiBjcHVpZDEwX2VheCBlYXg7CkBAIC0yMDA3LDEyICsyMTI0LDE0IEBACiAJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CiAKIAkJcHJfY29udCgiQ29yZTIgZXZlbnRzLCAiKTsKKwkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCWNhc2UgMjY6CiAJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAogCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwogCisJCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50czsKIAkJcHJfY29udCgiTmVoYWxlbS9Db3JlaTcgZXZlbnRzLCAiKTsKIAkJYnJlYWs7CiAJY2FzZSAyODoKQEAgLTIwMjUsNyArMjE0NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYW1kX3BtdV9pbml0KHZvaWQpCitzdGF0aWMgX19pbml0IGludCBhbWRfcG11X2luaXQodm9pZCkKIHsKIAkvKiBQZXJmb3JtYW5jZS1tb25pdG9yaW5nIHN1cHBvcnRlZCBmcm9tIEs3IGFuZCBsYXRlcjogKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA2KQpAQCAtMjEwNSwxMSArMjIyNCw0NyBAQAogCS51bnRocm90dGxlCT0geDg2X3BtdV91bnRocm90dGxlLAogfTsKIAorc3RhdGljIGludAordmFsaWRhdGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCBmYWtlX2V2ZW50ID0gZXZlbnQtPmh3OworCisJaWYgKGV2ZW50LT5wbXUgJiYgZXZlbnQtPnBtdSAhPSAmcG11KQorCQlyZXR1cm4gMDsKKworCXJldHVybiB4ODZfc2NoZWR1bGVfZXZlbnQoY3B1YywgJmZha2VfZXZlbnQpID49IDA7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKworCW1lbXNldCgmZmFrZV9wbXUsIDAsIHNpemVvZihmYWtlX3BtdSkpOworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRU5PU1BDOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKIGNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJaW50IGVycjsKIAogCWVyciA9IF9faHdfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwlpZiAoIWVycikgeworCQlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkKKwkJCWVyciA9IHZhbGlkYXRlX2dyb3VwKGV2ZW50KTsKKwl9CiAJaWYgKGVycikgewogCQlpZiAoZXZlbnQtPmRlc3Ryb3kpCiAJCQlldmVudC0+ZGVzdHJveShldmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCmluZGV4IGZhYjc4NmYuLjg5OGRmOTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCkBAIC03MTIsNyArNzEyLDcgQEAKIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CiAJCWlmIChib290X2NwdV9kYXRhLng4NiAhPSA2ICYmIGJvb3RfY3B1X2RhdGEueDg2ICE9IDE1ICYmCi0JCSAgICBib290X2NwdV9kYXRhLng4NiAhPSAxNikKKwkJICAgIGJvb3RfY3B1X2RhdGEueDg2ICE9IDE2ICYmIGJvb3RfY3B1X2RhdGEueDg2ICE9IDE3KQogCQkJcmV0dXJuOwogCQl3ZF9vcHMgPSAmazdfd2Rfb3BzOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCmluZGV4IGJiNjJiM2UuLjI4MDAwNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwpAQCAtMjYsNyArMjYsNyBAQAogCiAJZWFybHlfaW5pdF90cmFuc21ldGEoYyk7CiAKLQlkaXNwbGF5X2NhY2hlaW5mbyhjKTsKKwljcHVfZGV0ZWN0X2NhY2hlX3NpemVzKGMpOwogCiAJLyogUHJpbnQgQ01TIGFuZCBDUFUgcmV2aXNpb24gKi8KIAltYXggPSBjcHVpZF9lYXgoMHg4MDg2MDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDZhNTJkNGIuLjdlZjI0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xMTYsMjEgKzExNiwxNiBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjOwotCWludCByZXQgPSAwOwotCi0JbG9ja19rZXJuZWwoKTsKIAogCWNwdSA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkgewotCQlyZXQgPSAtRU5YSU87CS8qIE5vIHN1Y2ggQ1BVICovCi0JCWdvdG8gb3V0OwotCX0KKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIC1FTlhJTzsJLyogTm8gc3VjaCBDUFUgKi8KKwogCWMgPSAmY3B1X2RhdGEoY3B1KTsKIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPCAwKQotCQlyZXQgPSAtRUlPOwkvKiBDUFVJRCBub3Qgc3VwcG9ydGVkICovCi1vdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJCXJldHVybiAtRUlPOwkvKiBDUFVJRCBub3Qgc3VwcG9ydGVkICovCisKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKaW5kZXggNWU0MDlkYy4uYTQ4NDljMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKQEAgLTI3LDggKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvbW11Lmg+Ci0KKyNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCiAKQEAgLTEwNiw3ICsxMDUsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcGNpX2lvbW11X3NodXRkb3duKCk7CisJeDg2X3BsYXRmb3JtLmlvbW11X3NodXRkb3duKCk7CiAjZW5kaWYKIAogCWNyYXNoX3NhdmVfY3B1KHJlZ3MsIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCmluZGV4IGY3Y2RiM2IuLmNkOTdjZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwpAQCAtMTYsNiArMTYsMjIgQEAKIC8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmFzaGVkX3Bmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKyNpZm5kZWYgQ09ORklHX1g4Nl9QQUUKKwkvKgorCSAqIG5vbi1QQUUga2R1bXAga2VybmVsIGV4ZWN1dGVkIGZyb20gYSBQQUUgb25lIHdpbGwgY3JvcCBoaWdoIHB0ZQorCSAqIGJpdHMgYW5kIHBva2UgdW53YW50ZWQgc3BhY2UgY291bnRpbmcgYWdhaW4gZnJvbSBhZGRyZXNzIDAsIHdlCisJICogZG9uJ3Qgd2FudCB0aGF0LiBwdGUgbXVzdCBmaXQgaW50byB1bnNpZ25lZCBsb25nLiBJbiBmYWN0IHRoZQorCSAqIHRlc3QgY2hlY2tzIGhpZ2ggMTIgYml0cyBmb3IgYmVpbmcgemVybyAocGZuIHdpbGwgYmUgc2hpZnRlZCBsZWZ0CisJICogYnkgUEFHRV9TSElGVCkuCisJICovCisJcmV0dXJuIHB0ZV9wZm4ocGZuX3B0ZShwZm4sIF9fcGdwcm90KDApKSkgPT0gcGZuOworI2Vsc2UKKwlyZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApAQCAtNDEsNiArNTcsOSBAQAogCWlmICghY3NpemUpCiAJCXJldHVybiAwOwogCisJaWYgKCFpc19jcmFzaGVkX3Bmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCXZhZGRyID0ga21hcF9hdG9taWNfcGZuKHBmbiwgS01fUFRFMCk7CiAKIAlpZiAoIXVzZXJidWYpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCAyZDhhMzcxLi5iOGNlMTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0yNjgsMTEgKzI2OCwxMiBAQAogCiAJc2hvd19yZWdpc3RlcnMocmVncyk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+c3ApOwotCXNhdmVzZWdtZW50KHNzLCBzcyk7Ci0JaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJc3AgPSByZWdzLT5zcDsKIAkJc3MgPSByZWdzLT5zcyAmIDB4ZmZmZjsKKwl9IGVsc2UgeworCQlzcCA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworCQlzYXZlc2VnbWVudChzcywgc3MpOwogCX0KIAlwcmludGsoS0VSTl9FTUVSRyAiRUlQOiBbPCUwOGx4Pl0gIiwgcmVncy0+aXApOwogCXByaW50X3N5bWJvbCgiJXMiLCByZWdzLT5pcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKaW5kZXggZjdkZDJhNy4uZTBlZDRjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwpAQCAtMTAsOSArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIApAQCAtMzUsNiArMzUsNyBAQAogCiAJaWYgKCFzdGFjaykgewogCQl1bnNpZ25lZCBsb25nIGR1bW15OworCiAJCXN0YWNrID0gJmR1bW15OwogCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpCiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwpAQCAtNTcsOCArNTgsNyBAQAogCiAJCWNvbnRleHQgPSAoc3RydWN0IHRocmVhZF9pbmZvICopCiAJCQkoKHVuc2lnbmVkIGxvbmcpc3RhY2sgJiAofihUSFJFQURfU0laRSAtIDEpKSk7Ci0JCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayhjb250ZXh0LCBzdGFjaywgYnAsIG9wcywKLQkJCQkJIGRhdGEsIE5VTEwsICZncmFwaCk7CisJCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayhjb250ZXh0LCBzdGFjaywgYnAsIG9wcywgZGF0YSwgTlVMTCwgJmdyYXBoKTsKIAogCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopY29udGV4dC0+cHJldmlvdXNfZXNwOwogCQlpZiAoIXN0YWNrKQpAQCAtNzIsNyArNzIsNyBAQAogCiB2b2lkCiBzaG93X3N0YWNrX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCisJCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQogewogCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCWludCBpOwpAQCAtMTU2LDQgKzE1NiwzIEBACiAKIAlyZXR1cm4gdWQyID09IDB4MGIwZjsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IGEwNzFlNmIuLjhlNzQwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTEwLDI2ICsxMCwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAogI2luY2x1ZGUgImR1bXBzdGFjay5oIgogCisjZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLU19FTkQgXAorCQkoTl9FWENFUFRJT05fU1RBQ0tTICsgREVCVUdfU1RLU1ovRVhDRVBUSU9OX1NUS1NaIC0gMikKIAogc3RhdGljIGNoYXIgeDg2X3N0YWNrX2lkc1tdWzhdID0gewotCQlbREVCVUdfU1RBQ0sgLSAxXSA9ICIjREIiLAotCQlbTk1JX1NUQUNLIC0gMV0gPSAiTk1JIiwKLQkJW0RPVUJMRUZBVUxUX1NUQUNLIC0gMV0gPSAiI0RGIiwKLQkJW1NUQUNLRkFVTFRfU1RBQ0sgLSAxXSA9ICIjU1MiLAotCQlbTUNFX1NUQUNLIC0gMV0gPSAiI01DIiwKKwkJWyBERUJVR19TVEFDSy0xCQkJXQk9ICIjREIiLAorCQlbIE5NSV9TVEFDSy0xCQkJXQk9ICJOTUkiLAorCQlbIERPVUJMRUZBVUxUX1NUQUNLLTEJCV0JPSAiI0RGIiwKKwkJWyBTVEFDS0ZBVUxUX1NUQUNLLTEJCV0JPSAiI1NTIiwKKwkJWyBNQ0VfU1RBQ0stMQkJCV0JPSAiI01DIiwKICNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgotCQlbTl9FWENFUFRJT05fU1RBQ0tTIC4uLgotCQkJTl9FWENFUFRJT05fU1RBQ0tTICsgREVCVUdfU1RLU1ogLyBFWENFUFRJT05fU1RLU1ogLSAyXSA9ICIjREJbP10iCisJCVsgTl9FWENFUFRJT05fU1RBQ0tTIC4uLgorCQkgIE5fRVhDRVBUSU9OX1NUQUNLU19FTkQJXQk9ICIjREJbP10iCiAjZW5kaWYKLQl9OworfTsKIAogaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCiB7CkBAIC0zNyw3ICszOSw3IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICppbl9leGNlcHRpb25fc3RhY2sodW5zaWduZWQgY3B1LCB1bnNpZ25lZCBsb25nIHN0YWNrLAotCQkJCQl1bnNpZ25lZCAqdXNlZHAsIGNoYXIgKippZHApCisJCQkJCSB1bnNpZ25lZCAqdXNlZHAsIGNoYXIgKippZHApCiB7CiAJdW5zaWduZWQgazsKIApAQCAtMjAyLDIxICsyMDQsMjQgQEAKIAogdm9pZAogc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQorCQkgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKIHsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhY2tfZW5kOworCXVuc2lnbmVkIGxvbmcgKmlycV9zdGFjazsKIAl1bnNpZ25lZCBsb25nICpzdGFjazsKKwlpbnQgY3B1OwogCWludCBpOwotCWNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrX2VuZCA9Ci0JCSh1bnNpZ25lZCBsb25nICopKHBlcl9jcHUoaXJxX3N0YWNrX3B0ciwgY3B1KSk7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX3N0YWNrID0KLQkJKHVuc2lnbmVkIGxvbmcgKikocGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpIC0gSVJRX1NUQUNLX1NJWkUpOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaXJxX3N0YWNrX2VuZAk9ICh1bnNpZ25lZCBsb25nICopKHBlcl9jcHUoaXJxX3N0YWNrX3B0ciwgY3B1KSk7CisJaXJxX3N0YWNrCT0gKHVuc2lnbmVkIGxvbmcgKikocGVyX2NwdShpcnFfc3RhY2tfcHRyLCBjcHUpIC0gSVJRX1NUQUNLX1NJWkUpOwogCiAJLyoKLQkgKiBkZWJ1Z2dpbmcgYWlkOiAic2hvd19zdGFjayhOVUxMLCBOVUxMKTsiIHByaW50cyB0aGUKLQkgKiBiYWNrIHRyYWNlIGZvciB0aGlzIGNwdS4KKwkgKiBEZWJ1Z2dpbmcgYWlkOiAic2hvd19zdGFjayhOVUxMLCBOVUxMKTsiIHByaW50cyB0aGUKKwkgKiBiYWNrIHRyYWNlIGZvciB0aGlzIGNwdToKIAkgKi8KLQogCWlmIChzcCA9PSBOVUxMKSB7CiAJCWlmICh0YXNrKQogCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKQEAgLTI0MCw2ICsyNDUsOCBAQAogCQlwcmludGsoIiAlMDE2bHgiLCAqc3RhY2srKyk7CiAJCXRvdWNoX25taV93YXRjaGRvZygpOwogCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCiAJcHJpbnRrKCJcbiIpOwogCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOwogfQpAQCAtMzAzLDQgKzMxMCwzIEBACiAKIAlyZXR1cm4gdWQyID09IDB4MGIwZjsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGFkNWJkOTguLmNkY2ZiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTQ1NCw4ICs0NTQsMTAgQEAKIAlpZiAoYWRkX2VmaV9tZW1tYXApCiAJCWRvX2FkZF9lZmlfbWVtbWFwKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBlZmlfZ2V0X3RpbWU7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBlZmlfc2V0X3J0Y19tbXNzOworI2VuZGlmCiAKIAkvKiBTZXR1cCBmb3IgRUZJIHJ1bnRpbWUgc2VydmljZSAqLwogCXJlYm9vdF90eXBlID0gQk9PVF9FRkk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGMwOTdlN2QuLjUwYjljMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC0zMzQsNiArMzM0LDEwIEBACiBFTkQocmV0X2Zyb21fZm9yaykKIAogLyoKKyAqIEludGVycnVwdCBleGl0IGZ1bmN0aW9ucyBzaG91bGQgYmUgcHJvdGVjdGVkIGFnYWluc3Qga3Byb2JlcworICovCisJLnB1c2hzZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKKy8qCiAgKiBSZXR1cm4gdG8gdXNlciBtb2RlIGlzIG5vdCBhcyBjb21wbGV4IGFzIGFsbCB0aGlzIGxvb2tzLAogICogYnV0IHdlIHdhbnQgdGhlIGRlZmF1bHQgcGF0aCBmb3IgYSBzeXN0ZW0gY2FsbCByZXR1cm4gdG8KICAqIGdvIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgd2hpY2ggaXMgd2h5IHNvbWUgb2YgdGhpcyBpcwpAQCAtMzgzLDYgKzM4NywxMCBAQAogRU5EKHJlc3VtZV9rZXJuZWwpCiAjZW5kaWYKIAlDRklfRU5EUFJPQworLyoKKyAqIEVuZCBvZiBrcHJvYmVzIHNlY3Rpb24KKyAqLworCS5wb3BzZWN0aW9uCiAKIC8qIFNZU0VOVEVSX1JFVFVSTiBwb2ludHMgdG8gYWZ0ZXIgdGhlICJzeXNlbnRlciIgaW5zdHJ1Y3Rpb24gaW4KICAgIHRoZSB2c3lzY2FsbCBwYWdlLiAgU2VlIHZzeXNjYWxsLXN5c2VudHJ5LlMsIHdoaWNoIGRlZmluZXMgdGhlIHN5bWJvbC4gICovCkBAIC01MTMsNiArNTIxLDEwIEBACiAJUFRHU19UT19HU19FWAogRU5EUFJPQyhpYTMyX3N5c2VudGVyX3RhcmdldCkKIAorLyoKKyAqIHN5c2NhbGwgc3R1YiBpbmNsdWRpbmcgaXJxIGV4aXQgc2hvdWxkIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGtwcm9iZXMKKyAqLworCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCiAJIyBzeXN0ZW0gY2FsbCBoYW5kbGVyIHN0dWIKIEVOVFJZKHN5c3RlbV9jYWxsKQogCVJJTkcwX0lOVF9GUkFNRQkJCSMgY2FuJ3QgdW53aW5kIGludG8gdXNlciBzcGFjZSBhbnl3YXkKQEAgLTcwNSw2ICs3MTcsMTAgQEAKIAlqbXAgcmVzdW1lX3VzZXJzcGFjZQogRU5EKHN5c2NhbGxfYmFkc3lzKQogCUNGSV9FTkRQUk9DCisvKgorICogRW5kIG9mIGtwcm9iZXMgc2VjdGlvbgorICovCisJLnBvcHNlY3Rpb24KIAogLyoKICAqIFN5c3RlbSBjYWxscyB0aGF0IG5lZWQgYSBwdF9yZWdzIHBvaW50ZXIuCkBAIC04MTQsNiArODMwLDEwIEBACiBFTkRQUk9DKGNvbW1vbl9pbnRlcnJ1cHQpCiAJQ0ZJX0VORFBST0MKIAorLyoKKyAqICBJcnEgZW50cmllcyBzaG91bGQgYmUgcHJvdGVjdGVkIGFnYWluc3Qga3Byb2JlcworICovCisJLnB1c2hzZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKICNkZWZpbmUgQlVJTERfSU5URVJSVVBUMyhuYW1lLCBuciwgZm4pCVwKIEVOVFJZKG5hbWUpCQkJCVwKIAlSSU5HMF9JTlRfRlJBTUU7CQlcCkBAIC05ODAsNiArMTAwMCwxMCBAQAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKIEVORChzcHVyaW91c19pbnRlcnJ1cHRfYnVnKQorLyoKKyAqIEVuZCBvZiBrcHJvYmVzIHNlY3Rpb24KKyAqLworCS5wb3BzZWN0aW9uCiAKIEVOVFJZKGtlcm5lbF90aHJlYWRfaGVscGVyKQogCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCkBAIC0xMTg1LDE3ICsxMjA5LDE0IEBACiAKIC5nbG9ibCByZXR1cm5fdG9faGFuZGxlcgogcmV0dXJuX3RvX2hhbmRsZXI6Ci0JcHVzaGwgJDAKIAlwdXNobCAlZWF4Ci0JcHVzaGwgJWVjeAogCXB1c2hsICVlZHgKIAltb3ZsICVlYnAsICVlYXgKIAljYWxsIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgotCW1vdmwgJWVheCwgMHhjKCVlc3ApCisJbW92bCAlZWF4LCAlZWN4CiAJcG9wbCAlZWR4Ci0JcG9wbCAlZWN4CiAJcG9wbCAlZWF4Ci0JcmV0CisJam1wIColZWN4CiAjZW5kaWYKIAogLnNlY3Rpb24gLnJvZGF0YSwiYSIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggYjVjMDYxZi4uNGRlYjhmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTE1NSwxMSArMTU1LDExIEBACiAKIAljYWxsIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgogCi0JbW92cSAlcmF4LCAxNiglcnNwKQorCW1vdnEgJXJheCwgJXJkaQogCW1vdnEgOCglcnNwKSwgJXJkeAogCW1vdnEgKCVyc3ApLCAlcmF4Ci0JYWRkcSAkMTYsICVyc3AKLQlyZXRxCisJYWRkcSAkMjQsICVyc3AKKwlqbXAgKiVyZGkKICNlbmRpZgogCiAKQEAgLTgwMyw2ICs4MDMsMTAgQEAKIAljYWxsIFxmdW5jCiAJLmVuZG0KIAorLyoKKyAqIEludGVycnVwdCBlbnRyeS9leGl0IHNob3VsZCBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBrcHJvYmVzCisgKi8KKwkucHVzaHNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IgogCS8qCiAJICogVGhlIGludGVycnVwdCBzdHVicyBwdXNoICh+dmVjdG9yKzB4ODApIG9udG8gdGhlIHN0YWNrIGFuZAogCSAqIHRoZW4ganVtcCB0byBjb21tb25faW50ZXJydXB0LgpAQCAtOTQxLDYgKzk0NSwxMCBAQAogCiAJQ0ZJX0VORFBST0MKIEVORChjb21tb25faW50ZXJydXB0KQorLyoKKyAqIEVuZCBvZiBrcHJvYmVzIHNlY3Rpb24KKyAqLworICAgICAgIC5wb3BzZWN0aW9uCiAKIC8qCiAgKiBBUElDIGludGVycnVwdHMuCkBAIC0xNDkxLDEyICsxNDk5LDE3IEBACiAJbGVhcSBpcnFfcmV0dXJuKCVyaXApLCVyY3gKIAljbXBxICVyY3gsUklQKzgoJXJzcCkKIAlqZSBlcnJvcl9zd2FwZ3MKLQltb3ZsICVlY3gsJWVjeAkvKiB6ZXJvIGV4dGVuZCAqLwotCWNtcHEgJXJjeCxSSVArOCglcnNwKQotCWplIGVycm9yX3N3YXBncworCW1vdmwgJWVjeCwlZWF4CS8qIHplcm8gZXh0ZW5kICovCisJY21wcSAlcmF4LFJJUCs4KCVyc3ApCisJamUgYnN0ZXBfaXJldAogCWNtcHEgJGdzX2NoYW5nZSxSSVArOCglcnNwKQogCWplIGVycm9yX3N3YXBncwogCWptcCBlcnJvcl9zdGkKKworYnN0ZXBfaXJldDoKKwkvKiBGaXggdHJ1bmNhdGVkIFJJUCAqLworCW1vdnEgJXJjeCxSSVArOCglcnNwKQorCWptcCBlcnJvcl9zd2FwZ3MKIEVORChlcnJvcl9lbnRyeSkKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOWRiYjUyNy4uNWExYjk3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtOSw2ICs5LDggQEAKICAqIHRoZSBkYW5nZXJzIG9mIG1vZGlmeWluZyBjb2RlIG9uIHRoZSBydW4uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpAQCAtMzM2LDE1ICszMzgsMTUgQEAKIAogCXN3aXRjaCAoZmF1bHRlZCkgewogCWNhc2UgMDoKLQkJcHJfaW5mbygiZnRyYWNlOiBjb252ZXJ0aW5nIG1jb3VudCBjYWxscyB0byAwZiAxZiA0NCAwMCAwMFxuIik7CisJCXByX2luZm8oImNvbnZlcnRpbmcgbWNvdW50IGNhbGxzIHRvIDBmIDFmIDQ0IDAwIDAwXG4iKTsKIAkJbWVtY3B5KGZ0cmFjZV9ub3AsIGZ0cmFjZV90ZXN0X3A2bm9wLCBNQ09VTlRfSU5TTl9TSVpFKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlwcl9pbmZvKCJmdHJhY2U6IGNvbnZlcnRpbmcgbWNvdW50IGNhbGxzIHRvIDY2IDY2IDY2IDY2IDkwXG4iKTsKKwkJcHJfaW5mbygiY29udmVydGluZyBtY291bnQgY2FsbHMgdG8gNjYgNjYgNjYgNjYgOTBcbiIpOwogCQltZW1jcHkoZnRyYWNlX25vcCwgZnRyYWNlX3Rlc3Rfbm9wNSwgTUNPVU5UX0lOU05fU0laRSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJcHJfaW5mbygiZnRyYWNlOiBjb252ZXJ0aW5nIG1jb3VudCBjYWxscyB0byBqbXAgLiArIDVcbiIpOworCQlwcl9pbmZvKCJjb252ZXJ0aW5nIG1jb3VudCBjYWxscyB0byBqbXAgLiArIDVcbiIpOwogCQltZW1jcHkoZnRyYWNlX25vcCwgZnRyYWNlX3Rlc3Rfam1wLCBNQ09VTlRfSU5TTl9TSVpFKTsKIAkJYnJlYWs7CiAJfQpAQCAtNDY4LDgyICs0NzAsMTAgQEAKIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiBleHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwotCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgKnN5c2NhbGwpCit1bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCiB7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0YXJ0OwotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdG9wOwotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07Ci0KLQotCXN0YXJ0ID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKLQlzdG9wID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOwotCWthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZykgc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQotCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7Ci0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lLCBzdHIpKQotCQkJcmV0dXJuIHN0YXJ0OwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKCZzeXNfY2FsbF90YWJsZSlbbnJdOwogfQotCi1zdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzY2FsbF9ucl90b19tZXRhKGludCBucikKLXsKLQlpZiAoIXN5c2NhbGxzX21ldGFkYXRhIHx8IG5yID49IE5SX3N5c2NhbGxzIHx8IG5yIDwgMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwotfQotCi1pbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfc3lzY2FsbHM7IGkrKykgewotCQlpZiAoc3lzY2FsbHNfbWV0YWRhdGFbaV0pIHsKLQkJCWlmICghc3RyY21wKHN5c2NhbGxzX21ldGFkYXRhW2ldLT5uYW1lLCBuYW1lKSkKLQkJCQlyZXR1cm4gaTsKLQkJfQotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZW50ZXJfaWQoaW50IG51bSwgaW50IGlkKQotewotCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmVudGVyX2lkID0gaWQ7Ci19Ci0KLXZvaWQgc2V0X3N5c2NhbGxfZXhpdF9pZChpbnQgbnVtLCBpbnQgaWQpCi17Ci0Jc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZXhpdF9pZCA9IGlkOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7Ci0JdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKLQotCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCi0JCQkJCU5SX3N5c2NhbGxzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKSB7Ci0JCW1ldGEgPSBmaW5kX3N5c2NhbGxfbWV0YShwc3lzX3N5c2NhbGxfdGFibGVbaV0pOwotCQlzeXNjYWxsc19tZXRhZGF0YVtpXSA9IG1ldGE7Ci0JfQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggNzgwY2Q5Mi4uMjJkYjg2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCkBAIC0yMTIsOCArMjEyLDggQEAKIAkgKi8KIAlsZ2R0CWVhcmx5X2dkdF9kZXNjciglcmlwKQogCi0JLyogc2V0IHVwIGRhdGEgc2VnbWVudHMuIGFjdHVhbGx5IDAgd291bGQgZG8gdG9vICovCi0JbW92bCAkX19LRVJORUxfRFMsJWVheAorCS8qIHNldCB1cCBkYXRhIHNlZ21lbnRzICovCisJeG9ybCAlZWF4LCVlYXgKIAltb3ZsICVlYXgsJWRzCiAJbW92bCAlZWF4LCVzcwogCW1vdmwgJWVheCwlZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MmY2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsNTU1IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxhbiBTdGVybgorICogQ29weXJpZ2h0IChDKSAyMDA5IElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKiBBdXRob3JzOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICogICAgICAgICAgSy5QcmFzYWQgPHByYXNhZEBsaW51eC52bmV0LmlibS5jb20+CisgKiAgICAgICAgICBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIEhXX2JyZWFrcG9pbnQ6IGEgdW5pZmllZCBrZXJuZWwvdXNlci1zcGFjZSBoYXJkd2FyZSBicmVha3BvaW50IGZhY2lsaXR5LAorICogdXNpbmcgdGhlIENQVSdzIGRlYnVnIHJlZ2lzdGVycy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KKworLyogUGVyIGNwdSBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIHZhbHVlICovCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfZHI3KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjcHVfZHI3KTsKKworLyogUGVyIGNwdSBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycyB2YWx1ZXMgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfZGVidWdyZWdbSEJQX05VTV0pOworCisvKgorICogU3RvcmVzIHRoZSBicmVha3BvaW50cyBjdXJyZW50bHkgaW4gdXNlIG9uIGVhY2ggYnJlYWtwb2ludCBhZGRyZXNzCisgKiByZWdpc3RlciBmb3IgZWFjaCBjcHVzCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqLCBicF9wZXJfcmVnW0hCUF9OVU1dKTsKKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fZW5jb2RlX2RyNyhpbnQgZHJudW0sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgYnBfaW5mbzsKKworCWJwX2luZm8gPSAobGVuIHwgdHlwZSkgJiAweGY7CisJYnBfaW5mbyA8PD0gKERSX0NPTlRST0xfU0hJRlQgKyBkcm51bSAqIERSX0NPTlRST0xfU0laRSk7CisJYnBfaW5mbyB8PSAoRFJfR0xPQkFMX0VOQUJMRSA8PCAoZHJudW0gKiBEUl9FTkFCTEVfU0laRSkpOworCisJcmV0dXJuIGJwX2luZm87Cit9CisKKy8qCisgKiBFbmNvZGUgdGhlIGxlbmd0aCwgdHlwZSwgRXhhY3QsIGFuZCBFbmFibGUgYml0cyBmb3IgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQKKyAqIGFzIHN0b3JlZCBpbiBkZWJ1ZyByZWdpc3RlciA3LgorICovCit1bnNpZ25lZCBsb25nIGVuY29kZV9kcjcoaW50IGRybnVtLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gX19lbmNvZGVfZHI3KGRybnVtLCBsZW4sIHR5cGUpIHwgRFJfR0xPQkFMX1NMT1dET1dOOworfQorCisvKgorICogRGVjb2RlIHRoZSBsZW5ndGggYW5kIHR5cGUgYml0cyBmb3IgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQgYXMKKyAqIHN0b3JlZCBpbiBkZWJ1ZyByZWdpc3RlciA3LiAgUmV0dXJuIHRoZSAiZW5hYmxlZCIgc3RhdHVzLgorICovCitpbnQgZGVjb2RlX2RyNyh1bnNpZ25lZCBsb25nIGRyNywgaW50IGJwbnVtLCB1bnNpZ25lZCAqbGVuLCB1bnNpZ25lZCAqdHlwZSkKK3sKKwlpbnQgYnBfaW5mbyA9IGRyNyA+PiAoRFJfQ09OVFJPTF9TSElGVCArIGJwbnVtICogRFJfQ09OVFJPTF9TSVpFKTsKKworCSpsZW4gPSAoYnBfaW5mbyAmIDB4YykgfCAweDQwOworCSp0eXBlID0gKGJwX2luZm8gJiAweDMpIHwgMHg4MDsKKworCXJldHVybiAoZHI3ID4+IChicG51bSAqIERSX0VOQUJMRV9TSVpFKSkgJiAweDM7Cit9CisKKy8qCisgKiBJbnN0YWxsIGEgcGVyZiBjb3VudGVyIGJyZWFrcG9pbnQuCisgKgorICogV2Ugc2VlayBhIGZyZWUgZGVidWcgYWRkcmVzcyByZWdpc3RlciBhbmQgdXNlIGl0IGZvciB0aGlzCisgKiBicmVha3BvaW50LiBFdmVudHVhbGx5IHdlIGVuYWJsZSBpdCBpbiB0aGUgZGVidWcgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKiBBdG9taWM6IHdlIGhvbGQgdGhlIGNvdW50ZXItPmN0eC0+bG9jayBhbmQgd2Ugb25seSBoYW5kbGUgdmFyaWFibGVzCisgKiBhbmQgcmVnaXN0ZXJzIGxvY2FsIHRvIHRoaXMgY3B1LgorICovCitpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCXVuc2lnbmVkIGxvbmcgKmRyNzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBIQlBfTlVNOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKipzbG90ID0gJl9fZ2V0X2NwdV92YXIoYnBfcGVyX3JlZ1tpXSk7CisKKwkJaWYgKCEqc2xvdCkgeworCQkJKnNsb3QgPSBicDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKFdBUk5fT05DRShpID09IEhCUF9OVU0sICJDYW4ndCBmaW5kIGFueSBicmVha3BvaW50IHNsb3QiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNldF9kZWJ1Z3JlZyhpbmZvLT5hZGRyZXNzLCBpKTsKKwlfX2dldF9jcHVfdmFyKGNwdV9kZWJ1Z3JlZ1tpXSkgPSBpbmZvLT5hZGRyZXNzOworCisJZHI3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2RyNyk7CisJKmRyNyB8PSBlbmNvZGVfZHI3KGksIGluZm8tPmxlbiwgaW5mby0+dHlwZSk7CisKKwlzZXRfZGVidWdyZWcoKmRyNywgNyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVuaW5zdGFsbCB0aGUgYnJlYWtwb2ludCBjb250YWluZWQgaW4gdGhlIGdpdmVuIGNvdW50ZXIuCisgKgorICogRmlyc3Qgd2Ugc2VhcmNoIHRoZSBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVyIGl0IHVzZXMgYW5kIHRoZW4gd2UgZGlzYWJsZQorICogaXQuCisgKgorICogQXRvbWljOiB3ZSBob2xkIHRoZSBjb3VudGVyLT5jdHgtPmxvY2sgYW5kIHdlIG9ubHkgaGFuZGxlIHZhcmlhYmxlcworICogYW5kIHJlZ2lzdGVycyBsb2NhbCB0byB0aGlzIGNwdS4KKyAqLwordm9pZCBhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwl1bnNpZ25lZCBsb25nICpkcjc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSEJQX05VTTsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICoqc2xvdCA9ICZfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWdbaV0pOworCisJCWlmICgqc2xvdCA9PSBicCkgeworCQkJKnNsb3QgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoV0FSTl9PTkNFKGkgPT0gSEJQX05VTSwgIkNhbid0IGZpbmQgYW55IGJyZWFrcG9pbnQgc2xvdCIpKQorCQlyZXR1cm47CisKKwlkcjcgPSAmX19nZXRfY3B1X3ZhcihjcHVfZHI3KTsKKwkqZHI3ICY9IH5fX2VuY29kZV9kcjcoaSwgaW5mby0+bGVuLCBpbmZvLT50eXBlKTsKKworCXNldF9kZWJ1Z3JlZygqZHI3LCA3KTsKK30KKworc3RhdGljIGludCBnZXRfaGJwX2xlbih1OCBoYnBfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5faW5fYnl0ZXMgPSAwOworCisJc3dpdGNoIChoYnBfbGVuKSB7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fMToKKwkJbGVuX2luX2J5dGVzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fMjoKKwkJbGVuX2luX2J5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fNDoKKwkJbGVuX2luX2J5dGVzID0gNDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzg6CisJCWxlbl9pbl9ieXRlcyA9IDg7CisJCWJyZWFrOworI2VuZGlmCisJfQorCXJldHVybiBsZW5faW5fYnl0ZXM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdmlydHVhbCBhZGRyZXNzIGluIHVzZXIgc3BhY2UuCisgKi8KK2ludCBhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1OCBoYnBfbGVuKQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBnZXRfaGJwX2xlbihoYnBfbGVuKTsKKworCXJldHVybiAodmEgPD0gVEFTS19TSVpFIC0gbGVuKTsKK30KKworLyoKKyAqIENoZWNrIGZvciB2aXJ0dWFsIGFkZHJlc3MgaW4ga2VybmVsIHNwYWNlLgorICovCitzdGF0aWMgaW50IGFyY2hfY2hlY2tfdmFfaW5fa2VybmVsc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTggaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gZ2V0X2hicF9sZW4oaGJwX2xlbik7CisKKwlyZXR1cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7Cit9CisKKy8qCisgKiBTdG9yZSBhIGJyZWFrcG9pbnQncyBlbmNvZGVkIGFkZHJlc3MsIGxlbmd0aCwgYW5kIHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgYXJjaF9zdG9yZV9pbmZvKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKKwkvKgorCSAqIEZvciBrZXJuZWwtYWRkcmVzc2VzLCBlaXRoZXIgdGhlIGFkZHJlc3Mgb3Igc3ltYm9sIG5hbWUgY2FuIGJlCisJICogc3BlY2lmaWVkLgorCSAqLworCWlmIChpbmZvLT5uYW1lKQorCQlpbmZvLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJa2FsbHN5bXNfbG9va3VwX25hbWUoaW5mby0+bmFtZSk7CisJaWYgKGluZm8tPmFkZHJlc3MpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCB4ODZfbGVuLCBpbnQgeDg2X3R5cGUsCisJCQkgICBpbnQgKmdlbl9sZW4sIGludCAqZ2VuX3R5cGUpCit7CisJLyogTGVuICovCisJc3dpdGNoICh4ODZfbGVuKSB7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fMToKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8xOworCQlicmVhazsKKwljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8yOgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzQ6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzg6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fODsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUeXBlICovCisJc3dpdGNoICh4ODZfdHlwZSkgeworCWNhc2UgWDg2X0JSRUFLUE9JTlRfRVhFQ1VURToKKwkJKmdlbl90eXBlID0gSFdfQlJFQUtQT0lOVF9YOworCQlicmVhazsKKwljYXNlIFg4Nl9CUkVBS1BPSU5UX1dSSVRFOgorCQkqZ2VuX3R5cGUgPSBIV19CUkVBS1BPSU5UX1c7CisJCWJyZWFrOworCWNhc2UgWDg2X0JSRUFLUE9JTlRfUlc6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBhcmNoX2J1aWxkX2JwX2luZm8oc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCisJaW5mby0+YWRkcmVzcyA9IGJwLT5hdHRyLmJwX2FkZHI7CisKKwkvKiBMZW4gKi8KKwlzd2l0Y2ggKGJwLT5hdHRyLmJwX2xlbikgeworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fMToKKwkJaW5mby0+bGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzE7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fMjoKKwkJaW5mby0+bGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fNDoKKwkJaW5mby0+bGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOXzQ7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzg6CisJCWluZm8tPmxlbiA9IFg4Nl9CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKGJwLT5hdHRyLmJwX3R5cGUpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1dSSVRFOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX1JXOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfWDoKKwkJaW5mby0+dHlwZSA9IFg4Nl9CUkVBS1BPSU5UX0VYRUNVVEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorLyoKKyAqIFZhbGlkYXRlIHRoZSBhcmNoLXNwZWNpZmljIEhXIEJyZWFrcG9pbnQgcmVnaXN0ZXIgc2V0dGluZ3MKKyAqLworaW50IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCXVuc2lnbmVkIGludCBhbGlnbjsKKwlpbnQgcmV0OworCisKKwlyZXQgPSBhcmNoX2J1aWxkX2JwX2luZm8oYnApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSAtRUlOVkFMOworCisJaWYgKGluZm8tPnR5cGUgPT0gWDg2X0JSRUFLUE9JTlRfRVhFQ1VURSkKKwkJLyoKKwkJICogUHRyYWNlLXJlZmFjdG9yaW5nIGNvZGUKKwkJICogRm9yIG5vdywgd2UnbGwgYWxsb3cgaW5zdHJ1Y3Rpb24gYnJlYWtwb2ludCBvbmx5IGZvciB1c2VyLXNwYWNlCisJCSAqIGFkZHJlc3NlcworCQkgKi8KKwkJaWYgKCghYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UoaW5mby0+YWRkcmVzcywgaW5mby0+bGVuKSkgJiYKKwkJCWluZm8tPmxlbiAhPSBYODZfQlJFQUtQT0lOVF9FWEVDVVRFKQorCQkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoaW5mby0+bGVuKSB7CisJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fMToKKwkJYWxpZ24gPSAwOworCQlicmVhazsKKwljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8yOgorCQlhbGlnbiA9IDE7CisJCWJyZWFrOworCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzQ6CisJCWFsaWduID0gMzsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzg6CisJCWFsaWduID0gNzsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChicC0+Y2FsbGJhY2spCisJCXJldCA9IGFyY2hfc3RvcmVfaW5mbyhicCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBhcHByb3ByaWF0ZQorCSAqIGZvciB0aGUgYWxpZ25tZW50IGltcGxpZWQgYnkgbGVuLgorCSAqLworCWlmIChpbmZvLT5hZGRyZXNzICYgYWxpZ24pCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgdGhhdCB0aGUgdmlydHVhbCBhZGRyZXNzIGlzIGluIHRoZSBwcm9wZXIgcmFuZ2UgKi8KKwlpZiAodHNrKSB7CisJCWlmICghYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UoaW5mby0+YWRkcmVzcywgaW5mby0+bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCWlmICghYXJjaF9jaGVja192YV9pbl9rZXJuZWxzcGFjZShpbmZvLT5hZGRyZXNzLCBpbmZvLT5sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEdW1wIHRoZSBkZWJ1ZyByZWdpc3RlciBjb250ZW50cyB0byB0aGUgdXNlci4KKyAqIFdlIGNhbid0IGR1bXAgb3VyIHBlciBjcHUgdmFsdWVzIGJlY2F1c2UgaXQKKyAqIG1heSBjb250YWluIGNwdSB3aWRlIGJyZWFrcG9pbnQsIHNvbWV0aGluZyB0aGF0CisgKiBkb2Vzbid0IGJlbG9uZyB0byB0aGUgY3VycmVudCB0YXNrLgorICoKKyAqIFRPRE86IGluY2x1ZGUgbm9uLXB0cmFjZSB1c2VyIGJyZWFrcG9pbnRzIChwZXJmKQorICovCit2b2lkIGFvdXRfZHVtcF9kZWJ1Z3JlZ3Moc3RydWN0IHVzZXIgKmR1bXApCit7CisJaW50IGk7CisJaW50IGRyNyA9IDA7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm87CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICZjdXJyZW50LT50aHJlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgSEJQX05VTTsgaSsrKSB7CisJCWJwID0gdGhyZWFkLT5wdHJhY2VfYnBzW2ldOworCisJCWlmIChicCAmJiAhYnAtPmF0dHIuZGlzYWJsZWQpIHsKKwkJCWR1bXAtPnVfZGVidWdyZWdbaV0gPSBicC0+YXR0ci5icF9hZGRyOworCQkJaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisJCQlkcjcgfD0gZW5jb2RlX2RyNyhpLCBpbmZvLT5sZW4sIGluZm8tPnR5cGUpOworCQl9IGVsc2UgeworCQkJZHVtcC0+dV9kZWJ1Z3JlZ1tpXSA9IDA7CisJCX0KKwl9CisKKwlkdW1wLT51X2RlYnVncmVnWzRdID0gMDsKKwlkdW1wLT51X2RlYnVncmVnWzVdID0gMDsKKwlkdW1wLT51X2RlYnVncmVnWzZdID0gY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNjsKKworCWR1bXAtPnVfZGVidWdyZWdbN10gPSBkcjc7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhb3V0X2R1bXBfZGVidWdyZWdzKTsKKworLyoKKyAqIFJlbGVhc2UgdGhlIHVzZXIgYnJlYWtwb2ludHMgdXNlZCBieSBwdHJhY2UKKyAqLwordm9pZCBmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKKworCWZvciAoaSA9IDA7IGkgPCBIQlBfTlVNOyBpKyspIHsKKwkJdW5yZWdpc3Rlcl9od19icmVha3BvaW50KHQtPnB0cmFjZV9icHNbaV0pOworCQl0LT5wdHJhY2VfYnBzW2ldID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgaHdfYnJlYWtwb2ludF9yZXN0b3JlKHZvaWQpCit7CisJc2V0X2RlYnVncmVnKF9fZ2V0X2NwdV92YXIoY3B1X2RlYnVncmVnWzBdKSwgMCk7CisJc2V0X2RlYnVncmVnKF9fZ2V0X2NwdV92YXIoY3B1X2RlYnVncmVnWzFdKSwgMSk7CisJc2V0X2RlYnVncmVnKF9fZ2V0X2NwdV92YXIoY3B1X2RlYnVncmVnWzJdKSwgMik7CisJc2V0X2RlYnVncmVnKF9fZ2V0X2NwdV92YXIoY3B1X2RlYnVncmVnWzNdKSwgMyk7CisJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzYsIDYpOworCXNldF9kZWJ1Z3JlZyhfX2dldF9jcHVfdmFyKGNwdV9kcjcpLCA3KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGh3X2JyZWFrcG9pbnRfcmVzdG9yZSk7CisKKy8qCisgKiBIYW5kbGUgZGVidWcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbnMuCisgKgorICogUmV0dXJuIHZhbHVlIGlzIGVpdGhlciBOT1RJRllfU1RPUCBvciBOT1RJRllfRE9ORSBhcyBleHBsYWluZWQgYmVsb3cuCisgKgorICogTk9USUZZX0RPTkUgcmV0dXJuZWQgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlLgorICogaSkgV2hlbiB0aGUgY2F1c2F0aXZlIGFkZHJlc3MgaXMgZnJvbSB1c2VyLXNwYWNlIGFuZCB0aGUgZXhjZXB0aW9uCisgKiBpcyBhIHZhbGlkIG9uZSwgaS5lLiBub3QgdHJpZ2dlcmVkIGFzIGEgcmVzdWx0IG9mIGxhenkgZGVidWcgcmVnaXN0ZXIKKyAqIHN3aXRjaGluZworICogaWkpIFdoZW4gdGhlcmUgYXJlIG1vcmUgYml0cyB0aGFuIHRyYXA8bj4gc2V0IGluIERSNiByZWdpc3RlciAoc3VjaAorICogYXMgQkQsIEJTIG9yIEJUKSBpbmRpY2F0aW5nIHRoYXQgbW9yZSB0aGFuIG9uZSBkZWJ1ZyBjb25kaXRpb24gaXMKKyAqIG1ldCBhbmQgcmVxdWlyZXMgc29tZSBtb3JlIGFjdGlvbiBpbiBkb19kZWJ1ZygpLgorICoKKyAqIE5PVElGWV9TVE9QIHJldHVybmVkIGZvciBhbGwgb3RoZXIgY2FzZXMKKyAqCisgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGh3X2JyZWFrcG9pbnRfaGFuZGxlcihzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MpCit7CisJaW50IGksIGNwdSwgcmMgPSBOT1RJRllfU1RPUDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJdW5zaWduZWQgbG9uZyBkcjcsIGRyNjsKKwl1bnNpZ25lZCBsb25nICpkcjZfcDsKKworCS8qIFRoZSBEUjYgdmFsdWUgaXMgcG9pbnRlZCBieSBhcmdzLT5lcnIgKi8KKwlkcjZfcCA9ICh1bnNpZ25lZCBsb25nICopRVJSX1BUUihhcmdzLT5lcnIpOworCWRyNiA9ICpkcjZfcDsKKworCS8qIERvIGFuIGVhcmx5IHJldHVybiBpZiBubyB0cmFwIGJpdHMgYXJlIHNldCBpbiBEUjYgKi8KKwlpZiAoKGRyNiAmIERSX1RSQVBfQklUUykgPT0gMCkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJZ2V0X2RlYnVncmVnKGRyNywgNyk7CisJLyogRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcgZXhjZXB0aW9uIGhhbmRsaW5nICovCisJc2V0X2RlYnVncmVnKDBVTCwgNyk7CisJLyoKKwkgKiBBc3NlcnQgdGhhdCBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAorCSAqIFJlc2V0IHRoZSBEUm4gYml0cyBpbiB0aGUgdmlydHVhbGl6ZWQgcmVnaXN0ZXIgdmFsdWUuCisJICogVGhlIHB0cmFjZSB0cmlnZ2VyIHJvdXRpbmUgd2lsbCBhZGQgaW4gd2hhdGV2ZXIgaXMgbmVlZGVkLgorCSAqLworCWN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzYgJj0gfkRSX1RSQVBfQklUUzsKKwljcHUgPSBnZXRfY3B1KCk7CisKKwkvKiBIYW5kbGUgYWxsIHRoZSBicmVha3BvaW50cyB0aGF0IHdlcmUgdHJpZ2dlcmVkICovCisJZm9yIChpID0gMDsgaSA8IEhCUF9OVU07ICsraSkgeworCQlpZiAobGlrZWx5KCEoZHI2ICYgKERSX1RSQVAwIDw8IGkpKSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGUgY291bnRlciBtYXkgYmUgY29uY3VycmVudGx5IHJlbGVhc2VkIGJ1dCB0aGF0IGNhbiBvbmx5CisJCSAqIG9jY3VyIGZyb20gYSBjYWxsX3JjdSgpIHBhdGguIFdlIGNhbiB0aGVuIHNhZmVseSBmZXRjaAorCQkgKiB0aGUgYnJlYWtwb2ludCwgdXNlIGl0cyBjYWxsYmFjaywgdG91Y2ggaXRzIGNvdW50ZXIKKwkJICogd2hpbGUgd2UgYXJlIGluIGFuIHJjdV9yZWFkX2xvY2soKSBwYXRoLgorCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOworCisJCWJwID0gcGVyX2NwdShicF9wZXJfcmVnW2ldLCBjcHUpOworCQlpZiAoYnApCisJCQlyYyA9IE5PVElGWV9ET05FOworCQkvKgorCQkgKiBSZXNldCB0aGUgJ2kndGggVFJBUCBiaXQgaW4gZHI2IHRvIGRlbm90ZSBjb21wbGV0aW9uIG9mCisJCSAqIGV4Y2VwdGlvbiBoYW5kbGluZworCQkgKi8KKwkJKCpkcjZfcCkgJj0gfihEUl9UUkFQMCA8PCBpKTsKKwkJLyoKKwkJICogYnAgY2FuIGJlIE5VTEwgZHVlIHRvIGxhenkgZGVidWcgcmVnaXN0ZXIgc3dpdGNoaW5nCisJCSAqIG9yIGR1ZSB0byBjb25jdXJyZW50IHBlcmYgY291bnRlciByZW1vdmluZy4KKwkJICovCisJCWlmICghYnApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJYnJlYWs7CisJCX0KKworCQkoYnAtPmNhbGxiYWNrKShicCwgYXJncy0+cmVncyk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCWlmIChkcjYgJiAofkRSX1RSQVBfQklUUykpCisJCXJjID0gTk9USUZZX0RPTkU7CisKKwlzZXRfZGVidWdyZWcoZHI3LCA3KTsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVidWcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeSgKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCWlmICh2YWwgIT0gRElFX0RFQlVHKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlyZXR1cm4gaHdfYnJlYWtwb2ludF9oYW5kbGVyKGRhdGEpOworfQorCit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCS8qIFRPRE8gKi8KK30KKwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwkvKiBUT0RPICovCit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggMzkxMjA2MS4uZmVlNmNjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtNjMsMTAgKzYzLDEwIEBACiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkNOVCIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBNSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfcGVyZl9pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBORCIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfcGVuZGluZ19pcnFzKTsKQEAgLTkyLDE3ICs5MiwxNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RsYl9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQorI2lmZGVmIENPTkZJR19YODZfVEhFUk1BTF9WRUNUT1IKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUUk0iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOwotIyBpZmRlZiBDT05GSUdfWDg2X01DRV9USFJFU0hPTEQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFX1RIUkVTSE9MRAogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRIUiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90aHJlc2hvbGRfY291bnQpOwogCXNlcV9wcmludGYocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7Ci0jIGVuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRQogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk1DRSIpOwpAQCAtMTk0LDExICsxOTQsMTEgQEAKIAlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9jYWxsX2NvdW50OwogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RsYl9jb3VudDsKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCisjaWZkZWYgQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUgogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RoZXJtYWxfY291bnQ7Ci0jIGlmZGVmIENPTkZJR19YODZfTUNFX1RIUkVTSE9MRAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xECiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OwotIyBlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAlzdW0gKz0gcGVyX2NwdShtY2VfZXhjZXB0aW9uX2NvdW50LCBjcHUpOwpAQCAtMjQ0LDcgKzI0NCw2IEBACiAJCQkJX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdmVjdG9yLCBpcnEpOwogCX0KIAotCXJ1bl9sb2NhbF90aW1lcnMoKTsKIAlpcnFfZXhpdCgpOwogCiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKQEAgLTI2OSwxMCArMjY4LDk5IEBACiAJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKIAkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKCk7CiAKLQlydW5fbG9jYWxfdGltZXJzKCk7CiAJaXJxX2V4aXQoKTsKIAogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHZlY3Rvcl91c2VkX2J5X3BlcmNwdV9pcnEpOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisvKiBBIGNwdSBoYXMgYmVlbiByZW1vdmVkIGZyb20gY3B1X29ubGluZV9tYXNrLiAgUmVzZXQgaXJxIGFmZmluaXRpZXMuICovCit2b2lkIGZpeHVwX2lycXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxLCB2ZWN0b3I7CisJc3RhdGljIGludCB3YXJuZWQ7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWludCBicmVha19hZmZpbml0eSA9IDA7CisJCWludCBzZXRfYWZmaW5pdHkgPSAxOworCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHk7CisKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisJCWlmIChpcnEgPT0gMikKKwkJCWNvbnRpbnVlOworCisJCS8qIGludGVycnVwdCdzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50ICovCisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisKKwkJYWZmaW5pdHkgPSBkZXNjLT5hZmZpbml0eTsKKwkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8CisJCSAgICBjcHVtYXNrX2VxdWFsKGFmZmluaXR5LCBjcHVfb25saW5lX21hc2spKSB7CisJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIENvbXBsZXRlIHRoZSBpcnEgbW92ZS4gVGhpcyBjcHUgaXMgZ29pbmcgZG93biBhbmQgZm9yCisJCSAqIG5vbiBpbnRyLXJlbWFwcGluZyBjYXNlLCB3ZSBjYW4ndCB3YWl0IHRpbGwgdGhpcyBpbnRlcnJ1cHQKKwkJICogYXJyaXZlcyBhdCB0aGlzIGNwdSBiZWZvcmUgY29tcGxldGluZyB0aGUgaXJxIG1vdmUuCisJCSAqLworCQlpcnFfZm9yY2VfY29tcGxldGVfbW92ZShpcnEpOworCisJCWlmIChjcHVtYXNrX2FueV9hbmQoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykgPj0gbnJfY3B1X2lkcykgeworCQkJYnJlYWtfYWZmaW5pdHkgPSAxOworCQkJYWZmaW5pdHkgPSBjcHVfYWxsX21hc2s7CisJCX0KKworCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QQ05UWFQpICYmIGRlc2MtPmNoaXAtPm1hc2spCisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisKKwkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGFmZmluaXR5KTsKKwkJZWxzZSBpZiAoISh3YXJuZWQrKykpCisJCQlzZXRfYWZmaW5pdHkgPSAwOworCisJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BDTlRYVCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQorCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisKKwkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCisJCWlmIChicmVha19hZmZpbml0eSAmJiBzZXRfYWZmaW5pdHkpCisJCQlwcmludGsoIkJyb2tlIGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CisJCWVsc2UgaWYgKCFzZXRfYWZmaW5pdHkpCisJCQlwcmludGsoIkNhbm5vdCBzZXQgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKKwl9CisKKwkvKgorCSAqIFdlIGNhbiByZW1vdmUgbWRlbGF5KCkgYW5kIHRoZW4gc2VuZCBzcHVyaXVvdXMgaW50ZXJydXB0cyB0bworCSAqIG5ldyBjcHUgdGFyZ2V0cyBmb3IgYWxsIHRoZSBpcnFzIHRoYXQgd2VyZSBoYW5kbGVkIHByZXZpb3VzbHkgYnkKKwkgKiB0aGlzIGNwdS4gV2hpbGUgaXQgd29ya3MsIEkgaGF2ZSBzZWVuIHNwdXJpb3VzIGludGVycnVwdCBtZXNzYWdlcworCSAqIChub3RoaW5nIHdyb25nIGJ1dCBzdGlsbC4uLikuCisJICoKKwkgKiBTbyBmb3Igbm93LCByZXRhaW4gbWRlbGF5KDEpIGFuZCBjaGVjayB0aGUgSVJSIGFuZCB0aGVuIHNlbmQgdGhvc2UKKwkgKiBpbnRlcnJ1cHRzIHRvIG5ldyB0YXJnZXRzIGFzIHRoaXMgY3B1IGlzIGFscmVhZHkgb2ZmbGluZWQuLi4KKwkgKi8KKwltZGVsYXkoMSk7CisKKwlmb3IgKHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUjsgdmVjdG9yIDwgTlJfVkVDVE9SUzsgdmVjdG9yKyspIHsKKwkJdW5zaWduZWQgaW50IGlycjsKKworCQlpZiAoX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlyciA9IGFwaWNfcmVhZChBUElDX0lSUiArICh2ZWN0b3IgLyAzMiAqIDB4MTApKTsKKwkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgeworCQkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOworCisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCQlpZiAoZGVzYy0+Y2hpcC0+cmV0cmlnZ2VyKQorCQkJCWRlc2MtPmNoaXAtPnJldHJpZ2dlcihpcnEpOworCQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCQl9CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggN2QzNWQwZi4uMTA3MDlmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtMjExLDQ4ICsyMTEsMyBAQAogCiAJcmV0dXJuIHRydWU7CiB9Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQotLyogQSBjcHUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGNwdV9vbmxpbmVfbWFzay4gIFJlc2V0IGlycSBhZmZpbml0aWVzLiAqLwotdm9pZCBmaXh1cF9pcnFzKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKLQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5OwotCi0JCWlmICghZGVzYykKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxID09IDIpCi0JCQljb250aW51ZTsKLQotCQlhZmZpbml0eSA9IGRlc2MtPmFmZmluaXR5OwotCQlpZiAoY3B1bWFza19hbnlfYW5kKGFmZmluaXR5LCBjcHVfb25saW5lX21hc2spID49IG5yX2NwdV9pZHMpIHsKLQkJCXByaW50aygiQnJlYWtpbmcgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKLQkJCWFmZmluaXR5ID0gY3B1X2FsbF9tYXNrOwotCQl9Ci0JCWlmIChkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCi0JCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBhZmZpbml0eSk7Ci0JCWVsc2UgaWYgKGRlc2MtPmFjdGlvbikKLQkJCXByaW50a19vbmNlKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7Ci0JfQotCi0jaWYgMAotCWJhcnJpZXIoKTsKLQkvKiBJbmdvIE1vbG5hciBzYXlzOiAiYWZ0ZXIgdGhlIElPLUFQSUMgbWFza3MgaGF2ZSBiZWVuIHJlZGlyZWN0ZWQKLQkgICBbbm90ZSB0aGUgbm9wIC0gdGhlIGludGVycnVwdC1lbmFibGUgYm91bmRhcnkgb24geDg2IGlzIHR3bwotCSAgIGluc3RydWN0aW9ucyBmcm9tIHN0aV0gLSB0byBmbHVzaCBvdXQgcGVuZGluZyBoYXJkaXJxcyBhbmQKLQkgICBJUElzLiBBZnRlciB0aGlzIHBvaW50IG5vdGhpbmcgaXMgc3VwcG9zZWQgdG8gcmVhY2ggdGhpcyBDUFUuIiAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGk7IG5vcDsgY2xpIik7Ci0JYmFycmllcigpOwotI2Vsc2UKLQkvKiBUaGF0IGRvZXNuJ3Qgc2VlbSBzdWZmaWNpZW50LiAgR2l2ZSBpdCAxbXMuICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCW1kZWxheSgxKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycV82NC5jCmluZGV4IDk3N2Q4YjQuLmFjZjhmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKQEAgLTYyLDY0ICs2Miw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLS8qIEEgY3B1IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBjcHVfb25saW5lX21hc2suICBSZXNldCBpcnEgYWZmaW5pdGllcy4gKi8KLXZvaWQgZml4dXBfaXJxcyh2b2lkKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0Jc3RhdGljIGludCB3YXJuZWQ7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWludCBicmVha19hZmZpbml0eSA9IDA7Ci0JCWludCBzZXRfYWZmaW5pdHkgPSAxOwotCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHk7Ci0KLQkJaWYgKCFkZXNjKQotCQkJY29udGludWU7Ci0JCWlmIChpcnEgPT0gMikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGludGVycnVwdCdzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50ICovCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0KLQkJYWZmaW5pdHkgPSBkZXNjLT5hZmZpbml0eTsKLQkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8Ci0JCSAgICBjcHVtYXNrX2VxdWFsKGFmZmluaXR5LCBjcHVfb25saW5lX21hc2spKSB7Ci0JCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChjcHVtYXNrX2FueV9hbmQoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykgPj0gbnJfY3B1X2lkcykgewotCQkJYnJlYWtfYWZmaW5pdHkgPSAxOwotCQkJYWZmaW5pdHkgPSBjcHVfYWxsX21hc2s7Ci0JCX0KLQotCQlpZiAoZGVzYy0+Y2hpcC0+bWFzaykKLQkJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKLQotCQlpZiAoZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQotCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgYWZmaW5pdHkpOwotCQllbHNlIGlmICghKHdhcm5lZCsrKSkKLQkJCXNldF9hZmZpbml0eSA9IDA7Ci0KLQkJaWYgKGRlc2MtPmNoaXAtPnVubWFzaykKLQkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCi0JCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLQotCQlpZiAoYnJlYWtfYWZmaW5pdHkgJiYgc2V0X2FmZmluaXR5KQotCQkJcHJpbnRrKCJCcm9rZSBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwotCQllbHNlIGlmICghc2V0X2FmZmluaXR5KQotCQkJcHJpbnRrKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7Ci0JfQotCi0JLyogVGhhdCBkb2Vzbid0IHNlZW0gc3VmZmljaWVudC4gIEdpdmUgaXQgMW1zLiAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQltZGVsYXkoMSk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLX0KLSNlbmRpZgogCiBleHRlcm4gdm9pZCBjYWxsX3NvZnRpcnEodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3g4Ni9rZXJuZWwva2dkYi5jCmluZGV4IDhkODJhNzcuLjIwYTViMzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogCisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTg4LDcgKzg5LDYgQEAKIAlnZGJfcmVnc1tHREJfU1NdCT0gX19LRVJORUxfRFM7CiAJZ2RiX3JlZ3NbR0RCX0ZTXQk9IDB4RkZGRjsKIAlnZGJfcmVnc1tHREJfR1NdCT0gMHhGRkZGOwotCWdkYl9yZWdzW0dEQl9TUF0JPSAoaW50KSZyZWdzLT5zcDsKICNlbHNlCiAJZ2RiX3JlZ3NbR0RCX1I4XQk9IHJlZ3MtPnI4OwogCWdkYl9yZWdzW0dEQl9SOV0JPSByZWdzLT5yOTsKQEAgLTEwMSw4ICsxMDEsOCBAQAogCWdkYl9yZWdzMzJbR0RCX1BTXQk9IHJlZ3MtPmZsYWdzOwogCWdkYl9yZWdzMzJbR0RCX0NTXQk9IHJlZ3MtPmNzOwogCWdkYl9yZWdzMzJbR0RCX1NTXQk9IHJlZ3MtPnNzOwotCWdkYl9yZWdzW0dEQl9TUF0JPSByZWdzLT5zcDsKICNlbmRpZgorCWdkYl9yZWdzW0dEQl9TUF0JPSBrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKTsKIH0KIAogLyoqCkBAIC00MzQsNiArNDM0LDExIEBACiAJCQkicmVzdW1pbmcuLi5cbiIpOwogCWtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGFyZ3MtPnRyYXBuciwgYXJncy0+c2lnbnIsCiAJCQkJICAgYXJncy0+ZXJyLCAiYyIsICIiLCByZWdzKTsKKwkvKgorCSAqIFJlc2V0IHRoZSBCUyBiaXQgaW4gZHI2IChwb2ludGVkIGJ5IGFyZ3MtPmVycikgdG8KKwkgKiBkZW5vdGUgY29tcGxldGlvbiBvZiBwcm9jZXNzaW5nCisJICovCisJKCoodW5zaWduZWQgbG9uZyAqKUVSUl9QVFIoYXJncy0+ZXJyKSkgJj0gfkRSX1NURVA7CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCA3YjUxNjlkLi4xZjMxODZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ4LDMxICs0OCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgogCiB2b2lkIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpOwogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGN1cnJlbnRfa3Byb2JlKSA9IE5VTEw7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHN0YWNrX2FkZHIocmVncykgKCh1bnNpZ25lZCBsb25nICopcmVncy0+c3ApCi0jZWxzZQotLyoKLSAqICImcmVncy0+c3AiIGxvb2tzIHdyb25nLCBidXQgaXQncyBjb3JyZWN0IGZvciB4ODZfMzIuICB4ODZfMzIgQ1BVcwotICogZG9uJ3Qgc2F2ZSB0aGUgc3MgYW5kIGVzcCByZWdpc3RlcnMgaWYgdGhlIENQVSBpcyBhbHJlYWR5IGluIGtlcm5lbAotICogbW9kZSB3aGVuIGl0IHRyYXBzLiAgU28gZm9yIGtwcm9iZXMsIHJlZ3MtPnNwIGFuZCByZWdzLT5zcyBhcmUgbm90Ci0gKiB0aGUgW25vbmV4aXN0ZW50XSBzYXZlZCBzdGFjayBwb2ludGVyIGFuZCBzcyByZWdpc3RlciwgYnV0IHJhdGhlcgotICogdGhlIHRvcCA4IGJ5dGVzIG9mIHRoZSBwcmUtaW50MyBzdGFjay4gIFNvICZyZWdzLT5zcCBoYXBwZW5zIHRvCi0gKiBwb2ludCB0byB0aGUgdG9wIG9mIHRoZSBwcmUtaW50MyBzdGFjay4KLSAqLwotI2RlZmluZSBzdGFja19hZGRyKHJlZ3MpICgodW5zaWduZWQgbG9uZyAqKSZyZWdzLT5zcCkKLSNlbmRpZgorI2RlZmluZSBzdGFja19hZGRyKHJlZ3MpICgodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpKQogCiAjZGVmaW5lIFcocm93LCBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4LCBiOSwgYmEsIGJiLCBiYywgYmQsIGJlLCBiZilcCiAJKCgoYjAjI1VMIDw8IDB4MCl8KGIxIyNVTCA8PCAweDEpfChiMiMjVUwgPDwgMHgyKXwoYjMjI1VMIDw8IDB4MykgfCAgIFwKQEAgLTEwNiw1MCArOTcsNiBAQAogCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwogCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwogfTsKLXN0YXRpYyBjb25zdCB1MzIgb25lYnl0ZV9oYXNfbW9kcm1bMjU2IC8gMzJdID0gewotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCVcoMHgwMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgfCAvKiAwMCAqLwotCVcoMHgxMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgLCAvKiAxMCAqLwotCVcoMHgyMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgfCAvKiAyMCAqLwotCVcoMHgzMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCkgLCAvKiAzMCAqLwotCVcoMHg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiA0MCAqLwotCVcoMHg1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA1MCAqLwotCVcoMHg2MCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCkgfCAvKiA2MCAqLwotCVcoMHg3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA3MCAqLwotCVcoMHg4MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA4MCAqLwotCVcoMHg5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiA5MCAqLwotCVcoMHhhMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBhMCAqLwotCVcoMHhiMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiBiMCAqLwotCVcoMHhjMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBjMCAqLwotCVcoMHhkMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBkMCAqLwotCVcoMHhlMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBlMCAqLwotCVcoMHhmMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSkgICAvKiBmMCAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotfTsKLXN0YXRpYyBjb25zdCB1MzIgdHdvYnl0ZV9oYXNfbW9kcm1bMjU2IC8gMzJdID0gewotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCVcoMHgwMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSkgfCAvKiAwZiAqLwotCVcoMHgxMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiAxZiAqLwotCVcoMHgyMCwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiAyZiAqLwotCVcoMHgzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgLCAvKiAzZiAqLwotCVcoMHg0MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA0ZiAqLwotCVcoMHg1MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiA1ZiAqLwotCVcoMHg2MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiA2ZiAqLwotCVcoMHg3MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSkgLCAvKiA3ZiAqLwotCVcoMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiA4ZiAqLwotCVcoMHg5MCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiA5ZiAqLwotCVcoMHhhMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSkgfCAvKiBhZiAqLwotCVcoMHhiMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBiZiAqLwotCVcoMHhjMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgfCAvKiBjZiAqLwotCVcoMHhkMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgLCAvKiBkZiAqLwotCVcoMHhlMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgfCAvKiBlZiAqLwotCVcoMHhmMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCkgICAvKiBmZiAqLwotCS8qICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAqLwotCS8qICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgYSAgYiAgYyAgZCAgZSAgZiAgICAgICAgICAqLwotfTsKICN1bmRlZiBXCiAKIHN0cnVjdCBrcmV0cHJvYmVfYmxhY2twb2ludCBrcmV0cHJvYmVfYmxhY2tsaXN0W10gPSB7CkBAIC0yNDQsNiArMTkxLDc1IEBACiAJfQogfQogCisvKiBSZWNvdmVyIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gYXQgYWRkciBmb3IgZnVydGhlciBhbmFseXNpcy4gKi8KK3N0YXRpYyBpbnQgcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oa3Byb2JlX29wY29kZV90ICpidWYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qga3Byb2JlICprcDsKKwlrcCA9IGdldF9rcHJvYmUoKHZvaWQgKilhZGRyKTsKKwlpZiAoIWtwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogIEJhc2ljYWxseSwga3AtPmFpbnNuLmluc24gaGFzIGFuIG9yaWdpbmFsIGluc3RydWN0aW9uLgorCSAqICBIb3dldmVyLCBSSVAtcmVsYXRpdmUgaW5zdHJ1Y3Rpb24gY2FuIG5vdCBkbyBzaW5nbGUtc3RlcHBpbmcKKwkgKiAgYXQgZGlmZmVyZW50IHBsYWNlLCBmaXhfcmlwcmVsKCkgdHdlYWtzIHRoZSBkaXNwbGFjZW1lbnQgb2YKKwkgKiAgdGhhdCBpbnN0cnVjdGlvbi4gSW4gdGhhdCBjYXNlLCB3ZSBjYW4ndCByZWNvdmVyIHRoZSBpbnN0cnVjdGlvbgorCSAqICBmcm9tIHRoZSBrcC0+YWluc24uaW5zbi4KKwkgKgorCSAqICBPbiB0aGUgb3RoZXIgaGFuZCwga3AtPm9wY29kZSBoYXMgYSBjb3B5IG9mIHRoZSBmaXJzdCBieXRlIG9mCisJICogIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIG92ZXJ3cml0dGVuIGJ5IGludDMuIEFuZAorCSAqICB0aGUgaW5zdHJ1Y3Rpb24gYXQga3AtPmFkZHIgaXMgbm90IG1vZGlmaWVkIGJ5IGtwcm9iZXMgZXhjZXB0CisJICogIGZvciB0aGUgZmlyc3QgYnl0ZSwgd2UgY2FuIHJlY292ZXIgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uCisJICogIGZyb20gaXQgYW5kIGtwLT5vcGNvZGUuCisJICovCisJbWVtY3B5KGJ1Ziwga3AtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJYnVmWzBdID0ga3AtPm9wY29kZTsKKwlyZXR1cm4gMDsKK30KKworLyogRHVtbXkgYnVmZmVycyBmb3Iga2FsbHN5bXNfbG9va3VwICovCitzdGF0aWMgY2hhciBfX2R1bW15X2J1ZltLU1lNX05BTUVfTEVOXTsKKworLyogQ2hlY2sgaWYgcGFkZHIgaXMgYXQgYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGNhbl9wcm9iZSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBvZmZzZXQgPSAwOworCXN0cnVjdCBpbnNuIGluc247CisJa3Byb2JlX29wY29kZV90IGJ1ZltNQVhfSU5TTl9TSVpFXTsKKworCWlmICgha2FsbHN5bXNfbG9va3VwKHBhZGRyLCBOVUxMLCAmb2Zmc2V0LCBOVUxMLCBfX2R1bW15X2J1ZikpCisJCXJldHVybiAwOworCisJLyogRGVjb2RlIGluc3RydWN0aW9ucyAqLworCWFkZHIgPSBwYWRkciAtIG9mZnNldDsKKwl3aGlsZSAoYWRkciA8IHBhZGRyKSB7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopYWRkcik7CisJCWluc25fZ2V0X29wY29kZSgmaW5zbik7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIKKwkJICoga3Byb2JlLCBpbiB3aGljaCBjYXNlIHdlIHJlcGxhY2UgdGhlIGJyZWFrcG9pbnQgYnkgdGhlCisJCSAqIG9yaWdpbmFsIGluc3RydWN0aW9uIGluIG91ciBidWZmZXIuCisJCSAqLworCQlpZiAoaW5zbi5vcGNvZGUuYnl0ZXNbMF0gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgeworCQkJcmV0ID0gcmVjb3Zlcl9wcm9iZWRfaW5zdHJ1Y3Rpb24oYnVmLCBhZGRyKTsKKwkJCWlmIChyZXQpCisJCQkJLyoKKwkJCQkgKiBBbm90aGVyIGRlYnVnZ2luZyBzdWJzeXN0ZW0gbWlnaHQgaW5zZXJ0CisJCQkJICogdGhpcyBicmVha3BvaW50LiBJbiB0aGF0IGNhc2UsIHdlIGNhbid0CisJCQkJICogcmVjb3ZlciBpdC4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGJ1Zik7CisJCX0KKwkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKKwkJYWRkciArPSBpbnNuLmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gKGFkZHIgPT0gcGFkZHIpOworfQorCiAvKgogICogUmV0dXJucyBub24temVybyBpZiBvcGNvZGUgbW9kaWZpZXMgdGhlIGludGVycnVwdCBmbGFnLgogICovCkBAIC0yNzcsNjggKzI5MywzMCBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGZpeF9yaXByZWwoc3RydWN0IGtwcm9iZSAqcCkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdTggKmluc24gPSBwLT5haW5zbi5pbnNuOwotCXM2NCBkaXNwOwotCWludCBuZWVkX21vZHJtOworCXN0cnVjdCBpbnNuIGluc247CisJa2VybmVsX2luc25faW5pdCgmaW5zbiwgcC0+YWluc24uaW5zbik7CiAKLQkvKiBTa2lwIGxlZ2FjeSBpbnN0cnVjdGlvbiBwcmVmaXhlcy4gICovCi0Jd2hpbGUgKDEpIHsKLQkJc3dpdGNoICgqaW5zbikgewotCQljYXNlIDB4NjY6Ci0JCWNhc2UgMHg2NzoKLQkJY2FzZSAweDJlOgotCQljYXNlIDB4M2U6Ci0JCWNhc2UgMHgyNjoKLQkJY2FzZSAweDY0OgotCQljYXNlIDB4NjU6Ci0JCWNhc2UgMHgzNjoKLQkJY2FzZSAweGYwOgotCQljYXNlIDB4ZjM6Ci0JCWNhc2UgMHhmMjoKLQkJCSsraW5zbjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCS8qIFNraXAgUkVYIGluc3RydWN0aW9uIHByZWZpeC4gICovCi0JaWYgKGlzX1JFWF9wcmVmaXgoaW5zbikpCi0JCSsraW5zbjsKLQotCWlmICgqaW5zbiA9PSAweDBmKSB7Ci0JCS8qIFR3by1ieXRlIG9wY29kZS4gICovCi0JCSsraW5zbjsKLQkJbmVlZF9tb2RybSA9IHRlc3RfYml0KCppbnNuLAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nICopdHdvYnl0ZV9oYXNfbW9kcm0pOwotCX0gZWxzZQotCQkvKiBPbmUtYnl0ZSBvcGNvZGUuICAqLwotCQluZWVkX21vZHJtID0gdGVzdF9iaXQoKmluc24sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgKilvbmVieXRlX2hhc19tb2RybSk7Ci0KLQlpZiAobmVlZF9tb2RybSkgewotCQl1OCBtb2RybSA9ICorK2luc247Ci0JCWlmICgobW9kcm0gJiAweGM3KSA9PSAweDA1KSB7Ci0JCQkvKiAlcmlwK2Rpc3AzMiBhZGRyZXNzaW5nIG1vZGUgKi8KLQkJCS8qIERpc3BsYWNlbWVudCBmb2xsb3dzIE1vZFJNIGJ5dGUuICAqLwotCQkJKytpbnNuOwotCQkJLyoKLQkJCSAqIFRoZSBjb3BpZWQgaW5zdHJ1Y3Rpb24gdXNlcyB0aGUgJXJpcC1yZWxhdGl2ZQotCQkJICogYWRkcmVzc2luZyBtb2RlLiAgQWRqdXN0IHRoZSBkaXNwbGFjZW1lbnQgZm9yIHRoZQotCQkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGlzCi0JCQkgKiBpbnN0cnVjdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb3B5IHRoYXQgd2lsbAotCQkJICogYWN0dWFsbHkgYmUgcnVuLiAgVGhlIHRyaWNreSBiaXQgaGVyZSBpcyBtYWtpbmcgc3VyZQotCQkJICogdGhhdCB0aGUgc2lnbiBleHRlbnNpb24gaGFwcGVucyBjb3JyZWN0bHkgaW4gdGhpcwotCQkJICogY2FsY3VsYXRpb24sIHNpbmNlIHdlIG5lZWQgYSBzaWduZWQgMzItYml0IHJlc3VsdCB0bwotCQkJICogYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHdoZW4gaXQncyBhZGRlZCB0byB0aGUKLQkJCSAqICVyaXAgdmFsdWUgYW5kIHlpZWxkIHRoZSBzYW1lIDY0LWJpdCByZXN1bHQgdGhhdCB0aGUKLQkJCSAqIHNpZ24tZXh0ZW5zaW9uIG9mIHRoZSBvcmlnaW5hbCBzaWduZWQgMzItYml0Ci0JCQkgKiBkaXNwbGFjZW1lbnQgd291bGQgaGF2ZSBnaXZlbi4KLQkJCSAqLwotCQkJZGlzcCA9ICh1OCAqKSBwLT5hZGRyICsgKigoczMyICopIGluc24pIC0KLQkJCSAgICAgICAodTggKikgcC0+YWluc24uaW5zbjsKLQkJCUJVR19PTigoczY0KSAoczMyKSBkaXNwICE9IGRpc3ApOyAvKiBTYW5pdHkgY2hlY2suICAqLwotCQkJKihzMzIgKilpbnNuID0gKHMzMikgZGlzcDsKLQkJfQorCWlmIChpbnNuX3JpcF9yZWxhdGl2ZSgmaW5zbikpIHsKKwkJczY0IG5ld2Rpc3A7CisJCXU4ICpkaXNwOworCQlpbnNuX2dldF9kaXNwbGFjZW1lbnQoJmluc24pOworCQkvKgorCQkgKiBUaGUgY29waWVkIGluc3RydWN0aW9uIHVzZXMgdGhlICVyaXAtcmVsYXRpdmUgYWRkcmVzc2luZworCQkgKiBtb2RlLiAgQWRqdXN0IHRoZSBkaXNwbGFjZW1lbnQgZm9yIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKwkJICogdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gYW5kIHRoZSBsb2NhdGlvbgorCQkgKiBvZiB0aGUgY29weSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgcnVuLiAgVGhlIHRyaWNreSBiaXQgaGVyZQorCQkgKiBpcyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzaWduIGV4dGVuc2lvbiBoYXBwZW5zIGNvcnJlY3RseSBpbgorCQkgKiB0aGlzIGNhbGN1bGF0aW9uLCBzaW5jZSB3ZSBuZWVkIGEgc2lnbmVkIDMyLWJpdCByZXN1bHQgdG8KKwkJICogYmUgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzIHdoZW4gaXQncyBhZGRlZCB0byB0aGUgJXJpcAorCQkgKiB2YWx1ZSBhbmQgeWllbGQgdGhlIHNhbWUgNjQtYml0IHJlc3VsdCB0aGF0IHRoZSBzaWduLQorCQkgKiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsIHNpZ25lZCAzMi1iaXQgZGlzcGxhY2VtZW50IHdvdWxkCisJCSAqIGhhdmUgZ2l2ZW4uCisJCSAqLworCQluZXdkaXNwID0gKHU4ICopIHAtPmFkZHIgKyAoczY0KSBpbnNuLmRpc3BsYWNlbWVudC52YWx1ZSAtCisJCQkgICh1OCAqKSBwLT5haW5zbi5pbnNuOworCQlCVUdfT04oKHM2NCkgKHMzMikgbmV3ZGlzcCAhPSBuZXdkaXNwKTsgLyogU2FuaXR5IGNoZWNrLiAgKi8KKwkJZGlzcCA9ICh1OCAqKSBwLT5haW5zbi5pbnNuICsgaW5zbl9vZmZzZXRfZGlzcGxhY2VtZW50KCZpbnNuKTsKKwkJKihzMzIgKikgZGlzcCA9IChzMzIpIG5ld2Rpc3A7CiAJfQogI2VuZGlmCiB9CkBAIC0zNTksNiArMzM3LDggQEAKIAogaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CisJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCisJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwogCXAtPmFpbnNuLmluc24gPSBnZXRfaW5zbl9zbG90KCk7CiAJaWYgKCFwLT5haW5zbi5pbnNuKQpAQCAtNDcyLDE3ICs0NTIsNiBAQAogewogCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CiAJY2FzZSBLUFJPQkVfSElUX1NTRE9ORToKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCS8qIFRPRE86IFByb3ZpZGUgcmUtZW50cmFuY3kgZnJvbSBwb3N0X2twcm9iZXNfaGFuZGxlcigpIGFuZAotCQkgKiBhdm9pZCBleGNlcHRpb24gc3RhY2sgY29ycnVwdGlvbiB3aGlsZSBzaW5nbGUtc3RlcHBpbmcgb24KLQkJICogdGhlIGluc3RydWN0aW9uIG9mIHRoZSBuZXcgcHJvYmUuCi0JCSAqLwotCQlhcmNoX2Rpc2FybV9rcHJvYmUocCk7Ci0JCXJlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKLQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKLQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgS1BST0JFX0hJVF9BQ1RJVkU6CiAJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CiAJCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOwpAQCAtNDkxLDE4ICs0NjAsMTYgQEAKIAkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CiAJCWJyZWFrOwogCWNhc2UgS1BST0JFX0hJVF9TUzoKLQkJaWYgKHAgPT0ga3Byb2JlX3J1bm5pbmcoKSkgewotCQkJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7Ci0JCQlyZWdzLT5mbGFncyB8PSBrY2ItPmtwcm9iZV9zYXZlZF9mbGFnczsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJLyogQSBwcm9iZSBoYXMgYmVlbiBoaXQgaW4gdGhlIGNvZGVwYXRoIGxlYWRpbmcgdXAKLQkJCSAqIHRvLCBvciBqdXN0IGFmdGVyLCBzaW5nbGUtc3RlcHBpbmcgb2YgYSBwcm9iZWQKLQkJCSAqIGluc3RydWN0aW9uLiBUaGlzIGVudGlyZSBjb2RlcGF0aCBzaG91bGQgc3RyaWN0bHkKLQkJCSAqIHJlc2lkZSBpbiAua3Byb2Jlcy50ZXh0IHNlY3Rpb24uIFJhaXNlIGEgd2FybmluZwotCQkJICogdG8gaGlnaGxpZ2h0IHRoaXMgcGVjdWxpYXIgY2FzZS4KLQkJCSAqLwotCQl9CisJCS8qIEEgcHJvYmUgaGFzIGJlZW4gaGl0IGluIHRoZSBjb2RlcGF0aCBsZWFkaW5nIHVwIHRvLCBvciBqdXN0CisJCSAqIGFmdGVyLCBzaW5nbGUtc3RlcHBpbmcgb2YgYSBwcm9iZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgZW50aXJlCisJCSAqIGNvZGVwYXRoIHNob3VsZCBzdHJpY3RseSByZXNpZGUgaW4gLmtwcm9iZXMudGV4dCBzZWN0aW9uLgorCQkgKiBSYWlzZSBhIEJVRyBvciB3ZSdsbCBjb250aW51ZSBpbiBhbiBlbmRsZXNzIHJlZW50ZXJpbmcgbG9vcAorCQkgKiBhbmQgZXZlbnR1YWxseSBhIHN0YWNrIG92ZXJmbG93LgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5yZWNvdmVyYWJsZSBrcHJvYmUgZGV0ZWN0ZWQgYXQgJXAuXG4iLAorCQkgICAgICAgcC0+YWRkcik7CisJCWR1bXBfa3Byb2JlKHApOworCQlCVUcoKTsKIAlkZWZhdWx0OgogCQkvKiBpbXBvc3NpYmxlIGNhc2VzICovCiAJCVdBUk5fT04oMSk7CkBAIC05NjcsOCArOTM0LDE0IEBACiAJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7CiAJY2FzZSBESUVfREVCVUc6Ci0JCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQlpZiAocG9zdF9rcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkgeworCQkJLyoKKwkJCSAqIFJlc2V0IHRoZSBCUyBiaXQgaW4gZHI2IChwb2ludGVkIGJ5IGFyZ3MtPmVycikgdG8KKwkJCSAqIGRlbm90ZSBjb21wbGV0aW9uIG9mIHByb2Nlc3NpbmcKKwkJCSAqLworCQkJKCoodW5zaWduZWQgbG9uZyAqKUVSUl9QVFIoYXJncy0+ZXJyKSkgJj0gfkRSX1NURVA7CiAJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJfQogCQlicmVhazsKIAljYXNlIERJRV9HUEY6CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwppbmRleCBjMWM0MjlkLi5jODQzZjg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgogCiBzdGF0aWMgdm9pZCBzZXRfaWR0KHZvaWQgKm5ld2lkdCwgX191MTYgbGltaXQpCiB7CkBAIC0yMDIsNiArMjAzLDcgQEAKIAogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlod19icmVha3BvaW50X2Rpc2FibGUoKTsKIAogCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgewogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKaW5kZXggODRjM2JmMi4uNGE4YmI4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KIAogc3RhdGljIGludCBpbml0X29uZV9sZXZlbDJfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSwgcGdkX3QgKnBnZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yODIsNiArMjgzLDcgQEAKIAogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlod19icmVha3BvaW50X2Rpc2FibGUoKTsKIAogCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgewogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKaW5kZXggMzY2YmFhMS4uZjRjNTM4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCkBAIC0zMTcsNiArMzE3LDEyIEBACiAJCXJldHVybiBVQ09ERV9ORk9VTkQ7CiAJfQogCisJaWYgKCoodTMyICopZmlybXdhcmUtPmRhdGEgIT0gVUNPREVfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGludmFsaWQgVUNPREVfTUFHSUMgKDB4JTA4eClcbiIsCisJCSAgICAgICAqKHUzMiAqKWZpcm13YXJlLT5kYXRhKTsKKwkJcmV0dXJuIFVDT0RFX0VSUk9SOworCX0KKwogCXJldCA9IGdlbmVyaWNfbG9hZF9taWNyb2NvZGUoY3B1LCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOwogCiAJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IDM3OGU5YTguLjJiY2FkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0yMDEsNyArMjAwLDYgQEAKIAogc3RhdGljIGludCBtaWNyb2NvZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZDEsIHN0cnVjdCBmaWxlICp1bnVzZWQyKQogewotCWN5Y2xlX2tlcm5lbF9sb2NrKCk7CiAJcmV0dXJuIGNhcGFibGUoQ0FQX1NZU19SQVdJTykgPyAwIDogLUVQRVJNOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKaW5kZXggNmEzY2VmYy4uNTUzNDQ5OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21zci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwpAQCAtMTc0LDIxICsxNzQsMTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwotCWludCByZXQgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKIAljcHUgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAKLQlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkgewotCQlyZXQgPSAtRU5YSU87CS8qIE5vIHN1Y2ggQ1BVICovCi0JCWdvdG8gb3V0OwotCX0KKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIC1FTlhJTzsJLyogTm8gc3VjaCBDUFUgKi8KKwogCWMgPSAmY3B1X2RhdGEoY3B1KTsKIAlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTVNSKSkKLQkJcmV0ID0gLUVJTzsJLyogTVNSIG5vdCBzdXBwb3J0ZWQgKi8KLW91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FSU87CS8qIE1TUiBub3Qgc3VwcG9ydGVkICovCisKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggOTcxYTNiZS4uYzU2M2U0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3Jpby5oPgogI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KKyNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KIAogI2lmZGVmIENPTkZJR19DQUxHQVJZX0lPTU1VX0VOQUJMRURfQllfREVGQVVMVAogaW50IHVzZV9jYWxnYXJ5IF9fcmVhZF9tb3N0bHkgPSAxOwpAQCAtMjQ0LDcgKzI0NSw3IEBACiAJCQlpZiAocGFuaWNfb25fb3ZlcmZsb3cpCiAJCQkJcGFuaWMoIkNhbGdhcnk6IGZpeCB0aGUgYWxsb2NhdG9yLlxuIik7CiAJCQllbHNlCi0JCQkJcmV0dXJuIGJhZF9kbWFfYWRkcmVzczsKKwkJCQlyZXR1cm4gRE1BX0VSUk9SX0NPREU7CiAJCX0KIAl9CiAKQEAgLTI2MCwxMiArMjYxLDE1IEBACiAJCQkgICAgICB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgaW50IGRpcmVjdGlvbikKIHsKIAl1bnNpZ25lZCBsb25nIGVudHJ5OwotCWRtYV9hZGRyX3QgcmV0ID0gYmFkX2RtYV9hZGRyZXNzOworCWRtYV9hZGRyX3QgcmV0OwogCiAJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyhkZXYsIHRibCwgbnBhZ2VzKTsKIAotCWlmICh1bmxpa2VseShlbnRyeSA9PSBiYWRfZG1hX2FkZHJlc3MpKQotCQlnb3RvIGVycm9yOworCWlmICh1bmxpa2VseShlbnRyeSA9PSBETUFfRVJST1JfQ09ERSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FsZ2FyeTogZmFpbGVkIHRvIGFsbG9jYXRlICV1IHBhZ2VzIGluICIKKwkJICAgICAgICJpb21tdSAlcFxuIiwgbnBhZ2VzLCB0YmwpOworCQlyZXR1cm4gRE1BX0VSUk9SX0NPREU7CisJfQogCiAJLyogc2V0IHRoZSByZXR1cm4gZG1hIGFkZHJlc3MgKi8KIAlyZXQgPSAoZW50cnkgPDwgUEFHRV9TSElGVCkgfCAoKHVuc2lnbmVkIGxvbmcpdmFkZHIgJiB+UEFHRV9NQVNLKTsKQEAgLTI3MywxMyArMjc3LDcgQEAKIAkvKiBwdXQgdGhlIFRDRXMgaW4gdGhlIEhXIHRhYmxlICovCiAJdGNlX2J1aWxkKHRibCwgZW50cnksIG5wYWdlcywgKHVuc2lnbmVkIGxvbmcpdmFkZHIgJiBQQUdFX01BU0ssCiAJCSAgZGlyZWN0aW9uKTsKLQogCXJldHVybiByZXQ7Ci0KLWVycm9yOgotCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbGdhcnk6IGZhaWxlZCB0byBhbGxvY2F0ZSAldSBwYWdlcyBpbiAiCi0JICAgICAgICJpb21tdSAlcFxuIiwgbnBhZ2VzLCB0YmwpOwotCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CiB9CiAKIHN0YXRpYyB2b2lkIGlvbW11X2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCkBAIC0yOTAsOCArMjg4LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogd2VyZSB3ZSBjYWxsZWQgd2l0aCBiYWRfZG1hX2FkZHJlc3M/ICovCi0JYmFkZW5kID0gYmFkX2RtYV9hZGRyZXNzICsgKEVNRVJHRU5DWV9QQUdFUyAqIFBBR0VfU0laRSk7Ci0JaWYgKHVubGlrZWx5KChkbWFfYWRkciA+PSBiYWRfZG1hX2FkZHJlc3MpICYmIChkbWFfYWRkciA8IGJhZGVuZCkpKSB7CisJYmFkZW5kID0gRE1BX0VSUk9SX0NPREUgKyAoRU1FUkdFTkNZX1BBR0VTICogUEFHRV9TSVpFKTsKKwlpZiAodW5saWtlbHkoKGRtYV9hZGRyID49IERNQV9FUlJPUl9DT0RFKSAmJiAoZG1hX2FkZHIgPCBiYWRlbmQpKSkgewogCQlXQVJOKDEsIEtFUk5fRVJSICJDYWxnYXJ5OiBkcml2ZXIgdHJpZWQgdW5tYXBwaW5nIGJhZCBETUEgIgogCQkgICAgICAgImFkZHJlc3MgMHglTHhcbiIsIGRtYV9hZGRyKTsKIAkJcmV0dXJuOwpAQCAtMzE4LDEzICszMTYsMTUgQEAKIAogCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAKKwkvKiBzZWFyY2ggdXAgdGhlIGRldmljZSB0cmVlIGZvciBhbiBpb21tdSAqLwogCXBidXMgPSBwZGV2LT5idXM7Ci0KLQkvKiBpcyB0aGUgZGV2aWNlIGJlaGluZCBhIGJyaWRnZT8gTG9vayBmb3IgdGhlIHJvb3QgYnVzICovCi0Jd2hpbGUgKHBidXMtPnBhcmVudCkKKwlkbyB7CisJCXRibCA9IHBjaV9pb21tdShwYnVzKTsKKwkJaWYgKHRibCAmJiB0YmwtPml0X2J1c25vID09IHBidXMtPm51bWJlcikKKwkJCWJyZWFrOworCQl0YmwgPSBOVUxMOwogCQlwYnVzID0gcGJ1cy0+cGFyZW50OwotCi0JdGJsID0gcGNpX2lvbW11KHBidXMpOworCX0gd2hpbGUgKHBidXMpOwogCiAJQlVHX09OKHRibCAmJiAodGJsLT5pdF9idXNubyAhPSBwYnVzLT5udW1iZXIpKTsKIApAQCAtMzczLDcgKzM3Myw3IEBACiAJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh2YWRkciwgcy0+bGVuZ3RoLCBQQUdFX1NJWkUpOwogCiAJCWVudHJ5ID0gaW9tbXVfcmFuZ2VfYWxsb2MoZGV2LCB0YmwsIG5wYWdlcyk7Ci0JCWlmIChlbnRyeSA9PSBiYWRfZG1hX2FkZHJlc3MpIHsKKwkJaWYgKGVudHJ5ID09IERNQV9FUlJPUl9DT0RFKSB7CiAJCQkvKiBtYWtlcyBzdXJlIHVubWFwIGtub3dzIHRvIHN0b3AgKi8KIAkJCXMtPmRtYV9sZW5ndGggPSAwOwogCQkJZ290byBlcnJvcjsKQEAgLTM5MSw3ICszOTEsNyBAQAogZXJyb3I6CiAJY2FsZ2FyeV91bm1hcF9zZyhkZXYsIHNnLCBuZWxlbXMsIGRpciwgTlVMTCk7CiAJZm9yX2VhY2hfc2coc2csIHMsIG5lbGVtcywgaSkgewotCQlzZy0+ZG1hX2FkZHJlc3MgPSBiYWRfZG1hX2FkZHJlc3M7CisJCXNnLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwogCQlzZy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQogCXJldHVybiAwOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKIAkvKiBzZXQgdXAgdGNlcyB0byBjb3ZlciB0aGUgYWxsb2NhdGVkIHJhbmdlICovCiAJbWFwcGluZyA9IGlvbW11X2FsbG9jKGRldiwgdGJsLCByZXQsIG5wYWdlcywgRE1BX0JJRElSRUNUSU9OQUwpOwotCWlmIChtYXBwaW5nID09IGJhZF9kbWFfYWRkcmVzcykKKwlpZiAobWFwcGluZyA9PSBETUFfRVJST1JfQ09ERSkKIAkJZ290byBmcmVlOwogCSpkbWFfaGFuZGxlID0gbWFwcGluZzsKIAlyZXR1cm4gcmV0OwpAQCAtNzI3LDcgKzcyNyw3IEBACiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBwY2lfaW9tbXUoZGV2LT5idXMpOwogCiAJLyogcmVzZXJ2ZSBFTUVSR0VOQ1lfUEFHRVMgZnJvbSBiYWRfZG1hX2FkZHJlc3MgYW5kIHVwICovCi0JaW9tbXVfcmFuZ2VfcmVzZXJ2ZSh0YmwsIGJhZF9kbWFfYWRkcmVzcywgRU1FUkdFTkNZX1BBR0VTKTsKKwlpb21tdV9yYW5nZV9yZXNlcnZlKHRibCwgRE1BX0VSUk9SX0NPREUsIEVNRVJHRU5DWV9QQUdFUyk7CiAKIAkvKiBhdm9pZCB0aGUgQklPUy9WR0EgZmlyc3QgNjQwS0ItMU1CIHJlZ2lvbiAqLwogCS8qIGZvciBDYWxJT0MyIC0gYXZvaWQgdGhlIGVudGlyZSBmaXJzdCBNQiAqLwpAQCAtMTM0NCw2ICsxMzQ0LDIzIEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBjYWxnYXJ5X2lvbW11X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogb2ssIHdlJ3JlIHRyeWluZyB0byB1c2UgQ2FsZ2FyeSAtIGxldCdzIHJvbGwgKi8KKwlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiBVc2luZyBDYWxnYXJ5IElPTU1VXG4iKTsKKworCXJldCA9IGNhbGdhcnlfaW5pdCgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0ktRE1BOiBDYWxnYXJ5IGluaXQgZmFpbGVkICVkLCAiCisJCSAgICAgICAiZmFsbGluZyBiYWNrIHRvIG5vX2lvbW11XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIF9faW5pdCBkZXRlY3RfY2FsZ2FyeSh2b2lkKQogewogCWludCBidXM7CkBAIC0xMzU3LDcgKzEzNzQsNyBAQAogCSAqIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBpb21tdT1vZmYgb3IgaW9tbXU9c29mdCBvciB3ZSBmb3VuZAogCSAqIGFub3RoZXIgSFcgSU9NTVUgYWxyZWFkeSwgYmFpbCBvdXQuCiAJICovCi0JaWYgKHN3aW90bGIgfHwgbm9faW9tbXUgfHwgaW9tbXVfZGV0ZWN0ZWQpCisJaWYgKG5vX2lvbW11IHx8IGlvbW11X2RldGVjdGVkKQogCQlyZXR1cm47CiAKIAlpZiAoIXVzZV9jYWxnYXJ5KQpAQCAtMTQ0Miw5ICsxNDU5LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogQ2FsZ2FyeSBUQ0UgdGFibGUgc3BlYyBpcyAlZFxuIiwKIAkJICAgICAgIHNwZWNpZmllZF90YWJsZV9zaXplKTsKIAotCQkvKiBzd2lvdGxiIGZvciBkZXZpY2VzIHRoYXQgYXJlbid0IGJlaGluZCB0aGUgQ2FsZ2FyeS4gKi8KLQkJaWYgKG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKQotCQkJc3dpb3RsYiA9IDE7CisJCXg4Nl9pbml0LmlvbW11LmlvbW11X2luaXQgPSBjYWxnYXJ5X2lvbW11X2luaXQ7CiAJfQogCXJldHVybjsKIApAQCAtMTQ1NywzNSArMTQ3Miw2IEBACiAJfQogfQogCi1pbnQgX19pbml0IGNhbGdhcnlfaW9tbXVfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlpZiAobm9faW9tbXUgfHwgKHN3aW90bGIgJiYgIWNhbGdhcnlfZGV0ZWN0ZWQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICghY2FsZ2FyeV9kZXRlY3RlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBvaywgd2UncmUgdHJ5aW5nIHRvIHVzZSBDYWxnYXJ5IC0gbGV0J3Mgcm9sbCAqLwotCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFVzaW5nIENhbGdhcnkgSU9NTVVcbiIpOwotCi0JcmV0ID0gY2FsZ2FyeV9pbml0KCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBDSS1ETUE6IENhbGdhcnkgaW5pdCBmYWlsZWQgJWQsICIKLQkJICAgICAgICJmYWxsaW5nIGJhY2sgdG8gbm9faW9tbXVcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZm9yY2VfaW9tbXUgPSAxOwotCWJhZF9kbWFfYWRkcmVzcyA9IDB4MDsKLQkvKiBkbWFfb3BzIGlzIHNldCB0byBzd2lvdGxiIG9yIG5vbW11ICovCi0JaWYgKCFkbWFfb3BzKQotCQlkbWFfb3BzID0gJm5vbW11X2RtYV9vcHM7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgY2FsZ2FyeV9wYXJzZV9vcHRpb25zKGNoYXIgKnApCiB7CiAJdW5zaWduZWQgaW50IGJyaWRnZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGIyYTcxZGMuLmFmY2M1OGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMTEsMTAgKzExLDExIEBACiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KICNpbmNsdWRlIDxhc20vY2FsZ2FyeS5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUuaD4KKyNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KIAogc3RhdGljIGludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7CiAKLXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9ICZub21tdV9kbWFfb3BzOwogRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKIAogc3RhdGljIGludCBpb21tdV9zYWNfZm9yY2UgX19yZWFkX21vc3RseTsKQEAgLTQyLDE1ICs0MywxMCBAQAogICovCiBpbnQgaW9tbXVfcGFzc190aHJvdWdoIF9fcmVhZF9tb3N0bHk7CiAKLWRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzIF9fcmVhZF9tb3N0bHkgPSAwOwotRVhQT1JUX1NZTUJPTChiYWRfZG1hX2FkZHJlc3MpOwotCi0vKiBEdW1teSBkZXZpY2UgdXNlZCBmb3IgTlVMTCBhcmd1bWVudHMgKG5vcm1hbGx5IElTQSkuIEJldHRlciB3b3VsZAotICAgYmUgcHJvYmFibHkgYSBzbWFsbGVyIERNQSBtYXNrLCBidXQgdGhpcyBpcyBidWctdG8tYnVnIGNvbXBhdGlibGUKLSAgIHRvIG9sZGVyIGkzODYuICovCisvKiBEdW1teSBkZXZpY2UgdXNlZCBmb3IgTlVMTCBhcmd1bWVudHMgKG5vcm1hbGx5IElTQSkuICovCiBzdHJ1Y3QgZGV2aWNlIHg4Nl9kbWFfZmFsbGJhY2tfZGV2ID0gewogCS5pbml0X25hbWUgPSAiZmFsbGJhY2sgZGV2aWNlIiwKLQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCS5jb2hlcmVudF9kbWFfbWFzayA9IElTQV9ETUFfQklUX01BU0ssCiAJLmRtYV9tYXNrID0gJng4Nl9kbWFfZmFsbGJhY2tfZGV2LmNvaGVyZW50X2RtYV9tYXNrLAogfTsKIEVYUE9SVF9TWU1CT0woeDg2X2RtYV9mYWxsYmFja19kZXYpOwpAQCAtMTI4LDIwICsxMjQsMTcgQEAKIAkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSByYW5nZSBsZXNzIHRoYW4gNEcgKi8KIAlkbWEzMl9mcmVlX2Jvb3RtZW0oKTsKICNlbmRpZgorCWlmIChwY2lfc3dpb3RsYl9pbml0KCkpCisJCXJldHVybjsKIAotCS8qCi0JICogVGhlIG9yZGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgZm9yCi0JICogZmFsbC1iYWNrL2ZhaWwtb3ZlciByZWFzb25zCi0JICovCiAJZ2FydF9pb21tdV9ob2xlX2luaXQoKTsKIAogCWRldGVjdF9jYWxnYXJ5KCk7CiAKIAlkZXRlY3RfaW50ZWxfaW9tbXUoKTsKIAorCS8qIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciBnYXJ0X2lvbW11X2hvbGVfaW5pdCAqLwogCWFtZF9pb21tdV9kZXRlY3QoKTsKLQotCXBjaV9zd2lvdGxiX2luaXQoKTsKIH0KIAogdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKQEAgLTIxNiw3ICsyMDksNyBAQAogCQlpZiAoIXN0cm5jbXAocCwgImFsbG93ZGFjIiwgOCkpCiAJCQlmb3JiaWRfZGFjID0gMDsKIAkJaWYgKCFzdHJuY21wKHAsICJub2RhYyIsIDUpKQotCQkJZm9yYmlkX2RhYyA9IC0xOworCQkJZm9yYmlkX2RhYyA9IDE7CiAJCWlmICghc3RybmNtcChwLCAidXNlZGFjIiwgNikpIHsKIAkJCWZvcmJpZF9kYWMgPSAtMTsKIAkJCXJldHVybiAxOwpAQCAtMjkxLDI1ICsyODQsMTcgQEAKICNpZmRlZiBDT05GSUdfUENJCiAJZG1hX2RlYnVnX2FkZF9idXMoJnBjaV9idXNfdHlwZSk7CiAjZW5kaWYKKwl4ODZfaW5pdC5pb21tdS5pb21tdV9pbml0KCk7CiAKLQljYWxnYXJ5X2lvbW11X2luaXQoKTsKKwlpZiAoc3dpb3RsYikgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiAiCisJCSAgICAgICAiVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyBmb3IgSU8gKFNXSU9UTEIpXG4iKTsKKwkJc3dpb3RsYl9wcmludF9pbmZvKCk7CisJfSBlbHNlCisJCXN3aW90bGJfZnJlZSgpOwogCi0JaW50ZWxfaW9tbXVfaW5pdCgpOwotCi0JYW1kX2lvbW11X2luaXQoKTsKLQotCWdhcnRfaW9tbXVfaW5pdCgpOwotCi0Jbm9faW9tbXVfaW5pdCgpOwogCXJldHVybiAwOwogfQotCi12b2lkIHBjaV9pb21tdV9zaHV0ZG93bih2b2lkKQotewotCWdhcnRfaW9tbXVfc2h1dGRvd24oKTsKLQotCWFtZF9pb21tdV9zaHV0ZG93bigpOwotfQogLyogTXVzdCBleGVjdXRlIGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8KIHJvb3Rmc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggYTdmMWI2NC4uZTZhMGQ0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vazguaD4KKyNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVfYnVzX2Jhc2U7CS8qIEdBUlQgcmVtYXBwaW5nIGFyZWEgKHBoeXNpY2FsKSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVfc2l6ZTsJLyogc2l6ZSBvZiByZW1hcHBpbmcgYXJlYSBieXRlcyAqLwpAQCAtNDYsNiArNDcsOCBAQAogCiBzdGF0aWMgdTMyICppb21tdV9nYXR0X2Jhc2U7CQkvKiBSZW1hcHBpbmcgdGFibGUgKi8KIAorc3RhdGljIGRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyOworCiAvKgogICogSWYgdGhpcyBpcyBkaXNhYmxlZCB0aGUgSU9NTVUgd2lsbCB1c2UgYW4gb3B0aW1pemVkIGZsdXNoaW5nIHN0cmF0ZWd5CiAgKiBvZiBvbmx5IGZsdXNoaW5nIHdoZW4gYW4gbWFwcGluZyBpcyByZXVzZWQuIFdpdGggaXQgdHJ1ZSB0aGUgR0FSVCBpcwpAQCAtOTIsNyArOTUsNyBAQAogCiAJYmFzZV9pbmRleCA9IEFMSUdOKGlvbW11X2J1c19iYXNlICYgZG1hX2dldF9zZWdfYm91bmRhcnkoZGV2KSwKIAkJCSAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKLQlib3VuZGFyeV9zaXplID0gQUxJR04oKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpICsgMSwKKwlib3VuZGFyeV9zaXplID0gQUxJR04oKHU2NClkbWFfZ2V0X3NlZ19ib3VuZGFyeShkZXYpICsgMSwKIAkJCSAgICAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdV9iaXRtYXBfbG9jaywgZmxhZ3MpOwpAQCAtMjE2LDcgKzIxOSw3IEBACiAJCWlmIChwYW5pY19vbl9vdmVyZmxvdykKIAkJCXBhbmljKCJkbWFfbWFwX2FyZWEgb3ZlcmZsb3cgJWx1IGJ5dGVzXG4iLCBzaXplKTsKIAkJaW9tbXVfZnVsbChkZXYsIHNpemUsIGRpcik7Ci0JCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CisJCXJldHVybiBiYWRfZG1hX2FkZHI7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CkBAIC0yOTQsNyArMjk3LDcgQEAKIAlpbnQgaTsKIAogI2lmZGVmIENPTkZJR19JT01NVV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJkbWFfbWFwX3NnIG92ZXJmbG93XG4iKTsKKwlwcl9kZWJ1ZygiZG1hX21hcF9zZyBvdmVyZmxvd1xuIik7CiAjZW5kaWYKIAogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewpAQCAtMzAyLDcgKzMwNSw3IEBACiAKIAkJaWYgKG5vbmZvcmNlZF9pb21tdShkZXYsIGFkZHIsIHMtPmxlbmd0aCkpIHsKIAkJCWFkZHIgPSBkbWFfbWFwX2FyZWEoZGV2LCBhZGRyLCBzLT5sZW5ndGgsIGRpciwgMCk7Ci0JCQlpZiAoYWRkciA9PSBiYWRfZG1hX2FkZHJlc3MpIHsKKwkJCWlmIChhZGRyID09IGJhZF9kbWFfYWRkcikgewogCQkJCWlmIChpID4gMCkKIAkJCQkJZ2FydF91bm1hcF9zZyhkZXYsIHNnLCBpLCBkaXIsIE5VTEwpOwogCQkJCW5lbnRzID0gMDsKQEAgLTM4OSwxMiArMzkyLDE0IEBACiAJaWYgKCFkZXYpCiAJCWRldiA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2RldjsKIAotCW91dCA9IDA7Ci0Jc3RhcnQgPSAwOwotCXN0YXJ0X3NnID0gc2dtYXAgPSBzZzsKLQlzZWdfc2l6ZSA9IDA7Ci0JbWF4X3NlZ19zaXplID0gZG1hX2dldF9tYXhfc2VnX3NpemUoZGV2KTsKLQlwcyA9IE5VTEw7IC8qIHNodXQgdXAgZ2NjICovCisJb3V0CQk9IDA7CisJc3RhcnQJCT0gMDsKKwlzdGFydF9zZwk9IHNnOworCXNnbWFwCQk9IHNnOworCXNlZ19zaXplCT0gMDsKKwltYXhfc2VnX3NpemUJPSBkbWFfZ2V0X21heF9zZWdfc2l6ZShkZXYpOworCXBzCQk9IE5VTEw7IC8qIHNodXQgdXAgZ2NjICovCisKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKIAkJZG1hX2FkZHJfdCBhZGRyID0gc2dfcGh5cyhzKTsKIApAQCAtNDE3LDExICs0MjIsMTIgQEAKIAkJCQkJCSBzZ21hcCwgcGFnZXMsIG5lZWQpIDwgMCkKIAkJCQkJZ290byBlcnJvcjsKIAkJCQlvdXQrKzsKLQkJCQlzZWdfc2l6ZSA9IDA7Ci0JCQkJc2dtYXAgPSBzZ19uZXh0KHNnbWFwKTsKLQkJCQlwYWdlcyA9IDA7Ci0JCQkJc3RhcnQgPSBpOwotCQkJCXN0YXJ0X3NnID0gczsKKworCQkJCXNlZ19zaXplCT0gMDsKKwkJCQlzZ21hcAkJPSBzZ19uZXh0KHNnbWFwKTsKKwkJCQlwYWdlcwkJPSAwOworCQkJCXN0YXJ0CQk9IGk7CisJCQkJc3RhcnRfc2cJPSBzOwogCQkJfQogCQl9CiAKQEAgLTQ1NSw3ICs0NjEsNyBAQAogCiAJaW9tbXVfZnVsbChkZXYsIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIGRpcik7CiAJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKQotCQlzLT5kbWFfYWRkcmVzcyA9IGJhZF9kbWFfYWRkcmVzczsKKwkJcy0+ZG1hX2FkZHJlc3MgPSBiYWRfZG1hX2FkZHI7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3OSw3ICs0ODUsNyBAQAogCQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwsIGFsaWduX21hc2spOwogCiAJCWZsdXNoX2dhcnQoKTsKLQkJaWYgKHBhZGRyICE9IGJhZF9kbWFfYWRkcmVzcykgeworCQlpZiAocGFkZHIgIT0gYmFkX2RtYV9hZGRyKSB7CiAJCQkqZG1hX2FkZHIgPSBwYWRkcjsKIAkJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAJCX0KQEAgLTQ5OSw2ICs1MDUsMTEgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCitzdGF0aWMgaW50IGdhcnRfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIChkbWFfYWRkciA9PSBiYWRfZG1hX2FkZHIpOworfQorCiBzdGF0aWMgaW50IG5vX2FncDsKIAogc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIGNoZWNrX2lvbW11X3NpemUodW5zaWduZWQgbG9uZyBhcGVyLCB1NjQgYXBlcl9zaXplKQpAQCAtNTE1LDcgKzUyNiw3IEBACiAJaW9tbXVfc2l6ZSAtPSByb3VuZF91cChhLCBQTURfUEFHRV9TSVpFKSAtIGE7CiAKIAlpZiAoaW9tbXVfc2l6ZSA8IDY0KjEwMjQqMTAyNCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCXByX3dhcm5pbmcoCiAJCQkiUENJLURNQTogV2FybmluZzogU21hbGwgSU9NTVUgJWx1TUIuIgogCQkJIiBDb25zaWRlciBpbmNyZWFzaW5nIHRoZSBBR1AgYXBlcnR1cmUgaW4gQklPU1xuIiwKIAkJCQlpb21tdV9zaXplID4+IDIwKTsKQEAgLTU3MCwyOCArNTgxLDMyIEBACiAJYXBlcnR1cmVfYWxsb2MgPSBhcGVyX2FsbG9jOwogfQogCitzdGF0aWMgdm9pZCBnYXJ0X2ZpeHVwX25vcnRoYnJpZGdlcyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWludCBpOworCisJaWYgKCFmaXhfdXBfbm9ydGhfYnJpZGdlcykKKwkJcmV0dXJuOworCisJcHJfaW5mbygiUENJLURNQTogUmVzdG9yaW5nIEdBUlQgYXBlcnR1cmUgc2V0dGluZ3NcbiIpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9rOF9ub3J0aGJyaWRnZXM7IGkrKykgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gazhfbm9ydGhicmlkZ2VzW2ldOworCisJCS8qCisJCSAqIERvbid0IGVuYWJsZSB0cmFuc2xhdGlvbnMganVzdCB5ZXQuICBUaGF0IGlzIHRoZSBuZXh0CisJCSAqIHN0ZXAuICBSZXN0b3JlIHRoZSBwcmUtc3VzcGVuZCBhcGVydHVyZSBzZXR0aW5ncy4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsIGFwZXJ0dXJlX29yZGVyIDw8IDEpOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRSwgYXBlcnR1cmVfYWxsb2MgPj4gMjUpOworCX0KK30KKwogc3RhdGljIGludCBnYXJ0X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQogewotCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFJlc3VtaW5nIEdBUlQgSU9NTVVcbiIpOworCXByX2luZm8oIlBDSS1ETUE6IFJlc3VtaW5nIEdBUlQgSU9NTVVcbiIpOwogCi0JaWYgKGZpeF91cF9ub3J0aF9icmlkZ2VzKSB7Ci0JCWludCBpOwotCi0JCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IFJlc3RvcmluZyBHQVJUIGFwZXJ0dXJlIHNldHRpbmdzXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2s4X25vcnRoYnJpZGdlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gazhfbm9ydGhicmlkZ2VzW2ldOwotCi0JCQkvKgotCQkJICogRG9uJ3QgZW5hYmxlIHRyYW5zbGF0aW9ucyBqdXN0IHlldC4gIFRoYXQgaXMgdGhlIG5leHQKLQkJCSAqIHN0ZXAuICBSZXN0b3JlIHRoZSBwcmUtc3VzcGVuZCBhcGVydHVyZSBzZXR0aW5ncy4KLQkJCSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwKLQkJCQkJCWFwZXJ0dXJlX29yZGVyIDw8IDEpOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUJBU0UsCi0JCQkJCQlhcGVydHVyZV9hbGxvYyA+PiAyNSk7Ci0JCX0KLQl9CisJZ2FydF9maXh1cF9ub3J0aGJyaWRnZXMoZGV2KTsKIAogCWVuYWJsZV9nYXJ0X3RyYW5zbGF0aW9ucygpOwogCkBAIC02MDQsMTUgKzYxOSwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBnYXJ0X3N5c2Rldl9jbGFzcyA9IHsKLQkubmFtZSA9ICJnYXJ0IiwKLQkuc3VzcGVuZCA9IGdhcnRfc3VzcGVuZCwKLQkucmVzdW1lID0gZ2FydF9yZXN1bWUsCisJLm5hbWUJCT0gImdhcnQiLAorCS5zdXNwZW5kCT0gZ2FydF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZ2FydF9yZXN1bWUsCiAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfZ2FydCA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmZ2FydF9zeXNkZXZfY2xhc3MsCisJLmNscwkJPSAmZ2FydF9zeXNkZXZfY2xhc3MsCiB9OwogCiAvKgpAQCAtNjI3LDcgKzY0MSw4IEBACiAJdm9pZCAqZ2F0dDsKIAlpbnQgaSwgZXJyb3I7CiAKLQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiBEaXNhYmxpbmcgQUdQLlxuIik7CisJcHJfaW5mbygiUENJLURNQTogRGlzYWJsaW5nIEFHUC5cbiIpOworCiAJYXBlcl9zaXplID0gYXBlcl9iYXNlID0gaW5mby0+YXBlcl9zaXplID0gMDsKIAlkZXYgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBudW1fazhfbm9ydGhicmlkZ2VzOyBpKyspIHsKQEAgLTY0NSw2ICs2NjAsNyBAQAogCX0KIAlpZiAoIWFwZXJfYmFzZSkKIAkJZ290byBub21tdTsKKwogCWluZm8tPmFwZXJfYmFzZSA9IGFwZXJfYmFzZTsKIAlpbmZvLT5hcGVyX3NpemUgPSBhcGVyX3NpemUgPj4gMjA7CiAKQEAgLTY2NywxNCArNjgzLDE0IEBACiAKIAlmbHVzaF9nYXJ0KCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiBhcGVydHVyZSBiYXNlIEAgJXggc2l6ZSAldSBLQlxuIiwKKwlwcl9pbmZvKCJQQ0ktRE1BOiBhcGVydHVyZSBiYXNlIEAgJXggc2l6ZSAldSBLQlxuIiwKIAkgICAgICAgYXBlcl9iYXNlLCBhcGVyX3NpemU+PjEwKTsKIAogCXJldHVybiAwOwogCiAgbm9tbXU6CiAJLyogU2hvdWxkIG5vdCBoYXBwZW4gYW55bW9yZSAqLwotCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSS1ETUE6IE1vcmUgdGhhbiA0R0Igb2YgUkFNIGFuZCBubyBJT01NVVxuIgorCXByX3dhcm5pbmcoIlBDSS1ETUE6IE1vcmUgdGhhbiA0R0Igb2YgUkFNIGFuZCBubyBJT01NVVxuIgogCSAgICAgICAiZmFsbGluZyBiYWNrIHRvIGlvbW11PXNvZnQuXG4iKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC02ODYsMTQgKzcwMiwxNSBAQAogCS51bm1hcF9wYWdlCQkJPSBnYXJ0X3VubWFwX3BhZ2UsCiAJLmFsbG9jX2NvaGVyZW50CQkJPSBnYXJ0X2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50CQkJPSBnYXJ0X2ZyZWVfY29oZXJlbnQsCisJLm1hcHBpbmdfZXJyb3IJCQk9IGdhcnRfbWFwcGluZ19lcnJvciwKIH07CiAKLXZvaWQgZ2FydF9pb21tdV9zaHV0ZG93bih2b2lkKQorc3RhdGljIHZvaWQgZ2FydF9pb21tdV9zaHV0ZG93bih2b2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJaW50IGk7CiAKLQlpZiAobm9fYWdwICYmIChkbWFfb3BzICE9ICZnYXJ0X2RtYV9vcHMpKQorCWlmIChub19hZ3ApCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fazhfbm9ydGhicmlkZ2VzOyBpKyspIHsKQEAgLTcwOCw3ICs3MjUsNyBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgZ2FydF9pb21tdV9pbml0KHZvaWQpCitpbnQgX19pbml0IGdhcnRfaW9tbXVfaW5pdCh2b2lkKQogewogCXN0cnVjdCBhZ3Bfa2Vybl9pbmZvIGluZm87CiAJdW5zaWduZWQgbG9uZyBpb21tdV9zdGFydDsKQEAgLTcxOCw3ICs3MzUsNyBAQAogCWxvbmcgaTsKIAogCWlmIChjYWNoZV9rOF9ub3J0aGJyaWRnZXMoKSA8IDAgfHwgbnVtX2s4X25vcnRoYnJpZGdlcyA9PSAwKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAjaWZuZGVmIENPTkZJR19BR1BfQU1ENjQKIAlub19hZ3AgPSAxOwpAQCAtNzMwLDM1ICs3NDcsMjggQEAKIAkJKGFncF9jb3B5X2luZm8oYWdwX2JyaWRnZSwgJmluZm8pIDwgMCk7CiAjZW5kaWYKIAotCWlmIChzd2lvdGxiKQotCQlyZXR1cm47Ci0KLQkvKiBEaWQgd2UgZGV0ZWN0IGEgZGlmZmVyZW50IEhXIElPTU1VPyAqLwotCWlmIChpb21tdV9kZXRlY3RlZCAmJiAhZ2FydF9pb21tdV9hcGVydHVyZSkKLQkJcmV0dXJuOwotCiAJaWYgKG5vX2lvbW11IHx8CiAJICAgICghZm9yY2VfaW9tbXUgJiYgbWF4X3BmbiA8PSBNQVhfRE1BMzJfUEZOKSB8fAogCSAgICAhZ2FydF9pb21tdV9hcGVydHVyZSB8fAogCSAgICAobm9fYWdwICYmIGluaXRfazhfZ2F0dCgmaW5mbykgPCAwKSkgewogCQlpZiAobWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1vcmUgdGhhbiA0R0Igb2YgbWVtb3J5ICIKLQkJCSAgICAgICAiYnV0IEdBUlQgSU9NTVUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZmFsbGluZyBiYWNrIHRvIGlvbW11PXNvZnQuXG4iKTsKKwkJCXByX3dhcm5pbmcoIk1vcmUgdGhhbiA0R0Igb2YgbWVtb3J5IGJ1dCBHQVJUIElPTU1VIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJCXByX3dhcm5pbmcoImZhbGxpbmcgYmFjayB0byBpb21tdT1zb2Z0LlxuIik7CiAJCX0KLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBuZWVkIHRvIG1hcCB0aGF0IHJhbmdlICovCi0JYXBlcl9zaXplID0gaW5mby5hcGVyX3NpemUgPDwgMjA7Ci0JYXBlcl9iYXNlID0gaW5mby5hcGVyX2Jhc2U7Ci0JZW5kX3BmbiA9IChhcGVyX2Jhc2U+PlBBR0VfU0hJRlQpICsgKGFwZXJfc2l6ZT4+UEFHRV9TSElGVCk7CisJYXBlcl9zaXplCT0gaW5mby5hcGVyX3NpemUgPDwgMjA7CisJYXBlcl9iYXNlCT0gaW5mby5hcGVyX2Jhc2U7CisJZW5kX3BmbgkJPSAoYXBlcl9iYXNlPj5QQUdFX1NISUZUKSArIChhcGVyX3NpemU+PlBBR0VfU0hJRlQpOworCiAJaWYgKGVuZF9wZm4gPiBtYXhfbG93X3Bmbl9tYXBwZWQpIHsKIAkJc3RhcnRfcGZuID0gKGFwZXJfYmFzZT4+UEFHRV9TSElGVCk7CiAJCWluaXRfbWVtb3J5X21hcHBpbmcoc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJQQ0ktRE1BOiB1c2luZyBHQVJUIElPTU1VLlxuIik7CisJcHJfaW5mbygiUENJLURNQTogdXNpbmcgR0FSVCBJT01NVS5cbiIpOwogCWlvbW11X3NpemUgPSBjaGVja19pb21tdV9zaXplKGluZm8uYXBlcl9iYXNlLCBhcGVyX3NpemUpOwogCWlvbW11X3BhZ2VzID0gaW9tbXVfc2l6ZSA+PiBQQUdFX1NISUZUOwogCkBAIC03NzMsOCArNzgzLDcgQEAKIAogCQlyZXQgPSBkbWFfZGVidWdfcmVzaXplX2VudHJpZXMoaW9tbXVfcGFnZXMpOwogCQlpZiAocmV0KQotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAiUENJLURNQTogQ2Fubm90IHRyYWNlIGFsbCB0aGUgZW50cmllc1xuIik7CisJCQlwcl9kZWJ1ZygiUENJLURNQTogQ2Fubm90IHRyYWNlIGFsbCB0aGUgZW50cmllc1xuIik7CiAJfQogI2VuZGlmCiAKQEAgLTc4NCwxNSArNzkzLDE0IEBACiAJICovCiAJaW9tbXVfYXJlYV9yZXNlcnZlKGlvbW11X2dhcnRfYml0bWFwLCAwLCBFTUVSR0VOQ1lfUEFHRVMpOwogCi0JYWdwX21lbW9yeV9yZXNlcnZlZCA9IGlvbW11X3NpemU7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiUENJLURNQTogUmVzZXJ2aW5nICVsdU1CIG9mIElPTU1VIGFyZWEgaW4gdGhlIEFHUCBhcGVydHVyZVxuIiwKKwlwcl9pbmZvKCJQQ0ktRE1BOiBSZXNlcnZpbmcgJWx1TUIgb2YgSU9NTVUgYXJlYSBpbiB0aGUgQUdQIGFwZXJ0dXJlXG4iLAogCSAgICAgICBpb21tdV9zaXplID4+IDIwKTsKIAotCWlvbW11X3N0YXJ0ID0gYXBlcl9zaXplIC0gaW9tbXVfc2l6ZTsKLQlpb21tdV9idXNfYmFzZSA9IGluZm8uYXBlcl9iYXNlICsgaW9tbXVfc3RhcnQ7Ci0JYmFkX2RtYV9hZGRyZXNzID0gaW9tbXVfYnVzX2Jhc2U7Ci0JaW9tbXVfZ2F0dF9iYXNlID0gYWdwX2dhdHRfdGFibGUgKyAoaW9tbXVfc3RhcnQ+PlBBR0VfU0hJRlQpOworCWFncF9tZW1vcnlfcmVzZXJ2ZWQJPSBpb21tdV9zaXplOworCWlvbW11X3N0YXJ0CQk9IGFwZXJfc2l6ZSAtIGlvbW11X3NpemU7CisJaW9tbXVfYnVzX2Jhc2UJCT0gaW5mby5hcGVyX2Jhc2UgKyBpb21tdV9zdGFydDsKKwliYWRfZG1hX2FkZHIJCT0gaW9tbXVfYnVzX2Jhc2U7CisJaW9tbXVfZ2F0dF9iYXNlCQk9IGFncF9nYXR0X3RhYmxlICsgKGlvbW11X3N0YXJ0Pj5QQUdFX1NISUZUKTsKIAogCS8qCiAJICogVW5tYXAgdGhlIElPTU1VIHBhcnQgb2YgdGhlIEdBUlQuIFRoZSBhbGlhcyBvZiB0aGUgcGFnZSBpcwpAQCAtODE0LDcgKzgyMiw3IEBACiAJICogdGhlIHBhZ2VzIGFzIE5vdC1QcmVzZW50OgogCSAqLwogCXdiaW52ZCgpOwotCQorCiAJLyoKIAkgKiBOb3cgYWxsIGNhY2hlcyBhcmUgZmx1c2hlZCBhbmQgd2UgY2FuIHNhZmVseSBlbmFibGUKIAkgKiBHQVJUIGhhcmR3YXJlLiAgRG9pbmcgaXQgZWFybHkgbGVhdmVzIHRoZSBwb3NzaWJpbGl0eQpAQCAtODM4LDYgKzg0NiwxMCBAQAogCiAJZmx1c2hfZ2FydCgpOwogCWRtYV9vcHMgPSAmZ2FydF9kbWFfb3BzOworCXg4Nl9wbGF0Zm9ybS5pb21tdV9zaHV0ZG93biA9IGdhcnRfaW9tbXVfc2h1dGRvd247CisJc3dpb3RsYiA9IDA7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBfX2luaXQgZ2FydF9wYXJzZV9vcHRpb25zKGNoYXIgKnApCkBAIC04NTYsNyArODY4LDcgQEAKICNlbmRpZgogCWlmIChpc2RpZ2l0KCpwKSAmJiBnZXRfb3B0aW9uKCZwLCAmYXJnKSkKIAkJaW9tbXVfc2l6ZSA9IGFyZzsKLQlpZiAoIXN0cm5jbXAocCwgImZ1bGxmbHVzaCIsIDgpKQorCWlmICghc3RybmNtcChwLCAiZnVsbGZsdXNoIiwgOSkpCiAJCWlvbW11X2Z1bGxmbHVzaCA9IDE7CiAJaWYgKCFzdHJuY21wKHAsICJub2Z1bGxmbHVzaCIsIDExKSkKIAkJaW9tbXVfZnVsbGZsdXNoID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwppbmRleCBhMzkzM2Q0Li4yMmJlMTJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCkBAIC0zMyw3ICszMyw3IEBACiAJZG1hX2FkZHJfdCBidXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAJV0FSTl9PTihzaXplID09IDApOwogCWlmICghY2hlY2tfYWRkcigibWFwX3NpbmdsZSIsIGRldiwgYnVzLCBzaXplKSkKLQkJcmV0dXJuIGJhZF9kbWFfYWRkcmVzczsKKwkJcmV0dXJuIERNQV9FUlJPUl9DT0RFOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIAlyZXR1cm4gYnVzOwogfQpAQCAtMTAzLDEyICsxMDMsMyBAQAogCS5zeW5jX3NnX2Zvcl9kZXZpY2UJPSBub21tdV9zeW5jX3NnX2Zvcl9kZXZpY2UsCiAJLmlzX3BoeXMJCT0gMSwKIH07Ci0KLXZvaWQgX19pbml0IG5vX2lvbW11X2luaXQodm9pZCkKLXsKLQlpZiAoZG1hX29wcykKLQkJcmV0dXJuOwotCi0JZm9yY2VfaW9tbXUgPSAwOyAvKiBubyBIVyBJT01NVSAqLwotCWRtYV9vcHMgPSAmbm9tbXVfZG1hX29wczsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKaW5kZXggYWFhNmI3OC4uZTNjMGE2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTQyLDE4ICs0MiwyOCBAQAogCS5kbWFfc3VwcG9ydGVkID0gTlVMTCwKIH07CiAKLXZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKKy8qCisgKiBwY2lfc3dpb3RsYl9pbml0IC0gaW5pdGlhbGl6ZSBzd2lvdGxiIGlmIG5lY2Vzc2FyeQorICoKKyAqIFRoaXMgcmV0dXJucyBub24temVybyBpZiB3ZSBhcmUgZm9yY2VkIHRvIHVzZSBzd2lvdGxiIChieSB0aGUgYm9vdAorICogb3B0aW9uKS4KKyAqLworaW50IF9faW5pdCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpCiB7CisJaW50IHVzZV9zd2lvdGxiID0gc3dpb3RsYiB8IHN3aW90bGJfZm9yY2U7CisKIAkvKiBkb24ndCBpbml0aWFsaXplIHN3aW90bGIgaWYgaW9tbXU9b2ZmIChub19pb21tdT0xKSAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoKCFpb21tdV9kZXRlY3RlZCAmJiAhbm9faW9tbXUgJiYgbWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pKQorCWlmICghbm9faW9tbXUgJiYgbWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pCiAJCXN3aW90bGIgPSAxOwogI2VuZGlmCiAJaWYgKHN3aW90bGJfZm9yY2UpCiAJCXN3aW90bGIgPSAxOworCiAJaWYgKHN3aW90bGIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyBmb3IgSU8gKFNXSU9UTEIpXG4iKTsKLQkJc3dpb3RsYl9pbml0KCk7CisJCXN3aW90bGJfaW5pdCgwKTsKIAkJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CiAJfQorCisJcmV0dXJuIHVzZV9zd2lvdGxiOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNTI4NGNkMi4uNzQ0NTA4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KQEAgLTE3LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAjaW5jbHVkZSA8YXNtL2RzLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAKIHVuc2lnbmVkIGxvbmcgaWRsZV9oYWx0OwogRVhQT1JUX1NZTUJPTChpZGxlX2hhbHQpOwpAQCAtMTAzLDE0ICsxMDUsNyBAQAogCX0KICNlbmRpZgogCi0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0RFQlVHKTsKLQotCXRzay0+dGhyZWFkLmRlYnVncmVnMCA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWcxID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzIgPSAwOwotCXRzay0+dGhyZWFkLmRlYnVncmVnMyA9IDA7Ci0JdHNrLT50aHJlYWQuZGVidWdyZWc2ID0gMDsKLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzcgPSAwOworCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CiAJbWVtc2V0KHRzay0+dGhyZWFkLnRsc19hcnJheSwgMCwgc2l6ZW9mKHRzay0+dGhyZWFkLnRsc19hcnJheSkpOwogCS8qCiAJICogRm9yZ2V0IGNvcHJvY2Vzc29yIHN0YXRlLi4KQEAgLTE5MiwxNiArMTg3LDYgQEAKIAllbHNlIGlmIChuZXh0LT5kZWJ1Z2N0bG1zciAhPSBwcmV2LT5kZWJ1Z2N0bG1zcikKIAkJdXBkYXRlX2RlYnVnY3RsbXNyKG5leHQtPmRlYnVnY3RsbXNyKTsKIAotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9ERUJVRykpIHsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMCwgMCk7Ci0JCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzEsIDEpOwotCQlzZXRfZGVidWdyZWcobmV4dC0+ZGVidWdyZWcyLCAyKTsKLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnMywgMyk7Ci0JCS8qIG5vIDQgYW5kIDUgKi8KLQkJc2V0X2RlYnVncmVnKG5leHQtPmRlYnVncmVnNiwgNik7Ci0JCXNldF9kZWJ1Z3JlZyhuZXh0LT5kZWJ1Z3JlZzcsIDcpOwotCX0KLQogCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwcmV2X3AsIFRJRl9OT1RTQykgXgogCSAgICB0ZXN0X3Rza190aHJlYWRfZmxhZyhuZXh0X3AsIFRJRl9OT1RTQykpIHsKIAkJLyogcHJldiBhbmQgbmV4dCBhcmUgZGlmZmVyZW50ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCA0Y2Y3OTU2Li4wNzU1ODBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGFzbS9kcy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBfX2FzbV9fKCJyZXRfZnJvbV9mb3JrIik7CiAKQEAgLTEzNCw3ICsxMzUsNyBAQAogCQlzcyA9IHJlZ3MtPnNzICYgMHhmZmZmOwogCQlncyA9IGdldF91c2VyX2dzKHJlZ3MpOwogCX0gZWxzZSB7Ci0JCXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+c3ApOworCQlzcCA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQlzYXZlc2VnbWVudChzcywgc3MpOwogCQlzYXZlc2VnbWVudChncywgZ3MpOwogCX0KQEAgLTE4Nyw3ICsxODgsNyBAQAogCiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlfX3Nob3dfcmVncyhyZWdzLCAxKTsKKwlzaG93X3JlZ2lzdGVycyhyZWdzKTsKIAlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICZyZWdzLT5zcCwgcmVncy0+YnApOwogfQogCkBAIC0yNTksNyArMjYwLDEyIEBACiAKIAl0YXNrX3VzZXJfZ3MocCkgPSBnZXRfdXNlcl9ncyhyZWdzKTsKIAorCXAtPnRocmVhZC5pb19iaXRtYXBfcHRyID0gTlVMTDsKIAl0c2sgPSBjdXJyZW50OworCWVyciA9IC1FTk9NRU07CisKKwltZW1zZXQocC0+dGhyZWFkLnB0cmFjZV9icHMsIDAsIHNpemVvZihwLT50aHJlYWQucHRyYWNlX2JwcykpOworCiAJaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0lPX0JJVE1BUCkpKSB7CiAJCXAtPnRocmVhZC5pb19iaXRtYXBfcHRyID0ga21lbWR1cCh0c2stPnRocmVhZC5pb19iaXRtYXBfcHRyLAogCQkJCQkJSU9fQklUTUFQX0JZVEVTLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGFkNTM1YjYuLmE5OGZlODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2RzLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAKIGFzbWxpbmthZ2UgZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIApAQCAtMjI2LDggKzIyNyw3IEBACiAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZDoiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCV9fc2hvd19yZWdzKHJlZ3MsIDEpOworCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwogCXNob3dfdHJhY2UoTlVMTCwgcmVncywgKHZvaWQgKikocmVncyArIDEpLCByZWdzLT5icCk7CiB9CiAKQEAgLTI5NywxMiArMjk3LDE2IEBACiAKIAlwLT50aHJlYWQuZnMgPSBtZS0+dGhyZWFkLmZzOwogCXAtPnRocmVhZC5ncyA9IG1lLT50aHJlYWQuZ3M7CisJcC0+dGhyZWFkLmlvX2JpdG1hcF9wdHIgPSBOVUxMOwogCiAJc2F2ZXNlZ21lbnQoZ3MsIHAtPnRocmVhZC5nc2luZGV4KTsKIAlzYXZlc2VnbWVudChmcywgcC0+dGhyZWFkLmZzaW5kZXgpOwogCXNhdmVzZWdtZW50KGVzLCBwLT50aHJlYWQuZXMpOwogCXNhdmVzZWdtZW50KGRzLCBwLT50aHJlYWQuZHMpOwogCisJZXJyID0gLUVOT01FTTsKKwltZW1zZXQocC0+dGhyZWFkLnB0cmFjZV9icHMsIDAsIHNpemVvZihwLT50aHJlYWQucHRyYWNlX2JwcykpOworCiAJaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKG1lLCBUSUZfSU9fQklUTUFQKSkpIHsKIAkJcC0+dGhyZWFkLmlvX2JpdG1hcF9wdHIgPSBrbWFsbG9jKElPX0JJVE1BUF9CWVRFUywgR0ZQX0tFUk5FTCk7CiAJCWlmICghcC0+dGhyZWFkLmlvX2JpdG1hcF9wdHIpIHsKQEAgLTM0MSw2ICszNDUsNyBAQAogCQlrZnJlZShwLT50aHJlYWQuaW9fYml0bWFwX3B0cik7CiAJCXAtPnRocmVhZC5pb19iaXRtYXBfbWF4ID0gMDsKIAl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00OTUsNiArNTAwLDcgQEAKIAkgKi8KIAlpZiAocHJlbG9hZF9mcHUpCiAJCV9fbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CisKIAlyZXR1cm4gcHJldl9wOwogfQogCkBAIC02NjQsMyArNjcwLDggQEAKIAlyZXR1cm4gZG9fYXJjaF9wcmN0bChjdXJyZW50LCBjb2RlLCBhZGRyKTsKIH0KIAordW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfSUEzMikpID8KKwkJCSh0YXNrX3B0X3JlZ3ModGFzayktPnNwKSA6ICgodGFzayktPnRocmVhZC51c2Vyc3ApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDdiMDU4YTIuLjA0ZDE4MmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTM0LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJjdGwuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vZHMuaD4KKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgogCiAjaW5jbHVkZSAidGxzLmgiCiAKQEAgLTQ5LDYgKzUyLDExOCBAQAogCVJFR1NFVF9JT1BFUk0zMiwKIH07CiAKK3N0cnVjdCBwdF9yZWdzX29mZnNldCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgb2Zmc2V0OworfTsKKworI2RlZmluZSBSRUdfT0ZGU0VUX05BTUUocikgey5uYW1lID0gI3IsIC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcil9CisjZGVmaW5lIFJFR19PRkZTRVRfRU5EIHsubmFtZSA9IE5VTEwsIC5vZmZzZXQgPSAwfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHB0X3JlZ3Nfb2Zmc2V0IHJlZ29mZnNldF90YWJsZVtdID0geworI2lmZGVmIENPTkZJR19YODZfNjQKKwlSRUdfT0ZGU0VUX05BTUUocjE1KSwKKwlSRUdfT0ZGU0VUX05BTUUocjE0KSwKKwlSRUdfT0ZGU0VUX05BTUUocjEzKSwKKwlSRUdfT0ZGU0VUX05BTUUocjEyKSwKKwlSRUdfT0ZGU0VUX05BTUUocjExKSwKKwlSRUdfT0ZGU0VUX05BTUUocjEwKSwKKwlSRUdfT0ZGU0VUX05BTUUocjkpLAorCVJFR19PRkZTRVRfTkFNRShyOCksCisjZW5kaWYKKwlSRUdfT0ZGU0VUX05BTUUoYngpLAorCVJFR19PRkZTRVRfTkFNRShjeCksCisJUkVHX09GRlNFVF9OQU1FKGR4KSwKKwlSRUdfT0ZGU0VUX05BTUUoc2kpLAorCVJFR19PRkZTRVRfTkFNRShkaSksCisJUkVHX09GRlNFVF9OQU1FKGJwKSwKKwlSRUdfT0ZGU0VUX05BTUUoYXgpLAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlSRUdfT0ZGU0VUX05BTUUoZHMpLAorCVJFR19PRkZTRVRfTkFNRShlcyksCisJUkVHX09GRlNFVF9OQU1FKGZzKSwKKwlSRUdfT0ZGU0VUX05BTUUoZ3MpLAorI2VuZGlmCisJUkVHX09GRlNFVF9OQU1FKG9yaWdfYXgpLAorCVJFR19PRkZTRVRfTkFNRShpcCksCisJUkVHX09GRlNFVF9OQU1FKGNzKSwKKwlSRUdfT0ZGU0VUX05BTUUoZmxhZ3MpLAorCVJFR19PRkZTRVRfTkFNRShzcCksCisJUkVHX09GRlNFVF9OQU1FKHNzKSwKKwlSRUdfT0ZGU0VUX0VORCwKK307CisKKy8qKgorICogcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoKSAtIHF1ZXJ5IHJlZ2lzdGVyIG9mZnNldCBmcm9tIGl0cyBuYW1lCisgKiBAbmFtZToJdGhlIG5hbWUgb2YgYSByZWdpc3RlcgorICoKKyAqIHJlZ3NfcXVlcnlfcmVnaXN0ZXJfb2Zmc2V0KCkgcmV0dXJucyB0aGUgb2Zmc2V0IG9mIGEgcmVnaXN0ZXIgaW4gc3RydWN0CisgKiBwdF9yZWdzIGZyb20gaXRzIG5hbWUuIElmIHRoZSBuYW1lIGlzIGludmFsaWQsIHRoaXMgcmV0dXJucyAtRUlOVkFMOworICovCitpbnQgcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVnc19vZmZzZXQgKnJvZmY7CisJZm9yIChyb2ZmID0gcmVnb2Zmc2V0X3RhYmxlOyByb2ZmLT5uYW1lICE9IE5VTEw7IHJvZmYrKykKKwkJaWYgKCFzdHJjbXAocm9mZi0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcm9mZi0+b2Zmc2V0OworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgpIC0gcXVlcnkgcmVnaXN0ZXIgbmFtZSBmcm9tIGl0cyBvZmZzZXQKKyAqIEBvZmZzZXQ6CXRoZSBvZmZzZXQgb2YgYSByZWdpc3RlciBpbiBzdHJ1Y3QgcHRfcmVncy4KKyAqCisgKiByZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUoKSByZXR1cm5zIHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXIgZnJvbSBpdHMKKyAqIG9mZnNldCBpbiBzdHJ1Y3QgcHRfcmVncy4gSWYgdGhlIEBvZmZzZXQgaXMgaW52YWxpZCwgdGhpcyByZXR1cm5zIE5VTEw7CisgKi8KK2NvbnN0IGNoYXIgKnJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWNvbnN0IHN0cnVjdCBwdF9yZWdzX29mZnNldCAqcm9mZjsKKwlmb3IgKHJvZmYgPSByZWdvZmZzZXRfdGFibGU7IHJvZmYtPm5hbWUgIT0gTlVMTDsgcm9mZisrKQorCQlpZiAocm9mZi0+b2Zmc2V0ID09IG9mZnNldCkKKwkJCXJldHVybiByb2ZmLT5uYW1lOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgaW50IGFyZ19vZmZzX3RhYmxlW10gPSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCVswXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBheCksCisJWzFdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGR4KSwKKwlbMl0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgY3gpCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJWzBdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGRpKSwKKwlbMV0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc2kpLAorCVsyXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkeCksCisJWzNdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGN4KSwKKwlbNF0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjgpLAorCVs1XSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByOSkKKyNlbmRpZgorfTsKKworLyoqCisgKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSAtIGdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbAorICogQHJlZ3M6CXB0X3JlZ3Mgd2hpY2ggY29udGFpbnMgcmVnaXN0ZXJzIGF0IGZ1bmN0aW9uIGVudHJ5LgorICogQG46CQlhcmd1bWVudCBudW1iZXIuCisgKgorICogcmVnc19nZXRfYXJndW1lbnRfbnRoKCkgcmV0dXJucyBAbiB0aCBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIGNhbGwuCisgKiBTaW5jZSB1c3VhbGx5IHRoZSBrZXJuZWwgc3RhY2sgd2lsbCBiZSBjaGFuZ2VkIHJpZ2h0IGFmdGVyIGZ1bmN0aW9uIGVudHJ5LAorICogeW91IG11c3QgdXNlIHRoaXMgYXQgZnVuY3Rpb24gZW50cnkuIElmIHRoZSBAbiB0aCBlbnRyeSBpcyBOT1QgaW4gdGhlCisgKiBrZXJuZWwgc3RhY2sgb3IgcHRfcmVncywgdGhpcyByZXR1cm5zIDAuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlpZiAobiA8IEFSUkFZX1NJWkUoYXJnX29mZnNfdGFibGUpKQorCQlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKChjaGFyICopcmVncyArIGFyZ19vZmZzX3RhYmxlW25dKTsKKwllbHNlIHsKKwkJLyoKKwkJICogVGhlIHR5cGljYWwgY2FzZTogYXJnIG4gaXMgb24gdGhlIHN0YWNrLgorCQkgKiAoTm90ZTogc3RhY2tbMF0gPSByZXR1cm4gYWRkcmVzcywgc28gc2tpcCBpdCkKKwkJICovCisJCW4gLT0gQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSk7CisJCXJldHVybiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHJlZ3MsIDEgKyBuKTsKKwl9Cit9CisKIC8qCiAgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCiAgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCkBAIC0xMzcsMTEgKzI1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlYnVncmVnX2FkZHJfbGltaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXJldHVybiBUQVNLX1NJWkUgLSAzOwotfQotCiAjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLwogCiAjZGVmaW5lIEZMQUdfTUFTSwkJKEZMQUdfTUFTS18zMiB8IFg4Nl9FRkxBR1NfTlQpCkBAIC0yNjYsMTUgKzM3Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlYnVncmVnX2FkZHJfbGltaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgotCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfSUEzMikpCi0JCXJldHVybiBJQTMyX1BBR0VfT0ZGU0VUIC0gMzsKLSNlbmRpZgotCXJldHVybiBUQVNLX1NJWkVfTUFYIC0gNzsKLX0KLQogI2VuZGlmCS8qIENPTkZJR19YODZfMzIgKi8KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ZsYWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKQEAgLTQ1NCw5NiArNTU1LDIzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaXZpYWwgYW5kIHdpbGwgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuCi0gKiBIYXZpbmcgaXQgc2VwYXJhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGRlYnVnCi0gKiByZWdpc3RlcnMgZnJvbSB0aGUgaW50ZXJmYWNlIGRldGFpbHMgb2YgcHRyYWNlLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwdHJhY2VfZ2V0X2RlYnVncmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBuKQorc3RhdGljIHZvaWQgcHRyYWNlX3RyaWdnZXJlZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIHZvaWQgKmRhdGEpCiB7Ci0Jc3dpdGNoIChuKSB7Ci0JY2FzZSAwOgkJcmV0dXJuIGNoaWxkLT50aHJlYWQuZGVidWdyZWcwOwotCWNhc2UgMToJCXJldHVybiBjaGlsZC0+dGhyZWFkLmRlYnVncmVnMTsKLQljYXNlIDI6CQlyZXR1cm4gY2hpbGQtPnRocmVhZC5kZWJ1Z3JlZzI7Ci0JY2FzZSAzOgkJcmV0dXJuIGNoaWxkLT50aHJlYWQuZGVidWdyZWczOwotCWNhc2UgNjoJCXJldHVybiBjaGlsZC0+dGhyZWFkLmRlYnVncmVnNjsKLQljYXNlIDc6CQlyZXR1cm4gY2hpbGQtPnRocmVhZC5kZWJ1Z3JlZzc7CisJaW50IGk7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICYoY3VycmVudC0+dGhyZWFkKTsKKworCS8qCisJICogU3RvcmUgaW4gdGhlIHZpcnR1YWwgRFI2IHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGJyZWFrcG9pbnQKKwkgKiB3YXMgaGl0IHNvIHRoZSB0aHJlYWQncyBkZWJ1Z2dlciB3aWxsIHNlZSBpdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSEJQX05VTTsgaSsrKSB7CisJCWlmICh0aHJlYWQtPnB0cmFjZV9icHNbaV0gPT0gYnApCisJCQlicmVhazsKIAl9CisKKwl0aHJlYWQtPmRlYnVncmVnNiB8PSAoRFJfVFJBUDAgPDwgaSk7Cit9CisKKy8qCisgKiBXYWxrIHRocm91Z2ggZXZlcnkgcHRyYWNlIGJyZWFrcG9pbnRzIGZvciB0aGlzIHRocmVhZCBhbmQKKyAqIGJ1aWxkIHRoZSBkcjcgdmFsdWUgb24gdG9wIG9mIHRoZWlyIGF0dHJpYnV0ZXMuCisgKgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwdHJhY2VfZ2V0X2RyNyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnBbXSkKK3sKKwlpbnQgaTsKKwlpbnQgZHI3ID0gMDsKKwlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvOworCisJZm9yIChpID0gMDsgaSA8IEhCUF9OVU07IGkrKykgeworCQlpZiAoYnBbaV0gJiYgIWJwW2ldLT5hdHRyLmRpc2FibGVkKSB7CisJCQlpbmZvID0gY291bnRlcl9hcmNoX2JwKGJwW2ldKTsKKwkJCWRyNyB8PSBlbmNvZGVfZHI3KGksIGluZm8tPmxlbiwgaW5mby0+dHlwZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZHI3OworfQorCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKgorcHRyYWNlX21vZGlmeV9icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IGxlbiwgaW50IHR5cGUsCisJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBkaXNhYmxlZCkKK3sKKwlpbnQgZXJyOworCWludCBnZW5fbGVuLCBnZW5fdHlwZTsKKwlERUZJTkVfQlJFQUtQT0lOVF9BVFRSKGF0dHIpOworCisJLyoKKwkgKiBXZSBzaG91ZCBoYXZlIGF0IGxlYXN0IGFuIGluYWN0aXZlIGJyZWFrcG9pbnQgYXQgdGhpcworCSAqIHNsb3QuIEl0IG1lYW5zIHRoZSB1c2VyIGlzIHdyaXRpbmcgZHI3IHdpdGhvdXQgaGF2aW5nCisJICogd3JpdHRlbiB0aGUgYWRkcmVzcyByZWdpc3RlciBmaXJzdAorCSAqLworCWlmICghYnApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZXJyID0gYXJjaF9icF9nZW5lcmljX2ZpZWxkcyhsZW4sIHR5cGUsICZnZW5fbGVuLCAmZ2VuX3R5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisKKwlhdHRyID0gYnAtPmF0dHI7CisJYXR0ci5icF9sZW4gPSBnZW5fbGVuOworCWF0dHIuYnBfdHlwZSA9IGdlbl90eXBlOworCWF0dHIuZGlzYWJsZWQgPSBkaXNhYmxlZDsKKworCXJldHVybiBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0ciwgYnAtPmNhbGxiYWNrLCB0c2spOworfQorCisvKgorICogSGFuZGxlIHB0cmFjZSB3cml0ZXMgdG8gZGVidWcgcmVnaXN0ZXIgNy4KKyAqLworc3RhdGljIGludCBwdHJhY2Vfd3JpdGVfZHI3KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICYodHNrLT50aHJlYWQpOworCXVuc2lnbmVkIGxvbmcgb2xkX2RyNzsKKwlpbnQgaSwgb3JpZ19yZXQgPSAwLCByYyA9IDA7CisJaW50IGVuYWJsZWQsIHNlY29uZF9wYXNzID0gMDsKKwl1bnNpZ25lZCBsZW4sIHR5cGU7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCisJZGF0YSAmPSB+RFJfQ09OVFJPTF9SRVNFUlZFRDsKKwlvbGRfZHI3ID0gcHRyYWNlX2dldF9kcjcodGhyZWFkLT5wdHJhY2VfYnBzKTsKK3Jlc3RvcmU6CisJLyoKKwkgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBoYXJkd2FyZSBicmVha3BvaW50cywgbWFraW5nIHRoZQorCSAqIGFwcHJvcHJpYXRlIGNoYW5nZXMgdG8gZWFjaC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSEJQX05VTTsgaSsrKSB7CisJCWVuYWJsZWQgPSBkZWNvZGVfZHI3KGRhdGEsIGksICZsZW4sICZ0eXBlKTsKKwkJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbaV07CisKKwkJaWYgKCFlbmFibGVkKSB7CisJCQlpZiAoYnApIHsKKwkJCQkvKgorCQkJCSAqIERvbid0IHVucmVnaXN0ZXIgdGhlIGJyZWFrcG9pbnRzIHJpZ2h0LWF3YXksCisJCQkJICogdW5sZXNzIGFsbCByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoKQorCQkJCSAqIHJlcXVlc3RzIGhhdmUgc3VjY2VlZGVkLiBUaGlzIHByZXZlbnRzCisJCQkJICogYW55IHdpbmRvdyBvZiBvcHBvcnR1bml0eSBmb3IgZGVidWcKKwkJCQkgKiByZWdpc3RlciBncmFiYmluZyBieSBvdGhlciB1c2Vycy4KKwkJCQkgKi8KKwkJCQlpZiAoIXNlY29uZF9wYXNzKQorCQkJCQljb250aW51ZTsKKworCQkJCXRocmVhZC0+cHRyYWNlX2Jwc1tpXSA9IE5VTEw7CisJCQkJYnAgPSBwdHJhY2VfbW9kaWZ5X2JyZWFrcG9pbnQoYnAsIGxlbiwgdHlwZSwKKwkJCQkJCQkgICAgICB0c2ssIDEpOworCQkJCWlmIChJU19FUlIoYnApKSB7CisJCQkJCXJjID0gUFRSX0VSUihicCk7CisJCQkJCXRocmVhZC0+cHRyYWNlX2Jwc1tpXSA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0aHJlYWQtPnB0cmFjZV9icHNbaV0gPSBicDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYnAgPSBwdHJhY2VfbW9kaWZ5X2JyZWFrcG9pbnQoYnAsIGxlbiwgdHlwZSwgdHNrLCAwKTsKKworCQkvKiBJbmNvcnJlY3QgYnAsIG9yIHdlIGhhdmUgYSBidWcgaW4gYnAgQVBJICovCisJCWlmIChJU19FUlIoYnApKSB7CisJCQlyYyA9IFBUUl9FUlIoYnApOworCQkJdGhyZWFkLT5wdHJhY2VfYnBzW2ldID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCXRocmVhZC0+cHRyYWNlX2Jwc1tpXSA9IGJwOworCX0KKwkvKgorCSAqIE1ha2UgYSBzZWNvbmQgcGFzcyB0byBmcmVlIHRoZSByZW1haW5pbmcgdW51c2VkIGJyZWFrcG9pbnRzCisJICogb3IgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJlYWtwb2ludHMgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisJICovCisJaWYgKCFzZWNvbmRfcGFzcykgeworCQlzZWNvbmRfcGFzcyA9IDE7CisJCWlmIChyYyA8IDApIHsKKwkJCW9yaWdfcmV0ID0gcmM7CisJCQlkYXRhID0gb2xkX2RyNzsKKwkJfQorCQlnb3RvIHJlc3RvcmU7CisJfQorCXJldHVybiAoKG9yaWdfcmV0IDwgMCkgPyBvcmlnX3JldCA6IHJjKTsKK30KKworLyoKKyAqIEhhbmRsZSBQVFJBQ0VfUEVFS1VTUiBjYWxscyBmb3IgdGhlIGRlYnVnIHJlZ2lzdGVyIGFyZWEuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB0cmFjZV9nZXRfZGVidWdyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBuKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmKHRzay0+dGhyZWFkKTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisKKwlpZiAobiA8IEhCUF9OVU0pIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCQlicCA9IHRocmVhZC0+cHRyYWNlX2Jwc1tuXTsKKwkJaWYgKCFicCkKKwkJCXJldHVybiAwOworCQl2YWwgPSBicC0+aHcuaW5mby5hZGRyZXNzOworCX0gZWxzZSBpZiAobiA9PSA2KSB7CisJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OworCSB9IGVsc2UgaWYgKG4gPT0gNykgeworCQl2YWwgPSBwdHJhY2VfZ2V0X2RyNyh0aHJlYWQtPnB0cmFjZV9icHMpOworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IHB0cmFjZV9zZXRfYnJlYWtwb2ludF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbnIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKKwlERUZJTkVfQlJFQUtQT0lOVF9BVFRSKGF0dHIpOworCisJaWYgKCF0LT5wdHJhY2VfYnBzW25yXSkgeworCQkvKgorCQkgKiBQdXQgc3R1YiBsZW4gYW5kIHR5cGUgdG8gcmVnaXN0ZXIgKHJlc2VydmUpIGFuIGluYWN0aXZlIGJ1dAorCQkgKiBjb3JyZWN0IGJwCisJCSAqLworCQlhdHRyLmJwX2FkZHIgPSBhZGRyOworCQlhdHRyLmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzE7CisJCWF0dHIuYnBfdHlwZSA9IEhXX0JSRUFLUE9JTlRfVzsKKwkJYXR0ci5kaXNhYmxlZCA9IDE7CisKKwkJYnAgPSByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoJmF0dHIsIHB0cmFjZV90cmlnZ2VyZWQsIHRzayk7CisJfSBlbHNlIHsKKwkJYnAgPSB0LT5wdHJhY2VfYnBzW25yXTsKKwkJdC0+cHRyYWNlX2Jwc1tucl0gPSBOVUxMOworCisJCWF0dHIgPSBicC0+YXR0cjsKKwkJYXR0ci5icF9hZGRyID0gYWRkcjsKKwkJYnAgPSBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0ciwgYnAtPmNhbGxiYWNrLCB0c2spOworCX0KKwkvKgorCSAqIENIRUNLTUU6IHRoZSBwcmV2aW91cyBjb2RlIHJldHVybmVkIC1FSU8gaWYgdGhlIGFkZHIgd2Fzbid0IGEKKwkgKiB2YWxpZCB0YXNrIHZpcnR1YWwgYWRkci4gVGhlIG5ldyBvbmUgd2lsbCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzCisJICogY2FzZS4KKwkgKiAtRUlOVkFMIG1heSBiZSB3aGF0IHdlIHdhbnQgZm9yIGluLWtlcm5lbCBicmVha3BvaW50cyB1c2VycywgYnV0CisJICogLUVJTyBsb29rcyBiZXR0ZXIgZm9yIHB0cmFjZSwgc2luY2Ugd2UgcmVmdXNlIGEgcmVnaXN0ZXIgd3JpdGluZworCSAqIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIuCisJICovCisJaWYgKElTX0VSUihicCkpCisJCXJldHVybiBQVFJfRVJSKGJwKTsKKworCXQtPnB0cmFjZV9icHNbbnJdID0gYnA7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwdHJhY2Vfc2V0X2RlYnVncmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCi0JCQkgICAgICAgaW50IG4sIHVuc2lnbmVkIGxvbmcgZGF0YSkKKy8qCisgKiBIYW5kbGUgUFRSQUNFX1BPS0VVU1IgY2FsbHMgZm9yIHRoZSBkZWJ1ZyByZWdpc3RlciBhcmVhLgorICovCitpbnQgcHRyYWNlX3NldF9kZWJ1Z3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG4sIHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWludCBpOworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmKHRzay0+dGhyZWFkKTsKKwlpbnQgcmMgPSAwOwogCi0JaWYgKHVubGlrZWx5KG4gPT0gNCB8fCBuID09IDUpKQorCS8qIFRoZXJlIGFyZSBubyBEUjQgb3IgRFI1IHJlZ2lzdGVycyAqLworCWlmIChuID09IDQgfHwgbiA9PSA1KQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChuIDwgNCAmJiB1bmxpa2VseShkYXRhID49IGRlYnVncmVnX2FkZHJfbGltaXQoY2hpbGQpKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlzd2l0Y2ggKG4pIHsKLQljYXNlIDA6CQljaGlsZC0+dGhyZWFkLmRlYnVncmVnMCA9IGRhdGE7IGJyZWFrOwotCWNhc2UgMToJCWNoaWxkLT50aHJlYWQuZGVidWdyZWcxID0gZGF0YTsgYnJlYWs7Ci0JY2FzZSAyOgkJY2hpbGQtPnRocmVhZC5kZWJ1Z3JlZzIgPSBkYXRhOyBicmVhazsKLQljYXNlIDM6CQljaGlsZC0+dGhyZWFkLmRlYnVncmVnMyA9IGRhdGE7IGJyZWFrOwotCi0JY2FzZSA2OgotCQlpZiAoKGRhdGEgJiB+MHhmZmZmZmZmZlVMKSAhPSAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWNoaWxkLT50aHJlYWQuZGVidWdyZWc2ID0gZGF0YTsKLQkJYnJlYWs7Ci0KLQljYXNlIDc6Ci0JCS8qCi0JCSAqIFNhbml0eS1jaGVjayBkYXRhLiBUYWtlIG9uZSBoYWxmLWJ5dGUgYXQgb25jZSB3aXRoCi0JCSAqIGNoZWNrID0gKHZhbCA+PiAoMTYgKyA0KmkpKSAmIDB4Zi4gSXQgY29udGFpbnMgdGhlCi0JCSAqIFIvV2kgYW5kIExFTmkgYml0czsgYml0cyAwIGFuZCAxIGFyZSBSL1dpLCBhbmQgYml0cwotCQkgKiAyIGFuZCAzIGFyZSBMRU5pLiBHaXZlbiBhIGxpc3Qgb2YgaW52YWxpZCB2YWx1ZXMsCi0JCSAqIHdlIGRvIG1hc2sgfD0gMSA8PCBpbnZhbGlkX3ZhbHVlLCBzbyB0aGF0Ci0JCSAqIChtYXNrID4+IGNoZWNrKSAmIDEgaXMgYSBjb3JyZWN0IHRlc3QgZm9yIGludmFsaWQKLQkJICogdmFsdWVzLgotCQkgKgotCQkgKiBSL1dpIGNvbnRhaW5zIHRoZSB0eXBlIG9mIHRoZSBicmVha3BvaW50IC8KLQkJICogd2F0Y2hwb2ludCwgTEVOaSBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSB3YXRjaGVkCi0JCSAqIGRhdGEgaW4gdGhlIHdhdGNocG9pbnQgY2FzZS4KLQkJICoKLQkJICogVGhlIGludmFsaWQgdmFsdWVzIGFyZToKLQkJICogLSBMRU5pID09IDB4MTAgKHVuZGVmaW5lZCksIHNvIG1hc2sgfD0gMHgwZjAwLglbMzItYml0XQotCQkgKiAtIFIvV2kgPT0gMHgxMCAoYnJlYWsgb24gSS9PIHJlYWRzIG9yIHdyaXRlcyksIHNvCi0JCSAqICAgbWFzayB8PSAweDQ0NDQuCi0JCSAqIC0gUi9XaSA9PSAweDAwICYmIExFTmkgIT0gMHgwMCwgc28gd2UgaGF2ZSBtYXNrIHw9Ci0JCSAqICAgMHgxMTEwLgotCQkgKgotCQkgKiBGaW5hbGx5LCBtYXNrID0gMHgwZjAwIHwgMHg0NDQ0IHwgMHgxMTEwID09IDB4NWY1NC4KLQkJICoKLQkJICogU2VlIHRoZSBJbnRlbCBNYW51YWwgIlN5c3RlbSBQcm9ncmFtbWluZyBHdWlkZSIsCi0JCSAqIDE1LjIuNAotCQkgKgotCQkgKiBOb3RlIHRoYXQgTEVOaSA9PSAweDEwIGlzIGRlZmluZWQgb24geDg2XzY0IGluIGxvbmcKLQkJICogbW9kZSAoaS5lLiBldmVuIGZvciAzMi1iaXQgdXNlcnNwYWNlIHNvZnR3YXJlLCBidXQKLQkJICogNjQtYml0IGtlcm5lbCksIHNvIHRoZSB4ODZfNjQgbWFzayB2YWx1ZSBpcyAweDU0NTQuCi0JCSAqIFNlZSB0aGUgQU1EIG1hbnVhbCBuby4gMjQ1OTMgKEFNRDY0IFN5c3RlbSBQcm9ncmFtbWluZykKLQkJICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZQlEUjdfTUFTSwkweDVmNTQKLSNlbHNlCi0jZGVmaW5lCURSN19NQVNLCTB4NTU1NAotI2VuZGlmCi0JCWRhdGEgJj0gfkRSX0NPTlRST0xfUkVTRVJWRUQ7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlpZiAoKERSN19NQVNLID4+ICgoZGF0YSA+PiAoMTYgKyA0KmkpKSAmIDB4ZikpICYgMSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJY2hpbGQtPnRocmVhZC5kZWJ1Z3JlZzcgPSBkYXRhOwotCQlpZiAoZGF0YSkKLQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9ERUJVRyk7Ci0JCWVsc2UKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX0RFQlVHKTsKLQkJYnJlYWs7CisJaWYgKG4gPT0gNikgeworCQl0aHJlYWQtPmRlYnVncmVnNiA9IHZhbDsKKwkJZ290byByZXRfcGF0aDsKIAl9CisJaWYgKG4gPCBIQlBfTlVNKSB7CisJCXJjID0gcHRyYWNlX3NldF9icmVha3BvaW50X2FkZHIodHNrLCBuLCB2YWwpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCS8qIEFsbCB0aGF0J3MgbGVmdCBpcyBEUjcgKi8KKwlpZiAobiA9PSA3KQorCQlyYyA9IHB0cmFjZV93cml0ZV9kcjcodHNrLCB2YWwpOwogCi0JcmV0dXJuIDA7CityZXRfcGF0aDoKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggYTFhM2NkZC4uMmI5N2ZjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMjMsNyArMjMsNyBAQAogIyBpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogIyBpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2Vsc2UKLSMgaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisjIGluY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgogI2VuZGlmCiAKIC8qCkBAIC00MzYsNiArNDM2LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81IiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBBcHBsZSBNYWNtaW5pMywxICovCisJCS5jYWxsYmFjayA9IHNldF9wY2lfcmVib290LAorCQkuaWRlbnQgPSAiQXBwbGUgTWFjbWluaTMsMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNtaW5pMywxIiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKQEAgLTYxNCw3ICs2MjIsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcGNpX2lvbW11X3NodXRkb3duKCk7CisJeDg2X3BsYXRmb3JtLmlvbW11X3NodXRkb3duKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBlMDlmMGUyLi44MmU4OGNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2luY2x1ZGUgPGFzbS9udW1hXzY0Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIC8qCiAgKiBlbmRfcGZuIG9ubHkgaW5jbHVkZXMgUkFNLCB3aGlsZSBtYXhfcGZuX21hcHBlZCBpbmNsdWRlcyBhbGwgZTgyMCBlbnRyaWVzLgpAQCAtMjQ3LDcgKzI0OCw3IEBACiAgKiAgICAgICAgICAgICAgZnJvbSBib290X3BhcmFtcyBpbnRvIGEgc2FmZSBwbGFjZS4KICAqCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2VkZCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjb3B5X2VkZCh2b2lkKQogewogICAgICBtZW1jcHkoZWRkLm1icl9zaWduYXR1cmUsIGJvb3RfcGFyYW1zLmVkZF9tYnJfc2lnX2J1ZmZlciwKIAkgICAgc2l6ZW9mKGVkZC5tYnJfc2lnbmF0dXJlKSk7CkBAIC0yNTYsNyArMjU3LDcgQEAKICAgICAgZWRkLmVkZF9pbmZvX25yID0gYm9vdF9wYXJhbXMuZWRkYnVmX2VudHJpZXM7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZWRkKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvcHlfZWRkKHZvaWQpCiB7CiB9CiAjZW5kaWYKQEAgLTY2MCw2ICs2NjEsMTMgQEAKIAkJfSwKIAl9LAogCXsKKwkJLmNhbGxiYWNrID0gZG1pX2xvd19tZW1vcnlfY29ycnVwdGlvbiwKKwkJLmlkZW50ID0gIlBob2VuaXgvTVNDIEJJT1MiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4L01TQyIpLAorCQl9LAorCX0sCisJewogCS8qCiAJICogQU1JIEJJT1Mgd2l0aCBsb3cgbWVtb3J5IGNvcnJ1cHRpb24gd2FzIGZvdW5kIG9uIEludGVsIERHNDVJRCBib2FyZC4KIAkgKiBJdCBoYXNlIGRpZmZlcmVudCBETUlfQklPU19WRU5ET1IgPSAiSW50ZWwgQ29ycC4iLCBmb3Igbm93IHdlIHdpbGwKQEAgLTEwMjQsNiArMTAzMiw4IEBACiAjZW5kaWYKICNlbmRpZgogCXg4Nl9pbml0Lm9lbS5iYW5uZXIoKTsKKworCW1jaGVja19pbml0KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNmE0NGE3Ni4uZmJmM2IwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwpAQCAtNzk5LDE1ICs3OTksNiBAQAogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgewotCQkvKgotCQkgKiBSZS1lbmFibGUgYW55IHdhdGNocG9pbnRzIGJlZm9yZSBkZWxpdmVyaW5nIHRoZQotCQkgKiBzaWduYWwgdG8gdXNlciBzcGFjZS4gVGhlIHByb2Nlc3NvciByZWdpc3RlciB3aWxsCi0JCSAqIGhhdmUgYmVlbiBjbGVhcmVkIGlmIHRoZSB3YXRjaHBvaW50IHRyaWdnZXJlZAotCQkgKiBpbnNpZGUgdGhlIGtlcm5lbC4KLQkJICovCi0JCWlmIChjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3KQotCQkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzcsIDcpOwotCiAJCS8qIFdoZWUhIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCiAJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAmaW5mbywgJmthLCBvbGRzZXQsIHJlZ3MpID09IDApIHsKIAkJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKaW5kZXggZDkxNWQ5NS4uZWMxZGU5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXAuYwpAQCAtMTk4LDcgKzE5OCw2IEBACiB7CiAJYWNrX0FQSUNfaXJxKCk7CiAJaW5jX2lycV9zdGF0KGlycV9yZXNjaGVkX2NvdW50KTsKLQlydW5fbG9jYWxfdGltZXJzKCk7CiAJLyoKIAkgKiBLVk0gdXNlcyB0aGlzIGludGVycnVwdCB0byBmb3JjZSBhIGNwdSBvdXQgb2YgZ3Vlc3QgbW9kZQogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggNTY1ZWJjNi4uMzI0ZjJhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMjUwLDE2ICsxMjUwLDcgQEAKIHZvaWQgY3B1X2Rpc2FibGVfY29tbW9uKHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkvKgotCSAqIEhBQ0s6Ci0JICogQWxsb3cgYW55IHF1ZXVlZCB0aW1lciBpbnRlcnJ1cHRzIHRvIGdldCBzZXJ2aWNlZAotCSAqIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiB1bnRpbCB3ZSBjbGVhbnVwCi0JICogZml4dXBfaXJxcyBhcyB3ZSBkbyBmb3IgSUE2NC4KLQkgKi8KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbWRlbGF5KDEpOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlyZW1vdmVfc2libGluZ2luZm8oY3B1KTsKIAogCS8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoaXMgcHJvY2Vzc29yIGZyb20gdGhlIG9ubGluZSBtYXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGRjYjAwZDIuLmJlMjU3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtMzgsNyArMzgsOCBAQAogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyBzaXplb2YobG9uZykpOwogI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3MtPnNwOworCQl1bnNpZ25lZCBsb25nICpzcCA9CisJCQkodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQkvKgogCQkgKiBSZXR1cm4gYWRkcmVzcyBpcyBlaXRoZXIgZGlyZWN0bHkgYXQgc3RhY2sgcG9pbnRlcgogCQkgKiBvciBhYm92ZSBhIHNhdmVkIGZsYWdzLiBFZmxhZ3MgaGFzIGJpdHMgMjItMzEgemVybywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCA1MDNjMWYyLi4xNzQwYzg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC0yMyw4ICsyMyw2IEBACiBzdGF0aWMgc3RydWN0IGJhdV9jb250cm9sCSoqdXZfYmF1X3RhYmxlX2Jhc2VzIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgaW50CQkJdXZfYmF1X3JldHJ5X2xpbWl0IF9fcmVhZF9tb3N0bHk7CiAKLS8qIHBvc2l0aW9uIG9mIHBub2RlICh3aGljaCBpcyBuYXNpZD4+MSk6ICovCi1zdGF0aWMgaW50CQkJdXZfbnNoaWZ0IF9fcmVhZF9tb3N0bHk7CiAvKiBiYXNlIHBub2RlIGluIHRoaXMgcGFydGl0aW9uICovCiBzdGF0aWMgaW50CQkJdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgX19yZWFkX21vc3RseTsKIApAQCAtNzIzLDcgKzcyMSw3IEBACiAJQlVHX09OKCFhZHApOwogCiAJcGEgPSB1dl9ncGEoYWRwKTsgLyogbmVlZCB0aGUgcmVhbCBuYXNpZCovCi0JbiA9IHBhID4+IHV2X25zaGlmdDsKKwluID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAltID0gcGEgJiB1dl9tbWFzazsKIAogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCkBAIC03NzgsNyArNzc2LDcgQEAKIAkgKiBuZWVkIHRoZSBwbm9kZSBvZiB3aGVyZSB0aGUgbWVtb3J5IHdhcyByZWFsbHkgYWxsb2NhdGVkCiAJICovCiAJcGEgPSB1dl9ncGEocHFwKTsKLQlwbiA9IHBhID4+IHV2X25zaGlmdDsKKwlwbiA9IHV2X2dwYV90b19wbm9kZShwYSk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLAogCQkJICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QsCiAJCQkgICAgICAoKHVuc2lnbmVkIGxvbmcpcG4gPDwgVVZfUEFZTE9BRFFfUE5PREVfU0hJRlQpIHwKQEAgLTg0Myw4ICs4NDEsNyBAQAogCQkJCSAgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjdXJfY3B1KSk7CiAKIAl1dl9iYXVfcmV0cnlfbGltaXQgPSAxOwotCXV2X25zaGlmdCA9IHV2X2h1Yl9pbmZvLT5uX3ZhbDsKLQl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisJdXZfbW1hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCkgLSAxOwogCW5ibGFkZXMgPSB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7CiAKIAl1dl9iYXVfdGFibGVfYmFzZXMgPSAoc3RydWN0IGJhdV9jb250cm9sICoqKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKaW5kZXggNjk5ZjdlZS4uY2QwMjIxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCkBAIC0zLDggKzMsMTYgQEAKICNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0FDUElfU0xFRVApCisjZGVmaW5lIF9fdHJhbXBpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YQorI2Vsc2UKKyNkZWZpbmUgX190cmFtcGluaXQgX19jcHVpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YSBfX2NwdWluaXRkYXRhCisjZW5kaWYKKwogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICpfX2NwdWluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKK3Vuc2lnbmVkIGNoYXIgKl9fdHJhbXBpbml0ZGF0YSB0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKFRSQU1QT0xJTkVfQkFTRSk7CiAKIHZvaWQgX19pbml0IHJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkodm9pZCkKIHsKQEAgLTI2LDcgKzM0LDcgQEAKICAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgogICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX190cmFtcGluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQogewogCW1lbWNweSh0cmFtcG9saW5lX2Jhc2UsIHRyYW1wb2xpbmVfZGF0YSwgVFJBTVBPTElORV9TSVpFKTsKIAlyZXR1cm4gdmlydF90b19waHlzKHRyYW1wb2xpbmVfYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCA1OTZkNTRjLi4zYWYyZGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorLnNlY3Rpb24gLnJvZGF0YSwgImEiLCBAcHJvZ2JpdHMKKyNlbHNlCiAvKiBXZSBjYW4gZnJlZSB1cCB0aGUgdHJhbXBvbGluZSBhZnRlciBib290dXAgaWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gKi8KIF9fQ1BVSU5JVFJPREFUQQorI2VuZGlmCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggN2UzN2RjZS4uMzMzOTkxNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUyOSw3NyArNTI5LDU2IEBACiBkb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXVuc2lnbmVkIGxvbmcgY29uZGl0aW9uOworCXVuc2lnbmVkIGxvbmcgZHI2OwogCWludCBzaV9jb2RlOwogCi0JZ2V0X2RlYnVncmVnKGNvbmRpdGlvbiwgNik7CisJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKIAkvKiBDYXRjaCBrbWVtY2hlY2sgY29uZGl0aW9ucyBmaXJzdCBvZiBhbGwhICovCi0JaWYgKGNvbmRpdGlvbiAmIERSX1NURVAgJiYga21lbWNoZWNrX3RyYXAocmVncykpCisJaWYgKChkcjYgJiBEUl9TVEVQKSAmJiBrbWVtY2hlY2tfdHJhcChyZWdzKSkKIAkJcmV0dXJuOwogCisJLyogRFI2IG1heSBvciBtYXkgbm90IGJlIGNsZWFyZWQgYnkgdGhlIENQVSAqLworCXNldF9kZWJ1Z3JlZygwLCA2KTsKIAkvKgogCSAqIFRoZSBwcm9jZXNzb3IgY2xlYXJlZCBCVEYsIHNvIGRvbid0IG1hcmsgdGhhdCB3ZSBuZWVkIGl0IHNldC4KIAkgKi8KIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfREVCVUdDVExNU1IpOwogCXRzay0+dGhyZWFkLmRlYnVnY3RsbXNyID0gMDsKIAotCWlmIChub3RpZnlfZGllKERJRV9ERUJVRywgImRlYnVnIiwgcmVncywgY29uZGl0aW9uLCBlcnJvcl9jb2RlLAotCQkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJLyogU3RvcmUgdGhlIHZpcnR1YWxpemVkIERSNiB2YWx1ZSAqLworCXRzay0+dGhyZWFkLmRlYnVncmVnNiA9IGRyNjsKKworCWlmIChub3RpZnlfZGllKERJRV9ERUJVRywgImRlYnVnIiwgcmVncywgUFRSX0VSUigmZHI2KSwgZXJyb3JfY29kZSwKKwkJCQkJCQlTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwogCiAJLyogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIERSNiBoYXMgYmVlbiBzYXZlZCAqLwogCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwogCi0JLyogTWFzayBvdXQgc3B1cmlvdXMgZGVidWcgdHJhcHMgZHVlIHRvIGxhenkgRFI3IHNldHRpbmcgKi8KLQlpZiAoY29uZGl0aW9uICYgKERSX1RSQVAwfERSX1RSQVAxfERSX1RSQVAyfERSX1RSQVAzKSkgewotCQlpZiAoIXRzay0+dGhyZWFkLmRlYnVncmVnNykKLQkJCWdvdG8gY2xlYXJfZHI3OworCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKSB7CisJCWhhbmRsZV92bTg2X3RyYXAoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsCisJCQkJZXJyb3JfY29kZSwgMSk7CisJCXJldHVybjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spCi0JCWdvdG8gZGVidWdfdm04NjsKLSNlbmRpZgotCi0JLyogU2F2ZSBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIgd2hlcmUgcHRyYWNlIGNhbiBzZWUgaXQgKi8KLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgPSBjb25kaXRpb247Ci0KIAkvKgotCSAqIFNpbmdsZS1zdGVwcGluZyB0aHJvdWdoIFRGOiBtYWtlIHN1cmUgd2UgaWdub3JlIGFueSBldmVudHMgaW4KLQkgKiBrZXJuZWwgc3BhY2UgKGJ1dCByZS1lbmFibGUgVEYgd2hlbiByZXR1cm5pbmcgdG8gdXNlciBtb2RlKS4KKwkgKiBTaW5nbGUtc3RlcHBpbmcgdGhyb3VnaCBzeXN0ZW0gY2FsbHM6IGlnbm9yZSBhbnkgZXhjZXB0aW9ucyBpbgorCSAqIGtlcm5lbCBzcGFjZSwgYnV0IHJlLWVuYWJsZSBURiB3aGVuIHJldHVybmluZyB0byB1c2VyIG1vZGUuCisJICoKKwkgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdjg2IG1vZGUgYWJvdmUsIHNvIHdlIGNhbiBjaGVjayBmb3Iga2VybmVsIG1vZGUKKwkgKiBieSBqdXN0IGNoZWNraW5nIHRoZSBDUEwgb2YgQ1MuCiAJICovCi0JaWYgKGNvbmRpdGlvbiAmIERSX1NURVApIHsKLQkJaWYgKCF1c2VyX21vZGUocmVncykpCi0JCQlnb3RvIGNsZWFyX1RGX3JlZW5hYmxlOworCWlmICgoZHI2ICYgRFJfU1RFUCkgJiYgIXVzZXJfbW9kZShyZWdzKSkgeworCQl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgJj0gfkRSX1NURVA7CisJCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfU0lOR0xFU1RFUCk7CisJCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOwogCX0KLQotCXNpX2NvZGUgPSBnZXRfc2lfY29kZShjb25kaXRpb24pOwotCS8qIE9rLCBmaW5hbGx5IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlICovCi0Jc2VuZF9zaWd0cmFwKHRzaywgcmVncywgZXJyb3JfY29kZSwgc2lfY29kZSk7Ci0KLQkvKgotCSAqIERpc2FibGUgYWRkaXRpb25hbCB0cmFwcy4gVGhleSdsbCBiZSByZS1lbmFibGVkIHdoZW4KLQkgKiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLQkgKi8KLWNsZWFyX2RyNzoKLQlzZXRfZGVidWdyZWcoMCwgNyk7CisJc2lfY29kZSA9IGdldF9zaV9jb2RlKHRzay0+dGhyZWFkLmRlYnVncmVnNik7CisJaWYgKHRzay0+dGhyZWFkLmRlYnVncmVnNiAmIChEUl9TVEVQIHwgRFJfVFJBUF9CSVRTKSkKKwkJc2VuZF9zaWd0cmFwKHRzaywgcmVncywgZXJyb3JfY29kZSwgc2lfY29kZSk7CiAJcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7Ci0JcmV0dXJuOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotZGVidWdfdm04NjoKLQkvKiByZWVuYWJsZSBwcmVlbXB0aW9uOiBoYW5kbGVfdm04Nl90cmFwKCkgbWlnaHQgc2xlZXAgKi8KLQlkZWNfcHJlZW1wdF9jb3VudCgpOwotCWhhbmRsZV92bTg2X3RyYXAoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsIGVycm9yX2NvZGUsIDEpOwotCWNvbmRpdGlvbmFsX2NsaShyZWdzKTsKLQlyZXR1cm47Ci0jZW5kaWYKLQotY2xlYXJfVEZfcmVlbmFibGU6Ci0Jc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9TSU5HTEVTVEVQKTsKLQlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKLQlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2Nfc3luYy5jIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKaW5kZXggZjM3OTMwOS4uZWVkMTU2OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMKQEAgLTExNCwxMyArMTE0LDEyIEBACiAJCXJldHVybjsKIAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKSkgewotCQlwcmludGtfb25jZShLRVJOX0lORk8gIlNraXBwaW5nIHN5bmNocm9uaXphdGlvbiBjaGVja3MgYXMgVFNDIGlzIHJlbGlhYmxlLlxuIik7CisJCWlmIChjcHUgPT0gKG5yX2NwdV9pZHMtMSkgfHwgc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HKQorCQkJcHJfaW5mbygKKwkJCSJTa2lwcGVkIHN5bmNocm9uaXphdGlvbiBjaGVja3MgYXMgVFNDIGlzIHJlbGlhYmxlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlwcl9pbmZvKCJjaGVja2luZyBUU0Mgc3luY2hyb25pemF0aW9uIFtDUFUjJWQgLT4gQ1BVIyVkXToiLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNwdSk7Ci0KIAkvKgogCSAqIFJlc2V0IGl0IC0gaW4gY2FzZSB0aGlzIGlzIGEgc2Vjb25kIGJvb3R1cDoKIAkgKi8KQEAgLTE0MiwxMiArMTQxLDE0IEBACiAJCWNwdV9yZWxheCgpOwogCiAJaWYgKG5yX3dhcnBzKSB7Ci0JCXByaW50aygiXG4iKTsKKwkJcHJfd2FybmluZygiVFNDIHN5bmNocm9uaXphdGlvbiBbQ1BVIyVkIC0+IENQVSMlZF06XG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHUpOwogCQlwcl93YXJuaW5nKCJNZWFzdXJlZCAlTGQgY3ljbGVzIFRTQyB3YXJwIGJldHdlZW4gQ1BVcywgIgogCQkJICAgInR1cm5pbmcgb2ZmIFRTQyBjbG9jay5cbiIsIG1heF93YXJwKTsKIAkJbWFya190c2NfdW5zdGFibGUoImNoZWNrX3RzY19zeW5jX3NvdXJjZSBmYWlsZWQiKTsKIAl9IGVsc2UgewotCQlwcmludGsoIiBwYXNzZWQuXG4iKTsKKwkJcHJfZGVidWcoIlRTQyBzeW5jaHJvbml6YXRpb24gW0NQVSMlZCAtPiBDUFUjJWRdOiBwYXNzZWRcbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNwdSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwppbmRleCBhZWVmNTI5Li42MWQ4MDVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X2lycS5jCkBAIC05LDEwICs5LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaXJxLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgorCisvKiBNTVIgb2Zmc2V0IGFuZCBwbm9kZSBvZiBodWIgc291cmNpbmcgaW50ZXJydXB0cyBmb3IgYSBnaXZlbiBpcnEgKi8KK3N0cnVjdCB1dl9pcnFfMl9tbXJfcG5vZGV7CisJc3RydWN0IHJiX25vZGUJCWxpc3Q7CisJdW5zaWduZWQgbG9uZwkJb2Zmc2V0OworCWludAkJCXBub2RlOworCWludAkJCWlycTsKK307CisKK3N0YXRpYyBzcGlubG9ja190CQl1dl9pcnFfbG9jazsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdAkJdXZfaXJxX3Jvb3Q7CisKK3N0YXRpYyBpbnQgdXZfc2V0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICopOwogCiBzdGF0aWMgdm9pZCB1dl9ub29wKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0zOSwyNSArNTQsMjE0IEBACiAJLnVubWFzawkJPSB1dl9ub29wLAogCS5lb2kJCT0gdXZfYWNrX2FwaWMsCiAJLmVuZAkJPSB1dl9ub29wLAorCS5zZXRfYWZmaW5pdHkJPSB1dl9zZXRfaXJxX2FmZmluaXR5LAogfTsKIAogLyoKKyAqIEFkZCBvZmZzZXQgYW5kIHBub2RlIGluZm9ybWF0aW9uIG9mIHRoZSBodWIgc291cmNpbmcgaW50ZXJydXB0cyB0byB0aGUKKyAqIHJiIHRyZWUgZm9yIGEgc3BlY2lmaWMgaXJxLgorICovCitzdGF0aWMgaW50IHV2X3NldF9pcnFfMl9tbXJfaW5mbyhpbnQgaXJxLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgYmxhZGUpCit7CisJc3RydWN0IHJiX25vZGUgKipsaW5rID0gJnV2X2lycV9yb290LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHV2X2lycV8yX21tcl9wbm9kZSAqbjsKKwlzdHJ1Y3QgdXZfaXJxXzJfbW1yX3Bub2RlICplOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwluID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgdXZfaXJxXzJfbW1yX3Bub2RlKSwgR0ZQX0tFUk5FTCwKKwkJCQl1dl9ibGFkZV90b19tZW1vcnlfbmlkKGJsYWRlKSk7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW4tPmlycSA9IGlycTsKKwluLT5vZmZzZXQgPSBvZmZzZXQ7CisJbi0+cG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShibGFkZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnV2X2lycV9sb2NrLCBpcnFmbGFncyk7CisJLyogRmluZCB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIHJidHJlZTogKi8KKwl3aGlsZSAoKmxpbmspIHsKKwkJcGFyZW50ID0gKmxpbms7CisJCWUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB1dl9pcnFfMl9tbXJfcG5vZGUsIGxpc3QpOworCisJCWlmICh1bmxpa2VseShpcnEgPT0gZS0+aXJxKSkgeworCQkJLyogaXJxIGVudHJ5IGV4aXN0cyAqLworCQkJZS0+cG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShibGFkZSk7CisJCQllLT5vZmZzZXQgPSBvZmZzZXQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1dl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCQkJa2ZyZWUobik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpcnEgPCBlLT5pcnEpCisJCQlsaW5rID0gJigqbGluayktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfcmlnaHQ7CisJfQorCisJLyogSW5zZXJ0IHRoZSBub2RlIGludG8gdGhlIHJidHJlZS4gKi8KKwlyYl9saW5rX25vZGUoJm4tPmxpc3QsIHBhcmVudCwgbGluayk7CisJcmJfaW5zZXJ0X2NvbG9yKCZuLT5saXN0LCAmdXZfaXJxX3Jvb3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXZfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0cmlldmUgb2Zmc2V0IGFuZCBwbm9kZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSByYiB0cmVlIGZvciBhIHNwZWNpZmljIGlycSAqLworaW50IHV2X2lycV8yX21tcl9pbmZvKGludCBpcnEsIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwgaW50ICpwbm9kZSkKK3sKKwlzdHJ1Y3QgdXZfaXJxXzJfbW1yX3Bub2RlICplOworCXN0cnVjdCByYl9ub2RlICpuOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXZfaXJxX2xvY2ssIGlycWZsYWdzKTsKKwluID0gdXZfaXJxX3Jvb3QucmJfbm9kZTsKKwl3aGlsZSAobikgeworCQllID0gcmJfZW50cnkobiwgc3RydWN0IHV2X2lycV8yX21tcl9wbm9kZSwgbGlzdCk7CisKKwkJaWYgKGUtPmlycSA9PSBpcnEpIHsKKwkJCSpvZmZzZXQgPSBlLT5vZmZzZXQ7CisJCQkqcG5vZGUgPSBlLT5wbm9kZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnV2X2lycV9sb2NrLCBpcnFmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpcnEgPCBlLT5pcnEpCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1dl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFJlLXRhcmdldCB0aGUgaXJxIHRvIHRoZSBzcGVjaWZpZWQgQ1BVIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZCBNTVIgbG9jYXRlZAorICogb24gdGhlIHNwZWNpZmllZCBibGFkZSB0byBhbGxvdyB0aGUgc2VuZGluZyBvZiBNU0lzIHRvIHRoZSBzcGVjaWZpZWQgQ1BVLgorICovCitzdGF0aWMgaW50CithcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqaXJxX25hbWUsIHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUsIGludCBtbXJfYmxhZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQsIGludCByZXN0cmljdCkKK3sKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqZWxpZ2libGVfY3B1ID0gY3B1bWFza19vZihjcHUpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgbW1yX3Bub2RlOworCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgZXJyOworCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0KKwkJCXNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgZWxpZ2libGVfY3B1KTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAocmVzdHJpY3QgPT0gVVZfQUZGSU5JVFlfQ1BVKQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX05PX0JBTEFOQ0lORzsKKwllbHNlCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CisKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ1dl9pcnFfY2hpcCwgaGFuZGxlX3BlcmNwdV9pcnEsCisJCQkJICAgICAgaXJxX25hbWUpOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJZW50cnktPnZlY3RvcgkJPSBjZmctPnZlY3RvcjsKKwllbnRyeS0+ZGVsaXZlcnlfbW9kZQk9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOworCWVudHJ5LT5kZXN0X21vZGUJPSBhcGljLT5pcnFfZGVzdF9tb2RlOworCWVudHJ5LT5wb2xhcml0eQkJPSAwOworCWVudHJ5LT50cmlnZ2VyCQk9IDA7CisJZW50cnktPm1hc2sJCT0gMDsKKwllbnRyeS0+ZGVzdAkJPSBhcGljLT5jcHVfbWFza190b19hcGljaWQoZWxpZ2libGVfY3B1KTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKKworCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpCisJCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKKworCXJldHVybiBpcnE7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgTU1SIGxvY2F0ZWQgb24gdGhlIHNwZWNpZmllZCBibGFkZSBzbyB0aGF0IE1TSXMgYXJlCisgKiBsb25nZXIgYWxsb3dlZCB0byBiZSBzZW50LgorICovCitzdGF0aWMgdm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCBtbXJfcG5vZGUsIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKKwlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5KSAhPQorCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCWVudHJ5LT5tYXNrID0gMTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgdXZfc2V0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7CisJc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgbW1yX29mZnNldDsKKwl1bnNpZ25lZCBtbXJfcG5vZGU7CisKKwlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7CisJaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuIC0xOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisKKwllbnRyeS0+dmVjdG9yCQk9IGNmZy0+dmVjdG9yOworCWVudHJ5LT5kZWxpdmVyeV9tb2RlCT0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CisJZW50cnktPmRlc3RfbW9kZQk9IGFwaWMtPmlycV9kZXN0X21vZGU7CisJZW50cnktPnBvbGFyaXR5CQk9IDA7CisJZW50cnktPnRyaWdnZXIJCT0gMDsKKwllbnRyeS0+bWFzawkJPSAwOworCWVudHJ5LT5kZXN0CQk9IGRlc3Q7CisKKwkvKiBHZXQgcHJldmlvdXNseSBzdG9yZWQgTU1SIGFuZCBwbm9kZSBvZiBodWIgc291cmNpbmcgaW50ZXJydXB0cyAqLworCWlmICh1dl9pcnFfMl9tbXJfaW5mbyhpcnEsICZtbXJfb2Zmc2V0LCAmbW1yX3Bub2RlKSkKKwkJcmV0dXJuIC0xOworCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKKworCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpCisJCXNlbmRfY2xlYW51cF92ZWN0b3IoY2ZnKTsKKworCXJldHVybiAwOworfQorCisvKgogICogU2V0IHVwIGEgbWFwcGluZyBvZiBhbiBhdmFpbGFibGUgaXJxIGFuZCB2ZWN0b3IsIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZAogICogTU1SIHRoYXQgZGVmaW5lcyB0aGUgTVNJIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuCiAgKiBpbnRlcnJ1cHQgaXMgcmFpc2VkLgogICovCiBpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKmlycV9uYW1lLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAotCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQorCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0LCBpbnQgcmVzdHJpY3QpCiB7Ci0JaW50IGlycTsKLQlpbnQgcmV0OworCWludCBpcnEsIHJldDsKIAotCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpcnEgPSBjcmVhdGVfaXJxX25yKE5SX0lSUVNfTEVHQUNZLCB1dl9ibGFkZV90b19tZW1vcnlfbmlkKG1tcl9ibGFkZSkpOworCiAJaWYgKGlycSA8PSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcmV0ID0gYXJjaF9lbmFibGVfdXZfaXJxKGlycV9uYW1lLCBpcnEsIGNwdSwgbW1yX2JsYWRlLCBtbXJfb2Zmc2V0KTsKLQlpZiAocmV0ICE9IGlycSkKKwlyZXQgPSBhcmNoX2VuYWJsZV91dl9pcnEoaXJxX25hbWUsIGlycSwgY3B1LCBtbXJfYmxhZGUsIG1tcl9vZmZzZXQsCisJCXJlc3RyaWN0KTsKKwlpZiAocmV0ID09IGlycSkKKwkJdXZfc2V0X2lycV8yX21tcl9pbmZvKGlycSwgbW1yX29mZnNldCwgbW1yX2JsYWRlKTsKKwllbHNlCiAJCWRlc3Ryb3lfaXJxKGlycSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzEsOSArMjc1LDI4IEBACiAgKgogICogU2V0IG1tcl9ibGFkZSBhbmQgbW1yX29mZnNldCB0byB3aGF0IHdhcyBwYXNzZWQgaW4gb24gdXZfc2V0dXBfaXJxKCkuCiAgKi8KLXZvaWQgdXZfdGVhcmRvd25faXJxKHVuc2lnbmVkIGludCBpcnEsIGludCBtbXJfYmxhZGUsIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKK3ZvaWQgdXZfdGVhcmRvd25faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JYXJjaF9kaXNhYmxlX3V2X2lycShtbXJfYmxhZGUsIG1tcl9vZmZzZXQpOworCXN0cnVjdCB1dl9pcnFfMl9tbXJfcG5vZGUgKmU7CisJc3RydWN0IHJiX25vZGUgKm47CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1dl9pcnFfbG9jaywgaXJxZmxhZ3MpOworCW4gPSB1dl9pcnFfcm9vdC5yYl9ub2RlOworCXdoaWxlIChuKSB7CisJCWUgPSByYl9lbnRyeShuLCBzdHJ1Y3QgdXZfaXJxXzJfbW1yX3Bub2RlLCBsaXN0KTsKKwkJaWYgKGUtPmlycSA9PSBpcnEpIHsKKwkJCWFyY2hfZGlzYWJsZV91dl9pcnEoZS0+cG5vZGUsIGUtPm9mZnNldCk7CisJCQlyYl9lcmFzZShuLCAmdXZfaXJxX3Jvb3QpOworCQkJa2ZyZWUoZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaXJxIDwgZS0+aXJxKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXZfaXJxX2xvY2ssIGlycWZsYWdzKTsKIAlkZXN0cm95X2lycShpcnEpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXZfdGVhcmRvd25faXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCBmMDY4NTUzLi5hYmRhNmY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFwaWNfY3B1cyA9IGFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChtLT5hcGljaWQpOworCWFwaWMtPmFwaWNpZF90b19jcHVfcHJlc2VudChtLT5hcGljaWQsICZhcGljX2NwdXMpOwogCXBoeXNpZHNfb3IocGh5c19jcHVfcHJlc2VudF9tYXAsIHBoeXNfY3B1X3ByZXNlbnRfbWFwLCBhcGljX2NwdXMpOwogCS8qCiAJICogVmFsaWRhdGUgdmVyc2lvbgpAQCAtNDg2LDcgKzQ4Niw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgY29iYWx0X2lycV90eXBlID0gewotCS50eXBlbmFtZSA9CSJDb2JhbHQtQVBJQyIsCisJLm5hbWUgPQkJIkNvYmFsdC1BUElDIiwKIAkuc3RhcnR1cCA9CXN0YXJ0dXBfY29iYWx0X2lycSwKIAkuc2h1dGRvd24gPQlkaXNhYmxlX2NvYmFsdF9pcnEsCiAJLmVuYWJsZSA9CWVuYWJsZV9jb2JhbHRfaXJxLApAQCAtNTIzLDcgKzUyMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfbWFzdGVyX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9CSJQSUlYNC1tYXN0ZXIiLAorCS5uYW1lID0JCSJQSUlYNC1tYXN0ZXIiLAogCS5zdGFydHVwID0Jc3RhcnR1cF9waWl4NF9tYXN0ZXJfaXJxLAogCS5hY2sgPQkJYWNrX2NvYmFsdF9pcnEsCiAJLmVuZCA9CQllbmRfcGlpeDRfbWFzdGVyX2lycSwKQEAgLTUzMSw3ICs1MzEsNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfdmlydHVhbF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPQkiUElJWDQtdmlydHVhbCIsCisJLm5hbWUgPQkJIlBJSVg0LXZpcnR1YWwiLAogCS5zaHV0ZG93biA9CWRpc2FibGVfODI1OUFfaXJxLAogCS5lbmFibGUgPQllbmFibGVfODI1OUFfaXJxLAogCS5kaXNhYmxlID0JZGlzYWJsZV84MjU5QV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggMzFlNmY2Yy4uZDQzMGU0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAKIAlwdl9pbmZvLnBhcmF2aXJ0X2VuYWJsZWQgPSAxOwogCXB2X2luZm8ua2VybmVsX3JwbCA9IGtlcm5lbF9jcyAmIFNFR01FTlRfUlBMX01BU0s7Ci0JcHZfaW5mby5uYW1lID0gInZtaSI7CisJcHZfaW5mby5uYW1lID0gInZtaSBbZGVwcmVjYXRlZF0iOwogCiAJcHZfaW5pdF9vcHMucGF0Y2ggPSB2bWlfcGF0Y2g7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTI5MjlmYi4uM2M2OGZlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTMwNSw2ICszMDUsOSBAQAogCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKyAqLwogLiA9IEFTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKIAkgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwppbmRleCAzOTA5ZTNiLi5hMTAyOTc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2NjRfa3N5bXNfNjQuYwpAQCAtMzAsOSArMzAsOCBAQAogCiBFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXJfbm9jYWNoZSk7Ci1FWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyKTsKLUVYUE9SVF9TWU1CT0woY29weV90b191c2VyKTsKLUVYUE9SVF9TWU1CT0woX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyk7CitFWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21fdXNlcik7CitFWFBPUlRfU1lNQk9MKF9jb3B5X3RvX3VzZXIpOwogCiBFWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCA0NDQ5YTRhLi5kMTFjNWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtMTQsMTAgKzE0LDEzIEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogCiB2b2lkIF9fY3B1aW5pdCB4ODZfaW5pdF9ub29wKHZvaWQpIHsgfQogdm9pZCBfX2luaXQgeDg2X2luaXRfdWludF9ub29wKHVuc2lnbmVkIGludCB1bnVzZWQpIHsgfQogdm9pZCBfX2luaXQgeDg2X2luaXRfcGdkX25vb3AocGdkX3QgKnVudXNlZCkgeyB9CitpbnQgX19pbml0IGlvbW11X2luaXRfbm9vcCh2b2lkKSB7IHJldHVybiAwOyB9Cit2b2lkIGlvbW11X3NodXRkb3duX25vb3Aodm9pZCkgeyB9CiAKIC8qCiAgKiBUaGUgcGxhdGZvcm0gc2V0dXAgZnVuY3Rpb25zIGFyZSBwcmVzZXQgd2l0aCB0aGUgZGVmYXVsdCBmdW5jdGlvbnMKQEAgLTYyLDYgKzY1LDEwIEBACiAJCS50c2NfcHJlX2luaXQJCT0geDg2X2luaXRfbm9vcCwKIAkJLnRpbWVyX2luaXQJCT0gaHBldF90aW1lX2luaXQsCiAJfSwKKworCS5pb21tdSA9IHsKKwkJLmlvbW11X2luaXQJCT0gaW9tbXVfaW5pdF9ub29wLAorCX0sCiB9OwogCiBzdHJ1Y3QgeDg2X2NwdWluaXRfb3BzIHg4Nl9jcHVpbml0IF9fY3B1aW5pdGRhdGEgPSB7CkBAIC03Miw0ICs3OSw1IEBACiAJLmNhbGlicmF0ZV90c2MJCQk9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLAogCS5nZXRfd2FsbGNsb2NrCQkJPSBtYWNoX2dldF9jbW9zX3RpbWUsCiAJLnNldF93YWxsY2xvY2sJCQk9IG1hY2hfc2V0X3J0Y19tbXNzLAorCS5pb21tdV9zaHV0ZG93bgkJCT0gaW9tbXVfc2h1dGRvd25fbm9vcCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDgyYWQ1MjMuLjE0NGU3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiBpdHNlbGYgd2l0aCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgY29udGludWVzIGNvdW50aW5nCiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOwogCWVsYXBzZWQgPSBwcy0+cGl0X3RpbWVyLnBlcmlvZCAtIGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CiAJZWxhcHNlZCA9IG1vZF82NChlbGFwc2VkLCBwcy0+cGl0X3RpbWVyLnBlcmlvZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggNzAyNDIyNC4uMjNjMjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQogCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCA2ODVhNGZmLi44MThiOTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC03NDgsNyArNzQ4LDggQEAKIAlyZXR1cm4gd3JpdGVfcHJvdGVjdGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLCB1NjQgZGF0YSkKK3N0YXRpYyBpbnQga3ZtX3VubWFwX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCBuZWVkX3RsYl9mbHVzaCA9IDA7CkBAIC03NjMsNyArNzY0LDggQEAKIAlyZXR1cm4gbmVlZF90bGJfZmx1c2g7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwgdTY0IGRhdGEpCitzdGF0aWMgaW50IGt2bV9zZXRfcHRlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlpbnQgbmVlZF9mbHVzaCA9IDA7CiAJdTY0ICpzcHRlLCBuZXdfc3B0ZTsKQEAgLTc5OSw5ICs4MDEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrdm1faGFuZGxlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCB1NjQgZGF0YSwKK3N0YXRpYyBpbnQga3ZtX2hhbmRsZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwKKwkJCSAgdW5zaWduZWQgbG9uZyBkYXRhLAogCQkJICBpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAotCQkJCQkgdTY0IGRhdGEpKQorCQkJCQkgdW5zaWduZWQgbG9uZyBkYXRhKSkKIHsKIAlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTg0NiwxMCArODQ5LDExIEBACiAKIHZvaWQga3ZtX3NldF9zcHRlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCBwdGVfdCBwdGUpCiB7Ci0Ja3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsICh1NjQpJnB0ZSwga3ZtX3NldF9wdGVfcm1hcHApOworCWt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCAodW5zaWduZWQgbG9uZykmcHRlLCBrdm1fc2V0X3B0ZV9ybWFwcCk7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLCB1NjQgZGF0YSkKK3N0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IHlvdW5nID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA5Yjk2OTUzLi40ZmM4MDE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC00Miw2ICs0Miw3IEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ0cmFjZS5oIgogCisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KQEAgLTE2OTIsNyArMTY5Myw3IEBACiAJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKIAogCXIgPSAtRUlOVkFMOwotCWlmICghYmFua19udW0pCisJaWYgKCFiYW5rX251bSB8fCBiYW5rX251bSA+PSBLVk1fTUFYX01DRV9CQU5LUykKIAkJZ290byBvdXQ7CiAJaWYgKG1jZ19jYXAgJiB+KEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCB8IDB4ZmYgfCAweGZmMDAwMCkpCiAJCWdvdG8gb3V0OwpAQCAtMzY0MywxNCArMzY0NCwxNSBAQAogCXRyYWNlX2t2bV9lbnRyeSh2Y3B1LT52Y3B1X2lkKTsKIAlrdm1feDg2X29wcy0+cnVuKHZjcHUsIGt2bV9ydW4pOwogCi0JaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfREVCVUcpKSkgewotCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMCwgMCk7Ci0JCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWcxLCAxKTsKLQkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzIsIDIpOwotCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMywgMyk7Ci0JCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2LCA2KTsKLQkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzcsIDcpOwotCX0KKwkvKgorCSAqIElmIHRoZSBndWVzdCBoYXMgdXNlZCBkZWJ1ZyByZWdpc3RlcnMsIGF0IGxlYXN0IGRyNworCSAqIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgcmV0dXJuaW5nIHRvIHRoZSBob3N0LgorCSAqIElmIHdlIGRvbid0IGhhdmUgYWN0aXZlIGJyZWFrcG9pbnRzIGluIHRoZSBob3N0LCB3ZSBkb24ndAorCSAqIGNhcmUgYWJvdXQgdGhlIG1lc3NlZCB1cCBkZWJ1ZyBhZGRyZXNzIHJlZ2lzdGVycy4gQnV0IGlmCisJICogd2UgaGF2ZSBzb21lIG9mIHRoZW0gYWN0aXZlLCByZXN0b3JlIHRoZSBvbGQgc3RhdGUuCisJICovCisJaWYgKGh3X2JyZWFrcG9pbnRfYWN0aXZlKCkpCisJCWh3X2JyZWFrcG9pbnRfcmVzdG9yZSgpOwogCiAJc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNDA1MSw3ICs0MDUzLDcgQEAKIAlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZHRhYmxlLmJhc2UgKyBpbmRleCo4LCBzZWdfZGVzYywgc2l6ZW9mKCpzZWdfZGVzYyksIHZjcHUpOwogfQogCi1zdGF0aWMgdTMyIGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7CiAJdTMyIGJhc2VfYWRkciA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliLy5naXRpZ25vcmUgYi9hcmNoL3g4Ni9saWIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY4OWYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAoraW5hdC10YWJsZXMuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDg1ZjVkYjkuLmEyZDY0NzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTIsMTIgKzIsMjUgQEAKICMgTWFrZWZpbGUgZm9yIHg4NiBzcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLgogIwogCitpbmF0X3RhYmxlc19zY3JpcHQgPSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3aworaW5hdF90YWJsZXNfbWFwcyA9ICQoc3JjdHJlZSkvYXJjaC94ODYvbGliL3g4Ni1vcGNvZGUtbWFwLnR4dAorcXVpZXRfY21kX2luYXRfdGFibGVzID0gR0VOICAgICAkQAorICAgICAgY21kX2luYXRfdGFibGVzID0gJChBV0spIC1mICQoaW5hdF90YWJsZXNfc2NyaXB0KSAkKGluYXRfdGFibGVzX21hcHMpID4gJEAKKworJChvYmopL2luYXQtdGFibGVzLmM6ICQoaW5hdF90YWJsZXNfc2NyaXB0KSAkKGluYXRfdGFibGVzX21hcHMpCisJJChjYWxsIGNtZCxpbmF0X3RhYmxlcykKKworJChvYmopL2luYXQubzogJChvYmopL2luYXQtdGFibGVzLmMKKworY2xlYW4tZmlsZXMgOj0gaW5hdC10YWJsZXMuYworCiBvYmotJChDT05GSUdfU01QKSA6PSBtc3IubwogCiBsaWIteSA6PSBkZWxheS5vCiBsaWIteSArPSB0aHVua18kKEJJVFMpLm8KIGxpYi15ICs9IHVzZXJjb3B5XyQoQklUUykubyBnZXR1c2VyLm8gcHV0dXNlci5vCiBsaWIteSArPSBtZW1jcHlfJChCSVRTKS5vCitsaWIteSArPSBpbnNuLm8gaW5hdC5vCiAKIG9iai15ICs9IG1zci1yZWcubyBtc3ItcmVnLWV4cG9ydC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCA2YmEwZjdiLi5jZjg4OWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC02NSw3ICs2NSw3IEBACiAJLmVuZG0KIAogLyogU3RhbmRhcmQgY29weV90b191c2VyIHdpdGggc2VnbWVudCBsaW1pdCBjaGVja2luZyAqLwotRU5UUlkoY29weV90b191c2VyKQorRU5UUlkoX2NvcHlfdG9fdXNlcikKIAlDRklfU1RBUlRQUk9DCiAJR0VUX1RIUkVBRF9JTkZPKCVyYXgpCiAJbW92cSAlcmRpLCVyY3gKQEAgLTc1LDEwICs3NSwxMCBAQAogCWphZSBiYWRfdG9fdXNlcgogCUFMVEVSTkFUSVZFX0pVTVAgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsY29weV91c2VyX2dlbmVyaWNfc3RyaW5nCiAJQ0ZJX0VORFBST0MKLUVORFBST0MoY29weV90b191c2VyKQorRU5EUFJPQyhfY29weV90b191c2VyKQogCiAvKiBTdGFuZGFyZCBjb3B5X2Zyb21fdXNlciB3aXRoIHNlZ21lbnQgbGltaXQgY2hlY2tpbmcgKi8KLUVOVFJZKGNvcHlfZnJvbV91c2VyKQorRU5UUlkoX2NvcHlfZnJvbV91c2VyKQogCUNGSV9TVEFSVFBST0MKIAlHRVRfVEhSRUFEX0lORk8oJXJheCkKIAltb3ZxICVyc2ksJXJjeApAQCAtODgsNyArODgsNyBAQAogCWphZSBiYWRfZnJvbV91c2VyCiAJQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCxjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcKIAlDRklfRU5EUFJPQwotRU5EUFJPQyhjb3B5X2Zyb21fdXNlcikKK0VORFBST0MoX2NvcHlfZnJvbV91c2VyKQogCiBFTlRSWShjb3B5X3VzZXJfZ2VuZXJpYykKIAlDRklfU1RBUlRQUk9DCkBAIC05NiwxMiArOTYsNiBAQAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKGNvcHlfdXNlcl9nZW5lcmljKQogCi1FTlRSWShfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKQotCUNGSV9TVEFSVFBST0MKLQlBTFRFUk5BVElWRV9KVU1QIFg4Nl9GRUFUVVJFX1JFUF9HT09ELGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZwotCUNGSV9FTkRQUk9DCi1FTkRQUk9DKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMpCi0KIAkuc2VjdGlvbiAuZml4dXAsImF4IgogCS8qIG11c3QgemVybyBkZXN0ICovCiBFTlRSWShiYWRfZnJvbV91c2VyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2luYXQuYyBiL2FyY2gveDg2L2xpYi9pbmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmYzRlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9pbmF0LmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHg4NiBpbnN0cnVjdGlvbiBhdHRyaWJ1dGUgdGFibGVzCisgKgorICogV3JpdHRlbiBieSBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjaW5jbHVkZSA8YXNtL2luc24uaD4KKworLyogQXR0cmlidXRlIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGZyb20gb3Bjb2RlIG1hcCAqLworI2luY2x1ZGUgImluYXQtdGFibGVzLmMiCisKKy8qIEF0dHJpYnV0ZSBzZWFyY2ggQVBJcyAqLworaW5zbl9hdHRyX3QgaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBvcGNvZGUpCit7CisJcmV0dXJuIGluYXRfcHJpbWFyeV90YWJsZVtvcGNvZGVdOworfQorCitpbnNuX2F0dHJfdCBpbmF0X2dldF9lc2NhcGVfYXR0cmlidXRlKGluc25fYnl0ZV90IG9wY29kZSwgaW5zbl9ieXRlX3QgbGFzdF9wZngsCisJCQkJICAgICAgaW5zbl9hdHRyX3QgZXNjX2F0dHIpCit7CisJY29uc3QgaW5zbl9hdHRyX3QgKnRhYmxlOworCWluc25fYXR0cl90IGxwZnhfYXR0cjsKKwlpbnQgbiwgbSA9IDA7CisKKwluID0gaW5hdF9lc2NhcGVfaWQoZXNjX2F0dHIpOworCWlmIChsYXN0X3BmeCkgeworCQlscGZ4X2F0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGxhc3RfcGZ4KTsKKwkJbSA9IGluYXRfbGFzdF9wcmVmaXhfaWQobHBmeF9hdHRyKTsKKwl9CisJdGFibGUgPSBpbmF0X2VzY2FwZV90YWJsZXNbbl1bMF07CisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIDA7CisJaWYgKGluYXRfaGFzX3ZhcmlhbnQodGFibGVbb3Bjb2RlXSkgJiYgbSkgeworCQl0YWJsZSA9IGluYXRfZXNjYXBlX3RhYmxlc1tuXVttXTsKKwkJaWYgKCF0YWJsZSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdGFibGVbb3Bjb2RlXTsKK30KKworaW5zbl9hdHRyX3QgaW5hdF9nZXRfZ3JvdXBfYXR0cmlidXRlKGluc25fYnl0ZV90IG1vZHJtLCBpbnNuX2J5dGVfdCBsYXN0X3BmeCwKKwkJCQkgICAgIGluc25fYXR0cl90IGdycF9hdHRyKQoreworCWNvbnN0IGluc25fYXR0cl90ICp0YWJsZTsKKwlpbnNuX2F0dHJfdCBscGZ4X2F0dHI7CisJaW50IG4sIG0gPSAwOworCisJbiA9IGluYXRfZ3JvdXBfaWQoZ3JwX2F0dHIpOworCWlmIChsYXN0X3BmeCkgeworCQlscGZ4X2F0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGxhc3RfcGZ4KTsKKwkJbSA9IGluYXRfbGFzdF9wcmVmaXhfaWQobHBmeF9hdHRyKTsKKwl9CisJdGFibGUgPSBpbmF0X2dyb3VwX3RhYmxlc1tuXVswXTsKKwlpZiAoIXRhYmxlKQorCQlyZXR1cm4gaW5hdF9ncm91cF9jb21tb25fYXR0cmlidXRlKGdycF9hdHRyKTsKKwlpZiAoaW5hdF9oYXNfdmFyaWFudCh0YWJsZVtYODZfTU9EUk1fUkVHKG1vZHJtKV0pICYmIG0pIHsKKwkJdGFibGUgPSBpbmF0X2dyb3VwX3RhYmxlc1tuXVttXTsKKwkJaWYgKCF0YWJsZSkKKwkJCXJldHVybiBpbmF0X2dyb3VwX2NvbW1vbl9hdHRyaWJ1dGUoZ3JwX2F0dHIpOworCX0KKwlyZXR1cm4gdGFibGVbWDg2X01PRFJNX1JFRyhtb2RybSldIHwKKwkgICAgICAgaW5hdF9ncm91cF9jb21tb25fYXR0cmlidXRlKGdycF9hdHRyKTsKK30KKworaW5zbl9hdHRyX3QgaW5hdF9nZXRfYXZ4X2F0dHJpYnV0ZShpbnNuX2J5dGVfdCBvcGNvZGUsIGluc25fYnl0ZV90IHZleF9tLAorCQkJCSAgIGluc25fYnl0ZV90IHZleF9wKQoreworCWNvbnN0IGluc25fYXR0cl90ICp0YWJsZTsKKwlpZiAodmV4X20gPiBYODZfVkVYX01fTUFYIHx8IHZleF9wID4gSU5BVF9MU1RQRlhfTUFYKQorCQlyZXR1cm4gMDsKKwl0YWJsZSA9IGluYXRfYXZ4X3RhYmxlc1t2ZXhfbV1bdmV4X3BdOworCWlmICghdGFibGUpCisJCXJldHVybiAwOworCXJldHVybiB0YWJsZVtvcGNvZGVdOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvaW5zbi5jIGIvYXJjaC94ODYvbGliL2luc24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjMzYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL2luc24uYwpAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIHg4NiBpbnN0cnVjdGlvbiBhbmFseXNpcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDIsIDIwMDQsIDIwMDkKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL2luYXQuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorCisjZGVmaW5lIGdldF9uZXh0KHQsIGluc24pCVwKKwkoe3QgcjsgciA9ICoodCopaW5zbi0+bmV4dF9ieXRlOyBpbnNuLT5uZXh0X2J5dGUgKz0gc2l6ZW9mKHQpOyByOyB9KQorCisjZGVmaW5lIHBlZWtfbmV4dCh0LCBpbnNuKQlcCisJKHt0IHI7IHIgPSAqKHQqKWluc24tPm5leHRfYnl0ZTsgcjsgfSkKKworI2RlZmluZSBwZWVrX25ieXRlX25leHQodCwgaW5zbiwgbikJXAorCSh7dCByOyByID0gKih0KikoKGluc24pLT5uZXh0X2J5dGUgKyBuKTsgcjsgfSkKKworLyoqCisgKiBpbnNuX2luaXQoKSAtIGluaXRpYWxpemUgc3RydWN0IGluc24KKyAqIEBpbnNuOgkmc3RydWN0IGluc24gdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBrYWRkcjoJYWRkcmVzcyAoaW4ga2VybmVsIG1lbW9yeSkgb2YgaW5zdHJ1Y3Rpb24gKG9yIGNvcHkgdGhlcmVvZikKKyAqIEB4ODZfNjQ6CSEwIGZvciA2NC1iaXQga2VybmVsIG9yIDY0LWJpdCBhcHAKKyAqLwordm9pZCBpbnNuX2luaXQoc3RydWN0IGluc24gKmluc24sIGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgeDg2XzY0KQoreworCW1lbXNldChpbnNuLCAwLCBzaXplb2YoKmluc24pKTsKKwlpbnNuLT5rYWRkciA9IGthZGRyOworCWluc24tPm5leHRfYnl0ZSA9IGthZGRyOworCWluc24tPng4Nl82NCA9IHg4Nl82NCA/IDEgOiAwOworCWluc24tPm9wbmRfYnl0ZXMgPSA0OworCWlmICh4ODZfNjQpCisJCWluc24tPmFkZHJfYnl0ZXMgPSA4OworCWVsc2UKKwkJaW5zbi0+YWRkcl9ieXRlcyA9IDQ7Cit9CisKKy8qKgorICogaW5zbl9nZXRfcHJlZml4ZXMgLSBzY2FuIHg4NiBpbnN0cnVjdGlvbiBwcmVmaXggYnl0ZXMKKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIFBvcHVsYXRlcyB0aGUgQGluc24tPnByZWZpeGVzIGJpdG1hcCwgYW5kIHVwZGF0ZXMgQGluc24tPm5leHRfYnl0ZQorICogdG8gcG9pbnQgdG8gdGhlIChmaXJzdCkgb3Bjb2RlLiAgTm8gZWZmZWN0IGlmIEBpbnNuLT5wcmVmaXhlcy5nb3QKKyAqIGlzIGFscmVhZHkgc2V0LgorICovCit2b2lkIGluc25fZ2V0X3ByZWZpeGVzKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN0cnVjdCBpbnNuX2ZpZWxkICpwcmVmaXhlcyA9ICZpbnNuLT5wcmVmaXhlczsKKwlpbnNuX2F0dHJfdCBhdHRyOworCWluc25fYnl0ZV90IGIsIGxiOworCWludCBpLCBuYjsKKworCWlmIChwcmVmaXhlcy0+Z290KQorCQlyZXR1cm47CisKKwluYiA9IDA7CisJbGIgPSAwOworCWIgPSBwZWVrX25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCWF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGIpOworCXdoaWxlIChpbmF0X2lzX2xlZ2FjeV9wcmVmaXgoYXR0cikpIHsKKwkJLyogU2tpcCBpZiBzYW1lIHByZWZpeCAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmI7IGkrKykKKwkJCWlmIChwcmVmaXhlcy0+Ynl0ZXNbaV0gPT0gYikKKwkJCQlnb3RvIGZvdW5kOworCQlpZiAobmIgPT0gNCkKKwkJCS8qIEludmFsaWQgaW5zdHJ1Y3Rpb24gKi8KKwkJCWJyZWFrOworCQlwcmVmaXhlcy0+Ynl0ZXNbbmIrK10gPSBiOworCQlpZiAoaW5hdF9pc19hZGRyZXNzX3NpemVfcHJlZml4KGF0dHIpKSB7CisJCQkvKiBhZGRyZXNzIHNpemUgc3dpdGNoZXMgMi80IG9yIDQvOCAqLworCQkJaWYgKGluc24tPng4Nl82NCkKKwkJCQlpbnNuLT5hZGRyX2J5dGVzIF49IDEyOworCQkJZWxzZQorCQkJCWluc24tPmFkZHJfYnl0ZXMgXj0gNjsKKwkJfSBlbHNlIGlmIChpbmF0X2lzX29wZXJhbmRfc2l6ZV9wcmVmaXgoYXR0cikpIHsKKwkJCS8qIG9wcmFuZCBzaXplIHN3aXRjaGVzIDIvNCAqLworCQkJaW5zbi0+b3BuZF9ieXRlcyBePSA2OworCQl9Citmb3VuZDoKKwkJcHJlZml4ZXMtPm5ieXRlcysrOworCQlpbnNuLT5uZXh0X2J5dGUrKzsKKwkJbGIgPSBiOworCQliID0gcGVla19uZXh0KGluc25fYnl0ZV90LCBpbnNuKTsKKwkJYXR0ciA9IGluYXRfZ2V0X29wY29kZV9hdHRyaWJ1dGUoYik7CisJfQorCS8qIFNldCB0aGUgbGFzdCBwcmVmaXggKi8KKwlpZiAobGIgJiYgbGIgIT0gaW5zbi0+cHJlZml4ZXMuYnl0ZXNbM10pIHsKKwkJaWYgKHVubGlrZWx5KGluc24tPnByZWZpeGVzLmJ5dGVzWzNdKSkgeworCQkJLyogU3dhcCB0aGUgbGFzdCBwcmVmaXggKi8KKwkJCWIgPSBpbnNuLT5wcmVmaXhlcy5ieXRlc1szXTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuYjsgaSsrKQorCQkJCWlmIChwcmVmaXhlcy0+Ynl0ZXNbaV0gPT0gbGIpCisJCQkJCXByZWZpeGVzLT5ieXRlc1tpXSA9IGI7CisJCX0KKwkJaW5zbi0+cHJlZml4ZXMuYnl0ZXNbM10gPSBsYjsKKwl9CisKKwkvKiBEZWNvZGUgUkVYIHByZWZpeCAqLworCWlmIChpbnNuLT54ODZfNjQpIHsKKwkJYiA9IHBlZWtfbmV4dChpbnNuX2J5dGVfdCwgaW5zbik7CisJCWF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKGIpOworCQlpZiAoaW5hdF9pc19yZXhfcHJlZml4KGF0dHIpKSB7CisJCQlpbnNuLT5yZXhfcHJlZml4LnZhbHVlID0gYjsKKwkJCWluc24tPnJleF9wcmVmaXgubmJ5dGVzID0gMTsKKwkJCWluc24tPm5leHRfYnl0ZSsrOworCQkJaWYgKFg4Nl9SRVhfVyhiKSkKKwkJCQkvKiBSRVguVyBvdmVycmlkZXMgb3BuZF9zaXplICovCisJCQkJaW5zbi0+b3BuZF9ieXRlcyA9IDg7CisJCX0KKwl9CisJaW5zbi0+cmV4X3ByZWZpeC5nb3QgPSAxOworCisJLyogRGVjb2RlIFZFWCBwcmVmaXggKi8KKwliID0gcGVla19uZXh0KGluc25fYnl0ZV90LCBpbnNuKTsKKwlhdHRyID0gaW5hdF9nZXRfb3Bjb2RlX2F0dHJpYnV0ZShiKTsKKwlpZiAoaW5hdF9pc192ZXhfcHJlZml4KGF0dHIpKSB7CisJCWluc25fYnl0ZV90IGIyID0gcGVla19uYnl0ZV9uZXh0KGluc25fYnl0ZV90LCBpbnNuLCAxKTsKKwkJaWYgKCFpbnNuLT54ODZfNjQpIHsKKwkJCS8qCisJCQkgKiBJbiAzMi1iaXRzIG1vZGUsIGlmIHRoZSBbNzo2XSBiaXRzIChtb2QgYml0cyBvZgorCQkJICogTW9kUk0pIG9uIHRoZSBzZWNvbmQgYnl0ZSBhcmUgbm90IDExYiwgaXQgaXMKKwkJCSAqIExEUyBvciBMRVMuCisJCQkgKi8KKwkJCWlmIChYODZfTU9EUk1fTU9EKGIyKSAhPSAzKQorCQkJCWdvdG8gdmV4X2VuZDsKKwkJfQorCQlpbnNuLT52ZXhfcHJlZml4LmJ5dGVzWzBdID0gYjsKKwkJaW5zbi0+dmV4X3ByZWZpeC5ieXRlc1sxXSA9IGIyOworCQlpZiAoaW5hdF9pc192ZXgzX3ByZWZpeChhdHRyKSkgeworCQkJYjIgPSBwZWVrX25ieXRlX25leHQoaW5zbl9ieXRlX3QsIGluc24sIDIpOworCQkJaW5zbi0+dmV4X3ByZWZpeC5ieXRlc1syXSA9IGIyOworCQkJaW5zbi0+dmV4X3ByZWZpeC5uYnl0ZXMgPSAzOworCQkJaW5zbi0+bmV4dF9ieXRlICs9IDM7CisJCQlpZiAoaW5zbi0+eDg2XzY0ICYmIFg4Nl9WRVhfVyhiMikpCisJCQkJLyogVkVYLlcgb3ZlcnJpZGVzIG9wbmRfc2l6ZSAqLworCQkJCWluc24tPm9wbmRfYnl0ZXMgPSA4OworCQl9IGVsc2UgeworCQkJaW5zbi0+dmV4X3ByZWZpeC5uYnl0ZXMgPSAyOworCQkJaW5zbi0+bmV4dF9ieXRlICs9IDI7CisJCX0KKwl9Cit2ZXhfZW5kOgorCWluc24tPnZleF9wcmVmaXguZ290ID0gMTsKKworCXByZWZpeGVzLT5nb3QgPSAxOworCXJldHVybjsKK30KKworLyoqCisgKiBpbnNuX2dldF9vcGNvZGUgLSBjb2xsZWN0IG9wY29kZShzKQorICogQGluc246CSZzdHJ1Y3QgaW5zbiBjb250YWluaW5nIGluc3RydWN0aW9uCisgKgorICogUG9wdWxhdGVzIEBpbnNuLT5vcGNvZGUsIHVwZGF0ZXMgQGluc24tPm5leHRfYnl0ZSB0byBwb2ludCBwYXN0IHRoZQorICogb3Bjb2RlIGJ5dGUocyksIGFuZCBzZXQgQGluc24tPmF0dHIgKGV4Y2VwdCBmb3IgZ3JvdXBzKS4KKyAqIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgYW55IHByZWNlZGluZyAocHJlZml4KSBieXRlcy4KKyAqIFNldHMgQGluc24tPm9wY29kZS52YWx1ZSA9IG9wY29kZTEuICBObyBlZmZlY3QgaWYgQGluc24tPm9wY29kZS5nb3QKKyAqIGlzIGFscmVhZHkgMS4KKyAqLwordm9pZCBpbnNuX2dldF9vcGNvZGUoc3RydWN0IGluc24gKmluc24pCit7CisJc3RydWN0IGluc25fZmllbGQgKm9wY29kZSA9ICZpbnNuLT5vcGNvZGU7CisJaW5zbl9ieXRlX3Qgb3AsIHBmeDsKKwlpZiAob3Bjb2RlLT5nb3QpCisJCXJldHVybjsKKwlpZiAoIWluc24tPnByZWZpeGVzLmdvdCkKKwkJaW5zbl9nZXRfcHJlZml4ZXMoaW5zbik7CisKKwkvKiBHZXQgZmlyc3Qgb3Bjb2RlICovCisJb3AgPSBnZXRfbmV4dChpbnNuX2J5dGVfdCwgaW5zbik7CisJb3Bjb2RlLT5ieXRlc1swXSA9IG9wOworCW9wY29kZS0+bmJ5dGVzID0gMTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIFZFWCBwcmVmaXggb3Igbm90ICovCisJaWYgKGluc25faXNfYXZ4KGluc24pKSB7CisJCWluc25fYnl0ZV90IG0sIHA7CisJCW0gPSBpbnNuX3ZleF9tX2JpdHMoaW5zbik7CisJCXAgPSBpbnNuX3ZleF9wX2JpdHMoaW5zbik7CisJCWluc24tPmF0dHIgPSBpbmF0X2dldF9hdnhfYXR0cmlidXRlKG9wLCBtLCBwKTsKKwkJaWYgKCFpbmF0X2FjY2VwdF92ZXgoaW5zbi0+YXR0cikpCisJCQlpbnNuLT5hdHRyID0gMDsJLyogVGhpcyBpbnN0cnVjdGlvbiBpcyBiYWQgKi8KKwkJZ290byBlbmQ7CS8qIFZFWCBoYXMgb25seSAxIGJ5dGUgZm9yIG9wY29kZSAqLworCX0KKworCWluc24tPmF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKG9wKTsKKwl3aGlsZSAoaW5hdF9pc19lc2NhcGUoaW5zbi0+YXR0cikpIHsKKwkJLyogR2V0IGVzY2FwZWQgb3Bjb2RlICovCisJCW9wID0gZ2V0X25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCQlvcGNvZGUtPmJ5dGVzW29wY29kZS0+bmJ5dGVzKytdID0gb3A7CisJCXBmeCA9IGluc25fbGFzdF9wcmVmaXgoaW5zbik7CisJCWluc24tPmF0dHIgPSBpbmF0X2dldF9lc2NhcGVfYXR0cmlidXRlKG9wLCBwZngsIGluc24tPmF0dHIpOworCX0KKwlpZiAoaW5hdF9tdXN0X3ZleChpbnNuLT5hdHRyKSkKKwkJaW5zbi0+YXR0ciA9IDA7CS8qIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgYmFkICovCitlbmQ6CisJb3Bjb2RlLT5nb3QgPSAxOworfQorCisvKioKKyAqIGluc25fZ2V0X21vZHJtIC0gY29sbGVjdCBNb2RSTSBieXRlLCBpZiBhbnkKKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIFBvcHVsYXRlcyBAaW5zbi0+bW9kcm0gYW5kIHVwZGF0ZXMgQGluc24tPm5leHRfYnl0ZSB0byBwb2ludCBwYXN0IHRoZQorICogTW9kUk0gYnl0ZSwgaWYgYW55LiAgSWYgbmVjZXNzYXJ5LCBmaXJzdCBjb2xsZWN0cyB0aGUgcHJlY2VkaW5nIGJ5dGVzCisgKiAocHJlZml4ZXMgYW5kIG9wY29kZShzKSkuICBObyBlZmZlY3QgaWYgQGluc24tPm1vZHJtLmdvdCBpcyBhbHJlYWR5IDEuCisgKi8KK3ZvaWQgaW5zbl9nZXRfbW9kcm0oc3RydWN0IGluc24gKmluc24pCit7CisJc3RydWN0IGluc25fZmllbGQgKm1vZHJtID0gJmluc24tPm1vZHJtOworCWluc25fYnl0ZV90IHBmeCwgbW9kOworCWlmIChtb2RybS0+Z290KQorCQlyZXR1cm47CisJaWYgKCFpbnNuLT5vcGNvZGUuZ290KQorCQlpbnNuX2dldF9vcGNvZGUoaW5zbik7CisKKwlpZiAoaW5hdF9oYXNfbW9kcm0oaW5zbi0+YXR0cikpIHsKKwkJbW9kID0gZ2V0X25leHQoaW5zbl9ieXRlX3QsIGluc24pOworCQltb2RybS0+dmFsdWUgPSBtb2Q7CisJCW1vZHJtLT5uYnl0ZXMgPSAxOworCQlpZiAoaW5hdF9pc19ncm91cChpbnNuLT5hdHRyKSkgeworCQkJcGZ4ID0gaW5zbl9sYXN0X3ByZWZpeChpbnNuKTsKKwkJCWluc24tPmF0dHIgPSBpbmF0X2dldF9ncm91cF9hdHRyaWJ1dGUobW9kLCBwZngsCisJCQkJCQkJICAgICAgaW5zbi0+YXR0cik7CisJCX0KKwl9CisKKwlpZiAoaW5zbi0+eDg2XzY0ICYmIGluYXRfaXNfZm9yY2U2NChpbnNuLT5hdHRyKSkKKwkJaW5zbi0+b3BuZF9ieXRlcyA9IDg7CisJbW9kcm0tPmdvdCA9IDE7Cit9CisKKworLyoqCisgKiBpbnNuX3JpcF9yZWxhdGl2ZSgpIC0gRG9lcyBpbnN0cnVjdGlvbiB1c2UgUklQLXJlbGF0aXZlIGFkZHJlc3NpbmcgbW9kZT8KKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgdGhlIGluc3RydWN0aW9uIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCisgKiBNb2RSTSBieXRlLiAgTm8gZWZmZWN0IGlmIEBpbnNuLT54ODZfNjQgaXMgMC4KKyAqLworaW50IGluc25fcmlwX3JlbGF0aXZlKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN0cnVjdCBpbnNuX2ZpZWxkICptb2RybSA9ICZpbnNuLT5tb2RybTsKKworCWlmICghaW5zbi0+eDg2XzY0KQorCQlyZXR1cm4gMDsKKwlpZiAoIW1vZHJtLT5nb3QpCisJCWluc25fZ2V0X21vZHJtKGluc24pOworCS8qCisJICogRm9yIHJpcC1yZWxhdGl2ZSBpbnN0cnVjdGlvbnMsIHRoZSBtb2QgZmllbGQgKHRvcCAyIGJpdHMpCisJICogaXMgemVybyBhbmQgdGhlIHIvbSBmaWVsZCAoYm90dG9tIDMgYml0cykgaXMgMHg1LgorCSAqLworCXJldHVybiAobW9kcm0tPm5ieXRlcyAmJiAobW9kcm0tPnZhbHVlICYgMHhjNykgPT0gMHg1KTsKK30KKworLyoqCisgKiBpbnNuX2dldF9zaWIoKSAtIEdldCB0aGUgU0lCIGJ5dGUgb2YgaW5zdHJ1Y3Rpb24KKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgdGhlIGluc3RydWN0aW9uIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCisgKiBNb2RSTSBieXRlLgorICovCit2b2lkIGluc25fZ2V0X3NpYihzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlpbnNuX2J5dGVfdCBtb2RybTsKKworCWlmIChpbnNuLT5zaWIuZ290KQorCQlyZXR1cm47CisJaWYgKCFpbnNuLT5tb2RybS5nb3QpCisJCWluc25fZ2V0X21vZHJtKGluc24pOworCWlmIChpbnNuLT5tb2RybS5uYnl0ZXMpIHsKKwkJbW9kcm0gPSAoaW5zbl9ieXRlX3QpaW5zbi0+bW9kcm0udmFsdWU7CisJCWlmIChpbnNuLT5hZGRyX2J5dGVzICE9IDIgJiYKKwkJICAgIFg4Nl9NT0RSTV9NT0QobW9kcm0pICE9IDMgJiYgWDg2X01PRFJNX1JNKG1vZHJtKSA9PSA0KSB7CisJCQlpbnNuLT5zaWIudmFsdWUgPSBnZXRfbmV4dChpbnNuX2J5dGVfdCwgaW5zbik7CisJCQlpbnNuLT5zaWIubmJ5dGVzID0gMTsKKwkJfQorCX0KKwlpbnNuLT5zaWIuZ290ID0gMTsKK30KKworCisvKioKKyAqIGluc25fZ2V0X2Rpc3BsYWNlbWVudCgpIC0gR2V0IHRoZSBkaXNwbGFjZW1lbnQgb2YgaW5zdHJ1Y3Rpb24KKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgdGhlIGluc3RydWN0aW9uIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCisgKiBTSUIgYnl0ZS4KKyAqIERpc3BsYWNlbWVudCB2YWx1ZSBpcyBzaWduLWV4cGFuZGVkLgorICovCit2b2lkIGluc25fZ2V0X2Rpc3BsYWNlbWVudChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlpbnNuX2J5dGVfdCBtb2QsIHJtLCBiYXNlOworCisJaWYgKGluc24tPmRpc3BsYWNlbWVudC5nb3QpCisJCXJldHVybjsKKwlpZiAoIWluc24tPnNpYi5nb3QpCisJCWluc25fZ2V0X3NpYihpbnNuKTsKKwlpZiAoaW5zbi0+bW9kcm0ubmJ5dGVzKSB7CisJCS8qCisJCSAqIEludGVycHJldGluZyB0aGUgbW9kcm0gYnl0ZToKKwkJICogbW9kID0gMDAgLSBubyBkaXNwbGFjZW1lbnQgZmllbGRzIChleGNlcHRpb25zIGJlbG93KQorCQkgKiBtb2QgPSAwMSAtIDEtYnl0ZSBkaXNwbGFjZW1lbnQgZmllbGQKKwkJICogbW9kID0gMTAgLSBkaXNwbGFjZW1lbnQgZmllbGQgaXMgNCBieXRlcywgb3IgMiBieXRlcyBpZgorCQkgKiAJYWRkcmVzcyBzaXplID0gMiAoMHg2NyBwcmVmaXggaW4gMzItYml0IG1vZGUpCisJCSAqIG1vZCA9IDExIC0gbm8gbWVtb3J5IG9wZXJhbmQKKwkJICoKKwkJICogSWYgYWRkcmVzcyBzaXplID0gMi4uLgorCQkgKiBtb2QgPSAwMCwgci9tID0gMTEwIC0gZGlzcGxhY2VtZW50IGZpZWxkIGlzIDIgYnl0ZXMKKwkJICoKKwkJICogSWYgYWRkcmVzcyBzaXplICE9IDIuLi4KKwkJICogbW9kICE9IDExLCByL20gPSAxMDAgLSBTSUIgYnl0ZSBleGlzdHMKKwkJICogbW9kID0gMDAsIFNJQiBiYXNlID0gMTAxIC0gZGlzcGxhY2VtZW50IGZpZWxkIGlzIDQgYnl0ZXMKKwkJICogbW9kID0gMDAsIHIvbSA9IDEwMSAtIHJpcC1yZWxhdGl2ZSBhZGRyZXNzaW5nLCBkaXNwbGFjZW1lbnQKKwkJICogCWZpZWxkIGlzIDQgYnl0ZXMKKwkJICovCisJCW1vZCA9IFg4Nl9NT0RSTV9NT0QoaW5zbi0+bW9kcm0udmFsdWUpOworCQlybSA9IFg4Nl9NT0RSTV9STShpbnNuLT5tb2RybS52YWx1ZSk7CisJCWJhc2UgPSBYODZfU0lCX0JBU0UoaW5zbi0+c2liLnZhbHVlKTsKKwkJaWYgKG1vZCA9PSAzKQorCQkJZ290byBvdXQ7CisJCWlmIChtb2QgPT0gMSkgeworCQkJaW5zbi0+ZGlzcGxhY2VtZW50LnZhbHVlID0gZ2V0X25leHQoY2hhciwgaW5zbik7CisJCQlpbnNuLT5kaXNwbGFjZW1lbnQubmJ5dGVzID0gMTsKKwkJfSBlbHNlIGlmIChpbnNuLT5hZGRyX2J5dGVzID09IDIpIHsKKwkJCWlmICgobW9kID09IDAgJiYgcm0gPT0gNikgfHwgbW9kID09IDIpIHsKKwkJCQlpbnNuLT5kaXNwbGFjZW1lbnQudmFsdWUgPQorCQkJCQkgZ2V0X25leHQoc2hvcnQsIGluc24pOworCQkJCWluc24tPmRpc3BsYWNlbWVudC5uYnl0ZXMgPSAyOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChtb2QgPT0gMCAmJiBybSA9PSA1KSB8fCBtb2QgPT0gMiB8fAorCQkJICAgIChtb2QgPT0gMCAmJiBiYXNlID09IDUpKSB7CisJCQkJaW5zbi0+ZGlzcGxhY2VtZW50LnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJCQlpbnNuLT5kaXNwbGFjZW1lbnQubmJ5dGVzID0gNDsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlpbnNuLT5kaXNwbGFjZW1lbnQuZ290ID0gMTsKK30KKworLyogRGVjb2RlIG1vZmZzZXQxNi8zMi82NCAqLworc3RhdGljIHZvaWQgX19nZXRfbW9mZnNldChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlzd2l0Y2ggKGluc24tPmFkZHJfYnl0ZXMpIHsKKwljYXNlIDI6CisJCWluc24tPm1vZmZzZXQxLnZhbHVlID0gZ2V0X25leHQoc2hvcnQsIGluc24pOworCQlpbnNuLT5tb2Zmc2V0MS5uYnl0ZXMgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCWluc24tPm1vZmZzZXQxLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+bW9mZnNldDEubmJ5dGVzID0gNDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlpbnNuLT5tb2Zmc2V0MS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPm1vZmZzZXQxLm5ieXRlcyA9IDQ7CisJCWluc24tPm1vZmZzZXQyLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+bW9mZnNldDIubmJ5dGVzID0gNDsKKwkJYnJlYWs7CisJfQorCWluc24tPm1vZmZzZXQxLmdvdCA9IGluc24tPm1vZmZzZXQyLmdvdCA9IDE7Cit9CisKKy8qIERlY29kZSBpbW0gdjMyKEl6KSAqLworc3RhdGljIHZvaWQgX19nZXRfaW1tdjMyKHN0cnVjdCBpbnNuICppbnNuKQoreworCXN3aXRjaCAoaW5zbi0+b3BuZF9ieXRlcykgeworCWNhc2UgMjoKKwkJaW5zbi0+aW1tZWRpYXRlLnZhbHVlID0gZ2V0X25leHQoc2hvcnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUubmJ5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCWNhc2UgODoKKwkJaW5zbi0+aW1tZWRpYXRlLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCX0KK30KKworLyogRGVjb2RlIGltbSB2NjQoSXYvT3YpICovCitzdGF0aWMgdm9pZCBfX2dldF9pbW12KHN0cnVjdCBpbnNuICppbnNuKQoreworCXN3aXRjaCAoaW5zbi0+b3BuZF9ieXRlcykgeworCWNhc2UgMjoKKwkJaW5zbi0+aW1tZWRpYXRlMS52YWx1ZSA9IGdldF9uZXh0KHNob3J0LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlMS5uYnl0ZXMgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCWluc24tPmltbWVkaWF0ZTEudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUxLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaW5zbi0+aW1tZWRpYXRlMS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZTEubmJ5dGVzID0gNDsKKwkJaW5zbi0+aW1tZWRpYXRlMi52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZTIubmJ5dGVzID0gNDsKKwkJYnJlYWs7CisJfQorCWluc24tPmltbWVkaWF0ZTEuZ290ID0gaW5zbi0+aW1tZWRpYXRlMi5nb3QgPSAxOworfQorCisvKiBEZWNvZGUgcHRyMTY6MTYvMzIoQXApICovCitzdGF0aWMgdm9pZCBfX2dldF9pbW1wdHIoc3RydWN0IGluc24gKmluc24pCit7CisJc3dpdGNoIChpbnNuLT5vcG5kX2J5dGVzKSB7CisJY2FzZSAyOgorCQlpbnNuLT5pbW1lZGlhdGUxLnZhbHVlID0gZ2V0X25leHQoc2hvcnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUxLm5ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaW5zbi0+aW1tZWRpYXRlMS52YWx1ZSA9IGdldF9uZXh0KGludCwgaW5zbik7CisJCWluc24tPmltbWVkaWF0ZTEubmJ5dGVzID0gNDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQkvKiBwdHIxNjo2NCBpcyBub3QgZXhpc3QgKG5vIHNlZ21lbnQpICovCisJCXJldHVybjsKKwl9CisJaW5zbi0+aW1tZWRpYXRlMi52YWx1ZSA9IGdldF9uZXh0KHVuc2lnbmVkIHNob3J0LCBpbnNuKTsKKwlpbnNuLT5pbW1lZGlhdGUyLm5ieXRlcyA9IDI7CisJaW5zbi0+aW1tZWRpYXRlMS5nb3QgPSBpbnNuLT5pbW1lZGlhdGUyLmdvdCA9IDE7Cit9CisKKy8qKgorICogaW5zbl9nZXRfaW1tZWRpYXRlKCkgLSBHZXQgdGhlIGltbWVkaWF0ZXMgb2YgaW5zdHJ1Y3Rpb24KKyAqIEBpbnNuOgkmc3RydWN0IGluc24gY29udGFpbmluZyBpbnN0cnVjdGlvbgorICoKKyAqIElmIG5lY2Vzc2FyeSwgZmlyc3QgY29sbGVjdHMgdGhlIGluc3RydWN0aW9uIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCisgKiBkaXNwbGFjZW1lbnQgYnl0ZXMuCisgKiBCYXNpY2FsbHksIG1vc3Qgb2YgaW1tZWRpYXRlcyBhcmUgc2lnbi1leHBhbmRlZC4gVW5zaWduZWQtdmFsdWUgY2FuIGJlCisgKiBnZXQgYnkgYml0IG1hc2tpbmcgd2l0aCAoKDEgPDwgKG5ieXRlcyAqIDgpKSAtIDEpCisgKi8KK3ZvaWQgaW5zbl9nZXRfaW1tZWRpYXRlKHN0cnVjdCBpbnNuICppbnNuKQoreworCWlmIChpbnNuLT5pbW1lZGlhdGUuZ290KQorCQlyZXR1cm47CisJaWYgKCFpbnNuLT5kaXNwbGFjZW1lbnQuZ290KQorCQlpbnNuX2dldF9kaXNwbGFjZW1lbnQoaW5zbik7CisKKwlpZiAoaW5hdF9oYXNfbW9mZnNldChpbnNuLT5hdHRyKSkgeworCQlfX2dldF9tb2Zmc2V0KGluc24pOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFpbmF0X2hhc19pbW1lZGlhdGUoaW5zbi0+YXR0cikpCisJCS8qIG5vIGltbWVkaWF0ZXMgKi8KKwkJZ290byBkb25lOworCisJc3dpdGNoIChpbmF0X2ltbWVkaWF0ZV9zaXplKGluc24tPmF0dHIpKSB7CisJY2FzZSBJTkFUX0lNTV9CWVRFOgorCQlpbnNuLT5pbW1lZGlhdGUudmFsdWUgPSBnZXRfbmV4dChjaGFyLCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyA9IDE7CisJCWJyZWFrOworCWNhc2UgSU5BVF9JTU1fV09SRDoKKwkJaW5zbi0+aW1tZWRpYXRlLnZhbHVlID0gZ2V0X25leHQoc2hvcnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUubmJ5dGVzID0gMjsKKwkJYnJlYWs7CisJY2FzZSBJTkFUX0lNTV9EV09SRDoKKwkJaW5zbi0+aW1tZWRpYXRlLnZhbHVlID0gZ2V0X25leHQoaW50LCBpbnNuKTsKKwkJaW5zbi0+aW1tZWRpYXRlLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgSU5BVF9JTU1fUVdPUkQ6CisJCWluc24tPmltbWVkaWF0ZTEudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUxLm5ieXRlcyA9IDQ7CisJCWluc24tPmltbWVkaWF0ZTIudmFsdWUgPSBnZXRfbmV4dChpbnQsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUyLm5ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgSU5BVF9JTU1fUFRSOgorCQlfX2dldF9pbW1wdHIoaW5zbik7CisJCWJyZWFrOworCWNhc2UgSU5BVF9JTU1fVldPUkQzMjoKKwkJX19nZXRfaW1tdjMyKGluc24pOworCQlicmVhazsKKwljYXNlIElOQVRfSU1NX1ZXT1JEOgorCQlfX2dldF9pbW12KGluc24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKGluYXRfaGFzX3NlY29uZF9pbW1lZGlhdGUoaW5zbi0+YXR0cikpIHsKKwkJaW5zbi0+aW1tZWRpYXRlMi52YWx1ZSA9IGdldF9uZXh0KGNoYXIsIGluc24pOworCQlpbnNuLT5pbW1lZGlhdGUyLm5ieXRlcyA9IDE7CisJfQorZG9uZToKKwlpbnNuLT5pbW1lZGlhdGUuZ290ID0gMTsKK30KKworLyoqCisgKiBpbnNuX2dldF9sZW5ndGgoKSAtIEdldCB0aGUgbGVuZ3RoIG9mIGluc3RydWN0aW9uCisgKiBAaW5zbjoJJnN0cnVjdCBpbnNuIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJZiBuZWNlc3NhcnksIGZpcnN0IGNvbGxlY3RzIHRoZSBpbnN0cnVjdGlvbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogaW1tZWRpYXRlcyBieXRlcy4KKyAqLwordm9pZCBpbnNuX2dldF9sZW5ndGgoc3RydWN0IGluc24gKmluc24pCit7CisJaWYgKGluc24tPmxlbmd0aCkKKwkJcmV0dXJuOworCWlmICghaW5zbi0+aW1tZWRpYXRlLmdvdCkKKwkJaW5zbl9nZXRfaW1tZWRpYXRlKGluc24pOworCWluc24tPmxlbmd0aCA9ICh1bnNpZ25lZCBjaGFyKSgodW5zaWduZWQgbG9uZylpbnNuLT5uZXh0X2J5dGUKKwkJCQkgICAgIC0gKHVuc2lnbmVkIGxvbmcpaW5zbi0+a2FkZHIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21zci5jIGIvYXJjaC94ODYvbGliL21zci5jCmluZGV4IDMzYTFlM2MuLjQxNjI4YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tc3IuYworKysgYi9hcmNoL3g4Ni9saWIvbXNyLmMKQEAgLTcxLDE0ICs3MSw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdSk7CiAKLS8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcwotICoKLSAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCi0gKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCi0gKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcwotICoKLSAqLwotdm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKK3N0YXRpYyB2b2lkIF9fcndtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywKKwkJCSAgICBzdHJ1Y3QgbXNyICptc3JzLAorCQkJICAgIHZvaWQgKCptc3JfZnVuYykgKHZvaWQgKmluZm8pKQogewogCXN0cnVjdCBtc3JfaW5mbyBydjsKIAlpbnQgdGhpc19jcHU7CkBAIC05MiwxMSArODcsMjMgQEAKIAl0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBtYXNrKSkKLQkJX19yZG1zcl9vbl9jcHUoJnJ2KTsKKwkJbXNyX2Z1bmMoJnJ2KTsKIAotCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkobWFzaywgX19yZG1zcl9vbl9jcHUsICZydiwgMSk7CisJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBtc3JfZnVuYywgJnJ2LCAxKTsKIAlwdXRfY3B1KCk7CiB9CisKKy8qIHJkbXNyIG9uIGEgYnVuY2ggb2YgQ1BVcworICoKKyAqIEBtYXNrOiAgICAgICB3aGljaCBDUFVzCisgKiBAbXNyX25vOiAgICAgd2hpY2ggTVNSCisgKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcworICoKKyAqLwordm9pZCByZG1zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLCBzdHJ1Y3QgbXNyICptc3JzKQoreworCV9fcndtc3Jfb25fY3B1cyhtYXNrLCBtc3Jfbm8sIG1zcnMsIF9fcmRtc3Jfb25fY3B1KTsKK30KIEVYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1cyk7CiAKIC8qCkBAIC0xMDcsMjQgKzExNCw5IEBACiAgKiBAbXNyczogICAgICAgYXJyYXkgb2YgTVNSIHZhbHVlcwogICoKICAqLwotdm9pZCB3cm1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKK3ZvaWQgd3Jtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKIHsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0JaW50IHRoaXNfY3B1OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5vZmYgICAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotCXJ2Lm1zcnMgICA9IG1zcnM7Ci0JcnYubXNyX25vID0gbXNyX25vOwotCi0JdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0KLQlpZiAoY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgbWFzaykpCi0JCV9fd3Jtc3Jfb25fY3B1KCZydik7Ci0KLQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1hc2ssIF9fd3Jtc3Jfb25fY3B1LCAmcnYsIDEpOwotCXB1dF9jcHUoKTsKKwlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3dybXNyX29uX2NwdSk7CiB9CiBFWFBPUlRfU1lNQk9MKHdybXNyX29uX2NwdXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvdXNlcmNvcHlfMzIuYyBiL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCmluZGV4IDFmMTE4ZDQuLmUyMThkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCisrKyBiL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCkBAIC04NzQsNyArODc0LDcgQEAKICAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCiAgKi8KIHVuc2lnbmVkIGxvbmcKLWNvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQorX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQogCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CkBAIC04ODIsNCArODgyLDEwIEBACiAJCW1lbXNldCh0bywgMCwgbik7CiAJcmV0dXJuIG47CiB9Ci1FWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyKTsKK0VYUE9SVF9TWU1CT0woX2NvcHlfZnJvbV91c2VyKTsKKwordm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQoreworCVdBUk4oMSwgIkJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCFcbiIpOworfQorRVhQT1JUX1NZTUJPTChjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIveDg2LW9wY29kZS1tYXAudHh0IGIvYXJjaC94ODYvbGliL3g4Ni1vcGNvZGUtbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzkzZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL3g4Ni1vcGNvZGUtbWFwLnR4dApAQCAtMCwwICsxLDg5MyBAQAorIyB4ODYgT3Bjb2RlIE1hcHMKKyMKKyM8T3Bjb2RlIG1hcHM+CisjIFRhYmxlOiB0YWJsZS1uYW1lCisjIFJlZmVycmVyOiBlc2NhcGVkLW5hbWUKKyMgQVZYY29kZTogYXZ4LWNvZGUKKyMgb3Bjb2RlOiBtbmVtb25pY3xHcnBYWFggW29wZXJhbmQxWyxvcGVyYW5kMi4uLl1dIFsoZXh0cmExKVssKGV4dHJhMikuLi5dIFt8IDJuZC1tbmVtb25pYyAuLi5dCisjIChvcikKKyMgb3Bjb2RlOiBlc2NhcGUgIyBlc2NhcGVkLW5hbWUKKyMgRW5kVGFibGUKKyMKKyM8Z3JvdXAgbWFwcz4KKyMgR3JwVGFibGU6IEdycFhYWAorIyByZWc6ICBtbmVtb25pYyBbb3BlcmFuZDFbLG9wZXJhbmQyLi4uXV0gWyhleHRyYTEpWywoZXh0cmEyKS4uLl0gW3wgMm5kLW1uZW1vbmljIC4uLl0KKyMgRW5kVGFibGUKKyMKKyMgQVZYIFN1cGVyc2NyaXB0cworIyAgKFZFWCk6IHRoaXMgb3Bjb2RlIGNhbiBhY2NlcHQgVkVYIHByZWZpeC4KKyMgIChvVkVYKTogdGhpcyBvcGNvZGUgcmVxdWlyZXMgVkVYIHByZWZpeC4KKyMgIChvMTI4KTogdGhpcyBvcGNvZGUgb25seSBzdXBwb3J0cyAxMjhiaXQgVkVYLgorIyAgKG8yNTYpOiB0aGlzIG9wY29kZSBvbmx5IHN1cHBvcnRzIDI1NmJpdCBWRVguCisjCisKK1RhYmxlOiBvbmUgYnl0ZSBvcGNvZGUKK1JlZmVycmVyOgorQVZYY29kZToKKyMgMHgwMCAtIDB4MGYKKzAwOiBBREQgRWIsR2IKKzAxOiBBREQgRXYsR3YKKzAyOiBBREQgR2IsRWIKKzAzOiBBREQgR3YsRXYKKzA0OiBBREQgQUwsSWIKKzA1OiBBREQgckFYLEl6CiswNjogUFVTSCBFUyAoaTY0KQorMDc6IFBPUCBFUyAoaTY0KQorMDg6IE9SIEViLEdiCiswOTogT1IgRXYsR3YKKzBhOiBPUiBHYixFYgorMGI6IE9SIEd2LEV2CiswYzogT1IgQUwsSWIKKzBkOiBPUiByQVgsSXoKKzBlOiBQVVNIIENTIChpNjQpCiswZjogZXNjYXBlICMgMi1ieXRlIGVzY2FwZQorIyAweDEwIC0gMHgxZgorMTA6IEFEQyBFYixHYgorMTE6IEFEQyBFdixHdgorMTI6IEFEQyBHYixFYgorMTM6IEFEQyBHdixFdgorMTQ6IEFEQyBBTCxJYgorMTU6IEFEQyByQVgsSXoKKzE2OiBQVVNIIFNTIChpNjQpCisxNzogUE9QIFNTIChpNjQpCisxODogU0JCIEViLEdiCisxOTogU0JCIEV2LEd2CisxYTogU0JCIEdiLEViCisxYjogU0JCIEd2LEV2CisxYzogU0JCIEFMLEliCisxZDogU0JCIHJBWCxJegorMWU6IFBVU0ggRFMgKGk2NCkKKzFmOiBQT1AgRFMgKGk2NCkKKyMgMHgyMCAtIDB4MmYKKzIwOiBBTkQgRWIsR2IKKzIxOiBBTkQgRXYsR3YKKzIyOiBBTkQgR2IsRWIKKzIzOiBBTkQgR3YsRXYKKzI0OiBBTkQgQUwsSWIKKzI1OiBBTkQgckF4LEl6CisyNjogU0VHPUVTIChQcmVmaXgpCisyNzogREFBIChpNjQpCisyODogU1VCIEViLEdiCisyOTogU1VCIEV2LEd2CisyYTogU1VCIEdiLEViCisyYjogU1VCIEd2LEV2CisyYzogU1VCIEFMLEliCisyZDogU1VCIHJBWCxJegorMmU6IFNFRz1DUyAoUHJlZml4KQorMmY6IERBUyAoaTY0KQorIyAweDMwIC0gMHgzZgorMzA6IFhPUiBFYixHYgorMzE6IFhPUiBFdixHdgorMzI6IFhPUiBHYixFYgorMzM6IFhPUiBHdixFdgorMzQ6IFhPUiBBTCxJYgorMzU6IFhPUiByQVgsSXoKKzM2OiBTRUc9U1MgKFByZWZpeCkKKzM3OiBBQUEgKGk2NCkKKzM4OiBDTVAgRWIsR2IKKzM5OiBDTVAgRXYsR3YKKzNhOiBDTVAgR2IsRWIKKzNiOiBDTVAgR3YsRXYKKzNjOiBDTVAgQUwsSWIKKzNkOiBDTVAgckFYLEl6CiszZTogU0VHPURTIChQcmVmaXgpCiszZjogQUFTIChpNjQpCisjIDB4NDAgLSAweDRmCis0MDogSU5DIGVBWCAoaTY0KSB8IFJFWCAobzY0KQorNDE6IElOQyBlQ1ggKGk2NCkgfCBSRVguQiAobzY0KQorNDI6IElOQyBlRFggKGk2NCkgfCBSRVguWCAobzY0KQorNDM6IElOQyBlQlggKGk2NCkgfCBSRVguWEIgKG82NCkKKzQ0OiBJTkMgZVNQIChpNjQpIHwgUkVYLlIgKG82NCkKKzQ1OiBJTkMgZUJQIChpNjQpIHwgUkVYLlJCIChvNjQpCis0NjogSU5DIGVTSSAoaTY0KSB8IFJFWC5SWCAobzY0KQorNDc6IElOQyBlREkgKGk2NCkgfCBSRVguUlhCIChvNjQpCis0ODogREVDIGVBWCAoaTY0KSB8IFJFWC5XIChvNjQpCis0OTogREVDIGVDWCAoaTY0KSB8IFJFWC5XQiAobzY0KQorNGE6IERFQyBlRFggKGk2NCkgfCBSRVguV1ggKG82NCkKKzRiOiBERUMgZUJYIChpNjQpIHwgUkVYLldYQiAobzY0KQorNGM6IERFQyBlU1AgKGk2NCkgfCBSRVguV1IgKG82NCkKKzRkOiBERUMgZUJQIChpNjQpIHwgUkVYLldSQiAobzY0KQorNGU6IERFQyBlU0kgKGk2NCkgfCBSRVguV1JYIChvNjQpCis0ZjogREVDIGVESSAoaTY0KSB8IFJFWC5XUlhCIChvNjQpCisjIDB4NTAgLSAweDVmCis1MDogUFVTSCByQVgvcjggKGQ2NCkKKzUxOiBQVVNIIHJDWC9yOSAoZDY0KQorNTI6IFBVU0ggckRYL3IxMCAoZDY0KQorNTM6IFBVU0ggckJYL3IxMSAoZDY0KQorNTQ6IFBVU0ggclNQL3IxMiAoZDY0KQorNTU6IFBVU0ggckJQL3IxMyAoZDY0KQorNTY6IFBVU0ggclNJL3IxNCAoZDY0KQorNTc6IFBVU0ggckRJL3IxNSAoZDY0KQorNTg6IFBPUCByQVgvcjggKGQ2NCkKKzU5OiBQT1AgckNYL3I5IChkNjQpCis1YTogUE9QIHJEWC9yMTAgKGQ2NCkKKzViOiBQT1AgckJYL3IxMSAoZDY0KQorNWM6IFBPUCByU1AvcjEyIChkNjQpCis1ZDogUE9QIHJCUC9yMTMgKGQ2NCkKKzVlOiBQT1AgclNJL3IxNCAoZDY0KQorNWY6IFBPUCByREkvcjE1IChkNjQpCisjIDB4NjAgLSAweDZmCis2MDogUFVTSEEvUFVTSEFEIChpNjQpCis2MTogUE9QQS9QT1BBRCAoaTY0KQorNjI6IEJPVU5EIEd2LE1hIChpNjQpCis2MzogQVJQTCBFdyxHdyAoaTY0KSB8IE1PVlNYRCBHdixFdiAobzY0KQorNjQ6IFNFRz1GUyAoUHJlZml4KQorNjU6IFNFRz1HUyAoUHJlZml4KQorNjY6IE9wZXJhbmQtU2l6ZSAoUHJlZml4KQorNjc6IEFkZHJlc3MtU2l6ZSAoUHJlZml4KQorNjg6IFBVU0ggSXogKGQ2NCkKKzY5OiBJTVVMIEd2LEV2LEl6Cis2YTogUFVTSCBJYiAoZDY0KQorNmI6IElNVUwgR3YsRXYsSWIKKzZjOiBJTlMvSU5TQiBZYixEWAorNmQ6IElOUy9JTlNXL0lOU0QgWXosRFgKKzZlOiBPVVRTL09VVFNCIERYLFhiCis2ZjogT1VUUy9PVVRTVy9PVVRTRCBEWCxYegorIyAweDcwIC0gMHg3ZgorNzA6IEpPIEpiCis3MTogSk5PIEpiCis3MjogSkIvSk5BRS9KQyBKYgorNzM6IEpOQi9KQUUvSk5DIEpiCis3NDogSlovSkUgSmIKKzc1OiBKTlovSk5FIEpiCis3NjogSkJFL0pOQSBKYgorNzc6IEpOQkUvSkEgSmIKKzc4OiBKUyBKYgorNzk6IEpOUyBKYgorN2E6IEpQL0pQRSBKYgorN2I6IEpOUC9KUE8gSmIKKzdjOiBKTC9KTkdFIEpiCis3ZDogSk5ML0pHRSBKYgorN2U6IEpMRS9KTkcgSmIKKzdmOiBKTkxFL0pHIEpiCisjIDB4ODAgLSAweDhmCis4MDogR3JwMSBFYixJYiAoMUEpCis4MTogR3JwMSBFdixJeiAoMUEpCis4MjogR3JwMSBFYixJYiAoMUEpLChpNjQpCis4MzogR3JwMSBFdixJYiAoMUEpCis4NDogVEVTVCBFYixHYgorODU6IFRFU1QgRXYsR3YKKzg2OiBYQ0hHIEViLEdiCis4NzogWENIRyBFdixHdgorODg6IE1PViBFYixHYgorODk6IE1PViBFdixHdgorOGE6IE1PViBHYixFYgorOGI6IE1PViBHdixFdgorOGM6IE1PViBFdixTdworOGQ6IExFQSBHdixNCis4ZTogTU9WIFN3LEV3Cis4ZjogR3JwMUEgKDFBKSB8IFBPUCBFdiAoZDY0KQorIyAweDkwIC0gMHg5ZgorOTA6IE5PUCB8IFBBVVNFIChGMykgfCBYQ0hHIHI4LHJBWAorOTE6IFhDSEcgckNYL3I5LHJBWAorOTI6IFhDSEcgckRYL3IxMCxyQVgKKzkzOiBYQ0hHIHJCWC9yMTEsckFYCis5NDogWENIRyByU1AvcjEyLHJBWAorOTU6IFhDSEcgckJQL3IxMyxyQVgKKzk2OiBYQ0hHIHJTSS9yMTQsckFYCis5NzogWENIRyByREkvcjE1LHJBWAorOTg6IENCVy9DV0RFL0NEUUUKKzk5OiBDV0QvQ0RRL0NRTworOWE6IENBTExGIEFwIChpNjQpCis5YjogRldBSVQvV0FJVAorOWM6IFBVU0hGL0QvUSBGdiAoZDY0KQorOWQ6IFBPUEYvRC9RIEZ2IChkNjQpCis5ZTogU0FIRgorOWY6IExBSEYKKyMgMHhhMCAtIDB4YWYKK2EwOiBNT1YgQUwsT2IKK2ExOiBNT1YgckFYLE92CithMjogTU9WIE9iLEFMCithMzogTU9WIE92LHJBWAorYTQ6IE1PVlMvQiBYYixZYgorYTU6IE1PVlMvVy9EL1EgWHYsWXYKK2E2OiBDTVBTL0IgWGIsWWIKK2E3OiBDTVBTL1cvRCBYdixZdgorYTg6IFRFU1QgQUwsSWIKK2E5OiBURVNUIHJBWCxJegorYWE6IFNUT1MvQiBZYixBTAorYWI6IFNUT1MvVy9EL1EgWXYsckFYCithYzogTE9EUy9CIEFMLFhiCithZDogTE9EUy9XL0QvUSByQVgsWHYKK2FlOiBTQ0FTL0IgQUwsWWIKK2FmOiBTQ0FTL1cvRC9RIHJBWCxYdgorIyAweGIwIC0gMHhiZgorYjA6IE1PViBBTC9SOEwsSWIKK2IxOiBNT1YgQ0wvUjlMLEliCitiMjogTU9WIERML1IxMEwsSWIKK2IzOiBNT1YgQkwvUjExTCxJYgorYjQ6IE1PViBBSC9SMTJMLEliCitiNTogTU9WIENIL1IxM0wsSWIKK2I2OiBNT1YgREgvUjE0TCxJYgorYjc6IE1PViBCSC9SMTVMLEliCitiODogTU9WIHJBWC9yOCxJdgorYjk6IE1PViByQ1gvcjksSXYKK2JhOiBNT1YgckRYL3IxMCxJdgorYmI6IE1PViByQlgvcjExLEl2CitiYzogTU9WIHJTUC9yMTIsSXYKK2JkOiBNT1YgckJQL3IxMyxJdgorYmU6IE1PViByU0kvcjE0LEl2CitiZjogTU9WIHJESS9yMTUsSXYKKyMgMHhjMCAtIDB4Y2YKK2MwOiBHcnAyIEViLEliICgxQSkKK2MxOiBHcnAyIEV2LEliICgxQSkKK2MyOiBSRVROIEl3IChmNjQpCitjMzogUkVUTgorYzQ6IExFUyBHeixNcCAoaTY0KSB8IDNieXRlcy1WRVggKFByZWZpeCkKK2M1OiBMRFMgR3osTXAgKGk2NCkgfCAyYnl0ZXMtVkVYIChQcmVmaXgpCitjNjogR3JwMTEgRWIsSWIgKDFBKQorYzc6IEdycDExIEV2LEl6ICgxQSkKK2M4OiBFTlRFUiBJdyxJYgorYzk6IExFQVZFIChkNjQpCitjYTogUkVURiBJdworY2I6IFJFVEYKK2NjOiBJTlQzCitjZDogSU5UIEliCitjZTogSU5UTyAoaTY0KQorY2Y6IElSRVQvRC9RCisjIDB4ZDAgLSAweGRmCitkMDogR3JwMiBFYiwxICgxQSkKK2QxOiBHcnAyIEV2LDEgKDFBKQorZDI6IEdycDIgRWIsQ0wgKDFBKQorZDM6IEdycDIgRXYsQ0wgKDFBKQorZDQ6IEFBTSBJYiAoaTY0KQorZDU6IEFBRCBJYiAoaTY0KQorZDY6CitkNzogWExBVC9YTEFUQgorZDg6IEVTQworZDk6IEVTQworZGE6IEVTQworZGI6IEVTQworZGM6IEVTQworZGQ6IEVTQworZGU6IEVTQworZGY6IEVTQworIyAweGUwIC0gMHhlZgorZTA6IExPT1BORS9MT09QTlogSmIgKGY2NCkKK2UxOiBMT09QRS9MT09QWiBKYiAoZjY0KQorZTI6IExPT1AgSmIgKGY2NCkKK2UzOiBKckNYWiBKYiAoZjY0KQorZTQ6IElOIEFMLEliCitlNTogSU4gZUFYLEliCitlNjogT1VUIEliLEFMCitlNzogT1VUIEliLGVBWAorZTg6IENBTEwgSnogKGY2NCkKK2U5OiBKTVAtbmVhciBKeiAoZjY0KQorZWE6IEpNUC1mYXIgQXAgKGk2NCkKK2ViOiBKTVAtc2hvcnQgSmIgKGY2NCkKK2VjOiBJTiBBTCxEWAorZWQ6IElOIGVBWCxEWAorZWU6IE9VVCBEWCxBTAorZWY6IE9VVCBEWCxlQVgKKyMgMHhmMCAtIDB4ZmYKK2YwOiBMT0NLIChQcmVmaXgpCitmMToKK2YyOiBSRVBORSAoUHJlZml4KQorZjM6IFJFUC9SRVBFIChQcmVmaXgpCitmNDogSExUCitmNTogQ01DCitmNjogR3JwM18xIEViICgxQSkKK2Y3OiBHcnAzXzIgRXYgKDFBKQorZjg6IENMQworZjk6IFNUQworZmE6IENMSQorZmI6IFNUSQorZmM6IENMRAorZmQ6IFNURAorZmU6IEdycDQgKDFBKQorZmY6IEdycDUgKDFBKQorRW5kVGFibGUKKworVGFibGU6IDItYnl0ZSBvcGNvZGUgKDB4MGYpCitSZWZlcnJlcjogMi1ieXRlIGVzY2FwZQorQVZYY29kZTogMQorIyAweDBmIDB4MDAtMHgwZgorMDA6IEdycDYgKDFBKQorMDE6IEdycDcgKDFBKQorMDI6IExBUiBHdixFdworMDM6IExTTCBHdixFdworMDQ6CiswNTogU1lTQ0FMTCAobzY0KQorMDY6IENMVFMKKzA3OiBTWVNSRVQgKG82NCkKKzA4OiBJTlZECiswOTogV0JJTlZECiswYToKKzBiOiBVRDIgKDFCKQorMGM6CiswZDogTk9QIEV2IHwgR3JwUAorMGU6IEZFTU1TCisjIDNETm93ISB1c2VzIHRoZSBsYXN0IGltbSBieXRlIGFzIG9wY29kZSBleHRlbnNpb24uCiswZjogM0ROb3chIFBxLFFxLEliCisjIDB4MGYgMHgxMC0weDFmCisxMDogbW92dXBzIFZwcyxXcHMgKFZFWCkgfCBtb3ZzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgbW92dXBkIFZwZCxXcGQgKDY2KSwoVkVYKSB8IG1vdnNkIFZzZCxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzExOiBtb3Z1cHMgV3BzLFZwcyAoVkVYKSB8IG1vdnNzIFdzcyxWc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBtb3Z1cGQgV3BkLFZwZCAoNjYpLChWRVgpIHwgbW92c2QgV3NkLFZzZCAoRjIpLChWRVgpLChvMTI4KQorMTI6IG1vdmxwcyBWcSxNcSAoVkVYKSwobzEyOCkgfCBtb3ZscGQgVnEsTXEgKDY2KSwoVkVYKSwobzEyOCkgfCBtb3ZobHBzIFZxLFVxIChWRVgpLChvMTI4KSB8IG1vdmRkdXAgVnEsV3EgKEYyKSwoVkVYKSB8IG1vdnNsZHVwIFZxLFdxIChGMyksKFZFWCkKKzEzOiBtcHZscHMgTXEsVnEgKFZFWCksKG8xMjgpIHwgbW92bHBkIE1xLFZxICg2NiksKFZFWCksKG8xMjgpCisxNDogdW5wY2tscHMgVnBzLFdxIChWRVgpIHwgdW5wY2tscGQgVnBkLFdxICg2NiksKFZFWCkKKzE1OiB1bnBja2hwcyBWcHMsV3EgKFZFWCkgfCB1bnBja2hwZCBWcGQsV3EgKDY2KSwoVkVYKQorMTY6IG1vdmhwcyBWcSxNcSAoVkVYKSwobzEyOCkgfCBtb3ZocGQgVnEsTXEgKDY2KSwoVkVYKSwobzEyOCkgfCBtb3Zsc3BzIFZxLFVxIChWRVgpLChvMTI4KSB8IG1vdnNoZHVwIFZxLFdxIChGMyksKFZFWCkKKzE3OiBtb3ZocHMgTXEsVnEgKFZFWCksKG8xMjgpIHwgbW92aHBkIE1xLFZxICg2NiksKFZFWCksKG8xMjgpCisxODogR3JwMTYgKDFBKQorMTk6CisxYToKKzFiOgorMWM6CisxZDoKKzFlOgorMWY6IE5PUCBFdgorIyAweDBmIDB4MjAtMHgyZgorMjA6IE1PViBSZCxDZAorMjE6IE1PViBSZCxEZAorMjI6IE1PViBDZCxSZAorMjM6IE1PViBEZCxSZAorMjQ6CisyNToKKzI2OgorMjc6CisyODogbW92YXBzIFZwcyxXcHMgKFZFWCkgfCBtb3ZhcGQgVnBkLFdwZCAoNjYpLChWRVgpCisyOTogbW92YXBzIFdwcyxWcHMgKFZFWCkgfCBtb3ZhcGQgV3BkLFZwZCAoNjYpLChWRVgpCisyYTogY3Z0cGkycHMgVnBzLFFwaSB8IGN2dHNpMnNzIFZzcyxFZC9xIChGMyksKFZFWCksKG8xMjgpIHwgY3Z0cGkycGQgVnBkLFFwaSAoNjYpIHwgY3Z0c2kyc2QgVnNkLEVkL3EgKEYyKSwoVkVYKSwobzEyOCkKKzJiOiBtb3ZudHBzIE1wcyxWcHMgKFZFWCkgfCBtb3ZudHBkIE1wZCxWcGQgKDY2KSwoVkVYKQorMmM6IGN2dHRwczJwaSBQcGksV3BzIHwgY3Z0dHNzMnNpICBHZC9xLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IGN2dHRwZDJwaSBQcGksV3BkICg2NikgfCBjdnR0c2Qyc2kgR2QvcSxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzJkOiBjdnRwczJwaSBQcGksV3BzIHwgY3Z0c3Myc2kgR2QvcSxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBjdnRwZDJwaSBRcGksV3BkICg2NikgfCBjdnRzZDJzaSBHZC9xLFdzZCAoRjIpLChWRVgpLChvMTI4KQorMmU6IHVjb21pc3MgVnNzLFdzcyAoVkVYKSwobzEyOCkgfCB1Y29taXNkICBWc2QsV3NkICg2NiksKFZFWCksKG8xMjgpCisyZjogY29taXNzIFZzcyxXc3MgKFZFWCksKG8xMjgpIHwgY29taXNkICBWc2QsV3NkICg2NiksKFZFWCksKG8xMjgpCisjIDB4MGYgMHgzMC0weDNmCiszMDogV1JNU1IKKzMxOiBSRFRTQworMzI6IFJETVNSCiszMzogUkRQTUMKKzM0OiBTWVNFTlRFUgorMzU6IFNZU0VYSVQKKzM2OgorMzc6IEdFVFNFQworMzg6IGVzY2FwZSAjIDMtYnl0ZSBlc2NhcGUgMQorMzk6CiszYTogZXNjYXBlICMgMy1ieXRlIGVzY2FwZSAyCiszYjoKKzNjOgorM2Q6CiszZToKKzNmOgorIyAweDBmIDB4NDAtMHg0ZgorNDA6IENNT1ZPIEd2LEV2Cis0MTogQ01PVk5PIEd2LEV2Cis0MjogQ01PVkIvQy9OQUUgR3YsRXYKKzQzOiBDTU9WQUUvTkIvTkMgR3YsRXYKKzQ0OiBDTU9WRS9aIEd2LEV2Cis0NTogQ01PVk5FL05aIEd2LEV2Cis0NjogQ01PVkJFL05BIEd2LEV2Cis0NzogQ01PVkEvTkJFIEd2LEV2Cis0ODogQ01PVlMgR3YsRXYKKzQ5OiBDTU9WTlMgR3YsRXYKKzRhOiBDTU9WUC9QRSBHdixFdgorNGI6IENNT1ZOUC9QTyBHdixFdgorNGM6IENNT1ZML05HRSBHdixFdgorNGQ6IENNT1ZOTC9HRSBHdixFdgorNGU6IENNT1ZMRS9ORyBHdixFdgorNGY6IENNT1ZOTEUvRyBHdixFdgorIyAweDBmIDB4NTAtMHg1ZgorNTA6IG1vdm1za3BzIEdkL3EsVXBzIChWRVgpIHwgbW92bXNrcGQgR2QvcSxVcGQgKDY2KSwoVkVYKQorNTE6IHNxcnRwcyBWcHMsV3BzIChWRVgpIHwgc3FydHNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkgfCBzcXJ0cGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgc3FydHNkIFZzZCxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzUyOiByc3FydHBzIFZwcyxXcHMgKFZFWCkgfCByc3FydHNzIFZzcyxXc3MgKEYzKSwoVkVYKSwobzEyOCkKKzUzOiByY3BwcyBWcHMsV3BzIChWRVgpIHwgcmNwc3MgVnNzLFdzcyAoRjMpLChWRVgpLChvMTI4KQorNTQ6IGFuZHBzIFZwcyxXcHMgKFZFWCkgfCBhbmRwZCBWcGQsV3BkICg2NiksKFZFWCkKKzU1OiBhbmRucHMgVnBzLFdwcyAoVkVYKSB8IGFuZG5wZCBWcGQsV3BkICg2NiksKFZFWCkKKzU2OiBvcnBzIFZwcyxXcHMgKFZFWCkgfCBvcnBkIFZwZCxXcGQgKDY2KSwoVkVYKQorNTc6IHhvcnBzIFZwcyxXcHMgKFZFWCkgfCB4b3JwZCBWcGQsV3BkICg2NiksKFZFWCkKKzU4OiBhZGRwcyBWcHMsV3BzIChWRVgpIHwgYWRkc3MgVnNzLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IGFkZHBkIFZwZCxXcGQgKDY2KSwoVkVYKSB8IGFkZHNkIFZzZCxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzU5OiBtdWxwcyBWcHMsV3BzIChWRVgpIHwgbXVsc3MgVnNzLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IG11bHBkIFZwZCxXcGQgKDY2KSwoVkVYKSB8IG11bHNkIFZzZCxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzVhOiBjdnRwczJwZCBWcGQsV3BzIChWRVgpIHwgY3Z0c3Myc2QgVnNkLFdzcyAoRjMpLChWRVgpLChvMTI4KSB8IGN2dHBkMnBzIFZwcyxXcGQgKDY2KSwoVkVYKSB8IGN2dHNkMnNzIFZzZCxXc2QgKEYyKSwoVkVYKSwobzEyOCkKKzViOiBjdnRkcTJwcyBWcHMsV2RxIChWRVgpIHwgY3Z0cHMyZHEgVmRxLFdwcyAoNjYpLChWRVgpIHwgY3Z0dHBzMmRxIFZkcSxXcHMgKEYzKSwoVkVYKQorNWM6IHN1YnBzIFZwcyxXcHMgKFZFWCkgfCBzdWJzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgc3VicGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgc3Vic2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNWQ6IG1pbnBzIFZwcyxXcHMgKFZFWCkgfCBtaW5zcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgbWlucGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgbWluc2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNWU6IGRpdnBzIFZwcyxXcHMgKFZFWCkgfCBkaXZzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgZGl2cGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgZGl2c2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorNWY6IG1heHBzIFZwcyxXcHMgKFZFWCkgfCBtYXhzcyBWc3MsV3NzIChGMyksKFZFWCksKG8xMjgpIHwgbWF4cGQgVnBkLFdwZCAoNjYpLChWRVgpIHwgbWF4c2QgVnNkLFdzZCAoRjIpLChWRVgpLChvMTI4KQorIyAweDBmIDB4NjAtMHg2ZgorNjA6IHB1bnBja2xidyBQcSxRZCB8IHB1bnBja2xidyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2MTogcHVucGNrbHdkIFBxLFFkIHwgcHVucGNrbHdkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzYyOiBwdW5wY2tsZHEgUHEsUWQgfCBwdW5wY2tsZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjM6IHBhY2tzc3diIFBxLFFxIHwgcGFja3Nzd2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjQ6IHBjbXBndGIgUHEsUXEgfCBwY21wZ3RiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzY1OiBwY21wZ3R3IFBxLFFxIHwgcGNtcGd0dyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2NjogcGNtcGd0ZCBQcSxRcSB8IHBjbXBndGQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjc6IHBhY2t1c3diIFBxLFFxIHwgcGFja3Vzd2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNjg6IHB1bnBja2hidyBQcSxRZCB8IHB1bnBja2hidyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis2OTogcHVucGNraHdkIFBxLFFkIHwgcHVucGNraHdkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzZhOiBwdW5wY2toZHEgUHEsUWQgfCBwdW5wY2toZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNmI6IHBhY2tzc2R3IFBxLFFkIHwgcGFja3NzZHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNmM6IHB1bnBja2xxZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNmQ6IHB1bnBja2hxZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNmU6IG1vdmQvcS8gUGQsRWQvcSB8IG1vdmQvcSBWZHEsRWQvcSAoNjYpLChWRVgpLChvMTI4KQorNmY6IG1vdnEgUHEsUXEgfCBtb3ZkcWEgVmRxLFdkcSAoNjYpLChWRVgpIHwgbW92ZHF1IFZkcSxXZHEgKEYzKSwoVkVYKQorIyAweDBmIDB4NzAtMHg3ZgorNzA6IHBzaHVmdyBQcSxRcSxJYiB8IHBzaHVmZCBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpIHwgcHNodWZodyBWZHEsV2RxLEliIChGMyksKFZFWCksKG8xMjgpIHwgcHNodWZsdyBWZHFXZHEsSWIgKEYyKSwoVkVYKSwobzEyOCkKKzcxOiBHcnAxMiAoMUEpCis3MjogR3JwMTMgKDFBKQorNzM6IEdycDE0ICgxQSkKKzc0OiBwY21wZXFiIFBxLFFxIHwgcGNtcGVxYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis3NTogcGNtcGVxdyBQcSxRcSB8IHBjbXBlcXcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorNzY6IHBjbXBlcWQgUHEsUXEgfCBwY21wZXFkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzc3OiBlbW1zL3Z6ZXJvdXBwZXIvdnplcm9hbGwgKFZFWCkKKzc4OiBWTVJFQUQgRWQvcSxHZC9xCis3OTogVk1XUklURSBHZC9xLEVkL3EKKzdhOgorN2I6Cis3YzogaGFkZHBzIFZwcyxXcHMgKEYyKSwoVkVYKSB8IGhhZGRwZCBWcGQsV3BkICg2NiksKFZFWCkKKzdkOiBoc3VicHMgVnBzLFdwcyAoRjIpLChWRVgpIHwgaHN1YnBkIFZwZCxXcGQgKDY2KSwoVkVYKQorN2U6IG1vdmQvcSBFZC9xLFBkIHwgbW92ZC9xIEVkL3EsVmRxICg2NiksKFZFWCksKG8xMjgpIHwgbW92cSBWcSxXcSAoRjMpLChWRVgpLChvMTI4KQorN2Y6IG1vdnEgUXEsUHEgfCBtb3ZkcWEgV2RxLFZkcSAoNjYpLChWRVgpIHwgbW92ZHF1IFdkcSxWZHEgKEYzKSwoVkVYKQorIyAweDBmIDB4ODAtMHg4ZgorODA6IEpPIEp6IChmNjQpCis4MTogSk5PIEp6IChmNjQpCis4MjogSkIvSk5BRS9KQyBKeiAoZjY0KQorODM6IEpOQi9KQUUvSk5DIEp6IChmNjQpCis4NDogSlovSkUgSnogKGY2NCkKKzg1OiBKTlovSk5FIEp6IChmNjQpCis4NjogSkJFL0pOQSBKeiAoZjY0KQorODc6IEpOQkUvSkEgSnogKGY2NCkKKzg4OiBKUyBKeiAoZjY0KQorODk6IEpOUyBKeiAoZjY0KQorOGE6IEpQL0pQRSBKeiAoZjY0KQorOGI6IEpOUC9KUE8gSnogKGY2NCkKKzhjOiBKTC9KTkdFIEp6IChmNjQpCis4ZDogSk5ML0pHRSBKeiAoZjY0KQorOGU6IEpMRS9KTkcgSnogKGY2NCkKKzhmOiBKTkxFL0pHIEp6IChmNjQpCisjIDB4MGYgMHg5MC0weDlmCis5MDogU0VUTyBFYgorOTE6IFNFVE5PIEViCis5MjogU0VUQi9DL05BRSBFYgorOTM6IFNFVEFFL05CL05DIEViCis5NDogU0VURS9aIEViCis5NTogU0VUTkUvTlogRWIKKzk2OiBTRVRCRS9OQSBFYgorOTc6IFNFVEEvTkJFIEViCis5ODogU0VUUyBFYgorOTk6IFNFVE5TIEViCis5YTogU0VUUC9QRSBFYgorOWI6IFNFVE5QL1BPIEViCis5YzogU0VUTC9OR0UgRWIKKzlkOiBTRVROTC9HRSBFYgorOWU6IFNFVExFL05HIEViCis5ZjogU0VUTkxFL0cgRWIKKyMgMHgwZiAweGEwLTB4YWYKK2EwOiBQVVNIIEZTIChkNjQpCithMTogUE9QIEZTIChkNjQpCithMjogQ1BVSUQKK2EzOiBCVCBFdixHdgorYTQ6IFNITEQgRXYsR3YsSWIKK2E1OiBTSExEIEV2LEd2LENMCithNjogR3JwUERMSworYTc6IEdycFJORworYTg6IFBVU0ggR1MgKGQ2NCkKK2E5OiBQT1AgR1MgKGQ2NCkKK2FhOiBSU00KK2FiOiBCVFMgRXYsR3YKK2FjOiBTSFJEIEV2LEd2LEliCithZDogU0hSRCBFdixHdixDTAorYWU6IEdycDE1ICgxQSksKDFDKQorYWY6IElNVUwgR3YsRXYKKyMgMHgwZiAweGIwLTB4YmYKK2IwOiBDTVBYQ0hHIEViLEdiCitiMTogQ01QWENIRyBFdixHdgorYjI6IExTUyBHdixNcAorYjM6IEJUUiBFdixHdgorYjQ6IExGUyBHdixNcAorYjU6IExHUyBHdixNcAorYjY6IE1PVlpYIEd2LEViCitiNzogTU9WWlggR3YsRXcKK2I4OiBKTVBFIHwgUE9QQ05UIEd2LEV2IChGMykKK2I5OiBHcnAxMCAoMUEpCitiYTogR3JwOCBFdixJYiAoMUEpCitiYjogQlRDIEV2LEd2CitiYzogQlNGIEd2LEV2CitiZDogQlNSIEd2LEV2CitiZTogTU9WU1ggR3YsRWIKK2JmOiBNT1ZTWCBHdixFdworIyAweDBmIDB4YzAtMHhjZgorYzA6IFhBREQgRWIsR2IKK2MxOiBYQUREIEV2LEd2CitjMjogY21wcHMgVnBzLFdwcyxJYiAoVkVYKSB8IGNtcHNzIFZzcyxXc3MsSWIgKEYzKSwoVkVYKSwobzEyOCkgfCBjbXBwZCBWcGQsV3BkLEliICg2NiksKFZFWCkgfCBjbXBzZCBWc2QsV3NkLEliIChGMiksKFZFWCkKK2MzOiBtb3ZudGkgTWQvcSxHZC9xCitjNDogcGluc3J3IFBxLFJkL3EvTXcsSWIgfCBwaW5zcncgVmRxLFJkL3EvTXcsSWIgKDY2KSwoVkVYKSwobzEyOCkKK2M1OiBwZXh0cncgR2QsTnEsSWIgfCBwZXh0cncgR2QsVWRxLEliICg2NiksKFZFWCksKG8xMjgpCitjNjogc2h1ZnBzIFZwcyxXcHMsSWIgKFZFWCkgfCBzaHVmcGQgVnBkLFdwZCxJYiAoNjYpLChWRVgpCitjNzogR3JwOSAoMUEpCitjODogQlNXQVAgUkFYL0VBWC9SOC9SOEQKK2M5OiBCU1dBUCBSQ1gvRUNYL1I5L1I5RAorY2E6IEJTV0FQIFJEWC9FRFgvUjEwL1IxMEQKK2NiOiBCU1dBUCBSQlgvRUJYL1IxMS9SMTFECitjYzogQlNXQVAgUlNQL0VTUC9SMTIvUjEyRAorY2Q6IEJTV0FQIFJCUC9FQlAvUjEzL1IxM0QKK2NlOiBCU1dBUCBSU0kvRVNJL1IxNC9SMTRECitjZjogQlNXQVAgUkRJL0VESS9SMTUvUjE1RAorIyAweDBmIDB4ZDAtMHhkZgorZDA6IGFkZHN1YnBzIFZwcyxXcHMgKEYyKSwoVkVYKSB8IGFkZHN1YnBkIFZwZCxXcGQgKDY2KSwoVkVYKQorZDE6IHBzcmx3IFBxLFFxIHwgcHNybHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZDI6IHBzcmxkIFBxLFFxIHwgcHNybGQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZDM6IHBzcmxxIFBxLFFxIHwgcHNybHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZDQ6IHBhZGRxIFBxLFFxIHwgcGFkZHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZDU6IHBtdWxsdyBQcSxRcSB8IHBtdWxsdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkNjogbW92cSBXcSxWcSAoNjYpLChWRVgpLChvMTI4KSB8IG1vdnEyZHEgVmRxLE5xIChGMykgfCBtb3ZkcTJxIFBxLFVxIChGMikKK2Q3OiBwbW92bXNrYiBHZCxOcSB8IHBtb3Ztc2tiIEdkLFVkcSAoNjYpLChWRVgpLChvMTI4KQorZDg6IHBzdWJ1c2IgUHEsUXEgfCBwc3VidXNiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2Q5OiBwc3VidXN3IFBxLFFxIHwgcHN1YnVzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkYTogcG1pbnViIFBxLFFxIHwgcG1pbnViIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RiOiBwYW5kIFBxLFFxIHwgcGFuZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkYzogcGFkZHVzYiBQcSxRcSB8IHBhZGR1c2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGQ6IHBhZGR1c3cgUHEsUXEgfCBwYWRkdXN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RlOiBwbWF4dWIgUHEsUXEgfCBwbWF4dWIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGY6IHBhbmRuIFBxLFFxIHwgcGFuZG4gVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorIyAweDBmIDB4ZTAtMHhlZgorZTA6IHBhdmdiIFBxLFFxIHwgcGF2Z2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTE6IHBzcmF3IFBxLFFxIHwgcHNyYXcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTI6IHBzcmFkIFBxLFFxIHwgcHNyYWQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTM6IHBhdmd3IFBxLFFxIHwgcGF2Z3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTQ6IHBtdWxodXcgUHEsUXEgfCBwbXVsaHV3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2U1OiBwbXVsaHcgUHEsUXEgfCBwbXVsaHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZTY6IGN2dHBkMmRxIFZkcSxXcGQgKEYyKSwoVkVYKSB8IGN2dHRwZDJkcSBWZHEsV3BkICg2NiksKFZFWCkgfCBjdnRkcTJwZCBWcGQsV2RxIChGMyksKFZFWCkKK2U3OiBtb3ZudHEgTXEsUHEgfCBtb3ZudGRxIE1kcSxWZHEgKDY2KSwoVkVYKQorZTg6IHBzdWJzYiBQcSxRcSB8IHBzdWJzYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlOTogcHN1YnN3IFBxLFFxIHwgcHN1YnN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2VhOiBwbWluc3cgUHEsUXEgfCBwbWluc3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZWI6IHBvciBQcSxRcSB8IHBvciBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlYzogcGFkZHNiIFBxLFFxIHwgcGFkZHNiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2VkOiBwYWRkc3cgUHEsUXEgfCBwYWRkc3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZWU6IHBtYXhzdyBQcSxRcSB8IHBtYXhzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitlZjogcHhvciBQcSxRcSB8IHB4b3IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorIyAweDBmIDB4ZjAtMHhmZgorZjA6IGxkZHF1IFZkcSxNZHEgKEYyKSwoVkVYKQorZjE6IHBzbGx3IFBxLFFxIHwgcHNsbHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjI6IHBzbGxkIFBxLFFxIHwgcHNsbGQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjM6IHBzbGxxIFBxLFFxIHwgcHNsbHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjQ6IHBtdWx1ZHEgUHEsUXEgfCBwbXVsdWRxIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2Y1OiBwbWFkZHdkIFBxLFFxIHwgcG1hZGR3ZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitmNjogcHNhZGJ3IFBxLFFxIHwgcHNhZGJ3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2Y3OiBtYXNrbW92cSBQcSxOcSB8IG1hc2ttb3ZkcXUgVmRxLFVkcSAoNjYpLChWRVgpLChvMTI4KQorZjg6IHBzdWJiIFBxLFFxIHwgcHN1YmIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZjk6IHBzdWJ3IFBxLFFxIHwgcHN1YncgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmE6IHBzdWJkIFBxLFFxIHwgcHN1YmQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmI6IHBzdWJxIFBxLFFxIHwgcHN1YnEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmM6IHBhZGRiIFBxLFFxIHwgcGFkZGIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmQ6IHBhZGR3IFBxLFFxIHwgcGFkZHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmU6IHBhZGRkIFBxLFFxIHwgcGFkZGQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZmY6CitFbmRUYWJsZQorCitUYWJsZTogMy1ieXRlIG9wY29kZSAxICgweDBmIDB4MzgpCitSZWZlcnJlcjogMy1ieXRlIGVzY2FwZSAxCitBVlhjb2RlOiAyCisjIDB4MGYgMHgzOCAweDAwLTB4MGYKKzAwOiBwc2h1ZmIgUHEsUXEgfCBwc2h1ZmIgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMDE6IHBoYWRkdyBQcSxRcSB8IHBoYWRkdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswMjogcGhhZGRkIFBxLFFxIHwgcGhhZGRkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzAzOiBwaGFkZHN3IFBxLFFxIHwgcGhhZGRzdyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswNDogcG1hZGR1YnN3IFBxLFFxIHwgcG1hZGR1YnN3IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzA1OiBwaHN1YncgUHEsUXEgfCBwaHN1YncgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMDY6IHBoc3ViZCBQcSxRcSB8IHBoc3ViZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswNzogcGhzdWJzdyBQcSxRcSB8IHBoc3Vic3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMDg6IHBzaWduYiBQcSxRcSB8IHBzaWduYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiswOTogcHNpZ253IFBxLFFxIHwgcHNpZ253IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzBhOiBwc2lnbmQgUHEsUXEgfCBwc2lnbmQgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMGI6IHBtdWxocnN3IFBxLFFxIHwgcG11bGhyc3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMGM6IFZwZXJtaWxwcyAvciAoNjYpLChvVkVYKQorMGQ6IFZwZXJtaWxwZCAvciAoNjYpLChvVkVYKQorMGU6IHZ0ZXN0cHMgL3IgKDY2KSwob1ZFWCkKKzBmOiB2dGVzdHBkIC9yICg2NiksKG9WRVgpCisjIDB4MGYgMHgzOCAweDEwLTB4MWYKKzEwOiBwYmxlbmR2YiBWZHEsV2RxICg2NikKKzExOgorMTI6CisxMzoKKzE0OiBibGVuZHZwcyBWZHEsV2RxICg2NikKKzE1OiBibGVuZHZwZCBWZHEsV2RxICg2NikKKzE2OgorMTc6IHB0ZXN0IFZkcSxXZHEgKDY2KSwoVkVYKQorMTg6IHZicm9hZGNhc3RzcyAvciAoNjYpLChvVkVYKQorMTk6IHZicm9hZGNhc3RzZCAvciAoNjYpLChvVkVYKSwobzI1NikKKzFhOiB2YnJvYWRjYXN0ZjEyOCAvciAoNjYpLChvVkVYKSwobzI1NikKKzFiOgorMWM6IHBhYnNiIFBxLFFxIHwgcGFic2IgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMWQ6IHBhYnN3IFBxLFFxIHwgcGFic3cgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMWU6IHBhYnNkIFBxLFFxIHwgcGFic2QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMWY6CisjIDB4MGYgMHgzOCAweDIwLTB4MmYKKzIwOiBwbW92c3hidyBWZHEsVWRxL01xICg2NiksKFZFWCksKG8xMjgpCisyMTogcG1vdnN4YmQgVmRxLFVkcS9NZCAoNjYpLChWRVgpLChvMTI4KQorMjI6IHBtb3ZzeGJxIFZkcSxVZHEvTXcgKDY2KSwoVkVYKSwobzEyOCkKKzIzOiBwbW92c3h3ZCBWZHEsVWRxL01xICg2NiksKFZFWCksKG8xMjgpCisyNDogcG1vdnN4d3EgVmRxLFVkcS9NZCAoNjYpLChWRVgpLChvMTI4KQorMjU6IHBtb3ZzeGRxIFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzI2OgorMjc6CisyODogcG11bGRxIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzI5OiBwY21wZXFxIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzJhOiBtb3ZudGRxYSBWZHEsTWRxICg2NiksKFZFWCksKG8xMjgpCisyYjogcGFja3VzZHcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMmM6IHZtYXNrbW92cHMobGQpIC9yICg2NiksKG9WRVgpCisyZDogdm1hc2ttb3ZwZChsZCkgL3IgKDY2KSwob1ZFWCkKKzJlOiB2bWFza21vdnBzKHN0KSAvciAoNjYpLChvVkVYKQorMmY6IHZtYXNrbW92cGQoc3QpIC9yICg2NiksKG9WRVgpCisjIDB4MGYgMHgzOCAweDMwLTB4M2YKKzMwOiBwbW92enhidyBWZHEsVWRxL01xICg2NiksKFZFWCksKG8xMjgpCiszMTogcG1vdnp4YmQgVmRxLFVkcS9NZCAoNjYpLChWRVgpLChvMTI4KQorMzI6IHBtb3Z6eGJxIFZkcSxVZHEvTXcgKDY2KSwoVkVYKSwobzEyOCkKKzMzOiBwbW92enh3ZCBWZHEsVWRxL01xICg2NiksKFZFWCksKG8xMjgpCiszNDogcG1vdnp4d3EgVmRxLFVkcS9NZCAoNjYpLChWRVgpLChvMTI4KQorMzU6IHBtb3Z6eGRxIFZkcSxVZHEvTXEgKDY2KSwoVkVYKSwobzEyOCkKKzM2OgorMzc6IHBjbXBndHEgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorMzg6IHBtaW5zYiBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszOTogcG1pbnNkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzNhOiBwbWludXcgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorM2I6IHBtaW51ZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszYzogcG1heHNiIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKzNkOiBwbWF4c2QgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorM2U6IHBtYXh1dyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCiszZjogcG1heHVkIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKKyMgMHgwZiAweDM4IDB4NDAtMHg4ZgorNDA6IHBtdWxsZCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis0MTogcGhtaW5wb3N1dyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCis4MDogSU5WRVBUIEdkL3EsTWRxICg2NikKKzgxOiBJTlZQSUQgR2QvcSxNZHEgKDY2KQorIyAweDBmIDB4MzggMHg5MC0weGJmIChGTUEpCis5NjogdmZtYWRkc3ViMTMycGQvcHMgL3IgKDY2KSwoVkVYKQorOTc6IHZmbXN1YmFkZDEzMnBkL3BzIC9yICg2NiksKFZFWCkKKzk4OiB2Zm1hZGQxMzJwZC9wcyAvciAoNjYpLChWRVgpCis5OTogdmZtYWRkMTMyc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKKzlhOiB2Zm1zdWIxMzJwZC9wcyAvciAoNjYpLChWRVgpCis5YjogdmZtc3ViMTMyc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKKzljOiB2Zm5tYWRkMTMycGQvcHMgL3IgKDY2KSwoVkVYKQorOWQ6IHZmbm1hZGQxMzJzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorOWU6IHZmbm1zdWIxMzJwZC9wcyAvciAoNjYpLChWRVgpCis5ZjogdmZubXN1YjEzMnNkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCithNjogdmZtYWRkc3ViMjEzcGQvcHMgL3IgKDY2KSwoVkVYKQorYTc6IHZmbXN1YmFkZDIxM3BkL3BzIC9yICg2NiksKFZFWCkKK2E4OiB2Zm1hZGQyMTNwZC9wcyAvciAoNjYpLChWRVgpCithOTogdmZtYWRkMjEzc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2FhOiB2Zm1zdWIyMTNwZC9wcyAvciAoNjYpLChWRVgpCithYjogdmZtc3ViMjEzc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2FjOiB2Zm5tYWRkMjEzcGQvcHMgL3IgKDY2KSwoVkVYKQorYWQ6IHZmbm1hZGQyMTNzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYWU6IHZmbm1zdWIyMTNwZC9wcyAvciAoNjYpLChWRVgpCithZjogdmZubXN1YjIxM3NkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCitiNjogdmZtYWRkc3ViMjMxcGQvcHMgL3IgKDY2KSwoVkVYKQorYjc6IHZmbXN1YmFkZDIzMXBkL3BzIC9yICg2NiksKFZFWCkKK2I4OiB2Zm1hZGQyMzFwZC9wcyAvciAoNjYpLChWRVgpCitiOTogdmZtYWRkMjMxc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2JhOiB2Zm1zdWIyMzFwZC9wcyAvciAoNjYpLChWRVgpCitiYjogdmZtc3ViMjMxc2Qvc3MgL3IgKDY2KSwoVkVYKSwobzEyOCkKK2JjOiB2Zm5tYWRkMjMxcGQvcHMgL3IgKDY2KSwoVkVYKQorYmQ6IHZmbm1hZGQyMzFzZC9zcyAvciAoNjYpLChWRVgpLChvMTI4KQorYmU6IHZmbm1zdWIyMzFwZC9wcyAvciAoNjYpLChWRVgpCitiZjogdmZubXN1YjIzMXNkL3NzIC9yICg2NiksKFZFWCksKG8xMjgpCisjIDB4MGYgMHgzOCAweGMwLTB4ZmYKK2RiOiBhZXNpbWMgVmRxLFdkcSAoNjYpLChWRVgpLChvMTI4KQorZGM6IGFlc2VuYyBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkZDogYWVzZW5jbGFzdCBWZHEsV2RxICg2NiksKFZFWCksKG8xMjgpCitkZTogYWVzZGVjIFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2RmOiBhZXNkZWNsYXN0IFZkcSxXZHEgKDY2KSwoVkVYKSwobzEyOCkKK2YwOiBNT1ZCRSBHdixNdiB8IENSQzMyIEdkLEViIChGMikKK2YxOiBNT1ZCRSBNdixHdiB8IENSQzMyIEdkLEV2IChGMikKK0VuZFRhYmxlCisKK1RhYmxlOiAzLWJ5dGUgb3Bjb2RlIDIgKDB4MGYgMHgzYSkKK1JlZmVycmVyOiAzLWJ5dGUgZXNjYXBlIDIKK0FWWGNvZGU6IDMKKyMgMHgwZiAweDNhIDB4MDAtMHhmZgorMDQ6IHZwZXJtaWxwcyAvcixJYiAoNjYpLChvVkVYKQorMDU6IHZwZXJtaWxwZCAvcixJYiAoNjYpLChvVkVYKQorMDY6IHZwZXJtMmYxMjggL3IsSWIgKDY2KSwob1ZFWCksKG8yNTYpCiswODogcm91bmRwcyBWZHEsV2RxLEliICg2NiksKFZFWCkKKzA5OiByb3VuZHBkIFZkcSxXZHEsSWIgKDY2KSwoVkVYKQorMGE6IHJvdW5kc3MgVnNzLFdzcyxJYiAoNjYpLChWRVgpLChvMTI4KQorMGI6IHJvdW5kc2QgVnNkLFdzZCxJYiAoNjYpLChWRVgpLChvMTI4KQorMGM6IGJsZW5kcHMgVmRxLFdkcSxJYiAoNjYpLChWRVgpCiswZDogYmxlbmRwZCBWZHEsV2RxLEliICg2NiksKFZFWCkKKzBlOiBwYmxlbmR3IFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzBmOiBwYWxpZ25yIFBxLFFxLEliIHwgcGFsaWduciBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCisxNDogcGV4dHJiIFJkL01iLFZkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorMTU6IHBleHRydyBSZC9NdyxWZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzE2OiBwZXh0cmQvcGV4dHJxIEVkL3EsVmRxLEliICg2NiksKFZFWCksKG8xMjgpCisxNzogZXh0cmFjdHBzIEVkLFZkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorMTg6IHZpbnNlcnRmMTI4IC9yLEliICg2NiksKG9WRVgpLChvMjU2KQorMTk6IHZleHRyYWN0ZjEyOCAvcixJYiAoNjYpLChvVkVYKSwobzI1NikKKzIwOiBwaW5zcmIgVmRxLFJkL3EvTWIsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzIxOiBpbnNlcnRwcyBWZHEsVWRxL01kLEliICg2NiksKFZFWCksKG8xMjgpCisyMjogcGluc3JkL3BpbnNycSBWZHEsRWQvcSxJYiAoNjYpLChWRVgpLChvMTI4KQorNDA6IGRwcHMgVmRxLFdkcSxJYiAoNjYpLChWRVgpCis0MTogZHBwZCBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCis0MjogbXBzYWRidyBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCis0NDogcGNsbXVscSBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCis0YTogdmJsZW5kdnBzIC9yLEliICg2NiksKG9WRVgpCis0YjogdmJsZW5kdnBkIC9yLEliICg2NiksKG9WRVgpCis0YzogdnBibGVuZHZiIC9yLEliICg2NiksKG9WRVgpLChvMTI4KQorNjA6IHBjbXBlc3RybSBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCis2MTogcGNtcGVzdHJpIFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKKzYyOiBwY21waXN0cm0gVmRxLFdkcSxJYiAoNjYpLChWRVgpLChvMTI4KQorNjM6IHBjbXBpc3RyaSBWZHEsV2RxLEliICg2NiksKFZFWCksKG8xMjgpCitkZjogYWVza2V5Z2VuYXNzaXN0IFZkcSxXZHEsSWIgKDY2KSwoVkVYKSwobzEyOCkKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxCiswOiBBREQKKzE6IE9SCisyOiBBREMKKzM6IFNCQgorNDogQU5ECis1OiBTVUIKKzY6IFhPUgorNzogQ01QCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMUEKKzA6IFBPUAorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDIKKzA6IFJPTAorMTogUk9SCisyOiBSQ0wKKzM6IFJDUgorNDogU0hML1NBTAorNTogU0hSCis2OgorNzogU0FSCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwM18xCiswOiBURVNUIEViLEliCisxOgorMjogTk9UIEViCiszOiBORUcgRWIKKzQ6IE1VTCBBTCxFYgorNTogSU1VTCBBTCxFYgorNjogRElWIEFMLEViCis3OiBJRElWIEFMLEViCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwM18yCiswOiBURVNUIEV2LEl6CisxOgorMjogTk9UIEV2CiszOiBORUcgRXYKKzQ6IE1VTCByQVgsRXYKKzU6IElNVUwgckFYLEV2Cis2OiBESVYgckFYLEV2Cis3OiBJRElWIHJBWCxFdgorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDQKKzA6IElOQyBFYgorMTogREVDIEViCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwNQorMDogSU5DIEV2CisxOiBERUMgRXYKKzI6IENBTExOIEV2IChmNjQpCiszOiBDQUxMRiBFcAorNDogSk1QTiBFdiAoZjY0KQorNTogSk1QRiBFcAorNjogUFVTSCBFdiAoZDY0KQorNzoKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnA2CiswOiBTTERUIFJ2L013CisxOiBTVFIgUnYvTXcKKzI6IExMRFQgRXcKKzM6IExUUiBFdworNDogVkVSUiBFdworNTogVkVSVyBFdworRW5kVGFibGUKKworR3JwVGFibGU6IEdycDcKKzA6IFNHRFQgTXMgfCBWTUNBTEwgKDAwMSksKDExQikgfCBWTUxBVU5DSCAoMDEwKSwoMTFCKSB8IFZNUkVTVU1FICgwMTEpLCgxMUIpIHwgVk1YT0ZGICgxMDApLCgxMUIpCisxOiBTSURUIE1zIHwgTU9OSVRPUiAoMDAwKSwoMTFCKSB8IE1XQUlUICgwMDEpCisyOiBMR0RUIE1zIHwgWEdFVEJWICgwMDApLCgxMUIpIHwgWFNFVEJWICgwMDEpLCgxMUIpCiszOiBMSURUIE1zCis0OiBTTVNXIE13L1J2Cis1OgorNjogTE1TVyBFdworNzogSU5WTFBHIE1iIHwgU1dBUEdTIChvNjQpLCgwMDApLCgxMUIpIHwgUkRUU0NQICgwMDEpLCgxMUIpCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwOAorNDogQlQKKzU6IEJUUworNjogQlRSCis3OiBCVEMKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnA5CisxOiBDTVBYQ0hHOEIvMTZCIE1xL01kcQorNjogVk1QVFJMRCBNcSB8IFZNQ0xFQVIgTXEgKDY2KSB8IFZNWE9OIE1xIChGMykKKzc6IFZNUFRSU1QgTXEKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxMAorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDExCiswOiBNT1YKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnAxMgorMjogcHNybHcgTnEsSWIgKDExQikgfCBwc3JsdyBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKKzQ6IHBzcmF3IE5xLEliICgxMUIpIHwgcHNyYXcgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCis2OiBwc2xsdyBOcSxJYiAoMTFCKSB8IHBzbGx3IFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDEzCisyOiBwc3JsZCBOcSxJYiAoMTFCKSB8IHBzcmxkIFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorNDogcHNyYWQgTnEsSWIgKDExQikgfCBwc3JhZCBVZHEsSWIgKDY2KSwoMTFCKSwoVkVYKSwobzEyOCkKKzY6IHBzbGxkIE5xLEliICgxMUIpIHwgcHNsbGQgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMTQKKzI6IHBzcmxxIE5xLEliICgxMUIpIHwgcHNybHEgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCiszOiBwc3JsZHEgVWRxLEliICg2NiksKDExQiksKFZFWCksKG8xMjgpCis2OiBwc2xscSBOcSxJYiAoMTFCKSB8IHBzbGxxIFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorNzogcHNsbGRxIFVkcSxJYiAoNjYpLCgxMUIpLChWRVgpLChvMTI4KQorRW5kVGFibGUKKworR3JwVGFibGU6IEdycDE1CiswOiBmeHNhdmUKKzE6IGZ4c3RvcgorMjogbGRteGNzciAoVkVYKQorMzogc3RteGNzciAoVkVYKQorNDogWFNBVkUKKzU6IFhSU1RPUiB8IGxmZW5jZSAoMTFCKQorNjogbWZlbmNlICgxMUIpCis3OiBjbGZsdXNoIHwgc2ZlbmNlICgxMUIpCitFbmRUYWJsZQorCitHcnBUYWJsZTogR3JwMTYKKzA6IHByZWZldGNoIE5UQQorMTogcHJlZmV0Y2ggVDAKKzI6IHByZWZldGNoIFQxCiszOiBwcmVmZXRjaCBUMgorRW5kVGFibGUKKworIyBBTUQncyBQcmVmZXRjaCBHcm91cAorR3JwVGFibGU6IEdycFAKKzA6IFBSRUZFVENICisxOiBQUkVGRVRDSFcKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnBQRExLCiswOiBNT05UTVVMCisxOiBYU0hBMQorMjogWFNIQTIKK0VuZFRhYmxlCisKK0dycFRhYmxlOiBHcnBSTkcKKzA6IHhzdG9yZS1ybmcKKzE6IHhjcnlwdC1lY2IKKzI6IHhjcnlwdC1jYmMKKzQ6IHhjcnlwdC1jZmIKKzU6IHhjcnlwdC1vZmIKK0VuZFRhYmxlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9leHRhYmxlLmMgYi9hcmNoL3g4Ni9tbS9leHRhYmxlLmMKaW5kZXggNjFiNDFjYS4uZDA0NzRhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZXh0YWJsZS5jCisrKyBiL2FyY2gveDg2L21tL2V4dGFibGUuYwpAQCAtMzUsMzQgKzM1LDMgQEAKIAogCXJldHVybiAwOwogfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotLyoKLSAqIE5lZWQgdG8gZGVmaW5lZCBvdXIgb3duIHNlYXJjaF9leHRhYmxlIG9uIFg4Nl82NCB0byB3b3JrIGFyb3VuZAotICogYSBCIHN0ZXBwaW5nIEs4IGJ1Zy4KLSAqLwotY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqCi1zZWFyY2hfZXh0YWJsZShjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXJzdCwKLQkgICAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqbGFzdCwKLQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLQkvKiBCIHN0ZXBwaW5nIEs4IGJ1ZyAqLwotCWlmICgodmFsdWUgPj4gMzIpID09IDApCi0JCXZhbHVlIHw9IDB4ZmZmZmZmZmZVTCA8PCAzMjsKLQotCXdoaWxlIChmaXJzdCA8PSBsYXN0KSB7Ci0JCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKm1pZDsKLQkJbG9uZyBkaWZmOwotCi0JCW1pZCA9IChsYXN0IC0gZmlyc3QpIC8gMiArIGZpcnN0OwotCQlkaWZmID0gbWlkLT5pbnNuIC0gdmFsdWU7Ci0JCWlmIChkaWZmID09IDApCi0JCQlyZXR1cm4gbWlkOwotCQllbHNlIGlmIChkaWZmIDwgMCkKLQkJCWZpcnN0ID0gbWlkKzE7Ci0JCWVsc2UKLQkJCWxhc3QgPSBtaWQtMTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGY0Y2VlOTAuLmY2Mjc3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMzgsNyArMzgsOCBAQAogICogUmV0dXJucyAwIGlmIG1taW90cmFjZSBpcyBkaXNhYmxlZCwgb3IgaWYgdGhlIGZhdWx0IGlzIG5vdAogICogaGFuZGxlZCBieSBtbWlvdHJhY2U6CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGttbWlvX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBfX2twcm9iZXMKK2ttbWlvX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKHVubGlrZWx5KGlzX2ttbWlvX2FjdGl2ZSgpKSkKIAkJaWYgKGttbWlvX2hhbmRsZXIocmVncywgYWRkcikgPT0gMSkKQEAgLTQ2LDcgKzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIGludCBfX2twcm9iZXMgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTI0MCw3ICsyNDEsNyBAQAogICoKICAqICAgSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2Mgb3IgbW9kdWxlIG1hcHBpbmcgYXJlYQogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IHZtYWxsb2NfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIG5vaW5saW5lIF9fa3Byb2JlcyBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwZ2RfcGFkZHI7CiAJcG1kX3QgKnBtZF9rOwpAQCAtMzU3LDcgKzM1OCw3IEBACiAgKgogICogVGhpcyBhc3N1bWVzIG5vIGxhcmdlIHBhZ2VzIGluIHRoZXJlLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IHZtYWxsb2NfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIG5vaW5saW5lIF9fa3Byb2JlcyBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJcGdkX3QgKnBnZCwgKnBnZF9yZWY7CiAJcHVkX3QgKnB1ZCwgKnB1ZF9yZWY7CkBAIC02NTgsNyArNjU5LDcgQEAKIAlzaG93X2ZhdWx0X29vcHMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAKIAlzdGFja2VuZCA9IGVuZF9vZl9zdGFjayh0c2spOwotCWlmICgqc3RhY2tlbmQgIT0gU1RBQ0tfRU5EX01BR0lDKQorCWlmICh0c2sgIT0gJmluaXRfdGFzayAmJiAqc3RhY2tlbmQgIT0gU1RBQ0tfRU5EX01BR0lDKQogCQlwcmludGsoS0VSTl9BTEVSVCAiVGhyZWFkIG92ZXJyYW4gc3RhY2ssIG9yIHN0YWNrIGNvcnJ1cHRlZFxuIik7CiAKIAl0c2stPnRocmVhZC5jcjIJCT0gYWRkcmVzczsKQEAgLTg2MCw3ICs4NjEsNyBAQAogICogVGhlcmUgYXJlIG5vIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB0byBsZWF2aW5nIGEgc3RhbGUgVExCIHdoZW4KICAqIGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIGEgcGFnZS4KICAqLwotc3RhdGljIG5vaW5saW5lIGludAorc3RhdGljIG5vaW5saW5lIF9fa3Byb2JlcyBpbnQKIHNwdXJpb3VzX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXBnZF90ICpwZ2Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggMzM0ZTYzYy4uMmZlYjliZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMTcwLDggKzE3MCw3IEBACiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGh5c19hZGRyICsgc2l6ZSksCiAJCQkJcHJvdF92YWwsIG5ld19wcm90X3ZhbCk7Ci0JCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKLQkJCXJldHVybiBOVUxMOworCQkJZ290byBlcnJfZnJlZV9tZW10eXBlOwogCQl9CiAJCXByb3RfdmFsID0gbmV3X3Byb3RfdmFsOwogCX0KQEAgLTE5NywyNiArMTk2LDI1IEBACiAJICovCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwogCWlmICghYXJlYSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyX2ZyZWVfbWVtdHlwZTsKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKIAotCWlmIChrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZShwaHlzX2FkZHIsIHNpemUsIHByb3RfdmFsKSkgewotCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKLQkJZnJlZV92bV9hcmVhKGFyZWEpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBoeXNfYWRkciwgc2l6ZSwgcHJvdF92YWwpKQorCQlnb3RvIGVycl9mcmVlX2FyZWE7CiAKLQlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUsIHBoeXNfYWRkciwgcHJvdCkpIHsKLQkJZnJlZV9tZW10eXBlKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JCWZyZWVfdm1fYXJlYShhcmVhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UodmFkZHIsIHZhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkKKwkJZ290byBlcnJfZnJlZV9hcmVhOwogCiAJcmV0X2FkZHIgPSAodm9pZCBfX2lvbWVtICopICh2YWRkciArIG9mZnNldCk7CiAJbW1pb3RyYWNlX2lvcmVtYXAodW5hbGlnbmVkX3BoeXNfYWRkciwgdW5hbGlnbmVkX3NpemUsIHJldF9hZGRyKTsKIAogCXJldHVybiByZXRfYWRkcjsKK2Vycl9mcmVlX2FyZWE6CisJZnJlZV92bV9hcmVhKGFyZWEpOworZXJyX2ZyZWVfbWVtdHlwZToKKwlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbW1pby5jIGIvYXJjaC94ODYvbW0va21taW8uYwppbmRleCAxNmNjYmQ3Li4xMWE0YWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbW1pby5jCisrKyBiL2FyY2gveDg2L21tL2ttbWlvLmMKQEAgLTU0MCw4ICs1NDAsMTQgQEAKIAlzdHJ1Y3QgZGllX2FyZ3MgKmFyZyA9IGFyZ3M7CiAKIAlpZiAodmFsID09IERJRV9ERUJVRyAmJiAoYXJnLT5lcnIgJiBEUl9TVEVQKSkKLQkJaWYgKHBvc3Rfa21taW9faGFuZGxlcihhcmctPmVyciwgYXJnLT5yZWdzKSA9PSAxKQorCQlpZiAocG9zdF9rbW1pb19oYW5kbGVyKGFyZy0+ZXJyLCBhcmctPnJlZ3MpID09IDEpIHsKKwkJCS8qCisJCQkgKiBSZXNldCB0aGUgQlMgYml0IGluIGRyNiAocG9pbnRlZCBieSBhcmdzLT5lcnIpIHRvCisJCQkgKiBkZW5vdGUgY29tcGxldGlvbiBvZiBwcm9jZXNzaW5nCisJCQkgKi8KKwkJCSgqKHVuc2lnbmVkIGxvbmcgKilFUlJfUFRSKGFyZy0+ZXJyKSkgJj0gfkRSX1NURVA7CiAJCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJCX0KIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCBkYmI1MzgxLi45ZDdjZTk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlhcGljaWRfdG9fbm9kZVthcGljX2lkXSA9IG5vZGU7CiAJbm9kZV9zZXQobm9kZSwgY3B1X25vZGVzX3BhcnNlZCk7CiAJYWNwaV9udW1hID0gMTsKLQlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBQWE0gJXUgLT4gQVBJQyAldSAtPiBOb2RlICV1XG4iLAorCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFBYTSAldSAtPiBBUElDIDB4JTA0eCAtPiBOb2RlICV1XG4iLAogCSAgICAgICBweG0sIGFwaWNfaWQsIG5vZGUpOwogfQogCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlhcGljaWRfdG9fbm9kZVthcGljX2lkXSA9IG5vZGU7CiAJbm9kZV9zZXQobm9kZSwgY3B1X25vZGVzX3BhcnNlZCk7CiAJYWNwaV9udW1hID0gMTsKLQlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBQWE0gJXUgLT4gQVBJQyAldSAtPiBOb2RlICV1XG4iLAorCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFBYTSAldSAtPiBBUElDIDB4JTAyeCAtPiBOb2RlICV1XG4iLAogCSAgICAgICBweG0sIGFwaWNfaWQsIG5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMgYi9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKaW5kZXggNDI3ZmQxYi4uODU2NWQ5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCisrKyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwpAQCAtMSwxMiArMSwxMyBAQAogLyoKICAqIFdyaXR0ZW4gYnkgUGVra2EgUGFhbGFuZW4sIDIwMDgtMjAwOSA8cHFAaWtpLmZpPgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CiAKLSNkZWZpbmUgTU9EVUxFX05BTUUgInRlc3RtbWlvdHJhY2UiCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1taW9fYWRkcmVzczsKIG1vZHVsZV9wYXJhbShtbWlvX2FkZHJlc3MsIHVsb25nLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobW1pb19hZGRyZXNzLCAiIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG1hcHBpbmcgb2YgMTYga0IgIgpAQCAtMzAsNyArMzEsNyBAQAogc3RhdGljIHZvaWQgZG9fd3JpdGVfdGVzdCh2b2lkIF9faW9tZW0gKnApCiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JcHJfaW5mbyhNT0RVTEVfTkFNRSAiOiB3cml0ZSB0ZXN0LlxuIik7CisJcHJfaW5mbygid3JpdGUgdGVzdC5cbiIpOwogCW1taW90cmFjZV9wcmludGsoIldyaXRlIHRlc3QuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKQEAgLTQ3LDcgKzQ4LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBlcnJzWzNdID0geyAwIH07Ci0JcHJfaW5mbyhNT0RVTEVfTkFNRSAiOiByZWFkIHRlc3QuXG4iKTsKKwlwcl9pbmZvKCJyZWFkIHRlc3QuXG4iKTsKIAltbWlvdHJhY2VfcHJpbnRrKCJSZWFkIHRlc3QuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKQEAgLTY4LDcgKzY5LDcgQEAKIAogc3RhdGljIHZvaWQgZG9fcmVhZF9mYXJfdGVzdCh2b2lkIF9faW9tZW0gKnApCiB7Ci0JcHJfaW5mbyhNT0RVTEVfTkFNRSAiOiByZWFkIGZhciB0ZXN0LlxuIik7CisJcHJfaW5mbygicmVhZCBmYXIgdGVzdC5cbiIpOwogCW1taW90cmFjZV9wcmludGsoIlJlYWQgZmFyIHRlc3QuXG4iKTsKIAogCWlvcmVhZDMyKHAgKyByZWFkX2Zhcik7CkBAIC03OCw3ICs3OSw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpwID0gaW9yZW1hcF9ub2NhY2hlKG1taW9fYWRkcmVzcywgc2l6ZSk7CiAJaWYgKCFwKSB7Ci0JCXByX2VycihNT0RVTEVfTkFNRSAiOiBjb3VsZCBub3QgaW9yZW1hcCwgYWJvcnRpbmcuXG4iKTsKKwkJcHJfZXJyKCJjb3VsZCBub3QgaW9yZW1hcCwgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAltbWlvdHJhY2VfcHJpbnRrKCJpb3JlbWFwIHJldHVybmVkICVwLlxuIiwgcCk7CkBAIC05NCwyNCArOTUsMjIgQEAKIAl1bnNpZ25lZCBsb25nIHNpemUgPSAocmVhZF9mYXIpID8gKDggPDwgMjApIDogKDE2IDw8IDEwKTsKIAogCWlmIChtbWlvX2FkZHJlc3MgPT0gMCkgewotCQlwcl9lcnIoTU9EVUxFX05BTUUgIjogeW91IGhhdmUgdG8gdXNlIHRoZSBtb2R1bGUgYXJndW1lbnQgIgotCQkJCQkJCSJtbWlvX2FkZHJlc3MuXG4iKTsKLQkJcHJfZXJyKE1PRFVMRV9OQU1FICI6IERPIE5PVCBMT0FEIFRISVMgTU9EVUxFIFVOTEVTUyIKLQkJCQkiIFlPVSBSRUFMTFkgS05PVyBXSEFUIFlPVSBBUkUgRE9JTkchXG4iKTsKKwkJcHJfZXJyKCJ5b3UgaGF2ZSB0byB1c2UgdGhlIG1vZHVsZSBhcmd1bWVudCBtbWlvX2FkZHJlc3MuXG4iKTsKKwkJcHJfZXJyKCJETyBOT1QgTE9BRCBUSElTIE1PRFVMRSBVTkxFU1MgWU9VIFJFQUxMWSBLTk9XIFdIQVQgWU9VIEFSRSBET0lORyFcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXByX3dhcm5pbmcoTU9EVUxFX05BTUUgIjogV0FSTklORzogbWFwcGluZyAlbHUga0IgQCAweCUwOGx4IGluIFBDSSAiCi0JCSJhZGRyZXNzIHNwYWNlLCBhbmQgd3JpdGluZyAxNiBrQiBvZiBydWJiaXNoIGluIHRoZXJlLlxuIiwKLQkJIHNpemUgPj4gMTAsIG1taW9fYWRkcmVzcyk7CisJcHJfd2FybmluZygiV0FSTklORzogbWFwcGluZyAlbHUga0IgQCAweCUwOGx4IGluIFBDSSBhZGRyZXNzIHNwYWNlLCAiCisJCSAgICJhbmQgd3JpdGluZyAxNiBrQiBvZiBydWJiaXNoIGluIHRoZXJlLlxuIiwKKwkJICAgc2l6ZSA+PiAxMCwgbW1pb19hZGRyZXNzKTsKIAlkb190ZXN0KHNpemUpOwotCXByX2luZm8oTU9EVUxFX05BTUUgIjogQWxsIGRvbmUuXG4iKTsKKwlwcl9pbmZvKCJBbGwgZG9uZS5cbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQogewotCXByX2RlYnVnKE1PRFVMRV9OQU1FICI6IHVubG9hZGVkLlxuIik7CisJcHJfZGVidWcoInVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvY3B1LmMgYi9hcmNoL3g4Ni9wb3dlci9jcHUuYwppbmRleCA4YWE4NWYxLi4wYTk3OWYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9jcHUuYworKysgYi9hcmNoL3g4Ni9wb3dlci9jcHUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tY2UuaD4KICNpbmNsdWRlIDxhc20veGNyLmg+CiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIHN0YXRpYyBzdHJ1Y3Qgc2F2ZWRfY29udGV4dCBzYXZlZF9jb250ZXh0OwpAQCAtMTQyLDMxICsxNDMsNiBAQAogI2VuZGlmCiAJbG9hZF9UUl9kZXNjKCk7CQkJCS8qIFRoaXMgZG9lcyBsdHIgKi8KIAlsb2FkX0xEVCgmY3VycmVudC0+YWN0aXZlX21tLT5jb250ZXh0KTsJLyogVGhpcyBkb2VzIGxsZHQgKi8KLQotCS8qCi0JICogTm93IG1heWJlIHJlbG9hZCB0aGUgZGVidWcgcmVnaXN0ZXJzCi0JICovCi0JaWYgKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzcpIHsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWcwLCAwKTsKLQkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzEsIDEpOwotCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMiwgMik7Ci0JCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWczLCAzKTsKLQkJLyogbm8gNCBhbmQgNSAqLwotCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNiwgNik7Ci0JCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3LCA3KTsKLSNlbHNlCi0JCS8qIENPTkZJR19YODZfNjQgKi8KLQkJbG9hZGRlYnVnKCZjdXJyZW50LT50aHJlYWQsIDApOwotCQlsb2FkZGVidWcoJmN1cnJlbnQtPnRocmVhZCwgMSk7Ci0JCWxvYWRkZWJ1ZygmY3VycmVudC0+dGhyZWFkLCAyKTsKLQkJbG9hZGRlYnVnKCZjdXJyZW50LT50aHJlYWQsIDMpOwotCQkvKiBubyA0IGFuZCA1ICovCi0JCWxvYWRkZWJ1ZygmY3VycmVudC0+dGhyZWFkLCA2KTsKLQkJbG9hZGRlYnVnKCZjdXJyZW50LT50aHJlYWQsIDcpOwotI2VuZGlmCi0JfQotCiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvTWFrZWZpbGUgYi9hcmNoL3g4Ni90b29scy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODIwODI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdG9vbHMvTWFrZWZpbGUKQEAgLTAsMCArMSwzMSBAQAorUEhPTlkgKz0gcG9zdHRlc3QKKworaWZlcSAoJChLQlVJTERfVkVSQk9TRSksMSkKKyAgcG9zdHRlc3RfdmVyYm9zZSA9IC12CitlbHNlCisgIHBvc3R0ZXN0X3ZlcmJvc2UgPQorZW5kaWYKKworaWZlcSAoJChDT05GSUdfNjRCSVQpLHkpCisgIHBvc3R0ZXN0XzY0Yml0ID0gLXkKK2Vsc2UKKyAgcG9zdHRlc3RfNjRiaXQgPSAtbgorZW5kaWYKKworZGlzdGlsbF9hd2sgPSAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2Rpc3RpbGwuYXdrCitjaGtvYmpkdW1wID0gJChzcmN0cmVlKS9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3aworCitxdWlldF9jbWRfcG9zdHRlc3QgPSBURVNUICAgICRACisgICAgICBjbWRfcG9zdHRlc3QgPSAoJChPQkpEVU1QKSAtdiB8ICQoQVdLKSAtZiAkKGNoa29iamR1bXApKSB8fCAkKE9CSkRVTVApIC1kIC1qIC50ZXh0ICQob2JqdHJlZSkvdm1saW51eCB8ICQoQVdLKSAtZiAkKGRpc3RpbGxfYXdrKSB8ICQob2JqKS90ZXN0X2dldF9sZW4gJChwb3N0dGVzdF82NGJpdCkgJChwb3N0dGVzdF92ZXJib3NlKQorCitwb3N0dGVzdDogJChvYmopL3Rlc3RfZ2V0X2xlbiB2bWxpbnV4CisJJChjYWxsIGNtZCxwb3N0dGVzdCkKKworaG9zdHByb2dzLXkJOj0gdGVzdF9nZXRfbGVuCisKKyMgLUkgbmVlZGVkIGZvciBnZW5lcmF0ZWQgQyBzb3VyY2UgYW5kIEMgc291cmNlIHdoaWNoIGluIHRoZSBrZXJuZWwgdHJlZS4KK0hPU1RDRkxBR1NfdGVzdF9nZXRfbGVuLm8gOj0gLVdhbGwgLUkkKG9ianRyZWUpL2FyY2gveDg2L2xpYi8gLUkkKHNyY3RyZWUpL2FyY2gveDg2L2luY2x1ZGUvIC1JJChzcmN0cmVlKS9hcmNoL3g4Ni9saWIvIC1JJChzcmN0cmVlKS9pbmNsdWRlLworCisjIERlcGVuZGVuY2llcyBhcmUgYWxzbyBuZWVkZWQuCiskKG9iaikvdGVzdF9nZXRfbGVuLm86ICQoc3JjdHJlZSkvYXJjaC94ODYvbGliL2luc24uYyAkKHNyY3RyZWUpL2FyY2gveDg2L2xpYi9pbmF0LmMgJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0X3R5cGVzLmggJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbmF0LmggJChzcmN0cmVlKS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnNuLmggJChvYmp0cmVlKS9hcmNoL3g4Ni9saWIvaW5hdC10YWJsZXMuYworCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3ayBiL2FyY2gveDg2L3Rvb2xzL2Noa29iamR1bXAuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTNjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni90b29scy9jaGtvYmpkdW1wLmF3awpAQCAtMCwwICsxLDIzIEBACisjIEdOVSBvYmpkdW1wIHZlcnNpb24gY2hlY2tlcgorIworIyBVc2FnZToKKyMgb2JqZHVtcCAtdiB8IGF3ayAtZiBjaGtvYmpkdW1wLmF3aworQkVHSU4geworCSMgb2JqZHVtcCB2ZXJzaW9uIDIuMTkgb3IgbGF0ZXIgaXMgT0sgZm9yIHRoZSB0ZXN0LgorCW9kX3ZlciA9IDI7CisJb2Rfc3ZlciA9IDE5OworfQorCisvXkdOVS8geworCXNwbGl0KCQ0LCB2ZXIsICIuIik7CisJaWYgKHZlclsxXSA+IG9kX3ZlciB8fAorCSAgICAodmVyWzFdID09IG9kX3ZlciAmJiB2ZXJbMl0gPj0gb2Rfc3ZlcikpIHsKKwkJZXhpdCAxOworCX0gZWxzZSB7CisJCXByaW50ZigiV2FybmluZzogb2JqZHVtcCB2ZXJzaW9uICVzIGlzIG9sZGVyIHRoYW4gJWQuJWRcbiIsCisJCSAgICAgICAkNCwgb2RfdmVyLCBvZF9zdmVyKTsKKwkJcHJpbnQoIldhcm5pbmc6IFNraXBwaW5nIHBvc3R0ZXN0LiIpOworCQkjIExvZ2ljIGlzIGludmVydGVkLCBiZWNhdXNlIHdlIGp1c3Qgc2tpcCB0ZXN0IHdpdGhvdXQgZXJyb3IuCisJCWV4aXQgMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy9kaXN0aWxsLmF3ayBiL2FyY2gveDg2L3Rvb2xzL2Rpc3RpbGwuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxM2MwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni90b29scy9kaXN0aWxsLmF3awpAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vYXdrIC1mCisjIFVzYWdlOiBvYmpkdW1wIC1kIGEub3V0IHwgYXdrIC1mIGRpc3RpbGwuYXdrIHwgLi90ZXN0X2dldF9sZW4KKyMgRGlzdGlsbHMgdGhlIGRpc2Fzc2VtYmx5IGFzIGZvbGxvd3M6CisjIC0gUmVtb3ZlcyBhbGwgbGluZXMgZXhjZXB0IHRoZSBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLgorIyAtIEZvciBpbnN0cnVjdGlvbnMgdGhhdCBleGNlZWQgMSBsaW5lICg3IGJ5dGVzKSwgY3JhbXMgYWxsIHRoZSBoZXggYnl0ZXMKKyMgaW50byBhIHNpbmdsZSBsaW5lLgorIyAtIFJlbW92ZSBiYWQob3IgcHJlZml4IG9ubHkpIGluc3RydWN0aW9ucworCitCRUdJTiB7CisJcHJldl9hZGRyID0gIiIKKwlwcmV2X2hleCA9ICIiCisJcHJldl9tbmVtb25pYyA9ICIiCisJYmFkX2V4cHIgPSAiKFxcKGJhZFxcKXxecmV4fF4uYnl0ZXxecmVwKHp8bnopJHxebG9jayR8XmVzJHxeY3MkfF5zcyR8XmRzJHxeZnMkfF5ncyR8XmRhdGEoMTZ8MzIpJHxeYWRkcigxNnwzMnw2NCkpIgorCWZ3YWl0X2V4cHIgPSAiXjliICIKKwlmd2FpdF9zdHI9IjliXHRmd2FpdCIKK30KKworL14gKlswLTlhLWZdKyA8W14+XSo+Oi8geworCSMgU3ltYm9sIGVudHJ5CisJcHJpbnRmKCIlcyVzXG4iLCAkMiwgJDEpCit9CisKKy9eICpbMC05YS1mXSs6LyB7CisJaWYgKHNwbGl0KCQwLCBmaWVsZCwgIlx0IikgPCAzKSB7CisJCSMgVGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc2FtZSBpbnNuLgorCQlwcmV2X2hleCA9IHByZXZfaGV4IGZpZWxkWzJdCisJfSBlbHNlIHsKKwkJIyBTa2lwIGJhZCBpbnN0cnVjdGlvbnMKKwkJaWYgKG1hdGNoKHByZXZfbW5lbW9uaWMsIGJhZF9leHByKSkKKwkJCXByZXZfYWRkciA9ICIiCisJCSMgU3BsaXQgZndhaXQgZnJvbSBvdGhlciBmKiBpbnN0cnVjdGlvbnMKKwkJaWYgKG1hdGNoKHByZXZfaGV4LCBmd2FpdF9leHByKSAmJiBwcmV2X21uZW1vbmljICE9ICJmd2FpdCIpIHsKKwkJCXByaW50ZiAiJXNcdCVzXG4iLCBwcmV2X2FkZHIsIGZ3YWl0X3N0cgorCQkJc3ViKGZ3YWl0X2V4cHIsICIiLCBwcmV2X2hleCkKKwkJfQorCQlpZiAocHJldl9hZGRyICE9ICIiKQorCQkJcHJpbnRmICIlc1x0JXNcdCVzXG4iLCBwcmV2X2FkZHIsIHByZXZfaGV4LCBwcmV2X21uZW1vbmljCisJCXByZXZfYWRkciA9IGZpZWxkWzFdCisJCXByZXZfaGV4ID0gZmllbGRbMl0KKwkJcHJldl9tbmVtb25pYyA9IGZpZWxkWzNdCisJfQorfQorCitFTkQgeworCWlmIChwcmV2X2FkZHIgIT0gIiIpCisJCXByaW50ZiAiJXNcdCVzXHQlc1xuIiwgcHJldl9hZGRyLCBwcmV2X2hleCwgcHJldl9tbmVtb25pYworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrIGIvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGU5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni90b29scy9nZW4taW5zbi1hdHRyLXg4Ni5hd2sKQEAgLTAsMCArMSwzODAgQEAKKyMhL2Jpbi9hd2sgLWYKKyMgZ2VuLWluc24tYXR0ci14ODYuYXdrOiBJbnN0cnVjdGlvbiBhdHRyaWJ1dGUgdGFibGUgZ2VuZXJhdG9yCisjIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KKyMKKyMgVXNhZ2U6IGF3ayAtZiBnZW4taW5zbi1hdHRyLXg4Ni5hd2sgeDg2LW9wY29kZS1tYXAudHh0ID4gaW5hdC10YWJsZXMuYworCisjIEF3ayBpbXBsZW1lbnRhdGlvbiBzYW5pdHkgY2hlY2sKK2Z1bmN0aW9uIGNoZWNrX2F3a19pbXBsZW1lbnQoKSB7CisJaWYgKCFtYXRjaCgiYWJjIiwgIltbOmxvd2VyOl1dKyIpKQorCQlyZXR1cm4gIllvdXIgYXdrIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0b3ItY2xhc3MuIgorCWlmIChzcHJpbnRmKCIleCIsIDApICE9ICIwIikKKwkJcmV0dXJuICJZb3VyIGF3ayBoYXMgYSBwcmludGYtZm9ybWF0IHByb2JsZW0uIgorCXJldHVybiAiIgorfQorCisjIENsZWFyIHdvcmtpbmcgdmFycworZnVuY3Rpb24gY2xlYXJfdmFycygpIHsKKwlkZWxldGUgdGFibGUKKwlkZWxldGUgbHB0YWJsZTIKKwlkZWxldGUgbHB0YWJsZTEKKwlkZWxldGUgbHB0YWJsZTMKKwllaWQgPSAtMSAjIGVzY2FwZSBpZAorCWdpZCA9IC0xICMgZ3JvdXAgaWQKKwlhaWQgPSAtMSAjIEFWWCBpZAorCXRuYW1lID0gIiIKK30KKworQkVHSU4geworCSMgSW1wbGVtZW50YXRpb24gZXJyb3IgY2hlY2tpbmcKKwlhd2tjaGVja2VkID0gY2hlY2tfYXdrX2ltcGxlbWVudCgpCisJaWYgKGF3a2NoZWNrZWQgIT0gIiIpIHsKKwkJcHJpbnQgIkVycm9yOiAiIGF3a2NoZWNrZWQgPiAiL2Rldi9zdGRlcnIiCisJCXByaW50ICJQbGVhc2UgdHJ5IHRvIHVzZSBnYXdrLiIgPiAiL2Rldi9zdGRlcnIiCisJCWV4aXQgMQorCX0KKworCSMgU2V0dXAgZ2VuZXJhdGluZyB0YWJsZXMKKwlwcmludCAiLyogeDg2IG9wY29kZSBtYXAgZ2VuZXJhdGVkIGZyb20geDg2LW9wY29kZS1tYXAudHh0ICovIgorCXByaW50ICIvKiBEbyBub3QgY2hhbmdlIHRoaXMgY29kZS4gKi9cbiIKKwlnZ2lkID0gMQorCWdlaWQgPSAxCisJZ2FpZCA9IDAKKwlkZWxldGUgZXRhYmxlCisJZGVsZXRlIGd0YWJsZQorCWRlbGV0ZSBhdGFibGUKKworCW9wbmRfZXhwciA9ICJeW1s6YWxwaGE6XS9dIgorCWV4dF9leHByID0gIl5cXCgiCisJc2VwX2V4cHIgPSAiXlxcfCQiCisJZ3JvdXBfZXhwciA9ICJeR3JwW1s6YWxudW06XV0rIgorCisJaW1tX2V4cHIgPSAiXltJSkFPXVtbOmxvd2VyOl1dIgorCWltbV9mbGFnWyJJYiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fQllURSkiCisJaW1tX2ZsYWdbIkpiIl0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9CWVRFKSIKKwlpbW1fZmxhZ1siSXciXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX1dPUkQpIgorCWltbV9mbGFnWyJJZCJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fRFdPUkQpIgorCWltbV9mbGFnWyJJcSJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fUVdPUkQpIgorCWltbV9mbGFnWyJBcCJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fUFRSKSIKKwlpbW1fZmxhZ1siSXoiXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX1ZXT1JEMzIpIgorCWltbV9mbGFnWyJKeiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fVldPUkQzMikiCisJaW1tX2ZsYWdbIkl2Il0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9WV09SRCkiCisJaW1tX2ZsYWdbIk9iIl0gPSAiSU5BVF9NT0ZGU0VUIgorCWltbV9mbGFnWyJPdiJdID0gIklOQVRfTU9GRlNFVCIKKworCW1vZHJtX2V4cHIgPSAiXihbQ0RFR01OUFFSU1VWVy9dW1s6bG93ZXI6XV0rfE5UQXxUWzAxMl0pIgorCWZvcmNlNjRfZXhwciA9ICJcXChbZGZdNjRcXCkiCisJcmV4X2V4cHIgPSAiXlJFWChcXC5bWFJXQl0rKSoiCisJZnB1X2V4cHIgPSAiXkVTQyIgIyBUT0RPCisKKwlscHJlZml4MV9leHByID0gIlxcKDY2XFwpIgorCWxwcmVmaXgyX2V4cHIgPSAiXFwoRjNcXCkiCisJbHByZWZpeDNfZXhwciA9ICJcXChGMlxcKSIKKwltYXhfbHByZWZpeCA9IDQKKworCXZleG9rX2V4cHIgPSAiXFwoVkVYXFwpIgorCXZleG9ubHlfZXhwciA9ICJcXChvVkVYXFwpIgorCisJcHJlZml4X2V4cHIgPSAiXFwoUHJlZml4XFwpIgorCXByZWZpeF9udW1bIk9wZXJhbmQtU2l6ZSJdID0gIklOQVRfUEZYX09QTkRTWiIKKwlwcmVmaXhfbnVtWyJSRVBORSJdID0gIklOQVRfUEZYX1JFUE5FIgorCXByZWZpeF9udW1bIlJFUC9SRVBFIl0gPSAiSU5BVF9QRlhfUkVQRSIKKwlwcmVmaXhfbnVtWyJMT0NLIl0gPSAiSU5BVF9QRlhfTE9DSyIKKwlwcmVmaXhfbnVtWyJTRUc9Q1MiXSA9ICJJTkFUX1BGWF9DUyIKKwlwcmVmaXhfbnVtWyJTRUc9RFMiXSA9ICJJTkFUX1BGWF9EUyIKKwlwcmVmaXhfbnVtWyJTRUc9RVMiXSA9ICJJTkFUX1BGWF9FUyIKKwlwcmVmaXhfbnVtWyJTRUc9RlMiXSA9ICJJTkFUX1BGWF9GUyIKKwlwcmVmaXhfbnVtWyJTRUc9R1MiXSA9ICJJTkFUX1BGWF9HUyIKKwlwcmVmaXhfbnVtWyJTRUc9U1MiXSA9ICJJTkFUX1BGWF9TUyIKKwlwcmVmaXhfbnVtWyJBZGRyZXNzLVNpemUiXSA9ICJJTkFUX1BGWF9BRERSU1oiCisJcHJlZml4X251bVsiMmJ5dGVzLVZFWCJdID0gIklOQVRfUEZYX1ZFWDIiCisJcHJlZml4X251bVsiM2J5dGVzLVZFWCJdID0gIklOQVRfUEZYX1ZFWDMiCisKKwljbGVhcl92YXJzKCkKK30KKworZnVuY3Rpb24gc2VtYW50aWNfZXJyb3IobXNnKSB7CisJcHJpbnQgIlNlbWFudGljIGVycm9yIGF0ICIgTlIgIjogIiBtc2cgPiAiL2Rldi9zdGRlcnIiCisJZXhpdCAxCit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykgeworCXByaW50ICJERUJVRzogIiBtc2cKK30KKworZnVuY3Rpb24gYXJyYXlfc2l6ZShhcnIsICAgaSxjKSB7CisJYyA9IDAKKwlmb3IgKGkgaW4gYXJyKQorCQljKysKKwlyZXR1cm4gYworfQorCisvXlRhYmxlOi8geworCXByaW50ICIvKiAiICQwICIgKi8iCisJaWYgKHRuYW1lICE9ICIiKQorCQlzZW1hbnRpY19lcnJvcigiSGl0IFRhYmxlOiBiZWZvcmUgRW5kVGFibGU6LiIpOworfQorCisvXlJlZmVycmVyOi8geworCWlmIChORiAhPSAxKSB7CisJCSMgZXNjYXBlIG9wY29kZSB0YWJsZQorCQlyZWYgPSAiIgorCQlmb3IgKGkgPSAyOyBpIDw9IE5GOyBpKyspCisJCQlyZWYgPSByZWYgJGkKKwkJZWlkID0gZXNjYXBlW3JlZl0KKwkJdG5hbWUgPSBzcHJpbnRmKCJpbmF0X2VzY2FwZV90YWJsZV8lZCIsIGVpZCkKKwl9Cit9CisKKy9eQVZYY29kZTovIHsKKwlpZiAoTkYgIT0gMSkgeworCQkjIEFWWC9lc2NhcGUgb3Bjb2RlIHRhYmxlCisJCWFpZCA9ICQyCisJCWlmIChnYWlkIDw9IGFpZCkKKwkJCWdhaWQgPSBhaWQgKyAxCisJCWlmICh0bmFtZSA9PSAiIikJIyBBVlggb25seSBvcGNvZGUgdGFibGUKKwkJCXRuYW1lID0gc3ByaW50ZigiaW5hdF9hdnhfdGFibGVfJWQiLCAkMikKKwl9CisJaWYgKGFpZCA9PSAtMSAmJiBlaWQgPT0gLTEpCSMgcHJpbWFyeSBvcGNvZGUgdGFibGUKKwkJdG5hbWUgPSAiaW5hdF9wcmltYXJ5X3RhYmxlIgorfQorCisvXkdycFRhYmxlOi8geworCXByaW50ICIvKiAiICQwICIgKi8iCisJaWYgKCEoJDIgaW4gZ3JvdXApKQorCQlzZW1hbnRpY19lcnJvcigiTm8gZ3JvdXA6ICIgJDIgKQorCWdpZCA9IGdyb3VwWyQyXQorCXRuYW1lID0gImluYXRfZ3JvdXBfdGFibGVfIiBnaWQKK30KKworZnVuY3Rpb24gcHJpbnRfdGFibGUodGJsLG5hbWUsZm10LG4pCit7CisJcHJpbnQgImNvbnN0IGluc25fYXR0cl90ICIgbmFtZSAiID0geyIKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlkID0gc3ByaW50ZihmbXQsIGkpCisJCWlmICh0YmxbaWRdKQorCQkJcHJpbnQgIglbIiBpZCAiXSA9ICIgdGJsW2lkXSAiLCIKKwl9CisJcHJpbnQgIn07IgorfQorCisvXkVuZFRhYmxlLyB7CisJaWYgKGdpZCAhPSAtMSkgeworCQkjIHByaW50IGdyb3VwIHRhYmxlcworCQlpZiAoYXJyYXlfc2l6ZSh0YWJsZSkgIT0gMCkgeworCQkJcHJpbnRfdGFibGUodGFibGUsIHRuYW1lICJbSU5BVF9HUk9VUF9UQUJMRV9TSVpFXSIsCisJCQkJICAgICIweCV4IiwgOCkKKwkJCWd0YWJsZVtnaWQsMF0gPSB0bmFtZQorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUxKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMSwgdG5hbWUgIl8xW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDFdID0gdG5hbWUgIl8xIgorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUyKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMiwgdG5hbWUgIl8yW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDJdID0gdG5hbWUgIl8yIgorCQl9CisJCWlmIChhcnJheV9zaXplKGxwdGFibGUzKSAhPSAwKSB7CisJCQlwcmludF90YWJsZShscHRhYmxlMywgdG5hbWUgIl8zW0lOQVRfR1JPVVBfVEFCTEVfU0laRV0iLAorCQkJCSAgICAiMHgleCIsIDgpCisJCQlndGFibGVbZ2lkLDNdID0gdG5hbWUgIl8zIgorCQl9CisJfSBlbHNlIHsKKwkJIyBwcmludCBwcmltYXJ5L2VzY2FwZWQgdGFibGVzCisJCWlmIChhcnJheV9zaXplKHRhYmxlKSAhPSAwKSB7CisJCQlwcmludF90YWJsZSh0YWJsZSwgdG5hbWUgIltJTkFUX09QQ09ERV9UQUJMRV9TSVpFXSIsCisJCQkJICAgICIweCUwMngiLCAyNTYpCisJCQlldGFibGVbZWlkLDBdID0gdG5hbWUKKwkJCWlmIChhaWQgPj0gMCkKKwkJCQlhdGFibGVbYWlkLDBdID0gdG5hbWUKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMSkgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTEsdG5hbWUgIl8xW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsMV0gPSB0bmFtZSAiXzEiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwxXSA9IHRuYW1lICJfMSIKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMikgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTIsdG5hbWUgIl8yW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsMl0gPSB0bmFtZSAiXzIiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwyXSA9IHRuYW1lICJfMiIKKwkJfQorCQlpZiAoYXJyYXlfc2l6ZShscHRhYmxlMykgIT0gMCkgeworCQkJcHJpbnRfdGFibGUobHB0YWJsZTMsdG5hbWUgIl8zW0lOQVRfT1BDT0RFX1RBQkxFX1NJWkVdIiwKKwkJCQkgICAgIjB4JTAyeCIsIDI1NikKKwkJCWV0YWJsZVtlaWQsM10gPSB0bmFtZSAiXzMiCisJCQlpZiAoYWlkID49IDApCisJCQkJYXRhYmxlW2FpZCwzXSA9IHRuYW1lICJfMyIKKwkJfQorCX0KKwlwcmludCAiIgorCWNsZWFyX3ZhcnMoKQorfQorCitmdW5jdGlvbiBhZGRfZmxhZ3Mob2xkLG5ldykgeworCWlmIChvbGQgJiYgbmV3KQorCQlyZXR1cm4gb2xkICIgfCAiIG5ldworCWVsc2UgaWYgKG9sZCkKKwkJcmV0dXJuIG9sZAorCWVsc2UKKwkJcmV0dXJuIG5ldworfQorCisjIGNvbnZlcnQgb3BlcmFuZHMgdG8gZmxhZ3MuCitmdW5jdGlvbiBjb252ZXJ0X29wZXJhbmRzKG9wbmQsICAgICAgIGksaW1tLG1vZCkKK3sKKwlpbW0gPSBudWxsCisJbW9kID0gbnVsbAorCWZvciAoaSBpbiBvcG5kKSB7CisJCWkgID0gb3BuZFtpXQorCQlpZiAobWF0Y2goaSwgaW1tX2V4cHIpID09IDEpIHsKKwkJCWlmICghaW1tX2ZsYWdbaV0pCisJCQkJc2VtYW50aWNfZXJyb3IoIlVua25vd24gaW1tIG9wbmQ6ICIgaSkKKwkJCWlmIChpbW0pIHsKKwkJCQlpZiAoaSAhPSAiSWIiKQorCQkJCQlzZW1hbnRpY19lcnJvcigiU2Vjb25kIElNTSBlcnJvciIpCisJCQkJaW1tID0gYWRkX2ZsYWdzKGltbSwgIklOQVRfU0NORElNTSIpCisJCQl9IGVsc2UKKwkJCQlpbW0gPSBpbW1fZmxhZ1tpXQorCQl9IGVsc2UgaWYgKG1hdGNoKGksIG1vZHJtX2V4cHIpKQorCQkJbW9kID0gIklOQVRfTU9EUk0iCisJfQorCXJldHVybiBhZGRfZmxhZ3MoaW1tLCBtb2QpCit9CisKKy9eWzAtOWEtZl0rXDovIHsKKwlpZiAoTlIgPT0gMSkKKwkJbmV4dAorCSMgZ2V0IGluZGV4CisJaWR4ID0gIjB4IiBzdWJzdHIoJDEsIDEsIGluZGV4KCQxLCI6IikgLSAxKQorCWlmIChpZHggaW4gdGFibGUpCisJCXNlbWFudGljX2Vycm9yKCJSZWRlZmluZSAiIGlkeCAiIGluICIgdG5hbWUpCisKKwkjIGNoZWNrIGlmIGVzY2FwZWQgb3Bjb2RlCisJaWYgKCJlc2NhcGUiID09ICQyKSB7CisJCWlmICgkMyAhPSAiIyIpCisJCQlzZW1hbnRpY19lcnJvcigiTm8gZXNjYXBlZCBuYW1lIikKKwkJcmVmID0gIiIKKwkJZm9yIChpID0gNDsgaSA8PSBORjsgaSsrKQorCQkJcmVmID0gcmVmICRpCisJCWlmIChyZWYgaW4gZXNjYXBlKQorCQkJc2VtYW50aWNfZXJyb3IoIlJlZGVmaW5lIGVzY2FwZSAoIiByZWYgIikiKQorCQllc2NhcGVbcmVmXSA9IGdlaWQKKwkJZ2VpZCsrCisJCXRhYmxlW2lkeF0gPSAiSU5BVF9NQUtFX0VTQ0FQRSgiIGVzY2FwZVtyZWZdICIpIgorCQluZXh0CisJfQorCisJdmFyaWFudCA9IG51bGwKKwkjIGNvbnZlcnRzCisJaSA9IDIKKwl3aGlsZSAoaSA8PSBORikgeworCQlvcGNvZGUgPSAkKGkrKykKKwkJZGVsZXRlIG9wbmRzCisJCWV4dCA9IG51bGwKKwkJZmxhZ3MgPSBudWxsCisJCW9wbmQgPSBudWxsCisJCSMgcGFyc2Ugb25lIG9wY29kZQorCQlpZiAobWF0Y2goJGksIG9wbmRfZXhwcikpIHsKKwkJCW9wbmQgPSAkaQorCQkJc3BsaXQoJChpKyspLCBvcG5kcywgIiwiKQorCQkJZmxhZ3MgPSBjb252ZXJ0X29wZXJhbmRzKG9wbmRzKQorCQl9CisJCWlmIChtYXRjaCgkaSwgZXh0X2V4cHIpKQorCQkJZXh0ID0gJChpKyspCisJCWlmIChtYXRjaCgkaSwgc2VwX2V4cHIpKQorCQkJaSsrCisJCWVsc2UgaWYgKGkgPCBORikKKwkJCXNlbWFudGljX2Vycm9yKCRpICIgaXMgbm90IGEgc2VwYXJhdG9yIikKKworCQkjIGNoZWNrIGlmIGdyb3VwIG9wY29kZQorCQlpZiAobWF0Y2gob3Bjb2RlLCBncm91cF9leHByKSkgeworCQkJaWYgKCEob3Bjb2RlIGluIGdyb3VwKSkgeworCQkJCWdyb3VwW29wY29kZV0gPSBnZ2lkCisJCQkJZ2dpZCsrCisJCQl9CisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfTUFLRV9HUk9VUCgiIGdyb3VwW29wY29kZV0gIikiKQorCQl9CisJCSMgY2hlY2sgZm9yY2Uob3IgZGVmYXVsdCkgNjRiaXQKKwkJaWYgKG1hdGNoKGV4dCwgZm9yY2U2NF9leHByKSkKKwkJCWZsYWdzID0gYWRkX2ZsYWdzKGZsYWdzLCAiSU5BVF9GT1JDRTY0IikKKworCQkjIGNoZWNrIFJFWCBwcmVmaXgKKwkJaWYgKG1hdGNoKG9wY29kZSwgcmV4X2V4cHIpKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX01BS0VfUFJFRklYKElOQVRfUEZYX1JFWCkiKQorCisJCSMgY2hlY2sgY29wcm9jZXNzb3IgZXNjYXBlIDogVE9ETworCQlpZiAobWF0Y2gob3Bjb2RlLCBmcHVfZXhwcikpCisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfTU9EUk0iKQorCisJCSMgY2hlY2sgVkVYIG9ubHkgY29kZQorCQlpZiAobWF0Y2goZXh0LCB2ZXhvbmx5X2V4cHIpKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX1ZFWE9LIHwgSU5BVF9WRVhPTkxZIikKKworCQkjIGNoZWNrIFZFWCBvbmx5IGNvZGUKKwkJaWYgKG1hdGNoKGV4dCwgdmV4b2tfZXhwcikpCisJCQlmbGFncyA9IGFkZF9mbGFncyhmbGFncywgIklOQVRfVkVYT0siKQorCisJCSMgY2hlY2sgcHJlZml4ZXMKKwkJaWYgKG1hdGNoKGV4dCwgcHJlZml4X2V4cHIpKSB7CisJCQlpZiAoIXByZWZpeF9udW1bb3Bjb2RlXSkKKwkJCQlzZW1hbnRpY19lcnJvcigiVW5rbm93biBwcmVmaXg6ICIgb3Bjb2RlKQorCQkJZmxhZ3MgPSBhZGRfZmxhZ3MoZmxhZ3MsICJJTkFUX01BS0VfUFJFRklYKCIgcHJlZml4X251bVtvcGNvZGVdICIpIikKKwkJfQorCQlpZiAobGVuZ3RoKGZsYWdzKSA9PSAwKQorCQkJY29udGludWUKKwkJIyBjaGVjayBpZiBsYXN0IHByZWZpeAorCQlpZiAobWF0Y2goZXh0LCBscHJlZml4MV9leHByKSkgeworCQkJbHB0YWJsZTFbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlMVtpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSBpZiAobWF0Y2goZXh0LCBscHJlZml4Ml9leHByKSkgeworCQkJbHB0YWJsZTJbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlMltpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSBpZiAobWF0Y2goZXh0LCBscHJlZml4M19leHByKSkgeworCQkJbHB0YWJsZTNbaWR4XSA9IGFkZF9mbGFncyhscHRhYmxlM1tpZHhdLGZsYWdzKQorCQkJdmFyaWFudCA9ICJJTkFUX1ZBUklBTlQiCisJCX0gZWxzZSB7CisJCQl0YWJsZVtpZHhdID0gYWRkX2ZsYWdzKHRhYmxlW2lkeF0sZmxhZ3MpCisJCX0KKwl9CisJaWYgKHZhcmlhbnQpCisJCXRhYmxlW2lkeF0gPSBhZGRfZmxhZ3ModGFibGVbaWR4XSx2YXJpYW50KQorfQorCitFTkQgeworCWlmIChhd2tjaGVja2VkICE9ICIiKQorCQlleGl0IDEKKwkjIHByaW50IGVzY2FwZSBvcGNvZGUgbWFwJ3MgYXJyYXkKKwlwcmludCAiLyogRXNjYXBlIG9wY29kZSBtYXAgYXJyYXkgKi8iCisJcHJpbnQgImNvbnN0IGluc25fYXR0cl90IGNvbnN0ICppbmF0X2VzY2FwZV90YWJsZXNbSU5BVF9FU0NfTUFYICsgMV0iIFwKKwkgICAgICAiW0lOQVRfTFNUUEZYX01BWCArIDFdID0geyIKKwlmb3IgKGkgPSAwOyBpIDwgZ2VpZDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbWF4X2xwcmVmaXg7IGorKykKKwkJCWlmIChldGFibGVbaSxqXSkKKwkJCQlwcmludCAiCVsiaSJdWyJqIl0gPSAiZXRhYmxlW2ksal0iLCIKKwlwcmludCAifTtcbiIKKwkjIHByaW50IGdyb3VwIG9wY29kZSBtYXAncyBhcnJheQorCXByaW50ICIvKiBHcm91cCBvcGNvZGUgbWFwIGFycmF5ICovIgorCXByaW50ICJjb25zdCBpbnNuX2F0dHJfdCBjb25zdCAqaW5hdF9ncm91cF90YWJsZXNbSU5BVF9HUlBfTUFYICsgMV0iXAorCSAgICAgICJbSU5BVF9MU1RQRlhfTUFYICsgMV0gPSB7IgorCWZvciAoaSA9IDA7IGkgPCBnZ2lkOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBtYXhfbHByZWZpeDsgaisrKQorCQkJaWYgKGd0YWJsZVtpLGpdKQorCQkJCXByaW50ICIJWyJpIl1bImoiXSA9ICJndGFibGVbaSxqXSIsIgorCXByaW50ICJ9O1xuIgorCSMgcHJpbnQgQVZYIG9wY29kZSBtYXAncyBhcnJheQorCXByaW50ICIvKiBBVlggb3Bjb2RlIG1hcCBhcnJheSAqLyIKKwlwcmludCAiY29uc3QgaW5zbl9hdHRyX3QgY29uc3QgKmluYXRfYXZ4X3RhYmxlc1tYODZfVkVYX01fTUFYICsgMV0iXAorCSAgICAgICJbSU5BVF9MU1RQRlhfTUFYICsgMV0gPSB7IgorCWZvciAoaSA9IDA7IGkgPCBnYWlkOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBtYXhfbHByZWZpeDsgaisrKQorCQkJaWYgKGF0YWJsZVtpLGpdKQorCQkJCXByaW50ICIJWyJpIl1bImoiXSA9ICJhdGFibGVbaSxqXSIsIgorCXByaW50ICJ9OyIKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIxNGRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5CisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgdW5saWtlbHkoY29uZCkgKGNvbmQpCisKKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGluYXQuYz4KKyNpbmNsdWRlIDxpbnNuLmM+CisKKy8qCisgKiBUZXN0IG9mIGluc3RydWN0aW9uIGFuYWx5c2lzIGluIGdlbmVyYWwgYW5kIGluc25fZ2V0X2xlbmd0aCgpIGluCisgKiBwYXJ0aWN1bGFyLiAgU2VlIGlmIGluc25fZ2V0X2xlbmd0aCgpIGFuZCB0aGUgZGlzYXNzZW1ibGVyIGFncmVlCisgKiBvbiB0aGUgbGVuZ3RoIG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaW4gYW4gZWxmIGRpc2Fzc2VtYmx5LgorICoKKyAqIFVzYWdlOiBvYmpkdW1wIC1kIGEub3V0IHwgYXdrIC1mIGRpc3RpbGwuYXdrIHwgLi90ZXN0X2dldF9sZW4KKyAqLworCitjb25zdCBjaGFyICpwcm9nOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCB4ODZfNjQ7CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogb2JqZHVtcCAtZCBhLm91dCB8IGF3ayAtZiBkaXN0aWxsLmF3ayB8IgorCQkiICVzIFsteXwtbl0gWy12XSBcbiIsIHByb2cpOworCWZwcmludGYoc3RkZXJyLCAiXHQteQk2NGJpdCBtb2RlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LW4JMzJiaXQgbW9kZVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC12CXZlcmJvc2UgbW9kZVxuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgbWFsZm9ybWVkX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxpbmVfbnIpCit7CisJZnByaW50ZihzdGRlcnIsICIlczogbWFsZm9ybWVkIGxpbmUgJWQ6XG4lcyIsIHByb2csIGxpbmVfbnIsIGxpbmUpOworCWV4aXQoMyk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZmllbGQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmluZGVudCwKKwkJICAgICAgIHN0cnVjdCBpbnNuX2ZpZWxkICpmaWVsZCkKK3sKKwlmcHJpbnRmKGZwLCAiJXMuJXMgPSB7XG4iLCBpbmRlbnQsIG5hbWUpOworCWZwcmludGYoZnAsICIlc1x0LnZhbHVlID0gJWQsIGJ5dGVzW10gPSB7JXgsICV4LCAleCwgJXh9LFxuIiwKKwkJaW5kZW50LCBmaWVsZC0+dmFsdWUsIGZpZWxkLT5ieXRlc1swXSwgZmllbGQtPmJ5dGVzWzFdLAorCQlmaWVsZC0+Ynl0ZXNbMl0sIGZpZWxkLT5ieXRlc1szXSk7CisJZnByaW50ZihmcCwgIiVzXHQuZ290ID0gJWQsIC5uYnl0ZXMgPSAlZH0sXG4iLCBpbmRlbnQsCisJCWZpZWxkLT5nb3QsIGZpZWxkLT5uYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2luc24oRklMRSAqZnAsIHN0cnVjdCBpbnNuICppbnNuKQoreworCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHsgXG4iKTsKKwlkdW1wX2ZpZWxkKGZwLCAicHJlZml4ZXMiLCAiXHQiLAkmaW5zbi0+cHJlZml4ZXMpOworCWR1bXBfZmllbGQoZnAsICJyZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnJleF9wcmVmaXgpOworCWR1bXBfZmllbGQoZnAsICJ2ZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnZleF9wcmVmaXgpOworCWR1bXBfZmllbGQoZnAsICJvcGNvZGUiLCAiXHQiLAkJJmluc24tPm9wY29kZSk7CisJZHVtcF9maWVsZChmcCwgIm1vZHJtIiwgIlx0IiwJCSZpbnNuLT5tb2RybSk7CisJZHVtcF9maWVsZChmcCwgInNpYiIsICJcdCIsCQkmaW5zbi0+c2liKTsKKwlkdW1wX2ZpZWxkKGZwLCAiZGlzcGxhY2VtZW50IiwgIlx0IiwJJmluc24tPmRpc3BsYWNlbWVudCk7CisJZHVtcF9maWVsZChmcCwgImltbWVkaWF0ZTEiLCAiXHQiLAkmaW5zbi0+aW1tZWRpYXRlMSk7CisJZHVtcF9maWVsZChmcCwgImltbWVkaWF0ZTIiLCAiXHQiLAkmaW5zbi0+aW1tZWRpYXRlMik7CisJZnByaW50ZihmcCwgIlx0LmF0dHIgPSAleCwgLm9wbmRfYnl0ZXMgPSAlZCwgLmFkZHJfYnl0ZXMgPSAlZCxcbiIsCisJCWluc24tPmF0dHIsIGluc24tPm9wbmRfYnl0ZXMsIGluc24tPmFkZHJfYnl0ZXMpOworCWZwcmludGYoZnAsICJcdC5sZW5ndGggPSAlZCwgLng4Nl82NCA9ICVkLCAua2FkZHIgPSAlcH1cbiIsCisJCWluc24tPmxlbmd0aCwgaW5zbi0+eDg2XzY0LCBpbnNuLT5rYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjOworCXByb2cgPSBhcmd2WzBdOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAieW52IikpICE9IC0xKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICd5JzoKKwkJCXg4Nl82NCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQl4ODZfNjQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJdmVyYm9zZSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgQlVGU0laRSAyNTYKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgbGluZVtCVUZTSVpFXSwgc3ltW0JVRlNJWkVdID0gIjx1bmtub3duPiI7CisJdW5zaWduZWQgY2hhciBpbnNuX2J1ZlsxNl07CisJc3RydWN0IGluc24gaW5zbjsKKwlpbnQgaW5zbnMgPSAwLCBjOworCWludCB3YXJuaW5ncyA9IDA7CisKKwlwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOworCisJd2hpbGUgKGZnZXRzKGxpbmUsIEJVRlNJWkUsIHN0ZGluKSkgeworCQljaGFyIGNvcHlbQlVGU0laRV0sICpzLCAqdGFiMSwgKnRhYjI7CisJCWludCBuYiA9IDA7CisJCXVuc2lnbmVkIGludCBiOworCisJCWlmIChsaW5lWzBdID09ICc8JykgeworCQkJLyogU3ltYm9sIGxpbmUgKi8KKwkJCXN0cmNweShzeW0sIGxpbmUpOworCQkJY29udGludWU7CisJCX0KKworCQlpbnNucysrOworCQltZW1zZXQoaW5zbl9idWYsIDAsIDE2KTsKKwkJc3RyY3B5KGNvcHksIGxpbmUpOworCQl0YWIxID0gc3RyY2hyKGNvcHksICdcdCcpOworCQlpZiAoIXRhYjEpCisJCQltYWxmb3JtZWRfbGluZShsaW5lLCBpbnNucyk7CisJCXMgPSB0YWIxICsgMTsKKwkJcyArPSBzdHJzcG4ocywgIiAiKTsKKwkJdGFiMiA9IHN0cmNocihzLCAnXHQnKTsKKwkJaWYgKCF0YWIyKQorCQkJbWFsZm9ybWVkX2xpbmUobGluZSwgaW5zbnMpOworCQkqdGFiMiA9ICdcMCc7CS8qIENoYXJhY3RlcnMgYmV5b25kIHRhYjIgYXJlbid0IGV4YW1pbmVkICovCisJCXdoaWxlIChzIDwgdGFiMikgeworCQkJaWYgKHNzY2FuZihzLCAiJXgiLCAmYikgPT0gMSkgeworCQkJCWluc25fYnVmW25iKytdID0gKHVuc2lnbmVkIGNoYXIpIGI7CisJCQkJcyArPSAzOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJLyogRGVjb2RlIGFuIGluc3RydWN0aW9uICovCisJCWluc25faW5pdCgmaW5zbiwgaW5zbl9idWYsIHg4Nl82NCk7CisJCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CisJCWlmIChpbnNuLmxlbmd0aCAhPSBuYikgeworCQkJd2FybmluZ3MrKzsKKwkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogJXMgZm91bmQgZGlmZmVyZW5jZSBhdCAlc1xuIiwKKwkJCQlwcm9nLCBzeW0pOworCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiAlcyIsIGxpbmUpOworCQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBvYmpkdW1wIHNheXMgJWQgYnl0ZXMsIGJ1dCAiCisJCQkJImluc25fZ2V0X2xlbmd0aCgpIHNheXMgJWRcbiIsIG5iLAorCQkJCWluc24ubGVuZ3RoKTsKKwkJCWlmICh2ZXJib3NlKQorCQkJCWR1bXBfaW5zbihzdGRlcnIsICZpbnNuKTsKKwkJfQorCX0KKwlpZiAod2FybmluZ3MpCisJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogZGVjb2RlZCBhbmQgY2hlY2tlZCAlZCIKKwkJCSIgaW5zdHJ1Y3Rpb25zIHdpdGggJWQgd2FybmluZ3NcbiIsIGluc25zLCB3YXJuaW5ncyk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlN1Y2NlZWQ6IGRlY29kZWQgYW5kIGNoZWNrZWQgJWQiCisJCQkiIGluc3RydWN0aW9uc1xuIiwgaW5zbnMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDM0Mzk2MTYuLmRmYmY3MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIHZvaWQgeGVuX2NwdWlkKHVuc2lnbmVkIGludCAqYXgsIHVuc2lnbmVkIGludCAqYngsCiAJCSAgICAgIHVuc2lnbmVkIGludCAqY3gsIHVuc2lnbmVkIGludCAqZHgpCiB7CisJdW5zaWduZWQgbWFza2VieCA9IH4wOwogCXVuc2lnbmVkIG1hc2tlY3ggPSB+MDsKIAl1bnNpZ25lZCBtYXNrZWR4ID0gfjA7CiAKQEAgLTE4NSw5ICsxODYsMTYgQEAKIAkgKiBNYXNrIG91dCBpbmNvbnZlbmllbnQgZmVhdHVyZXMsIHRvIHRyeSBhbmQgZGlzYWJsZSBhcyBtYW55CiAJICogdW5zdXBwb3J0ZWQga2VybmVsIHN1YnN5c3RlbXMgYXMgcG9zc2libGUuCiAJICovCi0JaWYgKCpheCA9PSAxKSB7CisJc3dpdGNoICgqYXgpIHsKKwljYXNlIDE6CiAJCW1hc2tlY3ggPSBjcHVpZF9sZWFmMV9lY3hfbWFzazsKIAkJbWFza2VkeCA9IGNwdWlkX2xlYWYxX2VkeF9tYXNrOworCQlicmVhazsKKworCWNhc2UgMHhiOgorCQkvKiBTdXBwcmVzcyBleHRlbmRlZCB0b3BvbG9neSBzdHVmZiAqLworCQltYXNrZWJ4ID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJYXNtKFhFTl9FTVVMQVRFX1BSRUZJWCAiY3B1aWQiCkBAIC0xOTcsNiArMjA1LDcgQEAKIAkJICAiPWQiICgqZHgpCiAJCTogIjAiICgqYXgpLCAiMiIgKCpjeCkpOwogCisJKmJ4ICY9IG1hc2tlYng7CiAJKmN4ICY9IG1hc2tlY3g7CiAJKmR4ICY9IG1hc2tlZHg7CiB9CkBAIC0xMDc1LDYgKzEwODQsOCBAQAogCSAqIFNldCB1cCBzb21lIHBhZ2V0YWJsZSBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcgdG8gc2V0IGFueSBwdGVzLgogCSAqLwogCisJeGVuX2luaXRfbW11X29wcygpOworCiAJLyogUHJldmVudCB1bndhbnRlZCBiaXRzIGZyb20gYmVpbmcgc2V0IGluIFBURXMuICovCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX0dMT0JBTDsKIAlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQpAQCAtMTA5OSw3ICsxMTEwLDYgQEAKIAkgKi8KIAl4ZW5fc2V0dXBfc3RhY2twcm90ZWN0b3IoKTsKIAotCXhlbl9pbml0X21tdV9vcHMoKTsKIAl4ZW5faW5pdF9pcnFfb3BzKCk7CiAJeGVuX2luaXRfY3B1aWRfbWFzaygpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCBhYzBmYTEwLi43MWRhNTExIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50IGZmID0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCWludCByd19mbGFnczsKIAotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDA2OWE2MTAuLmFhMWU5NTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAJQ0ZRX0NGUVFfRkxBR19zbGljZV9uZXcsCS8qIG5vIHJlcXVlc3RzIGRpc3BhdGNoZWQgaW4gc2xpY2UgKi8KIAlDRlFfQ0ZRUV9GTEFHX3N5bmMsCQkvKiBzeW5jaHJvbm91cyBxdWV1ZSAqLwogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGhhcyBkb25lIGEgY29vcCBqdW1wIG9mIHRoZSBxdWV1ZSAqLworCUNGUV9DRlFRX0ZMQUdfY29vcF9wcmVlbXB0LAkvKiBjb29wIHByZWVtcHQgKi8KIH07CiAKICNkZWZpbmUgQ0ZRX0NGUVFfRk5TKG5hbWUpCQkJCQkJXApAQCAtMjIyLDYgKzIyMyw3IEBACiBDRlFfQ0ZRUV9GTlMoc2xpY2VfbmV3KTsKIENGUV9DRlFRX0ZOUyhzeW5jKTsKIENGUV9DRlFRX0ZOUyhjb29wKTsKK0NGUV9DRlFRX0ZOUyhjb29wX3ByZWVtcHQpOwogI3VuZGVmIENGUV9DRlFRX0ZOUwogCiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKQEAgLTk0NSwxMCArOTQ3LDEzIEBACiB7CiAJaWYgKCFjZnFxKSB7CiAJCWNmcXEgPSBjZnFfZ2V0X25leHRfcXVldWUoY2ZxZCk7Ci0JCWlmIChjZnFxKQorCQlpZiAoY2ZxcSAmJiAhY2ZxX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpKQogCQkJY2ZxX2NsZWFyX2NmcXFfY29vcChjZnFxKTsKIAl9CiAKKwlpZiAoY2ZxcSkKKwkJY2ZxX2NsZWFyX2NmcXFfY29vcF9wcmVlbXB0KGNmcXEpOworCiAJX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShjZnFkLCBjZnFxKTsKIAlyZXR1cm4gY2ZxcTsKIH0KQEAgLTIwNTEsNyArMjA1Niw3IEBACiAJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCiAJICovCiAJaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCkBAIC0yMDY2LDggKzIwNzEsMTYgQEAKIAkgKiBpZiB0aGlzIHJlcXVlc3QgaXMgYXMtZ29vZCBhcyBvbmUgd2Ugd291bGQgZXhwZWN0IGZyb20gdGhlCiAJICogY3VycmVudCBjZnFxLCBsZXQgaXQgcHJlZW1wdAogCSAqLwotCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpKQorCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpICYmICghY2ZxX2NmcXFfY29vcChuZXdfY2ZxcSkgfHwKKwkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPT0gMSkpIHsKKwkJLyoKKwkJICogTWFyayBuZXcgcXVldWUgY29vcF9wcmVlbXB0LCBzbyBpdHMgY29vcCBmbGFnIHdpbGwgbm90IGJlCisJCSAqIGNsZWFyZWQgd2hlbiBuZXcgcXVldWUgZ2V0cyBzY2hlZHVsZWQgYXQgdGhlIHZlcnkgZmlyc3QgdGltZQorCQkgKi8KKwkJY2ZxX21hcmtfY2ZxcV9jb29wX3ByZWVtcHQobmV3X2NmcXEpOworCQljZnFfbWFya19jZnFxX2Nvb3AobmV3X2NmcXEpOwogCQlyZXR1cm4gdHJ1ZTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvS2NvbmZpZyBiL2NyeXB0by9hc3luY190eC9LY29uZmlnCmluZGV4IGU1YWViMmIuLmUyOGUyNzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9LY29uZmlnCisrKyBiL2NyeXB0by9hc3luY190eC9LY29uZmlnCkBAIC0yMywzICsyMyw4IEBACiAJc2VsZWN0IEFTWU5DX0NPUkUKIAlzZWxlY3QgQVNZTkNfUFEKIAorY29uZmlnIEFTWU5DX1RYX0RJU0FCTEVfUFFfVkFMX0RNQQorCWJvb2wKKworY29uZmlnIEFTWU5DX1RYX0RJU0FCTEVfWE9SX1ZBTF9ETUEKKwlib29sCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCmluZGV4IGI4OGRiNmQuLmVjODdmNTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCiAvKioKLSAqIHNjcmliYmxlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQorICogcHFfc2NyaWJibGVfcGFnZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgb3IgUSBidWZmZXIgZm9yCisgKiBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKICAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzY3JpYmJsZTsKLQotc3RhdGljIGJvb2wgaXNfcmFpZDZfemVyb19ibG9jayhzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlyZXR1cm4gcCA9PSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Ci19CitzdGF0aWMgc3RydWN0IHBhZ2UgKnBxX3NjcmliYmxlX3BhZ2U7CiAKIC8qIHRoZSBzdHJ1Y3QgcGFnZSAqYmxvY2tzW10gcGFyYW1ldGVyIHBhc3NlZCB0byBhc3luY19nZW5fc3luZHJvbWUoKQogICogYW5kIGFzeW5jX3N5bmRyb21lX3ZhbCgpIGNvbnRhaW5zIHRoZSAnUCcgZGVzdGluYXRpb24gYWRkcmVzcyBhdApAQCAtODMsNyArNzksNyBAQAogCSAqIHNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5CiAJICovCiAJZm9yIChpID0gMCwgaWR4ID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKQorCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZG1hX3NyY1tpZHhdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBibG9ja3NbaV0sIG9mZnNldCwgbGVuLAogCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjAsOSArMTU2LDkgQEAKIAkJc3JjcyA9ICh2b2lkICoqKSBibG9ja3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkgewogCQkJQlVHX09OKGkgPiBkaXNrcyAtIDMpOyAvKiBQIG9yIFEgY2FuJ3QgYmUgemVybyAqLwotCQkJc3Jjc1tpXSA9IGJsb2Nrc1tpXTsKKwkJCXNyY3NbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOwogCQl9IGVsc2UKIAkJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKSArIG9mZnNldDsKIAl9CkBAIC0xODYsMTAgKzE4MiwxNCBAQAogICogYmxvY2tzW2Rpc2tzLTFdIHRvIE5VTEwuICBXaGVuIFAgb3IgUSBpcyBvbWl0dGVkICdsZW4nIG11c3QgYmUgPD0KICAqIFBBR0VfU0laRSBhcyBhIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhpcyBzaXplIGlzIHVzZWQgaW4gdGhlCiAgKiBzeW5jaHJvbm91cyBwYXRoLiAgJ2Rpc2tzJyBhbHdheXMgYWNjb3VudHMgZm9yIGJvdGggZGVzdGluYXRpb24KLSAqIGJ1ZmZlcnMuCisgKiBidWZmZXJzLiAgSWYgYW55IHNvdXJjZSBidWZmZXJzIChibG9ja3NbaV0gd2hlcmUgaSA8IGRpc2tzIC0gMikgYXJlCisgKiBzZXQgdG8gTlVMTCB0aG9zZSBidWZmZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmFpZDZfemVyb19wYWdlCisgKiBpbiB0aGUgc3luY2hyb25vdXMgcGF0aCBhbmQgb21pdHRlZCBpbiB0aGUgaGFyZHdhcmUtYXN5bmNocm9ub3VzCisgKiBwYXRoLgogICoKICAqICdibG9ja3MnIG5vdGU6IGlmIHN1Ym1pdC0+c2NyaWJibGUgaXMgTlVMTCB0aGVuIHRoZSBjb250ZW50cyBvZgotICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJyaWRkZW4KKyAqICdibG9ja3MnIG1heSBiZSBvdmVyd3JpdHRlbiB0byBwZXJmb3JtIGFkZHJlc3MgY29udmVyc2lvbnMKKyAqIChkbWFfbWFwX3BhZ2UoKSBvciBwYWdlX2FkZHJlc3MoKSkuCiAgKi8KIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBhc3luY19nZW5fc3luZHJvbWUoc3RydWN0IHBhZ2UgKipibG9ja3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBkaXNrcywKQEAgLTIyNywxMSArMjI3LDExIEBACiAJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCiAJaWYgKCFQKGJsb2NrcywgZGlza3MpKSB7Ci0JCVAoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUChibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlpZiAoIVEoYmxvY2tzLCBkaXNrcykpIHsKLQkJUShibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlRKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWRvX3N5bmNfZ2VuX3N5bmRyb21lKGJsb2Nrcywgb2Zmc2V0LCBkaXNrcywgbGVuLCBzdWJtaXQpOwpAQCAtMjQwLDYgKzI0MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXN5bmNfZ2VuX3N5bmRyb21lKTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2NoYW4gKgorcHFfdmFsX2NoYW4oc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCwgc3RydWN0IHBhZ2UgKipibG9ja3MsIGludCBkaXNrcywgc2l6ZV90IGxlbikKK3sKKwkjaWZkZWYgQ09ORklHX0FTWU5DX1RYX0RJU0FCTEVfUFFfVkFMX0RNQQorCXJldHVybiBOVUxMOworCSNlbmRpZgorCXJldHVybiBhc3luY190eF9maW5kX2NoYW5uZWwoc3VibWl0LCBETUFfUFFfVkFMLCBOVUxMLCAwLCAgYmxvY2tzLAorCQkJCSAgICAgZGlza3MsIGxlbik7Cit9CisKIC8qKgogICogYXN5bmNfc3luZHJvbWVfdmFsIC0gYXN5bmNocm9ub3VzbHkgdmFsaWRhdGUgYSByYWlkNiBzeW5kcm9tZQogICogQGJsb2Nrczogc291cmNlIGJsb2NrcyBmcm9tIGlkeCAwLi5kaXNrcy0zLCBQIEAgZGlza3MtMiBhbmQgUSBAIGRpc2tzLTEKQEAgLTI2MCwxMyArMjcwLDEzIEBACiAJCSAgIHNpemVfdCBsZW4sIGVudW0gc3VtX2NoZWNrX2ZsYWdzICpwcXJlcywgc3RydWN0IHBhZ2UgKnNwYXJlLAogCQkgICBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewotCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGFzeW5jX3R4X2ZpbmRfY2hhbm5lbChzdWJtaXQsIERNQV9QUV9WQUwsCi0JCQkJCQkgICAgICBOVUxMLCAwLCAgYmxvY2tzLCBkaXNrcywKLQkJCQkJCSAgICAgIGxlbik7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gcHFfdmFsX2NoYW4oc3VibWl0LCBibG9ja3MsIGRpc2tzLCBsZW4pOwogCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UgPSBjaGFuID8gY2hhbi0+ZGV2aWNlIDogTlVMTDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCXVuc2lnbmVkIGNoYXIgY29lZnNbZGlza3MtMl07CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3MgPSBzdWJtaXQtPmNiX2ZuID8gRE1BX1BSRVBfSU5URVJSVVBUIDogMDsKIAlkbWFfYWRkcl90ICpkbWFfc3JjID0gTlVMTDsKKwlpbnQgc3JjX2NudCA9IDA7CiAKIAlCVUdfT04oZGlza3MgPCA0KTsKIApAQCAtMjg1LDIyICsyOTUsMzIgQEAKIAkJCSBfX2Z1bmNfXywgZGlza3MsIGxlbik7CiAJCWlmICghUChibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1A7CisJCWVsc2UKKwkJCXBxWzBdID0gZG1hX21hcF9wYWdlKGRldiwgUChibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAkJaWYgKCFRKGJsb2NrcywgZGlza3MpKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUTsKKwkJZWxzZQorCQkJcHFbMV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBRKGJsb2NrcywgZGlza3MpLAorCQkJCQkgICAgIG9mZnNldCwgbGVuLAorCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCiAJCWlmIChzdWJtaXQtPmZsYWdzICYgQVNZTkNfVFhfRkVOQ0UpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfRkVOQ0U7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKQogCQkJaWYgKGxpa2VseShibG9ja3NbaV0pKSB7Ci0JCQkJQlVHX09OKGlzX3JhaWQ2X3plcm9fYmxvY2soYmxvY2tzW2ldKSk7Ci0JCQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKLQkJCQkJCQkgIG9mZnNldCwgbGVuLAotCQkJCQkJCSAgRE1BX1RPX0RFVklDRSk7CisJCQkJZG1hX3NyY1tzcmNfY250XSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKKwkJCQkJCQkJb2Zmc2V0LCBsZW4sCisJCQkJCQkJCURNQV9UT19ERVZJQ0UpOworCQkJCWNvZWZzW3NyY19jbnRdID0gcmFpZDZfZ2ZleHBbaV07CisJCQkJc3JjX2NudCsrOwogCQkJfQogCiAJCWZvciAoOzspIHsKIAkJCXR4ID0gZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfcHFfdmFsKGNoYW4sIHBxLCBkbWFfc3JjLAotCQkJCQkJCSAgICBkaXNrcyAtIDIsCi0JCQkJCQkJICAgIHJhaWQ2X2dmZXhwLAorCQkJCQkJCSAgICBzcmNfY250LAorCQkJCQkJCSAgICBjb2VmcywKIAkJCQkJCQkgICAgbGVuLCBwcXJlcywKIAkJCQkJCQkgICAgZG1hX2ZsYWdzKTsKIAkJCWlmIChsaWtlbHkodHgpKQpAQCAtMzczLDkgKzM5Myw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFzeW5jX3BxX2luaXQodm9pZCkKIHsKLQlzY3JpYmJsZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJcHFfc2NyaWJibGVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAKLQlpZiAoc2NyaWJibGUpCisJaWYgKHBxX3NjcmliYmxlX3BhZ2UpCiAJCXJldHVybiAwOwogCiAJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIHNwYXJlIHBhZ2VcbiIsIF9fZnVuY19fKTsKQEAgLTM4NSw3ICs0MDUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXN5bmNfcHFfZXhpdCh2b2lkKQogewotCXB1dF9wYWdlKHNjcmliYmxlKTsKKwlwdXRfcGFnZShwcV9zY3JpYmJsZV9wYWdlKTsKIH0KIAogbW9kdWxlX2luaXQoYXN5bmNfcHFfaW5pdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCmluZGV4IDZkNzNkZGUuLjk0M2YyYWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCkBAIC0xMzEsOCArMTMxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzQoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNChpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmEsICpiOwpAQCAtMTQzLDggKzE0Myw4IEBACiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKIAotCXAgPSBibG9ja3NbNC0yXTsKLQlxID0gYmxvY2tzWzQtMV07CisJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKKwlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCiAJYSA9IGJsb2Nrc1tmYWlsYV07CiAJYiA9IGJsb2Nrc1tmYWlsYl07CkBAIC0xNzAsOCArMTcwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzUoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNShpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmcsICpkcCwgKmRxOwpAQCAtMTgxLDIxICsxODEsMjIgQEAKIAlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2JfZm4gPSBzdWJtaXQtPmNiX2ZuOwogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKGdvb2QpOwotCWludCBpOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCisJCQljb250aW51ZTsKIAkJaWYgKGkgPT0gZmFpbGEgfHwgaSA9PSBmYWlsYikKIAkJCWNvbnRpbnVlOwotCQllbHNlIHsKLQkJCWdvb2QgPSBpOwotCQkJYnJlYWs7Ci0JCX0KKwkJZ29vZCA9IGk7CisJCWdvb2Rfc3JjcysrOwogCX0KLQlCVUdfT04oaSA+PSAzKTsKKwlCVUdfT04oZ29vZF9zcmNzID4gMSk7CiAKLQlwID0gYmxvY2tzWzUtMl07Ci0JcSA9IGJsb2Nrc1s1LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAlnID0gYmxvY2tzW2dvb2RdOwogCiAJLyogQ29tcHV0ZSBzeW5kcm9tZSB3aXRoIHplcm8gZm9yIHRoZSBtaXNzaW5nIGRhdGEgcGFnZXMKQEAgLTI2MywxMCArMjY0LDEwIEBACiAJICogZGVsdGEgcCBhbmQgZGVsdGEgcQogCSAqLwogCWRwID0gYmxvY2tzW2ZhaWxhXTsKLQlibG9ja3NbZmFpbGFdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxhXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTJdID0gZHA7CiAJZHEgPSBibG9ja3NbZmFpbGJdOwotCWJsb2Nrc1tmYWlsYl0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGJdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAogCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLCBzY3JpYmJsZSk7CkBAIC0zMjMsNiArMzI0LDggQEAKIGFzeW5jX3JhaWQ2XzJkYXRhX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKIAkJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogeworCWludCBub25femVyb19zcmNzLCBpOworCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKIAkJc3dhcChmYWlsYSwgZmFpbGIpOwpAQCAtMzM0LDExICszMzcsMTMgQEAKIAkgKi8KIAlpZiAoIXN1Ym1pdC0+c2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCQllbHNlCisJCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOwogCiAJCXJhaWQ2XzJkYXRhX3JlY292KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBwdHJzKTsKIApAQCAtMzQ3LDE5ICszNTIsMzAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3dpdGNoIChkaXNrcykgewotCWNhc2UgNDoKKwlub25femVyb19zcmNzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMiAmJiBub25femVyb19zcmNzIDwgNDsgaSsrKQorCQlpZiAoYmxvY2tzW2ldKQorCQkJbm9uX3plcm9fc3JjcysrOworCXN3aXRjaCAobm9uX3plcm9fc3JjcykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgMiBzb3VyY2VzIC0gdGhlIGZhaWxlZCBkZXZpY2VzLiAqLworCQlCVUcoKTsKKworCWNhc2UgMjoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgemVybyBzb3VyY2UgcHEKIAkJICogb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMgY2FzZSksIHNvCi0JCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA0IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA0IGRpc2sgYXJyYXkgd2l0aAorCQkgKiBib3RoIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzQoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwotCWNhc2UgNToKKwkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNChkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCWNhc2UgMzoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgc2luZ2xlCiAJCSAqIHNvdXJjZSBwcSBvcGVyYXRpb24gKGluIGNvbnRyYXN0IHRvIHRoZSBzeW5jaHJvbm91cwotCQkgKiBjYXNlKSwgc28gZXhwbGljaXRseSBoYW5kbGUgdGhlIDUgZGlzayBzcGVjaWFsIGNhc2UKKwkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA1IGRpc2sKKwkJICogYXJyYXkgd2l0aCAyIG9mIDMgZGF0YSBkaXNrcyBtaXNzaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNShieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CisJCXJldHVybiBfXzJkYXRhX3JlY292XzUoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gX18yZGF0YV9yZWNvdl9uKGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJfQpAQCAtMzg1LDYgKzQwMSw3IEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAJc3RydWN0IHBhZ2UgKnNyY3NbMl07CiAKIAlwcl9kZWJ1ZygiJXM6IGRpc2tzOiAlZCBsZW46ICV6dVxuIiwgX19mdW5jX18sIGRpc2tzLCBieXRlcyk7CkBAIC0zOTQsMTEgKzQxMSwxMyBAQAogCSAqLwogCWlmICghc2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl9kYXRhcF9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBwdHJzKTsKIApAQCAtNDA3LDYgKzQyNiwyMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlnb29kX3NyY3MgPSAwOworCWdvb2QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKSB7CisJCWlmIChpID09IGZhaWxhKQorCQkJY29udGludWU7CisJCWlmIChibG9ja3NbaV0pIHsKKwkJCWdvb2QgPSBpOworCQkJZ29vZF9zcmNzKys7CisJCQlpZiAoZ29vZF9zcmNzID4gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlCVUdfT04oZ29vZF9zcmNzID09IDApOworCiAJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKIAlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCkBAIC00MTQsMTQgKzQ0NywxMyBAQAogCSAqIFVzZSB0aGUgZGVhZCBkYXRhIHBhZ2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGRlbHRhIHEKIAkgKi8KIAlkcSA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0xXSA9IGRxOwogCi0JLyogaW4gdGhlIDQgZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQotCSAqIG11bHRpcGxpY2F0aW9uCisJLyogaW4gdGhlIDQtZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQorCSAqIG11bHRpcGxpY2F0aW9uIHdpdGggdGhlIG9uZSBnb29kIGRhdGEgYmxvY2suCiAJICovCi0JaWYgKGRpc2tzID09IDQpIHsKLQkJaW50IGdvb2QgPSBmYWlsYSA9PSAwID8gMSA6IDA7CisJaWYgKGdvb2Rfc3JjcyA9PSAxKSB7CiAJCXN0cnVjdCBwYWdlICpnID0gYmxvY2tzW2dvb2RdOwogCiAJCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IGI0NTlhOTAuLjA3OWFlOGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTQ0LDIwICs0NCwyMyBAQAogCXZvaWQgKmNiX3BhcmFtX29yaWcgPSBzdWJtaXQtPmNiX3BhcmFtOwogCWVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3Nfb3JpZyA9IHN1Ym1pdC0+ZmxhZ3M7CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3M7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfZGVzdDsKIAogCS8qIG1hcCB0aGUgZGVzdCBiaWRyZWN0aW9uYWwgaW4gY2FzZSBpdCBpcyByZS11c2VkIGFzIGEgc291cmNlICovCiAJZG1hX2Rlc3QgPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIGRlc3QsIG9mZnNldCwgbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewogCQkvKiBvbmx5IG1hcCB0aGUgZGVzdCBvbmNlICovCisJCWlmICghc3JjX2xpc3RbaV0pCisJCQljb250aW51ZTsKIAkJaWYgKHVubGlrZWx5KHNyY19saXN0W2ldID09IGRlc3QpKSB7Ci0JCQlkbWFfc3JjW2ldID0gZG1hX2Rlc3Q7CisJCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX2Rlc3Q7CiAJCQljb250aW51ZTsKIAkJfQotCQlkbWFfc3JjW2ldID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAotCQkJCQkgIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV9zcmNbeG9yX3NyY19jbnQrK10gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIHNyY19saXN0W2ldLCBvZmZzZXQsCisJCQkJCQkgICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCX0KKwlzcmNfY250ID0geG9yX3NyY19jbnQ7CiAKIAl3aGlsZSAoc3JjX2NudCkgewogCQlzdWJtaXQtPmZsYWdzID0gZmxhZ3Nfb3JpZzsKQEAgLTEyMyw3ICsxMjYsNyBAQAogCSAgICBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlpbnQgaTsKLQlpbnQgeG9yX3NyY19jbnQ7CisJaW50IHhvcl9zcmNfY250ID0gMDsKIAlpbnQgc3JjX29mZiA9IDA7CiAJdm9pZCAqZGVzdF9idWY7CiAJdm9pZCAqKnNyY3M7CkBAIC0xMzUsOCArMTM4LDkgQEAKIAogCS8qIGNvbnZlcnQgdG8gYnVmZmVyIHBvaW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKLQkJc3Jjc1tpXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7Ci0KKwkJaWYgKHNyY19saXN0W2ldKQorCQkJc3Jjc1t4b3Jfc3JjX2NudCsrXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCS8qIHNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJZGVzdF9idWYgPSBwYWdlX2FkZHJlc3MoZGVzdCkgKyBvZmZzZXQ7CiAKQEAgLTIzMCw2ICsyMzQsMTcgQEAKIAkJbWVtY21wKGEsIGEgKyA0LCBsZW4gLSA0KSA9PSAwKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2NoYW4gKgoreG9yX3ZhbF9jaGFuKHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQsIHN0cnVjdCBwYWdlICpkZXN0LAorCQkgc3RydWN0IHBhZ2UgKipzcmNfbGlzdCwgaW50IHNyY19jbnQsIHNpemVfdCBsZW4pCit7CisJI2lmZGVmIENPTkZJR19BU1lOQ19UWF9ESVNBQkxFX1hPUl9WQUxfRE1BCisJcmV0dXJuIE5VTEw7CisJI2VuZGlmCisJcmV0dXJuIGFzeW5jX3R4X2ZpbmRfY2hhbm5lbChzdWJtaXQsIERNQV9YT1JfVkFMLCAmZGVzdCwgMSwgc3JjX2xpc3QsCisJCQkJICAgICBzcmNfY250LCBsZW4pOworfQorCiAvKioKICAqIGFzeW5jX3hvcl92YWwgLSBhdHRlbXB0IGEgeG9yIHBhcml0eSBjaGVjayB3aXRoIGEgZG1hIGVuZ2luZS4KICAqIEBkZXN0OiBkZXN0aW5hdGlvbiBwYWdlIHVzZWQgaWYgdGhlIHhvciBpcyBwZXJmb3JtZWQgc3luY2hyb25vdXNseQpAQCAtMjUxLDkgKzI2Niw3IEBACiAJICAgICAgaW50IHNyY19jbnQsIHNpemVfdCBsZW4sIGVudW0gc3VtX2NoZWNrX2ZsYWdzICpyZXN1bHQsCiAJICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKLQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBhc3luY190eF9maW5kX2NoYW5uZWwoc3VibWl0LCBETUFfWE9SX1ZBTCwKLQkJCQkJCSAgICAgICZkZXN0LCAxLCBzcmNfbGlzdCwKLQkJCQkJCSAgICAgIHNyY19jbnQsIGxlbik7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0geG9yX3ZhbF9jaGFuKHN1Ym1pdCwgZGVzdCwgc3JjX2xpc3QsIHNyY19jbnQsIGxlbik7CiAJc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSA9IGNoYW4gPyBjaGFuLT5kZXZpY2UgOiBOVUxMOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCWRtYV9hZGRyX3QgKmRtYV9zcmMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2djbS5jIGIvY3J5cHRvL2djbS5jCmluZGV4IDVmYzMyOTIuLmM2NTQ3MTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9nY20uYworKysgYi9jcnlwdG8vZ2NtLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHN0cnVjdCBjcnlwdG9fZ2NtX2doYXNoX2N0eCB7CiAJdW5zaWduZWQgaW50IGNyeXB0bGVuOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjOwotCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGU7CisJdm9pZCAoKmNvbXBsZXRlKShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpOwogfTsKIAogc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4IHsKQEAgLTI2NywyMyArMjY3LDI2IEBACiAJcmV0dXJuIGNyeXB0b19haGFzaF9maW5hbChhaHJlcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdjbV9oYXNoX2ZpbmFsX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAotCQkJCWludCBlcnIpCitzdGF0aWMgdm9pZCBfX2djbV9oYXNoX2ZpbmFsX2RvbmUoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQogewotCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CiAJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwogCiAJaWYgKCFlcnIpCiAJCWNyeXB0b194b3IocGN0eC0+YXV0aF90YWcsIHBjdHgtPmlhdXRoX3RhZywgMTYpOwogCi0JZ2N0eC0+Y29tcGxldGUoYXJlcSwgZXJyKTsKKwlnY3R4LT5jb21wbGV0ZShyZXEsIGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGdjbV9oYXNoX2xlbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKLQkJCSAgICAgIGludCBlcnIpCitzdGF0aWMgdm9pZCBnY21faGFzaF9maW5hbF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKIHsKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCisJX19nY21faGFzaF9maW5hbF9kb25lKHJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgX19nY21faGFzaF9sZW5fZG9uZShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CiAJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKIAogCWlmICghZXJyKSB7CkBAIC0yOTIsMTMgKzI5NSwxOCBAQAogCQkJcmV0dXJuOwogCX0KIAotCWdjbV9oYXNoX2ZpbmFsX2RvbmUoYXJlcSwgZXJyKTsKKwlfX2djbV9oYXNoX2ZpbmFsX2RvbmUocmVxLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBnY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCi0JCQkJICAgICAgIGludCBlcnIpCitzdGF0aWMgdm9pZCBnY21faGFzaF9sZW5fZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCiB7CiAJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKworCV9fZ2NtX2hhc2hfbGVuX2RvbmUocmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBfX2djbV9oYXNoX2NyeXB0X3JlbWFpbl9kb25lKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwgaW50IGVycikKK3sKIAlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOwogCiAJaWYgKCFlcnIpIHsKQEAgLTMwNywxMyArMzE1LDE5IEBACiAJCQlyZXR1cm47CiAJfQogCi0JZ2NtX2hhc2hfbGVuX2RvbmUoYXJlcSwgZXJyKTsKKwlfX2djbV9oYXNoX2xlbl9kb25lKHJlcSwgZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgZ2NtX2hhc2hfY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCi0JCQkJaW50IGVycikKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2NyeXB0X3JlbWFpbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQkgICAgICAgaW50IGVycikKIHsKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCisJX19nY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZShyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZ2NtX2hhc2hfY3J5cHRfZG9uZShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CiAJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwogCXVuc2lnbmVkIGludCByZW1haW47CkBAIC0zMjcsMTMgKzM0MSwxOCBAQAogCQkJcmV0dXJuOwogCX0KIAotCWdjbV9oYXNoX2NyeXB0X3JlbWFpbl9kb25lKGFyZXEsIGVycik7CisJX19nY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZShyZXEsIGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGdjbV9oYXNoX2Fzc29jX3JlbWFpbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKLQkJCQkJICAgaW50IGVycikKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2NyeXB0X2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLCBpbnQgZXJyKQogewogCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CisKKwlfX2djbV9oYXNoX2NyeXB0X2RvbmUocmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBfX2djbV9oYXNoX2Fzc29jX3JlbWFpbl9kb25lKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwgaW50IGVycikKK3sKIAlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fZ2NtX2doYXNoX2N0eCAqZ2N0eCA9ICZwY3R4LT5naGFzaF9jdHg7CiAJY3J5cHRvX2NvbXBsZXRpb25fdCBjb21wbGV0ZTsKQEAgLTM1MCwxNSArMzY5LDIxIEBACiAJfQogCiAJaWYgKHJlbWFpbikKLQkJZ2NtX2hhc2hfY3J5cHRfZG9uZShhcmVxLCBlcnIpOworCQlfX2djbV9oYXNoX2NyeXB0X2RvbmUocmVxLCBlcnIpOwogCWVsc2UKLQkJZ2NtX2hhc2hfY3J5cHRfcmVtYWluX2RvbmUoYXJlcSwgZXJyKTsKKwkJX19nY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZShyZXEsIGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGdjbV9oYXNoX2Fzc29jX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAotCQkJCWludCBlcnIpCitzdGF0aWMgdm9pZCBnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCisJCQkJICAgICAgIGludCBlcnIpCiB7CiAJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKworCV9fZ2NtX2hhc2hfYXNzb2NfcmVtYWluX2RvbmUocmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBfX2djbV9oYXNoX2Fzc29jX2RvbmUoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQorewogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CiAJdW5zaWduZWQgaW50IHJlbWFpbjsKIApAQCAtMzcxLDEzICszOTYsMTggQEAKIAkJCXJldHVybjsKIAl9CiAKLQlnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZShhcmVxLCBlcnIpOworCV9fZ2NtX2hhc2hfYXNzb2NfcmVtYWluX2RvbmUocmVxLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBnY21faGFzaF9pbml0X2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAotCQkJICAgICAgIGludCBlcnIpCitzdGF0aWMgdm9pZCBnY21faGFzaF9hc3NvY19kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKIHsKIAlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCisJX19nY21faGFzaF9hc3NvY19kb25lKHJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgX19nY21faGFzaF9pbml0X2RvbmUoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQorewogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CiAJY3J5cHRvX2NvbXBsZXRpb25fdCBjb21wbGV0ZTsKIAl1bnNpZ25lZCBpbnQgcmVtYWluID0gMDsKQEAgLTM5Myw5ICs0MjMsMTYgQEAKIAl9CiAKIAlpZiAocmVtYWluKQotCQlnY21faGFzaF9hc3NvY19kb25lKGFyZXEsIGVycik7CisJCV9fZ2NtX2hhc2hfYXNzb2NfZG9uZShyZXEsIGVycik7CiAJZWxzZQotCQlnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZShhcmVxLCBlcnIpOworCQlfX2djbV9oYXNoX2Fzc29jX3JlbWFpbl9kb25lKHJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgZ2NtX2hhc2hfaW5pdF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCisJX19nY21faGFzaF9pbml0X2RvbmUocmVxLCBlcnIpOwogfQogCiBzdGF0aWMgaW50IGdjbV9oYXNoKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKQEAgLTQ1NywxMCArNDk0LDggQEAKIAkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOwogfQogCi1zdGF0aWMgdm9pZCBnY21fZW5jX2hhc2hfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCi0JCQkJICAgICBpbnQgZXJyKQorc3RhdGljIHZvaWQgZ2NtX2VuY19oYXNoX2RvbmUoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQogewotCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CiAJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKIAogCWlmICghZXJyKQpAQCAtNDY5LDggKzUwNCw3IEBACiAJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKHJlcSwgZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgZ2NtX2VuY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCi0JCQkJICAgICBpbnQgZXJyKQorc3RhdGljIHZvaWQgZ2NtX2VuY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCiB7CiAJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKIAlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOwpAQCAtNDc5LDkgKzUxMywxMyBAQAogCQllcnIgPSBnY21faGFzaChyZXEsIHBjdHgpOwogCQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUyB8fCBlcnIgPT0gLUVCVVNZKQogCQkJcmV0dXJuOworCQllbHNlIGlmICghZXJyKSB7CisJCQljcnlwdG9feG9yKHBjdHgtPmF1dGhfdGFnLCBwY3R4LT5pYXV0aF90YWcsIDE2KTsKKwkJCWdjbV9lbmNfY29weV9oYXNoKHJlcSwgcGN0eCk7CisJCX0KIAl9CiAKLQlnY21fZW5jX2hhc2hfZG9uZShhcmVxLCBlcnIpOworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEsIGVycik7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRvX2djbV9lbmNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKQEAgLTUzOCw5ICs1NzYsOCBAQAogCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEsIGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGdjbV9kZWNfaGFzaF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKK3N0YXRpYyB2b2lkIGdjbV9kZWNfaGFzaF9kb25lKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwgaW50IGVycikKIHsKLQlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOwogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CiAJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJyZXEgPSAmcGN0eC0+dS5hYnJlcTsKIAlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwpAQCAtNTUyLDkgKzU4OSwxMSBAQAogCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KGFicmVxKTsKIAkJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgfHwgZXJyID09IC1FQlVTWSkKIAkJCXJldHVybjsKKwkJZWxzZSBpZiAoIWVycikKKwkJCWVyciA9IGNyeXB0b19nY21fdmVyaWZ5KHJlcSwgcGN0eCk7CiAJfQogCi0JZ2NtX2RlY3J5cHRfZG9uZShhcmVxLCBlcnIpOworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEsIGVycik7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRvX2djbV9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggMGVkNDJkOC4uOTNkMmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBBQ1BJIDQuMCBkZWZpbmVzIHByb2Nlc3NvciBBZ2dyZWdhdG9yLCB3aGljaCBlbmFibGVzIE9TIHRvIHBlcmZvcm0KLQkgIHNwZWNmaWMgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgdGhhdCBhcHBsaWVzIHRvIGFsbAorCSAgc3BlY2lmaWMgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgdGhhdCBhcHBsaWVzIHRvIGFsbAogCSAgcHJvY2Vzc29ycyBpbiB0aGUgcGxhdGZvcm0uIEN1cnJlbnRseSBvbmx5IGxvZ2ljYWwgcHJvY2Vzc29yIGlkbGluZwogCSAgaXMgZGVmaW5lZCwgd2hpY2ggaXMgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiBUaGlzIGRyaXZlcgotCSAgc3VwcG9ydCB0aGUgbmV3IGRldmljZS4KKwkgIHN1cHBvcnRzIHRoZSBuZXcgZGV2aWNlLgogCiBjb25maWcgQUNQSV9USEVSTUFMCiAJdHJpc3RhdGUgIlRoZXJtYWwgWm9uZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOThiOTY5MC4uYjZlZDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKIAkJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsCiAJCQkJCQkgICh1MzIpIGFjLT5zdGF0ZSk7CisJCWFjcGlfbm90aWZpZXJfY2FsbF9jaGFpbihkZXZpY2UsIGV2ZW50LCAodTMyKSBhYy0+c3RhdGUpOwogI2lmZGVmIENPTkZJR19BQ1BJX1NZU0ZTX1BPV0VSCiAJCWtvYmplY3RfdWV2ZW50KCZhYy0+Y2hhcmdlci5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCmluZGV4IDhlNjc5ZWYuLmE0NDcxZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKQEAgLTEwMyw5ICsxMDMsOSBAQAogCiAjZGVmaW5lIEFDUElfTUFYX1JFRkVSRU5DRV9DT1VOVCAgICAgICAgMHgxMDAwCiAKLS8qIFNpemUgb2YgY2FjaGVkIG1lbW9yeSBtYXBwaW5nIGZvciBzeXN0ZW0gbWVtb3J5IG9wZXJhdGlvbiByZWdpb24gKi8KKy8qIERlZmF1bHQgcGFnZSBzaXplIGZvciB1c2UgaW4gbWFwcGluZyBtZW1vcnkgZm9yIG9wZXJhdGlvbiByZWdpb25zICovCiAKLSNkZWZpbmUgQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFICA0MDk2CisjZGVmaW5lIEFDUElfREVGQVVMVF9QQUdFX1NJWkUgICAgICAgICAgNDA5NgkvKiBNdXN0IGJlIHBvd2VyIG9mIDIgKi8KIAogLyogb3duZXJfaWQgdHJhY2tpbmcuIDggZW50cmllcyBhbGxvd3MgZm9yIDI1NSBvd25lcl9pZHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IGNkODBkMWQuLjU3YmRhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTIwMyw4ICsyMDMsOSBAQAogCXt7Il9CQ1QiLCAxLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKIAl7eyJfQkROIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAJe3siX0JGUyIsIDEsIDB9fSwKLQl7eyJfQklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfX0sIC8qIEZpeGVkLWxlbmd0aCAoOSBJbnQpLCg0IFN0cikgKi8KLQkJCSAge3t7QUNQSV9QVFlQRTFfRklYRUQsIEFDUElfUlRZUEVfSU5URUdFUiwgOSwgQUNQSV9SVFlQRV9TVFJJTkd9LCA0LDB9fSwKKwl7eyJfQklGIiwgMCwgQUNQSV9SVFlQRV9QQUNLQUdFfSB9LCAvKiBGaXhlZC1sZW5ndGggKDkgSW50KSwoNCBTdHIvQnVmKSAqLworCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCA5LAorCQkJICAgICBBQ1BJX1JUWVBFX1NUUklORyB8IEFDUElfUlRZUEVfQlVGRkVSfSwgNCwgMH0gfSwKIAogCXt7Il9CSVgiLCAwLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwJLyogRml4ZWQtbGVuZ3RoICgxNiBJbnQpLCg0IFN0cikgKi8KIAl7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAxNiwgQUNQSV9SVFlQRV9TVFJJTkd9LCA0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IDNhNTRiNzMuLjJiZDgzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTc3LDcgKzc3LDggQEAKIAl2b2lkICpsb2dpY2FsX2FkZHJfcHRyID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9tZW1fc3BhY2VfY29udGV4dCAqbWVtX2luZm8gPSByZWdpb25fY29udGV4dDsKIAl1MzIgbGVuZ3RoOwotCWFjcGlfc2l6ZSB3aW5kb3dfc2l6ZTsKKwlhY3BpX3NpemUgbWFwX2xlbmd0aDsKKwlhY3BpX3NpemUgcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoOwogI2lmZGVmIEFDUElfTUlTQUxJR05NRU5UX05PVF9TVVBQT1JURUQKIAl1MzIgcmVtYWluZGVyOwogI2VuZGlmCkBAIC0xNDQsMjUgKzE0NSwzOSBAQAogCQl9CiAKIAkJLyoKLQkJICogRG9uJ3QgYXR0ZW1wdCB0byBtYXAgbWVtb3J5IGJleW9uZCB0aGUgZW5kIG9mIHRoZSByZWdpb24sIGFuZAotCQkgKiBjb25zdHJhaW4gdGhlIG1heGltdW0gbWFwcGluZyBzaXplIHRvIHNvbWV0aGluZyByZWFzb25hYmxlLgorCQkgKiBBdHRlbXB0IHRvIG1hcCBmcm9tIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24uCisJCSAqIEhvd2V2ZXIsIHdlIHdpbGwgbmV2ZXIgbWFwIG1vcmUgdGhhbiBvbmUgcGFnZSwgbm9yIHdpbGwgd2UgY3Jvc3MKKwkJICogYSBwYWdlIGJvdW5kYXJ5LgogCQkgKi8KLQkJd2luZG93X3NpemUgPSAoYWNwaV9zaXplKQorCQltYXBfbGVuZ3RoID0gKGFjcGlfc2l6ZSkKIAkJICAgICgobWVtX2luZm8tPmFkZHJlc3MgKyBtZW1faW5mby0+bGVuZ3RoKSAtIGFkZHJlc3MpOwogCi0JCWlmICh3aW5kb3dfc2l6ZSA+IEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRSkgewotCQkJd2luZG93X3NpemUgPSBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkU7CisJCS8qCisJCSAqIElmIG1hcHBpbmcgdGhlIGVudGlyZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcmVnaW9uIHdpbGwgY3Jvc3MKKwkJICogYSBwYWdlIGJvdW5kYXJ5LCBqdXN0IG1hcCB1cCB0byB0aGUgcGFnZSBib3VuZGFyeSwgZG8gbm90IGNyb3NzLgorCQkgKiBPbiBzb21lIHN5c3RlbXMsIGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeSB3aGlsZSBtYXBwaW5nIHJlZ2lvbnMKKwkJICogY2FuIGNhdXNlIHdhcm5pbmdzIGlmIHRoZSBwYWdlcyBoYXZlIGRpZmZlcmVudCBhdHRyaWJ1dGVzCisJCSAqIGR1ZSB0byByZXNvdXJjZSBtYW5hZ2VtZW50CisJCSAqLworCQlwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGggPQorCQkgICAgQUNQSV9ST1VORF9VUChhZGRyZXNzLCBBQ1BJX0RFRkFVTFRfUEFHRV9TSVpFKSAtIGFkZHJlc3M7CisKKwkJaWYgKCFwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGgpIHsKKwkJCXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCA9IEFDUElfREVGQVVMVF9QQUdFX1NJWkU7CisJCX0KKworCQlpZiAobWFwX2xlbmd0aCA+IHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCkgeworCQkJbWFwX2xlbmd0aCA9IHBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aDsKIAkJfQogCiAJCS8qIENyZWF0ZSBhIG5ldyBtYXBwaW5nIHN0YXJ0aW5nIGF0IHRoZSBhZGRyZXNzIGdpdmVuICovCiAKLQkJbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MgPQotCQkJYWNwaV9vc19tYXBfbWVtb3J5KChhY3BpX3BoeXNpY2FsX2FkZHJlc3MpIGFkZHJlc3MsIHdpbmRvd19zaXplKTsKKwkJbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MgPSBhY3BpX29zX21hcF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWRkcmVzcywgbWFwX2xlbmd0aCk7CiAJCWlmICghbWVtX2luZm8tPm1hcHBlZF9sb2dpY2FsX2FkZHJlc3MpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICJDb3VsZCBub3QgbWFwIG1lbW9yeSBhdCAlOC44WCU4LjhYLCBzaXplICVYIiwKIAkJCQkgICAgQUNQSV9GT1JNQVRfTkFUSVZFX1VJTlQoYWRkcmVzcyksCi0JCQkJICAgICh1MzIpIHdpbmRvd19zaXplKSk7CisJCQkJICAgICh1MzIpIG1hcF9sZW5ndGgpKTsKIAkJCW1lbV9pbmZvLT5tYXBwZWRfbGVuZ3RoID0gMDsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwogCQl9CkBAIC0xNzAsNyArMTg1LDcgQEAKIAkJLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgbWFwcGluZyBzaXplICovCiAKIAkJbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzID0gYWRkcmVzczsKLQkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSB3aW5kb3dfc2l6ZTsKKwkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSBtYXBfbGVuZ3RoOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKaW5kZXggZTU2YjJhNy4uMjNlNWEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwpAQCAtMjI0LDYgKzIyNCw3IEBACiAJICogX09TSShMaW51eCkgaGVscHMgc291bmQKIAkgKiBETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlRoaW5rUGFkIFI2MSIpLAogCSAqIERNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiVGhpbmtQYWQgVDYxIiksCisJICogVDQwMCwgVDUwMAogCSAqIF9PU0koTGludXgpIGhhcyBMaW51eCBzcGVjaWZpYyBob29rcwogCSAqIERNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiVGhpbmtQYWQgWDYxIiksCiAJICogX09TSShMaW51eCkgaXMgYSBOT1A6CkBAIC0yNTQsNiArMjU1LDIyIEBACiAJCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICJUaGlua1BhZCBYNjEiKSwKIAkJfSwKIAl9LAorCXsKKwkuY2FsbGJhY2sgPSBkbWlfZW5hYmxlX29zaV9saW51eCwKKwkuaWRlbnQgPSAiTGVub3ZvIFRoaW5rUGFkIFQ0MDAiLAorCS5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkxFTk9WTyIpLAorCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiVGhpbmtQYWQgVDQwMCIpLAorCQl9LAorCX0sCisJeworCS5jYWxsYmFjayA9IGRtaV9lbmFibGVfb3NpX2xpbnV4LAorCS5pZGVudCA9ICJMZW5vdm8gVGhpbmtQYWQgVDUwMCIsCisJLm1hdGNoZXMgPSB7CisJCSAgICAgRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTEVOT1ZPIiksCisJCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICJUaGlua1BhZCBUNTAwIiksCisJCX0sCisJfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDkzMzViODcuLjBjOWM2YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTI1MSw2ICsyNTEsOSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGU7CiAKKwlpZiAoIWxpZF9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGxpZF9kZXZpY2UtPmhhbmRsZSwgIl9MSUQiLCBOVUxMLAogCQkJCSAgICAgICAmc3RhdGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMzExMjIyMS4uMWFmODA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTM4OSw2ICszODksMTcgQEAKIAogCQlwYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAJCXBjaV9kZXZfcHV0KHBkZXYpOworCisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmb3IgYSBub24tUENJIGRldmljZSB0aGF0IGhhcyBhCisJCSAqIFBDSSBwYXJlbnQgKGVnLiBhIGRpc2sgdW5kZXIgYSBQQ0kgU0FUQSBjb250cm9sbGVyKS4gIEluIHRoYXQKKwkJICogY2FzZSBwZGV2LT5zdWJvcmRpbmF0ZSB3aWxsIGJlIE5VTEwgZm9yIHRoZSBwYXJlbnQuCisJCSAqLworCQlpZiAoIXBidXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIk5vdCBhIFBDSS10by1QQ0kgYnJpZGdlXG4iKTsKKwkJCXBkZXYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KIAl9CiBvdXQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmRldmljZV9saXN0LCBub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwppbmRleCBlNmJmZDc3Li4yZWY3MDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXJfbWV0ZXIuYwpAQCAtMjk0LDcgKzI5NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gZGF0YTsKKwkvKiBfUFRQIHJldHVybnMgMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZSAqLworCWlmIChkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdHJpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2MuYyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKaW5kZXggZjhiNmY1NS4uZDBkMjVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2MuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAljaGFyIHN0cmJ1Zls1XTsKIAljaGFyIHN0cls1XSA9ICIiOwotCWludCBsZW4gPSBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gY291bnQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpmb3VuZF9kZXYgPSBOVUxMOwogCiAJaWYgKGxlbiA+IDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IGM1NjdiNDYuLmVjNzQyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC03NzAsNyArNzcwLDcgQEAKIAkgICAgLm5vdGlmaWVyX2NhbGwgPSBhY3BpX2NwdV9zb2Z0X25vdGlmeSwKIH07CiAKLXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3JfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwogCWludCByZXN1bHQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwppbmRleCA0YzZjMTRjLi4xYzVkN2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYwpAQCAtMTEzMywxNSArMTEzMywxNSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nICpwdGhyb3R0bGluZzsKIAorCWlmICghcHIpCisJCXJldHVybiAtRUlOVkFMOworCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAicGJsa19hZGRyZXNzWzB4JTA4eF0gZHV0eV9vZmZzZXRbJWRdIGR1dHlfd2lkdGhbJWRdXG4iLAogCQkJICBwci0+dGhyb3R0bGluZy5hZGRyZXNzLAogCQkJICBwci0+dGhyb3R0bGluZy5kdXR5X29mZnNldCwKIAkJCSAgcHItPnRocm90dGxpbmcuZHV0eV93aWR0aCkpOwogCi0JaWYgKCFwcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKgogCSAqIEV2YWx1YXRlIF9QVEMsIF9UU1MgYW5kIF9UUEMKIAkgKiBUaGV5IG11c3QgYWxsIGJlIHByZXNlbnQgb3Igbm9uZSBvZiB0aGVtIGNhbiBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCBhOTBhZmNjLi41ZjJjMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtNDEzLDYgKzQxMywzOCBAQAogCQl9LAogCX0sCiAJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBQYXZpbGlvbiBkdjQiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjQiKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgUGF2aWxpb24gZHY3IiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY3IiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIENvbXBhcSBQcmVzYXJpbyBDNzAwIE5vdGVib29rIFBDIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQ29tcGFxIFByZXNhcmlvIEM3MDAgTm90ZWJvb2sgUEMiKSwKKwkJfSwKKwl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgQ29tcGFxIFByZXNhcmlvIENRNDAgTm90ZWJvb2sgUEMiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDb21wYXEgUHJlc2FyaW8gQ1E0MCBOb3RlYm9vayBQQyIpLAorCQl9LAorCX0sCisJewogCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCiAJLmlkZW50ID0gIlBhbmFzb25pYyBDRjUxLTJMIiwKIAkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggZjZlNTRiZi4uMDVkZmY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTExMDksNyArMTEwOSwxMiBAQAogCSAqLwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZz8gKi8KLQlpZiAodmlkZW8tPmNhcC5fRE9TKSB7CisJaWYgKHZpZGVvLT5jYXAuX0RPUyB8fCB2aWRlby0+Y2FwLl9ET0QpIHsKKwkJaWYgKCF2aWRlby0+Y2FwLl9ET1MpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHCisJCQkJIkFDUEkoJXMpIGRlZmluZXMgX0RPRCBidXQgbm90IF9ET1NcbiIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKHZpZGVvLT5kZXZpY2UpKTsKKwkJfQogCQl2aWRlby0+ZmxhZ3MubXVsdGloZWFkID0gMTsKIAkJc3RhdHVzID0gMDsKIAl9CkBAIC0xMjE4LDcgKzEyMjMsNyBAQAogCXUzMiBzdGF0ZSA9IDA7CiAKIAotCWlmICghZGV2IHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCFkZXYgfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCkBAIC0xMjc1LDcgKzEyODAsNyBAQAogCWludCBpOwogCiAKLQlpZiAoIWRldiB8fCAhZGV2LT5icmlnaHRuZXNzIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCFkZXYgfHwgIWRldi0+YnJpZ2h0bmVzcyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKQEAgLTE1NTcsNyArMTU2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9wdCwgb3B0aW9uczsKIAogCi0JaWYgKCF2aWRlbyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQorCWlmICghdmlkZW8gfHwgY291bnQgPj0gc2l6ZW9mKHN0cikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3RhdHVzID0gYWNwaV92aWRlb19idXNfUE9TVF9vcHRpb25zKHZpZGVvLCAmb3B0aW9ucyk7CkBAIC0xNTk3LDcgKzE2MDIsNyBAQAogCXVuc2lnbmVkIGxvbmcgb3B0OwogCiAKLQlpZiAoIXZpZGVvIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCF2aWRlbyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA3MDMyZjI1Li41NzU1OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC04NCw3ICs4NCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBhYmxlIHRvIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nID8gKi8KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET0QiLCAmaF9kdW1teSkpICYmCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSB8fAogCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15KSkpCiAJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19PVVRQVVRfU1dJVENISU5HOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYjFhMjU3Ny4uYTMyNDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5NSksIGJvYXJkX2FoY2lfc2I3MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLwogCiAJLyogQU1EICovCi0JeyBQQ0lfVkRFVklDRShBTUQsIDB4NzgwMCksIGJvYXJkX2FoY2kgfSwgLyogQU1EIFNCOTAwICovCisJeyBQQ0lfVkRFVklDRShBTUQsIDB4NzgwMCksIGJvYXJkX2FoY2kgfSwgLyogQU1EIEh1ZHNvbi0yICovCiAJLyogQU1EIGlzIHVzaW5nIFJBSUQgY2xhc3Mgb25seSBmb3IgYWhjaSBjb250cm9sbGVycyAqLwogCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJICBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZmZmLCBib2FyZF9haGNpIH0sCkBAIC02MDUsNiArNjA1LDcgQEAKIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTU5KSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTVhKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTViKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KKwl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTgwKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTGludXggSUQgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YwKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YxKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YyKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KQEAgLTI3MTcsNiArMjcxOCwzMCBAQAogCQkJfSwKIAkJCS5kcml2ZXJfZGF0YSA9ICIyMDA3MTAyNiIsCS8qIHl5eXltbWRkICovCiAJCX0sCisJCS8qCisJCSAqIEFsbCBCSU9TIHZlcnNpb25zIGZvciB0aGUgTVNJIEs5QTIgUGxhdGludW0gKE1TLTczNzYpCisJCSAqIHN1cHBvcnQgNjRiaXQgRE1BLgorCQkgKgorCQkgKiBCSU9TIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAxLjUgaGFkIHRoZSBNYW51ZmFjdHVyZXIgRE1JCisJCSAqIGZpZWxkcyBhcyAiTUlDUk8tU1RBUiBJTlRFUkFOVElPTkFMIENPLixMVEQiLgorCQkgKiBUaGlzIHNwZWxsaW5nIG1pc3Rha2Ugd2FzIGZpeGVkIGluIEJJT1MgdmVyc2lvbiAxLjUsIHNvCisJCSAqIDEuNSBhbmQgbGF0ZXIgaGF2ZSB0aGUgTWFudWZhY3R1cmVyIGFzCisJCSAqICJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLExURCIuCisJCSAqIFNvIHRyeSB0byBtYXRjaCBvbiBETUlfQk9BUkRfVkVORE9SIG9mICJNSUNSTy1TVEFSIElOVEVSIi4KKwkJICoKKwkJICogQklPUyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gMS45IGhhZCBhIEJvYXJkIFByb2R1Y3QgTmFtZQorCQkgKiBETUkgZmllbGQgb2YgIk1TLTczNzYiLiBUaGlzIHdhcyBjaGFuZ2VkIHRvIGJlCisJCSAqICJLOUEyIFBsYXRpbnVtIChNUy03Mzc2KSIgaW4gdmVyc2lvbiAxLjksIGJ1dCB3ZSBjYW4gc3RpbGwKKwkJICogbWF0Y2ggb24gRE1JX0JPQVJEX05BTUUgb2YgIk1TLTczNzYiLgorCQkgKi8KKwkJeworCQkJLmlkZW50ID0gIk1TSSBLOUEyIFBsYXRpbnVtIiwKKwkJCS5tYXRjaGVzID0geworCQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAorCQkJCQkgICJNSUNSTy1TVEFSIElOVEVSIiksCisJCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTVMtNzM3NiIpLAorCQkJfSwKKwkJfSwKIAkJeyB9CiAJfTsKIAljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqbWF0Y2g7CkBAIC0yNzI4LDE4ICsyNzUzLDI0IEBACiAJICAgICFtYXRjaCkKIAkJcmV0dXJuIGZhbHNlOwogCisJaWYgKCFtYXRjaC0+ZHJpdmVyX2RhdGEpCisJCWdvdG8gZW5hYmxlXzY0Yml0OworCiAJZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCAmbW9udGgsICZkYXRlKTsKIAlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA0ZCUwMmQlMDJkIiwgeWVhciwgbW9udGgsIGRhdGUpOwogCi0JaWYgKHN0cmNtcChidWYsIG1hdGNoLT5kcml2ZXJfZGF0YSkgPj0gMCkgewotCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBlbmFibGluZyA2NGJpdCBETUFcbiIsCi0JCQkgICBtYXRjaC0+aWRlbnQpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2UgeworCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApCisJCWdvdG8gZW5hYmxlXzY0Yml0OworCWVsc2UgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBCSU9TIHRvbyBvbGQsICIKIAkJCSAgICJmb3JjaW5nIDMyYml0IERNQSwgdXBkYXRlIEJJT1NcbiIsIG1hdGNoLT5pZGVudCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CisKK2VuYWJsZV82NGJpdDoKKwlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBlbmFibGluZyA2NGJpdCBETUFcbiIsCisJCSAgIG1hdGNoLT5pZGVudCk7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGFoY2lfYnJva2VuX3N5c3RlbV9wb3dlcm9mZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IGI1MjVhMDkuLmRjNzI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNDkxOSwxMCArNDkxOSwxMSBAQAogICovCiB2b2lkIGF0YV9xY19mcmVlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCXVuc2lnbmVkIGludCB0YWc7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisJYXAgPSBxYy0+YXA7CiAKIAlxYy0+ZmxhZ3MgPSAwOwogCXRhZyA9IHFjLT50YWc7CkBAIC00OTM0LDExICs0OTM1LDEzIEBACiAKIHZvaWQgX19hdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXN0cnVjdCBhdGFfbGluayAqbGluayA9IHFjLT5kZXYtPmxpbms7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRhX2xpbmsgKmxpbms7CiAKIAlXQVJOX09OX09OQ0UocWMgPT0gTlVMTCk7IC8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCiAJV0FSTl9PTl9PTkNFKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKTsKKwlhcCA9IHFjLT5hcDsKKwlsaW5rID0gcWMtPmRldi0+bGluazsKIAogCWlmIChsaWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFNQVApKQogCQlhdGFfc2dfY2xlYW4ocWMpOwpAQCAtNTAyOCwxMiArNTAzMSwxNCBAQAogCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfRkFJTEVEOwogCiAJCWlmICh1bmxpa2VseShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0ZBSUxFRCkpIHsKLQkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkgewotCQkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCi0JCQkJZmlsbF9yZXN1bHRfdGYocWMpOworCQkJLyogYWx3YXlzIGZpbGwgcmVzdWx0IFRGIGZvciBmYWlsZWQgcWMgKi8KKwkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKworCQkJaWYgKCFhdGFfdGFnX2ludGVybmFsKHFjLT50YWcpKQogCQkJCWF0YV9xY19zY2hlZHVsZV9laChxYyk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJZWxzZQorCQkJCV9fYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXJldHVybjsKIAkJfQogCiAJCVdBUk5fT05fT05DRShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDBhOTc4MjIuLmJiYTJhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yOTgxLDEyICsyOTgxLDE0IEBACiAJICogZGV2aWNlIGRldGVjdGlvbiBtZXNzYWdlcyBiYWNrd2FyZHMuCiAJICovCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkgewotCQlpZiAoIShuZXdfbWFzayAmICgxIDw8IGRldi0+ZGV2bm8pKSB8fAotCQkgICAgZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkpCiAJCQljb250aW51ZTsKIAogCQlkZXYtPmNsYXNzID0gZWhjLT5jbGFzc2VzW2Rldi0+ZGV2bm9dOwogCisJCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfUE1QKQorCQkJY29udGludWU7CisKIAkJZWhjLT5pLmZsYWdzIHw9IEFUQV9FSElfUFJJTlRJTkZPOwogCQlyYyA9IGF0YV9kZXZfY29uZmlndXJlKGRldik7CiAJCWVoYy0+aS5mbGFncyAmPSB+QVRBX0VISV9QUklOVElORk87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwppbmRleCBhYTRiM2Y2Li5hZTQ0NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUpLCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERSksIH0sCiAKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKaW5kZXggZGM5OWUyNi4uMWIzOTJjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCkBAIC0xNzcsOSArMTc3LDYgQEAKIAkuZHJhaW5fZmlmbwk9IHBjbWNpYV84Yml0X2RyYWluX2ZpZm8sCiB9OwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIAogc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgewogCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2U7CkBAIC0yNTIsNyArMjQ5LDcgQEAKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwogCXN0cnVjdCBhdGFfcGNtY2lhX2luZm8gKmluZm87CiAJc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgKnN0ayA9IE5VTEw7Ci0JaW50IGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGlzX2ttZSA9IDAsIHJldCA9IC1FTk9NRU0sIHA7CisJaW50IGlzX2ttZSA9IDAsIHJldCA9IC1FTk9NRU0sIHA7CiAJdW5zaWduZWQgbG9uZyBpb19iYXNlLCBjdGxfYmFzZTsKIAl2b2lkIF9faW9tZW0gKmlvX2FkZHIsICpjdGxfYWRkcjsKIAlpbnQgbl9wb3J0cyA9IDE7CkBAIC0yNzEsNyArMjY4LDYgQEAKIAlwZGV2LT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCXBkZXYtPmlvLklPQWRkckxpbmVzID0gMzsKIAlwZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLQlwZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJcGRldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCXBkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0yOTYsOCArMjkyLDEzIEBACiAJfQogCWlvX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDE7CiAJY3RsX2Jhc2UgPSBzdGstPmN0bF9iYXNlOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShwZGV2LCAmcGRldi0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24ocGRldiwgJnBkZXYtPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEocGRldiwgJnBkZXYtPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHBkZXYsICZwZGV2LT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCS8qIGlvbWFwICovCiAJcmV0ID0gLUVOT01FTTsKQEAgLTM1MSw4ICszNTIsNiBAQAogCWtmcmVlKHN0ayk7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihwZGV2LCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJa2ZyZWUoc3RrKTsKIAlpbmZvLT5uZGV2ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IGY0OTgxNGQuLjNiYmVkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwotCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDQ1NjU3Y2EuLjg4OTg0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKaW5kZXggZDM0NGRiNC4uMTcyYjU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCkBAIC03MDcsMzQgKzcwNywxNyBAQAogCXJldHVybiBhdGFfZGV2X2NsYXNzaWZ5KCZ0Zik7CiB9CiAKLXN0YXRpYyBpbnQgc2F0YV9mc2xfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQotewotCS8qIEZJWE1FOiBOZXZlciBza2lwIHNvZnRyZXNldCwgc2F0YV9mc2xfc29mdHJlc2V0KCkgaXMKLQkgKiBjb21iaW5hdGlvbiBvZiBzb2Z0IGFuZCBoYXJkIHJlc2V0cy4gIHNhdGFfZnNsX3NvZnRyZXNldCgpCi0JICogbmVlZHMgdG8gYmUgc3BsaXR0ZWQgaW50byBzb2Z0IGFuZCBoYXJkIHJlc2V0cy4KLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYXRhX2ZzbF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorc3RhdGljIGludCBzYXRhX2ZzbF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAogCQkJCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKLQlzdHJ1Y3Qgc2F0YV9mc2xfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiAqaG9zdF9wcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKmhjcl9iYXNlID0gaG9zdF9wcml2LT5oY3JfYmFzZTsKLQlpbnQgcG1wID0gc2F0YV9zcnN0X3BtcChsaW5rKTsKIAl1MzIgdGVtcDsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwotCXU4ICpjZmlzOwotCXUzMiBTZXJyb3I7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfamlmZmllczsKIAotCURQUklOVEsoImluIHh4X3NvZnRyZXNldFxuIik7Ci0KLQlpZiAocG1wICE9IFNBVEFfUE1QX0NUUkxfUE9SVCkKLQkJZ290byBpc3N1ZV9zcnN0OworCURQUklOVEsoImluIHh4X2hhcmRyZXNldFxuIik7CiAKIHRyeV9vZmZsaW5lX2FnYWluOgogCS8qCkBAIC03NDksNyArNzMyLDcgQEAKIAogCWlmICh0ZW1wICYgT05MSU5FKSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsCi0JCQkJIlNvZnRyZXNldCBmYWlsZWQsIG5vdCBvZmYtbGluZWQgJWRcbiIsIGkpOworCQkJCSJIYXJkcmVzZXQgZmFpbGVkLCBub3Qgb2ZmLWxpbmVkICVkXG4iLCBpKTsKIAogCQkvKgogCQkgKiBUcnkgdG8gb2ZmbGluZSBjb250cm9sbGVyIGF0bGVhc3QgdHdpY2UKQEAgLTc2MSw3ICs3NDQsNyBAQAogCQkJZ290byB0cnlfb2ZmbGluZV9hZ2FpbjsKIAl9CiAKLQlEUFJJTlRLKCJzb2Z0cmVzZXQsIGNvbnRyb2xsZXIgb2ZmLWxpbmVkXG4iKTsKKwlEUFJJTlRLKCJoYXJkcmVzZXQsIGNvbnRyb2xsZXIgb2ZmLWxpbmVkXG4iKTsKIAlWUFJJTlRLKCJIU3RhdHVzID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7CiAJVlBSSU5USygiSENvbnRyb2wgPSAweCV4XG4iLCBpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKSk7CiAKQEAgLTc4NiwxMSArNzY5LDExIEBACiAKIAlpZiAoISh0ZW1wICYgT05MSU5FKSkgewogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLAotCQkJCSJTb2Z0cmVzZXQgZmFpbGVkLCBub3Qgb24tbGluZWRcbiIpOworCQkJCSJIYXJkcmVzZXQgZmFpbGVkLCBub3Qgb24tbGluZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlEUFJJTlRLKCJzb2Z0cmVzZXQsIGNvbnRyb2xsZXIgb2ZmLWxpbmVkICYgb24tbGluZWRcbiIpOworCURQUklOVEsoImhhcmRyZXNldCwgY29udHJvbGxlciBvZmYtbGluZWQgJiBvbi1saW5lZFxuIik7CiAJVlBSSU5USygiSFN0YXR1cyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUykpOwogCVZQUklOVEsoIkhDb250cm9sID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCkpOwogCkBAIC04MDYsNyArNzg5LDcgQEAKIAkJCQkiTm8gRGV2aWNlIE9SIFBIWVJEWSBjaGFuZ2UsSHN0YXR1cyA9IDB4JXhcbiIsCiAJCQkJaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7CiAJCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAogCS8qCkBAIC04MTksMTEgKzgwMiw0NCBAQAogCWlmICgodGVtcCAmIDB4RkYpICE9IDB4MTgpIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJObyBTaWduYXR1cmUgVXBkYXRlXG4iKTsKIAkJKmNsYXNzID0gQVRBX0RFVl9OT05FOwotCQlnb3RvIG91dDsKKwkJZ290byBkb19mb2xsb3d1cF9zcnN0OwogCX0gZWxzZSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLAogCQkJCSJTaWduYXR1cmUgVXBkYXRlIGRldGVjdGVkIEAgJWQgbXNlY3NcbiIsCiAJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnRfamlmZmllcykpOworCQkqY2xhc3MgPSBzYXRhX2ZzbF9kZXZfY2xhc3NpZnkoYXApOworCQlyZXR1cm4gMDsKKwl9CisKK2RvX2ZvbGxvd3VwX3Nyc3Q6CisJLyoKKwkgKiByZXF1ZXN0IGxpYkFUQSB0byBwZXJmb3JtIGZvbGxvdy11cCBzb2Z0cmVzZXQKKwkgKi8KKwlyZXR1cm4gLUVBR0FJTjsKKworZXJyOgorCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHNhdGFfZnNsX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOworCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOworCWludCBwbXAgPSBzYXRhX3Nyc3RfcG1wKGxpbmspOworCXUzMiB0ZW1wOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CisJdTggKmNmaXM7CisJdTMyIFNlcnJvcjsKKworCURQUklOVEsoImluIHh4X3NvZnRyZXNldFxuIik7CisKKwlpZiAoYXRhX2xpbmtfb2ZmbGluZShsaW5rKSkgeworCQlEUFJJTlRLKCJQSFkgcmVwb3J0cyBubyBkZXZpY2VcbiIpOworCQkqY2xhc3MgPSBBVEFfREVWX05PTkU7CisJCXJldHVybiAwOwogCX0KIAogCS8qCkBAIC04MzQsNyArODUwLDYgQEAKIAkgKiByZWFjaGVkIGhlcmUsIHdlIGNhbiBzZW5kIGEgY29tbWFuZCB0byB0aGUgdGFyZ2V0IGRldmljZQogCSAqLwogCi1pc3N1ZV9zcnN0OgogCURQUklOVEsoIlNlbmRpbmcgU1JTVC9kZXZpY2UgcmVzZXRcbiIpOwogCiAJYXRhX3RmX2luaXQobGluay0+ZGV2aWNlLCAmdGYpOwpAQCAtODYwLDYgKzg3NSw4IEBACiAJCWlvcmVhZDMyKENBICsgaGNyX2Jhc2UpLCBpb3JlYWQzMihDQyArIGhjcl9iYXNlKSk7CiAKIAlpb3dyaXRlMzIoMHhGRkZGLCBDQyArIGhjcl9iYXNlKTsKKwlpZiAocG1wICE9IFNBVEFfUE1QX0NUUkxfUE9SVCkKKwkJaW93cml0ZTMyKHBtcCwgQ1FQTVAgKyBoY3JfYmFzZSk7CiAJaW93cml0ZTMyKDEsIENRICsgaGNyX2Jhc2UpOwogCiAJdGVtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKENRICsgaGNyX2Jhc2UsIDB4MSwgMHgxLCAxLCA1MDAwKTsKQEAgLTkyNiw3ICs5NDMsNiBAQAogCQlWUFJJTlRLKCJjZXJlZyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0UpKTsKIAl9CiAKLW91dDoKIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtOTg4LDE4ICsxMDA0LDYgQEAKIAkJZWhpLT5lcnJfbWFzayB8PSBBQ19FUlJfQVRBX0JVUzsKIAkJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKIAotCQkvKgotCQkgKiBJZ25vcmUgc2Vycm9yIGluIGNhc2Ugb2YgZmF0YWwgZXJyb3JzIGFzIHdlIGFsd2F5cyB3YW50Ci0JCSAqIHRvIGRvIGEgc29mdC1yZXNldCBvZiB0aGUgRlNMIFNBVEEgY29udHJvbGxlci4gQW5hbHl6aW5nCi0JCSAqIHNlcnJvciBtYXkgY2F1c2UgbGliYXRhIHRvIHNjaGVkdWxlIGEgaGFyZC1yZXNldCBhY3Rpb24sCi0JCSAqIGFuZCBoYXJkLXJlc2V0IGN1cnJlbnRseSBkb2VzIG5vdCBkbyBjb250cm9sbGVyCi0JCSAqIG9mZmxpbmUvb25saW5lLCBjYXVzaW5nIGNvbW1hbmQgdGltZW91dHMgYW5kIGxlYWRzIHRvIGFuCi0JCSAqIHVuLXJlY292ZXJhYmxlIHN0YXRlLCBoZW5jZSBtYWtlIGxpYkFUQSBpZ25vcmUKLQkJICogYXV0b3BzeSBpbiBjYXNlIG9mIGZhdGFsIGVycm9ycy4KLQkJICovCi0KLQkJZWhpLT5mbGFncyB8PSBBVEFfRUhJX05PX0FVVE9QU1k7Ci0KIAkJZnJlZXplID0gMTsKIAl9CiAKQEAgLTEyNjcsOCArMTI3MSw4IEBACiAKIAkuZnJlZXplID0gc2F0YV9mc2xfZnJlZXplLAogCS50aGF3ID0gc2F0YV9mc2xfdGhhdywKLQkucHJlcmVzZXQgPSBzYXRhX2ZzbF9wcmVyZXNldCwKIAkuc29mdHJlc2V0ID0gc2F0YV9mc2xfc29mdHJlc2V0LAorCS5oYXJkcmVzZXQgPSBzYXRhX2ZzbF9oYXJkcmVzZXQsCiAJLnBtcF9zb2Z0cmVzZXQgPSBzYXRhX2ZzbF9zb2Z0cmVzZXQsCiAJLmVycm9yX2hhbmRsZXIgPSBzYXRhX2ZzbF9lcnJvcl9oYW5kbGVyLAogCS5wb3N0X2ludGVybmFsX2NtZCA9IHNhdGFfZnNsX3Bvc3RfaW50ZXJuYWxfY21kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDE3ZjlmZjkuLjZmNTA5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzODIsNiArMTM4MiwyNSBAQAogCSAqLwogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0RFTEFZRURfRUgpCiAJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKworCS8qIFBJTyBjb21tYW5kcyBuZWVkIGV4Y2x1c2l2ZSBsaW5rOiBubyBvdGhlciBjb21tYW5kcyBbRE1BIG9yIFBJT10KKwkgKiBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKwkgKiBzZXQgZXhjbF9saW5rIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEgUElPIGNvbW1hbmQgaW4gRE1BIG1vZGUKKwkgKiBvciBhIG5vbi1OQ1EgY29tbWFuZCBpbiBOQ1EgbW9kZS4KKwkgKiBXaGVuIHdlIHJlY2VpdmUgYSBjb21tYW5kIGZyb20gdGhhdCBsaW5rLCBhbmQgdGhlcmUgYXJlIG5vCisJICogb3V0c3RhbmRpbmcgY29tbWFuZHMsIG1hcmsgYSBmbGFnIHRvIGNsZWFyIGV4Y2xfbGluayBhbmQgbGV0CisJICogdGhlIGNvbW1hbmQgZ28gdGhyb3VnaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXAtPmV4Y2xfbGluaykpIHsKKwkJaWYgKGxpbmsgPT0gYXAtPmV4Y2xfbGluaykgeworCQkJaWYgKGFwLT5ucl9hY3RpdmVfbGlua3MpCisJCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfQ0xFQVJfRVhDTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBwb3J0IGlzIGNvbXBsZXRlbHkgaWRsZSwgdGhlbiBhbGxvdyB0aGUgbmV3IHFjLgogCSAqLwpAQCAtMTM5NSw4ICsxNDE0LDE0IEBACiAJICogZG9lc24ndCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgJiYKLQkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAmJiBhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCi0JCXJldHVybiAwOworCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pKSB7CisJCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7CisJCQlhcC0+ZXhjbF9saW5rID0gbGluazsKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJfQorCX0KIAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA4NmE0MDU4Li4xZWI0ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xNTk0LDkgKzE1OTQsMjEgQEAKIAkgICAgIWF0YV9kZXZfZW5hYmxlZChsaW5rLT5kZXZpY2UpKQogCQlzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnLCBkZWFkbGluZSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JZWxzZSBpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywKLQkJCQkibnY6IHNraXBwaW5nIGhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKwllbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCQlpbnQgcmM7CisKKwkJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLCAibnY6IHNraXBwaW5nICIKKwkJCQkJImhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKworCQkvKiBtYWtlIHN1cmUgdGhlIGxpbmsgaXMgb25saW5lICovCisJCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKKwkJCQkJImxpbmsgKGVycm5vPSVkKVxuIiwgcmMpOworCX0KIAogCS8qIGRldmljZSBzaWduYXR1cmUgYWNxdWlzaXRpb24gaXMgdW5yZWxpYWJsZSAqLwogCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggYmRkNDNjNy4uMDJlZmQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC05Myw3ICs5Myw2IEBACiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDUyODcpLCB2dDgyNTEgfSwgLyogMiBzYXRhIGNobmxzIChNYXN0ZXIvU2xhdmUpICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4OTAwMCksIHZ0ODI1MSB9LAotCXsgUENJX1ZERVZJQ0UoVklBLCAweDkwNDApLCB2dDgyNTEgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA5NzNiZjJhLi42M2MxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC02ODksMTUgKzY4OSwxOSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcml2ZXJfYWRkX2F0dHJzKCVzKSBmYWlsZWRcbiIsCiAJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKIAl9Ci0JZXJyb3IgPSBhZGRfYmluZF9maWxlcyhkcnYpOwotCWlmIChlcnJvcikgewotCQkvKiBEaXR0byAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRfYmluZF9maWxlcyglcykgZmFpbGVkXG4iLAotCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisKKwlpZiAoIWRydi0+c3VwcHJlc3NfYmluZF9hdHRycykgeworCQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7CisJCWlmIChlcnJvcikgeworCQkJLyogRGl0dG8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CisJCX0KIAl9CiAKIAlrb2JqZWN0X3VldmVudCgmcHJpdi0+a29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOworCiBvdXRfdW5yZWdpc3RlcjoKIAlrZnJlZShkcnYtPnApOwogCWRydi0+cCA9IE5VTEw7CkBAIC03MjAsNyArNzI0LDggQEAKIAlpZiAoIWRydi0+YnVzKQogCQlyZXR1cm47CiAKLQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKQorCQlyZW1vdmVfYmluZF9maWxlcyhkcnYpOwogCWRyaXZlcl9yZW1vdmVfYXR0cnMoZHJ2LT5idXMsIGRydik7CiAJZHJpdmVyX3JlbW92ZV9maWxlKGRydiwgJmRyaXZlcl9hdHRyX3VldmVudCk7CiAJa2xpc3RfcmVtb3ZlKCZkcnYtPnAtPmtub2RlX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggZWQyZWJkMy4uZjM2Nzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCXB1dF9kcml2ZXIob3RoZXIpOwogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBEcml2ZXIgJyVzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsICIKIAkJCSJhYm9ydGluZy4uLlxuIiwgZHJ2LT5uYW1lKTsKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0ID0gYnVzX2FkZF9kcml2ZXIoZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggZWQxNTZhMTMuLjRmYTk1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC01MjEsMTEgKzUyMSwxNSBAQAogewogCWludCByZXR2YWwsIGNvZGU7CiAKKwkvKiBtYWtlIHN1cmUgZHJpdmVyIHdvbid0IGhhdmUgYmluZC91bmJpbmQgYXR0cmlidXRlcyAqLworCWRydi0+ZHJpdmVyLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlOworCiAJLyogdGVtcG9yYXJ5IHNlY3Rpb24gdmlvbGF0aW9uIGR1cmluZyBwcm9iZSgpICovCiAJZHJ2LT5wcm9iZSA9IHByb2JlOwogCXJldHZhbCA9IGNvZGUgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIAotCS8qIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKKwkvKgorCSAqIEZpeHVwIHRoYXQgc2VjdGlvbiB2aW9sYXRpb24sIGJlaW5nIHBhcmFub2lkIGFib3V0IGNvZGUgc2Nhbm5pbmcKIAkgKiB0aGUgbGlzdCBvZiBkcml2ZXJzIGluIG9yZGVyIHRvIHByb2JlIG5ldyBkZXZpY2VzLiAgQ2hlY2sgdG8gc2VlCiAJICogaWYgdGhlIHByb2JlIHdhcyBzdWNjZXNzZnVsLCBhbmQgbWFrZSBzdXJlIGFueSBmb3JjZWQgcHJvYmVzIG9mCiAJICogbmV3IGRldmljZXMgZmFpbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUwZGM0MDcuLjhhYTI0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNTExLDYgKzUxMSw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDM4NTU2ZjYuLjg0NmQ4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNTEsOCArNTEsNiBAQAogewogCWludCByZXR2YWwgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIVxuIik7Ci0KIAlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQogCQlyZXR2YWwgPSAtRUlOVkFMOwogCWVsc2UgaWYgKGRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24pCkBAIC05Myw4ICs5MSw2IEBACiAJd2FrZV91cF9hbGwoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7CiAKICBvdXQ6Ci0JZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIHJldHVybnMgJWQhXG4iLCByZXR2YWwpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzMyLDExICszMjgsMTEgQEAKIAkJICogbmVjZXNzYXJ5LgogCQkgKi8KIAkJcGFyZW50ID0gZGV2LT5wYXJlbnQ7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+cG93ZXIubG9jayk7CiAKIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUocGFyZW50KTsKIAotCQlzcGluX2xvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCQlzcGluX2xvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAJCS8qCiAJCSAqIFdlIGNhbiByZXN1bWUgaWYgdGhlIHBhcmVudCdzIHJ1bi10aW1lIFBNIGlzIGRpc2FibGVkIG9yIGl0CiAJCSAqIGlzIHNldCB0byBpZ25vcmUgY2hpbGRyZW4uCkBAIC0zNDcsOSArMzQzLDkgQEAKIAkJCWlmIChwYXJlbnQtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9BQ1RJVkUpCiAJCQkJcmV0dmFsID0gLUVCVVNZOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmcGFyZW50LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXQ7CiAJCWdvdG8gcmVwZWF0OwpAQCAtNzgxLDcgKzc3Nyw3IEBACiAJfQogCiAJaWYgKHBhcmVudCkgewotCQlzcGluX2xvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCQlzcGluX2xvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAKIAkJLyoKIAkJICogSXQgaXMgaW52YWxpZCB0byBwdXQgYW4gYWN0aXZlIGNoaWxkIHVuZGVyIGEgcGFyZW50IHRoYXQgaXMKQEAgLTc5Nyw3ICs3OTMsNyBAQAogCQkJCWF0b21pY19pbmMoJnBhcmVudC0+cG93ZXIuY2hpbGRfY291bnQpOwogCQl9CiAKLQkJc3Bpbl91bmxvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCQlzcGluX3VubG9jaygmcGFyZW50LT5wb3dlci5sb2NrKTsKIAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKaW5kZXggOTY1ZWNlMi4uMTNiYjY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKQEAgLTczNSw2ICs3MzUsMjEgQEAKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CiB9CiAKKy8qCisgKiBFbnN1cmUgd2UgZG9uJ3QgY3JlYXRlIGFsaWFzZXMgaW4gVkkgY2FjaGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAora2lsbGFsaWFzKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJaW50IGk7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkKKwkJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpLCAwKSB7CisJCQlmbHVzaF9kY2FjaGVfcGFnZShidi0+YnZfcGFnZSk7CisJCX0KK30KKwogdm9pZAogYW9lY21kX2F0YV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTg1Myw4ICs4NjgsMTIgQEAKIAogCWlmIChidWYgJiYgLS1idWYtPm5mcmFtZXNvdXQgPT0gMCAmJiBidWYtPnJlc2lkID09IDApIHsKIAkJZGlza3N0YXRzKGQtPmdkLCBidWYtPmJpbywgamlmZmllcyAtIGJ1Zi0+c3RpbWUsIGJ1Zi0+c2VjdG9yKTsKLQkJbiA9IChidWYtPmZsYWdzICYgQlVGRkxfRkFJTCkgPyAtRUlPIDogMDsKLQkJYmlvX2VuZGlvKGJ1Zi0+YmlvLCBuKTsKKwkJaWYgKGJ1Zi0+ZmxhZ3MgJiBCVUZGTF9GQUlMKQorCQkJYmlvX2VuZGlvKGJ1Zi0+YmlvLCAtRUlPKTsKKwkJZWxzZSB7CisJCQlraWxsYWxpYXMoYnVmLT5iaW8pOworCQkJYmlvX2VuZGlvKGJ1Zi0+YmlvLCAwKTsKKwkJfQogCQltZW1wb29sX2ZyZWUoYnVmLCBkLT5idWZwb29sKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA2Mzk5ZTUwLi45MmIxMjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAogCXJldHVybiBjb3VudDsKIH0KLURFVklDRV9BVFRSKHJlc2NhbiwgU19JV1VTUiwgTlVMTCwgaG9zdF9zdG9yZV9yZXNjYW4pOworc3RhdGljIERFVklDRV9BVFRSKHJlc2NhbiwgU19JV1VTUiwgTlVMTCwgaG9zdF9zdG9yZV9yZXNjYW4pOwogCiBzdGF0aWMgc3NpemVfdCBkZXZfc2hvd191bmlxdWVfaWQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTUxMiw3ICs1MTIsNyBAQAogCQkJCXNuWzhdLCBzbls5XSwgc25bMTBdLCBzblsxMV0sCiAJCQkJc25bMTJdLCBzblsxM10sIHNuWzE0XSwgc25bMTVdKTsKIH0KLURFVklDRV9BVFRSKHVuaXF1ZV9pZCwgU19JUlVHTywgZGV2X3Nob3dfdW5pcXVlX2lkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1bmlxdWVfaWQsIFNfSVJVR08sIGRldl9zaG93X3VuaXF1ZV9pZCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IGRldl9zaG93X3ZlbmRvcihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01MzYsNyArNTM2LDcgQEAKIAllbHNlCiAJCXJldHVybiBzbnByaW50ZihidWYsIHNpemVvZih2ZW5kb3IpICsgMSwgIiVzXG4iLCBkcnYtPnZlbmRvcik7CiB9Ci1ERVZJQ0VfQVRUUih2ZW5kb3IsIFNfSVJVR08sIGRldl9zaG93X3ZlbmRvciwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodmVuZG9yLCBTX0lSVUdPLCBkZXZfc2hvd192ZW5kb3IsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBkZXZfc2hvd19tb2RlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTU2MCw3ICs1NjAsNyBAQAogCWVsc2UKIAkJcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKG1vZGVsKSArIDEsICIlc1xuIiwgZHJ2LT5tb2RlbCk7CiB9Ci1ERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgZGV2X3Nob3dfbW9kZWwsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBkZXZfc2hvd19tb2RlbCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IGRldl9zaG93X3JldihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01ODQsNyArNTg0LDcgQEAKIAllbHNlCiAJCXJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihyZXYpICsgMSwgIiVzXG4iLCBkcnYtPnJldik7CiB9Ci1ERVZJQ0VfQVRUUihyZXYsIFNfSVJVR08sIGRldl9zaG93X3JldiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2LCBTX0lSVUdPLCBkZXZfc2hvd19yZXYsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X2x1bmlkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtNjA5LDcgKzYwOSw3IEBACiAJCWx1bmlkWzBdLCBsdW5pZFsxXSwgbHVuaWRbMl0sIGx1bmlkWzNdLAogCQlsdW5pZFs0XSwgbHVuaWRbNV0sIGx1bmlkWzZdLCBsdW5pZFs3XSk7CiB9Ci1ERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgY2Npc3Nfc2hvd19sdW5pZCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobHVuaWQsIFNfSVJVR08sIGNjaXNzX3Nob3dfbHVuaWQsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X3JhaWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTYzMiw3ICs2MzIsNyBAQAogCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihyYWlkX2xhYmVsW3JhaWRdKSArIDcsICJSQUlEICVzXG4iLAogCQkJcmFpZF9sYWJlbFtyYWlkXSk7CiB9Ci1ERVZJQ0VfQVRUUihyYWlkX2xldmVsLCBTX0lSVUdPLCBjY2lzc19zaG93X3JhaWRfbGV2ZWwsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHJhaWRfbGV2ZWwsIFNfSVJVR08sIGNjaXNzX3Nob3dfcmFpZF9sZXZlbCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IGNjaXNzX3Nob3dfdXNhZ2VfY291bnQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC02NTEsNyArNjUxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLCBjb3VudCk7CiB9Ci1ERVZJQ0VfQVRUUih1c2FnZV9jb3VudCwgU19JUlVHTywgY2Npc3Nfc2hvd191c2FnZV9jb3VudCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodXNhZ2VfY291bnQsIFNfSVJVR08sIGNjaXNzX3Nob3dfdXNhZ2VfY291bnQsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2Npc3NfaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9yZXNjYW4uYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggZWRkYTllYS4uYmQxMTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTk0OSw3ICs5NDksNyBAQAogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQlpZiAobWF4X3BhcnQgPiAwKQorCWlmIChtYXhfcGFydCA+IDAgJiYgYmRldikKIAkJaW9jdGxfYnlfYmRldihiZGV2LCBCTEtSUlBBUlQsIDApOwogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNDNmMTkzOC4uNTEwNDJmMGJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTMsNyArMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2Jsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKQEAgLTE4MywzNCArMTgyLDYgQEAKIAkJdmJsay0+dnEtPnZxX29wcy0+a2ljayh2YmxrLT52cSk7CiB9CiAKLS8qIHJldHVybiBBVEEgaWRlbnRpZnkgZGF0YQotICovCi1zdGF0aWMgaW50IHZpcnRibGtfaWRlbnRpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHZvaWQgKmFyZ3ApCi17Ci0Jc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCAqb3BhcXVlOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jb3BhcXVlID0ga21hbGxvYyhWSVJUSU9fQkxLX0lEX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wYXF1ZSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSB2aXJ0aW9fY29uZmlnX2J1Zih2YmxrLT52ZGV2LCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksCi0JCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgaWRlbnRpZnkpLCBvcGFxdWUsCi0JCVZJUlRJT19CTEtfSURfQllURVMpOwotCi0JaWYgKGVycikKLQkJZ290byBvdXRfa2ZyZWU7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZ3AsIG9wYXF1ZSwgVklSVElPX0JMS19JRF9CWVRFUykpCi0JCWVyciA9IC1FRkFVTFQ7Ci0KLW91dF9rZnJlZToKLQlrZnJlZShvcGFxdWUpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHZpcnRibGtfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfTElOVVhfQkxPQ0s7CkBAIC0yMjIsMTAgKzE5Myw2IEBACiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopZGF0YTsKLQotCWlmIChjbWQgPT0gSERJT19HRVRfSURFTlRJVFkpCi0JCXJldHVybiB2aXJ0YmxrX2lkZW50aWZ5KGRpc2ssIGFyZ3ApOwogCiAJLyoKIAkgKiBPbmx5IGFsbG93IHRoZSBnZW5lcmljIFNDU0kgaW9jdGxzIGlmIHRoZSBob3N0IGNhbiBzdXBwb3J0IGl0LgpAQCAtMjMzLDcgKzIwMCw4IEBACiAJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmJsay0+dmRldiwgVklSVElPX0JMS19GX1NDU0kpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAotCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLCBhcmdwKTsKKwlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwKKwkJCSAgICAgICh2b2lkIF9fdXNlciAqKWRhdGEpOwogfQogCiAvKiBXZSBwcm92aWRlIGdldGdlbyBvbmx5IHRvIHBsZWFzZSBzb21lIG9sZCBib290bG9hZGVyL3BhcnRpdGlvbmluZyB0b29scyAqLwpAQCAtMzMyLDcgKzMwMCw2IEBACiAJfQogCiAJdmJsay0+ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7Ci0JcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19WSVJULCB2YmxrLT5kaXNrLT5xdWV1ZSk7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTQ0NSw3ICs0MTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCmluZGV4IGIwZTU2OWIuLjJhY2RjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwpAQCAtODY3LDExICs4NjcsOSBAQAogCiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAlsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAogCWxpbmstPmlycS5IYW5kbGVyID0gYmx1ZWNhcmRfaW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGluZm87CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC05MDUsMjIgKzkwMywxNiBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworCWlmIChpICE9IDApCiAJCWdvdG8gZmFpbGVkOwotCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwotCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlpZiAoYmx1ZWNhcmRfb3BlbihpbmZvKSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwppbmRleCBkNThlMjJiLi5kODE0YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCkBAIC02NTksMTEgKzY1OSw5IEBACiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7Ci0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCiAJbGluay0+aXJxLkhhbmRsZXIgPSBidDNjX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBpbmZvOwogCiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtNzQwLDIxICs3MzgsMTYgQEAKIAkJZ290byBmb3VuZF9wb3J0OwogCiAJQlRfRVJSKCJObyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCIpOwotCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgLUVOT0RFVik7CiAJZ290byBmYWlsZWQ7CiAKIGZvdW5kX3BvcnQ6CiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOworCWlmIChpICE9IDApCiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7Ci0JfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCWlmIChpICE9IDApCiAJCWdvdG8gZmFpbGVkOwotCX0KIAogCWlmIChidDNjX29wZW4oaW5mbykgIT0gMCkKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IGVmZDY4OWEuLmQzMzk0NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC01ODgsMTEgKzU4OCw5IEBACiAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7Ci0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCiAJbGluay0+aXJxLkhhbmRsZXIgPSBidHVhcnRfaW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGluZm87CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC02NjksMjEgKzY2NywxNiBAQAogCQlnb3RvIGZvdW5kX3BvcnQ7CiAKIAlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCAtRU5PREVWKTsKIAlnb3RvIGZhaWxlZDsKIAogZm91bmRfcG9ydDoKIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CisJaWYgKGkgIT0gMCkKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKLQl9CiAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJaWYgKGkgIT0gMCkKIAkJZ290byBmYWlsZWQ7Ci0JfQogCiAJaWYgKGJ0dWFydF9vcGVuKGluZm8pICE9IDApCiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggN2JhOTFhYS4uNDRiYzhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC01OTEsNiArNTkxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53YWtlcik7CiAKIAljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CkBAIC01OTksMTEgKzYwMCwxMyBAQAogCWJ0dXNiX3N0b3BfdHJhZmZpYyhkYXRhKTsKIAllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiAwOworCQlnb3RvIGZhaWxlZDsKIAogCWRhdGEtPmludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKIAorZmFpbGVkOgorCXVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmRlZmVycmVkKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IGI4ODFhOWMuLjRmMDJhNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTU3MywxMSArNTczLDkgQEAKIAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAKIAlsaW5rLT5pcnEuSGFuZGxlciA9IGR0bDFfaW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGluZm87CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC02MjIsMTYgKzYyMCwxMiBAQAogCQlnb3RvIGZhaWxlZDsKIAogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwotCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlpZiAoZHRsMV9vcGVuKGluZm8pICE9IDApCiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCAwOGE2ZjUwLi42YWFkOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIGNvbmZpZyBTWAogCXRyaXN0YXRlICJTcGVjaWFsaXggU1ggKGFuZCBTSSkgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNYIGFuZCBTSSBtdWx0aXBvcnQgc2VyaWFsIGNhcmRzLgogCSAgUGxlYXNlIHJlYWQgdGhlIGZpbGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zZXJpYWwvc3gudHh0PiBmb3IgZGV0YWlscy4KQEAgLTMzNCw3ICszMzQsNyBAQAogCiBjb25maWcgUklPCiAJdHJpc3RhdGUgIlNwZWNpYWxpeCBSSU8gc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU3BlY2lhbGl4IFJJTywgYSBzbWFydCBzZXJpYWwgY2FyZCB3aGljaAogCSAgZHJpdmVzIGFuIG91dGJvYXJkIGJveCB0aGF0IGNhbiBzdXBwb3J0IHVwIHRvIDEyOCBwb3J0cy4gIFByb2R1Y3QKQEAgLTM5NSw3ICszOTUsNyBAQAogCiBjb25maWcgQTIyMzIKIAl0cmlzdGF0ZSAiQ29tbW9kb3JlIEEyMjMyIHNlcmlhbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFpPUlJPICYmIEJST0tFTl9PTl9TTVAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBzdXBwb3J0cyB0aGUgMjIzMiA3LXBvcnQgc2VyaWFsIGNhcmQgc2hpcHBlZCB3aXRoIHRoZQogCSAgQW1pZ2EgMjAwMCBhbmQgb3RoZXIgWm9ycm8tYnVzIG1hY2hpbmVzLCBkYXRpbmcgZnJvbSAxOTg5LiAgQXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCBjY2IxZmE4Li4yZmIzYTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC01Niw5ICs1Niw4IEBACiAJICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLgogCiBjb25maWcgQUdQX0FNRDY0Ci0JdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnQiIGlmICFHQVJUX0lPTU1VCisJdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBR1AgJiYgWDg2Ci0JZGVmYXVsdCB5IGlmIEdBUlRfSU9NTVUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCiAJICBYIHVzaW5nIHRoZSBvbi1DUFUgbm9ydGhicmlkZ2Ugb2YgdGhlIEFNRCBBdGhsb242NC9PcHRlcm9uIENQVXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA0MDY4NDY3Li4zY2I1NmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19EX0lHCSAgICAweDAwNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19NX0hCCSAgICAweDAwNDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19NQV9IQgkgICAgMHgwMDYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUMyX0hCICAgIDB4MDA2YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRE5HX01fSUcJICAgIDB4MDA0NgogCiAvKiBjb3ZlciA5MTUgYW5kIDk0NSB2YXJpYW50cyAqLwpAQCAtOTYsNyArOTcsOCBAQAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0I0M19IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfRF9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTV9IQiB8fCBcCi0JCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUFfSEIpCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUFfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRE5HX01DMl9IQikKIAogZXh0ZXJuIGludCBhZ3BfbWVtb3J5X3Jlc2VydmVkOwogCkBAIC0xMTYxLDEyICsxMTYzLDYgQEAKIAogCWludGVsX2k5eHhfc2V0dXBfZmx1c2goKTsKIAotI2lmZGVmIFVTRV9QQ0lfRE1BX0FQSSAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhpbnRlbF9wcml2YXRlLnBjaWRldiwgRE1BX0JJVF9NQVNLKDM2KSkpCi0JCWRldl9lcnIoJmludGVsX3ByaXZhdGUucGNpZGV2LT5kZXYsCi0JCQkic2V0IGdmeCBkZXZpY2UgZG1hIG1hc2sgMzZiaXQgZmFpbGVkIVxuIik7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCkBAIC0xMzY0LDYgKzEzNjAsNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19EX0hCOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19NX0hCOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19NQV9IQjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUMyX0hCOgogCQkqZ3R0X29mZnNldCA9ICpndHRfc2l6ZSA9IE1CKDIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjM2NSw2ICsyMzYyLDggQEAKIAkgICAgIklHRE5HL00iLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUFfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTV9JRywgMCwKIAkgICAgIklHRE5HL01BIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRE5HX01DMl9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19NX0lHLCAwLAorCSAgICAiSUdETkcvTUMyIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyAwLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKQEAgLTI0NTYsNiArMjQ1NSwxMSBAQAogCQkJCSZicmlkZ2UtPm1vZGUpOwogCX0KIAorCWlmIChicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkgPT0gaW50ZWxfaTk2NV9tYXNrX21lbW9yeSkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2soaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIERNQV9CSVRfTUFTSygzNikpKQorCQkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCQkic2V0IGdmeCBkZXZpY2UgZG1hIG1hc2sgMzZiaXQgZmFpbGVkIVxuIik7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYnJpZGdlKTsKIAlyZXR1cm4gYWdwX2FkZF9icmlkZ2UoYnJpZGdlKTsKIH0KQEAgLTI1NjEsNiArMjU2NSw3IEBACiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9JR0ROR19EX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRE5HX01fSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUFfSEIpLAorCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfSUdETkdfTUMyX0hCKSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGViYTk5OWYuLmE2ZWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtNTUsNyArNTUsNyBAQAogCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobih4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLmV2dGNobik7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBfX3dyaXRlX2NvbnNvbGUoY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB4ZW5jb25zX2ludGVyZmFjZSgpOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZDsKQEAgLTc2LDYgKzc2LDI5IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKK3N0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSBsZW47CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgd2hvbGUgYnVmZmVyIGlzIGVtaXR0ZWQsIHBvbGxpbmcgaWYKKwkgKiBuZWNlc3NhcnkuICBXZSBkb24ndCBldmVyIHdhbnQgdG8gcmVseSBvbiB0aGUgaHZjIGRhZW1vbgorCSAqIGJlY2F1c2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uc29sZSBvdXRwdXQgaXMgd2hlbiB0aGUKKwkgKiBrZXJuZWwgaXMgY3JpcHBsZWQuCisJICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgc2VudCA9IF9fd3JpdGVfY29uc29sZShkYXRhLCBsZW4pOworCQkKKwkJZGF0YSArPSBzZW50OworCQlsZW4gLT0gc2VudDsKKworCQlpZiAodW5saWtlbHkobGVuKSkKKwkJCUhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF95aWVsZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZWFkX2NvbnNvbGUodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDk2Mjk2OGYuLjkxNTE1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ2aXJ0aW9faHdybmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCA3MzdiZTk1Li45NTA4MzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtMTI0OSw3ICsxMjQ5LDcgQEAKIAogCWlmIChrZXljb2RlID49IE5SX0tFWVMpCiAJCWlmIChrZXljb2RlID49IEtFWV9CUkxfRE9UMSAmJiBrZXljb2RlIDw9IEtFWV9CUkxfRE9UOCkKLQkJCWtleXN5bSA9IEsoS1RfQlJMLCBrZXljb2RlIC0gS0VZX0JSTF9ET1QxICsgMSk7CisJCQlrZXlzeW0gPSBVKEsoS1RfQlJMLCBrZXljb2RlIC0gS0VZX0JSTF9ET1QxICsgMSkpOwogCQllbHNlCiAJCQlyZXR1cm47CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggYzI1MGEzMS4uMmRiNGMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0yMyw4ICsyMyw2IEBACiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gTGljZW5zZWQgdW5kZXIgZHVhbCBCU0QvR1BMIGxpY2Vuc2UuCiAgICovCiAKLS8qICNkZWZpbmUgUENNQ0lBX0RFQlVHIDYgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQ3LDE4ICs0NSwxNyBAQAogCiAvKiAjZGVmaW5lIEFUUl9DU1VNICovCiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLSNkZWZpbmUgcmVhZGVyX3RvX2Rldih4KQkoJmhhbmRsZV90b19kZXYoeC0+cF9kZXYpKQotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjAwKTsKLSNkZWZpbmUgREVCVUdQKG4sIHJkciwgeCwgYXJncy4uLikgZG8geyAJCQkJXAotCWlmIChwY19kZWJ1ZyA+PSAobikpCQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHJlYWRlcl90b19kZXYocmRyKSwgIiVzOiIgeCwgCVwKLQkJCSAgIF9fZnVuY19fICwgIyMgYXJncyk7CQkJXAorI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmeC0+cF9kZXYtPmRldikKKworLyogbiAoZGVidWcgbGV2ZWwpIGlzIGlnbm9yZWQgKi8KKy8qIGFkZGl0aW9uYWwgZGVidWcgb3V0cHV0IG1heSBiZSBlbmFibGVkIGJ5IHJlLWNvbXBpbGluZyB3aXRoCisgKiBDTTQwMDBfREVCVUcgc2V0ICovCisvKiAjZGVmaW5lIENNNDAwMF9ERUJVRyAqLworI2RlZmluZSBERUJVR1AobiwgcmRyLCB4LCBhcmdzLi4uKSBkbyB7IAkJXAorCQlkZXZfZGJnKHJlYWRlcl90b19kZXYocmRyKSwgIiVzOiIgeCwgCVwKKwkJCSAgIF9fZnVuY19fICwgIyMgYXJncyk7CQlcCiAJfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHUChuLCByZHIsIHgsIGFyZ3MuLi4pCi0jZW5kaWYKKwogc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiY200MDAwX2NzLmMgdjIuNC4wZ202IC0gQWxsIGJ1Z3MgYWRkZWQgYnkgSGFyYWxkIFdlbHRlIjsKIAogI2RlZmluZQlUXzFTRUMJCShIWikKQEAgLTE3NCwxNCArMTcxLDEzIEBACiAvKiA5ICovIHsweDA5LDB4MTksMHgyOSwweDM5LDB4NDksMHg1OSwweDY5LDB4MTEsMHgxMSwweDk5LDB4QTksMHhCOSwweEM5LDB4RDl9CiB9OwogCi0jaWZuZGVmIFBDTUNJQV9ERUJVRworI2lmbmRlZiBDTTQwMDBfREVCVUcKICNkZWZpbmUJeG91dGIJb3V0YgogI2RlZmluZQl4aW5iCWluYgogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB4b3V0Yih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKLQlpZiAocGNfZGVidWcgPj0gNykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm91dGIodmFsPSUuMngscG9ydD0lLjR4KVxuIiwgdmFsLCBwb3J0KTsKKwlwcl9kZWJ1Zygib3V0Yih2YWw9JS4yeCxwb3J0PSUuNHgpXG4iLCB2YWwsIHBvcnQpOwogCW91dGIodmFsLCBwb3J0KTsKIH0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB4aW5iKHVuc2lnbmVkIHNob3J0IHBvcnQpCkBAIC0xODksOCArMTg1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXZhbCA9IGluYihwb3J0KTsKLQlpZiAocGNfZGVidWcgPj0gNykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiUuMng9aW5iKCUuNHgpXG4iLCB2YWwsIHBvcnQpOworCXByX2RlYnVnKCIlLjJ4PWluYiglLjR4KVxuIiwgdmFsLCBwb3J0KTsKIAogCXJldHVybiB2YWw7CiB9CkBAIC01MTQsMTIgKzUwOSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJeG91dGIoaSwgUkVHX0JVRl9BRERSKGlvYmFzZSkpOwogCQl4b3V0YihkZXYtPnB0c1tpXSwgUkVHX0JVRl9EQVRBKGlvYmFzZSkpOwkvKiBidWYgZGF0YSAqLwotI2lmZGVmIFBDTUNJQV9ERUJVRwotCQlpZiAocGNfZGVidWcgPj0gNSkKLQkJCXByaW50aygiMHglLjJ4ICIsIGRldi0+cHRzW2ldKTsKKyNpZmRlZiBDTTQwMDBfREVCVUcKKwkJcHJfZGVidWcoIjB4JS4yeCAiLCBkZXYtPnB0c1tpXSk7CiAJfQotCWlmIChwY19kZWJ1ZyA+PSA1KQotCQlwcmludGsoIlxuIik7CisJcHJfZGVidWcoIlxuIik7CiAjZWxzZQogCX0KICNlbmRpZgpAQCAtNTc5LDE0ICs1NzIsMTMgQEAKIAkJcHRzX3JlcGx5W2ldID0gaW5iKFJFR19CVUZfREFUQShpb2Jhc2UpKTsKIAl9CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKKyNpZmRlZiBDTTQwMDBfREVCVUcKIAlERUJVR1AoMiwgZGV2LCAiUFRTcmVwbHk6ICIpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fYnl0ZXNfcmVhZDsgaSsrKSB7Ci0JCWlmIChwY19kZWJ1ZyA+PSA1KQotCQkJcHJpbnRrKCIweCUuMnggIiwgcHRzX3JlcGx5W2ldKTsKKwkJcHJfZGVidWcoIjB4JS4yeCAiLCBwdHNfcmVwbHlbaV0pOwogCX0KLQlwcmludGsoIlxuIik7Ci0jZW5kaWYJLyogUENNQ0lBX0RFQlVHICovCisJcHJfZGVidWcoIlxuIik7CisjZW5kaWYJLyogQ000MDAwX0RFQlVHICovCiAKIAlERUJVR1AoNSwgZGV2LCAiQ2xlYXIgVGFjdGl2ZSBpbiBGbGFnczFcbiIpOwogCXhvdXRiKDB4MjAsIFJFR19GTEFHUzEoaW9iYXNlKSk7CkBAIC02NTUsNyArNjQ3LDcgQEAKIAogCURFQlVHUCg1LCBkZXYsICJEZWxldGUgdGltZXJcbiIpOwogCWRlbF90aW1lcl9zeW5jKCZkZXYtPnRpbWVyKTsKLSNpZmRlZiBQQ01DSUFfREVCVUcKKyNpZmRlZiBDTTQwMDBfREVCVUcKIAlkZXYtPm1vbml0b3JfcnVubmluZyA9IDA7CiAjZW5kaWYKIApAQCAtODk4LDcgKzg5MCw3IEBACiAJCQkJREVCVUdQKDQsIGRldiwgIkFUUiBjaGVja3N1bSAoMHglLjJ4LCBzaG91bGQgIgogCQkJCSAgICAgICAiYmUgemVybykgZmFpbGVkXG4iLCBkZXYtPmF0cl9jc3VtKTsKIAkJCX0KLSNpZmRlZiBQQ01DSUFfREVCVUcKKyNpZmRlZiBDTTQwMDBfREVCVUcKIAkJCWVsc2UgaWYgKHRlc3RfYml0KElTX0JBRF9MRU5HVEgsICZkZXYtPmZsYWdzKSkgewogCQkJCURFQlVHUCg0LCBkZXYsICJBVFIgbGVuZ3RoIGVycm9yXG4iKTsKIAkJCX0gZWxzZSB7CkBAIC0xNDE1LDcgKzE0MDcsNyBAQAogCWludCBzaXplOwogCWludCByYzsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLSNpZmRlZiBQQ01DSUFfREVCVUcKKyNpZmRlZiBDTTQwMDBfREVCVUcKIAljaGFyICppb2N0bF9uYW1lc1tDTV9JT0NfTUFYTlIgKyAxXSA9IHsKIAkJW19JT0NfTlIoQ01fSU9DR1NUQVRVUyldICJDTV9JT0NHU1RBVFVTIiwKIAkJW19JT0NfTlIoQ01fSU9DR0FUUildICJDTV9JT0NHQVRSIiwKQEAgLTE0MjMsOSArMTQxNSw5IEBACiAJCVtfSU9DX05SKENNX0lPQ1NQVFMpXSAiQ01fSU9DU1BUUyIsCiAJCVtfSU9DX05SKENNX0lPU0RCR0xWTCldICJDTTQwMDBfREJHTFZMIiwKIAl9OwotI2VuZGlmCiAJREVCVUdQKDMsIGRldiwgImNtbV9pb2N0bChkZXZpY2U9JWQuJWQpICVzXG4iLCBpbWFqb3IoaW5vZGUpLAogCSAgICAgICBpbWlub3IoaW5vZGUpLCBpb2N0bF9uYW1lc1tfSU9DX05SKGNtZCldKTsKKyNlbmRpZgogCiAJbG9ja19rZXJuZWwoKTsKIAlyYyA9IC1FTk9ERVY7CkBAIC0xNTIzLDcgKzE1MTUsNyBAQAogCQl9CiAJY2FzZSBDTV9JT0NBUkRPRkY6CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKKyNpZmRlZiBDTTQwMDBfREVCVUcKIAkJREVCVUdQKDQsIGRldiwgIi4uLiBpbiBDTV9JT0NBUkRPRkZcbiIpOwogCQlpZiAoZGV2LT5mbGFnczAgJiAweDAxKSB7CiAJCQlERUJVR1AoNCwgZGV2LCAiICAgIENhcmQgaW5zZXJ0ZWRcbiIpOwpAQCAtMTYyNSwxOCArMTYxNyw5IEBACiAKIAkJfQogCQlicmVhazsKLSNpZmRlZiBQQ01DSUFfREVCVUcKLQljYXNlIENNX0lPU0RCR0xWTDoJLyogc2V0IGRlYnVnIGxvZyBsZXZlbCAqLwotCQl7Ci0JCQlpbnQgb2xkX3BjX2RlYnVnID0gMDsKLQotCQkJb2xkX3BjX2RlYnVnID0gcGNfZGVidWc7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnBjX2RlYnVnLCBhcmdwLCBzaXplb2YoaW50KSkpCi0JCQkJcmMgPSAtRUZBVUxUOwotCQkJZWxzZSBpZiAob2xkX3BjX2RlYnVnICE9IHBjX2RlYnVnKQotCQkJCURFQlVHUCgwLCBkZXYsICJDaGFuZ2VkIGRlYnVnIGxvZyBsZXZlbCAiCi0JCQkJICAgICAgICJ0byAlaVxuIiwgcGNfZGVidWcpOwotCQl9CisjaWZkZWYgQ000MDAwX0RFQlVHCisJY2FzZSBDTV9JT1NEQkdMVkw6CisJCXJjID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggNGYwNzIzYi4uYTZhNzBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCkBAIC0xNyw4ICsxNyw2IEBACiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLCBEdWFsIEJTRC9HUEwgTGljZW5zZWQuCiAgKi8KIAotLyogI2RlZmluZSBQQ01DSUFfREVCVUcgNiAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDEsMTggKzM5LDE2IEBACiAjaW5jbHVkZSAiY200MDQwX2NzLmgiCiAKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmaGFuZGxlX3RvX2Rldih4LT5wX2RldikpCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2MDApOwotI2RlZmluZSBERUJVR1AobiwgcmRyLCB4LCBhcmdzLi4uKSBkbyB7IAkJCQlcCi0JaWYgKHBjX2RlYnVnID49IChuKSkgCQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHJlYWRlcl90b19kZXYocmRyKSwgIiVzOiIgeCwgCVwKLQkJCSAgIF9fZnVuY19fICwgIyNhcmdzKTsgCQkJXAorI2RlZmluZSByZWFkZXJfdG9fZGV2KHgpCSgmeC0+cF9kZXYtPmRldikKKworLyogbiAoZGVidWcgbGV2ZWwpIGlzIGlnbm9yZWQgKi8KKy8qIGFkZGl0aW9uYWwgZGVidWcgb3V0cHV0IG1heSBiZSBlbmFibGVkIGJ5IHJlLWNvbXBpbGluZyB3aXRoCisgKiBDTTQwNDBfREVCVUcgc2V0ICovCisvKiAjZGVmaW5lIENNNDA0MF9ERUJVRyAqLworI2RlZmluZSBERUJVR1AobiwgcmRyLCB4LCBhcmdzLi4uKSBkbyB7IAkJXAorCQlkZXZfZGJnKHJlYWRlcl90b19kZXYocmRyKSwgIiVzOiIgeCwgCVwKKwkJCSAgIF9fZnVuY19fICwgIyMgYXJncyk7CQlcCiAJfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHUChuLCByZHIsIHgsIGFyZ3MuLi4pCi0jZW5kaWYKIAogc3RhdGljIGNoYXIgKnZlcnNpb24gPQogIk9NTklLRVkgQ2FyZE1hbiA0MDQwIHYxLjEuMGdtNSAtIEFsbCBidWdzIGFkZGVkIGJ5IEhhcmFsZCBXZWx0ZSI7CkBAIC05MCwxNCArODYsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpkZXZfdGFibGVbQ01fTUFYX0RFVl07CiAKLSNpZm5kZWYgUENNQ0lBX0RFQlVHCisjaWZuZGVmIENNNDA0MF9ERUJVRwogI2RlZmluZQl4b3V0YglvdXRiCiAjZGVmaW5lCXhpbmIJaW5iCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHhvdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewotCWlmIChwY19kZWJ1ZyA+PSA3KQotCQlwcmludGsoS0VSTl9ERUJVRyAib3V0Yih2YWw9JS4yeCxwb3J0PSUuNHgpXG4iLCB2YWwsIHBvcnQpOworCXByX2RlYnVnKCJvdXRiKHZhbD0lLjJ4LHBvcnQ9JS40eClcbiIsIHZhbCwgcG9ydCk7CiAJb3V0Yih2YWwsIHBvcnQpOwogfQogCkBAIC0xMDYsOCArMTAxLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXZhbCA9IGluYihwb3J0KTsKLQlpZiAocGNfZGVidWcgPj0gNykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiUuMng9aW5iKCUuNHgpXG4iLCB2YWwsIHBvcnQpOworCXByX2RlYnVnKCIlLjJ4PWluYiglLjR4KVxuIiwgdmFsLCBwb3J0KTsKIAlyZXR1cm4gdmFsOwogfQogI2VuZGlmCkBAIC0yNjAsMjMgKzI1NCwyMiBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkgIAlkZXYtPnJfYnVmW2ldID0geGluYihpb2Jhc2UgKyBSRUdfT0ZGU0VUX0JVTEtfSU4pOwotI2lmZGVmIFBDTUNJQV9ERUJVRwotCQlpZiAocGNfZGVidWcgPj0gNikKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlbHU6JTJ4ICIsIGksIGRldi0+cl9idWZbaV0pOworI2lmZGVmIENNNDA0MF9ERUJVRworCQlwcl9kZWJ1ZygiJWx1OiUyeCAiLCBpLCBkZXYtPnJfYnVmW2ldKTsKIAl9Ci0JcHJpbnRrKCJcbiIpOworCXByX2RlYnVnKCJcbiIpOwogI2Vsc2UKIAl9CiAjZW5kaWYKIAogCWJ5dGVzX3RvX3JlYWQgPSA1ICsgbGUzMl90b19jcHUoKihfX2xlMzIgKikmZGV2LT5yX2J1ZlsxXSk7CiAKLQlERUJVR1AoNiwgZGV2LCAiQnl0ZXNUb1JlYWQ9JWx1XG4iLCBieXRlc190b19yZWFkKTsKKwlERUJVR1AoNiwgZGV2LCAiQnl0ZXNUb1JlYWQ9JXp1XG4iLCBieXRlc190b19yZWFkKTsKIAogCW1pbl9ieXRlc190b19yZWFkID0gbWluKGNvdW50LCBieXRlc190b19yZWFkICsgNSk7CiAJbWluX2J5dGVzX3RvX3JlYWQgPSBtaW5fdChzaXplX3QsIG1pbl9ieXRlc190b19yZWFkLCBSRUFEX1dSSVRFX0JVRkZFUl9TSVpFKTsKIAotCURFQlVHUCg2LCBkZXYsICJNaW49JWx1XG4iLCBtaW5fYnl0ZXNfdG9fcmVhZCk7CisJREVCVUdQKDYsIGRldiwgIk1pbj0lenVcbiIsIG1pbl9ieXRlc190b19yZWFkKTsKIAogCWZvciAoaSA9IDA7IGkgPCAobWluX2J5dGVzX3RvX3JlYWQtNSk7IGkrKykgewogCQlyYyA9IHdhaXRfZm9yX2J1bGtfaW5fcmVhZHkoZGV2KTsKQEAgLTI4OCwxMSArMjgxLDEwIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlkZXYtPnJfYnVmW2krNV0gPSB4aW5iKGlvYmFzZSArIFJFR19PRkZTRVRfQlVMS19JTik7Ci0jaWZkZWYgUENNQ0lBX0RFQlVHCi0JCWlmIChwY19kZWJ1ZyA+PSA2KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVsdTolMnggIiwgaSwgZGV2LT5yX2J1ZltpXSk7CisjaWZkZWYgQ000MDQwX0RFQlVHCisJCXByX2RlYnVnKCIlbHU6JTJ4ICIsIGksIGRldi0+cl9idWZbaV0pOwogCX0KLQlwcmludGsoIlxuIik7CisJcHJfZGVidWcoIlxuIik7CiAjZWxzZQogCX0KICNlbmRpZgpAQCAtNTQ3LDcgKzUzOSw3IEBACiAJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwogCiAJcmMgPSBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Ci0JZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KHBfZGV2KSwKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBfZGV2LT5kZXYsCiAJCSAgICJwY21jaWFfcmVxdWVzdF9pbyByZXR1cm5lZCAweCV4XG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNTY5LDcgKzU2MSw3IEBACiAKIAlmYWlsX3JjID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGZhaWxfcmMgIT0gMCkgewotCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmhhbmRsZV90b19kZXYobGluayksCisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmbGluay0+ZGV2LAogCQkJICAgInBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIDB4JXhcbiIsCiAJCQkgICBmYWlsX3JjKTsKIAkJZ290byBjc19yZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL2hhcmR3YXJlLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvaGFyZHdhcmUuYwppbmRleCA0YzE4MjBjLi45OWNmZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvaGFyZHdhcmUuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvaGFyZHdhcmUuYwpAQCAtMTIxMywxMiArMTIxMywxMiBAQAogCiBpcnFyZXR1cm5fdCBpcHdpcmVsZXNzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGlwd19oYXJkd2FyZSAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IGlwd19kZXYgKmlwdyA9IGRldl9pZDsKIAotCWlmIChody0+aHdfdmVyc2lvbiA9PSBIV19WRVJTSU9OXzEpCi0JCXJldHVybiBpcHdpcmVsZXNzX2hhbmRsZV92MV9pbnRlcnJ1cHQoaXJxLCBodyk7CisJaWYgKGlwdy0+aGFyZHdhcmUtPmh3X3ZlcnNpb24gPT0gSFdfVkVSU0lPTl8xKQorCQlyZXR1cm4gaXB3aXJlbGVzc19oYW5kbGVfdjFfaW50ZXJydXB0KGlycSwgaXB3LT5oYXJkd2FyZSk7CiAJZWxzZQotCQlyZXR1cm4gaXB3aXJlbGVzc19oYW5kbGVfdjJfdjNfaW50ZXJydXB0KGlycSwgaHcpOworCQlyZXR1cm4gaXB3aXJlbGVzc19oYW5kbGVfdjJfdjNfaW50ZXJydXB0KGlycSwgaXB3LT5oYXJkd2FyZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsdXNoX3BhY2tldHNfdG9faHcoc3RydWN0IGlwd19oYXJkd2FyZSAqaHcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA1MjE2ZmNlLi5kZmYyNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTY1LDEwICs2NSw3IEBACiAJc3RydWN0IGlwd19kZXYgKmlwdyA9IGNvbnRhaW5lcl9vZih3b3JrX3JlYm9vdCwgc3RydWN0IGlwd19kZXYsCiAJCQl3b3JrX3JlYm9vdCk7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpcHctPmxpbms7Ci0JaW50IHJldCA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7Ci0KLQlpZiAocmV0ICE9IDApCi0JCWNzX2Vycm9yKGxpbmssIFJlc2V0Q2FyZCwgcmV0KTsKKwlwY21jaWFfcmVzZXRfY2FyZChsaW5rLT5zb2NrZXQpOwogfQogCiBzdGF0aWMgdm9pZCBzaWduYWxsZWRfcmVib290X2NhbGxiYWNrKHZvaWQgKmNhbGxiYWNrX2RhdGEpCkBAIC03OSwyMDggKzc2LDEyNyBAQAogCXNjaGVkdWxlX3dvcmsoJmlwdy0+d29ya19yZWJvb3QpOwogfQogCi1zdGF0aWMgaW50IGNvbmZpZ19pcHdpcmVsZXNzKHN0cnVjdCBpcHdfZGV2ICppcHcpCitzdGF0aWMgaW50IGlwd2lyZWxlc3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQogewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaXB3LT5saW5rOwotCWludCByZXQ7Ci0JdHVwbGVfdCB0dXBsZTsKLQl1bnNpZ25lZCBzaG9ydCBidWZbNjRdOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JdW5zaWduZWQgc2hvcnQgY29yX3ZhbHVlOworCXN0cnVjdCBpcHdfZGV2ICppcHcgPSBwcml2X2RhdGE7CisJc3RydWN0IHJlc291cmNlICppb19yZXNvdXJjZTsKIAltZW1yZXFfdCBtZW1yZXFfYXR0cl9tZW1vcnk7CiAJbWVtcmVxX3QgbWVtcmVxX2NvbW1vbl9tZW1vcnk7CisJaW50IHJldDsKIAotCWlwdy0+aXNfdjJfY2FyZCA9IDA7Ci0KLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7Ci0KLQlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0KLQl3aGlsZSAocmV0ID09IDApIHsKLQkJcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7Ci0JCQlnb3RvIGV4aXQwOwotCQl9Ci0JCXJldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotCX0KLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCi0JcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIHJldCk7Ci0JCWdvdG8gZXhpdDA7Ci0JfQotCi0JcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwotCQlnb3RvIGV4aXQwOwotCX0KLQotCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgcmV0KTsKLQkJZ290byBleGl0MDsKLQl9Ci0KLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwotCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7Ci0KLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMTsKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDE2OwogCiAJLyogMHg0MCBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgbGV2ZWwgbW9kZSBpbnRlcnJ1cHRzLiAqLwogCS8qIDB4MDQgZW5hYmxlcyBJUkVRIHBpbi4gKi8KLQljb3JfdmFsdWUgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4IHwgMHg0NDsKLQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY29yX3ZhbHVlOworCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleCB8IDB4NDQ7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkvKiBJUlEgYW5kIEkvTyBzZXR0aW5ncyAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJaW9fcmVzb3VyY2UgPSByZXF1ZXN0X3JlZ2lvbihwX2Rldi0+aW8uQmFzZVBvcnQxLCBwX2Rldi0+aW8uTnVtUG9ydHMxLAorCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOwogCi0JcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOworCWlmIChjZmctPm1lbS5ud2luID09IDApCisJCXJldHVybiAwOwogCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIHJldCk7Ci0JCWdvdG8gZXhpdDA7Ci0JfQorCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LkF0dHJpYnV0ZXMgPQorCQlXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEU7CisJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSA9IGNmZy0+bWVtLndpblswXS5ob3N0X2FkZHI7CisJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuU2l6ZSA9IGNmZy0+bWVtLndpblswXS5sZW47CisJaWYgKGlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUgPCAweDEwMDApCisJCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUgPSAweDEwMDA7CisJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQWNjZXNzU3BlZWQgPSAwOwogCi0JcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwotCQlnb3RvIGV4aXQwOwotCX0KLQotCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwotCQlnb3RvIGV4aXQwOwotCX0KLQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0JbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0JbGluay0+aXJxLkhhbmRsZXIgPSBpcHdpcmVsZXNzX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBpcHctPmhhcmR3YXJlOwotCi0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQotCWlmIChyZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIHJldCk7Ci0JCWdvdG8gZXhpdDA7Ci0JfQotCi0JcmVxdWVzdF9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEsCi0JCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKLQotCS8qIG1lbW9yeSBzZXR0aW5ncyAqLwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0KLQlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgcmV0KTsKLQkJZ290byBleGl0MTsKLQl9Ci0KLQlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQotCWlmIChyZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7Ci0JCWdvdG8gZXhpdDE7Ci0JfQotCi0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKLQotCWlmIChyZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCByZXQpOwotCQlnb3RvIGV4aXQxOwotCX0KLQotCWlmIChwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS5ud2luID4gMCkgewotCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5BdHRyaWJ1dGVzID0KLQkJCVdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKLQkJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSA9Ci0JCQlwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS53aW5bMF0uaG9zdF9hZGRyOwotCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5TaXplID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5tZW0ud2luWzBdLmxlbjsKLQkJaWYgKGlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUgPCAweDEwMDApCi0JCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5TaXplID0gMHgxMDAwOwotCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5BY2Nlc3NTcGVlZCA9IDA7Ci0KLQkJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnksCisJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCAmaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnksCiAJCQkJJmlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gMCkgewotCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgcmV0KTsKLQkJCWdvdG8gZXhpdDE7Ci0JCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDE7CiAKLQkJbWVtcmVxX2NvbW1vbl9tZW1vcnkuQ2FyZE9mZnNldCA9Ci0JCQlwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS53aW5bMF0uY2FyZF9hZGRyOwotCQltZW1yZXFfY29tbW9uX21lbW9yeS5QYWdlID0gMDsKKwltZW1yZXFfY29tbW9uX21lbW9yeS5DYXJkT2Zmc2V0ID0gY2ZnLT5tZW0ud2luWzBdLmNhcmRfYWRkcjsKKwltZW1yZXFfY29tbW9uX21lbW9yeS5QYWdlID0gMDsKIAotCQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnksCisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSwKIAkJCQkmbWVtcmVxX2NvbW1vbl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gMCkgewotCQkJY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgcmV0KTsKLQkJCWdvdG8gZXhpdDE7Ci0JCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDI7CiAKLQkJaXB3LT5pc192Ml9jYXJkID0KLQkJCXBhcnNlLmNmdGFibGVfZW50cnkubWVtLndpblswXS5sZW4gPT0gMHgxMDA7CisJaXB3LT5pc192Ml9jYXJkID0gY2ZnLT5tZW0ud2luWzBdLmxlbiA9PSAweDEwMDsKIAotCQlpcHctPmNvbW1vbl9tZW1vcnkgPSBpb3JlbWFwKGlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LkJhc2UsCisJaXB3LT5jb21tb25fbWVtb3J5ID0gaW9yZW1hcChpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5CYXNlLAogCQkJCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUpOwotCQlyZXF1ZXN0X21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSwKLQkJCQlpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5TaXplLCBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKKwlyZXF1ZXN0X21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuQmFzZSwKKwkJCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUsCisJCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKIAotCQlpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuQXR0cmlidXRlcyA9Ci0JCQlXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEU7Ci0JCWlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5CYXNlID0gMDsKLQkJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LlNpemUgPSAwOwkvKiB0aGlzIHVzZWQgdG8gYmUgMHgxMDAwICovCi0JCWlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5BY2Nlc3NTcGVlZCA9IDA7CisJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkF0dHJpYnV0ZXMgPQorCQlXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8IFdJTl9FTkFCTEU7CisJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UgPSAwOworCWlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5TaXplID0gMDsJLyogdGhpcyB1c2VkIHRvIGJlIDB4MTAwMCAqLworCWlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5BY2Nlc3NTcGVlZCA9IDA7CiAKLQkJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LAorCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgJmlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeSwKIAkJCQkmaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gMCkgewotCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgcmV0KTsKLQkJCWdvdG8gZXhpdDI7Ci0JCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDI7CiAKLQkJbWVtcmVxX2F0dHJfbWVtb3J5LkNhcmRPZmZzZXQgPSAwOwotCQltZW1yZXFfYXR0cl9tZW1vcnkuUGFnZSA9IDA7CisJbWVtcmVxX2F0dHJfbWVtb3J5LkNhcmRPZmZzZXQgPSAwOworCW1lbXJlcV9hdHRyX21lbW9yeS5QYWdlID0gMDsKIAotCQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5LAorCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5LAogCQkJCSZtZW1yZXFfYXR0cl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gMCkgewotCQkJY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgcmV0KTsKLQkJCWdvdG8gZXhpdDI7Ci0JCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDM7CiAKLQkJaXB3LT5hdHRyX21lbW9yeSA9IGlvcmVtYXAoaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UsCisJaXB3LT5hdHRyX21lbW9yeSA9IGlvcmVtYXAoaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UsCiAJCQkJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LlNpemUpOwotCQlyZXF1ZXN0X21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UsIGlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5TaXplLAotCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOwotCX0KKwlyZXF1ZXN0X21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UsCisJCQlpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuU2l6ZSwgSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CisKKwlyZXR1cm4gMDsKKworZXhpdDM6CisJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCBpcHctPmhhbmRsZV9hdHRyX21lbW9yeSk7CitleGl0MjoKKwlpZiAoaXB3LT5jb21tb25fbWVtb3J5KSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5CYXNlLAorCQkJCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUpOworCQlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2RldiwgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSk7CisJfSBlbHNlCisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2RldiwgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSk7CitleGl0MToKKwlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBjb25maWdfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQoreworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaXB3LT5saW5rOworCWludCByZXQgPSAwOworCisJaXB3LT5pc192Ml9jYXJkID0gMDsKKworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBpcHdpcmVsZXNzX3Byb2JlLCBpcHcpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOworCWxpbmstPmlycS5IYW5kbGVyID0gaXB3aXJlbGVzc19pbnRlcnJ1cHQ7CiAKIAlJTklUX1dPUksoJmlwdy0+d29ya19yZWJvb3QsIHNpZ25hbGxlZF9yZWJvb3Rfd29yayk7CiAKQEAgLTI5MSwxMCArMjA3LDggQEAKIAogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKIAotCWlmIChyZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCByZXQpOwotCQlnb3RvIGV4aXQzOwotCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDsKIAogCXByaW50ayhLRVJOX0lORk8gSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSAiOiBDYXJkIHR5cGUgJXNcbiIsCiAJCQlpcHctPmlzX3YyX2NhcmQgPyAiVjIvVjMiIDogIlYxIik7CkBAIC0zMTYsMTIgKzIzMCwxMiBAQAogCiAJaXB3LT5uZXR3b3JrID0gaXB3aXJlbGVzc19uZXR3b3JrX2NyZWF0ZShpcHctPmhhcmR3YXJlKTsKIAlpZiAoIWlwdy0+bmV0d29yaykKLQkJZ290byBleGl0MzsKKwkJZ290byBleGl0OwogCiAJaXB3LT50dHkgPSBpcHdpcmVsZXNzX3R0eV9jcmVhdGUoaXB3LT5oYXJkd2FyZSwgaXB3LT5uZXR3b3JrLAogCQkJaXB3LT5ub2Rlcyk7CiAJaWYgKCFpcHctPnR0eSkKLQkJZ290byBleGl0MzsKKwkJZ290byBleGl0OwogCiAJaXB3aXJlbGVzc19pbml0X2hhcmR3YXJlX3YyX3YzKGlwdy0+aGFyZHdhcmUpOwogCkBAIC0zMzEsMzUgKzI0NSwyNyBAQAogCSAqLwogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwogCi0JaWYgKHJldCAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCByZXQpOwotCQlnb3RvIGV4aXQ0OwotCX0KKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXhpdDsKIAogCWxpbmstPmRldl9ub2RlID0gJmlwdy0+bm9kZXNbMF07CiAKIAlyZXR1cm4gMDsKIAotZXhpdDQ6Ci0JcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwotZXhpdDM6CitleGl0OgogCWlmIChpcHctPmF0dHJfbWVtb3J5KSB7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuQmFzZSwKIAkJCQlpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnkuU2l6ZSk7CiAJCWlvdW5tYXAoaXB3LT5hdHRyX21lbW9yeSk7Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmhhbmRsZV9hdHRyX21lbW9yeSk7Ci0JCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5KTsKIAl9Ci1leGl0MjoKIAlpZiAoaXB3LT5jb21tb25fbWVtb3J5KSB7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihpcHctPnJlcXVlc3RfY29tbW9uX21lbW9yeS5CYXNlLAogCQkJCWlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LlNpemUpOwogCQlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKKwkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOwogCX0KLWV4aXQxOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKLWV4aXQwOgogCXJldHVybiAtMTsKIH0KIApAQCAtMzc4LDkgKzI4NCw5IEBACiAJCWlvdW5tYXAoaXB3LT5hdHRyX21lbW9yeSk7CiAJfQogCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpCi0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKKwkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGlwdy0+bGluaywgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSk7CiAJaWYgKGlwdy0+YXR0cl9tZW1vcnkpCi0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmhhbmRsZV9hdHRyX21lbW9yeSk7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmxpbmssIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5KTsKIAogCS8qIEJyZWFrIHRoZSBsaW5rIHdpdGggQ2FyZCBTZXJ2aWNlcyAqLwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShpcHctPmxpbmspOwpAQCAtNDA2LDcgKzMxMiw2IEBACiAKIAlpcHctPmxpbmsgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpcHc7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gaXB3OwogCiAJLyogTGluayB0aGlzIGRldmljZSBpbnRvIG91ciBkZXZpY2UgbGlzdC4gKi8KIAlsaW5rLT5kZXZfbm9kZSA9ICZpcHctPm5vZGVzWzBdOwpAQCAtNDIxLDcgKzMyNiw2IEBACiAJcmV0ID0gY29uZmlnX2lwd2lyZWxlc3MoaXB3KTsKIAogCWlmIChyZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZWdpc3RlckNsaWVudCwgcmV0KTsKIAkJaXB3aXJlbGVzc19kZXRhY2gobGluayk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IGNhZjZlNGQuLmMzMWEwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTU1NCw3ICs1NTQsNiBAQAogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0gICAgbGluay0+aXJxLklSUUluZm8xICAgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKQEAgLTU3Miw2OSArNTcxLDUxIEBACiAvKiBDYXJkIGhhcyBiZWVuIGluc2VydGVkLgogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbnQgbWdzbHBjX2lvcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoY2ZnLT5pby5ud2luID4gMCkgeworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwkJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CiAKIHN0YXRpYyBpbnQgbWdzbHBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBNR1NMUENfSU5GTyAqaW5mbyA9IGxpbmstPnByaXY7Ci0gICAgdHVwbGVfdCB0dXBsZTsKLSAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIGludCBsYXN0X2ZuLCBsYXN0X3JldDsKLSAgICB1X2NoYXIgYnVmWzY0XTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmc7CisgICAgaW50IHJldDsKIAogICAgIGlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCSAgICBwcmludGsoIm1nc2xwY19jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotICAgIC8qIGdldCBDSVMgY29uZmlndXJhdGlvbiBlbnRyeSAqLwotCi0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQotICAgIGNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0gICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSk7Ci0KLSAgICBpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwotICAgIGlmIChjZmctPmluZGV4ID09IDApCi0JICAgIGdvdG8gY3NfZmFpbGVkOwotCi0gICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0gICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotICAgIC8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDA7Ci0gICAgaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkgICAgY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCSAgICBpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkgICAgaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JICAgIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0gICAgfQorICAgIHJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtZ3NscGNfaW9wcm9iZSwgTlVMTCk7CisgICAgaWYgKHJldCAhPSAwKQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gODsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzIHw9IElSUV9IQU5ETEVfUFJFU0VOVDsKICAgICBsaW5rLT5pcnEuSGFuZGxlciAgICAgPSBtZ3NscGNfaXNyOwotICAgIGxpbmstPmlycS5JbnN0YW5jZSAgICA9IGluZm87Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOworICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgaW5mby0+aW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKICAgICBpbmZvLT5pcnFfbGV2ZWwgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CkBAIC02NTQsOCArNjM1LDcgQEAKICAgICBwcmludGsoIlxuIik7CiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CitmYWlsZWQ6CiAgICAgbWdzbHBjX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCmluZGV4IDQ3YzJkMjcuLmYwNmJiMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwpAQCAtMzEsNyArMzEsNyBAQAogCiBlbnVtIHRwbV9jb25zdCB7CiAJVFBNX01JTk9SID0gMjI0LAkvKiBvZmZpY2lhbGx5IGFzc2lnbmVkICovCi0JVFBNX0JVRlNJWkUgPSAyMDQ4LAorCVRQTV9CVUZTSVpFID0gNDA5NiwKIAlUUE1fTlVNX0RFVklDRVMgPSAyNTYsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IDBiNzNlNGUuLjI0MDVmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC0yNTcsNiArMjU3LDEwIEBACiAJcmV0dXJuIHNpemU7CiB9CiAKK3N0YXRpYyBpbnQgaXRwbTsKK21vZHVsZV9wYXJhbShpdHBtLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXRwbSwgIkZvcmNlIGlUUE0gd29ya2Fyb3VuZHMgKGZvdW5kIG9uIHNvbWUgTGVub3ZvIGxhcHRvcHMpIik7CisKIC8qCiAgKiBJZiBpbnRlcnJ1cHRzIGFyZSB1c2VkIChzaWduYWxlZCBieSBhbiBpcnEgc2V0IGluIHRoZSB2ZW5kb3Igc3RydWN0dXJlKQogICogdHBtLmMgY2FuIHNraXAgcG9sbGluZyBmb3IgdGhlIGRhdGEgdG8gYmUgYXZhaWxhYmxlIGFzIHRoZSBpbnRlcnJ1cHQgaXMKQEAgLTI5Myw3ICsyOTcsNyBAQAogCQl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsCiAJCQkgICAgICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSk7CiAJCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOwotCQlpZiAoKHN0YXR1cyAmIFRQTV9TVFNfREFUQV9FWFBFQ1QpID09IDApIHsKKwkJaWYgKCFpdHBtICYmIChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfRVhQRUNUKSA9PSAwKSB7CiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTQ2Nyw2ICs0NzEsMTAgQEAKIAkJICIxLjIgVFBNIChkZXZpY2UtaWQgMHglWCwgcmV2LWlkICVkKVxuIiwKIAkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOwogCisJaWYgKGl0cG0pCisJCWRldl9pbmZvKGRldiwgIkludGVsIGlUUE0gd29ya2Fyb3VuZCBlbmFibGVkXG4iKTsKKworCiAJLyogRmlndXJlIG91dCB0aGUgY2FwYWJpbGl0aWVzICovCiAJaW50ZmNhcHMgPQogCSAgICBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKQEAgLTYyOSw2ICs2MzcsNyBAQAogCXsiIiwgMH0sCQkvKiBVc2VyIFNwZWNpZmllZCAqLwogCXsiIiwgMH0JCQkvKiBUZXJtaW5hdG9yICovCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHRwbV9wbnBfdGJsKTsKIAogc3RhdGljIF9fZGV2ZXhpdCB2b2lkIHRwbV90aXNfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKaW5kZXggMzEwODk5MS4uNjZmYTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCkBAIC00MDIsMjggKzQwMiwyNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGJ1Zi53b3JrLndvcmspOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7Ci0Jc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOwotCWNoYXIgKmNoYXJfYnVmOwotCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOwogCiAJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKIAlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLwogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCS8qIFNvIHdlIGtub3cgYSBmbHVzaCBpcyBydW5uaW5nICovCi0Jc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKLQloZWFkID0gdHR5LT5idWYuaGVhZDsKLQlpZiAoaGVhZCAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmhlYWQgPSBOVUxMOwotCQlmb3IgKDs7KSB7Ci0JCQlpbnQgY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOworCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CisJCQlpbnQgY291bnQ7CisJCQljaGFyICpjaGFyX2J1ZjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOworCisJCQljb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJdGJ1ZiA9IGhlYWQ7Ci0JCQkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7CisJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBMZGlzYyBvciB1c2VyIGlzIHRyeWluZyB0byBmbHVzaCB0aGUgYnVmZmVycwpAQCAtNDQ1LDkgKzQ0Myw5IEBACiAJCQkJCQkJZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KLQkJLyogUmVzdG9yZSB0aGUgcXVldWUgaGVhZCAqLwotCQl0dHktPmJ1Zi5oZWFkID0gaGVhZDsKKwkJY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCX0KKwogCS8qIFdlIG1heSBoYXZlIGEgZGVmZXJyZWQgcmVxdWVzdCB0byBmbHVzaCB0aGUgaW5wdXQgYnVmZmVyLAogCSAgIGlmIHNvIHB1bGwgdGhlIGNoYWluIHVuZGVyIHRoZSBsb2NrIGFuZCBlbXB0eSB0aGUgcXVldWUgKi8KIAlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKSB7CkBAIC00NTUsNyArNDUzLDYgQEAKIAkJY2xlYXJfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKTsKIAkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOwogCX0KLQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOwpAQCAtNDcxLDcgKzQ2OCw3IEBACiAgKi8KIHZvaWQgdHR5X2ZsdXNoX3RvX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJZmx1c2hfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCmluZGV4IGE0YmJiMjguLmM2M2YzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCkBAIC0yMTksOCArMjE5LDE0IEBACiAKIAkvKiBpZiBub24tYmxvY2tpbmcgbW9kZSBpcyBzZXQgd2UgY2FuIHBhc3MgZGlyZWN0bHkgdG8gb3BlbiB1bmxlc3MKIAkgICB0aGUgcG9ydCBoYXMganVzdCBodW5nIHVwIG9yIGlzIGluIGFub3RoZXIgZXJyb3Igc3RhdGUgKi8KLQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAotCQkJKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgeworCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkgeworCQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCS8qIEluZGljYXRlIHdlIGFyZSBvcGVuICovCisJCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJCXR0eV9wb3J0X3JhaXNlX2R0cl9ydHMocG9ydCk7CiAJCXBvcnQtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggMGQzMjhiNS4uYTAzNWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CiAjaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCA2YjM2ZWU1Li42YWExMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJCXZlLT5ldmVudC5ldmVudCA9IGV2ZW50OwogCQkvKiBrZXJuZWwgdmlldyBpcyBjb25zb2xlcyAwLi5uLTEsIHVzZXIgc3BhY2UgdmlldyBpcwogCQkgICBjb25zb2xlIDEuLm4gd2l0aCAwIG1lYW5pbmcgY3VycmVudCwgc28gd2UgbXVzdCBiaWFzICovCi0JCXZlLT5ldmVudC5vbGQgPSBvbGQgKyAxOwotCQl2ZS0+ZXZlbnQubmV3ID0gbmV3ICsgMTsKKwkJdmUtPmV2ZW50Lm9sZGV2ID0gb2xkICsgMTsKKwkJdmUtPmV2ZW50Lm5ld2V2ID0gbmV3ICsgMTsKIAkJd2FrZSA9IDE7CiAJCXZlLT5kb25lID0gMTsKIAl9CkBAIC0xODYsNyArMTg2LDcgQEAKIAkJdnRfZXZlbnRfd2FpdCgmdncpOwogCQlpZiAodncuZG9uZSA9PSAwKQogCQkJcmV0dXJuIC1FSU5UUjsKLQl9IHdoaWxlICh2dy5ldmVudC5uZXcgIT0gbik7CisJfSB3aGlsZSAodncuZXZlbnQubmV3ZXYgIT0gbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBACiAKIAljYXNlIFBJT19VTklNQVA6CiAJY2FzZSBHSU9fVU5JTUFQOgotCQlyZXQgPSBkb191bmltYXBfaW9jdGwoY21kLCB1cCwgcGVybSwgdmMpOworCQlyZXQgPSBjb21wYXRfdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKIAkJYnJlYWs7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMzkzOGM3OC4uZmY1N2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICosIGNwdWZyZXFfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY2hhcltDUFVGUkVRX05BTUVfTEVOXSwgY3B1ZnJlcV9jcHVfZ292ZXJub3IpOwogI2VuZGlmCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdWZyZXFfZHJpdmVyX2xvY2spOwogCkBAIC03NzQsMTAgKzc3NCwxMiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBqOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JaWYgKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpIHsKLQkJcG9saWN5LT5nb3Zlcm5vciA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSk7CisJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdjsKKworCWdvdiA9IF9fZmluZF9nb3Zlcm5vcihwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpKTsKKwlpZiAoZ292KSB7CisJCXBvbGljeS0+Z292ZXJub3IgPSBnb3Y7CiAJCWRwcmludGsoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CkBAIC05NDksMTAgKzk1MSwxMyBAQAogc3RhdGljIGludCBjcHVmcmVxX2FkZF9kZXYoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgajsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgc2libGluZzsKKyNlbmRpZgogCiAJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkpCiAJCXJldHVybiAwOwpAQCAtOTk5LDcgKzEwMDQsMTkgQEAKIAlJTklUX1dPUksoJnBvbGljeS0+dXBkYXRlLCBoYW5kbGVfdXBkYXRlKTsKIAogCS8qIFNldCBnb3Zlcm5vciBiZWZvcmUgLT5pbml0LCBzbyB0aGF0IGRyaXZlciBjb3VsZCBjaGVjayBpdCAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJZm9yX2VhY2hfb25saW5lX2NwdShzaWJsaW5nKSB7CisJCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3AgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIHNpYmxpbmcpOworCQlpZiAoY3AgJiYgY3AtPmdvdmVybm9yICYmCisJCSAgICAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwLT5yZWxhdGVkX2NwdXMpKSkgeworCQkJcG9saWN5LT5nb3Zlcm5vciA9IGNwLT5nb3Zlcm5vcjsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFmb3VuZCkKKwkJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAkvKiBjYWxsIGRyaXZlci4gRnJvbSB0aGVuIG9uIHRoZSBjcHVmcmVxIG11c3QgYmUgYWJsZQogCSAqIHRvIGFjY2VwdCBhbGwgY2FsbHMgdG8gLT52ZXJpZnkgYW5kIC0+c2V0cG9saWN5IGZvciB0aGlzIENQVQogCSAqLwpAQCAtMTExMSw3ICsxMTI4LDggQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpID0gZGF0YS0+Z292ZXJub3I7CisJc3RybmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBkYXRhLT5nb3Zlcm5vci0+bmFtZSwKKwkJCUNQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAKIAkvKiBpZiB3ZSBoYXZlIG90aGVyIENQVXMgc3RpbGwgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0byB1bmxpbmsgdGhlbSwKQEAgLTExMzUsNyArMTE1Myw4IEBACiAJCQkJY29udGludWU7CiAJCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rIGZvciBjcHUgJXVcbiIsIGopOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaikgPSBkYXRhLT5nb3Zlcm5vcjsKKwkJCXN0cm5jcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaiksCisJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pOwogI2VuZGlmCiAJCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAiY3B1ZnJlcSIpOwpAQCAtMTYwNiw5ICsxNjI1LDIyIEBACiAKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcikKIHsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpbnQgY3B1OworI2VuZGlmCisKIAlpZiAoIWdvdmVybm9yKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCBnb3Zlcm5vci0+bmFtZSkpCisJCQlzdHJjcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSwgIlwwIik7CisJfQorI2VuZGlmCisKIAltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAlsaXN0X2RlbCgmZ292ZXJub3ItPmdvdmVybm9yX2xpc3QpOwogCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCmluZGV4IGJjMzNkZGMuLmM3YjA4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCkBAIC0xMTYsOSArMTE2LDkgQEAKIAogCWlkbGVfdGltZSA9IGNwdXRpbWU2NF9zdWIoY3VyX3dhbGxfdGltZSwgYnVzeV90aW1lKTsKIAlpZiAod2FsbCkKLQkJKndhbGwgPSBjdXJfd2FsbF90aW1lOworCQkqd2FsbCA9IChjcHV0aW1lNjRfdClqaWZmaWVzX3RvX3VzZWNzKGN1cl93YWxsX3RpbWUpOwogCi0JcmV0dXJuIGlkbGVfdGltZTsKKwlyZXR1cm4gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoaWRsZV90aW1lKTs7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCAwNzE2OTlkLi40YjM0YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogCiAJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOwogCWlmICh3YWxsKQotCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisJCSp3YWxsID0gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoY3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gaWRsZV90aW1lOworCXJldHVybiAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhpZGxlX3RpbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwppbmRleCBhOTk1MmIxLi44NGM1MWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCS8qIFBhZGxvY2sgaW4gRUNCIG1vZGUgZmV0Y2hlcyBhdCBsZWFzdCBlY2JfZmV0Y2hfYnl0ZXMgb2YgZGF0YS4KIAkgKiBXZSBjb3VsZCBhdm9pZCBzb21lIGNvcHlpbmcgaGVyZSBidXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGggaXQuCiAJICovCi0JaWYgKHVubGlrZWx5KCgodW5zaWduZWQgbG9uZylpbiAmIFBBR0VfU0laRSkgKyBlY2JfZmV0Y2hfYnl0ZXMgPiBQQUdFX1NJWkUpKSB7CisJaWYgKHVubGlrZWx5KCgodW5zaWduZWQgbG9uZylpbiAmIH5QQUdFX01BU0spICsgZWNiX2ZldGNoX2J5dGVzID4gUEFHRV9TSVpFKSkgewogCQllY2JfY3J5cHRfY29weShpbiwgb3V0LCBrZXksIGN3b3JkLCBjb3VudCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJCSAgICB1OCAqaXYsIHN0cnVjdCBjd29yZCAqY3dvcmQsIGludCBjb3VudCkKIHsKIAkvKiBQYWRsb2NrIGluIENCQyBtb2RlIGZldGNoZXMgYXQgbGVhc3QgY2JjX2ZldGNoX2J5dGVzIG9mIGRhdGEuICovCi0JaWYgKHVubGlrZWx5KCgodW5zaWduZWQgbG9uZylpbiAmIFBBR0VfU0laRSkgKyBjYmNfZmV0Y2hfYnl0ZXMgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpaW4gJiB+UEFHRV9NQVNLKSArIGNiY19mZXRjaF9ieXRlcyA+IFBBR0VfU0laRSkpCiAJCXJldHVybiBjYmNfY3J5cHRfY29weShpbiwgb3V0LCBrZXksIGl2LCBjd29yZCwgY291bnQpOwogCiAJcmV0dXJuIHJlcF94Y3J5cHRfY2JjKGluLCBvdXQsIGtleSwgaXYsIGN3b3JkLCBjb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggNTkwM2E4OC4uYjQwMWRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0yNiw2ICsyNiw4IEBACiAJc2VsZWN0IERNQV9FTkdJTkUKIAlzZWxlY3QgRENBCiAJc2VsZWN0IEFTWU5DX1RYX0RJU0FCTEVfQ0hBTk5FTF9TV0lUQ0gKKwlzZWxlY3QgQVNZTkNfVFhfRElTQUJMRV9QUV9WQUxfRE1BCisJc2VsZWN0IEFTWU5DX1RYX0RJU0FCTEVfWE9SX1ZBTF9ETUEKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEludGVsKFIpIEkvT0FUIERNQSBlbmdpbmUgcHJlc2VudAogCSAgaW4gcmVjZW50IEludGVsIFhlb24gY2hpcHNldHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCmluZGV4IGJkMGIyNDguLjhmOTkzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC02MzIsMTEgKzYzMiwyMSBAQAogCSNpZiBkZWZpbmVkKENPTkZJR19BU1lOQ19YT1IpIHx8IGRlZmluZWQoQ09ORklHX0FTWU5DX1hPUl9NT0RVTEUpCiAJaWYgKCFkbWFfaGFzX2NhcChETUFfWE9SLCBkZXZpY2UtPmNhcF9tYXNrKSkKIAkJcmV0dXJuIGZhbHNlOworCisJI2lmbmRlZiBDT05GSUdfQVNZTkNfVFhfRElTQUJMRV9YT1JfVkFMX0RNQQorCWlmICghZG1hX2hhc19jYXAoRE1BX1hPUl9WQUwsIGRldmljZS0+Y2FwX21hc2spKQorCQlyZXR1cm4gZmFsc2U7CisJI2VuZGlmCiAJI2VuZGlmCiAKIAkjaWYgZGVmaW5lZChDT05GSUdfQVNZTkNfUFEpIHx8IGRlZmluZWQoQ09ORklHX0FTWU5DX1BRX01PRFVMRSkKIAlpZiAoIWRtYV9oYXNfY2FwKERNQV9QUSwgZGV2aWNlLT5jYXBfbWFzaykpCiAJCXJldHVybiBmYWxzZTsKKworCSNpZm5kZWYgQ09ORklHX0FTWU5DX1RYX0RJU0FCTEVfUFFfVkFMX0RNQQorCWlmICghZG1hX2hhc19jYXAoRE1BX1BRX1ZBTCwgZGV2aWNlLT5jYXBfbWFzaykpCisJCXJldHVybiBmYWxzZTsKKwkjZW5kaWYKIAkjZW5kaWYKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kY2EuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZGNhLmMKaW5kZXggNjlkMDI2MS4uYWJkOTAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kY2EuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RjYS5jCkBAIC05OCwxNyArOTgsMTcgQEAKIAljcHVpZF9sZXZlbF85ID0gY3B1aWRfZWF4KDkpOwogCXJlcyA9IHRlc3RfYml0KDAsICZjcHVpZF9sZXZlbF85KTsKIAlpZiAoIXJlcykKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRENBIGlzIGRpc2FibGVkIGluIEJJT1NcbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJEQ0EgaXMgZGlzYWJsZWQgaW4gQklPU1xuIik7CiAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IHN5c3RlbV9oYXNfZGNhX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitpbnQgc3lzdGVtX2hhc19kY2FfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RDQSkpCiAJCXJldHVybiBkY2FfZW5hYmxlZF9pbl9iaW9zKHBkZXYpOwogCi0JZGV2X2VycigmcGRldi0+ZGV2LCAiYm9vdCBjcHUgZG9lc24ndCBoYXZlIFg4Nl9GRUFUVVJFX0RDQVxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiYm9vdCBjcHUgZG9lc24ndCBoYXZlIFg4Nl9GRUFUVVJFX0RDQVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmggYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oCmluZGV4IGMxNGZkZmUuLjQ1ZWRkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuaApAQCAtMjk3LDkgKzI5Nyw3IEBACiAvKiBjaGFubmVsIHdhcyBmYXRhbGx5IHByb2dyYW1tZWQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19pb2F0X2J1Zyh1bnNpZ25lZCBsb25nIGVycikKIHsKLQlyZXR1cm4gISEoZXJyICYgKElPQVRfQ0hBTkVSUl9TUkNfQUREUl9FUlJ8SU9BVF9DSEFORVJSX0RFU1RfQUREUl9FUlJ8Ci0JCQkgSU9BVF9DSEFORVJSX05FWFRfQUREUl9FUlJ8SU9BVF9DSEFORVJSX0NPTlRST0xfRVJSfAotCQkJIElPQVRfQ0hBTkVSUl9MRU5HVEhfRVJSKSk7CisJcmV0dXJuICEhZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hdF91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKaW5kZXggOTZmZmFiNy4uOGYxZjdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCkBAIC0yNzksNiArMjc5LDggQEAKIAkJCXUzMiBjaGFuZXJyOwogCiAJCQljaGFuZXJyID0gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKwkJCWRldl9lcnIodG9fZGV2KGNoYW4pLCAiJXM6IENoYW5uZWwgaGFsdGVkICgleClcbiIsCisJCQkJX19mdW5jX18sIGNoYW5lcnIpOwogCQkJQlVHX09OKGlzX2lvYXRfYnVnKGNoYW5lcnIpKTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYwppbmRleCAzNWQxZTMzLi40MmY2ZjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKQEAgLTM3OCw2ICszNzgsOCBAQAogCQkJdTMyIGNoYW5lcnI7CiAKIAkJCWNoYW5lcnIgPSByZWFkbChjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOworCQkJZGV2X2Vycih0b19kZXYoY2hhbiksICIlczogQ2hhbm5lbCBoYWx0ZWQgKCV4KVxuIiwKKwkJCQlfX2Z1bmNfXywgY2hhbmVycik7CiAJCQlCVUdfT04oaXNfaW9hdF9idWcoY2hhbmVycikpOwogCQl9CiAKQEAgLTU2OSw3ICs1NzEsNyBAQAogCWR1bXBfZGVzY19kYmcoaW9hdCwgY29tcGxfZGVzYyk7CiAKIAkvKiB3ZSBsZWF2ZSB0aGUgY2hhbm5lbCBsb2NrZWQgdG8gZW5zdXJlIGluIG9yZGVyIHN1Ym1pc3Npb24gKi8KLQlyZXR1cm4gJmRlc2MtPnR4ZDsKKwlyZXR1cm4gJmNvbXBsX2Rlc2MtPnR4ZDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCkBAIC03MjgsNyArNzMwLDcgQEAKIAlkdW1wX2Rlc2NfZGJnKGlvYXQsIGNvbXBsX2Rlc2MpOwogCiAJLyogd2UgbGVhdmUgdGhlIGNoYW5uZWwgbG9ja2VkIHRvIGVuc3VyZSBpbiBvcmRlciBzdWJtaXNzaW9uICovCi0JcmV0dXJuICZkZXNjLT50eGQ7CisJcmV0dXJuICZjb21wbF9kZXNjLT50eGQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtNzM2LDEwICs3MzgsMTYgQEAKIAkgICAgICB1bnNpZ25lZCBpbnQgc3JjX2NudCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2NmLCBzaXplX3QgbGVuLAogCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJLyogc3BlY2lmeSB2YWxpZCBhZGRyZXNzIGZvciBkaXNhYmxlZCByZXN1bHQgKi8KKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1ApCisJCWRzdFswXSA9IGRzdFsxXTsKKwlpZiAoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1EpCisJCWRzdFsxXSA9IGRzdFswXTsKKwogCS8qIGhhbmRsZSB0aGUgc2luZ2xlIHNvdXJjZSBtdWx0aXBseSBjYXNlIGZyb20gdGhlIHJhaWQ2CiAJICogcmVjb3ZlcnkgcGF0aAogCSAqLwotCWlmICh1bmxpa2VseSgoZmxhZ3MgJiBETUFfUFJFUF9QUV9ESVNBQkxFX1ApICYmIHNyY19jbnQgPT0gMSkpIHsKKwlpZiAoKGZsYWdzICYgRE1BX1BSRVBfUFFfRElTQUJMRV9QKSAmJiBzcmNfY250ID09IDEpIHsKIAkJZG1hX2FkZHJfdCBzaW5nbGVfc291cmNlWzJdOwogCQl1bnNpZ25lZCBjaGFyIHNpbmdsZV9zb3VyY2VfY29lZlsyXTsKIApAQCAtNzYxLDYgKzc2OSwxMiBAQAogCQkgIHVuc2lnbmVkIGludCBzcmNfY250LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzY2YsIHNpemVfdCBsZW4sCiAJCSAgZW51bSBzdW1fY2hlY2tfZmxhZ3MgKnBxcmVzLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogeworCS8qIHNwZWNpZnkgdmFsaWQgYWRkcmVzcyBmb3IgZGlzYWJsZWQgcmVzdWx0ICovCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfUFFfRElTQUJMRV9QKQorCQlwcVswXSA9IHBxWzFdOworCWlmIChmbGFncyAmIERNQV9QUkVQX1BRX0RJU0FCTEVfUSkKKwkJcHFbMV0gPSBwcVswXTsKKwogCS8qIHRoZSBjbGVhbnVwIHJvdXRpbmUgb25seSBzZXRzIGJpdHMgb24gdmFsaWRhdGUgZmFpbHVyZSwgaXQKIAkgKiBkb2VzIG5vdCBjbGVhciBiaXRzIG9uIHZhbGlkYXRlIHN1Y2Nlc3MuLi4gc28gY2xlYXIgaXQgaGVyZQogCSAqLwpAQCAtNzc4LDkgKzc5Miw5IEBACiAJZG1hX2FkZHJfdCBwcVsyXTsKIAogCW1lbXNldChzY2YsIDAsIHNyY19jbnQpOwotCWZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUTsKIAlwcVswXSA9IGRzdDsKLQlwcVsxXSA9IH4wOworCWZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUTsKKwlwcVsxXSA9IGRzdDsgLyogc3BlY2lmeSB2YWxpZCBhZGRyZXNzIGZvciBkaXNhYmxlZCByZXN1bHQgKi8KIAogCXJldHVybiBfX2lvYXQzX3ByZXBfcHFfbG9jayhjaGFuLCBOVUxMLCBwcSwgc3JjLCBzcmNfY250LCBzY2YsIGxlbiwKIAkJCQkgICAgZmxhZ3MpOwpAQCAtODAwLDkgKzgxNCw5IEBACiAJKnJlc3VsdCA9IDA7CiAKIAltZW1zZXQoc2NmLCAwLCBzcmNfY250KTsKLQlmbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CiAJcHFbMF0gPSBzcmNbMF07Ci0JcHFbMV0gPSB+MDsKKwlmbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisJcHFbMV0gPSBwcVswXTsgLyogc3BlY2lmeSB2YWxpZCBhZGRyZXNzIGZvciBkaXNhYmxlZCByZXN1bHQgKi8KIAogCXJldHVybiBfX2lvYXQzX3ByZXBfcHFfbG9jayhjaGFuLCByZXN1bHQsIHBxLCAmc3JjWzFdLCBzcmNfY250IC0gMSwgc2NmLAogCQkJCSAgICBsZW4sIGZsYWdzKTsKQEAgLTExMTcsNiArMTEzMSw3IEBACiBpbnQgX19kZXZpbml0IGlvYXQzX2RtYV9wcm9iZShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSwgaW50IGRjYSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldmljZS0+cGRldjsKKwlpbnQgZGNhX2VuID0gc3lzdGVtX2hhc19kY2FfZW5hYmxlZChwZGV2KTsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZG1hOwogCXN0cnVjdCBkbWFfY2hhbiAqYzsKIAlzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbjsKQEAgLTExMzcsNiArMTE1MiwxMSBAQAogCWRtYS0+ZGV2aWNlX3ByZXBfZG1hX2ludGVycnVwdCA9IGlvYXQzX3ByZXBfaW50ZXJydXB0X2xvY2s7CiAKIAljYXAgPSByZWFkbChkZXZpY2UtPnJlZ19iYXNlICsgSU9BVF9ETUFfQ0FQX09GRlNFVCk7CisKKwkvKiBkY2EgaXMgaW5jb21wYXRpYmxlIHdpdGggcmFpZCBvcGVyYXRpb25zICovCisJaWYgKGRjYV9lbiAmJiAoY2FwICYgKElPQVRfQ0FQX1hPUnxJT0FUX0NBUF9QUSkpKQorCQljYXAgJj0gfihJT0FUX0NBUF9YT1J8SU9BVF9DQVBfUFEpOworCiAJaWYgKGNhcCAmIElPQVRfQ0FQX1hPUikgewogCQlpc19yYWlkX2RldmljZSA9IHRydWU7CiAJCWRtYS0+bWF4X3hvciA9IDg7CkBAIC0xMTg2LDYgKzEyMDYsMTYgQEAKIAkJZGV2aWNlLT50aW1lcl9mbiA9IGlvYXQyX3RpbWVyX2V2ZW50OwogCX0KIAorCSNpZmRlZiBDT05GSUdfQVNZTkNfVFhfRElTQUJMRV9QUV9WQUxfRE1BCisJZG1hX2NhcF9jbGVhcihETUFfUFFfVkFMLCBkbWEtPmNhcF9tYXNrKTsKKwlkbWEtPmRldmljZV9wcmVwX2RtYV9wcV92YWwgPSBOVUxMOworCSNlbmRpZgorCisJI2lmZGVmIENPTkZJR19BU1lOQ19UWF9ESVNBQkxFX1hPUl9WQUxfRE1BCisJZG1hX2NhcF9jbGVhcihETUFfWE9SX1ZBTCwgZG1hLT5jYXBfbWFzayk7CisJZG1hLT5kZXZpY2VfcHJlcF9kbWFfeG9yX3ZhbCA9IE5VTEw7CisJI2VuZGlmCisKIAkvKiAtPSBJT0FUIHZlci4zIHdvcmthcm91bmRzID0tICovCiAJLyogV3JpdGUgQ0hBTkVSUk1TS19JTlQgd2l0aCAzRTA3aCB0byBtYXNrIG91dCB0aGUgZXJyb3JzCiAJICogdGhhdCBjYW4gY2F1c2Ugc3RhYmlsaXR5IGlzc3VlcyBmb3IgSU9BVCB2ZXIuMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9ody5oIGIvZHJpdmVycy9kbWEvaW9hdC9ody5oCmluZGV4IDk5YWZiMTJiLi42MGU2NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2h3LmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9ody5oCkBAIC0zOSw2ICszOSw4IEBACiAjZGVmaW5lIElPQVRfVkVSXzNfMCAgICAgICAgICAgIDB4MzAgICAgLyogVmVyc2lvbiAzLjAgKi8KICNkZWZpbmUgSU9BVF9WRVJfM18yICAgICAgICAgICAgMHgzMiAgICAvKiBWZXJzaW9uIDMuMiAqLwogCitpbnQgc3lzdGVtX2hhc19kY2FfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKIHN0cnVjdCBpb2F0X2RtYV9kZXNjcmlwdG9yIHsKIAl1aW50MzJfdAlzaXplOwogCXVuaW9uIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvcmVnaXN0ZXJzLmggYi9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oCmluZGV4IDYzMDM4ZTEuLmYwMTVlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9yZWdpc3RlcnMuaApAQCAtOTIsOSArOTIsNyBAQAogI2RlZmluZSBJT0FUX0NIQU5DVFJMX0VSUl9DT01QTEVUSU9OX0VOCQkweDAwMDQKICNkZWZpbmUgSU9BVF9DSEFOQ1RSTF9JTlRfUkVBUk0JCQkweDAwMDEKICNkZWZpbmUgSU9BVF9DSEFOQ1RSTF9SVU4JCQkoSU9BVF9DSEFOQ1RSTF9JTlRfUkVBUk0gfFwKLQkJCQkJCSBJT0FUX0NIQU5DVFJMX0VSUl9DT01QTEVUSU9OX0VOIHxcCi0JCQkJCQkgSU9BVF9DSEFOQ1RSTF9BTllfRVJSX0FCT1JUX0VOIHxcCi0JCQkJCQkgSU9BVF9DSEFOQ1RSTF9FUlJfSU5UX0VOKQorCQkJCQkJIElPQVRfQ0hBTkNUUkxfQU5ZX0VSUl9BQk9SVF9FTikKIAogI2RlZmluZSBJT0FUX0RNQV9DT01QX09GRlNFVAkJCTB4MDIJLyogMTYtYml0IERNQSBjaGFubmVsIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgSU9BVF9ETUFfQ09NUF9WMQkJCTB4MDAwMQkvKiBDb21wYXRpYmlsaXR5IHdpdGggRE1BIHZlcnNpb24gMSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggYjNiMDY1Yy4uMDM0ZWNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC02NDAsMTcgKzY0MCwxNiBAQAogI2VuZGlmCiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldjsKIAorCS8qIGdldCBwbGF0Zm9ybSBkYXRhICovCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzaGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9kbWFlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghc2hkZXYpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gZW5vdWdoIG1lbW9yeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gc2hkZXZfZXJyOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiBnZXQgcGxhdGZvcm0gZGF0YSAqLwotCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCi0JCWdvdG8gc2hkZXZfZXJyOwotCiAJLyogcGxhdGZvcm0gZGF0YSAqLwogCW1lbWNweSgmc2hkZXYtPnBkYXRhLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwKIAkJCXNpemVvZihzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSkpOwpAQCAtNzIyLDcgKzcyMSw2IEBACiByc3RfZXJyOgogCWtmcmVlKHNoZGV2KTsKIAotc2hkZXZfZXJyOgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDRmNGFjODIuLmEzODgzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMTEyMiw3ICsxMTIyLDcgQEAKIAkJZGVidWdmMCgiUmVhZGluZyBLOF9EUkFNX0JBU0VfTE9XIGZhaWxlZFxuIik7CiAKIAkvKiBFeHRyYWN0IHBhcnRzIGludG8gc2VwYXJhdGUgZGF0YSBlbnRyaWVzICovCi0JcHZ0LT5kcmFtX2Jhc2VbZHJhbV0gPSAoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgMjQ7CisJcHZ0LT5kcmFtX2Jhc2VbZHJhbV0gPSAoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgODsKIAlwdnQtPmRyYW1fSW50bHZFbltkcmFtXSA9IChsb3cgPj4gOCkgJiAweDc7CiAJcHZ0LT5kcmFtX3J3X2VuW2RyYW1dID0gKGxvdyAmIDB4Myk7CiAKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJICogRXh0cmFjdCBwYXJ0cyBpbnRvIHNlcGFyYXRlIGRhdGEgZW50cmllcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QgbWVtb3J5CiAJICogbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93ZXIgMjQgYml0cyBuZWVkIHRvIGJlIGFsbCBvbmVzCiAJICovCi0JcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KSBsb3cgJiAweEZGRkYwMDAwKSA8PCAyNCkgfCAweDAwRkZGRkZGOworCXB2dC0+ZHJhbV9saW1pdFtkcmFtXSA9ICgoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgOCkgfCAweDAwRkZGRkZGOwogCXB2dC0+ZHJhbV9JbnRsdlNlbFtkcmFtXSA9IChsb3cgPj4gOCkgJiAweDc7CiAJcHZ0LT5kcmFtX0RzdE5vZGVbZHJhbV0gPSAobG93ICYgMHg3KTsKIH0KQEAgLTEzNjksNyArMTM2OSw3IEBACiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKIAlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAotCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCAyNCk7CisJCQkgICAgICAgKCgodTY0KWxvd19iYXNlICAmIDB4RkZGRjAwMDApIDw8IDgpOwogCiAJbG93X29mZnNldCA9IEs4X0RSQU1fTElNSVRfTE9XICsgKGRyYW0gPDwgMyk7CiAJaGlnaF9vZmZzZXQgPSBGMTBfRFJBTV9MSU1JVF9ISUdIICsgKGRyYW0gPDwgMyk7CkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCSAqIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgcmVnaW9uLCBzbyBsb3cgMjQgYml0cyBuZWVkIHRvIGJlIGFsbCBvbmVzLgogCSAqLwogCXB2dC0+ZHJhbV9saW1pdFtkcmFtXSA9ICgoKHU2NCloaWdoX2xpbWl0ICYgMHgwMDAwMDBGRikgPDwgNDApIHwKLQkJCQkoKCh1NjQpIGxvd19saW1pdCAmIDB4RkZGRjAwMDApIDw8IDI0KSB8CisJCQkJKCgodTY0KSBsb3dfbGltaXQgJiAweEZGRkYwMDAwKSA8PCA4KSB8CiAJCQkJMHgwMEZGRkZGRjsKIH0KIApAQCAtMjI1NCw3ICsyMjU0LDcgQEAKIHsKIAl1MzIgZWMgID0gRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKIAl1MzIgeGVjID0gRVhUX0VSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0JaW50IGVjY190eXBlID0gaW5mby0+bmJzaCAmICgweDMgPDwgMTMpOworCWludCBlY2NfdHlwZSA9IChpbmZvLT5uYnNoID4+IDEzKSAmIDB4MzsKIAogCS8qIEJhaWwgZWFybHkgb3V0IGlmIHRoaXMgd2FzIGFuICdvYnNlcnZlZCcgZXJyb3IgKi8KIAlpZiAoUFAoZWMpID09IEs4X05CU0xfUFBfT0JTKQpAQCAtMzE2Myw3ICszMTYzLDcgQEAKIAlvcHN0YXRlX2luaXQoKTsKIAogCWlmIChjYWNoZV9rOF9ub3J0aGJyaWRnZXMoKSA8IDApCi0JCWdvdG8gZXJyX2V4aXQ7CisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ2NF9wY2lfZHJpdmVyKTsKIAlpZiAoZXJyKQpAQCAtMzE4OSw4ICszMTg5LDYgQEAKIAogZXJyXzJuZF9zdGFnZToKIAlkZWJ1Z2YwKCIybmQgc3RhZ2UgZmFpbGVkXG4iKTsKLQotZXJyX2V4aXQ6CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ2NF9wY2lfZHJpdmVyKTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKaW5kZXggNzEzZWQ3ZC4uNjg5Y2M2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMyw3ICszLDYgQEAKIAogc3RhdGljIGJvb2wgcmVwb3J0X2dhcnRfZXJyb3JzOwogc3RhdGljIHZvaWQgKCpuYl9idXNfZGVjb2RlcikoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncyk7Ci1zdGF0aWMgdm9pZCAoKm9yaWdfbWNlX2NhbGxiYWNrKShzdHJ1Y3QgbWNlICptKTsKIAogdm9pZCBhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGJvb2wgdikKIHsKQEAgLTM2Myw4ICszNjIsMTAgQEAKIAkJcHJfd2FybmluZygiSHVoPyBVbmtub3duIE1DRSBlcnJvciAweCV4XG4iLCBlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFtZF9kZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCitzdGF0aWMgaW50IGFtZF9kZWNvZGVfbWNlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJICAgdm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgbWNlICptID0gKHN0cnVjdCBtY2UgKilkYXRhOwogCXN0cnVjdCBlcnJfcmVncyByZWdzOwogCWludCBub2RlLCBlY2M7CiAKQEAgLTQyMCwyMCArNDIxLDIyIEBACiAJfQogCiAJYW1kX2RlY29kZV9lcnJfY29kZShtLT5zdGF0dXMgJiAweGZmZmYpOworCisJcmV0dXJuIE5PVElGWV9TVE9QOwogfQogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFtZF9tY2VfZGVjX25iID0geworCS5ub3RpZmllcl9jYWxsCT0gYW1kX2RlY29kZV9tY2UsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBtY2VfYW1kX2luaXQodm9pZCkKIHsKIAkvKgogCSAqIFdlIGNhbiBkZWNvZGUgTUNFcyBmb3IgT3B0ZXJvbiBhbmQgbGF0ZXIgQ1BVczoKIAkgKi8KIAlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYKLQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikpIHsKLQkJLyogc2FmZSB0aGUgZGVmYXVsdCBkZWNvZGUgbWNlIGNhbGxiYWNrICovCi0JCW9yaWdfbWNlX2NhbGxiYWNrID0geDg2X21jZV9kZWNvZGVfY2FsbGJhY2s7Ci0KLQkJeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sgPSBhbWRfZGVjb2RlX21jZTsKLQl9CisJICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweGYpKQorCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgJmFtZF9tY2VfZGVjX25iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQyLDcgKzQ0NSw3IEBACiAjaWZkZWYgTU9EVUxFCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWNlX2FtZF9leGl0KHZvaWQpCiB7Ci0JeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sgPSBvcmlnX21jZV9jYWxsYmFjazsKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmeDg2X21jZV9kZWNvZGVyX2NoYWluLCAmYW1kX21jZV9kZWNfbmIpOwogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBNQ0UgZGVjb2RlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggZDMzNTA4Ni4uNzdhOTU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCkBAIC0xMTczLDcgKzExNzMsNyBAQAogCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocHZ0LT5icmFuY2hfMSwgd2hlcmUsCiAJCQkJCSZwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQkJZGVidWdmMigiTVRSJWQgd2hlcmU9MHgleCBCMSB2YWx1ZT0weCV4XG4iLCBzbG90X3JvdywKLQkJCQl3aGVyZSwgcHZ0LT5iMF9tdHJbc2xvdF9yb3ddKTsKKwkJCQl3aGVyZSwgcHZ0LT5iMV9tdHJbc2xvdF9yb3ddKTsKIAkJfSBlbHNlIHsKIAkJCXB2dC0+YjFfbXRyW3Nsb3Rfcm93XSA9IDA7CiAJCX0KQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJc3RydWN0IGNzcm93X2luZm8gKnBfY3Nyb3c7CiAJaW50IGVtcHR5LCBjaGFubmVsX2NvdW50OwogCWludCBtYXhfY3Nyb3dzOwotCWludCBtdHI7CisJaW50IG10ciwgbXRyMTsKIAlpbnQgY3Nyb3dfbWVnczsKIAlpbnQgY2hhbm5lbDsKIAlpbnQgY3Nyb3c7CkBAIC0xMjUxLDkgKzEyNTEsMTAgQEAKIAogCQkvKiB1c2UgYnJhbmNoIDAgZm9yIHRoZSBiYXNpcyAqLwogCQltdHIgPSBwdnQtPmIwX210cltjc3JvdyA+PiAxXTsKKwkJbXRyMSA9IHB2dC0+YjFfbXRyW2Nzcm93ID4+IDFdOwogCiAJCS8qIGlmIG5vIERJTU1TIG9uIHRoaXMgcm93LCBjb250aW51ZSAqLwotCQlpZiAoIU1UUl9ESU1NU19QUkVTRU5UKG10cikpCisJCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSAmJiAhTVRSX0RJTU1TX1BSRVNFTlQobXRyMSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBGQUtFIE9VVCBWQUxVRVMsIEZJWE1FICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwppbmRleCBiMDhiNmQ4Li5mOTlkMTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKQEAgLTQ2LDkgKzQ2LDEwIEBACiAvKiBMaW1pdHMgZm9yIGk1NDAwICovCiAjZGVmaW5lIE5VTV9NVFJTX1BFUl9CUkFOQ0gJNAogI2RlZmluZSBDSEFOTkVMU19QRVJfQlJBTkNICTIKKyNkZWZpbmUgTUFYX0RJTU1TX1BFUl9DSEFOTkVMCU5VTV9NVFJTX1BFUl9CUkFOQ0gKICNkZWZpbmUJTUFYX0NIQU5ORUxTCQk0Ci0jZGVmaW5lIE1BWF9ESU1NUwkJKE1BWF9DSEFOTkVMUyAqIDQpCS8qIFVwIHRvIDQgRElNTSdzIHBlciBjaGFubmVsICovCi0jZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVMgKiAyKQkJLyogbWF4IHBvc3NpYmxlIGNzcm93cyBwZXIgY2hhbm5lbCAqLworLyogbWF4IHBvc3NpYmxlIGNzcm93cyBwZXIgY2hhbm5lbCAqLworI2RlZmluZSBNQVhfQ1NST1dTCQkoTUFYX0RJTU1TX1BFUl9DSEFOTkVMKQogCiAvKiBEZXZpY2UgMTYsCiAgKiBGdW5jdGlvbiAwOiBTeXN0ZW0gQWRkcmVzcwpAQCAtMzMxLDcgKzMzMiw2IEBACiAKIHN0cnVjdCBpNTQwMF9kaW1tX2luZm8gewogCWludCBtZWdhYnl0ZXM7CQkvKiBzaXplLCAwIG1lYW5zIG5vdCBwcmVzZW50ICAqLwotCWludCBkdWFsX3Jhbms7CiB9OwogCiAvKiBkcml2ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwpAQCAtODQ5LDExICs4NDksOSBAQAogCWludCBuOwogCiAJLyogVGhlcmUgaXMgb25lIE1UUiBmb3IgZWFjaCBzbG90IHBhaXIgb2YgRkItRElNTXMsCi0JICAgRWFjaCBzbG90IG1heSBoYXZlIG9uZSBvciB0d28gcmFua3MgKDIgY3Nyb3dzKSwKIAkgICBFYWNoIHNsb3QgcGFpciBtYXkgYmUgYXQgYnJhbmNoIDAgb3IgYnJhbmNoIDEuCi0JICAgU28sIGNzcm93IHNob3VsZCBiZSBkaXZpZGVkIGJ5IGVpZ2h0CiAJICovCi0JbiA9IGNzcm93ID4+IDM7CisJbiA9IGNzcm93OwogCiAJaWYgKG4gPj0gTlVNX01UUlNfUEVSX0JSQU5DSCkgewogCQlkZWJ1Z2YwKCJFUlJPUjogdHJ5aW5nIHRvIGFjY2VzcyBhbiBpbnZhbGlkIGNzcm93OiAlZFxuIiwKQEAgLTkwNSwyNSArOTAzLDIyIEBACiAJCWFtYl9wcmVzZW50X3JlZyA9IGRldGVybWluZV9hbWJfcHJlc2VudF9yZWcocHZ0LCBjaGFubmVsKTsKIAogCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBESU1NIHByZXNlbnQgaW4gdGhpcyBESU1NIHNsb3QgKi8KLQkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IChjc3JvdyA+PiAxKSkpIHsKLQkJCWRpbmZvLT5kdWFsX3JhbmsgPSBNVFJfRElNTV9SQU5LKG10cik7CisJCWlmIChhbWJfcHJlc2VudF9yZWcgJiAoMSA8PCBjc3JvdykpIHsKKwkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKKwkJCSAqIG9uIHRoZSBEUkFNICovCisJCQlhZGRyQml0cyA9IE1UUl9EUkFNX0JBTktTX0FERFJfQklUUyhtdHIpOworCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUk9XU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIENPTFVNTiBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgUkFOSyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9SQU5LKG10cik7CiAKLQkJCWlmICghKChkaW5mby0+ZHVhbF9yYW5rID09IDApICYmCi0JCQkJKChjc3JvdyAmIDB4MSkgPT0gMHgxKSkpIHsKLQkJCQkvKiBTdGFydCB3aXRoIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgYSBCYW5rCi0JCQkJICogb24gdGhlIERSQU0gKi8KLQkJCQlhZGRyQml0cyA9IE1UUl9EUkFNX0JBTktTX0FERFJfQklUUyhtdHIpOwotCQkJCS8qIEFkZCB0aGVudW1iZXIgb2YgUk9XIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOwotCQkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIENPTFVNTiBiaXRzICovCi0JCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fQ09MU19BRERSX0JJVFMobXRyKTsKKwkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCisJCQlhZGRyQml0cyAtPSAyMDsJLyogZGl2aWRlIGJ5IDJeXjIwICovCisJCQlhZGRyQml0cyAtPSAzOwkvKiA4IGJpdHMgcGVyIGJ5dGVzICovCiAKLQkJCQlhZGRyQml0cyArPSA2OwkvKiBhZGQgNjQgYml0cyBwZXIgRElNTSAqLwotCQkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KLQkJCQlhZGRyQml0cyAtPSAzOwkvKiA4IGJpdHMgcGVyIGJ5dGVzICovCi0KLQkJCQlkaW5mby0+bWVnYWJ5dGVzID0gMSA8PCBhZGRyQml0czsKLQkJCX0KKwkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwogCQl9CiAJfQogfQpAQCAtOTUxLDEyICs5NDYsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTICh3aGljaCBpcyAjIG9mIERJTU1TICogMikKKwkvKiBTY2FuIGFsbCB0aGUgYWN0dWFsIENTUk9XUwogCSAqIGFuZCBjYWxjdWxhdGUgdGhlIGluZm9ybWF0aW9uIGZvciBlYWNoIERJTU0KIAkgKiBTdGFydCB3aXRoIHRoZSBoaWdoZXN0IGNzcm93IGZpcnN0LCB0byBkaXNwbGF5IGl0IGZpcnN0CiAJICogYW5kIHdvcmsgdG93YXJkIHRoZSAwdGggY3Nyb3cKIAkgKi8KLQltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2ggKiAyOworCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaDsKIAlmb3IgKGNzcm93ID0gbWF4X2Nzcm93cyAtIDE7IGNzcm93ID49IDA7IGNzcm93LS0pIHsKIAogCQkvKiBvbiBhbiBvZGQgY3Nyb3csIGZpcnN0IG91dHB1dCBhICdib3VuZGFyeScgbWFya2VyLApAQCAtMTA2NCw3ICsxMDU5LDcgQEAKIAogCS8qIEdldCB0aGUgc2V0IG9mIE1UUlswLTNdIHJlZ3MgYnkgZWFjaCBicmFuY2ggKi8KIAlmb3IgKHNsb3Rfcm93ID0gMDsgc2xvdF9yb3cgPCBOVU1fTVRSU19QRVJfQlJBTkNIOyBzbG90X3JvdysrKSB7Ci0JCWludCB3aGVyZSA9IE1UUjAgKyAoc2xvdF9yb3cgKiBzaXplb2YodTMyKSk7CisJCWludCB3aGVyZSA9IE1UUjAgKyAoc2xvdF9yb3cgKiBzaXplb2YodTE2KSk7CiAKIAkJLyogQnJhbmNoIDAgc2V0IG9mIE1UUiByZWdpc3RlcnMgKi8KIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocHZ0LT5icmFuY2hfMCwgd2hlcmUsCkBAIC0xMTQ2LDcgKzExNDEsNyBAQAogCXB2dCA9IG1jaS0+cHZ0X2luZm87CiAKIAljaGFubmVsX2NvdW50ID0gcHZ0LT5tYXhjaDsKLQltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2ggKiAyOworCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaDsKIAogCWVtcHR5ID0gMTsJCS8qIEFzc3VtZSBOTyBtZW1vcnkgKi8KIApAQCAtMTIxNSwyOCArMTIxMCw2IEBACiB9CiAKIC8qCi0gKiBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMocGRldiwgJm51bV9jc3Jvd3MsICZudW1fY2hhbm5lbHMpCi0gKgotICoJYXNrIHRoZSBkZXZpY2UgaG93IG1hbnkgY2hhbm5lbHMgYXJlIHByZXNlbnQgYW5kIGhvdyBtYW55IENTUk9XUwotICoJIGFzIHdlbGwKLSAqLwotc3RhdGljIHZvaWQgaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQlpbnQgKm51bV9kaW1tc19wZXJfY2hhbm5lbCwKLQkJCQkJaW50ICpudW1fY2hhbm5lbHMpCi17Ci0JdTggdmFsdWU7Ci0KLQkvKiBOZWVkIHRvIHJldHJpZXZlIGp1c3QgaG93IG1hbnkgY2hhbm5lbHMgYW5kIGRpbW1zIHBlciBjaGFubmVsIGFyZQotCSAqIHN1cHBvcnRlZCBvbiB0aGlzIG1lbW9yeSBjb250cm9sbGVyCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYRElNTVBFUkNILCAmdmFsdWUpOwotCSpudW1fZGltbXNfcGVyX2NoYW5uZWwgPSAoaW50KXZhbHVlICogMjsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1BWENILCAmdmFsdWUpOwotCSpudW1fY2hhbm5lbHMgPSAoaW50KXZhbHVlOwotfQotCi0vKgogICoJaTU0MDBfcHJvYmUxCVByb2JlIGZvciBPTkUgaW5zdGFuY2Ugb2YgZGV2aWNlIHRvIHNlZSBpZiBpdCBpcwogICoJCQlwcmVzZW50LgogICoJcmV0dXJuOgpAQCAtMTI2MywyMiArMTIzNiwxNiBAQAogCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBBc2sgdGhlIGRldmljZXMgZm9yIHRoZSBudW1iZXIgb2YgQ1NST1dTIGFuZCBDSEFOTkVMUyBzbwotCSAqIHRoYXQgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgbWVtb3J5IHJlc291cmNlcywgZXRjCi0JICoKLQkgKiBUaGUgQ2hpcHNldCB3aWxsIHJlcG9ydCB3aGF0IGl0IGNhbiBoYW5kbGUgd2hpY2ggd2lsbCBiZSBncmVhdGVyCi0JICogb3IgZXF1YWwgdG8gd2hhdCB0aGUgbW90aGVyYm9hcmQgbWFudWZhY3R1cmVyIHdpbGwgaW1wbGVtZW50LgotCSAqCi0JICogQXMgd2UgZG9uJ3QgaGF2ZSBhIG1vdGhlcmJvYXJkIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUgdG8gZGV0ZXJtaW5lCisJLyogQXMgd2UgZG9uJ3QgaGF2ZSBhIG1vdGhlcmJvYXJkIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUgdG8gZGV0ZXJtaW5lCiAJICogYWN0dWFsIG51bWJlciBvZiBzbG90cy9kaW1tcyBwZXIgY2hhbm5lbCwgd2UgdGh1cyB1dGlsaXplIHRoZQogCSAqIHJlc291cmNlIGFzIHNwZWNpZmllZCBieSB0aGUgY2hpcHNldC4gVGh1cywgd2UgbWlnaHQgaGF2ZQogCSAqIGhhdmUgbW9yZSBESU1NcyBwZXIgY2hhbm5lbCB0aGFuIGFjdHVhbGx5IG9uIHRoZSBtb2JvLCBidXQgdGhpcwogCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKIAkgKiBzb21lIGZhbmN5IG1vYm8gZGV0ZXJtaW5hdGlvbi4KIAkgKi8KLQlpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMocGRldiwgJm51bV9kaW1tc19wZXJfY2hhbm5lbCwKLQkJCQkJJm51bV9jaGFubmVscyk7Ci0JbnVtX2Nzcm93cyA9IG51bV9kaW1tc19wZXJfY2hhbm5lbCAqIDI7CisJbnVtX2RpbW1zX3Blcl9jaGFubmVsID0gTUFYX0RJTU1TX1BFUl9DSEFOTkVMOworCW51bV9jaGFubmVscyA9IE1BWF9DSEFOTkVMUzsKKwludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsOwogCiAJZGVidWdmMCgiTUM6ICVzKCk6IE51bWJlciBvZiAtIENoYW5uZWxzPSAlZCAgRElNTVM9ICVkICBDU1JPV1M9ICVkXG4iLAogCQlfX2Z1bmNfXywgbnVtX2NoYW5uZWxzLCBudW1fZGltbXNfcGVyX2NoYW5uZWwsIG51bV9jc3Jvd3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDE1N2Y2NTAuLmNmMjc0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJtcGM4NXh4X2VkYWMuaCIKIAogc3RhdGljIGludCBlZGFjX2Rldl9pZHg7CisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBlZGFjX3BjaV9pZHg7CisjZW5kaWYKIHN0YXRpYyBpbnQgZWRhY19tY19pZHg7CiAKIHN0YXRpYyB1MzIgb3JpZ19kZHJfZXJyX2Rpc2FibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IDVkNTI0MjUuLjk0MjYwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAkgICAgIShldnQgJiBPSENJMTM5NF9idXNSZXNldCkpCiAJCXJldHVybjsKIAotCWZ3X25vdGlmeSgiSVJRICUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwgZXZ0LAorCWZ3X25vdGlmeSgiSVJRICUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlCT8gIiBzZWxmSUQiCQk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9SUVBrdAkJPyAiIEFSX3JlcSIJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X1JTUGt0CQk/ICIgQVJfcmVzcCIJCTogIiIsCkBAIC0yODYsNiArMjg2LDcgQEAKIAkgICAgZXZ0ICYgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIJPyAiIHBvc3RlZFdyaXRlRXJyIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9jeWNsZVRvb0xvbmcJCT8gIiBjeWNsZVRvb0xvbmciCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzCT8gIiBjeWNsZTY0U2Vjb25kcyIJOiAiIiwKKwkgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQJPyAiIGN5Y2xlSW5jb25zaXN0ZW50Igk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsCT8gIiByZWdBY2Nlc3NGYWlsIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9idXNSZXNldAkJPyAiIGJ1c1Jlc2V0IgkJOiAiIiwKIAkgICAgZXZ0ICYgfihPSENJMTM5NF9zZWxmSURDb21wbGV0ZSB8IE9IQ0kxMzk0X1JRUGt0IHwKQEAgLTI5Myw2ICsyOTQsNyBAQAogCQkgICAgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfCBPSENJMTM5NF9pc29jaFJ4IHwKIAkJICAgIE9IQ0kxMzk0X2lzb2NoVHggfCBPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8CiAJCSAgICBPSENJMTM5NF9jeWNsZVRvb0xvbmcgfCBPSENJMTM5NF9jeWNsZTY0U2Vjb25kcyB8CisJCSAgICBPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudCB8CiAJCSAgICBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsIHwgT0hDSTEzOTRfYnVzUmVzZXQpCiAJCQkJCQk/ICIgPyIJCQk6ICIiKTsKIH0KQEAgLTE0MzksNiArMTQ0MSwxNyBAQAogCQkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZU1hc3Rlcik7CiAJfQogCisJaWYgKHVubGlrZWx5KGV2ZW50ICYgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQpKSB7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY2xlYXIgdGhpcyBldmVudCBiaXQgaW4gb3JkZXIgdG8gbWFrZQorCQkgKiBjeWNsZU1hdGNoIGlzb2Nocm9ub3VzIEkvTyB3b3JrLiAgSW4gdGhlb3J5IHdlIHNob3VsZAorCQkgKiBzdG9wIGFjdGl2ZSBjeWNsZU1hdGNoIGlzbyBjb250ZXh0cyBub3cgYW5kIHJlc3RhcnQKKwkJICogdGhlbSBhdCBsZWFzdCB0d28gY3ljbGVzIGxhdGVyLiAgKEZJWE1FPykKKwkJICovCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlmd19ub3RpZnkoImlzb2Nocm9ub3VzIGN5Y2xlIGluY29uc2lzdGVudFxuIik7CisJfQorCiAJaWYgKGV2ZW50ICYgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMpIHsKIAkJY3ljbGVfdGltZSA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lcik7CiAJCWlmICgoY3ljbGVfdGltZSAmIDB4ODAwMDAwMDApID09IDApCkBAIC0xNTI4LDYgKzE1NDEsNyBAQAogCQkgIE9IQ0kxMzk0X3JlcVR4Q29tcGxldGUgfCBPSENJMTM5NF9yZXNwVHhDb21wbGV0ZSB8CiAJCSAgT0hDSTEzOTRfaXNvY2hSeCB8IE9IQ0kxMzk0X2lzb2NoVHggfAogCQkgIE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyIHwgT0hDSTEzOTRfY3ljbGVUb29Mb25nIHwKKwkJICBPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudCB8CiAJCSAgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMgfCBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsIHwKIAkJICBPSENJMTM5NF9tYXN0ZXJJbnRFbmFibGUpOwogCWlmIChwYXJhbV9kZWJ1ZyAmIE9IQ0lfUEFSQU1fREVCVUdfQlVTUkVTRVRTKQpAQCAtMTg5MCwxNSArMTkwNCwzMCBAQAogewogCXN0cnVjdCBpc29fY29udGV4dCAqY3R4ID0KIAkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBpc29fY29udGV4dCwgY29udGV4dCk7CisJaW50IGk7CisJc3RydWN0IGRlc2NyaXB0b3IgKnBkOwogCi0JaWYgKGxhc3QtPnRyYW5zZmVyX3N0YXR1cyA9PSAwKQotCQkvKiBUaGlzIGRlc2NyaXB0b3IgaXNuJ3QgZG9uZSB5ZXQsIHN0b3AgaXRlcmF0aW9uLiAqLworCWZvciAocGQgPSBkOyBwZCA8PSBsYXN0OyBwZCsrKQorCQlpZiAocGQtPnRyYW5zZmVyX3N0YXR1cykKKwkJCWJyZWFrOworCWlmIChwZCA+IGxhc3QpCisJCS8qIERlc2NyaXB0b3Iocykgbm90IGRvbmUgeWV0LCBzdG9wIGl0ZXJhdGlvbiAqLwogCQlyZXR1cm4gMDsKIAotCWlmIChsZTE2X3RvX2NwdShsYXN0LT5jb250cm9sKSAmIERFU0NSSVBUT1JfSVJRX0FMV0FZUykKKwlpID0gY3R4LT5oZWFkZXJfbGVuZ3RoOworCWlmIChpICsgNCA8IFBBR0VfU0laRSkgeworCQkvKiBQcmVzZW50IHRoaXMgdmFsdWUgYXMgYmlnLWVuZGlhbiB0byBtYXRjaCB0aGUgcmVjZWl2ZSBjb2RlICovCisJCSooX19iZTMyICopKGN0eC0+aGVhZGVyICsgaSkgPSBjcHVfdG9fYmUzMigKKwkJCQkoKHUzMilsZTE2X3RvX2NwdShwZC0+dHJhbnNmZXJfc3RhdHVzKSA8PCAxNikgfAorCQkJCWxlMTZfdG9fY3B1KHBkLT5yZXNfY291bnQpKTsKKwkJY3R4LT5oZWFkZXJfbGVuZ3RoICs9IDQ7CisJfQorCWlmIChsZTE2X3RvX2NwdShsYXN0LT5jb250cm9sKSAmIERFU0NSSVBUT1JfSVJRX0FMV0FZUykgewogCQljdHgtPmJhc2UuY2FsbGJhY2soJmN0eC0+YmFzZSwgbGUxNl90b19jcHUobGFzdC0+cmVzX2NvdW50KSwKLQkJCQkgICAwLCBOVUxMLCBjdHgtPmJhc2UuY2FsbGJhY2tfZGF0YSk7Ci0KKwkJCQkgICBjdHgtPmhlYWRlcl9sZW5ndGgsIGN0eC0+aGVhZGVyLAorCQkJCSAgIGN0eC0+YmFzZS5jYWxsYmFja19kYXRhKTsKKwkJY3R4LT5oZWFkZXJfbGVuZ3RoID0gMDsKKwl9CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggNTBmMDE3Ni4uOThkYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTE4OCwxNCArMTg4LDcgQEAKIC8qIEltcG9zc2libGUgbG9naW5faWQsIHRvIGRldGVjdCBsb2dvdXQgYXR0ZW1wdCBiZWZvcmUgc3VjY2Vzc2Z1bCBsb2dpbiAqLwogI2RlZmluZSBJTlZBTElEX0xPR0lOX0lEIDB4MTAwMDAKIAotLyoKLSAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKLSAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAotICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCi0gKi8KLSNkZWZpbmUgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQJNTAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCisjZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFNCUDJfUkVUUllfTElNSVQJCTB4ZgkJLyogMTUgcmV0cmllcyAqLwogI2RlZmluZSBTQlAyX0NZQ0xFX0xJTUlUCQkoMHhjOCA8PCAxMikJLyogMjAwIDEyNXVzIGN5Y2xlcyAqLwpAQCAtMTAzNCw3ICsxMDI3LDYgQEAKIHsKIAlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOwogCWludCBrZXksIHZhbHVlOwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXJlY3RvcnkpOwogCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKQEAgLTEwNTksMTcgKzEwNTEsNyBAQAogCiAJCWNhc2UgU0JQMl9DU1JfVU5JVF9DSEFSQUNURVJJU1RJQ1M6CiAJCQkvKiB0aGUgdGltZW91dCB2YWx1ZSBpcyBzdG9yZWQgaW4gNTAwbXMgdW5pdHMgKi8KLQkJCXRpbWVvdXQgPSAoKHVuc2lnbmVkIGludCkgdmFsdWUgPj4gOCAmIDB4ZmYpICogNTAwOwotCQkJdGltZW91dCA9IG1heCh0aW1lb3V0LCBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVCk7Ci0JCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9Ci0JCQkJICBtaW4odGltZW91dCwgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQpOwotCi0JCQlpZiAodGltZW91dCA+IHRndC0+bWd0X29yYl90aW1lb3V0KQotCQkJCWZ3X25vdGlmeSgiJXM6IGNvbmZpZyByb20gY29udGFpbnMgJWRzICIKLQkJCQkJICAibWFuYWdlbWVudCBPUkIgdGltZW91dCwgbGltaXRpbmcgIgotCQkJCQkgICJ0byAlZHNcbiIsIHRndC0+YnVzX2lkLAotCQkJCQkgIHRpbWVvdXQgLyAxMDAwLAotCQkJCQkgIHRndC0+bWd0X29yYl90aW1lb3V0IC8gMTAwMCk7CisJCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9ICh2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7CiAJCQlicmVhazsKIAogCQljYXNlIFNCUDJfQ1NSX0xPR0lDQUxfVU5JVF9OVU1CRVI6CkBAIC0xMDg3LDYgKzEwNjksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKKyAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAorICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dChzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IHRndC0+bWd0X29yYl90aW1lb3V0OworCisJaWYgKHRpbWVvdXQgPiA0MDAwMCkKKwkJZndfbm90aWZ5KCIlczogJWRzIG1ndF9PUkJfdGltZW91dCBsaW1pdGVkIHRvIDQwc1xuIiwKKwkJCSAgdGd0LT5idXNfaWQsIHRpbWVvdXQgLyAxMDAwKTsKKworCXRndC0+bWd0X29yYl90aW1lb3V0ID0gY2xhbXBfdmFsKHRpbWVvdXQsIDUwMDAsIDQwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgc2JwMl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LCB1MzIgbW9kZWwsCiAJCQkJICB1MzIgZmlybXdhcmVfcmV2aXNpb24pCiB7CkBAIC0xMTcxLDYgKzExNjksNyBAQAogCQkJICAgICAgICZmaXJtd2FyZV9yZXZpc2lvbikgPCAwKQogCQlnb3RvIGZhaWxfdGd0X3B1dDsKIAorCXNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dCh0Z3QpOwogCXNicDJfaW5pdF93b3JrYXJvdW5kcyh0Z3QsIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggNjYyZWQ5Mi4uNTBkZTBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC02NjEsNyArNjYxLDcgQEAKIAogCQlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBkZXNjLT5jaGlwLT5kZXYsIE1LREVWKDAsIDApLAogCQkJCWRlc2MsIGlvbmFtZSA/IGlvbmFtZSA6ICJncGlvJWQiLCBncGlvKTsKLQkJaWYgKGRldikgeworCQlpZiAoIUlTX0VSUihkZXYpKSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJCQkmZ3Bpb19hdHRyX2dyb3VwKTsKQEAgLTY3OSw3ICs2NzksNyBAQAogCQkJaWYgKHN0YXR1cyAhPSAwKQogCQkJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCX0gZWxzZQotCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCXN0YXR1cyA9IFBUUl9FUlIoZGV2KTsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJc2V0X2JpdChGTEFHX0VYUE9SVCwgJmRlc2MtPmZsYWdzKTsKIAl9CkBAIC04MDAsMTEgKzgwMCwxMSBAQAogCW11dGV4X2xvY2soJnN5c2ZzX2xvY2spOwogCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGNoaXAtPmRldiwgTUtERVYoMCwgMCksIGNoaXAsCiAJCQkJImdwaW9jaGlwJWQiLCBjaGlwLT5iYXNlKTsKLQlpZiAoZGV2KSB7CisJaWYgKCFJU19FUlIoZGV2KSkgewogCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKIAkJCQkmZ3Bpb2NoaXBfYXR0cl9ncm91cCk7CiAJfSBlbHNlCi0JCXN0YXR1cyA9IC1FTk9ERVY7CisJCXN0YXR1cyA9IFBUUl9FUlIoZGV2KTsKIAljaGlwLT5leHBvcnRlZCA9IChzdGF0dXMgPT0gMCk7CiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggNTcxMWNlNS4uNGJhZjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xNDQsMTMgKzE0NCw2IEBACiAKIHN0YXRpYyB2b2lkIGxud19pcnFfdW5tYXNrKHVuc2lnbmVkIGlycSkKIHsKLQlzdHJ1Y3QgbG53X2dwaW8gKmxudyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdTMyIGdwaW8gPSBpcnEgLSBsbnctPmlycV9iYXNlOwotCXU4IHJlZyA9IGdwaW8gLyAzMjsKLQl2b2lkIF9faW9tZW0gKmdlZHI7Ci0KLQlnZWRyID0gKHZvaWQgX19pb21lbSAqKSgmbG53LT5yZWdfYmFzZS0+R0VEUltyZWddKTsKLQl3cml0ZWwoQklUKGdwaW8gJSAzMiksIGdlZHIpOwogfTsKIAogc3RhdGljIHZvaWQgbG53X2lycV9tYXNrKHVuc2lnbmVkIGlycSkKQEAgLTE4MywxMyArMTc2LDExIEBACiAJCWdlZHJfdiA9IHJlYWRsKGdlZHIpOwogCQlpZiAoIWdlZHJfdikKIAkJCWNvbnRpbnVlOwotCQlmb3IgKGdwaW8gPSByZWcqMzI7IGdwaW8gPCByZWcqMzIrMzI7IGdwaW8rKykgewotCQkJZ2Vkcl92ID0gcmVhZGwoZ2Vkcik7CisJCWZvciAoZ3BpbyA9IHJlZyozMjsgZ3BpbyA8IHJlZyozMiszMjsgZ3BpbysrKQogCQkJaWYgKGdlZHJfdiAmIEJJVChncGlvICUgMzIpKSB7CiAJCQkJcHJfZGVidWcoInBpbiAlZCB0cmlnZ2VyZWRcbiIsIGdwaW8pOwogCQkJCWdlbmVyaWNfaGFuZGxlX2lycShsbnctPmlycV9iYXNlICsgZ3Bpbyk7CiAJCQl9Ci0JCX0KIAkJLyogY2xlYXIgdGhlIGVkZ2UgZGV0ZWN0IHN0YXR1cyBiaXQgKi8KIAkJd3JpdGVsKGdlZHJfdiwgZ2Vkcik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCmluZGV4IGFmYWQxNDcuLjQ5Mzg0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKQEAgLTQ2MCw3ICs0NjAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fdHdsNDAzMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKy8qIENhbm5vdCB1c2UgX19kZXZleGl0IGFzIGdwaW9fdHdsNDAzMF9wcm9iZSgpIGNhbGxzIHVzICovCitzdGF0aWMgaW50IGdwaW9fdHdsNDAzMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHN0YXR1czsKQEAgLTQ5Myw3ICs0OTQsNyBAQAogCS5kcml2ZXIubmFtZQk9ICJ0d2w0MDMwX2dwaW8iLAogCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKIAkucHJvYmUJCT0gZ3Bpb190d2w0MDMwX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ3Bpb190d2w0MDMwX3JlbW92ZSksCisJLnJlbW92ZQkJPSBncGlvX3R3bDQwMzBfcmVtb3ZlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ3Bpb190d2w0MDMwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZjgzMWVhMS4uOTZlZGRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTkyLDYgKzkyLDcgQEAKIGNvbmZpZyBEUk1fSTkxNQogCXRyaXN0YXRlICJpOTE1IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFHUF9JTlRFTAorCXNlbGVjdCBTSE1FTQogCXNlbGVjdCBEUk1fS01TX0hFTFBFUgogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggMWZlNGUxZC4uYmJmZDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzMxLDYgKzMzMSw3IEBACiAJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAogCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAogCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rlcyk7CiAJcmV0dXJuIG1vZGU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCmluZGV4IDNjMGQyYjMuLmI1NGJhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC02MjYsNiArNjI2LDEyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIGl0IGlzIGluY29ycmVjdCBpZiBoc3luYy92c3luYyB3aWR0aCBpcyB6ZXJvICovCisJaWYgKCFoc3luY19wdWxzZV93aWR0aCB8fCAhdnN5bmNfcHVsc2Vfd2lkdGgpIHsKKwkJRFJNX0RFQlVHX0tNUygiSW5jb3JyZWN0IERldGFpbGVkIHRpbWluZy4gIgorCQkJCSJXcm9uZyBIc3luYy9Wc3luYyBwdWxzZSB3aWR0aFxuIik7CisJCXJldHVybiBOVUxMOworCX0KIAltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7CiAJaWYgKCFtb2RlKQogCQlyZXR1cm4gTlVMTDsKQEAgLTY0Nyw2ICs2NTMsMjEgQEAKIAltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArIHZzeW5jX3B1bHNlX3dpZHRoOwogCW1vZGUtPnZ0b3RhbCA9IG1vZGUtPnZkaXNwbGF5ICsgdmJsYW5rOwogCisJLyogcGVyZm9ybSB0aGUgYmFzaWMgY2hlY2sgZm9yIHRoZSBkZXRhaWxlZCB0aW1pbmcgKi8KKwlpZiAobW9kZS0+aHN5bmNfZW5kID4gbW9kZS0+aHRvdGFsIHx8CisJCW1vZGUtPnZzeW5jX2VuZCA+IG1vZGUtPnZ0b3RhbCkgeworCQlkcm1fbW9kZV9kZXN0cm95KGRldiwgbW9kZSk7CisJCURSTV9ERUJVR19LTVMoIkluY29ycmVjdCBkZXRhaWxlZCB0aW1pbmcuICIKKwkJCQkiU3luYyBpcyBiZXlvbmQgdGhlIGJsYW5rLlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFNvbWUgRURJRHMgaGF2ZSBib2d1cyBoL3Z0b3RhbCB2YWx1ZXMgKi8KKwlpZiAobW9kZS0+aHN5bmNfZW5kID4gbW9kZS0+aHRvdGFsKQorCQltb2RlLT5odG90YWwgPSBtb2RlLT5oc3luY19lbmQgKyAxOworCWlmIChtb2RlLT52c3luY19lbmQgPiBtb2RlLT52dG90YWwpCisJCW1vZGUtPnZ0b3RhbCA9IG1vZGUtPnZzeW5jX2VuZCArIDE7CisKIAlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCWlmIChwdC0+bWlzYyAmIERSTV9FRElEX1BUX0lOVEVSTEFDRUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAyM2RjOWMxLi42NWVmMDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTQ1NCwyMiArNDU0LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KTsKIAotc3RhdGljIHZvaWQgc2V0Y29scmVnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorc3RhdGljIGludCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCSAgICAgdTE2IGJsdWUsIHUxNiByZWdubywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CiAJaW50IHBpbmRleDsKIAorCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKwkJdTMyICpwYWxldHRlOworCQl1MzIgdmFsdWU7CisJCS8qIHBsYWNlIGNvbG9yIGluIHBzdWVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFsZXR0ZSA9ICh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwkJcmVkID4+PSAoMTYgLSBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJdmFsdWUgPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJcGFsZXR0ZVtyZWdub10gPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcGluZGV4ID0gcmVnbm87CiAKIAlpZiAoZmItPmJpdHNfcGVyX3BpeGVsID09IDE2KSB7CiAJCXBpbmRleCA9IHJlZ25vIDw8IDM7CiAKIAkJaWYgKGZiLT5kZXB0aCA9PSAxNiAmJiByZWdubyA+IDYzKQotCQkJcmV0dXJuOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChmYi0+ZGVwdGggPT0gMTUgJiYgcmVnbm8gPiAzMSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChmYi0+ZGVwdGggPT0gMTYpIHsKIAkJCXUxNiByLCBnLCBiOwpAQCAtNDkzLDEzICs1MTAsNyBAQAogCiAJaWYgKGZiLT5kZXB0aCAhPSAxNikKIAkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHBpbmRleCk7Ci0KLQlpZiAocmVnbm8gPCAxNiAmJiBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgewotCQkoKHUzMiAqKSBmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9Ci0JCQkocmVnbm8gPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKLQkJCShyZWdubyA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkocmVnbm8gPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIGludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtNTM2LDcgKzU0Nyw5IEBACiAJCQlpZiAodHJhbnNwKQogCQkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CiAKLQkJCXNldGNvbHJlZyhjcnRjLCBocmVkLCBoZ3JlZW4sIGhibHVlLCBzdGFydCsrLCBpbmZvKTsKKwkJCXJjID0gc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKIAkJfQogCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CkBAIC01NTUsNiArNTY4LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCBpOworCWludCByZXQ7CiAKIAlpZiAocmVnbm8gPiAyNTUpCiAJCXJldHVybiAxOwpAQCAtNTY4LDggKzU4MiwxMCBAQAogCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCiAJCQljb250aW51ZTsKIAorCQlyZXQgPSBzZXRjb2xyZWcoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8sIGluZm8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCQlzZXRjb2xyZWcoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8sIGluZm8pOwogCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC01ODMsNyArNTk5LDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CiAJaW50IGRlcHRoOwogCi0JaWYgKHZhci0+cGl4Y2xvY2sgPT0gLTEgfHwgIXZhci0+cGl4Y2xvY2spCisJaWYgKHZhci0+cGl4Y2xvY2sgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBOZWVkIHRvIHJlc2l6ZSB0aGUgZmIgb2JqZWN0ICEhISAqLwpAQCAtNjc1LDcgKzY5MSw3IEBACiAJaW50IHJldDsKIAlpbnQgaTsKIAotCWlmICh2YXItPnBpeGNsb2NrICE9IC0xKSB7CisJaWYgKHZhci0+cGl4Y2xvY2sgIT0gMCkgewogCQlEUk1fRVJST1IoIlBJWEVMIENMQ09LIFNFVFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTY5MSw3ICs3MDcsNyBAQAogCiAJCWlmIChjcnRjLT5mYiA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5mYikgewogCQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm8tPm1vZGVfc2V0KTsKKwkJCXJldCA9IGNydGMtPmZ1bmNzLT5zZXRfY29uZmlnKCZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldCk7CiAJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpAQCAtODg4LDcgKzkwNCw3IEBACiAJZmJfaGVscGVyLT5mYiA9IGZiOwogCiAJaWYgKG5ld19mYikgewotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSAtMTsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0gMDsKIAkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7CkBAIC05MjgsNyArOTQ0LDcgQEAKIHsKIAlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlpbmZvLT5maXgudmlzdWFsID0gZGVwdGggPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6Ci0JCUZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjsKKwkJRkJfVklTVUFMX1RSVUVDT0xPUjsKIAlpbmZvLT5maXgudHlwZV9hdXggPSAwOwogCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCiAJaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IDgwMzkxOTkuLmU5ZGJiNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTUyLDcgKzU1Miw3IEBACiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRCB8IFZNX0lPIHwgVk1fUEZOTUFQIHwgVk1fRE9OVEVYUEFORDsKIAl2bWEtPnZtX29wcyA9IG9iai0+ZGV2LT5kcml2ZXItPmdlbV92bV9vcHM7CiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXAtPmhhbmRsZTsKLQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpOworCXZtYS0+dm1fcGFnZV9wcm90ID0gIHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7CiAKIAkvKiBUYWtlIGEgcmVmIGZvciB0aGlzIG1hcHBpbmcgb2YgdGhlIG9iamVjdCwgc28gdGhhdCB0aGUgZmF1bHQKIAkgKiBoYW5kbGVyIGNhbiBkZXJlZmVyZW5jZSB0aGUgbW1hcCBvZmZzZXQncyBwb2ludGVyIHRvIHRoZSBvYmplY3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggYzg2MWQ4MC4uOTdkYzVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtMTAzLDYgKzEwMywxMSBAQAogCXJldHVybiBjaGlsZDsKIH0KIAorLyogZHJtX21tX3ByZV9nZXQoKSAtIHByZSBhbGxvY2F0ZSBkcm1fbW1fbm9kZSBzdHJ1Y3R1cmUKKyAqIGRybV9tbToJbWVtb3J5IG1hbmFnZXIgc3RydWN0IHdlIGFyZSBwcmUtYWxsb2NhdGluZyBmb3IKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgKi8KIGludCBkcm1fbW1fcHJlX2dldChzdHJ1Y3QgZHJtX21tICptbSkKIHsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7CkBAIC0yNTMsMTIgKzI1OCwxNCBAQAogCQkJCXByZXZfbm9kZS0+c2l6ZSArPSBuZXh0X25vZGUtPnNpemU7CiAJCQkJbGlzdF9kZWwoJm5leHRfbm9kZS0+bWxfZW50cnkpOwogCQkJCWxpc3RfZGVsKCZuZXh0X25vZGUtPmZsX2VudHJ5KTsKKwkJCQlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJCQkJaWYgKG1tLT5udW1fdW51c2VkIDwgTU1fVU5VU0VEX1RBUkdFVCkgewogCQkJCQlsaXN0X2FkZCgmbmV4dF9ub2RlLT5mbF9lbnRyeSwKIAkJCQkJCSAmbW0tPnVudXNlZF9ub2Rlcyk7CiAJCQkJCSsrbW0tPm51bV91bnVzZWQ7CiAJCQkJfSBlbHNlCiAJCQkJCWtmcmVlKG5leHRfbm9kZSk7CisJCQkJc3Bpbl91bmxvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJCQl9IGVsc2UgewogCQkJCW5leHRfbm9kZS0+c2l6ZSArPSBjdXItPnNpemU7CiAJCQkJbmV4dF9ub2RlLT5zdGFydCA9IGN1ci0+c3RhcnQ7CkBAIC0yNzEsMTEgKzI3OCwxMyBAQAogCQlsaXN0X2FkZCgmY3VyLT5mbF9lbnRyeSwgJm1tLT5mbF9lbnRyeSk7CiAJfSBlbHNlIHsKIAkJbGlzdF9kZWwoJmN1ci0+bWxfZW50cnkpOworCQlzcGluX2xvY2soJm1tLT51bnVzZWRfbG9jayk7CiAJCWlmIChtbS0+bnVtX3VudXNlZCA8IE1NX1VOVVNFRF9UQVJHRVQpIHsKIAkJCWxpc3RfYWRkKCZjdXItPmZsX2VudHJ5LCAmbW0tPnVudXNlZF9ub2Rlcyk7CiAJCQkrK21tLT5udW1fdW51c2VkOwogCQl9IGVsc2UKIAkJCWtmcmVlKGN1cik7CisJCXNwaW5fdW5sb2NrKCZtbS0+dW51c2VkX2xvY2spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCBmOGNlOWEzLi4yNmJmMDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMjY3LDEwICsyNjcsMTAgQEAKIAl1aW50MzJfdCAqbWVtOwogCiAJZm9yIChwYWdlID0gMDsgcGFnZSA8IHBhZ2VfY291bnQ7IHBhZ2UrKykgewotCQltZW0gPSBrbWFwKHBhZ2VzW3BhZ2VdKTsKKwkJbWVtID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV0sIEtNX1VTRVIwKTsKIAkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSA0KQogCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBpLCBtZW1baSAvIDRdKTsKLQkJa3VubWFwKHBhZ2VzW3BhZ2VdKTsKKwkJa3VubWFwX2F0b21pYyhwYWdlc1twYWdlXSwgS01fVVNFUjApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggOTJhZWI5MS4uZTViMTM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMjI3LDggKzEyMjcsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIFRyeSB0byBzZXQgdXAgRkJDIHdpdGggYSByZWFzb25hYmxlIGNvbXByZXNzZWQgYnVmZmVyIHNpemUgKi8KLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpIHx8IElTX0dNNDUoZGV2KSkgJiYKLQkgICAgaTkxNV9wb3dlcnNhdmUpIHsKKwlpZiAoSTkxNV9IQVNfRkJDKGRldikgJiYgaTkxNV9wb3dlcnNhdmUpIHsKIAkJaW50IGNmYl9zaXplOwogCiAJCS8qIFRyeSB0byBnZXQgYW4gOE0gYnVmZmVyLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBiOTM4MTRjLi43ZjQzNmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg5LDcgKzg5LDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JZGV2X3ByaXYtPnN1c3BlbmRlZCA9IDE7CisJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMDsKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDYwMzVkM2QuLmE3MjVmNjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTI3NCw3ICsyNzQsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIGRpc3BsYXk7CiAKIAkvKiBSZWdpc3RlciBzdGF0ZSAqLwotCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgbW9kZXNldF9vbl9saWQ7CiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CkBAIC0yOTYsNiArMjk2LDEzIEBACiAJdTMyIHNhdmVWQkxBTktfQTsKIAl1MzIgc2F2ZVZTWU5DX0E7CiAJdTMyIHNhdmVCQ0xSUEFUX0E7CisJdTMyIHNhdmVUUkFOU0FDT05GOworCXUzMiBzYXZlVFJBTlNfSFRPVEFMX0E7CisJdTMyIHNhdmVUUkFOU19IQkxBTktfQTsKKwl1MzIgc2F2ZVRSQU5TX0hTWU5DX0E7CisJdTMyIHNhdmVUUkFOU19WVE9UQUxfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZCTEFOS19BOworCXUzMiBzYXZlVFJBTlNfVlNZTkNfQTsKIAl1MzIgc2F2ZVBJUEVBU1RBVDsKIAl1MzIgc2F2ZURTUEFTVFJJREU7CiAJdTMyIHNhdmVEU1BBU0laRTsKQEAgLTMwNCw4ICszMTEsMTEgQEAKIAl1MzIgc2F2ZURTUEFTVVJGOwogCXUzMiBzYXZlRFNQQVRJTEVPRkY7CiAJdTMyIHNhdmVQRklUX1BHTV9SQVRJT1M7CisJdTMyIHNhdmVCTENfSElTVF9DVEw7CiAJdTMyIHNhdmVCTENfUFdNX0NUTDsKIAl1MzIgc2F2ZUJMQ19QV01fQ1RMMjsKKwl1MzIgc2F2ZUJMQ19DUFVfUFdNX0NUTDsKKwl1MzIgc2F2ZUJMQ19DUFVfUFdNX0NUTDI7CiAJdTMyIHNhdmVGUEIwOwogCXUzMiBzYXZlRlBCMTsKIAl1MzIgc2F2ZURQTExfQjsKQEAgLTMxNyw2ICszMjcsMTMgQEAKIAl1MzIgc2F2ZVZCTEFOS19COwogCXUzMiBzYXZlVlNZTkNfQjsKIAl1MzIgc2F2ZUJDTFJQQVRfQjsKKwl1MzIgc2F2ZVRSQU5TQkNPTkY7CisJdTMyIHNhdmVUUkFOU19IVE9UQUxfQjsKKwl1MzIgc2F2ZVRSQU5TX0hCTEFOS19COworCXUzMiBzYXZlVFJBTlNfSFNZTkNfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZUT1RBTF9COworCXUzMiBzYXZlVFJBTlNfVkJMQU5LX0I7CisJdTMyIHNhdmVUUkFOU19WU1lOQ19COwogCXUzMiBzYXZlUElQRUJTVEFUOwogCXUzMiBzYXZlRFNQQlNUUklERTsKIAl1MzIgc2F2ZURTUEJTSVpFOwpAQCAtMzQyLDYgKzM1OSw3IEBACiAJdTMyIHNhdmVQRklUX0NPTlRST0w7CiAJdTMyIHNhdmVfcGFsZXR0ZV9hWzI1Nl07CiAJdTMyIHNhdmVfcGFsZXR0ZV9iWzI1Nl07CisJdTMyIHNhdmVEUEZDX0NCX0JBU0U7CiAJdTMyIHNhdmVGQkNfQ0ZCX0JBU0U7CiAJdTMyIHNhdmVGQkNfTExfQkFTRTsKIAl1MzIgc2F2ZUZCQ19DT05UUk9MOwpAQCAtMzQ5LDYgKzM2NywxMiBAQAogCXUzMiBzYXZlSUVSOwogCXUzMiBzYXZlSUlSOwogCXUzMiBzYXZlSU1SOworCXUzMiBzYXZlREVJRVI7CisJdTMyIHNhdmVERUlNUjsKKwl1MzIgc2F2ZUdUSUVSOworCXUzMiBzYXZlR1RJTVI7CisJdTMyIHNhdmVGRElfUlhBX0lNUjsKKwl1MzIgc2F2ZUZESV9SWEJfSU1SOwogCXUzMiBzYXZlQ0FDSEVfTU9ERV8wOwogCXUzMiBzYXZlRF9TVEFURTsKIAl1MzIgc2F2ZURTUENMS19HQVRFX0Q7CkBAIC0zODIsNiArNDA2LDI2IEBACiAJdTMyIHNhdmVQSVBFQl9EUF9MSU5LX007CiAJdTMyIHNhdmVQSVBFQV9EUF9MSU5LX047CiAJdTMyIHNhdmVQSVBFQl9EUF9MSU5LX047CisJdTMyIHNhdmVGRElfUlhBX0NUTDsKKwl1MzIgc2F2ZUZESV9UWEFfQ1RMOworCXUzMiBzYXZlRkRJX1JYQl9DVEw7CisJdTMyIHNhdmVGRElfVFhCX0NUTDsKKwl1MzIgc2F2ZVBGQV9DVExfMTsKKwl1MzIgc2F2ZVBGQl9DVExfMTsKKwl1MzIgc2F2ZVBGQV9XSU5fU1o7CisJdTMyIHNhdmVQRkJfV0lOX1NaOworCXUzMiBzYXZlUEZBX1dJTl9QT1M7CisJdTMyIHNhdmVQRkJfV0lOX1BPUzsKKwl1MzIgc2F2ZVBDSF9EUkVGX0NPTlRST0w7CisJdTMyIHNhdmVESVNQX0FSQl9DVEw7CisJdTMyIHNhdmVQSVBFQV9EQVRBX00xOworCXUzMiBzYXZlUElQRUFfREFUQV9OMTsKKwl1MzIgc2F2ZVBJUEVBX0xJTktfTTE7CisJdTMyIHNhdmVQSVBFQV9MSU5LX04xOworCXUzMiBzYXZlUElQRUJfREFUQV9NMTsKKwl1MzIgc2F2ZVBJUEVCX0RBVEFfTjE7CisJdTMyIHNhdmVQSVBFQl9MSU5LX00xOworCXUzMiBzYXZlUElQRUJfTElOS19OMTsKIAogCXN0cnVjdCB7CiAJCXN0cnVjdCBkcm1fbW0gZ3R0X3NwYWNlOwpAQCAtNDkyLDYgKzUzNiw4IEBACiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcGh5c19vYmplY3QgKnBoeXNfb2Jqc1tJOTE1X01BWF9QSFlTX09CSkVDVF07CiAJfSBtbTsKIAlzdHJ1Y3Qgc2R2b19kZXZpY2VfbWFwcGluZyBzZHZvX21hcHBpbmdzWzJdOworCS8qIGluZGljYXRlIHdoZXRoZXIgdGhlIExWRFNfQk9SREVSIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdCAqLworCXVuc2lnbmVkIGludCBsdmRzX2JvcmRlcl9iaXRzOwogCiAJLyogUmVjbG9ja2luZyBzdXBwb3J0ICovCiAJYm9vbCByZW5kZXJfcmVjbG9ja19hdmFpbDsKQEAgLTk4MSw3ICsxMDI3LDEwIEBACiAKICNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKICNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpKSkKKyNkZWZpbmUgSTkxNV9IQVNfRkJDKGRldikgKElTX01PQklMRShkZXYpICYmIFwKKwkJCSAgIChJU19JOVhYKGRldikgfHwgSVNfR000NShkZXYpKSAmJiBcCisJCQkgICAhSVNfSUdEKGRldikgJiYgXAorCQkJICAgIUlTX0lHRE5HKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGMzY2VmZmEuLmFhN2ZkODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMjU0LDEwICsyNTQsMTUgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWludCByZXQgPSBJUlFfTk9ORTsKLQl1MzIgZGVfaWlyLCBndF9paXI7CisJdTMyIGRlX2lpciwgZ3RfaWlyLCBkZV9pZXI7CiAJdTMyIG5ld19kZV9paXIsIG5ld19ndF9paXI7CiAJc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsKIAorCS8qIGRpc2FibGUgbWFzdGVyIGludGVycnVwdCBiZWZvcmUgY2xlYXJpbmcgaWlyICAqLworCWRlX2llciA9IEk5MTVfUkVBRChERUlFUik7CisJSTkxNV9XUklURShERUlFUiwgZGVfaWVyICYgfkRFX01BU1RFUl9JUlFfQ09OVFJPTCk7CisJKHZvaWQpSTkxNV9SRUFEKERFSUVSKTsKKwogCWRlX2lpciA9IEk5MTVfUkVBRChERUlJUik7CiAJZ3RfaWlyID0gSTkxNV9SRUFEKEdUSUlSKTsKIApAQCAtMjkwLDYgKzI5NSw5IEBACiAJCWd0X2lpciA9IG5ld19ndF9paXI7CiAJfQogCisJSTkxNV9XUklURShERUlFUiwgZGVfaWVyKTsKKwkodm9pZClJOTE1X1JFQUQoREVJRVIpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDQ2NmRkYi4uMTY4N2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC05NjgsNiArOTY4LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIEVuYWJsZSBib3JkZXIgZm9yIHVuc2NhbGVkIChvciBhc3BlY3Qtc2NhbGVkKSBkaXNwbGF5ICovCisjZGVmaW5lICAgTFZEU19CT1JERVJfRU5BQkxFCQkoMSA8PCAxNSkKIC8qCiAgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKICAqIHBpeGVsLgpAQCAtMTA3OCw2ICsxMDgwLDggQEAKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCiAjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSwkJKDB4ZmZmZikKIAorI2RlZmluZSBCTENfSElTVF9DVEwJCTB4NjEyNjAKKwogLyogVFYgcG9ydCBjb250cm9sICovCiAjZGVmaW5lIFRWX0NUTAkJCTB4NjgwMDAKIC8qKiBFbmFibGVzIHRoZSBUViBlbmNvZGVyICovCkBAIC0xNzgwLDYgKzE3ODQsMTEgQEAKICNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLwogI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCiAjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorI2RlZmluZSAgIFBJUEVfQlBDX01BU0sgCQkJKDcgPDwgNSkgLyogSXJvbmxha2UgKi8KKyNkZWZpbmUgICBQSVBFXzhCUEMJCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEwQlBDCQkJCSgxIDw8IDUpCisjZGVmaW5lICAgUElQRV82QlBDCQkJCSgyIDw8IDUpCisjZGVmaW5lICAgUElQRV8xMkJQQwkJCQkoMyA8PCA1KQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTE3OTAsMTcgKzE3OTksMjkgQEAKICNkZWZpbmUgICBEU1BBUkJfQUVORF9TSElGVAkwCiAKICNkZWZpbmUgRFNQRlcxCQkJMHg3MDAzNAorI2RlZmluZSAgIERTUEZXX1NSX1NISUZUCTIzCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQl9TSElGVAkxNgorI2RlZmluZSAgIERTUEZXX1BMQU5FQl9TSElGVAk4CiAjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JBX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfU0hJRlQJMTYKICNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2RlZmluZSAgIERTUEZXX0hQTExfU1JfRU4JKDE8PDMxKQorI2RlZmluZSAgIERTUEZXX0NVUlNPUl9TUl9TSElGVAkyNAogI2RlZmluZSAgIElHRF9TRUxGX1JFRlJFU0hfRU4JKDE8PDMwKQogCiAvKiBGSUZPIHdhdGVybWFyayBzaXplcyBldGMgKi8KKyNkZWZpbmUgRzRYX0ZJRk9fTElORV9TSVpFCTY0CiAjZGVmaW5lIEk5MTVfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTgzMF9GSUZPX0xJTkVfU0laRQkzMgorCisjZGVmaW5lIEc0WF9GSUZPX1NJWkUJCTEyNwogI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3IC8qIDk0NSAmIDk2NSAqLwogI2RlZmluZSBJOTE1X0ZJRk9fU0laRQkJOTUKICNkZWZpbmUgSTg1NUdNX0ZJRk9fU0laRQkxMjcgLyogSW4gY2FjaGVsaW5lcyAqLwogI2RlZmluZSBJODMwX0ZJRk9fU0laRQkJOTUKKworI2RlZmluZSBHNFhfTUFYX1dNCQkweDNmCiAjZGVmaW5lIEk5MTVfTUFYX1dNCQkweDNmCiAKICNkZWZpbmUgSUdEX0RJU1BMQVlfRklGTwk1MTIgLyogaW4gNjRieXRlIHVuaXQgKi8KQEAgLTIwMzAsNiArMjA1MSwxMSBAQAogI2RlZmluZSBQRkFfQ1RMXzEgICAgICAgICAgICAgICAweDY4MDgwCiAjZGVmaW5lIFBGQl9DVExfMSAgICAgICAgICAgICAgIDB4Njg4ODAKICNkZWZpbmUgIFBGX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSAgUEZfRklMVEVSX01BU0sJCSgzPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9QUk9HUkFNTUVECSgwPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9NRURfM3gzCSgxPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9FREdFX0VOSEFOQ0UJKDI8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfU09GVEVOCSgzPDwyMykKICNkZWZpbmUgUEZBX1dJTl9TWgkJMHg2ODA3NAogI2RlZmluZSBQRkJfV0lOX1NaCQkweDY4ODc0CiAjZGVmaW5lIFBGQV9XSU5fUE9TCQkweDY4MDcwCkBAIC0yMTQ5LDExICsyMTc1LDExIEBACiAjZGVmaW5lICBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0sJCSgzPDwxMykKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICAgICAgICgwPDwxMSkKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICAgICAgICgyPDwxMSkKLSNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9NQVNLCQkJKDI8PDExKQorI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMzw8MTEpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgICAoMDw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX0NLNTA1X0VOQUJMRQkJKDE8PDkpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgICAoMjw8OSkKLSNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMjw8OSkKKyNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMzw8OSkKICNkZWZpbmUgIERSRUZfU1VQRVJTUFJFQURfU09VUkNFX0RJU0FCTEUgICAgICAgICgwPDw3KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgKDI8PDcpCiAjZGVmaW5lICBEUkVGX1NTQzRfRE9XTlNQUkVBRCAgICAgICAgICAgICAgICAgICAoMDw8NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYmQ2ZDhkOS4uNmVlYzgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTMyLDExICszMiwxNSBAQAogc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJZHBsbF9yZWc7CiAKLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQSkgJiBEUExMX1ZDT19FTkFCTEUpOwotCWVsc2UKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9CKSAmIERQTExfVkNPX0VOQUJMRSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9yZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gUENIX0RQTExfQTogUENIX0RQTExfQjsKKwl9IGVsc2UgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBEUExMX0E6IERQTExfQjsKKwl9CisKKwlyZXR1cm4gKEk5MTVfUkVBRChkcGxsX3JlZykgJiBEUExMX1ZDT19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKQEAgLTQ5LDYgKzUzLDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTY4LDYgKzc1LDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTIyOSwxMyArMjM5LDI0IEBACiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlUENIX0RSRUZfQ09OVFJPTCA9IEk5MTVfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJZGV2X3ByaXYtPnNhdmVESVNQX0FSQl9DVEwgPSBJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKTsKKwl9CisKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKIAlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKFBDSF9GUEEwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKFBDSF9GUEExKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0EgPSBJOTE1X1JFQUQoUENIX0RQTExfQSk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOworCQlkZXZfcHJpdi0+c2F2ZUZQQTEgPSBJOTE1X1JFQUQoRlBBMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7CisJfQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOwogCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOwogCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOwpAQCAtMjQzLDcgKzI2NCwzMCBAQAogCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOwogCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOwogCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlUElQRUFfREFUQV9NMSA9IEk5MTVfUkVBRChQSVBFQV9EQVRBX00xKTsKKwkJZGV2X3ByaXYtPnNhdmVQSVBFQV9EQVRBX04xID0gSTkxNV9SRUFEKFBJUEVBX0RBVEFfTjEpOworCQlkZXZfcHJpdi0+c2F2ZVBJUEVBX0xJTktfTTEgPSBJOTE1X1JFQUQoUElQRUFfTElOS19NMSk7CisJCWRldl9wcml2LT5zYXZlUElQRUFfTElOS19OMSA9IEk5MTVfUkVBRChQSVBFQV9MSU5LX04xKTsKKworCQlkZXZfcHJpdi0+c2F2ZUZESV9UWEFfQ1RMID0gSTkxNV9SRUFEKEZESV9UWEFfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCA9IEk5MTVfUkVBRChGRElfUlhBX0NUTCk7CisKKwkJZGV2X3ByaXYtPnNhdmVQRkFfQ1RMXzEgPSBJOTE1X1JFQUQoUEZBX0NUTF8xKTsKKwkJZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaID0gSTkxNV9SRUFEKFBGQV9XSU5fU1opOworCQlkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fUE9TID0gSTkxNV9SRUFEKFBGQV9XSU5fUE9TKTsKKworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TQUNPTkYgPSBJOTE1X1JFQUQoVFJBTlNBQ09ORik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0EgPSBJOTE1X1JFQUQoVFJBTlNfSFRPVEFMX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19BID0gSTkxNV9SRUFEKFRSQU5TX0hCTEFOS19BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19BID0gSTkxNV9SRUFEKFRSQU5TX0hTWU5DX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9BID0gSTkxNV9SRUFEKFRSQU5TX1ZUT1RBTF9BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQSA9IEk5MTVfUkVBRChUUkFOU19WQkxBTktfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQSA9IEk5MTVfUkVBRChUUkFOU19WU1lOQ19BKTsKKwl9CiAKIAlkZXZfcHJpdi0+c2F2ZURTUEFDTlRSID0gSTkxNV9SRUFEKERTUEFDTlRSKTsKIAlkZXZfcHJpdi0+c2F2ZURTUEFTVFJJREUgPSBJOTE1X1JFQUQoRFNQQVNUUklERSk7CkBAIC0yNjAsMTAgKzMwNCwxNiBAQAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORiA9IEk5MTVfUkVBRChQSVBFQkNPTkYpOwogCWRldl9wcml2LT5zYXZlUElQRUJTUkMgPSBJOTE1X1JFQUQoUElQRUJTUkMpOwotCWRldl9wcml2LT5zYXZlRlBCMCA9IEk5MTVfUkVBRChGUEIwKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7Ci0JZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoUENIX0ZQQjApOworCQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoUENIX0ZQQjEpOworCQlkZXZfcHJpdi0+c2F2ZURQTExfQiA9IEk5MTVfUkVBRChQQ0hfRFBMTF9CKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7CisJCWRldl9wcml2LT5zYXZlRlBCMSA9IEk5MTVfUkVBRChGUEIxKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKKwl9CisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCWRldl9wcml2LT5zYXZlRFBMTF9CX01EID0gSTkxNV9SRUFEKERQTExfQl9NRCk7CiAJZGV2X3ByaXYtPnNhdmVIVE9UQUxfQiA9IEk5MTVfUkVBRChIVE9UQUxfQik7CiAJZGV2X3ByaXYtPnNhdmVIQkxBTktfQiA9IEk5MTVfUkVBRChIQkxBTktfQik7CkBAIC0yNzEsNyArMzIxLDMwIEBACiAJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQiA9IEk5MTVfUkVBRChWVE9UQUxfQik7CiAJZGV2X3ByaXYtPnNhdmVWQkxBTktfQiA9IEk5MTVfUkVBRChWQkxBTktfQik7CiAJZGV2X3ByaXYtPnNhdmVWU1lOQ19CID0gSTkxNV9SRUFEKFZTWU5DX0IpOwotCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQiA9IEk5MTVfUkVBRChCQ0xSUEFUX0IpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVQSVBFQl9EQVRBX00xID0gSTkxNV9SRUFEKFBJUEVCX0RBVEFfTTEpOworCQlkZXZfcHJpdi0+c2F2ZVBJUEVCX0RBVEFfTjEgPSBJOTE1X1JFQUQoUElQRUJfREFUQV9OMSk7CisJCWRldl9wcml2LT5zYXZlUElQRUJfTElOS19NMSA9IEk5MTVfUkVBRChQSVBFQl9MSU5LX00xKTsKKwkJZGV2X3ByaXYtPnNhdmVQSVBFQl9MSU5LX04xID0gSTkxNV9SRUFEKFBJUEVCX0xJTktfTjEpOworCisJCWRldl9wcml2LT5zYXZlRkRJX1RYQl9DVEwgPSBJOTE1X1JFQUQoRkRJX1RYQl9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMID0gSTkxNV9SRUFEKEZESV9SWEJfQ1RMKTsKKworCQlkZXZfcHJpdi0+c2F2ZVBGQl9DVExfMSA9IEk5MTVfUkVBRChQRkJfQ1RMXzEpOworCQlkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1ogPSBJOTE1X1JFQUQoUEZCX1dJTl9TWik7CisJCWRldl9wcml2LT5zYXZlUEZCX1dJTl9QT1MgPSBJOTE1X1JFQUQoUEZCX1dJTl9QT1MpOworCisJCWRldl9wcml2LT5zYXZlVFJBTlNCQ09ORiA9IEk5MTVfUkVBRChUUkFOU0JDT05GKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQiA9IEk5MTVfUkVBRChUUkFOU19IVE9UQUxfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0IgPSBJOTE1X1JFQUQoVFJBTlNfSEJMQU5LX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hTWU5DX0IgPSBJOTE1X1JFQUQoVFJBTlNfSFNZTkNfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0IgPSBJOTE1X1JFQUQoVFJBTlNfVlRPVEFMX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19CID0gSTkxNV9SRUFEKFRSQU5TX1ZCTEFOS19CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WU1lOQ19CID0gSTkxNV9SRUFEKFRSQU5TX1ZTWU5DX0IpOworCX0KIAogCWRldl9wcml2LT5zYXZlRFNQQkNOVFIgPSBJOTE1X1JFQUQoRFNQQkNOVFIpOwogCWRldl9wcml2LT5zYXZlRFNQQlNUUklERSA9IEk5MTVfUkVBRChEU1BCU1RSSURFKTsKQEAgLTI5MCwyMyArMzYzLDQ2IEBACiBzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfbW9kZXNldF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBkcGxsX2FfcmVnLCBmcGEwX3JlZywgZnBhMV9yZWc7CisJaW50IGRwbGxfYl9yZWcsIGZwYjBfcmVnLCBmcGIxX3JlZzsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlyZXR1cm47CiAKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkcGxsX2FfcmVnID0gUENIX0RQTExfQTsKKwkJZHBsbF9iX3JlZyA9IFBDSF9EUExMX0I7CisJCWZwYTBfcmVnID0gUENIX0ZQQTA7CisJCWZwYjBfcmVnID0gUENIX0ZQQjA7CisJCWZwYTFfcmVnID0gUENIX0ZQQTE7CisJCWZwYjFfcmVnID0gUENIX0ZQQjE7CisJfSBlbHNlIHsKKwkJZHBsbF9hX3JlZyA9IERQTExfQTsKKwkJZHBsbF9iX3JlZyA9IERQTExfQjsKKwkJZnBhMF9yZWcgPSBGUEEwOworCQlmcGIwX3JlZyA9IEZQQjA7CisJCWZwYTFfcmVnID0gRlBBMTsKKwkJZnBiMV9yZWcgPSBGUEIxOworCX0KKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVQQ0hfRFJFRl9DT05UUk9MKTsKKwkJSTkxNV9XUklURShESVNQX0FSQl9DVEwsIGRldl9wcml2LT5zYXZlRElTUF9BUkJfQ1RMKTsKKwl9CisKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJLyogUHJpbWUgdGhlIGNsb2NrICovCiAJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCUk5MTVfV1JJVEUoZHBsbF9hX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0EgJgogCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CiAJCURSTV9VREVMQVkoMTUwKTsKIAl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKKwlJOTE1X1dSSVRFKGZwYTBfcmVnLCBkZXZfcHJpdi0+c2F2ZUZQQTApOworCUk5MTVfV1JJVEUoZnBhMV9yZWcsIGRldl9wcml2LT5zYXZlRlBBMSk7CiAJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlJOTE1X1dSSVRFKGRwbGxfYV9yZWcsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKIAlEUk1fVURFTEFZKDE1MCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CiAJRFJNX1VERUxBWSgxNTApOwogCkBAIC0zMTcsNyArNDEzLDMwIEBACiAJSTkxNV9XUklURShWVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQSk7CiAJSTkxNV9XUklURShWQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQSk7CiAJSTkxNV9XUklURShWU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0EpOwotCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShQSVBFQV9EQVRBX00xLCBkZXZfcHJpdi0+c2F2ZVBJUEVBX0RBVEFfTTEpOworCQlJOTE1X1dSSVRFKFBJUEVBX0RBVEFfTjEsIGRldl9wcml2LT5zYXZlUElQRUFfREFUQV9OMSk7CisJCUk5MTVfV1JJVEUoUElQRUFfTElOS19NMSwgZGV2X3ByaXYtPnNhdmVQSVBFQV9MSU5LX00xKTsKKwkJSTkxNV9XUklURShQSVBFQV9MSU5LX04xLCBkZXZfcHJpdi0+c2F2ZVBJUEVBX0xJTktfTjEpOworCisJCUk5MTVfV1JJVEUoRkRJX1JYQV9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1JYQV9DVEwpOworCQlJOTE1X1dSSVRFKEZESV9UWEFfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9UWEFfQ1RMKTsKKworCQlJOTE1X1dSSVRFKFBGQV9DVExfMSwgZGV2X3ByaXYtPnNhdmVQRkFfQ1RMXzEpOworCQlJOTE1X1dSSVRFKFBGQV9XSU5fU1osIGRldl9wcml2LT5zYXZlUEZBX1dJTl9TWik7CisJCUk5MTVfV1JJVEUoUEZBX1dJTl9QT1MsIGRldl9wcml2LT5zYXZlUEZBX1dJTl9QT1MpOworCisJCUk5MTVfV1JJVEUoVFJBTlNBQ09ORiwgZGV2X3ByaXYtPnNhdmVUUkFOU0FDT05GKTsKKwkJSTkxNV9XUklURShUUkFOU19IVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hTWU5DX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19BKTsKKwkJSTkxNV9XUklURShUUkFOU19WU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EpOworCX0KIAogCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwogCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOwpAQCAtMzM5LDE2ICs0NTgsMTYgQEAKIAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0IgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CICYKKwkJSTkxNV9XUklURShkcGxsX2JfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCiAJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJRFJNX1VERUxBWSgxNTApOwogCX0KLQlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7Ci0JSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCUk5MTVfV1JJVEUoZnBiMF9yZWcsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShmcGIxX3JlZywgZGV2X3ByaXYtPnNhdmVGUEIxKTsKIAkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCUk5MTVfV1JJVEUoZHBsbF9iX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0IpOwogCURSTV9VREVMQVkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKIAlEUk1fVURFTEFZKDE1MCk7CiAKQEAgLTM1OSw3ICs0NzgsMzAgQEAKIAlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKIAlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKIAlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKFBJUEVCX0RBVEFfTTEsIGRldl9wcml2LT5zYXZlUElQRUJfREFUQV9NMSk7CisJCUk5MTVfV1JJVEUoUElQRUJfREFUQV9OMSwgZGV2X3ByaXYtPnNhdmVQSVBFQl9EQVRBX04xKTsKKwkJSTkxNV9XUklURShQSVBFQl9MSU5LX00xLCBkZXZfcHJpdi0+c2F2ZVBJUEVCX0xJTktfTTEpOworCQlJOTE1X1dSSVRFKFBJUEVCX0xJTktfTjEsIGRldl9wcml2LT5zYXZlUElQRUJfTElOS19OMSk7CisKKwkJSTkxNV9XUklURShGRElfUlhCX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfUlhCX0NUTCk7CisJCUk5MTVfV1JJVEUoRkRJX1RYQl9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1RYQl9DVEwpOworCisJCUk5MTVfV1JJVEUoUEZCX0NUTF8xLCBkZXZfcHJpdi0+c2F2ZVBGQl9DVExfMSk7CisJCUk5MTVfV1JJVEUoUEZCX1dJTl9TWiwgZGV2X3ByaXYtPnNhdmVQRkJfV0lOX1NaKTsKKwkJSTkxNV9XUklURShQRkJfV0lOX1BPUywgZGV2X3ByaXYtPnNhdmVQRkJfV0lOX1BPUyk7CisKKwkJSTkxNV9XUklURShUUkFOU0JDT05GLCBkZXZfcHJpdi0+c2F2ZVRSQU5TQkNPTkYpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9CKTsKKwkJSTkxNV9XUklURShUUkFOU19IQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CKTsKKwkJSTkxNV9XUklURShUUkFOU19WVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfVkJMQU5LX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZTWU5DX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQik7CisJfQogCiAJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCiAJSTkxNV9XUklURShEU1BCU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BCU0laRSk7CkBAIC00MDQsMjEgKzU0Niw0MyBAQAogCQlkZXZfcHJpdi0+c2F2ZUNVUlNJWkUgPSBJOTE1X1JFQUQoQ1VSU0laRSk7CiAKIAkvKiBDUlQgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKFBDSF9BRFBBKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJfQogCiAJLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDEpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwyKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DUFVfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOworCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoUENIX0xWRFMpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwkJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCWRldl9wcml2LT5zYXZlQkxDX0hJU1RfQ1RMID0gSTkxNV9SRUFEKEJMQ19ISVNUX0NUTCk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwkJaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCisJCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJfQorCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOwotCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQQ0hfUFBfT05fREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTID0gSTkxNV9SRUFEKFBDSF9QUF9PRkZfREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBDSF9QUF9ESVZJU09SKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKwl9CiAKIAkvKiBEaXNwbGF5IFBvcnQgc3RhdGUgKi8KIAlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CkBAIC00MzcsMTYgKzYwMSwyMyBAQAogCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwogCiAJLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEUEZDX0NCX0JBU0UgPSBJOTE1X1JFQUQoRFBGQ19DQl9CQVNFKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOwogCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKIAlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOwotCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKENQVV9WR0FDTlRSTCk7CisJZWxzZQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKIAogCWk5MTVfc2F2ZV92Z2EoZGV2KTsKIH0KQEAgLTQ4NSwyMiArNjU2LDQxIEBACiAJCUk5MTVfV1JJVEUoQ1VSU0laRSwgZGV2X3ByaXYtPnNhdmVDVVJTSVpFKTsKIAogCS8qIENSVCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShQQ0hfQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKIAogCS8qIExWRFMgc3RhdGUgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUENIX0xWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJfSBlbHNlIGlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQogCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CiAKLQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwotCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOwotCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7Ci0JSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOwotCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKLQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwxLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwyLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMik7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX0hJU1RfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19ISVNUX0NUTCk7CisJCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKKwkJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfQogCiAJLyogRGlzcGxheSBQb3J0IHN0YXRlICovCiAJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgewpAQCAtNTExLDEzICs3MDEsMjIgQEAKIAkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KIAogCS8qIEZCQyBpbmZvICovCi0JSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZzR4X2Rpc2FibGVfZmJjKGRldik7CisJCUk5MTVfV1JJVEUoRFBGQ19DQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSk7CisJfSBlbHNlIHsKKwkJaTh4eF9kaXNhYmxlX2ZiYyhkZXYpOworCQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCi0JSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJaWYgKElTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQ1BVX1ZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwogCUk5MTVfV1JJVEUoVkdBMCwgZGV2X3ByaXYtPnNhdmVWR0EwKTsKIAlJOTE1X1dSSVRFKFZHQTEsIGRldl9wcml2LT5zYXZlVkdBMSk7CiAJSTkxNV9XUklURShWR0FfUEQsIGRldl9wcml2LT5zYXZlVkdBX1BEKTsKQEAgLTU0Myw4ICs3NDIsMTcgQEAKIAlpOTE1X3NhdmVfZGlzcGxheShkZXYpOwogCiAJLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKLQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlREVJRVIgPSBJOTE1X1JFQUQoREVJRVIpOworCQlkZXZfcHJpdi0+c2F2ZURFSU1SID0gSTkxNV9SRUFEKERFSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVHVElFUiA9IEk5MTVfUkVBRChHVElFUik7CisJCWRldl9wcml2LT5zYXZlR1RJTVIgPSBJOTE1X1JFQUQoR1RJTVIpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKwl9CiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7CkBAIC02MDksOCArODE3LDE3IEBACiAJaTkxNV9yZXN0b3JlX2Rpc3BsYXkoZGV2KTsKIAogCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOwotCUk5MTVfV1JJVEUgKElNUiwgIGRldl9wcml2LT5zYXZlSU1SKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERFSUVSLCBkZXZfcHJpdi0+c2F2ZURFSUVSKTsKKwkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPnNhdmVERUlNUik7CisJCUk5MTVfV1JJVEUoR1RJRVIsIGRldl9wcml2LT5zYXZlR1RJRVIpOworCQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+c2F2ZUdUSU1SKTsKKwkJSTkxNV9XUklURShGRElfUlhBX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUik7CisJCUk5MTVfV1JJVEUoRkRJX1JYQl9JTVIsIGRldl9wcml2LT5zYXZlRkRJX1JYQl9JTVIpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOworCQlJOTE1X1dSSVRFIChJTVIsICBkZXZfcHJpdi0+c2F2ZUlNUik7CisJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCA0MzM3NDE0Li45NmNkMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTEsMjAgKzM1MSwxOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBiZGJfZHJpdmVyX2ZlYXR1cmVzICpkcml2ZXI7CiAKLQkvKiBzZXQgZGVmYXVsdCBmb3IgY2hpcHMgd2l0aG91dCBlRFAgKi8KLQlpZiAoIVNVUFBPUlRTX0VEUChkZXYpKSB7Ci0JCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAlkcml2ZXIgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfRFJJVkVSX0ZFQVRVUkVTKTsKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkKKwlpZiAoZHJpdmVyICYmIFNVUFBPUlRTX0VEUChkZXYpICYmCisJICAgIGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkgewogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7CisJfQogCi0JaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmR1YWxfZnJlcXVlbmN5KQogCQlkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDIxMmUyMjcuLmU1MDUxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0yNjIsOCArMjYyLDggQEAKIAkJfSB3aGlsZSAodGltZV9hZnRlcih0aW1lb3V0LCBqaWZmaWVzKSk7CiAJfQogCi0JaWYgKChJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpICYgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLKSA9PQotCSAgICBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SKQorCWlmICgoSTkxNV9SRUFEKFBPUlRfSE9UUExVR19TVEFUKSAmIENSVF9IT1RQTFVHX01PTklUT1JfTUFTSykgIT0KKwkgICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCAzYzE0MjQwLi4wOTlmNDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC04NjMsMTAgKzg2Myw4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludGVsX2Nsb2NrX3QgY2xvY2s7Ci0JaW50IG1heF9uOwotCWJvb2wgZm91bmQ7CiAJaW50IGVycl9tb3N0ID0gNDc7Ci0JZm91bmQgPSBmYWxzZTsKKwlpbnQgZXJyX21pbiA9IDEwMDAwOwogCiAJLyogZURQIGhhcyBvbmx5IDIgY2xvY2sgY2hvaWNlLCBubyBuL20vcCBzZXR0aW5nICovCiAJaWYgKEhBU19lRFApCkBAIC04OTAsMTAgKzg4OCw5IEBACiAJfQogCiAJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCW1heF9uID0gbGltaXQtPm4ubWF4OwogCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7CiAJCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KLQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKKwkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7CiAJCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yICovCiAJCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKIAkJCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewpAQCAtOTA3LDE4ICs5MDQsMTggQEAKIAkJCQkJdGhpc19lcnIgPSBhYnMoKDEwMDAwIC0gKHRhcmdldCoxMDAwMC9jbG9jay5kb3QpKSk7CiAJCQkJCWlmICh0aGlzX2VyciA8IGVycl9tb3N0KSB7CiAJCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCQkJZXJyX21vc3QgPSB0aGlzX2VycjsKLQkJCQkJCW1heF9uID0gY2xvY2subjsKLQkJCQkJCWZvdW5kID0gdHJ1ZTsKIAkJCQkJCS8qIGZvdW5kIG9uIGZpcnN0IG1hdGNoaW5nICovCiAJCQkJCQlnb3RvIG91dDsKKwkJCQkJfSBlbHNlIGlmICh0aGlzX2VyciA8IGVycl9taW4pIHsKKwkJCQkJCSpiZXN0X2Nsb2NrID0gY2xvY2s7CisJCQkJCQllcnJfbWluID0gdGhpc19lcnI7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KIAl9CiBvdXQ6Ci0JcmV0dXJuIGZvdW5kOworCXJldHVybiB0cnVlOwogfQogCiAvKiBEaXNwbGF5UG9ydCBoYXMgb25seSB0d28gZnJlcXVlbmNpZXMsIDE2Mk1IeiBhbmQgMjcwTUh6ICovCkBAIC05NDMsNiArOTQwLDcgQEAKICAgICBjbG9jay5tID0gNSAqIChjbG9jay5tMSArIDIpICsgKGNsb2NrLm0yICsgMik7CiAgICAgY2xvY2sucCA9IChjbG9jay5wMSAqIGNsb2NrLnAyKTsKICAgICBjbG9jay5kb3QgPSA5NjAwMCAqIGNsb2NrLm0gLyAoY2xvY2subiArIDIpIC8gY2xvY2sucDsKKyAgICBjbG9jay52Y28gPSAwOwogICAgIG1lbWNweShiZXN0X2Nsb2NrLCAmY2xvY2ssIHNpemVvZihpbnRlbF9jbG9ja190KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjYwLDkgKzEyNTgsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBQcmUtaTk2NSBuZWVkcyB0byBpbnN0YWxsIGEgZmVuY2UgZm9yIHRpbGVkIHNjYW4tb3V0ICovCi0JaWYgKCFJU19JOTY1RyhkZXYpICYmCi0JICAgIG9ial9wcml2LT5mZW5jZV9yZWcgPT0gSTkxNV9GRU5DRV9SRUdfTk9ORSAmJgorCS8qIEluc3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQuIFByZS1pOTY1IGFsd2F5cyBuZWVkcyBhIGZlbmNlLAorCSAqIHdoZXJlYXMgOTY1KyBvbmx5IHJlcXVpcmVzIGEgZmVuY2UgaWYgdXNpbmcgZnJhbWVidWZmZXIgY29tcHJlc3Npb24uCisJICogRm9yIHNpbXBsaWNpdHksIHdlIGFsd2F5cyBpbnN0YWxsIGEgZmVuY2UgYXMgdGhlIGNvc3QgaXMgbm90IHRoYXQgb25lcm91cy4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCiAJICAgIG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKSB7CiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKG9iaik7CiAJCWlmIChyZXQgIT0gMCkgewpAQCAtMTUxMyw3ICsxNTEzLDcgQEAKIAkJLyogRW5hYmxlIHBhbmVsIGZpdHRpbmcgZm9yIExWRFMgKi8KIAkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7CiAJCQl0ZW1wID0gSTkxNV9SRUFEKHBmX2N0bF9yZWcpOwotCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFKTsKKwkJCUk5MTVfV1JJVEUocGZfY3RsX3JlZywgdGVtcCB8IFBGX0VOQUJMRSB8IFBGX0ZJTFRFUl9NRURfM3gzKTsKIAogCQkJLyogY3VycmVudGx5IGZ1bGwgYXNwZWN0ICovCiAJCQlJOTE1X1dSSVRFKHBmX3dpbl9wb3MsIDApOwpAQCAtMTgwMSw2ICsxODAxLDggQEAKIAljYXNlIERSTV9NT0RFX0RQTVNfT046CiAJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CiAJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGRldik7CisKIAkJLyogRW5hYmxlIHRoZSBEUExMICovCiAJCXRlbXAgPSBJOTE1X1JFQUQoZHBsbF9yZWcpOwogCQlpZiAoKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpID09IDApIHsKQEAgLTE4MzgsNyArMTg0MCw2IEBACiAKIAkJLyogR2l2ZSB0aGUgb3ZlcmxheSBzY2FsZXIgYSBjaGFuY2UgdG8gZW5hYmxlIGlmIGl0J3Mgb24gdGhpcyBwaXBlICovCiAJCS8vaW50ZWxfY3J0Y19kcG1zX3ZpZGVvKGNydGMsIHRydWUpOyBUT0RPCi0JCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGRldik7CiAJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9EUE1TX09GRjoKIAkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKQEAgLTIwODIsNyArMjA4Myw3IEBACiAjZGVmaW5lIExJTktfTiAweDgwMDAwCiAKIHN0YXRpYyB2b2lkCi1pZ2RuZ19jb21wdXRlX21fbihpbnQgYnl0ZXNfcGVyX3BpeGVsLCBpbnQgbmxhbmVzLAoraWdkbmdfY29tcHV0ZV9tX24oaW50IGJpdHNfcGVyX3BpeGVsLCBpbnQgbmxhbmVzLAogCQlpbnQgcGl4ZWxfY2xvY2ssIGludCBsaW5rX2Nsb2NrLAogCQlzdHJ1Y3QgZmRpX21fbiAqbV9uKQogewpAQCAtMjA5Miw3ICsyMDkzLDggQEAKIAogCXRlbXAgPSAodTY0KSBEQVRBX04gKiBwaXhlbF9jbG9jazsKIAl0ZW1wID0gZGl2X3U2NCh0ZW1wLCBsaW5rX2Nsb2NrKTsKLQltX24tPmdtY2hfbSA9IGRpdl91NjQodGVtcCAqIGJ5dGVzX3Blcl9waXhlbCwgbmxhbmVzKTsKKwltX24tPmdtY2hfbSA9IGRpdl91NjQodGVtcCAqIGJpdHNfcGVyX3BpeGVsLCBubGFuZXMpOworCW1fbi0+Z21jaF9tID4+PSAzOyAvKiBjb252ZXJ0IHRvIGJ5dGVzX3Blcl9waXhlbCAqLwogCW1fbi0+Z21jaF9uID0gREFUQV9OOwogCWZkaV9yZWR1Y2VfcmF0aW8oJm1fbi0+Z21jaF9tLCAmbV9uLT5nbWNoX24pOwogCkBAIC0yMTQwLDYgKzIxNDIsMTMgQEAKIAlJR0RfQ1VSU09SX0dVQVJEX1dNLAogCUlHRF9GSUZPX0xJTkVfU0laRQogfTsKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBnNHhfd21faW5mbyA9IHsKKwlHNFhfRklGT19TSVpFLAorCUc0WF9NQVhfV00sCisJRzRYX01BWF9XTSwKKwkyLAorCUc0WF9GSUZPX0xJTkVfU0laRSwKK307CiBzdGF0aWMgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgaTk0NV93bV9pbmZvID0gewogCUk5NDVfRklGT19TSVpFLAogCUk5MTVfTUFYX1dNLApAQCAtMjQzMCwxNyArMjQzOSw3NCBAQAogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bnVzZWQsIGludCB1bnVzZWQyLAotCQkJICBpbnQgdW51c2VkMywgaW50IHVudXNlZDQpCitzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsICBpbnQgcGxhbmVhX2Nsb2NrLAorCQkJICBpbnQgcGxhbmViX2Nsb2NrLCBpbnQgc3JfaGRpc3BsYXksIGludCBwaXhlbF9zaXplKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGZ3X2JsY19zZWxmID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGKTsKKwlpbnQgdG90YWxfc2l6ZSwgY2FjaGVsaW5lX3NpemU7CisJaW50IHBsYW5lYV93bSwgcGxhbmViX3dtLCBjdXJzb3JhX3dtLCBjdXJzb3JiX3dtLCBjdXJzb3Jfc3I7CisJc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgcGxhbmVhX3BhcmFtcywgcGxhbmViX3BhcmFtczsKKwl1bnNpZ25lZCBsb25nIGxpbmVfdGltZV91czsKKwlpbnQgc3JfY2xvY2ssIHNyX2VudHJpZXMgPSAwLCBlbnRyaWVzX3JlcXVpcmVkOwogCi0JaWYgKGk5MTVfcG93ZXJzYXZlKQotCQlmd19ibGNfc2VsZiB8PSBGV19CTENfU0VMRl9FTjsKLQllbHNlCi0JCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKLQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBmd19ibGNfc2VsZik7CisJLyogQ3JlYXRlIGNvcGllcyBvZiB0aGUgYmFzZSBzZXR0aW5ncyBmb3IgZWFjaCBwaXBlICovCisJcGxhbmVhX3BhcmFtcyA9IHBsYW5lYl9wYXJhbXMgPSBnNHhfd21faW5mbzsKKworCS8qIEdyYWIgYSBjb3VwbGUgb2YgZ2xvYmFsIHZhbHVlcyBiZWZvcmUgd2Ugb3ZlcndyaXRlIHRoZW0gKi8KKwl0b3RhbF9zaXplID0gcGxhbmVhX3BhcmFtcy5maWZvX3NpemU7CisJY2FjaGVsaW5lX3NpemUgPSBwbGFuZWFfcGFyYW1zLmNhY2hlbGluZV9zaXplOworCisJLyoKKwkgKiBOb3RlOiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyBmb3IgdmFyaW91cyBjbG9jayAmCisJICogbGF0ZW5jeSB2YWx1ZXMuCisJICogY2xvY2tzIGdvIGZyb20gYSBmZXcgdGhvdXNhbmQgdG8gc2V2ZXJhbCBodW5kcmVkIHRob3VzYW5kLgorCSAqIGxhdGVuY3kgaXMgdXN1YWxseSBhIGZldyB0aG91c2FuZAorCSAqLworCWVudHJpZXNfcmVxdWlyZWQgPSAoKHBsYW5lYV9jbG9jayAvIDEwMDApICogcGl4ZWxfc2l6ZSAqIGxhdGVuY3lfbnMpIC8KKwkJMTAwMDsKKwllbnRyaWVzX3JlcXVpcmVkIC89IEc0WF9GSUZPX0xJTkVfU0laRTsKKwlwbGFuZWFfd20gPSBlbnRyaWVzX3JlcXVpcmVkICsgcGxhbmVhX3BhcmFtcy5ndWFyZF9zaXplOworCisJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmViX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICogbGF0ZW5jeV9ucykgLworCQkxMDAwOworCWVudHJpZXNfcmVxdWlyZWQgLz0gRzRYX0ZJRk9fTElORV9TSVpFOworCXBsYW5lYl93bSA9IGVudHJpZXNfcmVxdWlyZWQgKyBwbGFuZWJfcGFyYW1zLmd1YXJkX3NpemU7CisKKwljdXJzb3JhX3dtID0gY3Vyc29yYl93bSA9IDE2OworCWN1cnNvcl9zciA9IDMyOworCisJRFJNX0RFQlVHKCJGSUZPIHdhdGVybWFya3MgLSBBOiAlZCwgQjogJWRcbiIsIHBsYW5lYV93bSwgcGxhbmViX3dtKTsKKworCS8qIENhbGMgc3IgZW50cmllcyBmb3Igb25lIHBsYW5lIGNvbmZpZ3MgKi8KKwlpZiAoc3JfaGRpc3BsYXkgJiYgKCFwbGFuZWFfY2xvY2sgfHwgIXBsYW5lYl9jbG9jaykpIHsKKwkJLyogc2VsZi1yZWZyZXNoIGhhcyBtdWNoIGhpZ2hlciBsYXRlbmN5ICovCisJCWNvbnN0IHN0YXRpYyBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOworCisJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOworCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CisKKwkJLyogVXNlIG5zL3VzIHRoZW4gZGl2aWRlIHRvIHByZXNlcnZlIHByZWNpc2lvbiAqLworCQlzcl9lbnRyaWVzID0gKCgoc3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cykgKyAxKSAqCisJCQkgICAgICBwaXhlbF9zaXplICogc3JfaGRpc3BsYXkpIC8gMTAwMDsKKwkJc3JfZW50cmllcyA9IHJvdW5kdXAoc3JfZW50cmllcyAvIGNhY2hlbGluZV9zaXplLCAxKTsKKwkJRFJNX0RFQlVHKCJzZWxmLXJlZnJlc2ggZW50cmllczogJWRcbiIsIHNyX2VudHJpZXMpOworCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBGV19CTENfU0VMRl9FTik7CisJfQorCisJRFJNX0RFQlVHKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZCwgU1IgJWRcbiIsCisJCSAgcGxhbmVhX3dtLCBwbGFuZWJfd20sIHNyX2VudHJpZXMpOworCisJcGxhbmVhX3dtICY9IDB4M2Y7CisJcGxhbmViX3dtICY9IDB4M2Y7CisKKwlJOTE1X1dSSVRFKERTUEZXMSwgKHNyX2VudHJpZXMgPDwgRFNQRldfU1JfU0hJRlQpIHwKKwkJICAgKGN1cnNvcmJfd20gPDwgRFNQRldfQ1VSU09SQl9TSElGVCkgfAorCQkgICAocGxhbmViX3dtIDw8IERTUEZXX1BMQU5FQl9TSElGVCkgfCBwbGFuZWFfd20pOworCUk5MTVfV1JJVEUoRFNQRlcyLCAoSTkxNV9SRUFEKERTUEZXMikgJiBEU1BGV19DVVJTT1JBX01BU0spIHwKKwkJICAgKGN1cnNvcmFfd20gPDwgRFNQRldfQ1VSU09SQV9TSElGVCkpOworCS8qIEhQTEwgb2ZmIGluIFNSIGhhcyBzb21lIGlzc3VlcyBvbiBHNHguLi4gZGlzYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFNQRlczLCAoSTkxNV9SRUFEKERTUEZXMykgJiB+RFNQRldfSFBMTF9TUl9FTikgfAorCQkgICAoY3Vyc29yX3NyIDw8IERTUEZXX0NVUlNPUl9TUl9TSElGVCkpOwogfQogCiBzdGF0aWMgdm9pZCBpOTY1X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdW51c2VkLCBpbnQgdW51c2VkMiwKQEAgLTI1ODYsNiArMjY1Miw5IEBACiAJdW5zaWduZWQgbG9uZyBwbGFuZWFfY2xvY2sgPSAwLCBwbGFuZWJfY2xvY2sgPSAwLCBzcl9jbG9jayA9IDA7CiAJaW50IGVuYWJsZWQgPSAwLCBwaXhlbF9zaXplID0gMDsKIAorCWlmICghZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtKQorCQlyZXR1cm47CisKIAkvKiBHZXQgdGhlIGNsb2NrIGNvbmZpZyBmcm9tIGJvdGggcGxhbmVzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CkBAIC0yNzYzLDcgKzI4MzIsNyBAQAogCiAJLyogRkRJIGxpbmsgKi8KIAlpZiAoSVNfSUdETkcoZGV2KSkgewotCQlpbnQgbGFuZSwgbGlua19idzsKKwkJaW50IGxhbmUsIGxpbmtfYncsIGJwcDsKIAkJLyogZURQIGRvZXNuJ3QgcmVxdWlyZSBGREkgbGluaywgc28ganVzdCBzZXQgRFAgTS9OCiAJCSAgIGFjY29yZGluZyB0byBjdXJyZW50IGxpbmsgY29uZmlnICovCiAJCWlmIChpc19lZHApIHsKQEAgLTI3ODIsMTAgKzI4NTEsNzIgQEAKIAkJCWxhbmUgPSA0OwogCQkJbGlua19idyA9IDI3MDAwMDsKIAkJfQotCQlpZ2RuZ19jb21wdXRlX21fbigzLCBsYW5lLCB0YXJnZXRfY2xvY2ssCisKKwkJLyogZGV0ZXJtaW5lIHBhbmVsIGNvbG9yIGRlcHRoICovCisJCXRlbXAgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKKworCQlzd2l0Y2ggKHRlbXAgJiBQSVBFX0JQQ19NQVNLKSB7CisJCWNhc2UgUElQRV84QlBDOgorCQkJYnBwID0gMjQ7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFXzEwQlBDOgorCQkJYnBwID0gMzA7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFXzZCUEM6CisJCQlicHAgPSAxODsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfMTJCUEM6CisJCQlicHAgPSAzNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmtub3duIHBpcGUgYnBjIHZhbHVlXG4iKTsKKwkJCWJwcCA9IDI0OworCQl9CisKKwkJaWdkbmdfY29tcHV0ZV9tX24oYnBwLCBsYW5lLCB0YXJnZXRfY2xvY2ssCiAJCQkJICBsaW5rX2J3LCAmbV9uKTsKIAl9CiAKKwkvKiBJcm9ubGFrZTogdHJ5IHRvIHNldHVwIGRpc3BsYXkgcmVmIGNsb2NrIGJlZm9yZSBEUExMCisJICogZW5hYmxpbmcuIFRoaXMgaXMgb25seSB1bmRlciBkcml2ZXIncyBjb250cm9sIGFmdGVyCisJICogUENIIEIgc3RlcHBpbmcsIHByZXZpb3VzIGNoaXBzZXQgc3RlcHBpbmcgc2hvdWxkIGJlCisJICogaWdub3JpbmcgdGhpcyBzZXR0aW5nLgorCSAqLworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCXRlbXAgPSBJOTE1X1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisJCS8qIEFsd2F5cyBlbmFibGUgbm9uc3ByZWFkIHNvdXJjZSAqLworCQl0ZW1wICY9IH5EUkVGX05PTlNQUkVBRF9TT1VSQ0VfTUFTSzsKKwkJdGVtcCB8PSBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFOworCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJdGVtcCAmPSB+RFJFRl9TU0NfU09VUkNFX01BU0s7CisJCXRlbXAgfD0gRFJFRl9TU0NfU09VUkNFX0VOQUJMRTsKKwkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCisJCXVkZWxheSgyMDApOworCisJCWlmIChpc19lZHApIHsKKwkJCWlmIChkZXZfcHJpdi0+bHZkc191c2Vfc3NjKSB7CisJCQkJdGVtcCB8PSBEUkVGX1NTQzFfRU5BQkxFOworCQkJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCQkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCisJCQkJdWRlbGF5KDIwMCk7CisKKwkJCQl0ZW1wICY9IH5EUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0s7CisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX0RPV05TUFJFQUQ7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisJCQl9IGVsc2UgeworCQkJCXRlbXAgfD0gRFJFRl9DUFVfU09VUkNFX09VVFBVVF9OT05TUFJFQUQ7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoSVNfSUdEKGRldikpIHsKIAkJZnAgPSAoMSA8PCBjbG9jay5uKSA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKIAkJaWYgKGhhc19yZWR1Y2VkX2Nsb2NrKQpAQCAtMjkzNiw2ICszMDY3LDggQEAKIAogCQlsdmRzID0gSTkxNV9SRUFEKGx2ZHNfcmVnKTsKIAkJbHZkcyB8PSBMVkRTX1BPUlRfRU4gfCBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUCB8IExWRFNfUElQRUJfU0VMRUNUOworCQkvKiBzZXQgdGhlIGNvcnJlc3BvbnNkaW5nIExWRFNfQk9SREVSIGJpdCAqLworCQlsdmRzIHw9IGRldl9wcml2LT5sdmRzX2JvcmRlcl9iaXRzOwogCQkvKiBTZXQgdGhlIEIwLUIzIGRhdGEgcGFpcnMgY29ycmVzcG9uZGluZyB0byB3aGV0aGVyIHdlJ3JlIGdvaW5nIHRvCiAJCSAqIHNldCB0aGUgRFBMTHMgZm9yIGR1YWwtY2hhbm5lbCBtb2RlIG9yIG5vdC4KIAkJICovCkBAIC00MTI0LDcgKzQyNTcsOSBAQAogCSAqIERpc2FibGUgY2xvY2sgZ2F0aW5nIHJlcG9ydGVkIHRvIHdvcmsgaW5jb3JyZWN0bHkgYWNjb3JkaW5nIHRvIHRoZQogCSAqIHNwZWNzLCBidXQgZW5hYmxlIGFzIG11Y2ggZWxzZSBhcyB3ZSBjYW4uCiAJICovCi0JaWYgKElTX0c0WChkZXYpKSB7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJdWludDMyX3QgZHNwY2xrX2dhdGU7CiAJCUk5MTVfV1JJVEUoUkVOQ0xLX0dBVEVfRDEsIDApOwogCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QyLCBWRl9VTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8CkBAIC00MjEyLDcgKzQzNDcsOSBAQAogCQkJaTgzMF9nZXRfZGlzcGxheV9jbG9ja19zcGVlZDsKIAogCS8qIEZvciBGSUZPIHdhdGVybWFyayB1cGRhdGVzICovCi0JaWYgKElTX0c0WChkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBOVUxMOworCWVsc2UgaWYgKElTX0c0WChkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBnNHhfdXBkYXRlX3dtOwogCWVsc2UgaWYgKElTX0k5NjVHKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGk5NjVfdXBkYXRlX3dtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggZjQ4NTZhNS4uZDgzNDQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC00MDAsNyArNDAwLDcgQEAKIHsKIAlzdHJ1Y3QgaW50ZWxfZHBfcHJpdiAgICpkcF9wcml2ID0gaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKIAotCURSTV9FUlJPUigiaTJjX2luaXQgJXNcbiIsIG5hbWUpOworCURSTV9ERUJVR19LTVMoImkyY19pbml0ICVzXG4iLCBuYW1lKTsKIAlkcF9wcml2LT5hbGdvLnJ1bm5pbmcgPSBmYWxzZTsKIAlkcF9wcml2LT5hbGdvLmFkZHJlc3MgPSAwOwogCWRwX3ByaXYtPmFsZ28uYXV4X2NoID0gaW50ZWxfZHBfaTJjX2F1eF9jaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCA2NjNhYjZkLi5jMzM0NTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC03NywxNCArNzcsMzIgQEAKIAlzdHJ1Y3QgaW50ZWxfaGRtaV9wcml2ICpoZG1pX3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OwogCXUzMiB0ZW1wOwogCi0JaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTikgewotCQl0ZW1wID0gSTkxNV9SRUFEKGhkbWlfcHJpdi0+c2R2b3hfcmVnKTsKKwl0ZW1wID0gSTkxNV9SRUFEKGhkbWlfcHJpdi0+c2R2b3hfcmVnKTsKKworCS8qIEhXIHdvcmthcm91bmQsIG5lZWQgdG8gdG9nZ2xlIGVuYWJsZSBiaXQgb2ZmIGFuZCBvbiBmb3IgMTJicGMsIGJ1dAorCSAqIHdlIGRvIHRoaXMgYW55d2F5IHdoaWNoIHNob3dzIG1vcmUgc3RhYmxlIGluIHRlc3RpbmcuCisJICovCisJaWYgKElTX0lHRE5HKGRldikpIHsKIAkJSTkxNV9XUklURShoZG1pX3ByaXYtPnNkdm94X3JlZywgdGVtcCAmIH5TRFZPX0VOQUJMRSk7Ci0JfSBlbHNlIHsKLQkJdGVtcCA9IEk5MTVfUkVBRChoZG1pX3ByaXYtPnNkdm94X3JlZyk7Ci0JCUk5MTVfV1JJVEUoaGRtaV9wcml2LT5zZHZveF9yZWcsIHRlbXAgfCBTRFZPX0VOQUJMRSk7CisJCVBPU1RJTkdfUkVBRChoZG1pX3ByaXYtPnNkdm94X3JlZyk7CiAJfQorCisJaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTikgeworCQl0ZW1wICY9IH5TRFZPX0VOQUJMRTsKKwl9IGVsc2UgeworCQl0ZW1wIHw9IFNEVk9fRU5BQkxFOworCX0KKworCUk5MTVfV1JJVEUoaGRtaV9wcml2LT5zZHZveF9yZWcsIHRlbXApOwogCVBPU1RJTkdfUkVBRChoZG1pX3ByaXYtPnNkdm94X3JlZyk7CisKKwkvKiBIVyB3b3JrYXJvdW5kLCBuZWVkIHRvIHdyaXRlIHRoaXMgdHdpY2UgZm9yIGlzc3VlIHRoYXQgbWF5IHJlc3VsdAorCSAqIGluIGZpcnN0IHdyaXRlIGdldHRpbmcgbWFza2VkLgorCSAqLworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoaGRtaV9wcml2LT5zZHZveF9yZWcsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoaGRtaV9wcml2LT5zZHZveF9yZWcpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfaGRtaV9zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggOThhZTNkNy4uMDU1OThhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgKyB2c3luY19wb3M7CiAJCS8qIGtlZXAgdGhlIHZzeW5jIHdpZHRoIGNvbnN0YW50ICovCiAJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kID0KLQkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArIHZzeW5jX3dpZHRoOworCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyB2c3luY193aWR0aDsKIAkJYm9yZGVyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1Q6CkBAIC01MjYsNiArNTI2LDE0IEBACiAJbHZkc19wcml2LT5wZml0X2NvbnRyb2wgPSBwZml0X2NvbnRyb2w7CiAJbHZkc19wcml2LT5wZml0X3BnbV9yYXRpb3MgPSBwZml0X3BnbV9yYXRpb3M7CiAJLyoKKwkgKiBXaGVuIHRoZXJlIGV4aXN0cyB0aGUgYm9yZGVyLCBpdCBtZWFucyB0aGF0IHRoZSBMVkRTX0JPUkRSCisJICogc2hvdWxkIGJlIGVuYWJsZWQuCisJICovCisJaWYgKGJvcmRlcikKKwkJZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHMgfD0gTFZEU19CT1JERVJfRU5BQkxFOworCWVsc2UKKwkJZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHMgJj0gfihMVkRTX0JPUkRFUl9FTkFCTEUpOworCS8qCiAJICogWFhYOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHN1cHBvcnQgbG93ZXIgcmVmcmVzaCByYXRlcyBvbiB0aGUKIAkgKiBwYW5lbHMgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLCBhbmQgcGVyaGFwcyBtYXRjaCB0aGUKIAkgKiB1c2VyJ3MgcmVxdWVzdGVkIHJlZnJlc2ggcmF0ZS4KQEAgLTY1Niw2ICs2NjQsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIExpZCBldmVudHMuIE5vdGUgdGhlIHVzZSBvZiAnbW9kZXNldF9vbl9saWQnOgorICogIC0gd2Ugc2V0IGl0IG9uIGxpZCBjbG9zZSwgYW5kIHJlc2V0IGl0IG9uIG9wZW4KKyAqICAtIHdlIHVzZSBpdCBhcyBhICJvbmx5IG9uY2UiIGJpdCAoaWUgd2UgaWdub3JlCisgKiAgICBkdXBsaWNhdGUgZXZlbnRzIHdoZXJlIGl0IHdhcyBhbHJlYWR5IHByb3Blcmx5CisgKiAgICBzZXQvcmVzZXQpCisgKiAgLSB0aGUgc3VzcGVuZC9yZXN1bWUgcGF0aHMgd2lsbCBhbHNvIHNldCBpdCB0bworICogICAgemVybywgc2luY2UgdGhleSByZXN0b3JlIHRoZSBtb2RlICgibGlkIG9wZW4iKS4KKyAqLwogc3RhdGljIGludCBpbnRlbF9saWRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCQkJICAgIHZvaWQgKnVudXNlZCkKIHsKQEAgLTY2MywxMyArNjgwLDE5IEBACiAJCWNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIGxpZF9ub3RpZmllcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAKLQlpZiAoYWNwaV9saWRfb3BlbigpICYmICFkZXZfcHJpdi0+c3VzcGVuZGVkKSB7Ci0JCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJaWYgKCFhY3BpX2xpZF9vcGVuKCkpIHsKKwkJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKIAl9CiAKLQlkcm1fc3lzZnNfaG90cGx1Z19ldmVudChkZXZfcHJpdi0+ZGV2KTsKKwlpZiAoIWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCkKKwkJcmV0dXJuIE5PVElGWV9PSzsKKworCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCXJldHVybiBOT1RJRllfT0s7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCAwOWEyODkyMy4uYjU3MTNlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwppbmRleCA5MDFiZWZlLi5kNjdjNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJCQliYXNlICs9IDM7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX0lJT19XUklURToKKwkJCSh2b2lkKWN0eC0+Y2FyZC0+cmVnX3JlYWQoY3R4LT5jYXJkLCBDVTE2KGJhc2UgKyAxKSk7CiAJCQljdHgtPmNhcmQtPnJlZ193cml0ZShjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpLCB0ZW1wKTsKIAkJCWJhc2UgKz0gMzsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDE0ZmE5NzAuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+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+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggZmIyMTFlNS4uMGQ3OTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWNoYXIgKmdwdV9wcmVmaXg7CiB9OwogCi1zdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXRfbmV3KHVuc2lnbmVkIG8pCitzdGF0aWMgc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIApAQCAtNTczLDEyICs1NzMsMTIgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCitzdGF0aWMgdm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQogewogCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOwogfQogCi12b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOwogCXQtPm9mZnNldF9tYXggPSAwOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJdC0+dGFibGUgPSBOVUxMOwogfQogCi12b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyB2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOwogCkBAIC02MTEsNyArNjExLDcgQEAKIAlwcmludGYoIn07XG4iKTsKIH0KIAotaW50IHRhYmxlX2J1aWxkKHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyBpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIAl1bnNpZ25lZCBpLCBtOwpAQCAtNjMxLDcgKzYzMSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKLWludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU7CiAJcmVnZXhfdCBtYXNrX3JleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggMTYxMDk0Yy4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCiBpbnQgcjEwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3Qgc3RhdHVzLCBtc2lfcmVhcm07CiAKIAlzdGF0dXMgPSByMTAwX2lycV9hY2socmRldik7CiAJaWYgKCFzdGF0dXMpIHsKQEAgLTIwOSw2ICsyMDksMjEgQEAKIAkJfQogCQlzdGF0dXMgPSByMTAwX2lycV9hY2socmRldik7CiAJfQorCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkgeworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfUlM0MDA6CisJCWNhc2UgQ0hJUF9SUzQ4MDoKKwkJCW1zaV9yZWFybSA9IFJSRUczMihSQURFT05fQUlDX0NOVEwpICYgflJTNDAwX01TSV9SRUFSTTsKKwkJCVdSRUczMihSQURFT05fQUlDX0NOVEwsIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0gfCBSUzQwMF9NU0lfUkVBUk0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTikgJiB+UlYzNzBfTVNJX1JFQVJNX0VOOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSk7CisJCQlXUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTiwgbXNpX3JlYXJtIHwgUlYzNzBfTVNJX1JFQVJNX0VOKTsKKwkJCWJyZWFrOworCQl9CisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjQwLDcgKzI1NSw3IEBACiAJaW50IHI7CiAKIAlpZiAocmRldi0+d2Iud2Jfb2JqID09IE5VTEwpIHsKLQkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIDQwOTYsCisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCBSQURFT05fR1BVX1BBR0VfU0laRSwKIAkJCQkJIHRydWUsCiAJCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCiAJCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CkBAIC01NjMsMTkgKzU3OCwxOSBAQAogCWluZGlyZWN0MV9zdGFydCA9IDE2OwogCS8qIGNwIHNldHVwICovCiAJV1JFRzMyKDB4NzE4LCBwcmVfd3JpdGVfdGltZXIgfCAocHJlX3dyaXRlX2xpbWl0IDw8IDI4KSk7Ci0JV1JFRzMyKFJBREVPTl9DUF9SQl9DTlRMLAotI2lmZGVmIF9fQklHX0VORElBTgotCSAgICAgICBSQURFT05fQlVGX1NXQVBfMzJCSVQgfAotI2VuZGlmCi0JICAgICAgIFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAorCXRtcCA9IChSRUdfU0VUKFJBREVPTl9SQl9CVUZTWiwgcmJfYnVmc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQkxLU1osIHJiX2Jsa3N6KSB8CiAJICAgICAgIFJFR19TRVQoUkFERU9OX01BWF9GRVRDSCwgbWF4X2ZldGNoKSB8CiAJICAgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworI2lmZGVmIF9fQklHX0VORElBTgorCXRtcCB8PSBSQURFT05fQlVGX1NXQVBfMzJCSVQ7CisjZW5kaWYKKwlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCk7CisKIAkvKiBTZXQgcmluZyBhZGRyZXNzICovCiAJRFJNX0lORk8oInJhZGVvbjogcmluZyBhdCAweCUwMTZsWFxuIiwgKHVuc2lnbmVkIGxvbmcpcmRldi0+Y3AuZ3B1X2FkZHIpOwogCVdSRUczMihSQURFT05fQ1BfUkJfQkFTRSwgcmRldi0+Y3AuZ3B1X2FkZHIpOwogCS8qIEZvcmNlIHJlYWQgJiB3cml0ZSBwdHIgdG8gMCAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9DTlRMLCB0bXAgfCBSQURFT05fUkJfUlBUUl9XUl9FTkEpOwogCVdSRUczMihSQURFT05fQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSLCAwKTsKQEAgLTIzNjQsNyArMjM3OSw3IEBACiAJLyoKIAkgIEZpbmQgdGhlIHRvdGFsIGxhdGVuY3kgZm9yIHRoZSBkaXNwbGF5IGRhdGEuCiAJKi8KLQlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4MCk7CisJZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgPSByZml4ZWRfY29uc3QoOCk7CiAJZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgPSByZml4ZWRfZGl2KGRpc3BfbGF0ZW5jeV9vdmVyaGVhZCwgc2Nsa19mZik7CiAJbWNfbGF0ZW5jeV9tY2xrLmZ1bGwgKz0gZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgKyBjdXJfbGF0ZW5jeV9tY2xrLmZ1bGw7CiAJbWNfbGF0ZW5jeV9zY2xrLmZ1bGwgKz0gZGlzcF9sYXRlbmN5X292ZXJoZWFkLmZ1bGwgKyBjdXJfbGF0ZW5jeV9zY2xrLmZ1bGw7CkBAIC0yNTYyLDggKzI1NzcsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByMTAwX2NzX3RyYWNrX3RleHR1cmVfcHJpbnQoc3RydWN0IHIxMDBfY3NfdHJhY2tfdGV4dHVyZSAqdCkKIHsKIAlEUk1fRVJST1IoInBpdGNoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5waXRjaCk7CisJRFJNX0VSUk9SKCJ1c2VfcGl0Y2ggICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+dXNlX3BpdGNoKTsKIAlEUk1fRVJST1IoIndpZHRoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aCk7CisJRFJNX0VSUk9SKCJ3aWR0aF8xMSAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+d2lkdGhfMTEpOwogCURSTV9FUlJPUigiaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmhlaWdodCk7CisJRFJNX0VSUk9SKCJoZWlnaHRfMTEgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0XzExKTsKIAlEUk1fRVJST1IoIm51bSBsZXZlbHMgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5udW1fbGV2ZWxzKTsKIAlEUk1fRVJST1IoImRlcHRoICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT50eGRlcHRoKTsKIAlEUk1fRVJST1IoImJwcCAgICAgICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5jcHApOwpAQCAtMjYyMywxNSArMjY0MSwxNyBAQAogCQkJCWVsc2UKIAkJCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS5waXRjaCAvICgxIDw8IGkpOwogCQkJfSBlbHNlIHsKLQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoIC8gKDEgPDwgaSk7CisJCQkJdyA9IHRyYWNrLT50ZXh0dXJlc1t1XS53aWR0aDsKIAkJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCiAJCQkJCXcgfD0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoXzExOworCQkJCXcgPSB3IC8gKDEgPDwgaSk7CiAJCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX3cpCiAJCQkJCXcgPSByb3VuZHVwX3Bvd19vZl90d28odyk7CiAJCQl9Ci0JCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodCAvICgxIDw8IGkpOworCQkJaCA9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHQ7CiAJCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUpCiAJCQkJaCB8PSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0XzExOworCQkJaCA9IGggLyAoMSA8PCBpKTsKIAkJCWlmICh0cmFjay0+dGV4dHVyZXNbdV0ucm91bmR1cF9oKQogCQkJCWggPSByb3VuZHVwX3Bvd19vZl90d28oaCk7CiAJCQlzaXplICs9IHcgKiBoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCBlMDhjNGE4Li4yZjQzZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDQwOTY7CisJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDVjN2ZlNTIuLjFjZWZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0zMTEsNiArMzExLDggQEAKIAl9CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCiAJcjMwMF92cmFtX2luZm8ocmRldik7CiAJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAppbmRleCA4NjhhZGQ2Li43YmFhNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCkBAIC0zODQsOSArMzg0LDE2IEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfVElMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCiAjICAgICAgIGRlZmluZSBBVklWT19EMUdSUEhfTUFDUk9fQUREUkVTU19NT0RFICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCiAKKy8qIFRoZSBSN3h4ICpfSElHSCBzdXJmYWNlIHJlZ3MgYXJlIGJhY2t3YXJkczsgdGhlIEQxIHJlZ3MgYXJlIGluIHRoZSBEMgorICogYmxvY2sgYW5kIHZpY2UgdmVyc2EuICBUaGlzIGFwcGxpZXMgdG8gR1JQSCwgQ1VSLCBldGMuCisgKi8KICNkZWZpbmUgQVZJVk9fRDFHUlBIX0xVVF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMDgKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDYxMTAKKyNkZWZpbmUgUjcwMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgICAweDY5MTQKKyNkZWZpbmUgUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgICAgICAgICAweDYxMTQKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDYxMTgKKyNkZWZpbmUgUjcwMF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAweDY5MWMKKyNkZWZpbmUgUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAweDYxMWMKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjAKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjQKICNkZWZpbmUgQVZJVk9fRDFHUlBIX1NVUkZBQ0VfT0ZGU0VUX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMjgKQEAgLTQwNCw2ICs0MTEsOCBAQAogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFDVVJTT1JfTU9ERV9NQVNLICAgICAgICAgKDMgPDwgOCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxQ1VSU09SX01PREVfMjRCUFAgICAgICAgIDIKICNkZWZpbmUgQVZJVk9fRDFDVVJfU1VSRkFDRV9BRERSRVNTICAgICAgICAgICAgIDB4NjQwOAorI2RlZmluZSBSNzAwX0QxQ1VSX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgMHg2YzBjCisjZGVmaW5lIFI3MDBfRDJDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAweDY0MGMKICNkZWZpbmUgQVZJVk9fRDFDVVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NjQxMAogI2RlZmluZSBBVklWT19EMUNVUl9QT1NJVElPTiAgICAgICAgICAgICAgICAgICAgMHg2NDE0CiAjZGVmaW5lIEFWSVZPX0QxQ1VSX0hPVF9TUE9UICAgICAgICAgICAgICAgICAgICAweDY0MTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggYTU1NWI3Yi4uZjc0MzUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTI2MCw2ICsyNjAsOCBAQAogCX0KIAkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKIAkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KIAlyNTIwX3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA2MDk3MTk0Li4yNzhmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMzM5LDExICszMzksMTAgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKLQlpbnQgY2hhbnNpemU7CisJaW50IGNoYW5zaXplLCBudW1jaGFuOwogCWludCByOwogCiAJLyogR2V0IFZSQU0gaW5mb3JtYXRpb25zICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CiAJdG1wID0gUlJFRzMyKFJBTUNGRyk7CiAJaWYgKHRtcCAmIENIQU5TSVpFX09WRVJSSURFKSB7CkBAIC0zNTMsMTcgKzM1MiwyMyBAQAogCX0gZWxzZSB7CiAJCWNoYW5zaXplID0gMzI7CiAJfQotCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNjAwKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA4ICogY2hhbnNpemU7Ci0JfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjY3MCkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gNCAqIGNoYW5zaXplOwotCX0gZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjEwKSB8fAotCQkJKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSkgewotCQlyZGV2LT5tYy52cmFtX3dpZHRoID0gY2hhbnNpemU7Ci0JfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzApIHx8Ci0JCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzUpKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAyICogY2hhbnNpemU7CisJdG1wID0gUlJFRzMyKENITUFQKTsKKwlzd2l0Y2ggKCh0bXAgJiBOT09GQ0hBTl9NQVNLKSA+PiBOT09GQ0hBTl9TSElGVCkgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQludW1jaGFuID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQludW1jaGFuID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQludW1jaGFuID0gNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQludW1jaGFuID0gODsKKwkJYnJlYWs7CiAJfQorCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBudW1jaGFuICogY2hhbnNpemU7CiAJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KIAlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwogCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOwpAQCAtNDA0LDM1ICs0MDksMjkgQEAKIAkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgewotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IChSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYKLQkJCQkJCQkJMHhGRkZGKSA8PCAyNDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQkJdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgewotCQkJCS8qIEVub3VnaCBwbGFjZSBhZnRlciB2cmFtICovCi0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOwotCQkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkJLyogRW5vdWdoIHBsYWNlIGJlZm9yZSB2cmFtICovCi0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTm90IGVub3VnaCBwbGFjZSBhZnRlciBvciBiZWZvcmUgc2hyaW5rCi0JCQkJICogZ2FydCBzaXplCi0JCQkJICovCi0JCQkJaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPiAoMHhGRkZGRkZGRlVMIC0gdG1wKSkgewotCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOwotCQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgorCQkJCQkJCTB4RkZGRikgPDwgMjQ7CisJCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7CisJCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgeworCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHgwMDAwMDAwMFVMOwotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKKwkJCSAqIGdhcnQgc2l6ZQorCQkJICovCisJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7CisJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKKwkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247CisJCQl9IGVsc2UgeworCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKKwkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKKwkJCX0KIAkJfQorCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwogCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7CkBAIC04NTksNyArODU4LDggQEAKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MzApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKERCX0RFQlVHLCBQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKERCX0RFQlVHLCAwKTsKQEAgLTg3Niw3ICs4NzYsOCBAQAogCXRtcCA9IFJSRUczMihTUV9NU19GSUZPX1NJWkVTKTsKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQl0bXAgPSAoQ0FDSEVfRklGT19TSVpFKDB4YSkgfAogCQkgICAgICAgRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAogCQkgICAgICAgRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfApAQCAtOTE5LDcgKzkyMCw4IEBACiAJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CiAJfSBlbHNlIGlmICgoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCS8qIG5vIHZlcnRleCBjYWNoZSAqLwogCQlzcV9jb25maWcgJj0gflZDX0VOQUJMRTsKIApAQCAtOTc2LDcgKzk3OCw4IEBACiAKIAlpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgQ0FDSEVfSU5WQUxJREFUSU9OKFZDX0FORF9UQykpOwpAQCAtMTAwMiw4ICsxMDA1LDkgQEAKIAl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKLQljYXNlIENISVBfUlM3ODA6CiAJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CiAJCXRtcCArPSAzMjsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjcwOgpAQCAtMTA0NCw4ICsxMDQ4LDkgQEAKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wID0gVENfTDJfU0laRSg4KTsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjMwOgpAQCAtMTI2NywxOSArMTI3MiwxNyBAQAogCiAJLyogU2V0IHJpbmcgYnVmZmVyIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyZGV2LT5jcC5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKFJBREVPTl9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKLQkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOwotI2Vsc2UKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsKICNlbmRpZgorCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOwogCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKIAogCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLwogCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KLQl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwpAQCAtMTQwMCw3ICsxNDAzLDcgQEAKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwgdHJ1ZSwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLCB0cnVlLAogCQkJCVJBREVPTl9HRU1fRE9NQUlOX0dUVCwgZmFsc2UsICZyZGV2LT53Yi53Yl9vYmopOwogCQlpZiAocikgewogCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBXQiBidWZmZXIgKCVkKS5cbiIsIHIpOwpAQCAtMTQ1MCw4ICsxNDUzLDggQEAKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKIHsKLQlyNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIDQwOTYpOwotCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiA0MDk2KTsKKwlyNjAwX2JsaXRfcHJlcGFyZV9jb3B5KHJkZXYsIG51bV9wYWdlcyAqIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwlyNjAwX2ttc19ibGl0X2NvcHkocmRldiwgc3JjX29mZnNldCwgZHN0X29mZnNldCwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCXI2MDBfYmxpdF9kb25lX2NvcHkocmRldiwgZmVuY2UpOwogCXJldHVybiAwOwogfQpAQCAtMTYzMiwxMCArMTYzNSwxMyBAQAogCXI2MDBfc2NyYXRjaF9pbml0KHJkZXYpOwogCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KIAlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwppbmRleCBkZWM1MDEwLi41ZWE0MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKQEAgLTU4Miw2ICs1ODIsOCBAQAogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKKwl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CisKIAlpZiAoKHNpemVfYnl0ZXMgJiAzKSB8fCAoc3JjX2dwdV9hZGRyICYgMykgfHwgKGRzdF9ncHVfYWRkciAmIDMpKSB7CiAJCW1heF9ieXRlcyA9IDgxOTI7CiAKQEAgLTYxNyw4ICs2MTksOCBAQAogCQkJCWlmICghZGV2X3ByaXYtPmJsaXRfdmIpCiAJCQkJCXJldHVybjsKIAkJCQlzZXRfc2hhZGVycyhkZXYpOworCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAkJCX0KLQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3gpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzA2LDggKzcwOCw4IEBACiAJCQkJCXJldHVybjsKIAogCQkJCXNldF9zaGFkZXJzKGRldik7CisJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCQkJfQotCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCiAJCQl2YlswXSA9IGkyZihkc3RfeCAvIDQpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzcyLDYgKzc3NCw3IEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY2JfZm9ybWF0LCB0ZXhfZm9ybWF0OworCWludCBzeDIsIHN5MiwgZHgyLCBkeTI7CiAJdTY0IHZiX2FkZHI7CiAJdTMyICp2YjsKIApAQCAtNzg2LDE2ICs3ODksMTAgQEAKIAl9CiAJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCi0JaWYgKGNwcCA9PSA0KSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKLQl9IGVsc2UgaWYgKGNwcCA9PSAyKSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzVfNl81OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzVfNl81OwotCX0gZWxzZSB7Ci0JCWNiX2Zvcm1hdCA9IENPTE9SXzg7Ci0JCXRleF9mb3JtYXQgPSBGTVRfODsKLQl9CisJc3gyID0gc3ggKyB3OworCXN5MiA9IHN5ICsgaDsKKwlkeDIgPSBkeCArIHc7CisJZHkyID0gZHkgKyBoOwogCiAJdmJbMF0gPSBpMmYoZHgpOwogCXZiWzFdID0gaTJmKGR5KTsKQEAgLTgwMywzMSArODAwLDQ2IEBACiAJdmJbM10gPSBpMmYoc3kpOwogCiAJdmJbNF0gPSBpMmYoZHgpOwotCXZiWzVdID0gaTJmKGR5ICsgaCk7CisJdmJbNV0gPSBpMmYoZHkyKTsKIAl2Yls2XSA9IGkyZihzeCk7Ci0JdmJbN10gPSBpMmYoc3kgKyBoKTsKKwl2Yls3XSA9IGkyZihzeTIpOwogCi0JdmJbOF0gPSBpMmYoZHggKyB3KTsKLQl2Yls5XSA9IGkyZihkeSArIGgpOwotCXZiWzEwXSA9IGkyZihzeCArIHcpOwotCXZiWzExXSA9IGkyZihzeSArIGgpOworCXZiWzhdID0gaTJmKGR4Mik7CisJdmJbOV0gPSBpMmYoZHkyKTsKKwl2YlsxMF0gPSBpMmYoc3gyKTsKKwl2YlsxMV0gPSBpMmYoc3kyKTsKKworCXN3aXRjaChjcHApIHsKKwljYXNlIDQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzhfOF84Xzg7CisJCXRleF9mb3JtYXQgPSBGTVRfOF84XzhfODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKKwkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfODsKKwkJdGV4X2Zvcm1hdCA9IEZNVF84OworCQlicmVhazsKKwl9CiAKIAkvKiBzcmMgKi8KIAlzZXRfdGV4X3Jlc291cmNlKGRldl9wcml2LCB0ZXhfZm9ybWF0LAogCQkJIHNyY19waXRjaCAvIGNwcCwKLQkJCSBzeSArIGgsIHNyY19waXRjaCAvIGNwcCwKKwkJCSBzeTIsIHNyY19waXRjaCAvIGNwcCwKIAkJCSBzcmNfZ3B1X2FkZHIpOwogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKLQkJCSAgICBSNjAwX1RDX0FDVElPTl9FTkEsIChzcmNfcGl0Y2ggKiAoc3kgKyBoKSksIHNyY19ncHVfYWRkcik7CisJCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCBzcmNfcGl0Y2ggKiBzeTIsIHNyY19ncHVfYWRkcik7CiAKIAkvKiBkc3QgKi8KIAlzZXRfcmVuZGVyX3RhcmdldChkZXZfcHJpdiwgY2JfZm9ybWF0LAotCQkJICBkc3RfcGl0Y2ggLyBjcHAsIGR5ICsgaCwKKwkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeTIsCiAJCQkgIGRzdF9ncHVfYWRkcik7CiAKIAkvKiBzY2lzc29ycyAqLwotCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeCArIHcsIGR5ICsgaCk7CisJc2V0X3NjaXNzb3JzKGRldl9wcml2LCBkeCwgZHksIGR4MiwgZHkyKTsKIAogCS8qIFZlcnRleCBidWZmZXIgc2V0dXAgKi8KIAl2Yl9hZGRyID0gZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKwpAQCAtODQwLDcgKzg1Miw3IEBACiAKIAljcF9zZXRfc3VyZmFjZV9zeW5jKGRldl9wcml2LAogCQkJICAgIFI2MDBfQ0JfQUNUSU9OX0VOQSB8IFI2MDBfQ0IwX0RFU1RfQkFTRV9FTkEsCi0JCQkgICAgZHN0X3BpdGNoICogKGR5ICsgaCksIGRzdF9ncHVfYWRkcik7CisJCQkgICAgZHN0X3BpdGNoICogZHkyLCBkc3RfZ3B1X2FkZHIpOwogCiAJZGV2X3ByaXYtPmJsaXRfdmItPnVzZWQgKz0gMTIgKiA0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCA5MzEwOGJiLi5kYmY3MTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjIwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3MTApKQogCQlzcV9jb25maWcgPSAwOwogCWVsc2UKQEAgLTYxMCw2ICs2MTAsNyBAQAogCiAJRFJNX0RFQlVHKCJlbWl0dGluZyBjb3B5ICUxNmxseCAlMTZsbHggJWQgJWRcbiIsIHNyY19ncHVfYWRkciwgZHN0X2dwdV9hZGRyLAogCQkgIHNpemVfYnl0ZXMsIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKKwl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAJaWYgKChzaXplX2J5dGVzICYgMykgfHwgKHNyY19ncHVfYWRkciAmIDMpIHx8IChkc3RfZ3B1X2FkZHIgJiAzKSkgewogCQltYXhfYnl0ZXMgPSA4MTkyOwogCkBAIC02NTIsNyArNjUzLDYgQEAKIAkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAjZW5kaWYKIAkJCX0KLQkJCXZiID0gKHUzMiAqKShyZGV2LT5yNjAwX2JsaXQudmJfaWItPnB0ciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3gpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzQ3LDcgKzc0Nyw2IEBACiAJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCQkJfQogI2VuZGlmCi0JCQl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAKIAkJCXZiWzBdID0gaTJmKGRzdF94IC8gNCk7CiAJCQl2YlsxXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDE3ZTQyMTkuLjBkODIwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC00NjYsNiArNDY2LDIzIEBACiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7CiAJCQlzd2l0Y2ggKHJlZykgeworCQkJY2FzZSBTUV9FU0dTX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfR1NWU19SSU5HX0JBU0U6CisJCQljYXNlIFNRX0VTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfR1NUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9WU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1BTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfRkJVRl9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1JFRFVDX1JJTkdfQkFTRToKKwkJCWNhc2UgU1hfTUVNT1JZX0VYUE9SVF9CQVNFOgorCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQkJaWYgKHIpIHsKKwkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTkZJR19SRUcgIgorCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCWJyZWFrOwogCQkJY2FzZSBDUF9DT0hFUl9CQVNFOgogCQkJCS8qIHVzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQyAqLwogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDg3LDYgKzUwNCw3IEBACiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKIAkJCWNhc2UgREJfREVQVEhfQkFTRToKKwkJCWNhc2UgREJfSFRJTEVfREFUQV9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMl9CQVNFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IDliNjRkNDcuLjI3YWI0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTExOSw2ICsxMTksNyBAQAogI2RlZmluZQlEQl9ERUJVRwkJCQkJMHg5ODMwCiAjZGVmaW5lCQlQUkVaX01VU1RfV0FJVF9GT1JfUE9TVFpfRE9ORQkJCSgxIDw8IDMxKQogI2RlZmluZQlEQl9ERVBUSF9CQVNFCQkJCQkweDI4MDBDCisjZGVmaW5lCURCX0hUSUxFX0RBVEFfQkFTRQkJCQkweDI4MDE0CiAjZGVmaW5lCURCX1dBVEVSTUFSS1MJCQkJCTB4OTgzOAogI2RlZmluZQkJREVQVEhfRlJFRSh4KQkJCQkJKCh4KSA8PCAwKQogI2RlZmluZQkJREVQVEhfRkxVU0goeCkJCQkJCSgoeCkgPDwgNSkKQEAgLTE3MSw2ICsxNzIsMTQgQEAKICNkZWZpbmUgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKICMgICAgICAgZGVmaW5lIE5VTV9HU19TVEFDS19FTlRSSUVTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCiAjICAgICAgIGRlZmluZSBOVU1fRVNfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgU1FfRVNHU19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzQwCisjZGVmaW5lIFNRX0dTVlNfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0OAorI2RlZmluZSBTUV9FU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNTAKKyNkZWZpbmUgU1FfR1NUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzU4CisjZGVmaW5lIFNRX1ZTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM2MAorI2RlZmluZSBTUV9QU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjgKKyNkZWZpbmUgU1FfRkJVRl9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzcwCisjZGVmaW5lIFNRX1JFRFVDX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3OAogCiAjZGVmaW5lIEdSQk1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAogIyAgICAgICBkZWZpbmUgR1JCTV9SRUFEX1RJTUVPVVQoeCkgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCkBAIC0yNzEsNiArMjgwLDEwIEBACiAjZGVmaW5lCVBDSUVfUE9SVF9JTkRFWAkJCQkJMHgwMDM4CiAjZGVmaW5lCVBDSUVfUE9SVF9EQVRBCQkJCQkweDAwM0MKIAorI2RlZmluZSBDSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUgUkFNQ0ZHCQkJCQkJMHgyNDA4CiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMQpAQCAtMzUyLDYgKzM2NSw3IEBACiAKIAogI2RlZmluZQlTWF9NSVNDCQkJCQkJMHgyODM1MAorI2RlZmluZQlTWF9NRU1PUllfRVhQT1JUX0JBU0UJCQkJMHg5MDEwCiAjZGVmaW5lCVNYX0RFQlVHXzEJCQkJCTB4OTA1NAogI2RlZmluZQkJU01YX0VWRU5UX1JFTEVBU0UJCQkJKDEgPDwgMCkKICNkZWZpbmUJCUVOQUJMRV9ORVdfU01YX0FERFJFU1MJCQkJKDEgPDwgMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA1YWIzNWI4Li4yMjQ1MDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTEzOSw2ICsxMzksMTAgQEAKIAl1aW50MzJfdCBkZWZhdWx0X3NjbGs7CiB9OwogCisvKgorICogUG93ZXIgbWFuYWdlbWVudAorICovCitpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtMjc2LDYgKzI4MCw4IEBACiAJc3RydWN0IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW0JdnJhbTsKIH07CiAKKyNkZWZpbmUgUkFERU9OX0dQVV9QQUdFX1NJWkUgNDA5NgorCiBzdHJ1Y3QgcmFkZW9uX2dhcnQgewogCWRtYV9hZGRyX3QJCQl0YWJsZV9hZGRyOwogCXVuc2lnbmVkCQkJbnVtX2dwdV9wYWdlczsKQEAgLTUxMyw2ICs1MTksNyBAQAogICogQUdQCiAgKi8KIGludCByYWRlb25fYWdwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByYWRlb25fYWdwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hZ3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIApAQCAtNjIxLDcgKzYyOCw5IEBACiAJCSAgICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICAgdW5zaWduZWQgbnVtX3BhZ2VzLAogCQkgICAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworCXVpbnQzMl90ICgqZ2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpzZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKKwl1aW50MzJfdCAoKmdldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CiAJdm9pZCAoKnNldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIAl2b2lkICgqc2V0X2Nsb2NrX2dhdGluZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwpAQCAtNzgzLDYgKzc5Miw3IEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICptZV9mdzsJLyogYWxsIGZhbWlseSBNRSBmaXJtd2FyZSAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZwX2Z3OwkvKiByNi83MDAgUEZQIGZpcm13YXJlICovCiAJc3RydWN0IHI2MDBfYmxpdCByNjAwX2JsaXQ7CisJaW50IG1zaV9lbmFibGVkOyAvKiBtc2kgZW5hYmxlZCAqLwogfTsKIAogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTk1Miw3ICs5NjIsOSBAQAogI2RlZmluZSByYWRlb25fY29weV9ibGl0KHJkZXYsIHMsIGQsIG5wLCBmKSAocmRldiktPmFzaWMtPmNvcHlfYmxpdCgocmRldiksIChzKSwgKGQpLCAobnApLCAoZikpCiAjZGVmaW5lIHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2RtYSgocmRldiksIChzKSwgKGQpLCAobnApLCAoZikpCiAjZGVmaW5lIHJhZGVvbl9jb3B5KHJkZXYsIHMsIGQsIG5wLCBmKSAocmRldiktPmFzaWMtPmNvcHkoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQorI2RlZmluZSByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9lbmdpbmVfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCisjZGVmaW5lIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpIChyZGV2KS0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jaygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9zZXRfbWVtb3J5X2Nsb2NrKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2VuZ2luZV9jbG9jaygocmRldiksIChlKSkKICNkZWZpbmUgcmFkZW9uX3NldF9wY2llX2xhbmVzKHJkZXYsIGwpIChyZGV2KS0+YXNpYy0+c2V0X3BjaWVfbGFuZXMoKHJkZXYpLCAobCkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2Nsb2NrX2dhdGluZygocmRldiksIChlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKaW5kZXggMjNlYTk5NS4uNTRiZjQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKQEAgLTIzNyw2ICsyMzcsMTggQEAKICNlbmRpZgogfQogCit2b2lkIHJhZGVvbl9hZ3BfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIF9fT1NfSEFTX0FHUAorCWludCByOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJyYWRlb24gQUdQIHJlaW5pdCBmYWlsZWRcbiIpOworCX0KKyNlbmRpZgorfQorCiB2b2lkIHJhZGVvbl9hZ3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBfX09TX0hBU19BR1AKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCBjMzUzMmM3Li5jMThmYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zMSwxMCArMzEsMTMgQEAKIC8qCiAgKiBjb21tb24gZnVuY3Rpb25zCiAgKi8KK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgbWVtX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKQEAgLTk1LDcgKzk4LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9IE5VTEwsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMTQ4LDcgKzE1Myw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTE4NSw3ICsxOTIsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTIyNyw3ICsyMzYsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjczLDcgKzI4NCw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTMxMiw3ICszMjUsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjMwMF9jb3B5X2RtYSwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTM1Nyw3ICszNzIsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTM5Myw3ICs0MTAsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTQ1Niw3ICs0NzUsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5ID0gJnI2MDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtNDkzLDcgKzUxNCw5IEBACiAJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwppbmRleCA1YjZjMDhjLi4yZWQ4OGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKQEAgLTQ2LDcgKzQ2LDggQEAKIAkJCSAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgaW50IGNvbm5lY3Rvcl90eXBlLAogCQkJICBzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICppMmNfYnVzLAotCQkJICBib29sIGxpbmtiLCB1aW50MzJfdCBpZ3BfbGFuZV9pbmZvKTsKKwkJCSAgYm9vbCBsaW5rYiwgdWludDMyX3QgaWdwX2xhbmVfaW5mbywKKwkJCSAgdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZCk7CiAKIC8qIGZyb20gcmFkZW9uX2xlZ2FjeV9lbmNvZGVyLmMgKi8KIGV4dGVybiB2b2lkCkBAIC0xOTMsNiArMTk0LDIzIEBACiAJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0CiB9OwogCitjb25zdCB1aW50MTZfdCBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnRbXSA9IHsKKwlDT05ORUNUT1JfT0JKRUNUX0lEX05PTkUsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0ksIC8qIG5vdCBhbGwgYm9hcmRzIHN1cHBvcnQgREwgKi8KKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRCwgLyogbm90IGFsbCBib2FyZHMgc3VwcG9ydCBETCAqLworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBLCAvKiB0ZWNobmljYWxseSBEVkktQSAqLworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfQ09NUE9TSVRFLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUywKKwlDT05ORUNUT1JfT0JKRUNUX0lEXzlQSU5fRElOLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4sCisJQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9BLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8KK307CisKIGNvbnN0IGludCBvYmplY3RfY29ubmVjdG9yX2NvbnZlcnRbXSA9IHsKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKIAlEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwKQEAgLTIyOSw3ICsyNDcsNyBAQAogCUFUT01fT0JKRUNUX0hFQURFUiAqb2JqX2hlYWRlcjsKIAlpbnQgaSwgaiwgcGF0aF9zaXplLCBkZXZpY2Vfc3VwcG9ydDsKIAlpbnQgY29ubmVjdG9yX3R5cGU7Ci0JdWludDE2X3QgaWdwX2xhbmVfaW5mbywgY29ubl9pZDsKKwl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvLCBjb25uX2lkLCBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCWJvb2wgbGlua2I7CiAJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyBkZGNfYnVzOwogCkBAIC0yNzcsNyArMjk1LDggQEAKIAkJCQlBVE9NX0RFVklDRV9DVl9TVVBQT1JUKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSAmJgorCQkJLyogSUdQIGNoaXBzICovCisJCQlpZiAoKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgJiYKIAkJCSAgICAoY29uX29ial9pZCA9PQogCQkJICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1BDSUVfQ09OTkVDVE9SKSkgewogCQkJCXVpbnQxNl90IGlncF9vZmZzZXQgPSAwOwpAQCAtMzExLDYgKzMzMCw3IEBACiAJCQkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJCQkgICAgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkgICAgW2N0XTsKKwkJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjdDsKIAkJCQkJCWlncF9sYW5lX2luZm8gPQogCQkJCQkJICAgIHNsb3RfY29uZmlnICYgMHhmZmZmOwogCQkJCQl9IGVsc2UKQEAgLTMyMSw2ICszNDEsNyBAQAogCQkJCWlncF9sYW5lX2luZm8gPSAwOwogCQkJCWNvbm5lY3Rvcl90eXBlID0KIAkJCQkgICAgb2JqZWN0X2Nvbm5lY3Rvcl9jb252ZXJ0W2Nvbl9vYmpfaWRdOworCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25fb2JqX2lkOwogCQkJfQogCiAJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCkBAIC00MjUsNyArNDQ2LDggQEAKIAkJCQkJCSAgbGUxNl90b19jcHUocGF0aC0+CiAJCQkJCQkJICAgICAgdXNEZXZpY2VUYWcpLAogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwgJmRkY19idXMsCi0JCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvKTsKKwkJCQkJCSAgbGlua2IsIGlncF9sYW5lX2luZm8sCisJCQkJCQkgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCiAJCX0KIAl9CkBAIC00MzUsNiArNDU3LDQ1IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50MTZfdCBhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIGludCBjb25uZWN0b3JfdHlwZSwKKwkJCQkJCSB1aW50MTZfdCBkZXZpY2VzKQoreworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJcmV0dXJuIHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydAorCQkJW2Nvbm5lY3Rvcl90eXBlXTsKKwl9IGVsc2UgaWYgKCgoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCSAgICAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQpKSAmJgorCQkgICAoZGV2aWNlcyAmIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkpICB7CisJCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCQlzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHggPSBtb2RlX2luZm8tPmF0b21fY29udGV4dDsKKwkJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgWFRNRFNfSW5mbyk7CisJCXVpbnQxNl90IHNpemUsIGRhdGFfb2Zmc2V0OworCQl1aW50OF90IGZyZXYsIGNyZXY7CisJCUFUT01fWFRNRFNfSU5GTyAqeHRtZHM7CisKKwkJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihjdHgsIGluZGV4LCAmc2l6ZSwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCQl4dG1kcyA9IChBVE9NX1hUTURTX0lORk8gKikoY3R4LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCisJCWlmICh4dG1kcy0+dWNTdXBwb3J0ZWRMaW5rICYgQVRPTV9YVE1EU19TVVBQT1JURURfRFVBTExJTkspIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0k7CisJCQllbHNlCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQl9IGVsc2UgeworCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydAorCQkJW2Nvbm5lY3Rvcl90eXBlXTsKKwl9Cit9CisKIHN0cnVjdCBiaW9zX2Nvbm5lY3RvciB7CiAJYm9vbCB2YWxpZDsKIAl1aW50MTZfdCBsaW5lX211eDsKQEAgLTU5MywxNCArNjU0LDIwIEBACiAKIAkvKiBhZGQgdGhlIGNvbm5lY3RvcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRTsgaSsrKSB7Ci0JCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0udmFsaWQpCisJCWlmIChiaW9zX2Nvbm5lY3RvcnNbaV0udmFsaWQpIHsKKwkJCXVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQgPQorCQkJCWF0b21iaW9zX2dldF9jb25uZWN0b3Jfb2JqZWN0X2lkKGRldiwKKwkJCQkJCSAgICAgIGJpb3NfY29ubmVjdG9yc1tpXS5jb25uZWN0b3JfdHlwZSwKKwkJCQkJCSAgICAgIGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzKTsKIAkJCXJhZGVvbl9hZGRfYXRvbV9jb25uZWN0b3IoZGV2LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0ubGluZV9tdXgsCiAJCQkJCQkgIGJpb3NfY29ubmVjdG9yc1tpXS5kZXZpY2VzLAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uCiAJCQkJCQkgIGNvbm5lY3Rvcl90eXBlLAogCQkJCQkJICAmYmlvc19jb25uZWN0b3JzW2ldLmRkY19idXMsCi0JCQkJCQkgIGZhbHNlLCAwKTsKKwkJCQkJCSAgZmFsc2UsIDAsCisJCQkJCQkgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOworCQl9CiAJfQogCiAJcmFkZW9uX2xpbmtfZW5jb2Rlcl9jb25uZWN0b3IoZGV2KTsKQEAgLTY0MSw4ICs3MDgsMTIgQEAKIAkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNSZWZlcmVuY2VDbG9jayk7CiAJCXAxcGxsLT5yZWZlcmVuY2VfZGl2ID0gMDsKIAotCQlwMXBsbC0+cGxsX291dF9taW4gPQotCQkgICAgbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJaWYgKGNyZXYgPCAyKQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOworCQllbHNlCisJCQlwMXBsbC0+cGxsX291dF9taW4gPQorCQkJCWxlMzJfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm9fMTIudWxNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CiAJCXAxcGxsLT5wbGxfb3V0X21heCA9CiAJCSAgICBsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCkBAIC02NTEsNiArNzIyLDE2IEBACiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCQllbHNlCiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gMjAwMDA7CisJCX0gZWxzZSBpZiAocDFwbGwtPnBsbF9vdXRfbWluID4gNjQ4MDApIHsKKwkJCS8qIExpbWl0aW5nIHRoZSBwbGwgb3V0cHV0IHJhbmdlIGlzIGEgZ29vZCB0aGluZyBnZW5lcmFsbHkgYXMKKwkJCSAqIGl0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHBsbCBjb21iaW5hdGlvbnMgZm9yIGEgZ2l2ZW4KKwkJCSAqIGZyZXF1ZW5jeSBwcmVzdW1hYmx5IHRvIHRoZSBvbmVzIHRoYXQgd29yayBiZXN0IG9uIGVhY2ggY2FyZC4KKwkJCSAqIEhvd2V2ZXIsIGNlcnRhaW4gZHVhbGxpbmsgRFZJIG1vbml0b3JzIHNlZW0gdG8gbGlrZQorCQkJICogcGxsIGNvbWJpbmF0aW9ucyB0aGF0IHdvdWxkIGJlIGxpbWl0ZWQgYnkgdGhpcyBhdCBsZWFzdCBvbgorCQkJICogcHJlLURDRSAzLjAgcjZ4eCBoYXJkd2FyZS4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBwZXIKKwkJCSAqIGZhbWlseS4KKwkJCSAqLworCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCX0KIAogCQlwMXBsbC0+cGxsX2luX21pbiA9CkBAIC03NjcsNiArODQ4LDQ2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hdG9tX3NzICpyYWRlb25fYXRvbWJpb3NfZ2V0X3NzX2luZm8oc3RydWN0CisJCQkJCQkJICByYWRlb25fZW5jb2RlcgorCQkJCQkJCSAgKmVuY29kZXIsCisJCQkJCQkJICBpbnQgaWQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmJhc2UuZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQUExMX1NTX0luZm8pOworCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXN0cnVjdCBfQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTyAqc3NfaW5mbzsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJc3RydWN0IHJhZGVvbl9hdG9tX3NzICpzcyA9IE5VTEw7CisKKwlpZiAoaWQgPiBBVE9NX01BWF9TU19FTlRSWSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwgJmZyZXYsCisJCQkgICAgICAgJmNyZXYsICZkYXRhX29mZnNldCk7CisKKwlzc19pbmZvID0KKwkgICAgKHN0cnVjdCBfQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCWlmIChzc19pbmZvKSB7CisJCXNzID0KKwkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fYXRvbV9zcyksIEdGUF9LRVJORUwpOworCisJCWlmICghc3MpCisJCQlyZXR1cm4gTlVMTDsKKworCQlzcy0+cGVyY2VudGFnZSA9IGxlMTZfdG9fY3B1KHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOworCQlzcy0+dHlwZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTcHJlYWRTcGVjdHJ1bVR5cGU7CisJCXNzLT5zdGVwID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1NTX1N0ZXA7CisJCXNzLT5kZWxheSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19EZWxheTsKKwkJc3MtPnJhbmdlID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1NTX1JhbmdlOworCQlzcy0+cmVmZGl2ID0gc3NfaW5mby0+YXNTU19JbmZvW2lkXS51Y1JlY29tbWVuZGVkUmVmX0RpdjsKKwl9CisJcmV0dXJuIHNzOworfQorCiB1bmlvbiBsdmRzX2luZm8gewogCXN0cnVjdCBfQVRPTV9MVkRTX0lORk8gaW5mbzsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPX1YxMiBpbmZvXzEyOwpAQCAtNzk4LDI3ICs5MTksMzEgQEAKIAkJaWYgKCFsdmRzKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5jbG9jayA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1BpeENsaykgKiAxMDsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEFjdGl2ZSk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5oYmxhbmsgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIQmxhbmtpbmdfVGltZSk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhvdmVycGx1cyA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfd2lkdGggPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudmJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVkJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52b3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNXaWR0aCk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ICsKKwkJCWxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ICsKKwkJCWxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNPZmZzZXQpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS52dG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY19lbmQgPSBsdmRzLT5uYXRpdmVfbW9kZS52c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOwogCQlsdmRzLT5wYW5lbF9wd3JfZGVsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzT2ZmRGVsYXlJbk1zKTsKIAkJbHZkcy0+bHZkc19taXNjID0gbHZkc19pbmZvLT5pbmZvLnVjTFZEU19NaXNjOworCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZsdmRzLT5uYXRpdmVfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CisKKwkJbHZkcy0+c3MgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3NzX2luZm8oZW5jb2RlciwgbHZkc19pbmZvLT5pbmZvLnVjU1NfSWQpOwogCiAJCWVuY29kZXItPm5hdGl2ZV9tb2RlID0gbHZkcy0+bmF0aXZlX21vZGU7CiAJfQpAQCAtODU3LDggKzk4Miw3IEBACiB9CiAKIGJvb2wgcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpbmRleCwKLQkJCQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OICpjcnRjX3RpbWluZywKLQkJCQlpbnQzMl90ICpwaXhlbF9jbG9jaykKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKIAlBVE9NX0FOQUxPR19UVl9JTkZPICp0dl9pbmZvOwpAQCAtODY2LDcgKzk5MCw3IEBACiAJQVRPTV9EVERfRk9STUFUICpkdGRfdGltaW5nczsKIAlpbnQgZGF0YV9pbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEFuYWxvZ1RWX0luZm8pOwogCXU4IGZyZXYsIGNyZXY7Ci0JdWludDE2X3QgZGF0YV9vZmZzZXQ7CisJdTE2IGRhdGFfb2Zmc2V0LCBtaXNjOwogCiAJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgZGF0YV9pbmRleCwgTlVMTCwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOwogCkBAIC04NzYsMjggKzEwMDAsMzcgQEAKIAkJaWYgKGluZGV4ID4gTUFYX1NVUFBPUlRFRF9UVl9USU1JTkcpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOwotCQljcnRjX3RpbWluZy0+dXNIX0Rpc3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX0Rpc3ApOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfaHRvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9Ub3RhbCk7CisJCW1vZGUtPmNydGNfaGRpc3BsYXkgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX0Rpc3ApOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jU3RhcnQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KSArCisJCQlsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOwotCQljcnRjX3RpbWluZy0+dXNWX0Rpc3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX0Rpc3ApOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jV2lkdGggPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9Ub3RhbCk7CisJCW1vZGUtPmNydGNfdmRpc3BsYXkgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX0Rpc3ApOworCQltb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jU3RhcnQpOworCQltb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KSArCisJCQlsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mbyA9IHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0uc3VzTW9kZU1pc2NJbmZvOworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7CisJCWlmIChtaXNjICYgQVRPTV9WU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOworCQlpZiAobWlzYyAmIEFUT01fSFNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0NPTVBPU0lURVNZTkMpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0NTWU5DOworCQlpZiAobWlzYyAmIEFUT01fSU5URVJMQUNFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19JTlRFUkxBQ0U7CisJCWlmIChtaXNjICYgQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfREJMU0NBTjsKIAotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblJpZ2h0ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5SaWdodCk7Ci0JCWNydGNfdGltaW5nLT51Y092ZXJzY2FuTGVmdCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuTGVmdCk7Ci0JCWNydGNfdGltaW5nLT51Y092ZXJzY2FuQm90dG9tID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfT3ZlcnNjYW5Cb3R0b20pOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhblRvcCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuVG9wKTsKLQkJKnBpeGVsX2Nsb2NrID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c1BpeGVsQ2xvY2spICogMTA7CisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c1BpeGVsQ2xvY2spICogMTA7CiAKIAkJaWYgKGluZGV4ID09IDEpIHsKIAkJCS8qIFBBTCB0aW1pbmdzIGFwcGVhciB0byBoYXZlIHdyb25nIHZhbHVlcyBmb3IgdG90YWxzICovCi0JCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsIC09IDE7Ci0JCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsIC09IDE7CisJCQltb2RlLT5jcnRjX2h0b3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y192dG90YWwgLT0gMTsKIAkJfQogCQlicmVhazsKIAljYXNlIDI6CkBAIC05MDYsMTcgKzEwMzksMzYgQEAKIAkJCXJldHVybiBmYWxzZTsKIAogCQlkdGRfdGltaW5ncyA9ICZ0dl9pbmZvX3YxXzItPmFNb2RlVGltaW5nc1tpbmRleF07Ci0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY09mZnNldCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArIGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZCbGFua2luZ19UaW1lKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNXaWR0aCk7CisJCW1vZGUtPmNydGNfaHRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSk7CisJCW1vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfaHN5bmNfZW5kID0gbW9kZS0+Y3J0Y19oc3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIU3luY1dpZHRoKTsKIAotCQljcnRjX3RpbWluZy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1BpeENsaykgKiAxMDsKKwkJbW9kZS0+Y3J0Y192dG90YWwgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7CisJCW1vZGUtPmNydGNfdmRpc3BsYXkgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jT2Zmc2V0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCisJCW1vZGUtPmZsYWdzID0gMDsKKwkJbWlzYyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CisKKwkJbW9kZS0+Y2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gdHJ1ZTsKQEAgLTk4MSw2ICsxMTMzLDI0IEBACiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CiAKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0RW5naW5lQ2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5FbmdpbmVDbG9jazsKK30KKwordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlHRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04gYXJnczsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRNZW1vcnlDbG9jayk7CisKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKKwlyZXR1cm4gYXJncy51bFJldHVybk1lbW9yeUNsb2NrOworfQorCiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkJICB1aW50MzJfdCBlbmdfY2xvY2spCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCmluZGV4IDJlOTM4ZjcuLjEwYmQ1MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9Ci0JCXIgPSByYWRlb25fY29weV9kbWEocmRldiwgc2FkZHIsIGRhZGRyLCBzaXplIC8gNDA5NiwgZmVuY2UpOworCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CkBAIC04OCw3ICs4OCw3IEBACiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9Ci0JCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2JsaXQocmRldiwgc2FkZHIsIGRhZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwppbmRleCAzNGE5YjkxLi45MDY5MjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCkBAIC01MCwxOSArNTAsMTYgQEAKIAl2cmFtX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOwogCWJpb3MgPSBpb3JlbWFwKHZyYW1fYmFzZSwgc2l6ZSk7CiAJaWYgKCFiaW9zKSB7Ci0JCURSTV9FUlJPUigiVW5hYmxlIHRvIG1tYXAgdnJhbVxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoc2l6ZSA9PSAwIHx8IGJpb3NbMF0gIT0gMHg1NSB8fCBiaW9zWzFdICE9IDB4YWEpIHsKIAkJaW91bm1hcChiaW9zKTsKLQkJRFJNX0VSUk9SKCJiYWQgcm9tIHNpZ25hdHVyZVxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJcmRldi0+YmlvcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkgewogCQlpb3VubWFwKGJpb3MpOwotCQlEUk1fRVJST1IoImttYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAltZW1jcHkocmRldi0+YmlvcywgYmlvcywgc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCmluZGV4IGY1YzMyYTcuLmE4MTM1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiYXRvbS5oIgogCiAvKiAxMCBraHogKi8KLXN0YXRpYyB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnNwbGwgPSAmcmRldi0+Y2xvY2suc3BsbDsKIAl1aW50MzJfdCBmYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2LCBzY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDc0ODI2NWEuLjUyNTNjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTQ5LDcgKzQ5LDggQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cyk7CisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTgwOCwyNSArODA5LDI1IEBACiAJbHZkcy0+cGFuZWxfYmxvbl9kZWxheSA9IChsdmRzX3NzX2dlbl9jbnRsID4+IFJBREVPTl9MVkRTX1BXUlNFUV9ERUxBWTJfU0hJRlQpICYgMHhmOwogCiAJaWYgKGZwX3ZlcnRfc3RyZXRjaCAmIFJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFKQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9QQU5FTF9TSVpFKSA+PgogCQkgICAgIFJBREVPTl9WRVJUX1BBTkVMX1NISUZUKSArIDE7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKFJSRUczMihSQURFT05fQ1JUQ19WX1RPVEFMX0RJU1ApID4+IDE2KSArIDE7CiAKIAlpZiAoZnBfaG9yel9zdHJldGNoICYgUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUpCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICAoKChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9QQU5FTF9TSVpFKSA+PgogCQkgICAgICBSQURFT05fSE9SWl9QQU5FTF9TSElGVCkgKyAxKSAqIDg7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPQogCQkgICAgKChSUkVHMzIoUkFERU9OX0NSVENfSF9UT1RBTF9ESVNQKSA+PiAxNikgKyAxKSAqIDg7CiAKLQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPCA2NDApIHx8Ci0JICAgIChsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzIDwgNDgwKSkgewotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0gNjQwOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0gNDgwOworCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPCA2NDApIHx8CisJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA8IDQ4MCkpIHsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSA2NDA7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gNDgwOwogCX0KIAogCXBwbGxfZGl2X3NlbCA9IFJSRUc4KFJBREVPTl9DTE9DS19DTlRMX0lOREVYICsgMSkgJiAweDM7CkBAIC04NDYsOCArODQ3LDggQEAKIAlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDA7CiAKIAlEUk1fSU5GTygiUGFuZWwgaW5mbyBkZXJpdmVkIGZyb20gcmVnaXN0ZXJzXG4iKTsKLQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcywKLQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSwKKwkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCXJldHVybiBsdmRzOwogfQpAQCAtODgyLDExICs4ODMsMTEgQEAKIAogCQlEUk1fSU5GTygiUGFuZWwgSUQgU3RyaW5nOiAlc1xuIiwgc3RtcCk7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDE5KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDFiKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxOSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MWIpOwogCi0JCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzLAotCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXksCisJCQkgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCiAJCWx2ZHMtPnBhbmVsX3ZjY19kZWxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDJjKTsKIAkJaWYgKGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA+IDIwMDAgfHwgbHZkcy0+cGFuZWxfdmNjX2RlbGF5IDwgMCkKQEAgLTk0NCwyNyArOTQ1LDI1IEBACiAJCQlpZiAodG1wID09IDApCiAJCQkJYnJlYWs7CiAKLQkJCWlmICgoUkJJT1MxNih0bXApID09IGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMpICYmCisJCQlpZiAoKFJCSU9TMTYodG1wKSA9PSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSkgJiYKIAkJCSAgICAoUkJJT1MxNih0bXAgKyAyKSA9PQotCQkJICAgICBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKSkgewotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhibGFuayA9Ci0JCQkJICAgIChSQklPUzE2KHRtcCArIDE3KSAtIFJCSU9TMTYodG1wICsgMTkpKSAqIDg7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaG92ZXJwbHVzID0KLQkJCQkgICAgKFJCSU9TMTYodG1wICsgMjEpIC0gUkJJT1MxNih0bXAgKyAxOSkgLQotCQkJCSAgICAgMSkgKiA4OwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJCQkgICAgUkJJT1M4KHRtcCArIDIzKSAqIDg7CisJCQkgICAgIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KSkgeworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IFJCSU9TMTYodG1wICsgMTcpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IFJCSU9TMTYodG1wICsgMjEpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSAoUkJJT1M4KHRtcCArIDIzKSArCisJCQkJCQkJICAgICAgIFJCSU9TMTYodG1wICsgMjEpKSAqIDg7CiAKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52YmxhbmsgPSAoUkJJT1MxNih0bXAgKyAyNCkgLQotCQkJCQkJCSAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJCQkgICAgKChSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKSAtCi0JCQkJICAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfd2lkdGggPQotCQkJCSAgICAoKFJCSU9TMTYodG1wICsgMjgpICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQotCQkJCSAgICBSQklPUzE2KHRtcCArIDkpICogMTA7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gUkJJT1MxNih0bXAgKyAyNCk7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX2VuZCA9CisJCQkJCSgoUkJJT1MxNih0bXAgKyAyOCkgJiAweGY4MDApID4+IDExKSArCisJCQkJCShSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKTsKKworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmNsb2NrID0gUkJJT1MxNih0bXAgKyA5KSAqIDEwOwogCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzID0gMDsKKwkJCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJmx2ZHMtPm5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKKwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTExNzgsNyArMTE3Nyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJCS8qIExWRFMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0xDRF9HUElPX01BU0spOwpAQCAtMTE5MCw3ICsxMTkwLDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCiAJCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKQEAgLTEyMDIsNyArMTIwMyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEVkktSSAtIHR2IGRhYywgaW50IHRtZHMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fRFZJX0REQyk7CkBAIC0xMjIwLDcgKzEyMjIsOCBAQAogCQkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAogCQkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CkBAIC0xMjMyLDcgKzEyMzUsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9CiAKIAkJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1IxMDAgJiYgcmRldi0+ZmFtaWx5ICE9IENISVBfUjIwMCkgewpAQCAtMTI0NSw3ICsxMjQ5LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1RfSUJPT0s6CkBAIC0xMjU5LDcgKzEyNjQsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogVkdBIC0gVFYgREFDICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTI2OCw3ICsxMjc0LDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMjc3LDcgKzEyODQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0VYVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGV4dGVybmFsIHRtZHMpXG4iLApAQCAtMTI5MCw3ICsxMjk4LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGV4dCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTMwMywxMCArMTMxMiwxMiBAQAogCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCS8qIFhYWCBzb21lIGFyZSBTTCAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzE1LDcgKzEzMjYsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0lOVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTMyOCw3ICsxMzQwLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGludCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM0NCw3ICsxMzU3LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzUzLDcgKzEzNjcsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX1ZHQToKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayB2Z2EpXG4iLApAQCAtMTM2Niw3ICsxMzgxLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM3NSw3ICsxMzkxLDggQEAKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzg0LDcgKzE0MDEsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfTUlOSV9FWFRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1pbmkgZXh0ZXJuYWwgdG1kcylcbiIsCkBAIC0xNDAxLDEwICsxNDE5LDEyIEBACiAJCQkJCQkJCUFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJLyogWFhYIGFyZSBhbnkgREw/ICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQxMyw3ICsxNDMzLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX01JTklfSU5URVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtaW5pIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTQzMyw3ICsxNDU0LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDQyLDcgKzE0NjQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfSU1BQ19HNV9JU0lHSFQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChpbWFjIGc1IGlzaWdodClcbiIsCkBAIC0xNDU1LDcgKzE0NzgsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCk7CiAJCS8qIFZHQSAtIHR2IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0RWSV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE0NjQsNyArMTQ4OCw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQ3Myw3ICsxNDk4LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX0VNQUM6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChlbWFjKVxuIiwKQEAgLTE0ODYsNyArMTUxMiw4IEBACiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBWR0EgLSB0diBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19DUlQyX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTQ5NSw3ICsxNTIyLDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNTA0LDcgKzE1MzIsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKQEAgLTE1ODEsMTEgKzE2MTAsNjMgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgcmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBBY2VyIDUxMDIgaGFzIG5vbi1leGlzdGVudCBUViBwb3J0ICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NTk3NSAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwOWYpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEhQIGRjNTc1MCBoYXMgbm9uLWV4aXN0ZW50IFRWIHBvcnQgKi8KKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg1OTc0ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwM2MgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjgwYSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBjb21iaW9zX2NoZWNrX2RsX2R2aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaXNfZHZpX2QpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGV4dF90bWRzX2luZm87CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCWlmIChpc19kdmlfZCkKKwkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQllbHNlCisJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwl9CisJZXh0X3RtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfRVhUX1RNRFNfSU5GT19UQUJMRSk7CisJaWYgKGV4dF90bWRzX2luZm8pIHsKKwkJdWludDhfdCByZXYgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyk7CisJCXVpbnQ4X3QgZmxhZ3MgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyArIDQgKyA1KTsKKwkJaWYgKHJldiA+PSAzKSB7CisJCQlpZiAoaXNfZHZpX2QpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmbGFncyAmIDEpIHsKKwkJCQlpZiAoaXNfZHZpX2QpCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaXNfZHZpX2QpCisJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCWVsc2UKKwkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7Cit9CisKIGJvb2wgcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGNvbm5faW5mbywgZW50cnksIGRldmljZXM7Ci0JdWludDE2X3QgdG1wOworCXVpbnQxNl90IHRtcCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2RkYyBkZGNfdHlwZTsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2Nvbm5lY3RvciBjb25uZWN0b3I7CiAJaW50IGkgPSAwOwpAQCAtMTYyOCw4ICsxNzA5LDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmFkZW9uX2FwcGx5X2xlZ2FjeV9xdWlya3MoZGV2LCBpLCAmY29ubmVjdG9yLAotCQkJCQkJICAgJmRkY19pMmMpOworCQkJaWYgKCFyYWRlb25fYXBwbHlfbGVnYWN5X3F1aXJrcyhkZXYsIGksICZjb25uZWN0b3IsCisJCQkJCQkgICAgICAgJmRkY19pMmMpKQorCQkJCWNvbnRpbnVlOwogCiAJCQlzd2l0Y2ggKGNvbm5lY3RvcikgewogCQkJY2FzZSBDT05ORUNUT1JfUFJPUFJJRVRBUllfTEVHQUNZOgpAQCAtMTY0NCw3ICsxNzI2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1JUX0xFR0FDWToKIAkJCQlpZiAodG1wICYgMHgxKSB7CkBAIC0xNjY5LDcgKzE3NTIsOCBAQAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0RWSV9JX0xFR0FDWToKIAkJCQlkZXZpY2VzID0gMDsKQEAgLTE2OTgsNiArMTc4Miw3IEBACiAJCQkJCQkJCSAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCwKIAkJCQkJCQkJICAgMCksCiAJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKTsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IGNvbWJpb3NfY2hlY2tfZGxfZHZpKGRldiwgMCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZGV2aWNlcyB8PSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQ7CiAJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTcwNiwxOSArMTc5MSwyNCBAQAogCQkJCQkJCQkgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkJCSAgIDApLAogCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOwogCQkJCX0KIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LAogCQkJCQkJCSAgICBpLAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfRFZJX0RfTEVHQUNZOgotCQkJCWlmICgodG1wID4+IDQpICYgMHgxKQorCQkJCWlmICgodG1wID4+IDQpICYgMHgxKSB7CiAJCQkJCWRldmljZXMgPSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQ7Ci0JCQkJZWxzZQorCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29tYmlvc19jaGVja19kbF9kdmkoZGV2LCAxKTsKKwkJCQl9IGVsc2UgewogCQkJCQlkZXZpY2VzID0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCQl9CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKIAkJCQkJCQkgIChkZXYsIGRldmljZXMsIDApLApAQCAtMTcyNiw3ICsxODE2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1RWX0xFR0FDWToKIAkJCWNhc2UgQ09OTkVDVE9SX1NUVl9MRUdBQ1k6CkBAIC0xNzQwLDcgKzE4MzEsOCBAQAogCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5rbm93biBjb25uZWN0b3IgdHlwZTogJWRcbiIsCkBAIC0xNzcyLDEwICsxODY0LDI5IEBACiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQl1aW50MTZfdCBjcnRfaW5mbyA9CisJCQkJY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CisJCQlEUk1fREVCVUcoIkZvdW5kIENSVCB0YWJsZSwgYXNzdW1pbmcgVkdBIGNvbm5lY3RvclxuIik7CisJCQlpZiAoY3J0X2luZm8pIHsKKwkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCisJCQkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCQkJCTEpLAorCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOworCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKKwkJCX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQogCQl9CiAJfQogCkBAIC0xODcwLDcgKzE5ODEsOCBAQAogCQkJCQkJICAgIDUsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQl9CiAJfQogCkBAIC0xODgwLDE2ICsxOTkyLDE5IEBACiAJCSAgICBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCQlpZiAodHZfaW5mbykgewogCQkJaWYgKFJCSU9TOCh0dl9pbmZvICsgNikgPT0gJ1QnKSB7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCi0JCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKLQkJCQkJCQkgIChkZXYsCi0JCQkJCQkJICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgMiksCi0JCQkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgNiwKLQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQlpZiAocmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3MoZGV2KSkgeworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKKwkJCQkJCQkJICAoZGV2LAorCQkJCQkJCQkgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKKwkJCQkJCQkJICAgMiksCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCA2LAorCQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAorCQkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGUzNzZiZTQuLjI5NzYzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTE3OCwyNSArMTc4LDEyIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICE9IDAgJiYKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgIT0gMCAmJgotCSAgICBuYXRpdmVfbW9kZS0+ZG90Y2xvY2sgIT0gMCkgewotCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7Ci0KLQkJbW9kZS0+aGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQotCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCW1vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOwotCQltb2RlLT5mbGFncyA9IDA7Ci0KKwlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPmNsb2NrICE9IDApIHsKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG5hdGl2ZV9tb2RlKTsKIAkJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwgRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwogCkBAIC0yMTAsNyArMTk3LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAJaW50IGk7CiAJc3RydWN0IG1vZGVfc2l6ZSB7CiAJCWludCB3OwpAQCAtMjM2LDExICsyMjMsMTYgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSB7CisJCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiAxMDI0IHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiA3NjgpCisJCQkJY29udGludWU7CisJCX0KIAkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgfHwKLQkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzIHx8Ci0JCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCi0JCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSkKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSB8fAorCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5IHx8CisJCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAmJgorCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChjb21tb25fbW9kZXNbaV0udyA8IDMyMCB8fCBjb21tb25fbW9kZXNbaV0uaCA8IDIwMCkKQEAgLTM0NCwyOCArMzM2LDIzIEBACiAJCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0JdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKIAkvKiBUcnkgdG8gZ2V0IG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEIGlmIG5lY2Vzc2FyeSAqLwotCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnQsICptb2RlOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKLQkJCWlmIChtb2RlLT5oZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyAmJgotCQkJICAgIG1vZGUtPnZkaXNwbGF5ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCQkJbmF0aXZlX21vZGUtPmhibGFuayA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhkaXNwbGF5OwotCQkJCW5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXMgPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5OwotCQkJCW5hdGl2ZV9tb2RlLT5oc3luY193aWR0aCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OwotCQkJCW5hdGl2ZV9tb2RlLT52YmxhbmsgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52ZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+dm92ZXJwbHVzID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGggPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+ZG90Y2xvY2sgPSBtb2RlLT5jbG9jazsKKwkJCWlmIChtb2RlLT5oZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgJiYKKwkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpIHsKKwkJCQkqbmF0aXZlX21vZGUgPSAqbW9kZTsKKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwogCQkJCURSTV9JTkZPKCJEZXRlcm1pbmVkIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscyBmcm9tIEVESURcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQotCWlmICghbmF0aXZlX21vZGUtPmRvdGNsb2NrKSB7CisJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKIAkJRFJNX0lORk8oIk5vIExWRFMgbmF0aXZlIG1vZGUgZGV0YWlscywgZGlzYWJsaW5nIFJNWFxuIik7CiAJCXJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9IFJNWF9PRkY7CiAJfQpAQCAtNDEwLDEzICszOTcsNjQgQEAKIHN0YXRpYyBpbnQgcmFkZW9uX2x2ZHNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKworCWlmICgobW9kZS0+aGRpc3BsYXkgPCAzMjApIHx8IChtb2RlLT52ZGlzcGxheSA8IDI0MCkpCisJCXJldHVybiBNT0RFX1BBTkVMOworCisJaWYgKGVuY29kZXIpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCisJCS8qIEFWSVZPIGhhcmR3YXJlIHN1cHBvcnRzIGRvd25zY2FsaW5nIG1vZGVzIGxhcmdlciB0aGFuIHRoZSBwYW5lbAorCQkgKiB0byB0aGUgcGFuZWwgc2l6ZSwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIGlzIGRlc2lyYWJsZS4KKwkJICovCisJCWlmICgobW9kZS0+aGRpc3BsYXkgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpIHx8CisJCSAgICAobW9kZS0+dmRpc3BsYXkgPiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQorCQkJcmV0dXJuIE1PREVfUEFORUw7CisKKwkJLyogaWYgc2NhbGluZyBpcyBkaXNhYmxlZCwgYmxvY2sgbm9uLW5hdGl2ZSBtb2RlcyAqLworCQlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlID09IFJNWF9PRkYpIHsKKwkJCWlmICgobW9kZS0+aGRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkJICAgIChtb2RlLT52ZGlzcGxheSAhPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQorCQkJCXJldHVybiBNT0RFX1BBTkVMOworCQl9CisJfQorCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJhZGVvbl9sdmRzX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJaWYgKGVuY29kZXIpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCisJCS8qIGNoZWNrIGlmIHBhbmVsIGlzIHZhbGlkICovCisJCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPj0gMzIwICYmIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSA+PSAyNDApCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKworCX0KKworCS8qIGNoZWNrIGZvciBlZGlkIGFzIHdlbGwgKi8KKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJCSAgICAgICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQl9CisJfQogCS8qIGNoZWNrIGFjcGkgbGlkIHN0YXR1cyA/Pz8gKi8KKwogCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQyNyw2ICs0NjUsOCBAQAogCiAJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJhZGVvbl9pMmNfZGVzdHJveShyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CkBAIC00OTYsNiArNTM2LDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3ZnYV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KKwkvKiBYWFggdmVyaWZ5IGFnYWluc3QgbWF4IERBQyBvdXRwdXQgZnJlcXVlbmN5ICovCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTUxNCw5ICs1NTYsMzMgQEAKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CiAJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7CiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwotCWlmIChkcmV0KQotCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLQllbHNlIHsKKwlpZiAoZHJldCkgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJfQorCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7CisJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOworCisJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQkJRFJNX0VSUk9SKCIlczogcHJvYmVkIGEgbW9uaXRvciBidXQgbm98aW52YWxpZCBFRElEXG4iLAorCQkJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCX0gZWxzZSB7CisJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9ICEhKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CisKKwkJCS8qIHNvbWUgb2VtcyBoYXZlIGJvYXJkcyB3aXRoIHNlcGFyYXRlIGRpZ2l0YWwgYW5kIGFuYWxvZyBjb25uZWN0b3JzCisJCQkgKiB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lIChvZnRlbiB2Z2EgKyBoZG1pKQorCQkJICovCisJCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgJiYgcmFkZW9uX2Nvbm5lY3Rvci0+c2hhcmVkX2RkYykgeworCQkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOworCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJfSBlbHNlCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCX0KKwl9IGVsc2UgewogCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CiAJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CiAJCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKQEAgLTU3MCw2ICs2MzYsOCBAQAogc3RhdGljIGludCByYWRlb25fdHZfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCWlmICgobW9kZS0+aGRpc3BsYXkgPiAxMDI0KSB8fCAobW9kZS0+dmRpc3BsYXkgPiA3NjgpKQorCQlyZXR1cm4gTU9ERV9DTE9DS19SQU5HRTsKIAlyZXR1cm4gTU9ERV9PSzsKIH0KIApAQCAtNjQ0LDIwICs3MTIsMjkgQEAKIAlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CiAJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKIAogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKLQkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAotCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJCURSTV9FUlJPUigiJXM6IHByb2JlZCBhIG1vbml0b3IgYnV0IG5vfGludmFsaWQgRURJRFxuIiwKKwkJCQkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAkJfSBlbHNlIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKIAotCQkJLyogaWYgdGhpcyBpc24ndCBhIGRpZ2l0YWwgbW9uaXRvcgotCQkJICAgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGFueQotCQkJICAgVFYgY29uZmxpY3RzICovCi0JCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJCS8qIHNvbWUgb2VtcyBoYXZlIGJvYXJkcyB3aXRoIHNlcGFyYXRlIGRpZ2l0YWwgYW5kIGFuYWxvZyBjb25uZWN0b3JzCisJCQkgKiB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lIChvZnRlbiB2Z2EgKyBoZG1pKQorCQkJICovCisJCQlpZiAoKCFyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCkgJiYgcmFkZW9uX2Nvbm5lY3Rvci0+c2hhcmVkX2RkYykgeworCQkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBOVUxMOworCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJfSBlbHNlCisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KIAl9CiAKQEAgLTc1Myw5ICs4MzAsMjcgQEAKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSB0cnVlOwogfQogCitzdGF0aWMgaW50IHJhZGVvbl9kdmlfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KKworCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApKSB7CisJCWlmICgocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSkgfHwKKwkJICAgIChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EKSB8fAorCQkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQikpCisJCQlyZXR1cm4gTU9ERV9PSzsKKwkJZWxzZQorCQkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwl9CisJcmV0dXJuIE1PREVfT0s7Cit9CisKIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyByYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdldF9tb2RlcyA9IHJhZGVvbl9kdmlfZ2V0X21vZGVzLAotCS5tb2RlX3ZhbGlkID0gcmFkZW9uX3ZnYV9tb2RlX3ZhbGlkLAorCS5tb2RlX3ZhbGlkID0gcmFkZW9uX2R2aV9tb2RlX3ZhbGlkLAogCS5iZXN0X2VuY29kZXIgPSByYWRlb25fZHZpX2VuY29kZXIsCiB9OwogCkBAIC03NzUsMTMgKzg3MCwxNSBAQAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCiAJCQkgIGJvb2wgbGlua2IsCi0JCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8pCisJCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKnJhZGVvbl9kaWdfY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWJvb2wgc2hhcmVkX2RkYyA9IGZhbHNlOwogCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwpAQCAtNzk1LDYgKzg5MiwxMyBAQAogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyB8PSBzdXBwb3J0ZWRfZGV2aWNlOwogCQkJcmV0dXJuOwogCQl9CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzICYmIGkyY19idXMtPnZhbGlkKSB7CisJCQlpZiAobWVtY21wKCZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5yZWMsIGkyY19idXMsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjKSkgPT0gMCkgeworCQkJCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSB0cnVlOworCQkJCXNoYXJlZF9kZGMgPSB0cnVlOworCQkJfQorCQl9CiAJfQogCiAJcmFkZW9uX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CkBAIC04MDUsNiArOTA5LDggQEAKIAogCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCA9IGNvbm5lY3Rvcl9pZDsKIAlyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzID0gc3VwcG9ydGVkX2RldmljZTsKKwlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gc2hhcmVkX2RkYzsKKwlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID0gY29ubmVjdG9yX29iamVjdF9pZDsKIAlzd2l0Y2ggKGNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7CkBAIC05NTYsNyArMTA2Miw4IEBACiAJCQkgICAgdWludDMyX3QgY29ubmVjdG9yX2lkLAogCQkJICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAotCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpCisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtOTg1LDYgKzEwOTIsNyBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKQEAgLTEwNDIsNiArMTE1MCwxMyBAQAogCQkJaWYgKHJldCkKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CisJCQkvKiBSUzQwMCxSQzQxMCxSUzQ4MCBjaGlwc2V0IHNlZW1zIHRvIHJlcG9ydCBhIGxvdAorCQkJICogb2YgZmFsc2UgcG9zaXRpdmUgb24gbG9hZCBkZXRlY3QsIHdlIGhhdmVuJ3QgeWV0CisJCQkgKiBmb3VuZCBhIHdheSB0byBtYWtlIGxvYWQgZGV0ZWN0IHJlbGlhYmxlIG9uIHRob3NlCisJCQkgKiBjaGlwc2V0LCB0aHVzIGp1c3QgZGlzYWJsZSBpdCBmb3IgVFYuCisJCQkgKi8KKwkJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzQwMCB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzQ4MCkKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSBmYWxzZTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkJICAgICAgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCmluZGV4IGIxM2M3OWUuLjI4NzcyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCkBAIC0xMDksOSArMTA5LDE1IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkgeworCQkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKQorCQkJCVdSRUczMihSNzAwX0QyQ1VSX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCWVsc2UKKwkJCQlXUkVHMzIoUjcwMF9EMUNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCX0KIAkJV1JFRzMyKEFWSVZPX0QxQ1VSX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZ3B1X2FkZHIpOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT5sZWdhY3lfY3Vyc29yX29mZnNldCA9IGdwdV9hZGRyIC0gcmFkZW9uX2NydGMtPmxlZ2FjeV9kaXNwbGF5X2Jhc2VfYWRkcjsKIAkJLyogb2Zmc2V0IGlzIGZyb20gRElTUCgyKV9CQVNFX0FERFJFU1MgKi8KIAkJV1JFRzMyKFJBREVPTl9DVVJfT0ZGU0VUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCByYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCAzZDY2NzAzLi40MWJiNzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtNDQ0LDIwICs0NDQsMjQgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gYXRvbV9jYXJkX2luZm8gPSB7Ci0JLmRldiA9IE5VTEwsCi0JLnJlZ19yZWFkID0gY2FpbF9yZWdfcmVhZCwKLQkucmVnX3dyaXRlID0gY2FpbF9yZWdfd3JpdGUsCi0JLm1jX3JlYWQgPSBjYWlsX21jX3JlYWQsCi0JLm1jX3dyaXRlID0gY2FpbF9tY193cml0ZSwKLQkucGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkLAotCS5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZSwKLX07Ci0KIGludCByYWRlb25fYXRvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlhdG9tX2NhcmRfaW5mby5kZXYgPSByZGV2LT5kZGV2OwotCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKCZhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm8gPQorCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF0b21fY2FyZF9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NhcmRfaW5mbyA9IGF0b21fY2FyZF9pbmZvOworCWF0b21fY2FyZF9pbmZvLT5kZXYgPSByZGV2LT5kZGV2OworCWF0b21fY2FyZF9pbmZvLT5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlOworCWF0b21fY2FyZF9pbmZvLT5tY19yZWFkID0gY2FpbF9tY19yZWFkOworCWF0b21fY2FyZF9pbmZvLT5tY193cml0ZSA9IGNhaWxfbWNfd3JpdGU7CisJYXRvbV9jYXJkX2luZm8tPnBsbF9yZWFkID0gY2FpbF9wbGxfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CisKKwlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2NSw2ICs0NjksNyBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jYXJkX2luZm8pOwogfQogCiBpbnQgcmFkZW9uX2NvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTU4MiwxMCArNTg3LDkgQEAKIAlEUk1fSU5GTygicmVnaXN0ZXIgbW1pbyBzaXplOiAldVxuIiwgKHVuc2lnbmVkKXJkZXYtPnJtbWlvX3NpemUpOwogCiAJLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCi0JciA9IHZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKLQlpZiAocikgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CisJICogaWdub3JlIGl0ICovCisJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOwogCiAJciA9IHJhZGVvbl9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtNjg0LDYgKzY4OCw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKKwkvKiByZXN1bWUgQUdQIGlmIGluIHVzZSAqLworCXJhZGVvbl9hZ3BfcmVzdW1lKHJkZXYpOwogCXJhZGVvbl9yZXN1bWUocmRldik7CiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAJZmJfc2V0X3N1c3BlbmQocmRldi0+ZmJkZXZfaW5mbywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggMzY1NWQ5MS4uYzg1ZGY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtMTM3LDkgKzEzNyw2IEBACiAJaWYgKHNpemUgIT0gMjU2KSB7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGNydGMtPmZiID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KIAogCS8qIHVzZXJzcGFjZSBwYWxldHRlcyBhcmUgYWx3YXlzIGNvcnJlY3QgYXMgaXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTE0Nyw3ICsxNDQsNiBAQAogCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OwogCQlyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7CiAJfQotCiAJcmFkZW9uX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiB9CiAKQEAgLTMzOCwyNyArMzM0LDE5IEBACiAKIGludCByYWRlb25fZGRjX2dldF9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMSk7Ci0JCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwogCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7Ci0JfSBlbHNlCi0JCWVkaWQgPSByYWRlb25fY29ubmVjdG9yLT5lZGlkOworCX0KIAotCWlmIChlZGlkKSB7Ci0JCS8qIHVwZGF0ZSBkaWdpdGFsIGJpdHMgaGVyZSAqLwotCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQotCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAxOwotCQllbHNlCi0JCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9IDA7Ci0JCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgZWRpZCk7Ci0JCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgZWRpZCk7Ci0JCWtmcmVlKGVkaWQpOworCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJCXJldHVybiByZXQ7CiAJfQogCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgTlVMTCk7CkBAIC03NjUsNyArNzUzLDcgQEAKIAkJCXJhZGVvbl9jcnRjLT5ybXhfdHlwZSA9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZTsKIAkJCW1lbWNweSgmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLAogCQkJCSZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKIAkJCWZpcnN0ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSkgewpAQCAtNzgzLDEwICs3NzEsMTAgQEAKIAlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpIHsKIAkJZml4ZWQyMF8xMiBhLCBiOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS52ZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUuaGRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+dnNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS5oZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+aHNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9jb25zdCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IGE2NWFiMWEuLmQ0MmJjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMzEsNiArMzEsMTAgQEAKIAogZXh0ZXJuIGludCBhdG9tX2RlYnVnOwogCisvKiBldmlsIGJ1dCBpbmNsdWRpbmcgYXRvbWJpb3MuaCBpcyBtdWNoIHdvcnNlICovCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCiB1aW50MzJfdAogcmFkZW9uX2dldF9lbmNvZGVyX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsIHVpbnQ4X3QgZGFjKQogewpAQCAtMTY3LDQ5ICsxNzEsMTcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKLQlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyB8fAotCSAgICBtb2RlLT52ZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT52dG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQkJLyogdXBkYXRlIGNydGMgdmFsdWVzICovCi0JCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JCQkvKiBhZGp1c3QgY3J0YyB2YWx1ZXMgKi8KLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQl9IGVsc2UgewotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7CisJaWYgKG1vZGUtPmhkaXNwbGF5IDwgbmF0aXZlX21vZGUtPmhkaXNwbGF5IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCWludCBtb2RlX2lkID0gYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZDsKKwkJKmFkanVzdGVkX21vZGUgPSAqbmF0aXZlX21vZGU7CisJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KLQkJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgPSBuYXRpdmVfbW9kZS0+ZmxhZ3M7Ci0JCWFkanVzdGVkX21vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOworCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CiB9CiAKQEAgLTIxOSw3ICsxOTEsMTEgQEAKIAkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKQpAQCAtMjMwLDYgKzIwNiwxOCBAQAogCSAgICAmJiAobW9kZS0+Y3J0Y192c3luY19zdGFydCA8IChtb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMikpKQogCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIDI7CiAKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWlmICh0dl9kYWMpIHsKKwkJCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMCwgYWRqdXN0ZWRfbW9kZSk7CisJCQllbHNlCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMSwgYWRqdXN0ZWRfbW9kZSk7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDYxLDcgKzQ0OSw3IEBACiAJCWNhc2UgMToKIAkJCWFyZ3MudjEudWNNaXNjID0gMDsKIAkJCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CkBAIC00ODYsNyArNDc0LDcgQEAKIAkJCQlpZiAoZGlnLT5jb2hlcmVudF9tb2RlKQogCQkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQ7CiAJCQl9Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlhcmdzLnYyLnVjVHJ1bmNhdGUgPSAwOwpAQCAtNTQ0LDcgKzUzMiw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNTU0LDcgKzU0Miw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CiAJCWVsc2UKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NjYsNyArNTU0LDcgQEAKIAkJLyppZiAocmFkZW9uX291dHB1dC0+TW9uVHlwZSA9PSBNVF9EUCkKIAkJICByZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7CiAJCSAgZWxzZSovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTczNCwxNCArNzIyLDE3IEBACiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpOwogCiAJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgeworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSByYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkOworCX0gZWxzZSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAyKSAvIDEwKTsKKwkJZWxzZQorCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CisJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApIHsKLQkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAqIDEwICogMikgLyAxMDApOwotCQkJYXJncy52Mi5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwotCQl9IGVsc2UgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiA0KSAvIDEwMCk7Ci0JCX0KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOwogCQlpZiAoZGlnLT5kaWdfYmxvY2spCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKQEAgLTc2Niw3ICs3NTcsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwotCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2spIC8gMTApOwogCiAJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKIAkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CkBAIC04NzQsMTYgKzg2NCw5IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKLQlpbnQgZGV2aWNlczsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAotCS8qIG9uIERQTVMgb2ZmIHdlIGhhdmUgbm8gaWRlYSBpZiBhY3RpdmUgZGV2aWNlIGlzIG1lYW5pbmdmdWwgKi8KLQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OICYmICFyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSkKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzOwotCWVsc2UKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlOwotCiAJRFJNX0RFQlVHKCJlbmNvZGVyIGRwbXMgJWQgdG8gbW9kZSAlZCwgZGV2aWNlcyAlMDh4LCBhY3RpdmVfZGV2aWNlcyAlMDh4XG4iLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkLCBtb2RlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKIAkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSk7CkBAIC05MTQsMTggKzg5NywxOCBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzJPdXRwdXRDb250cm9sKTsKQEAgLTExMDQsOCArMTA4NywxMSBAQAogCX0KIAogCS8qIHNldCBzY2FsZXIgY2xlYXJzIHRoaXMgb24gc29tZSBjaGlwcyAqLwotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCisJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUzLDYgKzExMzksNyBAQAogCiAJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCiAJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVApOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFKTsKIAkJYnJlYWs7CkBAIC0xMjY4LDggKzEyNTUsNiBAQAogewogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0KLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IGE5MzFhZjAuLmE2OGQ3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTE0MCwxNSArMTQwLDE1IEBACiAJCVdBUk4oMSwgInRyeWluZyB0byB1bmJpbmQgbWVtb3J5IHRvIHVuaXRpYWxpemVkIEdBUlQgIVxuIik7CiAJCXJldHVybjsKIAl9Ci0JdCA9IG9mZnNldCAvIDQwOTY7Ci0JcCA9IHQgLyAoUEFHRV9TSVpFIC8gNDA5Nik7CisJdCA9IG9mZnNldCAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOworCXAgPSB0IC8gKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7CiAJCWlmIChyZGV2LT5nYXJ0LnBhZ2VzW3BdKSB7CiAJCQlwY2lfdW5tYXBfcGFnZShyZGV2LT5wZGV2LCByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0sCiAJCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBOVUxMOwogCQkJcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdID0gMDsKLQkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gNDA5Nik7IGorKywgdCsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKIAkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCAwKTsKIAkJCX0KIAkJfQpAQCAtMTY5LDggKzE2OSw4IEBACiAJCURSTV9FUlJPUigidHJ5aW5nIHRvIGJpbmQgbWVtb3J5IHRvIHVuaXRpYWxpemVkIEdBUlQgIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl0ID0gb2Zmc2V0IC8gNDA5NjsKLQlwID0gdCAvIChQQUdFX1NJWkUgLyA0MDk2KTsKKwl0ID0gb2Zmc2V0IC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewogCQkvKiB3ZSBuZWVkIHRvIHN1cHBvcnQgbGFyZ2UgbWVtb3J5IGNvbmZpZ3VyYXRpb25zICovCkBAIC0xODUsOSArMTg1LDkgQEAKIAkJfQogCQlyZGV2LT5nYXJ0LnBhZ2VzW3BdID0gcGFnZWxpc3RbaV07CiAJCXBhZ2VfYmFzZSA9IHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXTsKLQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyA0MDk2KTsgaisrLCB0KyspIHsKKwkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7IGorKywgdCsrKSB7CiAJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2Jhc2UpOwotCQkJcGFnZV9iYXNlICs9IDQwOTY7CisJCQlwYWdlX2Jhc2UgKz0gUkFERU9OX0dQVV9QQUdFX1NJWkU7CiAJCX0KIAl9CiAJbWIoKTsKQEAgLTIwMCwxNCArMjAwLDE0IEBACiAJaWYgKHJkZXYtPmdhcnQucGFnZXMpIHsKIAkJcmV0dXJuIDA7CiAJfQotCS8qIFdlIG5lZWQgUEFHRV9TSVpFID49IDQwOTYgKi8KLQlpZiAoUEFHRV9TSVpFIDwgNDA5NikgeworCS8qIFdlIG5lZWQgUEFHRV9TSVpFID49IFJBREVPTl9HUFVfUEFHRV9TSVpFICovCisJaWYgKFBBR0VfU0laRSA8IFJBREVPTl9HUFVfUEFHRV9TSVpFKSB7CiAJCURSTV9FUlJPUigiUGFnZSBzaXplIGlzIHNtYWxsZXIgdGhhbiBHUFUgcGFnZSBzaXplIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBDb21wdXRlIHRhYmxlIHNpemUgKi8KIAlyZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFBBR0VfU0laRTsKLQlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIDQwOTY7CisJcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzID0gcmRldi0+bWMuZ3R0X3NpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlEUk1fSU5GTygiR0FSVDogbnVtIGNwdSBwYWdlcyAldSwgbnVtIGdwdSBwYWdlcyAldVxuIiwKIAkJIHJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcywgcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzKTsKIAkvKiBBbGxvY2F0ZSBwYWdlcyB0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCmluZGV4IDhlMGE4NzUuLmEwZmU2MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKQEAgLTkyLDYgKzkyLDEzIEBACiAJaWYgKHIpIHsKIAkJcmV0dXJuIHI7CiAJfQorCS8qIGVuYWJsZSBtc2kgKi8KKwlyZGV2LT5tc2lfZW5hYmxlZCA9IDA7CisJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWMzgwKSB7CisJCWludCByZXQgPSBwY2lfZW5hYmxlX21zaShyZGV2LT5wZGV2KTsKKwkJaWYgKCFyZXQpCisJCQlyZGV2LT5tc2lfZW5hYmxlZCA9IDE7CisJfQogCWRybV9pcnFfaW5zdGFsbChyZGV2LT5kZGV2KTsKIAlyZGV2LT5pcnEuaW5zdGFsbGVkID0gdHJ1ZTsKIAlEUk1fSU5GTygicmFkZW9uOiBpcnEgaW5pdGlhbGl6ZWQuXG4iKTsKQEAgLTEwMyw1ICsxMTAsNyBAQAogCWlmIChyZGV2LT5pcnEuaW5zdGFsbGVkKSB7CiAJCXJkZXYtPmlycS5pbnN0YWxsZWQgPSBmYWxzZTsKIAkJZHJtX2lycV91bmluc3RhbGwocmRldi0+ZGRldik7CisJCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkKKwkJCXBjaV9kaXNhYmxlX21zaShyZGV2LT5wZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCAzNjQxMGY4Li44ZDBiN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1MzIgZnBfaG9yel9zdHJldGNoLCBmcF92ZXJ0X3N0cmV0Y2gsIGZwX2hvcnpfdmVydF9hY3RpdmU7CiAJdTMyIGZwX2hfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y19oX3RvdGFsX2Rpc3A7CiAJdTMyIGZwX3Zfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y192X3RvdGFsX2Rpc3A7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CiAKIAlmcF92ZXJ0X3N0cmV0Y2ggPSBSUkVHMzIoUkFERU9OX0ZQX1ZFUlRfU1RSRVRDSCkgJgogCQkoUkFERU9OX1ZFUlRfU1RSRVRDSF9SRVNFUlZFRCB8CkBAIC05NSwxOSArOTUsMTkgQEAKIAogCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAwOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzID09IDAgfHwKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgPT0gMCkgeworCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPT0gMCB8fAorCSAgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPT0gMCkgewogCQloc2NhbGUgPSBmYWxzZTsKIAkJdnNjYWxlID0gZmFsc2U7CiAJfSBlbHNlIHsKLQkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKLQkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJaWYgKHlyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKLQkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKKwkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpCisJCQl4cmVzID0gbmF0aXZlX21vZGUtPmhkaXNwbGF5OworCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkKKwkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXk7CiAKLQkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMpCisJCWlmICh4cmVzID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKIAkJCWhzY2FsZSA9IGZhbHNlOwotCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKKwkJaWYgKHlyZXMgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQogCQkJdnNjYWxlID0gZmFsc2U7CiAJfQogCkBAIC0xMTksMTEgKzExOSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh4cmVzICsgaW5jKSAqIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICsgMTsKIAkJCWZwX2hvcnpfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fSE9SWl9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9CTEVORCB8CiAJCQkJCVJBREVPTl9IT1JaX1NUUkVUQ0hfRU5BQkxFIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcy84LTEpIDw8IDE2KSk7CisJCQkJCSgobmF0aXZlX21vZGUtPmhkaXNwbGF5LzgtMSkgPDwgMTYpKTsKIAkJfQogCiAJCWlmICghdnNjYWxlKQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJZWxzZSB7CiAJCQlpbmMgPSAoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfQVVUT19SQVRJT19JTkMpID8gMSA6IDA7CiAJCQlzY2FsZSA9ICgoeXJlcyArIGluYykgKiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BWCkKLQkJCQkvIG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgMTsKKwkJCQkvIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSArIDE7CiAJCQlmcF92ZXJ0X3N0cmV0Y2ggfD0gKCgoc2NhbGUpICYgUkFERU9OX1ZFUlRfU1RSRVRDSF9SQVRJT19NQVNLKSB8CiAJCQkJCVJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9CTEVORCB8Ci0JCQkJCSgobmF0aXZlX21vZGUtPnBhbmVsX3lyZXMtMSkgPDwgMTIpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+dmRpc3BsYXktMSkgPDwgMTIpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJNWF9DRU5URVI6CkBAIC0xNzUsOCArMTc1LDggQEAKIAkJCQkJCT8gUkFERU9OX0NSVENfVl9TWU5DX1BPTAogCQkJCQkJOiAwKSkpOwogCi0JCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAoKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgJiAweGZmZikgfAotCQkJCSgoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIC8gOCkgJiAweDFmZikgPDwgMTYpKTsKKwkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkgJiAweGZmZikgfAorCQkJCSgoKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAvIDgpICYgMHgxZmYpIDw8IDE2KSk7CiAJCWJyZWFrOwogCWNhc2UgUk1YX09GRjoKIAlkZWZhdWx0OgpAQCAtNTMyLDYgKzUzMiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDYgKzY2OCw5IEBACiAKIAkJV1JFRzMyKFJBREVPTl9ESVNQMl9NRVJHRV9DTlRMLCBkaXNwMl9tZXJnZV9jbnRsKTsKIAkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOworCisJCVdSRUczMihSQURFT05fRlBfSDJfU1lOQ19TVFJUX1dJRCwgY3J0Y19oX3N5bmNfc3RydF93aWQpOworCQlXUkVHMzIoUkFERU9OX0ZQX1YyX1NZTkNfU1RSVF9XSUQsIGNydGNfdl9zeW5jX3N0cnRfd2lkKTsKIAl9IGVsc2UgewogCQl1aW50MzJfdCBjcnRjX2dlbl9jbnRsOwogCQl1aW50MzJfdCBjcnRjX2V4dF9jbnRsOwpAQCAtMTAxNSwxNCArMTAyMiwxMSBAQAogCQkJCSBpbnQgeCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBUT0RPIFRWICovCiAJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAlyYWRlb25fc2V0X2NydGNfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCXJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpOwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7CiAJCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCmluZGV4IDZjZWI5NTguLjAwMzgyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCkBAIC0xMDcsOCArMTA3LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfbHZkc19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X2x2ZHNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTE5Miw2ICsxOTAsOCBAQAogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlpZiAocmFkZW9uX2VuY29kZXItPnJteF90eXBlICE9IFJNWF9PRkYpCkBAIC0yMTgsNyArMjE4LDggQEAKIAkJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKLQorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTI3Miw3ICsyNzMsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9wcmltYXJ5X2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9wcmltYXJ5X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNDY4LDcgKzQ2OCw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfaW50X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfaW50X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC01NDMsNiArNTQyLDE0IEBACiAKICAgICBmcF9nZW5fY250bCAmPSB+KFJBREVPTl9GUF9GUE9OIHwgUkFERU9OX0ZQX1RNRFNfRU4pOwogCisgICAgZnBfZ2VuX2NudGwgJj0gfihSQURFT05fRlBfUk1YX0hWU1lOQ19DT05UUk9MX0VOIHwKKwkJICAgICBSQURFT05fRlBfREZQX1NZTkNfU0VMIHwKKwkJICAgICBSQURFT05fRlBfQ1JUX1NZTkNfU0VMIHwKKwkJICAgICBSQURFT05fRlBfQ1JUQ19MT0NLXzhET1QgfAorCQkgICAgIFJBREVPTl9GUF9VU0VfU0hBRE9XX0VOIHwKKwkJICAgICBSQURFT05fRlBfQ1JUQ19VU0VfU0hBRE9XX1ZFTkQgfAorCQkgICAgIFJBREVPTl9GUF9DUlRfU1lOQ19BTFQpOworCiAgICAgaWYgKDEpIC8qICBGSVhNRSByZ2JCaXRzID09IDggKi8KIAkgICAgZnBfZ2VuX2NudGwgfD0gUkFERU9OX0ZQX1BBTkVMX0ZPUk1BVDsgIC8qIDI0IGJpdCBmb3JtYXQgKi8KICAgICBlbHNlCkBAIC01NTYsNyArNTYzLDcgQEAKIAkJICAgIGVsc2UKIAkJCSAgICBmcF9nZW5fY250bCB8PSBSMjAwX0ZQX1NPVVJDRV9TRUxfQ1JUQzE7CiAJICAgIH0gZWxzZQotCQkgICAgZnBfZ2VuX2NudGwgfD0gUkFERU9OX0ZQX1NFTF9DUlRDMTsKKwkJICAgIGZwX2dlbl9jbnRsICY9IH5SQURFT05fRlBfU0VMX0NSVEMyOwogICAgIH0gZWxzZSB7CiAJICAgIGlmIChBU0lDX0lTX1IzMDAocmRldikgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUjIwMCkgewogCQkgICAgZnBfZ2VuX2NudGwgJj0gflIyMDBfRlBfU09VUkNFX1NFTF9NQVNLOwpAQCAtNTkzLDcgKzYwMCw4IEBACiAJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKLQorCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KKwlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTYzNiw3ICs2NDQsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV90bWRzX2V4dF9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNzM1LDcgKzc0Miw4IEBACiAJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtODM5LDcgKzg0Nyw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3R2X2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT0ZGKTsKLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV90dl9kYWNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCBlNjEyMjY4Li5hY2U3MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0xNzIsNiArMTcyLDcgQEAKIAogc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gewogCXN0cnVjdCBhdG9tX2NvbnRleHQgKmF0b21fY29udGV4dDsKKwlzdHJ1Y3QgY2FyZF9pbmZvICphdG9tX2NhcmRfaW5mbzsKIAllbnVtIHJhZGVvbl9jb25uZWN0b3JfdGFibGUgY29ubmVjdG9yX3RhYmxlOwogCWJvb2wgbW9kZV9jb25maWdfaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpjcnRjc1syXTsKQEAgLTE4NiwxNyArMTg3LDYgQEAKIAogfTsKIAotc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSB7Ci0JLyogcHJlZmVycmVkIG1vZGUgKi8KLQl1aW50MzJfdCBwYW5lbF94cmVzLCBwYW5lbF95cmVzOwotCXVpbnQzMl90IGhvdmVycGx1cywgaHN5bmNfd2lkdGg7Ci0JdWludDMyX3QgaGJsYW5rOwotCXVpbnQzMl90IHZvdmVycGx1cywgdnN5bmNfd2lkdGg7Ci0JdWludDMyX3QgdmJsYW5rOwotCXVpbnQzMl90IGRvdGNsb2NrOwotCXVpbnQzMl90IGZsYWdzOwotfTsKLQogI2RlZmluZSBNQVhfSF9DT0RFX1RJTUlOR19MRU4gMzIKICNkZWZpbmUgTUFYX1ZfQ09ERV9USU1JTkdfTEVOIDMyCiAKQEAgLTIyOCw3ICsyMTgsNyBAQAogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwogCWZpeGVkMjBfMTIgdnNjOwogCWZpeGVkMjBfMTIgaHNjOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMgewpAQCAtMjQ4LDcgKzIzOCw3IEBACiAJYm9vbCAgICAgdXNlX2Jpb3NfZGl2aWRlcnM7CiAJdWludDMyX3QgbHZkc19nZW5fY250bDsKIAkvKiBwYW5lbCBtb2RlICovCi0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIH07CiAKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgewpAQCAtMjcxLDYgKzI2MSwxNiBAQAogCXN0cnVjdCByYWRlb25fdG1kc19wbGwgdG1kc19wbGxbNF07CiB9OwogCisvKiBzcHJlYWQgc3BlY3RydW0gKi8KK3N0cnVjdCByYWRlb25fYXRvbV9zcyB7CisJdWludDE2X3QgcGVyY2VudGFnZTsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCBzdGVwOworCXVpbnQ4X3QgZGVsYXk7CisJdWludDhfdCByYW5nZTsKKwl1aW50OF90IHJlZmRpdjsKK307CisKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyB7CiAJLyogYXRvbSBkaWcgKi8KIAlib29sIGNvaGVyZW50X21vZGU7CkBAIC0yNzgsOCArMjc4LDkgQEAKIAkvKiBhdG9tIGx2ZHMgKi8KIAl1aW50MzJfdCBsdmRzX21pc2M7CiAJdWludDE2X3QgcGFuZWxfcHdyX2RlbGF5OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3M7CiAJLyogcGFuZWwgbW9kZSAqLwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kYWMgewpAQCAtMjk0LDcgKzI5NSw3IEBACiAJdWludDMyX3QgZmxhZ3M7CiAJdWludDMyX3QgcGl4ZWxfY2xvY2s7CiAJZW51bSByYWRlb25fcm14X3R5cGUgcm14X3R5cGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSBuYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKIAl2b2lkICplbmNfcHJpdjsKIH07CiAKQEAgLTMwOCwxMiArMzA5LDE1IEBACiAJdWludDMyX3QgY29ubmVjdG9yX2lkOwogCXVpbnQzMl90IGRldmljZXM7CiAJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqZGRjX2J1czsKKwkvKiBzb21lIHN5c3RlbXMgaGF2ZSBhIGFuIGhkbWkgYW5kIHZnYSBwb3J0IHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKi8KKwlib29sIHNoYXJlZF9kZGM7CiAJYm9vbCB1c2VfZGlnaXRhbDsKIAkvKiB3ZSBuZWVkIHRvIG1pbmQgdGhlIEVESUQgYmV0d2VlbiBkZXRlY3QKIAkgICBhbmQgZ2V0IG1vZGVzIGR1ZSB0byBhbmFsb2cvZGlnaXRhbC90dmVuY29kZXIgKi8KIAlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAl2b2lkICpjb25fcHJpdjsKIAlib29sIGRhY19sb2FkX2RldGVjdDsKKwl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkOwogfTsKIAogc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjE0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICovCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgInJhZGVvbi5oIgorCitpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKK2ludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocmFkZW9uX2RlYnVnZnNfcG1faW5pdChyZGV2KSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIENQICFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogRGVidWdmcyBpbmZvCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworc3RhdGljIGludCByYWRlb25fZGVidWdmc19wbV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNlcV9wcmludGYobSwgImVuZ2luZSBjbG9jazogJXUwIEh6XG4iLCByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KSk7CisJc2VxX3ByaW50ZihtLCAibWVtb3J5IGNsb2NrOiAldTAgSHpcbiIsIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX3BtX2luZm9fbGlzdFtdID0geworCXsicmFkZW9uX3BtX2luZm8iLCByYWRlb25fZGVidWdmc19wbV9pbmZvLCAwLCBOVUxMfSwKK307CisjZW5kaWYKKworaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCByYWRlb25fcG1faW5mb19saXN0LCBBUlJBWV9TSVpFKHJhZGVvbl9wbV9pbmZvX2xpc3QpKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggYmZhMWFiOS4uMjlhYjc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTI5MCw2ICsyOTAsOCBAQAogI2RlZmluZSBSQURFT05fQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDAwMzAKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfTUFTVEVSX0RJUyAgICAgICAgICgxIDw8IDYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX0JJT1NfRElTX1JPTSAgICAgICAoMSA8PCAxMikKKyMJZGVmaW5lIFJTNjAwX0JVU19NQVNURVJfRElTCSAgICAgKDEgPDwgMTQpCisjCWRlZmluZSBSUzYwMF9NU0lfUkVBUk0JCSAgICAgKDEgPDwgMjApIC8qIHJzNjAwL3JzNjkwL3JzNzQwICovCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JEX0RJU0NBUkRfRU4gICAgICAoMSA8PCAyNCkKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfUkRfQUJPUlRfRU4gICAgICAgICgxIDw8IDI1KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19NU1RSX0RJU0NPTk5FQ1RfRU4gKDEgPDwgMjgpCkBAIC0yOTcsNiArMjk5LDkgQEAKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfUkVBRF9CVVJTVCAgICAgICAgICgxIDw8IDMwKQogI2RlZmluZSBSQURFT05fQlVTX0NOVEwxICAgICAgICAgICAgICAgICAgICAweDAwMzQKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfV0FJVF9PTl9MT0NLX0VOICAgICgxIDw8IDQpCisvKiBydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4ICovCisjZGVmaW5lIFJBREVPTl9NU0lfUkVBUk1fRU4JCSAgICAweDAxNjAKKyMJZGVmaW5lIFJWMzcwX01TSV9SRUFSTV9FTgkgICAgICgxIDw8IDApCiAKIC8qICNkZWZpbmUgUkFERU9OX1BDSUVfSU5ERVggICAgICAgICAgICAgICAgICAgMHgwMDMwICovCiAvKiAjZGVmaW5lIFJBREVPTl9QQ0lFX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDAzNCAqLwpAQCAtMzMxMSw2ICszMzE2LDcgQEAKICNkZWZpbmUgUkFERU9OX0FJQ19DTlRMICAgICAgICAgICAgICAgICAgICAgMHgwMWQwCiAjICAgICAgIGRlZmluZSBSQURFT05fUENJR0FSVF9UUkFOU0xBVEVfRU4gICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBSQURFT05fRElTX09VVF9PRl9QQ0lfR0FSVF9BQ0NFU1MgICAgICgxIDw8IDEpCisjCWRlZmluZSBSUzQwMF9NU0lfUkVBUk0JICAgICAgICAgICAgICAgICgxIDw8IDMpIC8qIHJzNDAwL3JzNDgwICovCiAjZGVmaW5lIFJBREVPTl9BSUNfTE9fQUREUiAgICAgICAgICAgICAgICAgIDB4MDFkYwogI2RlZmluZSBSQURFT05fQUlDX1BUX0JBU0UJCTB4MDFkOAogI2RlZmluZSBSQURFT05fQUlDX0hJX0FERFIJCTB4MDFlMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDAzYzMzY2YuLmY4YTQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkvKiBOdW1iZXIgb2YgdGVzdHMgPQogCSAqIChUb3RhbCBHVFQgLSBJQiBwb29sIC0gd3JpdGViYWNrIHBhZ2UgLSByaW5nIGJ1ZmZlcikgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gNDA5NiAtCisJbiA9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KIAkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CiAKLQkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weShyZGV2LCBndHRfYWRkciwgdnJhbV9hZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigiRmFpbGVkIEdUVC0+VlJBTSBjb3B5ICVkXG4iLCBpKTsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIHZyYW1fYWRkciwgZ3R0X2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgVlJBTS0+R1RUIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggNzY1YmQxOC4uMTM4MWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTI5NSw2ICsyOTUsMTIgQEAKIAlpZiAodW5saWtlbHkocikpIHsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHR0bV90dF9zZXRfcGxhY2VtZW50X2NhY2hpbmcoYm8tPnR0bSwgdG1wX21lbS5wbGFjZW1lbnQpOworCWlmICh1bmxpa2VseShyKSkgeworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKwogCXIgPSB0dG1fdHRfYmluZChiby0+dHRtLCAmdG1wX21lbSk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggYTc2OWMyOS4uY2EwMzcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtNDE4LDYgKzQxOCw4IEBACiAJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOwogCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KIAlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogc2V0dXAgTUMgYmVmb3JlIGNhbGxpbmcgcG9zdCB0YWJsZXMgKi8KKwlyczQwMF9tY19wcm9ncmFtKHJkZXYpOwogCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KIAlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewogCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAxMGRmYTc4Li41ZjExN2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCBzdGF0dXMsIG1zaV9yZWFybTsKIAl1aW50MzJfdCByNTAwX2Rpc3BfaW50OwogCiAJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CkBAIC0yNjAsNiArMjYwLDIyIEBACiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKIAkJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CiAJfQorCWlmIChyZGV2LT5tc2lfZW5hYmxlZCkgeworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfUlM2MDA6CisJCWNhc2UgQ0hJUF9SUzY5MDoKKwkJY2FzZSBDSElQX1JTNzQwOgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfTVNJX1JFQVJNOworCQkJV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgbXNpX3JlYXJtKTsKKwkJCVdSRUczMihSQURFT05fQlVTX0NOVEwsIG1zaV9yZWFybSB8IFJTNjAwX01TSV9SRUFSTSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1zaV9yZWFybSA9IFJSRUczMihSQURFT05fTVNJX1JFQVJNX0VOKSAmIH5SVjM3MF9NU0lfUkVBUk1fRU47CisJCQlXUkVHMzIoUkFERU9OX01TSV9SRUFSTV9FTiwgbXNpX3JlYXJtKTsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0gfCBSVjM3MF9NU0lfUkVBUk1fRU4pOworCQkJYnJlYWs7CisJCX0KKwl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00NzIsNiArNDg4LDggQEAKIAl9CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCiAJcnM2MDBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggMDI1ZTMyMi4uMjc1NDcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtNzA2LDYgKzcwNiw4IEBACiAJfQogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXJzNjkwX3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCmluZGV4IDQxYTM0YzIuLmJhNjhjOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKQEAgLTM4MCw3ICszODAsNiBAQAogCXNhdmUtPmQyY3J0Y19jb250cm9sID0gUlJFRzMyKFJfMDA2ODgwX0QyQ1JUQ19DT05UUk9MKTsKIAogCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKFJfMDAwMzMwX0QxVkdBX0NPTlRST0wsIDApOwogCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOwogCVdSRUczMihSXzAwMDMwMF9WR0FfUkVOREVSX0NPTlRST0wsIDApOwogCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwpAQCAtMzg5LDYgKzM4OCw4IEBACiAJV1JFRzMyKFJfMDA2ODgwX0QyQ1JUQ19DT05UUk9MLCAwKTsKIAlXUkVHMzIoUl8wMDYwRThfRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKIAlXUkVHMzIoUl8wMDY4RThfRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDAwMzM4X0QyVkdBX0NPTlRST0wsIDApOwogfQogCiB2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCkBAIC00MDIsMTQgKzQwMywxNCBAQAogCVdSRUczMihSXzAwMDMyOF9WR0FfSERQX0NPTlRST0wsIHNhdmUtPnZnYV9oZHBfY29udHJvbCk7CiAJbWRlbGF5KDEpOwogCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgc2F2ZS0+ZDF2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzM4X0QyVkdBX0NPTlRST0wsIHNhdmUtPmQydmdhX2NvbnRyb2wpOwogCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwogCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwogCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOwogCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOwogCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOwogCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKLQlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CiAJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKIH0KIApAQCAtNTg1LDYgKzU4Niw4IEBACiAJfQogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKIAkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IDU5NWFjNjMuLmIwZWZkMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTUyOSwxMSArNTI5LDExIEBACiAJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzcwKQogCQlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKDEpOwogCWVsc2UKLQkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygobWNfYXJiX3JhbWNmZyAmIE5PT0ZCQU5LX1NISUZUKSA+PiBOT09GQkFOS19NQVNLKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygobWNfYXJiX3JhbWNmZyAmIE5PT0ZCQU5LX01BU0spID4+IE5PT0ZCQU5LX1NISUZUKTsKIAogCWdiX3RpbGluZ19jb25maWcgfD0gR1JPVVBfU0laRSgwKTsKIAotCWlmICgoKG1jX2FyYl9yYW1jZmcgJiBOT09GUk9XU19NQVNLKSAmIE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKKwlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgPj4gTk9PRlJPV1NfU0hJRlQpID4gMykgewogCQlnYl90aWxpbmdfY29uZmlnIHw9IFJPV19USUxJTkcoMyk7CiAJCWdiX3RpbGluZ19jb25maWcgfD0gU0FNUExFX1NQTElUKDMpOwogCX0gZWxzZSB7CkBAIC01NzksMTQgKzU3OSwxNCBAQAogCiAJLyogc2V0IEhXIGRlZmF1bHRzIGZvciAzRCBlbmdpbmUgKi8KIAlXUkVHMzIoQ1BfUVVFVUVfVEhSRVNIT0xEUywgKFJPUV9JQjFfU1RBUlQoMHgxNikgfAotCQkJCQkJUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCQkJCSAgICAgUk9RX0lCMl9TVEFSVCgweDJiKSkpOwogCiAJV1JFRzMyKENQX01FUV9USFJFU0hPTERTLCBTVFFfU1BMSVQoMHgzMCkpOwogCiAJV1JFRzMyKFRBX0NOVExfQVVYLCAoRElTQUJMRV9DVUJFX0FOSVNPIHwKLQkJCQkJU1lOQ19HUkFESUVOVCB8Ci0JCQkJCVNZTkNfV0FMS0VSIHwKLQkJCQkJU1lOQ19BTElHTkVSKSk7CisJCQkgICAgIFNZTkNfR1JBRElFTlQgfAorCQkJICAgICBTWU5DX1dBTEtFUiB8CisJCQkgICAgIFNZTkNfQUxJR05FUikpOwogCiAJc3hfZGVidWdfMSA9IFJSRUczMihTWF9ERUJVR18xKTsKIAlzeF9kZWJ1Z18xIHw9IEVOQUJMRV9ORVdfU01YX0FERFJFU1M7CkBAIC01OTgsOSArNTk4LDkgQEAKIAlXUkVHMzIoU01YX0RDX0NUTDAsIHNteF9kY19jdGwwKTsKIAogCVdSRUczMihTTVhfRVZFTlRfQ1RMLCAoRVNfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBHU19GTFVTSF9DVEwoNCkgfAotCQkJCQkgIEFDS19GTFVTSF9DVEwoMykgfAotCQkJCQkgIFNZTkNfRkxVU0hfQ1RMKSk7CisJCQkgICAgICAgR1NfRkxVU0hfQ1RMKDQpIHwKKwkJCSAgICAgICBBQ0tfRkxVU0hfQ1RMKDMpIHwKKwkJCSAgICAgICBTWU5DX0ZMVVNIX0NUTCkpOwogCiAJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzcwKQogCQlXUkVHMzIoREJfREVCVUczLCBEQl9DTEtfT0ZGX0RFTEFZKDB4MWYpKTsKQEAgLTYxMSwxMiArNjExLDEyIEBACiAJfQogCiAJV1JFRzMyKFNYX0VYUE9SVF9CVUZGRVJfU0laRVMsIChDT0xPUl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8Ci0JCQkJCQkgICBTTVhfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NteF9zaXplIC8gNCkgLSAxKSkpOworCQkJCQlQT1NJVElPTl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfcG9zX3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKIAogCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcucnY3NzAuc2NfcHJpbV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19ISVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAotCQkJCQkJIFNDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcucnY3NzAuc2NfZWFybHl6X3RpbGVfZmlmb19maXplKSkpOworCQkJCSBTQ19ISVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAorCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKIAogCVdSRUczMihQQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOwogCkBAIC03NzQsMTQgKzc3NCwzNiBAQAogewogCWZpeGVkMjBfMTIgYTsKIAl1MzIgdG1wOworCWludCBjaGFuc2l6ZSwgbnVtY2hhbjsKIAlpbnQgcjsKIAogCS8qIEdldCBWUkFNIGluZm9ybWF0aW9ucyAqLwotCS8qIEZJWE1FOiBEb24ndCBrbm93IGhvdyB0byBkZXRlcm1pbmUgdnJhbSB3aWR0aCwgbmVlZCB0byBjaGVjawotCSAqIHZyYW1fd2lkdGggdXNhZ2UKLQkgKi8KLQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKKwl0bXAgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisJaWYgKHRtcCAmIENIQU5TSVpFX09WRVJSSURFKSB7CisJCWNoYW5zaXplID0gMTY7CisJfSBlbHNlIGlmICh0bXAgJiBDSEFOU0laRV9NQVNLKSB7CisJCWNoYW5zaXplID0gNjQ7CisJfSBlbHNlIHsKKwkJY2hhbnNpemUgPSAzMjsKKwl9CisJdG1wID0gUlJFRzMyKE1DX1NIQVJFRF9DSE1BUCk7CisJc3dpdGNoICgodG1wICYgTk9PRkNIQU5fTUFTSykgPj4gTk9PRkNIQU5fU0hJRlQpIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJbnVtY2hhbiA9IDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbnVtY2hhbiA9IDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbnVtY2hhbiA9IDQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbnVtY2hhbiA9IDg7CisJCWJyZWFrOworCX0KKwlyZGV2LT5tYy52cmFtX3dpZHRoID0gbnVtY2hhbiAqIGNoYW5zaXplOwogCS8qIENvdWxkIGFwZXIgc2l6ZSByZXBvcnQgMCA/ICovCiAJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKQEAgLTk2MSwxMCArOTgzLDEzIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDRiOWMzZDYuLmExMzY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTI5LDYgKzEyOSwxMCBAQAogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQwogCisjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMwpAQCAtMTQyLDYgKzE0Niw3IEBACiAjZGVmaW5lCQlDSEFOU0laRV9NQVNLCQkJCQkweDAwMDAwMTAwCiAjZGVmaW5lCQlCVVJTVExFTkdUSF9TSElGVAkJCQk5CiAjZGVmaW5lCQlCVVJTVExFTkdUSF9NQVNLCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJCUNIQU5TSVpFX09WRVJSSURFCQkJCSgxIDw8IDExKQogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4IGE1NWVlMWEuLjdiY2I4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwpAQCAtMjc5LDYgKzI3OSw3IEBACiAKIAlyZXR1cm4gdHRtX3R0X3NldF9jYWNoaW5nKHR0bSwgc3RhdGUpOwogfQorRVhQT1JUX1NZTUJPTCh0dG1fdHRfc2V0X3BsYWNlbWVudF9jYWNoaW5nKTsKIAogc3RhdGljIHZvaWQgdHRtX3R0X2ZyZWVfYWxsb2NlZF9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBlMmU4NzQxLi44MDc5MmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTM5LDggKzM5LDYgQEAKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi42IgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJBbmRyZWFzIEdhbCwgVm9qdGVjaCBQYXZsaWssIEppcmkgS29zaW5hIgogI2RlZmluZSBEUklWRVJfREVTQyAiSElEIGNvcmUgZHJpdmVyIgogI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgogCkBAIC0xMzI3LDYgKzEzMjUsOCBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRzI1X1dIRUVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TUEFDRVRSQVZFTExFUikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VOQVZJR0FUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTkU0SykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX0xLNkspIH0sCkBAIC0xNjIxLDYgKzE2MjEsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LQkdFQVIsIFVTQl9ERVZJQ0VfSURfS0JHRUFSX0pBTVNUVURJTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1dPUkxELCBVU0JfREVWSUNFX0lEX0tXT1JMRF9SQURJT19GTTcwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MCkgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCAweDAwNTgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kpIH0sCkBAIC0xOTE5LDUgKzE5MjAsOCBAQAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwogbW9kdWxlX2V4aXQoaGlkX2V4aXQpOwogCitNT0RVTEVfQVVUSE9SKCJBbmRyZWFzIEdhbCIpOworTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWsiKTsKK01PRFVMRV9BVVRIT1IoIkppcmkgS29zaW5hIik7CiBNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCAwY2VhYmJiLi4zODM5MzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0xMTcsNiArMTE3LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSF9QUk9fUEVEQUxTCTB4MDBmMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0NPTUJBVFNUSUNLCTB4MDBmNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fWU9LRQkweDAwZmYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSF8zQVhJU181QlVUVE9OX1NUSUNLCTB4MDBkMwogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hFUlJZCQkweDA0NmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04JMHgwMDIzCkBAIC0zMDUsNiArMzA2LDggQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIJMHhjNTE3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfQ09SRExFU1NfREVTS1RPUF9MWDUwMAkweGM1MTIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NWDMwMDBfUkVDRUlWRVIJMHhjNTEzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1BBQ0VUUkFWRUxMRVIJMHhjNjIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1BBQ0VOQVZJR0FUT1IJMHhjNjI2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0RFU0tUT1AJMHhjNzA0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0VER0UJMHhjNzE0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRElOT1ZPX01JTkkJMHhjNzFmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCmluZGV4IDRhNDg5NzguLjlmY2QzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIExHX05PR0VUCQkweDEwMAogI2RlZmluZSBMR19GRgkJCTB4MjAwCiAjZGVmaW5lIExHX0ZGMgkJCTB4NDAwCisjZGVmaW5lIExHX1JERVNDX1JFTF9BQlMJMHg4MDAKIAogLyoKICAqIENlcnRhaW4gTG9naXRlY2gga2V5Ym9hcmRzIHNlbmQgaW4gcmVwb3J0ICMzIGtleXMgd2hpY2ggYXJlIGZhcgpAQCAtNTEsNiArNTIsMTMgQEAKIAkJcmRlc2NbODRdID0gcmRlc2NbODldID0gMHg0ZDsKIAkJcmRlc2NbODVdID0gcmRlc2NbOTBdID0gMHgxMDsKIAl9CisJaWYgKChxdWlya3MgJiBMR19SREVTQ19SRUxfQUJTKSAmJiByc2l6ZSA+PSA1MCAmJgorCQkJcmRlc2NbMzJdID09IDB4ODEgJiYgcmRlc2NbMzNdID09IDB4MDYgJiYKKwkJCXJkZXNjWzQ5XSA9PSAweDgxICYmIHJkZXNjWzUwXSA9PSAweDA2KSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgcmVsL2FicyBpbiBMb2dpdGVjaCAiCisJCQkJInJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKKwkJcmRlc2NbMzNdID0gcmRlc2NbNTBdID0gMHgwMjsKKwl9CiB9CiAKICNkZWZpbmUgbGdfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKQEAgLTMyMyw4ICszMzEsMTMgQEAKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMiksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGMiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TUEFDRU5BVklHQVRPUiksCisJCS5kcml2ZXJfZGF0YSA9IExHX1JERVNDX1JFTF9BQlMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VUUkFWRUxMRVIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQ19SRUxfQUJTIH0sCiAJeyB9CiB9OworCiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbGdfZGV2aWNlcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBsZ19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IDAzYmQ3MDMuLjAyNTgyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC00MSw4ICs0MSw2IEBACiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuNiIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQW5kcmVhcyBHYWwsIFZvanRlY2ggUGF2bGlrLCBKaXJpIEtvc2luYSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBISUQgY29yZSBkcml2ZXIiCiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCiAKQEAgLTk5OCw3ICs5OTYsOCBAQAogCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZG1hID0gdXNiaGlkLT5jdHJsYnVmX2RtYTsKIAl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19TRVRVUF9ETUFfTUFQKTsKIAotCXVzYmhpZF9pbml0X3JlcG9ydHMoaGlkKTsKKwlpZiAoIShoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFMpKQorCQl1c2JoaWRfaW5pdF9yZXBvcnRzKGhpZCk7CiAKIAlzZXRfYml0KEhJRF9TVEFSVEVELCAmdXNiaGlkLT5pb2ZsKTsKIApAQCAtMTM5NSw4ICsxMzk0LDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmhpZF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gdXNiX3JlZ2lzdGVyX2ZhaWw7Ci0JcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgotCQkJRFJJVkVSX0RFU0MgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiB1c2JfcmVnaXN0ZXJfZmFpbDoKQEAgLTE0MjMsNiArMTQyMSw4IEBACiBtb2R1bGVfaW5pdChoaWRfaW5pdCk7CiBtb2R1bGVfZXhpdChoaWRfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZWFzIEdhbCIpOworTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWsiKTsKK01PRFVMRV9BVVRIT1IoIkppcmkgS29zaW5hIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggZTk4NzU2Mi4uMzg3NzNkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC01NCw2ICs1NCw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX0NPTUJBVFNUSUNLLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfRkxJR0hUX1NJTV9ZT0tFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfUFJPX1BFREFMUywgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIXzNBWElTXzVCVVRUT05fU1RJQ0ssIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9ETUksIFVTQl9ERVZJQ0VfSURfRE1JX0VOQywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0VMTywgVVNCX0RFVklDRV9JRF9FTE9fVFMyNzAwLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfU1VOLCBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRSwgSElEX1FVSVJLX05PR0VUIH0sCkBAIC0yODEsNyArMjgyLDcgQEAKIAlpZiAoaWRWZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9OQ1IgJiYKIAkJCWlkUHJvZHVjdCA+PSBVU0JfREVWSUNFX0lEX05DUl9GSVJTVCAmJgogCQkJaWRQcm9kdWN0IDw9IFVTQl9ERVZJQ0VfSURfTkNSX0xBU1QpCi0JCQlyZXR1cm4gSElEX1FVSVJLX05PR0VUOworCQkJcmV0dXJuIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFM7CiAKIAlkb3duX3JlYWQoJmRxdWlya3NfcndzZW0pOwogCWJsX2VudHJ5ID0gdXNiaGlkX2V4aXN0c19kcXVpcmsoaWRWZW5kb3IsIGlkUHJvZHVjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggOGI2ZWUyNC4uODY3ZTA4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtNDUwLDcgKzQ1MCw2IEBACiAJdXJlZl9tdWx0aSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1cmVmX211bHRpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlsb2NrX2tlcm5lbCgpOwogCXVyZWYgPSAmdXJlZl9tdWx0aS0+dXJlZjsKIAlpZiAoY21kID09IEhJRElPQ0dVU0FHRVMgfHwgY21kID09IEhJRElPQ1NVU0FHRVMpIHsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHVyZWZfbXVsdGksIHVzZXJfYXJnLApAQCAtNTI4LDcgKzUyNyw2IEBACiAKIAkJY2FzZSBISURJT0NHQ09MTEVDVElPTklOREVYOgogCQkJaSA9IGZpZWxkLT51c2FnZVt1cmVmLT51c2FnZV9pbmRleF0uY29sbGVjdGlvbl9pbmRleDsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCWtmcmVlKHVyZWZfbXVsdGkpOwogCQkJcmV0dXJuIGk7CiAJCWNhc2UgSElESU9DR1VTQUdFUzoKQEAgLTU0NywxNSArNTQ1LDEyIEBACiAJCX0KIAogZ29vZHJldHVybjoKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIDA7CiBmYXVsdDoKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiBpbnZhbDoKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZSh1cmVmX211bHRpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDc1LmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYwppbmRleCBkMzk4NzdhLi5iNWE5NTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYwpAQCAtMzUwLDggKzM1MCw3IEBACiAKIAljYXNlIEZBVUxUOgogCQkvKiBOb3RlIC0gb25seSBmb3IgcmVtb3RlMSBhbmQgcmVtb3RlMiAqLwotCQlvdXQgPSBkYXRhLT5hbGFybXMgJiAoc2F0dHItPmluZGV4ID8gMHg4MDAwIDogMHg0MDAwKTsKLQkJb3V0ID0gb3V0ID8gMCA6IDE7CisJCW91dCA9ICEhKGRhdGEtPmFsYXJtcyAmIChzYXR0ci0+aW5kZXggPyAweDgwMDAgOiAweDQwMDApKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtODYzLDcgKzg2Miw3IEBACiAJCQkgICAgc2V0X3B3bWZyZXEsIElOUFVULCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtY3RybCwKIAkJCSAgICBzZXRfcHdtY3RybCwgSU5QVVQsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19jaGFubmVsX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19jaGFubmVsc190ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCSAgICBzaG93X3B3bWNoYW4sIHNldF9wd21jaGFuLCBJTlBVVCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX3BvaW50MV9wd20sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwKIAkJCSAgICBzZXRfcHdtLCBNSU4sIDApOwpAQCAtODc1LDcgKzg3NCw3IEBACiAJCQkgICAgc2V0X3B3bWZyZXEsIElOUFVULCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtY3RybCwKIAkJCSAgICBzZXRfcHdtY3RybCwgSU5QVVQsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19jaGFubmVsX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19jaGFubmVsc190ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCSAgICBzaG93X3B3bWNoYW4sIHNldF9wd21jaGFuLCBJTlBVVCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX3BvaW50MV9wd20sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwKIAkJCSAgICBzZXRfcHdtLCBNSU4sIDEpOwpAQCAtODg3LDcgKzg4Niw3IEBACiAJCQkgICAgc2V0X3B3bWZyZXEsIElOUFVULCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20zX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtY3RybCwKIAkJCSAgICBzZXRfcHdtY3RybCwgSU5QVVQsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfYXV0b19jaGFubmVsX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfYXV0b19jaGFubmVsc190ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCSAgICBzaG93X3B3bWNoYW4sIHNldF9wd21jaGFuLCBJTlBVVCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX3BvaW50MV9wd20sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwKIAkJCSAgICBzZXRfcHdtLCBNSU4sIDIpOwpAQCAtOTQ3LDE5ICs5NDYsMTkgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZnJlcS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19jaGFubmVsX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZnJlcS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19jaGFubmVsX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZnJlcS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19jaGFubmVsX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKIAlOVUxMLApAQCAtMTE1Miw3ICsxMTUxLDcgQEAKIAl9CiAKIAkvKiBMaW1pdHMgYW5kIHNldHRpbmdzLCBzaG91bGQgbmV2ZXIgY2hhbmdlIHVwZGF0ZSBldmVyeSA2MCBzZWNvbmRzICovCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGltaXRzX3VwZGF0ZWQgKyBIWiAqIDIpIHx8CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGltaXRzX3VwZGF0ZWQgKyBIWiAqIDYwKSB8fAogCSAgICAhZGF0YS0+dmFsaWQpIHsKIAkJZGF0YS0+Y29uZmlnNSA9IGFkdDc0NzVfcmVhZChSRUdfQ09ORklHNSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKaW5kZXggMmMyY2IxZS4uMjdkNjI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKKysrIGIvZHJpdmVycy9od21vbi9kbWUxNzM3LmMKQEAgLTU3Miw3ICs1NzIsNyBAQAogCiAJLyogU2FtcGxlIHJlZ2lzdGVyIGNvbnRlbnRzIGV2ZXJ5IDEgc2VjICovCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGUgKyBIWikgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKKwkJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgewogCQkJZGF0YS0+dmlkID0gZG1lMTczN19yZWFkKGRhdGEsIERNRTE3MzdfUkVHX1ZJRCkgJgogCQkJCTB4M2Y7CiAJCX0KQEAgLTE2MjEsOSArMTYyMSw2IEBACiAJJnNlbnNvcl9kZXZfYXR0cl96b25lMV9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUyX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTNfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCi0JLyogTWlzYyAqLwotCSZkZXZfYXR0cl92cm0uYXR0ciwKLQkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0xNjMxLDYgKzE2MjgsMTggQEAKIAkuYXR0cnMgPSBkbWUxNzM3X21pc2NfYXR0ciwKIH07CiAKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0IGhvbGRzIFZJRC1yZWxhdGVkIGF0dHJpYnV0ZXMuIFRoZWlyIGNyZWF0aW9uCisgICBkZXBlbmRzIG9uIHRoZSBjaGlwIHR5cGUgd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcgbW9kdWxlIGxvYWQuICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZG1lMTczN192aWRfYXR0cltdID0geworCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkbWUxNzM3X3ZpZF9ncm91cCA9IHsKKwkuYXR0cnMgPSBkbWUxNzM3X3ZpZF9hdHRyLAorfTsKKwogLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3RzIGhvbGQgdGhlIFBXTSBhdHRyaWJ1dGVzLCBzb21lIG9mIHdoaWNoIGFyZSBvcHRpb25hbC4KICAqIFRoZWlyIGNyZWF0aW9uIGRlcGVuZHMgb24gdGhlIGNoaXAgY29uZmlndXJhdGlvbiB3aGljaCBpcyBkZXRlcm1pbmVkIGR1cmluZwogICogbW9kdWxlIGxvYWQuICovCkBAIC0xOTAyLDYgKzE5MTEsOSBAQAogCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X21pc2NfZ3JvdXApOwogCX0KKwlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN192aWRfZ3JvdXApOworCX0KIAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19ncm91cCk7CiAKQEAgLTE5MzMsNiArMTk0NSwxMyBAQAogCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAorCS8qIENyZWF0ZSBWSUQtcmVsYXRlZCBzeXNmcyBhdHRyaWJ1dGVzICovCisJaWYgKChkYXRhLT50eXBlID09IGRtZTE3MzcpICYmCisJICAgIChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkgICAgICAmZG1lMTczN192aWRfZ3JvdXApKSkgeworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKwogCS8qIENyZWF0ZSBmYW4gc3lzZnMgYXR0cmlidXRlcyAqLwogCWZvciAoaXggPSAwOyBpeCA8IEFSUkFZX1NJWkUoZG1lMTczN19mYW5fZ3JvdXApOyBpeCsrKSB7CiAJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgaXgpKSB7CkBAIC0yMTI3LDcgKzIxNDYsNyBAQAogCWRhdGEtPnB3bV9hY3pbMl0gPSA0OwkvKiBwd20zIC0+IHpvbmUzICovCiAKIAkvKiBTZXQgVlJNICovCi0JaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgeworCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKIAkJZGF0YS0+dnJtID0gdmlkX3doaWNoX3ZybSgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mc2NobWQuYyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKaW5kZXggMmE3YTg1YS4uZGExYjFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mc2NobWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCkBAIC04MTksNyArODE5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHdhdGNoZG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7Ci0Jc2l6ZV90IHJldDsKKwlpbnQgcmV0OwogCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWlmIChjb3VudCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCmluZGV4IDY2Nzk4NTQuLmJlNDc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYworKysgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKQEAgLTE5NywxMSArMTk3LDEzIEBACiAJQVhJU19ETUlfTUFUQ0goIkhQMjEzMyIsICJIUCAyMTMzIiwgeHlfcm90YXRlZF9sZWZ0KSwKIAlBWElTX0RNSV9NQVRDSCgiSFAyMTQwIiwgIkhQIDIxNDAiLCB4eV9zd2FwX2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTN4IiwgIkhQIENvbXBhcSA2NTMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKLQlBWElTX0RNSV9NQVRDSCgiTkM2NzN4IiwgIkhQIENvbXBhcSA2NzMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwYiIsICJIUCBDb21wYXEgNjczMGIiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwcyIsICJIUCBDb21wYXEgNjczMHMiLCB4eV9zd2FwKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTF4eCIsICJIUCBDb21wYXEgNjUxIiwgeHlfcm90YXRlZF9yaWdodCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxMHgiLCAiSFAgQ29tcGFxIDY3MTAiLCB4eV9zd2FwX3l6X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzE1eCIsICJIUCBDb21wYXEgNjcxNSIsIHlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY5M3h4IiwgIkhQIEVsaXRlQm9vayA2OTMiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgODUzIiwgeHlfc3dhcCksCiAJLyogSW50ZWwtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCiAJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9JIiwKIAkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJCXlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJEVjciLCAiSFAgUGF2aWxpb24gZHY3IiwgeF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkhQODcxMCIsICJIUCBDb21wYXEgODcxMCIsIHlfaW52ZXJ0ZWQpLAorCUFYSVNfRE1JX01BVENIKCJIRFgxOCIsICJIUCBIRFggMTgiLCB4X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGZmZWIyYTEuLmEzNzQ5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC0xMDI4LDEyICsxMDI4LDExIEBACiAJCWNoaXBfdHlwZSwgKmFkZHJlc3MsIHNpb19kYXRhLT5yZXZpc2lvbik7CiAKIAkvKiBSZWFkIEdQSU8gY29uZmlnIGFuZCBWSUQgdmFsdWUgZnJvbSBMRE4gNyAoR1BJTykgKi8KLQlpZiAoY2hpcF90eXBlICE9IElUODcwNUZfREVWSUQpIHsKKwlpZiAoc2lvX2RhdGEtPnR5cGUgIT0gaXQ4NykgewogCQlpbnQgcmVnOwogCiAJCXN1cGVyaW9fc2VsZWN0KEdQSU8pOwotCQlpZiAoKGNoaXBfdHlwZSA9PSBpdDg3MTgpIHx8Ci0JCSAgICAoY2hpcF90eXBlID09IGl0ODcyMCkpCisJCWlmIChzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MTggfHwgc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzIwKQogCQkJc2lvX2RhdGEtPnZpZF92YWx1ZSA9IHN1cGVyaW9faW5iKElUODdfU0lPX1ZJRF9SRUcpOwogCiAJCXJlZyA9IHN1cGVyaW9faW5iKElUODdfU0lPX1BJTlgyX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jIGIvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYwppbmRleCAzYTUyNGYyLi43MTgzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTMyMywxNCArMzIzLDIxIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmluKTsgaSsrKSB7Ci0JCWlmICghcGRhdGEtPmluW2ldKQorCQlzdHJ1Y3QgczNjMjR4eF9hZGNfaHdtb25faW5jZmcgKmNmZyA9IHBkYXRhLT5pbltpXTsKKworCQlpZiAoIWNmZykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwZGF0YS0+aW5baV0tPm11bHQgPj0gMHgxMDAwMCkKKwkJaWYgKGNmZy0+bXVsdCA+PSAweDEwMDAwKQogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAogCQkJCSAiY2hhbm5lbCAlZCBtdWx0aXBsaWVyIHRvbyBsYXJnZVxuIiwKIAkJCQkgaSk7CiAKKwkJaWYgKGNmZy0+ZGl2aWRlciA9PSAwKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgImNoYW5uZWwgJWQgZGl2aWRlciB6ZXJvXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJcmV0ID0gczNjX2h3bW9uX2NyZWF0ZV9hdHRyKCZkZXYtPmRldiwgcGRhdGEtPmluW2ldLAogCQkJCQkgICAgJmh3bW9uLT5hdHRyc1tpXSwgaSk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNzM3MzM1Zi4uZThmZTdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAgICBBVEkgU0I2MDAKIAkgICAgQVRJIFNCNzAwCiAJICAgIEFUSSBTQjgwMAotCSAgICBBTUQgU0I5MDAKKwkgICAgQU1EIEh1ZHNvbi0yCiAJICAgIFNlcnZlcndvcmtzIE9TQjQKIAkgICAgU2VydmVyd29ya3MgQ1NCNQogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA0YWZiYTNlLi5lMzY1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTEyMCwxOSArMTIwLDI2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcXVldWU7CiAJdW5zaWduZWQgbG9uZwkJaTJjc3I7CiAJdW5zaWduZWQgaW50IAkJZGlzYWJsZV9kZWxheTsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkIGludAkJaWZkcjsgLyogSU1YX0kyQ19JRkRSICovCiB9OwogCiAvKiogRnVuY3Rpb25zIGZvciBJTVggSTJDIGFkYXB0ZXIgZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpMmNfaW14X2J1c19idXN5KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgaW50IHRlbXA7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIHdhaXQgZm9yIGJ1cyBub3QgYnVzeSAqLwotCXdoaWxlIChyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKSAmIEkyU1JfSUJCKSB7CisJd2hpbGUgKDEpIHsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlpZiAoZm9yX2J1c3kgJiYgKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKKwkJaWYgKCFmb3JfYnVzeSAmJiAhKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE3OSw0MSArMTg2LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQorc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CisJaW50IHJlc3VsdDsKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCisJY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOworCXdyaXRlYihpMmNfaW14LT5pZmRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKIAkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7CiAJd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKworCS8qIFdhaXQgY29udHJvbGxlciB0byBiZSBzdGFibGUgKi8KKwl1ZGVsYXkoNTApOworCiAJLyogU3RhcnQgSTJDIHRyYW5zYWN0aW9uICovCiAJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCXRlbXAgfD0gSTJDUl9NU1RBOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaTJjX2lteC0+c3RvcHBlZCA9IDA7CisKIAl0ZW1wIHw9IEkyQ1JfSUlFTiB8IEkyQ1JfTVRYIHwgSTJDUl9UWEFLOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBpMmNfaW14X3N0b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewogCXVuc2lnbmVkIGludCB0ZW1wID0gMDsKIAotCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCi0JZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7Ci0JdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXRlbXAgJj0gfkkyQ1JfTVNUQTsKLQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JLyogc2V0dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8KLQl3cml0ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKLQkvKgotCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KLQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKSB7CisJCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCisJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCXRlbXAgJj0gfihJMkNSX01TVEEgfCBJMkNSX01UWCk7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJaTJjX2lteC0+c3RvcHBlZCA9IDE7CisJfQorCWlmIChjcHVfaXNfbXgxKCkpIHsKKwkJLyoKKwkJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgorCQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KKwkJICovCisJCXVkZWxheShpMmNfaW14LT5kaXNhYmxlX2RlbGF5KTsKKwl9CisKKwlpZiAoIWkyY19pbXgtPnN0b3BwZWQpCisJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisKIAkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICovCiAJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LApAQCAtMjMzLDggKzI2MSw4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpMmNfY2xrX2RpdltpXVswXSA8IGRpdjsgaSsrKTsKIAotCS8qIFdyaXRlIGRpdmlkZXIgdmFsdWUgdG8gcmVnaXN0ZXIgKi8KLQl3cml0ZWIoaTJjX2Nsa19kaXZbaV1bMV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCS8qIFN0b3JlIGRpdmlkZXIgdmFsdWUgKi8KKwlpMmNfaW14LT5pZmRyID0gaTJjX2Nsa19kaXZbaV1bMV07CiAKIAkvKgogCSAqIFRoZXJlIGR1bW15IGRlbGF5IGlzIGNhbGN1bGF0ZWQuCkBAIC0zNDEsMTEgKzM2OSwxNSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDEpKSB7CisJCQkvKiBJdCBtdXN0IGdlbmVyYXRlIFNUT1AgYmVmb3JlIHJlYWQgSTJEUiB0byBwcmV2ZW50CisJCQkgICBjb250cm9sbGVyIGZyb20gZ2VuZXJhdGluZyBhbm90aGVyIGNsb2NrIGN5Y2xlICovCiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JCQl0ZW1wICY9IH5JMkNSX01TVEE7CisJCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOwogCQkJd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQkJaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAwKTsKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCQl9IGVsc2UgaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDIpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBzZXQgVFhBS1xuIiwgX19mdW5jX18pOwpAQCAtMzcwLDE0ICs0MDIsMTEgQEAKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCi0JLyogQ2hlY2sgaWYgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLwotCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCk7CisJLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCisJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWwwOwogCi0JLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCi0JaTJjX2lteF9zdGFydChpMmNfaW14KTsKLQogCS8qIHJlYWQvd3JpdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlpZiAoaSkgewpAQCAtMzg2LDYgKzQxNSw5IEBACiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CiAJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCXJlc3VsdCA9ICBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGZhaWwwOwogCQl9CiAJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAogCQkJIjwlcz4gdHJhbnNmZXIgbWVzc2FnZTogJWRcbiIsIF9fZnVuY19fLCBpKTsKQEAgLTUwMCw3ICs1MzIsNiBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSTJDIGNsb2NrXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9Ci0JY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOwogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmNfaW14KTsKQEAgLTU0OSw3ICs1ODAsNiBAQAogZmFpbDU6CiAJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKIGZhaWw0OgotCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiAJY2xrX3B1dChpMmNfaW14LT5jbGspOwogZmFpbDM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19pbXgtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC01ODYsOCArNjE2LDYgQEAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwogCi0JLyogRGlzYWJsZSBJMkMgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGkyY19pbXgtPnJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggZDMyNWU4Ni4uZjYyNzAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zNjUsOSArMzY1LDYgQEAKIAl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CiAJdTMyIGZsYWdzID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKIAotCS8qIFN0YXJ0IHdpdGggTUVOICovCi0JaWYgKCFyZXN0YXJ0KQotCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwogCS8qIFN0YXJ0IGFzIG1hc3RlciAqLwogCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgZmxhZ3MpOwogCS8qIFdyaXRlIHRhcmdldCBieXRlICovCkBAIC0zOTYsOSArMzkzLDYgQEAKIAlpbnQgaSwgcmVzdWx0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYWRkcmVzcyBieXRlIC0gdGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KQEAgLTQyNSw5ICs0MTksOSBAQAogCQkvKiBHZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAyKQogCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKLQkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJLyogRG8gbm90IGdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCiAJCWlmIChpID09IGxlbmd0aCAtIDEpCi0JCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9UWEFLKTsKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKIAkJZGF0YVtpXSA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGQyNmE5NzIuLjFlMjQ1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlJbnRlbCBQSUlYNCwgNDQwTVgKIAlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKLQlBTUQgU0I5MDAKKwlBTUQgSHVkc29uLTIKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtMjMzLDkgKzIzMyw5IEBACiAJdW5zaWduZWQgc2hvcnQgc21iYV9pZHggPSAweGNkNjsKIAl1OCBzbWJhX2VuX2xvLCBzbWJhX2VuX2hpLCBpMmNjZmcsIGkyY2NmZ19vZmZzZXQgPSAweDEwLCBzbWJfZW4gPSAweDJjOwogCi0JLyogU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KKwkvKiBTQjgwMCBhbmQgbGF0ZXIgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nIGFkZHJlc3MgKi8KIAlpZiAoZm9yY2UgfHwgZm9yY2VfYWRkcikgewotCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNCODAwIFNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgorCQlkZXZfZXJyKCZQSUlYNF9kZXYtPmRldiwgIlNNQnVzIGRvZXMgbm90IHN1cHBvcnQgIgogCQkJImZvcmNpbmcgYWRkcmVzcyFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00ODAsNyArNDgwLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1NCWDAwX1NNQlVTKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU01CVVMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAogCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCmluZGV4IDZmZjZjMjAuLmZiYWI2ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwpAQCAtMTksNyArMTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtcG54Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNTQsNiArNTYsOSBAQAogCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkYXRhLT5taWYudGltZXI7CiAJaW50IGV4cGlyZXMgPSBJMkNfUE5YX1RJTUVPVVQgLyAoMTAwMCAvIEhaKTsKIAorCWlmIChleHBpcmVzIDw9IDEpCisJCWV4cGlyZXMgPSAyOworCiAJZGVsX3RpbWVyX3N5bmModGltZXIpOwogCiAJZGV2X2RiZygmYWRhcC0+ZGV2LCAiVGltZXIgYXJtZWQgYXQgJWx1IHBsdXMgJXUgamlmZmllcy5cbiIsCkBAIC02NDUsNyArNjUwLDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2lycToKLQlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBhbGdfZGF0YSk7CisJZnJlZV9pcnEoYWxnX2RhdGEtPmlycSwgaTJjX3BueC0+YWRhcHRlcik7CiBvdXRfY2xvY2s6CiAJaTJjX3BueC0+c2V0X2Nsb2NrX3N0b3AocGRldik7CiBvdXRfdW5tYXA6CkBAIC02NjQsNyArNjY5LDcgQEAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBpMmNfcG54LT5hZGFwdGVyOwogCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CiAKLQlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBhbGdfZGF0YSk7CisJZnJlZV9pcnEoYWxnX2RhdGEtPmlycSwgaTJjX3BueC0+YWRhcHRlcik7CiAJaTJjX2RlbF9hZGFwdGVyKGFkYXApOwogCWkyY19wbngtPnNldF9jbG9ja19zdG9wKHBkZXYpOwogCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL3RzbDI1NTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RzbDI1NTAuYwppbmRleCBhYTk2YmQyLi5hMDcwMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy90c2wyNTUwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvdHNsMjU1MC5jCkBAIC0yNTcsNiArMjU3LDcgQEAKIAogc3RhdGljIHNzaXplX3QgX190c2wyNTUwX3Nob3dfbHV4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgdHNsMjU1MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTggY2gwLCBjaDE7CiAJaW50IHJldDsKIApAQCAtMjc0LDYgKzI3NSw4IEBACiAJcmV0ID0gdHNsMjU1MF9jYWxjdWxhdGVfbHV4KGNoMCwgY2gxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKKwlpZiAoZGF0YS0+b3BlcmF0aW5nX21vZGUgPT0gMSkKKwkJcmV0ICo9IDU7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmV0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDhkODBmY2UuLjI5NjUwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtNzYyLDYgKzc2Miw3IEBACiB7CiAJaW50IHJlcyA9IDA7CiAJc3RydWN0IGkyY19hZGFwdGVyICpmb3VuZDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCAqbmV4dDsKIAogCS8qIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgYWRhcHRlciB3YXMgZXZlciBhZGRlZCAqLwogCW11dGV4X2xvY2soJmNvcmVfbG9jayk7CkBAIC03ODEsNiArNzgyLDE2IEBACiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAorCS8qIFJlbW92ZSBkZXZpY2VzIGluc3RhbnRpYXRlZCBmcm9tIHN5c2ZzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsaWVudCwgbmV4dCwgJnVzZXJzcGFjZV9kZXZpY2VzLCBkZXRlY3RlZCkgeworCQlpZiAoY2xpZW50LT5hZGFwdGVyID09IGFkYXApIHsKKwkJCWRldl9kYmcoJmFkYXAtPmRldiwgIlJlbW92aW5nICVzIGF0IDB4JXhcbiIsCisJCQkJY2xpZW50LT5uYW1lLCBjbGllbnQtPmFkZHIpOworCQkJbGlzdF9kZWwoJmNsaWVudC0+ZGV0ZWN0ZWQpOworCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJCX0KKwl9CisKIAkvKiBEZXRhY2ggYW55IGFjdGl2ZSBjbGllbnRzLiBUaGlzIGNhbid0IGZhaWwsIHRodXMgd2UgZG8gbm90CiAJICAgY2hlY2tpbmcgdGhlIHJldHVybmVkIHZhbHVlLiAqLwogCXJlcyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZCgmYWRhcC0+ZGV2LCBOVUxMLCBfX3VucmVnaXN0ZXJfY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggNjM5NmMzYS4uODM3MzIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgMCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCAwIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA2ODBlNTk3Li5jYTBjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19DTEVBUl9TSU1QTEVYIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0OF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCmluZGV4IDA2M2I5MzMuLmRkNjM5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCkBAIC02MCwxNSArNjAsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgQVRBL0lERSBjYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCi0jZGVmaW5lIElOVF9NT0RVTEVfUEFSTShuLCB2KSBzdGF0aWMgaW50IG4gPSB2OyBtb2R1bGVfcGFyYW0obiwgaW50LCAwKQotCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwotSU5UX01PRFVMRV9QQVJNKHBjX2RlYnVnLCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IGlkZV9pbmZvX3QgewpAQCAtOTgsNyArODksNyBAQAogewogICAgIGlkZV9pbmZvX3QgKmluZm87CiAKLSAgICBERUJVRygwLCAiaWRlX2F0dGFjaCgpXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJpZGVfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyBpZGUgZGV2aWNlICovCiAgICAgaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTIsNyArMTAzLDYgQEAKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMzsKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0xMzQsNyArMTI0LDcgQEAKICAgICBpZGVfaHdpZl90ICpod2lmID0gaW5mby0+aG9zdC0+cG9ydHNbMF07CiAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIsIGN0bF9hZGRyOwogCi0gICAgREVCVUcoMCwgImlkZV9kZXRhY2goMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlkZV9kZXRhY2goMHglcClcbiIsIGxpbmspOwogCiAgICAgZGF0YV9hZGRyID0gaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogICAgIGN0bF9hZGRyICA9IGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyOwpAQCAtMjE3LDkgKzIwNyw2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0cnVjdCBwY21jaWFfY29uZmlnX2NoZWNrIHsKIAl1bnNpZ25lZCBsb25nIGN0bF9iYXNlOwogCWludCBza2lwX3ZjYzsKQEAgLTI4MiwxMSArMjY5LDExIEBACiB7CiAgICAgaWRlX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgKnN0ayA9IE5VTEw7Ci0gICAgaW50IGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGlzX2ttZSA9IDA7CisgICAgaW50IHJldCA9IDAsIGlzX2ttZSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBpb19iYXNlLCBjdGxfYmFzZTsKICAgICBzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAKLSAgICBERUJVRygwLCAiaWRlX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiaWRlX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKICAgICBpc19rbWUgPSAoKGxpbmstPm1hbmZfaWQgPT0gTUFORklEX0tNRSkgJiYKIAkgICAgICAoKGxpbmstPmNhcmRfaWQgPT0gUFJPRElEX0tNRV9LWExDMDA1X0EpIHx8CkBAIC0zMDYsOCArMjkzLDEyIEBACiAgICAgaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKICAgICBjdGxfYmFzZSA9IHN0ay0+Y3RsX2Jhc2U7CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOworICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgLyogZGlzYWJsZSBkcml2ZSBpbnRlcnJ1cHRzIGR1cmluZyBJREUgcHJvYmUgKi8KICAgICBvdXRiKDB4MDIsIGN0bF9iYXNlKTsKQEAgLTM0Miw4ICszMzMsNiBAQAogICAgIHByaW50ayhLRVJOX05PVElDRSAiaWRlLWNzOiBpZGVfY29uZmlnIGZhaWxlZCBtZW1vcnkgYWxsb2NhdGlvblxuIik7CiAgICAgZ290byBmYWlsZWQ7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAga2ZyZWUoc3RrKTsKICAgICBpZGVfcmVsZWFzZShsaW5rKTsKQEAgLTM2Myw3ICszNTIsNyBAQAogICAgIGlkZV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGluZm8tPmhvc3Q7CiAKLSAgICBERUJVRygwLCAiaWRlX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlkZV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAogICAgIGlmIChpbmZvLT5uZGV2KQogCS8qIEZJWE1FOiBpZiB0aGlzIGZhaWxzIHdlIG5lZWQgdG8gcXVldWUgdGhlIGNsZWFudXAgc29tZWhvdwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCmluZGV4IGQzNDQwYjUuLjZlN2FlMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUyAmJgogCSAgICB0Zi0+ZmVhdHVyZSA9PSBTRVRGRUFUVVJFU19YRkVSICYmCiAJICAgIHRmLT5uc2VjdCA+PSBYRkVSX1NXX0RNQV8wKSB7Ci0JCXhmZXJfcmF0ZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBYRkVSX1VETUFfNik7CisJCXhmZXJfcmF0ZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCB0Zi0+bnNlY3QpOwogCQlpZiAoeGZlcl9yYXRlICE9IHRmLT5uc2VjdCkgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gYWJvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDYzYzUzZDYuLjRkNzZiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDQ2LDE1ICsxMDQ2LDYgQEAKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5pbml0X2RldikKIAkJCXBvcnRfb3BzLT5pbml0X2Rldihkcml2ZSk7CiAJfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCS8qCi0JCSAqIGRlZmF1bHQgdG8gUElPIE1vZGUgMCBiZWZvcmUgd2UgZmlndXJlIG91dAotCQkgKiB0aGUgbW9zdCBzdWl0ZWQgbW9kZSBmb3IgdGhlIGF0dGFjaGVkIGRldmljZQotCQkgKi8KLQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZXRfcGlvX21vZGUpCi0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgaW50IHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCmluZGV4IDk2YTI5NTkuLjdjNTQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0yNjAsMTUgKzI2MCwxMiBAQAogc3RhdGljIG5ldGRldl90eF90IGllZWU4MDIxNTRfZmFrZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc2tiLT5paWYgPSBkZXYtPmlmaW5kZXg7Ci0Jc2tiLT5kZXYgPSBkZXY7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCiAJLyogRklYTUU6IGRvIGhhcmR3YXJlIHdvcmsgaGVyZSAuLi4gKi8KIAorCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYyBiL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCmluZGV4IDcyYzYzZTUuLjM4ZGY4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCkBAIC0zMzcsMTYgKzMzNywxNiBAQAogCWRldi0+ZmYgPSBmZjsKIAlkZXYtPmZsdXNoID0gZmx1c2hfZWZmZWN0czsKIAlkZXYtPmV2ZW50ID0gaW5wdXRfZmZfZXZlbnQ7Ci0Jc2V0X2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKIAogCS8qIENvcHkgInRydWUiIGJpdHMgaW50byBmZiBkZXZpY2UgYml0bWFwICovCiAJZm9yIChpID0gMDsgaSA8PSBGRl9NQVg7IGkrKykKIAkJaWYgKHRlc3RfYml0KGksIGRldi0+ZmZiaXQpKQotCQkJc2V0X2JpdChpLCBmZi0+ZmZiaXQpOworCQkJX19zZXRfYml0KGksIGZmLT5mZmJpdCk7CiAKIAkvKiB3ZSBjYW4gZW11bGF0ZSBSVU1CTEUgd2l0aCBwZXJpb2RpYyBlZmZlY3RzICovCiAJaWYgKHRlc3RfYml0KEZGX1BFUklPRElDLCBmZi0+ZmZiaXQpKQotCQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CisJCV9fc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjIsMTIgKzM2MiwxNCBAQAogICovCiB2b2lkIGlucHV0X2ZmX2Rlc3Ryb3koc3RydWN0IGlucHV0X2RldiAqZGV2KQogewotCWNsZWFyX2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7Ci0JaWYgKGRldi0+ZmYpIHsKLQkJaWYgKGRldi0+ZmYtPmRlc3Ryb3kpCi0JCQlkZXYtPmZmLT5kZXN0cm95KGRldi0+ZmYpOwotCQlrZnJlZShkZXYtPmZmLT5wcml2YXRlKTsKLQkJa2ZyZWUoZGV2LT5mZik7CisJc3RydWN0IGZmX2RldmljZSAqZmYgPSBkZXYtPmZmOworCisJX19jbGVhcl9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOworCWlmIChmZikgeworCQlpZiAoZmYtPmRlc3Ryb3kpCisJCQlmZi0+ZGVzdHJveShmZik7CisJCWtmcmVlKGZmLT5wcml2YXRlKTsKKwkJa2ZyZWUoZmYpOwogCQlkZXYtPmZmID0gTlVMTDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCmluZGV4IDJkMTQxNWUuLmI0ODNiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCkBAIC02MSw3ICs2MSw2IEBACiAJc3RydWN0IG1sX2VmZmVjdF9zdGF0ZSBzdGF0ZXNbRkZfTUVNTEVTU19FRkZFQ1RTXTsKIAlpbnQgZ2FpbjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQlzcGlubG9ja190IHRpbWVyX2xvY2s7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCiAJaW50ICgqcGxheV9lZmZlY3QpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTM2OCwzOCArMzY3LDM4IEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gKHN0cnVjdCBpbnB1dF9kZXYgKil0aW1lcl9kYXRhOwogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGVidWcoInRpbWVyOiB1cGRhdGluZyBlZmZlY3RzIik7CiAKLQlzcGluX2xvY2soJm1sLT50aW1lcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJbWxfcGxheV9lZmZlY3RzKG1sKTsKLQlzcGluX3VubG9jaygmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogfQogCisvKgorICogU2V0cyByZXF1ZXN0ZWQgZ2FpbiBmb3IgRkYgZWZmZWN0cy4gQ2FsbGVkIHdpdGggZGV2LT5ldmVudF9sb2NrIGhlbGQuCisgKi8KIHN0YXRpYyB2b2lkIG1sX2ZmX3NldF9nYWluKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdTE2IGdhaW4pCiB7CiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7Ci0KIAltbC0+Z2FpbiA9IGdhaW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgRkZfTUVNTEVTU19FRkZFQ1RTOyBpKyspCiAJCV9fY2xlYXJfYml0KEZGX0VGRkVDVF9QTEFZSU5HLCAmbWwtPnN0YXRlc1tpXS5mbGFncyk7CiAKIAltbF9wbGF5X2VmZmVjdHMobWwpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKIH0KIAorLyoKKyAqIFN0YXJ0L3N0b3Agc3BlY2lmaWVkIEZGIGVmZmVjdC4gQ2FsbGVkIHdpdGggZGV2LT5ldmVudF9sb2NrIGhlbGQuCisgKi8KIHN0YXRpYyBpbnQgbWxfZmZfcGxheWJhY2soc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgZWZmZWN0X2lkLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOwogCXN0cnVjdCBtbF9lZmZlY3Rfc3RhdGUgKnN0YXRlID0gJm1sLT5zdGF0ZXNbZWZmZWN0X2lkXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1sLT50aW1lcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAodmFsdWUgPiAwKSB7CiAJCWRlYnVnKCJpbml0aWF0ZWQgcGxheSIpOwpAQCAtNDI1LDggKzQyNCw2IEBACiAJCW1sX3BsYXlfZWZmZWN0cyhtbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWwtPnRpbWVyX2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00MzYsNyArNDMzLDcgQEAKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJc3RydWN0IG1sX2VmZmVjdF9zdGF0ZSAqc3RhdGUgPSAmbWwtPnN0YXRlc1tlZmZlY3QtPmlkXTsKIAotCXNwaW5fbG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7CiAKIAlpZiAodGVzdF9iaXQoRkZfRUZGRUNUX1NUQVJURUQsICZzdGF0ZS0+ZmxhZ3MpKSB7CiAJCV9fY2xlYXJfYml0KEZGX0VGRkVDVF9QTEFZSU5HLCAmc3RhdGUtPmZsYWdzKTsKQEAgLTQ0OCw3ICs0NDUsNyBAQAogCQltbF9zY2hlZHVsZV90aW1lcihtbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4Miw3ICs0NzksNiBAQAogCW1sLT5wcml2YXRlID0gZGF0YTsKIAltbC0+cGxheV9lZmZlY3QgPSBwbGF5X2VmZmVjdDsKIAltbC0+Z2FpbiA9IDB4ZmZmZjsKLQlzcGluX2xvY2tfaW5pdCgmbWwtPnRpbWVyX2xvY2spOwogCXNldHVwX3RpbWVyKCZtbC0+dGltZXIsIG1sX2VmZmVjdF90aW1lciwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKIAogCXNldF9iaXQoRkZfR0FJTiwgZGV2LT5mZmJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggYzZmODhlYi4uMjI2NmVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtNzgyLDEwICs3ODIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAordW5pb24gaW5wdXRfc2VxX3N0YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBzaG9ydCBwb3M7CisJCWJvb2wgbXV0ZXhfYWNxdWlyZWQ7CisJfTsKKwl2b2lkICpwOworfTsKKwogc3RhdGljIHZvaWQgKmlucHV0X2RldmljZXNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCkpCi0JCXJldHVybiBOVUxMOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKwlpbnQgZXJyb3I7CisKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKIAogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfZGV2X2xpc3QsICpwb3MpOwogfQpAQCAtNzk1LDkgKzgxNCwxMiBAQAogCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9kZXZfbGlzdCwgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgaW5wdXRfZGV2aWNlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3N0YXRpYyB2b2lkIGlucHV0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKworCWlmIChzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQpCisJCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBjaGFyICpuYW1lLApAQCAtODYxLDcgKzg4Myw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2RldmljZXNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2RldmljZXNfc2VxX25leHQsCi0JLnN0b3AJPSBpbnB1dF9kZXZpY2VzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9kZXZpY2VzX3NlcV9zaG93LAogfTsKIApAQCAtODgxLDQwICs5MDMsNDkgQEAKIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOwogCi0Jc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqcG9zOworCS8qIFdlIG5lZWQgdG8gZml0IGludG8gc2VxLT5wcml2YXRlIHBvaW50ZXIgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSkgIT0gc2l6ZW9mKHNlcS0+cHJpdmF0ZSkpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSB0cnVlOworCXN0YXRlLT5wb3MgPSAqcG9zOworCiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZpbnB1dF9oYW5kbGVyX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKCpwb3MgKyAxKTsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwotfQorCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CisJc3RhdGUtPnBvcyA9ICpwb3MgKyAxOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyBpbnQgaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIgPSBjb250YWluZXJfb2Yodiwgc3RydWN0IGlucHV0X2hhbmRsZXIsIG5vZGUpOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKIAotCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSVsZCBOYW1lPSVzIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpc2VxLT5wcml2YXRlLCBoYW5kbGVyLT5uYW1lKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0ldSBOYW1lPSVzIiwgc3RhdGUtPnBvcywgaGFuZGxlci0+bmFtZSk7CiAJaWYgKGhhbmRsZXItPmZvcHMpCiAJCXNlcV9wcmludGYoc2VxLCAiIE1pbm9yPSVkIiwgaGFuZGxlci0+bWlub3IpOwogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9oYW5kbGVyc19zZXFfb3BzID0gewogCS5zdGFydAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdGFydCwKIAkubmV4dAk9IGlucHV0X2hhbmRsZXJzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0b3AsCisJLnN0b3AJPSBpbnB1dF9zZXFfc3RvcCwKIAkuc2hvdwk9IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93LAogfTsKIApAQCAtMTI2MSwxNyArMTI5MiwyNCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIElOUFVUX0RPX1RPR0dMRShkZXYsIHR5cGUsIGJpdHMsIG9uKQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaW50IGk7CQkJCQkJXAotCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IHR5cGUjI19NQVg7IGkrKykgewkJXAotCQkJaWYgKCF0ZXN0X2JpdChpLCBkZXYtPmJpdHMjI2JpdCkgfHwJXAotCQkJICAgICF0ZXN0X2JpdChpLCBkZXYtPmJpdHMpKQkJXAotCQkJCWNvbnRpbnVlOwkJCVwKLQkJCWRldi0+ZXZlbnQoZGV2LCBFVl8jI3R5cGUsIGksIG9uKTsJXAotCQl9CQkJCQkJXAorI2RlZmluZSBJTlBVVF9ET19UT0dHTEUoZGV2LCB0eXBlLCBiaXRzLCBvbikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaW50IGk7CQkJCQkJCVwKKwkJYm9vbCBhY3RpdmU7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgdHlwZSMjX01BWDsgaSsrKSB7CQkJXAorCQkJaWYgKCF0ZXN0X2JpdChpLCBkZXYtPmJpdHMjI2JpdCkpCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWFjdGl2ZSA9IHRlc3RfYml0KGksIGRldi0+Yml0cyk7CQlcCisJCQlpZiAoIWFjdGl2ZSAmJiAhb24pCQkJCVwKKwkJCQljb250aW51ZTsJCQkJXAorCQkJCQkJCQkJXAorCQkJZGV2LT5ldmVudChkZXYsIEVWXyMjdHlwZSwgaSwgb24gPyBhY3RpdmUgOiAwKTsJXAorCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDcwOWUxNS4uMjhlNjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMjMzLDYgKzIzMyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICgqYXRrYmRfcGxhdGZvcm1fZml4dXApKHN0cnVjdCBhdGtiZCAqLCBjb25zdCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkICphdGtiZF9wbGF0Zm9ybV9maXh1cF9kYXRhOworc3RhdGljIHVuc2lnbmVkIGludCAoKmF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgdW5zaWduZWQgaW50KTsKIAogc3RhdGljIHNzaXplX3QgYXRrYmRfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwKIAkJCQlzc2l6ZV90ICgqaGFuZGxlcikoc3RydWN0IGF0a2JkICosIGNoYXIgKikpOwpAQCAtMzkzLDYgKzM5NCw5IEBACiAKIAlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1JBVywgY29kZSk7CiAKKwlpZiAoYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXApCisJCWNvZGUgPSBhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cChhdGtiZCwgY29kZSk7CisKIAlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQpIHsKIAogCQlpZiAoYXRrYmQtPmVtdWwgfHwgYXRrYmRfbmVlZF94bGF0ZShhdGtiZC0+eGxfYml0LCBjb2RlKSkgewpAQCAtNTc0LDExICs1NzgsMjIgQEAKIAogCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwlpZiAoIWF0a2JkLT5lbmFibGVkKSB7CisJCS8qCisJCSAqIFNlcmlvIHBvcnRzIGFyZSByZXN1bWVkIGFzeW5jaHJvbm91c2x5IHNvIHdoaWxlIGRyaXZlciBjb3JlCisJCSAqIHRoaW5rcyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGZ1bGx5IG9wZXJhdGlvbmFsIGluIHJlYWxpdHkKKwkJICogaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtlZXAKKwkJICogcmVzY2hlZHVsaW5nIHRpbGwgcmVjb25uZWN0IGNvbXBsZXRlcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXRrYmQtPmV2ZW50X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfSBlbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCX0KIAogCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KQEAgLTc3MCw2ICs3ODUsMzAgQEAKIAlyZXR1cm4gMzsKIH0KIAorc3RhdGljIGludCBhdGtiZF9yZXNldF9zdGF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworICAgICAgICBzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzFdOworCisvKgorICogU2V0IHRoZSBMRURzIHRvIGEgcHJlZGVmaW5lZCBzdGF0ZSAoYWxsIG9mZikuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBTZXQgYXV0b3JlcGVhdCB0byBmYXN0ZXN0IHBvc3NpYmxlLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGtiZF9hY3RpdmF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OwpAQCAtODUyLDI5ICs4OTEsNiBAQAogfTsKIAogLyoKLSAqIEludmVudGVjIHN5c3RlbSB3aXRoIGJyb2tlbiBrZXkgcmVsZWFzZSBvbiB2b2x1bWUga2V5cwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBQYXZpbGlvbiBaVjYxMDAgbGFwdG9wIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSByZWxlYXNlCi0gKiBmb3IgaXRzIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfenY2MTAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCAoQ29tcGFxKSBQcmVzYXJpbyBSNDAwMCBSNDEwMCBSNDIwMCB0aGF0IGRvbid0IGdlbmVyYXRlCi0gKiByZWxlYXNlIGZvciB0aGVpciB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3I0MDAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCiAgKiBTYW1zdW5nIE5DMTAsTkMyMCB3aXRoIEZuK0Y/IGtleSByZWxlYXNlIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfc2Ftc3VuZ19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC04ODIsMTQgKzg5OCw2IEBACiB9OwogCiAvKgotICogVGhlIHZvbHVtZSB1cCBhbmQgdm9sdW1lIGRvd24gc3BlY2lhbCBrZXlzIG9uIGEgRnVqaXRzdSBBbWlsbyBQQSAxNTEwIGxhcHRvcAotICogZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UgZXZlbnRzIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhiMCwgMHhhZSwgLTFVCi19OwotCi0vKgogICogQW1pbG8gUGkgMzUyNSBrZXkgcmVsZWFzZSBmb3IgRm4rVm9sdW1lIGtleXMgbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19waTM1MjVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtOTExLDYgKzkxOSwzMCBAQAogfTsKIAogLyoKKyAqIE1hbnkgbm90ZWJvb2tzIGRvbid0IHNlbmQga2V5IHJlbGVhc2UgZXZlbnQgZm9yIHZvbHVtZSB1cC9kb3duCisgKiBrZXlzLCB3aXRoIGtleSBsaXN0IGJlbG93IGNvbW1vbiBhbW9uZyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwkweGFlLCAweGIwLCAtMVUKK307CisKKy8qCisgKiBPUU8gMDErIG11bHRpbWVkaWEga2V5cyAoNjQtLTY2KSBnZW5lcmF0ZSBlMCA2eCB1cG9uIHJlbGVhc2Ugd2hlcmVhcworICogdGhleSBzaG91bGQgYmUgZ2VuZXJhdGluZyBlNC1lNiAoMHg4MCB8IGNvZGUpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX29xb18wMXBsdXNfc2NhbmNvZGVfZml4dXAoc3RydWN0IGF0a2JkICphdGtiZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQgJiYgYXRrYmQtPmVtdWwgPT0gMSAmJgorCSAgICAoY29kZSA9PSAweDY0IHx8IGNvZGUgPT0gMHg2NSB8fCBjb2RlID09IDB4NjYpKSB7CisJCWF0a2JkLT5lbXVsID0gMDsKKwkJY29kZSB8PSAweDgwOworCX0KKworCXJldHVybiBjb2RlOworfQorCisvKgogICogYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoKSBpbml0aWFsaXplcyBrZXlib2FyZCdzIGtleWNvZGUgdGFibGUKICAqIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgc2NhbmNvZGUgc2V0CiAgKi8KQEAgLTEwODcsNiArMTExOSw3IEBACiAJCX0KIAogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmRfc2V0LCBhdGtiZF9leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCiAJfSBlbHNlIHsKQEAgLTExNDEsNiArMTE3NCwxOCBAQAogCQkJcmV0dXJuIC0xOwogCiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKKworCQkvKgorCQkgKiBSZXN0b3JlIExFRCBzdGF0ZSBhbmQgcmVwZWF0IHJhdGUuIFdoaWxlIGlucHV0IGNvcmUKKwkJICogd2lsbCBkbyB0aGlzIGZvciB1cyBhdCByZXN1bWUgdGltZSByZWNvbm5lY3QgbWF5IGhhcHBlbgorCQkgKiBiZWNhdXNlIHVzZXIgcmVxdWVzdGVkIGl0IHZpYSBzeXNmcyBvciBzaW1wbHkgYmVjYXVzZQorCQkgKiBrZXlib2FyZCB3YXMgdW5wbHVnZ2VkIGFuZCBwbHVnZ2VkIGluIGFnYWluIHNvIHdlIG5lZWQKKwkJICogdG8gZG8gaXQgb3Vyc2VsdmVzIGhlcmUuCisJCSAqLworCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJCWlmICghYXRrYmQtPnNvZnRyZXBlYXQpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCiAJfQogCiAJYXRrYmRfZW5hYmxlKGF0a2JkKTsKQEAgLTEyNjcsNiArMTMxMiw3IEBACiAKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZC0+c2V0LCB2YWx1ZSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTM4OCw2ICsxNDM0LDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIHZhbHVlLCBhdGtiZC0+ZXh0cmEpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKQEAgLTE1MTMsNiArMTU2MCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLApAQCAtMTU0OCw3ICsxNjAyLDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE2MTEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE2MjAsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE2MjksNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE2MzgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2NzQsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApAQCAtMTY0OSw2ICsxNzAzLDE1IEBACiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAogCQkuZHJpdmVyX2RhdGEgPSBhdGtkYl9zb2x0ZWNoX3RhMTJfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAorCXsKKwkJLmlkZW50ID0gIk9RTyBNb2RlbCAwMSsiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk9RTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBUTyIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cCwKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cCwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTg4YWZmMy4uNzdkMTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAorCQkJCSAgICBJUlFGX1NIQVJFRCB8CiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyIsCiAJCQkJICAgIGJkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggMDJmNGY4Zi4uYTliYjI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTIyNyw2ICsyMjcsNyBAQAogCWRlcGVuZHMgb24gWDg2ICYmIFBOUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCisJc2VsZWN0IExFRFNfVFJJR0dFUlMKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJUiByZW1vdGUgZnVuY3Rpb25hbGl0eSBmb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKaW5kZXggMjE2YTU1OS4uZWE4MjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAogLyogUmVhZCB0aGUgaTgwNDIgZmFzdCBoYW5kc2hha2UgdGltZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGhwX3NkY19ydGNfcmVhZF9maHMoc3RydWN0IHRpbWV2YWwgKnJlcykgewotCXVpbnQ2NF90IHJhdzsKKwlpbnQ2NF90IHJhdzsKIAl1bnNpZ25lZCBpbnQgdGVubXM7CiAKIAlyYXcgPSBocF9zZGNfcnRjX3JlYWRfaTgwNDJ0aW1lcihIUF9TRENfQ01EX0xPQURfRkhTLCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1ZTYzMDg2Li44MjgxMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTcyIiksCiAJCX0sCi0JCS5jYWxsYmFjayA9IGxpZmVib29rX3NldF9zZXJpb19waHlzLAotCQkuZHJpdmVyX2RhdGEgPSAiaXNhMDA2MC9zZXJpbzMiLAorCQkuY2FsbGJhY2sgPSBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8sCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA2OTBhZWQ5Li4wN2M1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKKwlib29sIHN5bmFwdGljc19oYXJkd2FyZSA9IGZhbHNlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTE2NzMsNyArMTY3Myw3IEBACiB7CiAJaW50IHR5cGUgPSAqKCh1bnNpZ25lZCBpbnQgKilrcC0+YXJnKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwc21vdXNlX3Byb3RvY29sX2J5X3R5cGUodHlwZSktPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzIiwgcHNtb3VzZV9wcm90b2NvbF9ieV90eXBlKHR5cGUpLT5uYW1lKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcHNtb3VzZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCmluZGV4IGEzOWJjNGUuLjJiY2YxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaApAQCAtMzI3LDYgKzMyNywxNyBAQAogCQl9LAogCX0sCiAJeworCQkvKgorCQkgKiBSZXNldCBhbmQgR0VUIElEIGNvbW1hbmRzIGlzc3VlZCB2aWEgS0JEIHBvcnQgYXJlCisJCSAqIHNvbWV0aW1lcyBiZWluZyBkZWxpdmVyZWQgdG8gQVVYMy4KKwkJICovCisJCS5pZGVudCA9ICJTb255IFZhaW8gRlotMjQwRSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWR04tRloyNDBFIiksCisJCX0sCisJfSwKKwl7CiAJCS5pZGVudCA9ICJBbW9pIE02MzYvQTczNyIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQW1vaSBFbGVjdHJvbmljcyBDTy4sTFRELiIpLApAQCAtNDM2LDYgKzQ0NywyNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTAiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgVm9zdHJvIDEzMjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWb3N0cm8gMTMyMCIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBWb3N0cm8gMTUyMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZvc3RybyAxNTIwIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIFZvc3RybyAxNzIwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVm9zdHJvIDE3MjAiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApAQCAtNjYxLDcgKzY5Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9wbnBfaW5pdCh2b2lkKQogewogCWNoYXIga2JkX2lycV9zdHJbNF0gPSB7IDAgfSwgYXV4X2lycV9zdHJbNF0gPSB7IDAgfTsKLQlpbnQgcG5wX2RhdGFfYnVzdGVkID0gZmFsc2U7CisJYm9vbCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKIAlpbnQgZXJyOwogCiAjaWZkZWYgQ09ORklHX1g4NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IGEzMTU3ODEuLjFkZjAyZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTgzNiwxNyArODM2LDMyIEBACiBzdGF0aWMgaW50IGk4MDQyX2NvbnRyb2xsZXJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG4gPSAwOworCXVuc2lnbmVkIGNoYXIgY3RyWzJdOwogCiAvKgotICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JhbCBvbiB1bmxvYWQgLyByZWJvb3QuCisgKiBTYXZlIHRoZSBDVFIgZm9yIHJlc3RvcmUgb24gdW5sb2FkIC8gcmVib290LgogICovCiAKLQlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1JDVFIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaTgwNDIuYzogQ2FuJ3QgcmVhZCBDVFIgd2hpbGUgaW5pdGlhbGl6aW5nIGk4MDQyLlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlkbyB7CisJCWlmIChuID49IDEwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiaTgwNDIuYzogVW5hYmxlIHRvIGdldCBzdGFibGUgQ1RSIHJlYWQuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAKLQlpODA0Ml9pbml0aWFsX2N0ciA9IGk4MDQyX2N0cjsKKwkJaWYgKG4gIT0gMCkKKwkJCXVkZWxheSg1MCk7CisKKwkJaWYgKGk4MDQyX2NvbW1hbmQoJmN0cltuKysgJSAyXSwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCX0gd2hpbGUgKG4gPCAyIHx8IGN0clswXSAhPSBjdHJbMV0pOworCisJaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHIgPSBjdHJbMF07CiAKIC8qCiAgKiBEaXNhYmxlIHRoZSBrZXlib2FyZCBpbnRlcmZhY2UgYW5kIGludGVycnVwdC4KQEAgLTg5NSw2ICs5MTAsMTIgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCisvKgorICogRmx1c2ggd2hhdGV2ZXIgYWNjdW11bGF0ZWQgd2hpbGUgd2Ugd2VyZSBkaXNhYmxpbmcga2V5Ym9hcmQgcG9ydC4KKyAqLworCisJaTgwNDJfZmx1c2goKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05MTQsNyArOTM1LDcgQEAKIAlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0tCRERJUyB8IEk4MDQyX0NUUl9BVVhESVM7CiAJaTgwNDJfY3RyICY9IH4oSTgwNDJfQ1RSX0tCRElOVCB8IEk4MDQyX0NUUl9BVVhJTlQpOwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2luaXRpYWxfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQorCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IENhbid0IHdyaXRlIENUUiB3aGlsZSByZXNldHRpbmcuXG4iKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGM3MjU2NTUuLjVhNmFlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMTExLDggKzExMSw2IEBACiAgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogCi0gICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLQogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKQEAgLTE5OCw3ICsxOTYsNiBAQAogCSAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKGkgIT0gMCkgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkgICAgLyogdW5kbyAqLwogCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJICAgIGJyZWFrOwpAQCAtMjA5LDcgKzIwNiw2IEBACiAJICAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAlpZiAoaSAhPSAwKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCSAgICBicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWFpbnRpZGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCmluZGV4IDIzOTYwY2IuLjQxYzI2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWludGlkaS5jCkBAIC05NTksOCArOTU5LDkgQEAKIAl9CiAJaWYgKCFzdHJuY21wKCJTdGF0ZVxcTGF5ZXIyIE5vMSIsIHBhdGgsIHBWYXItPnBhdGhfbGVuZ3RoKSkgewogCQljaGFyKiB0bXAgPSAmcExpYi0+bGluZXNbMF0ucEludGVyZmFjZS0+TGF5ZXIyWzBdOwotICAgIGR3b3JkIGwyX3N0YXRlOwotICAgIGRpdmFfc3RyYWNlX3JlYWRfdWludCAocFZhciwgJmwyX3N0YXRlKTsKKwkJZHdvcmQgbDJfc3RhdGU7CisJCWlmIChkaXZhX3N0cmFjZV9yZWFkX3VpbnQocFZhciwgJmwyX3N0YXRlKSkKKwkJCXJldHVybiAtMTsKIAogCQlzd2l0Y2ggKGwyX3N0YXRlKSB7CiAJCQljYXNlIDA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCAyN2Q1ZGQ2Li5hZTg5ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTI2OTIsNyArMjY5Miw3IEBACiAgICAgICAgICAgaWYgKCEoZmF4X2NvbnRyb2xfYml0cyAmIFQzMF9DT05UUk9MX0JJVF9NT1JFX0RPQ1VNRU5UUykKICAgICAgICAgICAgfHwgKGZheF9mZWF0dXJlX2JpdHMgJiBUMzBfRkVBVFVSRV9CSVRfTU9SRV9ET0NVTUVOVFMpKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGxlbiA9IChieXRlKSgmKCgoVDMwX0lORk8gKikgMCktPnVuaXZlcnNhbF82KSk7CisgICAgICAgICAgICBsZW4gPSBvZmZzZXRvZihUMzBfSU5GTywgdW5pdmVyc2FsXzYpOwogICAgICAgICAgICAgZmF4X2luZm9fY2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAobmNwaS0+bGVuZ3RoID49IDQpCiAgICAgICAgICAgICB7CkBAIC0yNzU0LDcgKzI3NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdzsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICgoVDMwX0lORk8gICAqKShwbGNpLT5mYXhfY29ubmVjdF9pbmZvX2J1ZmZlcikpLT5zdGF0aW9uX2lkW2ldID0gZmF4X3Bhcm1zWzRdLmluZm9bMStpXTsKICAgICAgICAgICAgICAgICAgICAgKChUMzBfSU5GTyAgICopKHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyKSktPmhlYWRfbGluZV9sZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBsZW4gPSAoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgICAgICAgICAgICAgICAgIHcgPSBmYXhfcGFybXNbNV0ubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBpZiAodyA+IDIwKQogICAgICAgICAgICAgICAgICAgICAgIHcgPSAyMDsKQEAgLTI3ODgsNyArMjc4OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBsZW4gPSAoYnl0ZSkoJigoKFQzMF9JTkZPICopIDApLT51bml2ZXJzYWxfNikpOworICAgICAgICAgICAgICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHVuaXZlcnNhbF82KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmF4X2luZm9fY2hhbmdlID0gdHJ1ZTsKIApAQCAtMjg5Miw3ICsyODkyLDcgQEAKICAgICAmJiAocGxjaS0+bnNmX2NvbnRyb2xfYml0cyAmIFQzMF9OU0ZfQ09OVFJPTF9CSVRfRU5BQkxFX05TRikKICAgICAmJiAocGxjaS0+bnNmX2NvbnRyb2xfYml0cyAmIFQzMF9OU0ZfQ09OVFJPTF9CSVRfTkVHT1RJQVRFX1JFU1ApKQogICAgewotICAgICAgICAgICAgbGVuID0gKChieXRlKSgoKFQzMF9JTkZPICopIDApLT5zdGF0aW9uX2lkICsgMjApKTsKKyAgICAgICAgICAgIGxlbiA9IG9mZnNldG9mKFQzMF9JTkZPLCBzdGF0aW9uX2lkKSArIDIwOwogICAgICAgICAgICAgaWYgKHBsY2ktPmZheF9jb25uZWN0X2luZm9fbGVuZ3RoIDwgbGVuKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAoKFQzMF9JTkZPICopKHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyKSktPnN0YXRpb25faWRfbGVuID0gMDsKQEAgLTM4MDIsNyArMzgwMiw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgbmNwaSA9ICZtX3Bhcm1zWzFdOwotICAgIGxlbiA9ICgoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKSk7CisgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgaWYgKHBsY2ktPmZheF9jb25uZWN0X2luZm9fbGVuZ3RoIDwgbGVuKQogICAgIHsKICAgICAgICgoVDMwX0lORk8gKikocGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19idWZmZXIpKS0+c3RhdGlvbl9pZF9sZW4gPSAwOwpAQCAtNjg0NCw3ICs2ODQ0LDcgQEAKICAgICAgICAgaWYgKChwbGNpLT5yZXF1ZXN0ZWRfb3B0aW9uc19jb25uIHwgcGxjaS0+cmVxdWVzdGVkX29wdGlvbnMgfCBhLT5yZXF1ZXN0ZWRfb3B0aW9uc190YWJsZVtwbGNpLT5hcHBsLT5JZC0xXSkKICAgICAgICAgICAmICgoMUwgPDwgUFJJVkFURV9GQVhfU1VCX1NFUF9QV0QpIHwgKDFMIDw8IFBSSVZBVEVfRkFYX05PTlNUQU5EQVJEKSkpCiAgICAgICAgIHsKLSAgICAgICAgICBpID0gKCh3b3JkKSgoKFQzMF9JTkZPICopIDApLT5zdGF0aW9uX2lkICsgMjApKSArICgoVDMwX0lORk8gICAqKXBsY2ktPk5MLlJCdWZmZXItPlApLT5oZWFkX2xpbmVfbGVuOworICAgICAgICAgIGkgPSBvZmZzZXRvZihUMzBfSU5GTywgc3RhdGlvbl9pZCkgKyAyMCArICgoVDMwX0lORk8gICAqKXBsY2ktPk5MLlJCdWZmZXItPlApLT5oZWFkX2xpbmVfbGVuOwogICAgICAgICAgIHdoaWxlIChpIDwgcGxjaS0+TkwuUkJ1ZmZlci0+bGVuZ3RoKQogICAgICAgICAgICAgcGxjaS0+bmNwaV9idWZmZXJbKytsZW5dID0gcGxjaS0+TkwuUkJ1ZmZlci0+UFtpKytdOwogICAgICAgICB9CkBAIC03MjM2LDcgKzcyMzYsNyBAQAogICAgIHsKICAgICAgIHBsY2ktPlJEYXRhWzFdLlAgPSBwbGNpLT5SRGF0YVswXS5QOwogICAgICAgcGxjaS0+UkRhdGFbMV0uUExlbmd0aCA9IHBsY2ktPlJEYXRhWzBdLlBMZW5ndGg7Ci0gICAgICBwbGNpLT5SRGF0YVswXS5QID0gdjEyMF9oZWFkZXJfYnVmZmVyICsgKC0oKGludCkgdjEyMF9oZWFkZXJfYnVmZmVyKSAmIDMpOworICAgICAgcGxjaS0+UkRhdGFbMF0uUCA9IHYxMjBfaGVhZGVyX2J1ZmZlciArICgtKCh1bnNpZ25lZCBsb25nKXYxMjBfaGVhZGVyX2J1ZmZlcikgJiAzKTsKICAgICAgIGlmICgocGxjaS0+TkwuUkJ1ZmZlci0+UFswXSAmIFYxMjBfSEVBREVSX0VYVEVORF9CSVQpIHx8IChwbGNpLT5OTC5STGVuZ3RoID09IDEpKQogICAgICAgICBwbGNpLT5SRGF0YVswXS5QTGVuZ3RoID0gMTsKICAgICAgIGVsc2UKQEAgLTg0NzMsNyArODQ3Myw3IEBACiAgICAgICAgICAgICBmYXhfY29udHJvbF9iaXRzIHw9IFQzMF9DT05UUk9MX0JJVF9BQ0NFUFRfU0VMX1BPTExJTkc7CiAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gbmxjWzBdOwotICAgICAgICAgIHBvcyA9ICgoYnl0ZSkoKChUMzBfSU5GTyAqKSAwKS0+c3RhdGlvbl9pZCArIDIwKSk7CisgICAgICAgICAgcG9zID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICBpZiAocG9zIDwgcGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19sZW5ndGgpCiAgICB7CiAgICAgIGZvciAoaSA9IDEgKyBwbGNpLT5mYXhfY29ubmVjdF9pbmZvX2J1ZmZlcltwb3NdOyBpICE9IDA7IGktLSkKQEAgLTg1MjUsNyArODUyNSw3IEBACiAgICAgICB9CiAKICAgICAgIFBVVF9XT1JEKCYoKChUMzBfSU5GTyAqKSZubGNbMV0pLT5jb250cm9sX2JpdHNfbG93KSwgZmF4X2NvbnRyb2xfYml0cyk7Ci0gICAgICBsZW4gPSAoKGJ5dGUpKCgoVDMwX0lORk8gKikgMCktPnN0YXRpb25faWQgKyAyMCkpOworICAgICAgbGVuID0gb2Zmc2V0b2YoVDMwX0lORk8sIHN0YXRpb25faWQpICsgMjA7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgICAgIHBsY2ktPmZheF9jb25uZWN0X2luZm9fYnVmZmVyW2ldID0gbmxjWzEraV07CiAgICAgICAoKFQzMF9JTkZPICAgKikgcGxjaS0+ZmF4X2Nvbm5lY3RfaW5mb19idWZmZXIpLT5oZWFkX2xpbmVfbGVuID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKaW5kZXggZmFlZDc5NC4uYTY2MjRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKQEAgLTU0ODEsNyArNTQ4MSw3IEBACiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgcmVnaXN0ZXJpbmcgZW1iZWRkZWQgZHJpdmVyOiAiCiAJCQkJIiV4XG4iLCBlcnIpOwotCQkJcmV0dXJuIC1lcnI7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAJCUhGQ19jbnQrKzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJWQgZGV2aWNlcyByZWdpc3RlcmVkXG4iLCBIRkNfY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCmluZGV4IGJmNTI2YTcuLmQ2ZmRmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYwpAQCAtNTk0LDYgKzU5NCw3IEBACiAJCQkJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9XQVJOKQogCQkJCQlkZWJ1Z2wxKGNzLCAiQW1kNzkzMDogbDFodzogbDJsMSB0eF9za2IgZXhpc3QgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIik7CiAJCQkJc2tiX3F1ZXVlX3RhaWwoJmNzLT5zcSwgc2tiKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGNzLT5kZWJ1ZyAmIERFQl9ETE9HX0hFWCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKaW5kZXggMjM1NjBjOC4uZjliZGZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKQEAgLTMwLDIyICszMCw2IEBACiBNT0RVTEVfQVVUSE9SKCJDYXJzdGVuIFBhZXRoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qCi0gICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7Ci1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0iYXZtYTFfY3MuYyAxLjAwIDE5OTgvMDEvMjMgMTA6MDA6MDAgKENhcnN0ZW4gUGFldGgpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTExOSw3ICsxMDMsNyBAQAogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKLSAgICBERUJVRygwLCAiYXZtYTFjc19hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmcF9kZXYtPmRldiwgImF2bWExY3NfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KICAgICBsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwpAQCAtMTM5LDggKzEyMyw2IEBACiAgICAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogCi0gICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLQogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKQEAgLTE2MSw3ICsxNDMsNyBAQAogCiBzdGF0aWMgdm9pZCBhdm1hMWNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAiYXZtYTFjc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImF2bWExY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAlhdm1hMWNzX3JlbGVhc2UobGluayk7CiAJa2ZyZWUobGluay0+cHJpdik7CiB9IC8qIGF2bWExY3NfZGV0YWNoICovCkBAIC0yMDMsNyArMTg1LDcgQEAKIAogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICBERUJVRygwLCAiYXZtYTFjc19jb25maWcoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImF2bWExY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAogICAgIGRldm5hbWVbMF0gPSAwOwogICAgIGlmIChsaW5rLT5wcm9kX2lkWzFdKQpAQCAtMjE4LDcgKzIwMCw2IEBACiAJICovCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKIAlpZiAoaSAhPSAwKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgICAvKiB1bmRvICovCiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CkBAIC0yMjksNyArMjEwLDYgQEAKIAkgKi8KIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gMCkgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CiAJfQpAQCAtMjgxLDcgKzI2MSw3IEBACiB7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAiYXZtYTFjc19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJhdm1hMWNzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCiAJLyogbm93IHVucmVnaXN0ZXIgZnVuY3Rpb24gd2l0aCBoaXNheCAqLwogCUhpU2F4X2Nsb3NlY2FyZChsb2NhbC0+bm9kZS5taW5vcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwppbmRleCAwMThiZDI5Li4wYjBjMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKQEAgLTM4Miw3ICszODIsNyBAQAogewogCWludCB0byA9IDUwOwogCi0Jd2hpbGUgKCghKE1lbVJlYWRIU0NYKGNzLCBoc2N4LCBIU0NYX1NUQVIpICYgMHg0NCkgPT0gMHg0MCkgJiYgdG8pIHsKKwl3aGlsZSAoKChNZW1SZWFkSFNDWChjcywgaHNjeCwgSFNDWF9TVEFSKSAmIDB4NDQpICE9IDB4NDApICYmIHRvKSB7CiAJCXVkZWxheSgxKTsKIAkJdG8tLTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCBmNGQwZmUyLi5hMmY3MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTU3LDIzICs1Nyw2IEBACiBNT0RVTEVfQVVUSE9SKCJLbGF1cyBMaWNodGVud2FsZGVyIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLS8qCi0gICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwotCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLSJlbHNhX2NzLmMgJFJldmlzaW9uOiAxLjIuMi40ICQgJERhdGU6IDIwMDQvMDEvMjUgMTU6MDc6MDYgJCAoSy5MaWNodGVud2FsZGVyKSI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xNDIsNyArMTI1LDcgQEAKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsOwogCi0gICAgREVCVUcoMCwgImVsc2FfY3NfYXR0YWNoKClcbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImVsc2FfY3NfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KICAgICBsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwpAQCAtMTU1LDcgKzEzOCw2IEBACiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRHxJUlFfU0hBUkVfSUQ7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAgICAgLyoKQEAgLTE4OCw3ICsxNzAsNyBAQAogewogCWxvY2FsX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAiZWxzYV9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImVsc2FfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAogCWluZm8tPmJ1c3kgPSAxOwogCWVsc2FfY3NfcmVsZWFzZShsaW5rKTsKQEAgLTIzMSwzMCArMjEzLDI1IEBACiBzdGF0aWMgaW50IGVsc2FfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGxvY2FsX2luZm9fdCAqZGV2OwotICAgIGludCBpLCBsYXN0X2ZuOworICAgIGludCBpOwogICAgIElzZG5DYXJkX3QgaWNhcmQ7CiAKLSAgICBERUJVRygwLCAiZWxzYV9jb25maWcoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImVsc2FfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBlbHNhX2NzX2NvbmZpZ2NoZWNrLCBOVUxMKTsKLSAgICBpZiAoaSAhPSAwKSB7Ci0JbGFzdF9mbiA9IFJlcXVlc3RJTzsKLQlnb3RvIGNzX2ZhaWxlZDsKLSAgICB9CisgICAgaWYgKGkgIT0gMCkKKwlnb3RvIGZhaWxlZDsKIAogICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAgICAgaWYgKGkgIT0gMCkgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwotCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwotICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKKwlnb3RvIGZhaWxlZDsKICAgICB9CiAKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKGkgIT0gMCkgewotICAgICAgbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwotICAgICAgZ290byBjc19mYWlsZWQ7Ci0gICAgfQorICAgIGlmIChpICE9IDApCisJZ290byBmYWlsZWQ7CiAKICAgICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgc2hvdWxkIGJlCiAgICAgICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LiAqLy8qICAqLwpAQCAtMjkwLDggKzI2Nyw3IEBACiAgICAgCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+Y2FyZG5yID0gaTsKIAogICAgIHJldHVybiAwOwotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGkpOworZmFpbGVkOgogICAgIGVsc2FfY3NfcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogZWxzYV9jc19jb25maWcgKi8KQEAgLTMwOCw3ICsyODQsNyBAQAogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgImVsc2FfY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZWxzYV9jc19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAogICAgIGlmIChsb2NhbCkgewogICAgIAlpZiAobG9jYWwtPmNhcmRuciA+PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCmluZGV4IGYxODFkYjQuLjE2NTdiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCkBAIC00NzcsNjIgKzQ3Nyw2MiBAQAogbW9kZW1fc2V0X2luaXQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKSB7CiAJaW50IHRpbWVvdXQ7CiAKLSNkZWZpbmUgUkNWX0RFTEFZIDIwMDAwCQorI2RlZmluZSBSQ1ZfREVMQVkgMjAKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzEsIHN0cmxlbihNSW5pdF8xKSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSk7CisJbWRlbGF5KFJDVl9ERUxBWSk7CiAJbW9kZW1fd3JpdGVfY21kKGNzLCBNSW5pdF8yLCBzdHJsZW4oTUluaXRfMikpOwogCXRpbWVvdXQgPSAxMDAwOwogCXdoaWxlKHRpbWVvdXQtLSAmJiBjcy0+aHcuZWxzYS50cmFuc2NudCkKIAkJdWRlbGF5KDEwMDApOwogCWRlYnVnbDEoY3MsICJtc2kgdG91dD0lZCIsIHRpbWVvdXQpOwotCXVkZWxheShSQ1ZfREVMQVkpOworCW1kZWxheShSQ1ZfREVMQVkpOwogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfMywgc3RybGVuKE1Jbml0XzMpKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzQsIHN0cmxlbihNSW5pdF80KSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSApOworCW1kZWxheShSQ1ZfREVMQVkpOwogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfNSwgc3RybGVuKE1Jbml0XzUpKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAltb2RlbV93cml0ZV9jbWQoY3MsIE1Jbml0XzYsIHN0cmxlbihNSW5pdF82KSk7CiAJdGltZW91dCA9IDEwMDA7CiAJd2hpbGUodGltZW91dC0tICYmIGNzLT5ody5lbHNhLnRyYW5zY250KQogCQl1ZGVsYXkoMTAwMCk7CiAJZGVidWdsMShjcywgIm1zaSB0b3V0PSVkIiwgdGltZW91dCk7Ci0JdWRlbGF5KFJDVl9ERUxBWSk7CisJbWRlbGF5KFJDVl9ERUxBWSk7CiAJbW9kZW1fd3JpdGVfY21kKGNzLCBNSW5pdF83LCBzdHJsZW4oTUluaXRfNykpOwogCXRpbWVvdXQgPSAxMDAwOwogCXdoaWxlKHRpbWVvdXQtLSAmJiBjcy0+aHcuZWxzYS50cmFuc2NudCkKIAkJdWRlbGF5KDEwMDApOwogCWRlYnVnbDEoY3MsICJtc2kgdG91dD0lZCIsIHRpbWVvdXQpOwotCXVkZWxheShSQ1ZfREVMQVkpOworCW1kZWxheShSQ1ZfREVMQVkpOwogfQogCiBzdGF0aWMgdm9pZAogbW9kZW1fc2V0X2RpYWwoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgb3V0Z29pbmcpIHsKIAlpbnQgdGltZW91dDsKLSNkZWZpbmUgUkNWX0RFTEFZIDIwMDAwCQorI2RlZmluZSBSQ1ZfREVMQVkgMjAKIAogCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfc3BlZWQyODgwMCwgc3RybGVuKE1Jbml0X3NwZWVkMjg4MDApKTsKIAl0aW1lb3V0ID0gMTAwMDsKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIAlpZiAob3V0Z29pbmcpCiAJCW1vZGVtX3dyaXRlX2NtZChjcywgTUluaXRfZGlhbG91dCwgc3RybGVuKE1Jbml0X2RpYWxvdXQpKTsKIAllbHNlCkBAIC01NDEsNyArNTQxLDcgQEAKIAl3aGlsZSh0aW1lb3V0LS0gJiYgY3MtPmh3LmVsc2EudHJhbnNjbnQpCiAJCXVkZWxheSgxMDAwKTsKIAlkZWJ1Z2wxKGNzLCAibXNpIHRvdXQ9JWQiLCB0aW1lb3V0KTsKLQl1ZGVsYXkoUkNWX0RFTEFZKTsKKwltZGVsYXkoUkNWX0RFTEFZKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IDlkZTU0MjAuLmE0MjBiNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtODE3LDggKzgxNyw4IEBACiAJfQogCS8qIHdlIGhhdmUgYSBjb21wbGV0ZSBoZGxjIHBhY2tldCAqLwogCWlmIChmaW5pc2gpIHsKLQkJaWYgKCghZmlmby0+c2tidWZmLT5kYXRhW2ZpZm8tPnNrYnVmZi0+bGVuIC0gMV0pCi0JCSAgICAmJiAoZmlmby0+c2tidWZmLT5sZW4gPiAzKSkgeworCQlpZiAoZmlmby0+c2tidWZmLT5sZW4gPiAzICYmCisJCQkJIWZpZm8tPnNrYnVmZi0+ZGF0YVtmaWZvLT5za2J1ZmYtPmxlbiAtIDFdKSB7CiAKIAkJCWlmIChmaWZvbiA9PSBIRkNVU0JfRF9SWCkgewogCQkJCURCRyhIRkNVU0JfREJHX0RDSEFOTkVMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hzY3hfaXJxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYwppbmRleCA3YjFhZDVlLi4yMzg3ZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeF9pcnEuYwpAQCAtMzIsNyArMzIsNyBAQAogewogCWludCB0byA9IDUwOwogCi0Jd2hpbGUgKCghKFJFQURIU0NYKGNzLCBoc2N4LCBIU0NYX1NUQVIpICYgMHg0NCkgPT0gMHg0MCkgJiYgdG8pIHsKKwl3aGlsZSAoKChSRUFESFNDWChjcywgaHNjeCwgSFNDWF9TVEFSKSAmIDB4NDQpICE9IDB4NDApICYmIHRvKSB7CiAJCXVkZWxheSgxKTsKIAkJdG8tLTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMKaW5kZXggOWFiYTY0Ni4uYzgwY2JiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2ljYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAJCQkJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9XQVJOKQogCQkJCQlkZWJ1Z2wxKGNzLCAiIGwybDEgdHhfc2tiIGV4aXN0IHRoaXMgc2hvdWxkbid0IGhhcHBlbiIpOwogCQkJCXNrYl9xdWV1ZV90YWlsKCZjcy0+c3EsIHNrYik7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChjcy0+ZGVidWcgJiBERUJfRExPR19IRVgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKaW5kZXggOWEzYzlmNS4uYWY1ZDM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwpAQCAtNTcsMjQgKzU3LDYgQEAKIE1PRFVMRV9BVVRIT1IoIk1hcmN1cyBOaWVtYW5uIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKLS8qCi0gICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwotCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0ic2VkbGJhdWVyX2NzLmMgMS4xYSAyMDAxLzAxLzI4IDE1OjA0OjA0IChNLk5pZW1hbm4pIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKLQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTUxLDcgKzEzMyw3IEBACiB7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIAotICAgIERFQlVHKDAsICJzZWRsYmF1ZXJfYXR0YWNoKClcbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgInNlZGxiYXVlcl9hdHRhY2goKVxuIik7CiAKICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogICAgIGxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CkBAIC0xNjMsNyArMTQ1LDYgQEAKIAogICAgIC8qIEludGVycnVwdCBzZXR1cCAqLwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogICAgIC8qCkBAIC0xOTgsNyArMTc5LDcgQEAKIAogc3RhdGljIHZvaWQgc2VkbGJhdWVyX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAic2VkbGJhdWVyX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAic2VkbGJhdWVyX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKIAkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wID0gMTsKIAlzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKQEAgLTIxNCw5ICsxOTUsNiBAQAogICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHNlZGxiYXVlcl9jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCSAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAogCQkJCSAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKQEAgLTI5MywxMSArMjcxLDExIEBACiAJCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKIAkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwogCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmcF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3cocF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJbWFwLlBhZ2UgPSAwOwogCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKKwkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sICZtYXApICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMDksMTAgKzI4NywxMCBAQAogewogICAgIGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKICAgICB3aW5fcmVxX3QgKnJlcTsKLSAgICBpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisgICAgaW50IHJldDsKICAgICBJc2RuQ2FyZF90ICBpY2FyZDsKIAotICAgIERFQlVHKDAsICJzZWRsYmF1ZXJfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJzZWRsYmF1ZXJfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAogICAgIHJlcSA9IGt6YWxsb2Moc2l6ZW9mKHdpbl9yZXFfdCksIEdGUF9LRVJORUwpOwogICAgIGlmICghcmVxKQpAQCAtMzMwLDggKzMwOCw4IEBACiAgICAgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCiAgICAgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAgICAgKi8KLSAgICBsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBzZWRsYmF1ZXJfY29uZmlnX2NoZWNrLCByZXEpOwotICAgIGlmIChsYXN0X3JldCkKKyAgICByZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgc2VkbGJhdWVyX2NvbmZpZ19jaGVjaywgcmVxKTsKKyAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qCkBAIC0zMzksMTUgKzMxNywyMCBAQAogICAgICAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQogICAgICAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAgICAgKi8KLSAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJICAgIGlmIChyZXQpCisJCSAgICBnb3RvIGZhaWxlZDsKKyAgICB9CiAJCiAgICAgLyoKICAgICAgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKICAgICAgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qCiAgICAgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQpAQCAtMzgwLDE5ICszNjMsMTggQEAKICAgICBpY2FyZC5wcm90b2NvbCA9IHByb3RvY29sOwogICAgIGljYXJkLnR5cCA9IElTRE5fQ1RZUEVfU0VETEJBVUVSX1BDTUNJQTsKICAgICAKLSAgICBsYXN0X3JldCA9IGhpc2F4X2luaXRfcGNtY2lhKGxpbmssICYoKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5zdG9wKSwgJmljYXJkKTsKLSAgICBpZiAobGFzdF9yZXQgPCAwKSB7Ci0gICAgCXByaW50ayhLRVJOX0VSUiAic2VkbGJhdWVyX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTRURMQkFVRVIgUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsCi0gICAgCQlsYXN0X3JldCwgbGluay0+aW8uQmFzZVBvcnQxKTsKKyAgICByZXQgPSBoaXNheF9pbml0X3BjbWNpYShsaW5rLCAKKwkJCSAgICAmKCgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3ApLCAmaWNhcmQpOworICAgIGlmIChyZXQgPCAwKSB7CisJcHJpbnRrKEtFUk5fRVJSICJzZWRsYmF1ZXJfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIFNFRExCQVVFUiBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKKwkJcmV0LCBsaW5rLT5pby5CYXNlUG9ydDEpOwogICAgIAlzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9IGVsc2UKLSAgICAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5jYXJkbnIgPSBsYXN0X3JldDsKKwkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5jYXJkbnIgPSByZXQ7CiAKICAgICByZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBzZWRsYmF1ZXJfcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTQxMCw3ICszOTIsNyBAQAogc3RhdGljIHZvaWQgc2VkbGJhdWVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7Ci0gICAgREVCVUcoMCwgInNlZGxiYXVlcl9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJzZWRsYmF1ZXJfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKICAgICBpZiAobG9jYWwpIHsKICAgICAJaWYgKGxvY2FsLT5jYXJkbnIgPj0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCA2MjNkMTExLi5lYTcwNTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtMzgsMjMgKzM4LDYgQEAKIE1PRFVMRV9BVVRIT1IoIkNocmlzdG9mIFBldGlnLCBjaHJpc3RvZi5wZXRpZ0B3dGFsLmRlLCBLYXJzdGVuIEtlaWwsIGtrZWlsQHN1c2UuZGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0KLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOwotc3RhdGljIGNoYXIgKnZlcnNpb24gPQotInRlbGVzX2NzLmMgMi4xMCAyMDAyLzA3LzMwIDIyOjIzOjM0IGtrZWlsIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEzMyw3ICsxMTYsNyBAQAogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKLSAgICBERUJVRygwLCAidGVsZXNfYXR0YWNoKClcbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgInRlbGVzX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAgICAgbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKQEAgLTE0NSw3ICsxMjgsNiBAQAogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUR8SVJRX1NIQVJFX0lEOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogICAgIC8qCkBAIC0xNzgsNyArMTYwLDcgQEAKIHsKIAlsb2NhbF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogCi0JREVCVUcoMCwgInRlbGVzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAidGVsZXNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKIAogCWluZm8tPmJ1c3kgPSAxOwogCXRlbGVzX2NzX3JlbGVhc2UobGluayk7CkBAIC0yMjEsMzAgKzIwMywyNSBAQAogc3RhdGljIGludCB0ZWxlc19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgbG9jYWxfaW5mb190ICpkZXY7Ci0gICAgaW50IGksIGxhc3RfZm47CisgICAgaW50IGk7CiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAotICAgIERFQlVHKDAsICJ0ZWxlc19jb25maWcoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgInRlbGVzX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAgICAgZGV2ID0gbGluay0+cHJpdjsKIAogICAgIGkgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgdGVsZXNfY3NfY29uZmlnY2hlY2ssIE5VTEwpOwotICAgIGlmIChpICE9IDApIHsKLQlsYXN0X2ZuID0gUmVxdWVzdElPOworICAgIGlmIChpICE9IDApCiAJZ290byBjc19mYWlsZWQ7Ci0gICAgfQogCiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7Ci0JbGFzdF9mbiA9IFJlcXVlc3RJUlE7CiAgICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KIAogICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLSAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICBsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CisgICAgaWYgKGkgIT0gMCkKICAgICAgIGdvdG8gY3NfZmFpbGVkOwotICAgIH0KIAogICAgIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBzaG91bGQgYmUKICAgICAgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuICovLyogICovCkBAIC0yODMsNyArMjYwLDYgQEAKICAgICByZXR1cm4gMDsKIAogY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGkpOwogICAgIHRlbGVzX2NzX3JlbGVhc2UobGluayk7CiAgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHRlbGVzX2NzX2NvbmZpZyAqLwpAQCAtMzAwLDcgKzI3Niw3IEBACiB7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CiAKLSAgICBERUJVRygwLCAidGVsZXNfY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAidGVsZXNfY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CiAKICAgICBpZiAobG9jYWwpIHsKICAgICAJaWYgKGxvY2FsLT5jYXJkbnIgPj0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5oIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5oCmluZGV4IDc0MDMyZDAuLjc1MTFmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuaAorKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmgKQEAgLTgzLDE5ICs4MywxOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5kLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJbHAgPSBuZC0+cXVldWU7ICAgICAgICAgLyogZ2V0IGxwIG9uIHRvcCBvZiBxdWV1ZSAqLwotCXNwaW5fbG9jaygmbmQtPnF1ZXVlLT54bWl0X2xvY2spOwogCXdoaWxlIChpc2RuX25ldF9scF9idXN5KG5kLT5xdWV1ZSkpIHsKLQkJc3Bpbl91bmxvY2soJm5kLT5xdWV1ZS0+eG1pdF9sb2NrKTsKIAkJbmQtPnF1ZXVlID0gbmQtPnF1ZXVlLT5uZXh0OwogCQlpZiAobmQtPnF1ZXVlID09IGxwKSB7IC8qIG5vdCBmb3VuZCAtLSBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAJCQlscCA9IE5VTEw7CiAJCQlnb3RvIGVycm91dDsKIAkJfQotCQlzcGluX2xvY2soJm5kLT5xdWV1ZS0+eG1pdF9sb2NrKTsKIAl9CiAJbHAgPSBuZC0+cXVldWU7CiAJbmQtPnF1ZXVlID0gbmQtPnF1ZXVlLT5uZXh0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5kLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZscC0+eG1pdF9sb2NrKTsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcmV0dXJuIGxwOwogZXJyb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5kLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGxwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCmluZGV4IDJkMTRiNjQuLjY0MmQ1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKQEAgLTE1MzUsMTAgKzE1MzUsOCBAQAogCWludCBzeiA9IElTRE5fTUFYX0NIQU5ORUxTKnNpemVvZihpcHBwX2J1bmRsZSk7CiAJaWYoIChpc2RuX3BwcF9idW5kbGVfYXJyID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCkpID09IE5VTEwgKQogCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgSVNETl9NQVhfQ0hBTk5FTFM7IGkrKykgeworCWZvciggaSA9IDA7IGkgPCBJU0ROX01BWF9DSEFOTkVMUzsgaSsrICkKIAkJc3Bpbl9sb2NrX2luaXQoJmlzZG5fcHBwX2J1bmRsZV9hcnJbaV0ubG9jayk7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmlzZG5fcHBwX2J1bmRsZV9hcnJbaV0uZnJhZ3MpOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU3MSw3ICsxNTY5LDcgQEAKIAkJaWYgKChscC0+bmV0ZGV2LT5wYiA9IGlzZG5fcHBwX21wX2J1bmRsZV9hbGxvYygpKSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWxwLT5uZXh0ID0gbHAtPmxhc3QgPSBscDsJLyogbm9ib2R5IGVsc2UgaW4gYSBxdWV1ZSAqLwotCQlza2JfcXVldWVfaGVhZF9pbml0KCZscC0+bmV0ZGV2LT5wYi0+ZnJhZ3MpOworCQlscC0+bmV0ZGV2LT5wYi0+ZnJhZ3MgPSBOVUxMOwogCQlscC0+bmV0ZGV2LT5wYi0+ZnJhbWVzID0gMDsKIAkJbHAtPm5ldGRldi0+cGItPnNlcSA9IFVJTlRfTUFYOwogCX0KQEAgLTE1ODMsMjkgKzE1ODEsMjggQEAKIAogc3RhdGljIHUzMiBpc2RuX3BwcF9tcF9nZXRfc2VxKCBpbnQgc2hvcnRfc2VxLCAKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKiBza2IsIHUzMiBsYXN0X3NlcSApOwotc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfZGlzY2FyZChpcHBwX2J1bmRsZSAqbXAsIHN0cnVjdCBza19idWZmICpmcm9tLAotCQkJCXN0cnVjdCBza19idWZmICp0byk7Ci1zdGF0aWMgdm9pZCBpc2RuX3BwcF9tcF9yZWFzc2VtYmx5KGlzZG5fbmV0X2RldiAqbmV0X2RldiwgaXNkbl9uZXRfbG9jYWwgKmxwLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqdG8sCi0JCQkJICAgdTMyIGxhc3RzZXEpOwotc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfZnJlZV9za2IoaXBwcF9idW5kbGUgKm1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqIGlzZG5fcHBwX21wX2Rpc2NhcmQoIGlwcHBfYnVuZGxlICogbXAsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqIGZyb20sIHN0cnVjdCBza19idWZmICogdG8gKTsKK3N0YXRpYyB2b2lkIGlzZG5fcHBwX21wX3JlYXNzZW1ibHkoIGlzZG5fbmV0X2RldiAqIG5ldF9kZXYsIGlzZG5fbmV0X2xvY2FsICogbHAsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqIHRvICk7CitzdGF0aWMgdm9pZCBpc2RuX3BwcF9tcF9mcmVlX3NrYiggaXBwcF9idW5kbGUgKiBtcCwgc3RydWN0IHNrX2J1ZmYgKiBza2IgKTsKIHN0YXRpYyB2b2lkIGlzZG5fcHBwX21wX3ByaW50X3JlY3ZfcGt0KCBpbnQgc2xvdCwgc3RydWN0IHNrX2J1ZmYgKiBza2IgKTsKIAogc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfcmVjZWl2ZShpc2RuX25ldF9kZXYgKiBuZXRfZGV2LCBpc2RuX25ldF9sb2NhbCAqIGxwLCAKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld2ZyYWcsICpmcmFnLCAqc3RhcnQsICpuZXh0ZjsKLQl1MzIgbmV3c2VxLCBtaW5zZXEsIHRoaXNzZXE7Ci0JaXNkbl9tcHBwX3N0YXRzICpzdGF0czsKIAlzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlzOworCWlzZG5fbmV0X2xvY2FsICogbHBxOworCWlwcHBfYnVuZGxlICogbXA7CisJaXNkbl9tcHBwX3N0YXRzICogc3RhdHM7CisJc3RydWN0IHNrX2J1ZmYgKiBuZXdmcmFnLCAqIGZyYWcsICogc3RhcnQsICpuZXh0ZjsKKwl1MzIgbmV3c2VxLCBtaW5zZXEsIHRoaXNzZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpc2RuX25ldF9sb2NhbCAqbHBxOwotCWlwcHBfYnVuZGxlICptcDsKIAlpbnQgc2xvdDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXRfZGV2LT5wYi0+bG9jaywgZmxhZ3MpOwotCW1wID0gbmV0X2Rldi0+cGI7Ci0Jc3RhdHMgPSAmbXAtPnN0YXRzOworICAgIAltcCA9IG5ldF9kZXYtPnBiOworICAgICAgICBzdGF0cyA9ICZtcC0+c3RhdHM7CiAJc2xvdCA9IGxwLT5wcHBfc2xvdDsKIAlpZiAoc2xvdCA8IDAgfHwgc2xvdCA+PSBJU0ROX01BWF9DSEFOTkVMUykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBscC0+cHBwX3Nsb3QoJWQpXG4iLApAQCAtMTYxNiwxOSArMTYxMywyMCBAQAogCQlyZXR1cm47CiAJfQogCWlzID0gaXBwcF90YWJsZVtzbG90XTsKLQlpZiAoKyttcC0+ZnJhbWVzID4gc3RhdHMtPm1heF9xdWV1ZV9sZW4pCisgICAgCWlmKCArK21wLT5mcmFtZXMgPiBzdGF0cy0+bWF4X3F1ZXVlX2xlbiApCiAJCXN0YXRzLT5tYXhfcXVldWVfbGVuID0gbXAtPmZyYW1lczsKLQorCQogCWlmIChpcy0+ZGVidWcgJiAweDgpCiAJCWlzZG5fcHBwX21wX3ByaW50X3JlY3ZfcGt0KGxwLT5wcHBfc2xvdCwgc2tiKTsKIAotCW5ld3NlcSA9IGlzZG5fcHBwX21wX2dldF9zZXEoaXMtPm1wcHBjZmcgJiBTQ19JTl9TSE9SVF9TRVEsCi0JCQkJICAgICBza2IsIGlzLT5sYXN0X2xpbmtfc2Vxbm8pOworCW5ld3NlcSA9IGlzZG5fcHBwX21wX2dldF9zZXEoaXMtPm1wcHBjZmcgJiBTQ19JTl9TSE9SVF9TRVEsIAorCQkJCQkJc2tiLCBpcy0+bGFzdF9saW5rX3NlcW5vKTsKKwogCiAJLyogaWYgdGhpcyBwYWNrZXQgc2VxICMgaXMgbGVzcyB0aGFuIGxhc3QgYWxyZWFkeSBwcm9jZXNzZWQgb25lLAogCSAqIHRvc3MgaXQgcmlnaHQgYXdheSwgYnV0IGNoZWNrIGZvciBzZXF1ZW5jZSBzdGFydCBjYXNlIGZpcnN0IAogCSAqLwotCWlmIChtcC0+c2VxID4gTVBfTE9OR1NFUV9NQVggJiYgKG5ld3NlcSAmIE1QX0xPTkdTRVFfTUFYQklUKSkgeworCWlmKCBtcC0+c2VxID4gTVBfTE9OR1NFUV9NQVggJiYgKG5ld3NlcSAmIE1QX0xPTkdTRVFfTUFYQklUKSApIHsKIAkJbXAtPnNlcSA9IG5ld3NlcTsJLyogdGhlIGZpcnN0IHBhY2tldDogcmVxdWlyZWQgZm9yCiAJCQkJCSAqIHJmYzE5OTAgbm9uLWNvbXBsaWFudCBjbGllbnRzIC0tCiAJCQkJCSAqIHByZXZlbnRzIGNvbnN0YW50IHBhY2tldCB0b3NzICovCkBAIC0xNjM4LDcgKzE2MzYsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCisJCiAJLyogZmluZCB0aGUgbWluaW11bSByZWNlaXZlZCBzZXF1ZW5jZSBudW1iZXIgb3ZlciBhbGwgbGlua3MgKi8KIAlpcy0+bGFzdF9saW5rX3NlcW5vID0gbWluc2VxID0gbmV3c2VxOwogCWZvciAobHBxID0gbmV0X2Rldi0+cXVldWU7OykgewpAQCAtMTY1OSwzMSArMTY1NywyMiBAQAogCQkJCQkgKiBwYWNrZXRzICovCiAJbmV3ZnJhZyA9IHNrYjsKIAotCS8qIEluc2VydCBuZXcgZnJhZ21lbnQgaW50byB0aGUgcHJvcGVyIHNlcXVlbmNlIHNsb3QuICAqLwotCXNrYl9xdWV1ZV93YWxrKCZtcC0+ZnJhZ3MsIGZyYWcpIHsKLQkJaWYgKE1QX1NFUShmcmFnKSA9PSBuZXdzZXEpIHsKLQkJCWlzZG5fcHBwX21wX2ZyZWVfc2tiKG1wLCBuZXdmcmFnKTsKLQkJCW5ld2ZyYWcgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKE1QX0xUKG5ld3NlcSwgTVBfU0VRKGZyYWcpKSkgewotCQkJX19za2JfcXVldWVfYmVmb3JlKCZtcC0+ZnJhZ3MsIGZyYWcsIG5ld2ZyYWcpOwotCQkJbmV3ZnJhZyA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAobmV3ZnJhZykKLQkJX19za2JfcXVldWVfdGFpbCgmbXAtPmZyYWdzLCBuZXdmcmFnKTsKKyAgCS8qIGlmIHRoaXMgbmV3IGZyYWdtZW50IGlzIGJlZm9yZSB0aGUgZmlyc3Qgb25lLCB0aGVuIGVucXVldWUgaXQgbm93LiAqLworICAJaWYgKChmcmFnID0gbXAtPmZyYWdzKSA9PSBOVUxMIHx8IE1QX0xUKG5ld3NlcSwgTVBfU0VRKGZyYWcpKSkgeworCQluZXdmcmFnLT5uZXh0ID0gZnJhZzsKKyAgICAJCW1wLT5mcmFncyA9IGZyYWcgPSBuZXdmcmFnOworICAgIAkJbmV3ZnJhZyA9IE5VTEw7CisgIAl9CiAKLQlmcmFnID0gc2tiX3BlZWsoJm1wLT5mcmFncyk7Ci0Jc3RhcnQgPSAoKE1QX0ZMQUdTKGZyYWcpICYgTVBfQkVHSU5fRlJBRykgJiYKLQkJIChNUF9TRVEoZnJhZykgPT0gbXAtPnNlcSkpID8gZnJhZyA6IE5VTEw7Ci0JaWYgKCFzdGFydCkKLQkJZ290byBjaGVja19vdmVyZmxvdzsKKyAgCXN0YXJ0ID0gTVBfRkxBR1MoZnJhZykgJiBNUF9CRUdJTl9GUkFHICYmCisJCQkJTVBfU0VRKGZyYWcpID09IG1wLT5zZXEgPyBmcmFnIDogTlVMTDsKIAotCS8qIG1haW4gZnJhZ21lbnQgdHJhdmVyc2luZyBsb29wCisJLyogCisJICogbWFpbiBmcmFnbWVudCB0cmF2ZXJzaW5nIGxvb3AKIAkgKgogCSAqIHRyeSB0byBhY2NvbXBsaXNoIHNldmVyYWwgdGFza3M6CisJICogLSBpbnNlcnQgbmV3IGZyYWdtZW50IGludG8gdGhlIHByb3BlciBzZXF1ZW5jZSBzbG90IChvbmNlIHRoYXQncyBkb25lCisJICogICBuZXdmcmFnIHdpbGwgYmUgc2V0IHRvIE5VTEwpCiAJICogLSByZWFzc2VtYmxlIGFueSBjb21wbGV0ZSBmcmFnbWVudCBzZXF1ZW5jZSAobm9uLW51bGwgJ3N0YXJ0JwogCSAqICAgaW5kaWNhdGVzIHRoZXJlIGlzIGEgY29udGluZ3VvdXMgc2VxdWVuY2UgcHJlc2VudCkKIAkgKiAtIGRpc2NhcmQgYW55IGluY29tcGxldGUgc2VxdWVuY2VzIHRoYXQgYXJlIGJlbG93IG1pbnNlcSAtLSBkdWUKQEAgLTE2OTIsNDYgKzE2ODEsNzEgQEAKIAkgKiAgIGNvbWUgdG8gY29tcGxldGUgc3VjaCBzZXF1ZW5jZSBhbmQgaXQgc2hvdWxkIGJlIGRpc2NhcmRlZAogCSAqCiAJICogbG9vcCBjb21wbGV0ZXMgd2hlbiB3ZSBhY2NvbXBsaXNoZWQgdGhlIGZvbGxvd2luZyB0YXNrczoKKwkgKiAtIG5ldyBmcmFnbWVudCBpcyBpbnNlcnRlZCBpbiB0aGUgcHJvcGVyIHNlcXVlbmNlICgnbmV3ZnJhZycgaXMgCisJICogICBzZXQgdG8gTlVMTCkKIAkgKiAtIHdlIGhpdCBhIGdhcCBpbiB0aGUgc2VxdWVuY2UsIHNvIG5vIHJlYXNzZW1ibHkvcHJvY2Vzc2luZyBpcyAKIAkgKiAgIHBvc3NpYmxlICgnc3RhcnQnIHdvdWxkIGJlIHNldCB0byBOVUxMKQogCSAqCiAJICogYWxnb3JpdGhtIGZvciB0aGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIGNvZGUgaW4gdGhlIGJvb2sKIAkgKiAnUFBQIERlc2lnbiBBbmQgRGVidWdnaW5nJyBieSBKYW1lcyBDYXJsc29uIChBZGRpc29uLVdlc2xleSkKIAkgKi8KLQlza2JfcXVldWVfd2Fsa19zYWZlKCZtcC0+ZnJhZ3MsIGZyYWcsIG5leHRmKSB7Ci0JCXRoaXNzZXEgPSBNUF9TRVEoZnJhZyk7CisgIAl3aGlsZSAoc3RhcnQgIT0gTlVMTCB8fCBuZXdmcmFnICE9IE5VTEwpIHsKIAotCQkvKiBjaGVjayBmb3IgbWlzcGxhY2VkIHN0YXJ0ICovCi0JCWlmIChzdGFydCAhPSBmcmFnICYmIChNUF9GTEFHUyhmcmFnKSAmIE1QX0JFR0lOX0ZSQUcpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HImlzZG5fbXBwcChzZXEgJWQpOiBuZXcgIgotCQkJICAgICAgICJCRUdJTiBmbGFnIHdpdGggbm8gcHJpb3IgRU5EIiwgdGhpc3NlcSk7Ci0JCQlzdGF0cy0+c2VxZXJycysrOwotCQkJc3RhdHMtPmZyYW1lX2Ryb3BzKys7Ci0JCQlpc2RuX3BwcF9tcF9kaXNjYXJkKG1wLCBzdGFydCwgZnJhZyk7Ci0JCQlzdGFydCA9IGZyYWc7Ci0JCX0gZWxzZSBpZiAoTVBfTEUodGhpc3NlcSwgbWluc2VxKSkgewkJCi0JCQlpZiAoTVBfRkxBR1MoZnJhZykgJiBNUF9CRUdJTl9GUkFHKQorICAgIAkJdGhpc3NlcSA9IE1QX1NFUShmcmFnKTsKKyAgICAJCW5leHRmID0gZnJhZy0+bmV4dDsKKworICAgIAkJLyogZHJvcCBhbnkgZHVwbGljYXRlIGZyYWdtZW50cyAqLworICAgIAkJaWYgKG5ld2ZyYWcgIT0gTlVMTCAmJiB0aGlzc2VxID09IG5ld3NlcSkgeworICAgICAgCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIG5ld2ZyYWcpOworICAgICAgCQkJbmV3ZnJhZyA9IE5VTEw7CisgICAgCQl9CisKKyAgICAJCS8qIGluc2VydCBuZXcgZnJhZ21lbnQgYmVmb3JlIG5leHQgZWxlbWVudCBpZiBwb3NzaWJsZS4gKi8KKyAgICAJCWlmIChuZXdmcmFnICE9IE5VTEwgJiYgKG5leHRmID09IE5VTEwgfHwgCisJCQkJCQlNUF9MVChuZXdzZXEsIE1QX1NFUShuZXh0ZikpKSkgeworICAgICAgCQkJbmV3ZnJhZy0+bmV4dCA9IG5leHRmOworICAgICAgCQkJZnJhZy0+bmV4dCA9IG5leHRmID0gbmV3ZnJhZzsKKyAgICAgIAkJCW5ld2ZyYWcgPSBOVUxMOworICAgIAkJfQorCisgICAgCQlpZiAoc3RhcnQgIT0gTlVMTCkgeworCSAgICAJCS8qIGNoZWNrIGZvciBtaXNwbGFjZWQgc3RhcnQgKi8KKyAgICAgIAkJCWlmIChzdGFydCAhPSBmcmFnICYmIChNUF9GTEFHUyhmcmFnKSAmIE1QX0JFR0lOX0ZSQUcpKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyJpc2RuX21wcHAoc2VxICVkKTogbmV3ICIKKwkJCQkgICAgICAiQkVHSU4gZmxhZyB3aXRoIG5vIHByaW9yIEVORCIsIHRoaXNzZXEpOworCQkJCXN0YXRzLT5zZXFlcnJzKys7CisJCQkJc3RhdHMtPmZyYW1lX2Ryb3BzKys7CisJCQkJc3RhcnQgPSBpc2RuX3BwcF9tcF9kaXNjYXJkKG1wLCBzdGFydCxmcmFnKTsKKwkJCQluZXh0ZiA9IGZyYWctPm5leHQ7CisgICAgICAJCQl9CisgICAgCQl9IGVsc2UgaWYgKE1QX0xFKHRoaXNzZXEsIG1pbnNlcSkpIHsJCQorICAgICAgCQkJaWYgKE1QX0ZMQUdTKGZyYWcpICYgTVBfQkVHSU5fRlJBRykKIAkJCQlzdGFydCA9IGZyYWc7Ci0JCQllbHNlIHsKKyAgICAgIAkJCWVsc2UgewogCQkJCWlmIChNUF9GTEFHUyhmcmFnKSAmIE1QX0VORF9GUkFHKQotCQkJCQlzdGF0cy0+ZnJhbWVfZHJvcHMrKzsKLQkJCQlfX3NrYl91bmxpbmsoc2tiLCAmbXAtPmZyYWdzKTsKKwkgIAkJCQlzdGF0cy0+ZnJhbWVfZHJvcHMrKzsKKwkJCQlpZiggbXAtPmZyYWdzID09IGZyYWcgKQorCQkJCQltcC0+ZnJhZ3MgPSBuZXh0ZjsJCiAJCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIGZyYWcpOworCQkJCWZyYWcgPSBuZXh0ZjsKIAkJCQljb250aW51ZTsKLQkJCX0KKyAgICAgIAkJCX0KIAkJfQotCi0JCS8qIGlmIHdlIGhhdmUgZW5kIGZyYWdtZW50LCB0aGVuIHdlIGhhdmUgZnVsbCByZWFzc2VtYmx5Ci0JCSAqIHNlcXVlbmNlIC0tIHJlYXNzZW1ibGUgYW5kIHByb2Nlc3MgcGFja2V0IG5vdworCQkKKwkJLyogaWYgc3RhcnQgaXMgbm9uLW51bGwgYW5kIHdlIGhhdmUgZW5kIGZyYWdtZW50LCB0aGVuCisJCSAqIHdlIGhhdmUgZnVsbCByZWFzc2VtYmx5IHNlcXVlbmNlIC0tIHJlYXNzZW1ibGUgCisJCSAqIGFuZCBwcm9jZXNzIHBhY2tldCBub3cKIAkJICovCi0JCWlmIChNUF9GTEFHUyhmcmFnKSAmIE1QX0VORF9GUkFHKSB7Ci0JCQltaW5zZXEgPSBtcC0+c2VxID0gKHRoaXNzZXErMSkgJiBNUF9MT05HU0VRX01BU0s7Ci0JCQkvKiBSZWFzc2VtYmxlIHRoZSBwYWNrZXQgdGhlbiBkaXNwYXRjaCBpdCAqLwotCQkJaXNkbl9wcHBfbXBfcmVhc3NlbWJseShuZXRfZGV2LCBscCwgc3RhcnQsIGZyYWcsIHRoaXNzZXEpOworICAgIAkJaWYgKHN0YXJ0ICE9IE5VTEwgJiYgKE1QX0ZMQUdTKGZyYWcpICYgTVBfRU5EX0ZSQUcpKSB7CisgICAgICAJCQltaW5zZXEgPSBtcC0+c2VxID0gKHRoaXNzZXErMSkgJiBNUF9MT05HU0VRX01BU0s7CisgICAgICAJCQkvKiBSZWFzc2VtYmxlIHRoZSBwYWNrZXQgdGhlbiBkaXNwYXRjaCBpdCAqLworCQkJaXNkbl9wcHBfbXBfcmVhc3NlbWJseShuZXRfZGV2LCBscCwgc3RhcnQsIG5leHRmKTsKKyAgICAgIAorICAgICAgCQkJc3RhcnQgPSBOVUxMOworICAgICAgCQkJZnJhZyA9IE5VTEw7CiAKLQkJCXN0YXJ0ID0gTlVMTDsKLQkJCWZyYWcgPSBOVUxMOwotCQl9CisgICAgICAJCQltcC0+ZnJhZ3MgPSBuZXh0ZjsKKyAgICAJCX0KIAogCQkvKiBjaGVjayBpZiBuZWVkIHRvIHVwZGF0ZSBzdGFydCBwb2ludGVyOiBpZiB3ZSBqdXN0CiAJCSAqIHJlYXNzZW1ibGVkIHRoZSBwYWNrZXQgYW5kIHNlcXVlbmNlIGlzIGNvbnRpZ3VvdXMKQEAgLTE3NDIsMjUgKzE3NTYsMjYgQEAKIAkJICogYmVsb3cgbG93IHdhdGVybWFyayBhbmQgc2V0IHN0YXJ0IHRvIHRoZSBuZXh0IGZyYWcgb3IKIAkJICogY2xlYXIgc3RhcnQgcHRyLgogCQkgKi8gCi0JCWlmIChuZXh0ZiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmbXAtPmZyYWdzICYmIAorICAgIAkJaWYgKG5leHRmICE9IE5VTEwgJiYgCiAJCSAgICAoKHRoaXNzZXErMSkgJiBNUF9MT05HU0VRX01BU0spID09IE1QX1NFUShuZXh0ZikpIHsKLQkJCS8qIGlmIHdlIGp1c3QgcmVhc3NlbWJsZWQgYW5kIHRoZSBuZXh0IG9uZSBpcyBoZXJlLCAKLQkJCSAqIHRoZW4gc3RhcnQgYW5vdGhlciByZWFzc2VtYmx5LgotCQkJICovCi0JCQlpZiAoZnJhZyA9PSBOVUxMKSB7CisgICAgICAJCQkvKiBpZiB3ZSBqdXN0IHJlYXNzZW1ibGVkIGFuZCB0aGUgbmV4dCBvbmUgaXMgaGVyZSwgCisJCQkgKiB0aGVuIHN0YXJ0IGFub3RoZXIgcmVhc3NlbWJseS4gKi8KKworICAgICAgCQkJaWYgKGZyYWcgPT0gTlVMTCkgewogCQkJCWlmIChNUF9GTEFHUyhuZXh0ZikgJiBNUF9CRUdJTl9GUkFHKQotCQkJCQlzdGFydCA9IG5leHRmOwotCQkJCWVsc2UgewotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HImlzZG5fbXBwcChzZXEgJWQpOiIKLQkJCQkJICAgICAgICIgRU5EIGZsYWcgd2l0aCBubyBmb2xsb3dpbmcgIgotCQkJCQkgICAgICAgIkJFR0lOIiwgdGhpc3NlcSk7CisJICAJCQkJc3RhcnQgPSBuZXh0ZjsKKwkJCQllbHNlCisJCQkJeworCSAgCQkJCXByaW50ayhLRVJOX1dBUk5JTkciaXNkbl9tcHBwKHNlcSAlZCk6IgorCQkJCQkJIiBFTkQgZmxhZyB3aXRoIG5vIGZvbGxvd2luZyAiCisJCQkJCQkiQkVHSU4iLCB0aGlzc2VxKTsKIAkJCQkJc3RhdHMtPnNlcWVycnMrKzsKIAkJCQl9CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobmV4dGYgIT0gKHN0cnVjdCBza19idWZmICopJm1wLT5mcmFncyAmJgotCQkJICAgIGZyYWcgIT0gTlVMTCAmJgotCQkJICAgIE1QX0xUKHRoaXNzZXEsIG1pbnNlcSkpIHsKKworICAgIAkJfSBlbHNlIHsKKwkJCWlmICggbmV4dGYgIT0gTlVMTCAmJiBmcmFnICE9IE5VTEwgJiYKKwkJCQkJCU1QX0xUKHRoaXNzZXEsIG1pbnNlcSkpIHsKIAkJCQkvKiB3ZSd2ZSBnb3QgYSBicmVhayBpbiB0aGUgc2VxdWVuY2UKIAkJCQkgKiBhbmQgd2Ugbm90IGF0IHRoZSBlbmQgeWV0CiAJCQkJICogYW5kIHdlIGRpZCBub3QganVzdCByZWFzc2VtYmxlZApAQCAtMTc2OSwzOSArMTc4NCw0MSBAQAogCQkJIAkgKiBkaXNjYXJkIGFsbCB0aGUgZnJhbWVzIGJlbG93IGxvdyB3YXRlcm1hcmsgCiAJCQkJICogYW5kIHN0YXJ0IG92ZXIgKi8KIAkJCQlzdGF0cy0+ZnJhbWVfZHJvcHMrKzsKLQkJCQlpc2RuX3BwcF9tcF9kaXNjYXJkKG1wLCBzdGFydCwgbmV4dGYpOworCQkJCW1wLT5mcmFncyA9IGlzZG5fcHBwX21wX2Rpc2NhcmQobXAsc3RhcnQsbmV4dGYpOwogCQkJfQogCQkJLyogYnJlYWsgaW4gdGhlIHNlcXVlbmNlLCBubyByZWFzc2VtYmx5ICovCi0JCQlzdGFydCA9IE5VTEw7Ci0JCX0KLQkJaWYgKCFzdGFydCkKLQkJCWJyZWFrOwotCX0KLQotY2hlY2tfb3ZlcmZsb3c6CisgICAgICAJCQlzdGFydCA9IE5VTEw7CisgICAgCQl9CisJICAJCQkKKyAgICAJCWZyYWcgPSBuZXh0ZjsKKyAgCX0JLyogd2hpbGUgLS0gbWFpbiBsb29wICovCisJCisgIAlpZiAobXAtPmZyYWdzID09IE5VTEwpCisgICAgCQltcC0+ZnJhZ3MgPSBmcmFnOworCQkKIAkvKiByYXRoZXIgc3RyYWlnaGZvcndhcmQgd2F5IHRvIGRlYWwgd2l0aCAobm90IHZlcnkpIHBvc3NpYmxlIAotCSAqIHF1ZXVlIG92ZXJmbG93Ci0JICovCisJICogcXVldWUgb3ZlcmZsb3cgKi8KIAlpZiAobXAtPmZyYW1lcyA+IE1QX01BWF9RVUVVRV9MRU4pIHsKIAkJc3RhdHMtPm92ZXJmbG93cysrOwotCQlza2JfcXVldWVfd2Fsa19zYWZlKCZtcC0+ZnJhZ3MsIGZyYWcsIG5leHRmKSB7Ci0JCQlpZiAobXAtPmZyYW1lcyA8PSBNUF9NQVhfUVVFVUVfTEVOKQotCQkJCWJyZWFrOwotCQkJX19za2JfdW5saW5rKGZyYWcsICZtcC0+ZnJhZ3MpOwotCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIGZyYWcpOworCQl3aGlsZSAobXAtPmZyYW1lcyA+IE1QX01BWF9RVUVVRV9MRU4pIHsKKwkJCWZyYWcgPSBtcC0+ZnJhZ3MtPm5leHQ7CisJCQlpc2RuX3BwcF9tcF9mcmVlX3NrYihtcCwgbXAtPmZyYWdzKTsKKwkJCW1wLT5mcmFncyA9IGZyYWc7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfY2xlYW51cChpc2RuX25ldF9sb2NhbCAqbHApCitzdGF0aWMgdm9pZCBpc2RuX3BwcF9tcF9jbGVhbnVwKCBpc2RuX25ldF9sb2NhbCAqIGxwICkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOwotCi0Jc2tiX3F1ZXVlX3dhbGtfc2FmZSgmbHAtPm5ldGRldi0+cGItPmZyYWdzLCBza2IsIHRtcCkgewotCQlfX3NrYl91bmxpbmsoc2tiLCAmbHAtPm5ldGRldi0+cGItPmZyYWdzKTsKLQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobHAtPm5ldGRldi0+cGIsIHNrYik7CisJc3RydWN0IHNrX2J1ZmYgKiBmcmFnID0gbHAtPm5ldGRldi0+cGItPmZyYWdzOworCXN0cnVjdCBza19idWZmICogbmV4dGZyYWc7CisgICAgCXdoaWxlKCBmcmFnICkgeworCQluZXh0ZnJhZyA9IGZyYWctPm5leHQ7CisJCWlzZG5fcHBwX21wX2ZyZWVfc2tiKGxwLT5uZXRkZXYtPnBiLCBmcmFnKTsKKwkJZnJhZyA9IG5leHRmcmFnOwogCX0KKwlscC0+bmV0ZGV2LT5wYi0+ZnJhZ3MgPSBOVUxMOwogfQogCiBzdGF0aWMgdTMyIGlzZG5fcHBwX21wX2dldF9zZXEoIGludCBzaG9ydF9zZXEsIApAQCAtMTgzOCwxMTUgKzE4NTUsNzIgQEAKIAlyZXR1cm4gc2VxOwogfQogCi1zdGF0aWMgdm9pZCBpc2RuX3BwcF9tcF9kaXNjYXJkKGlwcHBfYnVuZGxlICptcCwgc3RydWN0IHNrX2J1ZmYgKmZyb20sCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnRvKQorc3RydWN0IHNrX2J1ZmYgKiBpc2RuX3BwcF9tcF9kaXNjYXJkKCBpcHBwX2J1bmRsZSAqIG1wLAorCQkJc3RydWN0IHNrX2J1ZmYgKiBmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqIHRvICkKIHsKLQlpZiAoZnJvbSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOwotCQlpbnQgZnJlZWluZyA9IDA7Ci0KLQkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmbXAtPmZyYWdzLCBza2IsIHRtcCkgewotCQkJaWYgKHNrYiA9PSB0bykKLQkJCQlicmVhazsKLQkJCWlmIChza2IgPT0gZnJvbSkKLQkJCQlmcmVlaW5nID0gMTsKLQkJCWlmICghZnJlZWluZykKLQkJCQljb250aW51ZTsKLQkJCV9fc2tiX3VubGluayhza2IsICZtcC0+ZnJhZ3MpOwotCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIHNrYik7CisJaWYoIGZyb20gKQorCQl3aGlsZSAoZnJvbSAhPSB0bykgeworCSAgCQlzdHJ1Y3Qgc2tfYnVmZiAqIG5leHQgPSBmcm9tLT5uZXh0OworCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIGZyb20pOworCSAgCQlmcm9tID0gbmV4dDsKIAkJfQotCX0KKwlyZXR1cm4gZnJvbTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3RvdF9sZW4oc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCi0JCQkJIHN0cnVjdCBza19idWZmICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqdG8pCit2b2lkIGlzZG5fcHBwX21wX3JlYXNzZW1ibHkoIGlzZG5fbmV0X2RldiAqIG5ldF9kZXYsIGlzZG5fbmV0X2xvY2FsICogbHAsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqIHRvICkKIHsKLQl1bnNpZ25lZCBpbnQgdG90X2xlbiA9IDA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgZm91bmRfc3RhcnQgPSAwOwotCi0Jc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgewotCQlpZiAoc2tiID09IGZyb20pCi0JCQlmb3VuZF9zdGFydCA9IDE7Ci0JCWlmICghZm91bmRfc3RhcnQpCi0JCQljb250aW51ZTsKLQkJdG90X2xlbiArPSBza2ItPmxlbiAtIE1QX0hFQURFUl9MRU47Ci0JCWlmIChza2IgPT0gdG8pCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHRvdF9sZW47Ci19Ci0KLS8qIFJlYXNzZW1ibGUgcGFja2V0IHVzaW5nIGZyYWdtZW50cyBpbiB0aGUgcmVhc3NlbWJseSBxdWV1ZSBmcm9tCi0gKiAnZnJvbScgdW50aWwgJ3RvJywgaW5jbHVzaXZlLgotICovCi1zdGF0aWMgdm9pZCBpc2RuX3BwcF9tcF9yZWFzc2VtYmx5KGlzZG5fbmV0X2RldiAqbmV0X2RldiwgaXNkbl9uZXRfbG9jYWwgKmxwLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqdG8sCi0JCQkJICAgdTMyIGxhc3RzZXEpCi17Ci0JaXBwcF9idW5kbGUgKm1wID0gbmV0X2Rldi0+cGI7Ci0JdW5zaWduZWQgaW50IHRvdF9sZW47Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpcHBwX2J1bmRsZSAqIG1wID0gbmV0X2Rldi0+cGI7CiAJaW50IHByb3RvOworCXN0cnVjdCBza19idWZmICogc2tiOworCXVuc2lnbmVkIGludCB0b3RfbGVuOwogCiAJaWYgKGxwLT5wcHBfc2xvdCA8IDAgfHwgbHAtPnBwcF9zbG90ID49IElTRE5fTUFYX0NIQU5ORUxTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGxwLT5wcHBfc2xvdCglZCkgb3V0IG9mIHJhbmdlXG4iLAogCQkJX19mdW5jX18sIGxwLT5wcHBfc2xvdCk7CiAJCXJldHVybjsKIAl9Ci0KLQl0b3RfbGVuID0gY2FsY190b3RfbGVuKCZtcC0+ZnJhZ3MsIGZyb20sIHRvKTsKLQotCWlmIChNUF9GTEFHUyhmcm9tKSA9PSAoTVBfQkVHSU5fRlJBRyB8IE1QX0VORF9GUkFHKSkgewotCQlpZiAoaXBwcF90YWJsZVtscC0+cHBwX3Nsb3RdLT5kZWJ1ZyAmIDB4NDApCisJaWYoIE1QX0ZMQUdTKGZyb20pID09IChNUF9CRUdJTl9GUkFHIHwgTVBfRU5EX0ZSQUcpICkgeworCQlpZiggaXBwcF90YWJsZVtscC0+cHBwX3Nsb3RdLT5kZWJ1ZyAmIDB4NDAgKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgImlzZG5fbXBwcDogcmVhc3NlbWJseTogZnJhbWUgJWQsICIKLQkJCSAgICAgICAibGVuICVkXG4iLCBNUF9TRVEoZnJvbSksIGZyb20tPmxlbik7CisJCQkJCSJsZW4gJWRcbiIsIE1QX1NFUShmcm9tKSwgZnJvbS0+bGVuICk7CiAJCXNrYiA9IGZyb207CiAJCXNrYl9wdWxsKHNrYiwgTVBfSEVBREVSX0xFTik7Ci0JCV9fc2tiX3VubGluayhza2IsICZtcC0+ZnJhZ3MpOwogCQltcC0+ZnJhbWVzLS07CQogCX0gZWxzZSB7Ci0JCXN0cnVjdCBza19idWZmICp3YWxrLCAqdG1wOwotCQlpbnQgZm91bmRfc3RhcnQgPSAwOworCQlzdHJ1Y3Qgc2tfYnVmZiAqIGZyYWc7CisJCWludCBuOwogCi0JCWlmIChpcHBwX3RhYmxlW2xwLT5wcHBfc2xvdF0tPmRlYnVnICYgMHg0MCkKKwkJZm9yKHRvdF9sZW49bj0wLCBmcmFnPWZyb207IGZyYWcgIT0gdG87IGZyYWc9ZnJhZy0+bmV4dCwgbisrKQorCQkJdG90X2xlbiArPSBmcmFnLT5sZW4gLSBNUF9IRUFERVJfTEVOOworCisJCWlmKCBpcHBwX3RhYmxlW2xwLT5wcHBfc2xvdF0tPmRlYnVnICYgMHg0MCApCiAJCQlwcmludGsoS0VSTl9ERUJVRyJpc2RuX21wcHA6IHJlYXNzZW1ibGluZyBmcmFtZXMgJWQgIgotCQkJICAgICAgICJ0byAlZCwgbGVuICVkXG4iLCBNUF9TRVEoZnJvbSksIGxhc3RzZXEsCi0JCQkgICAgICAgdG90X2xlbik7Ci0KLQkJc2tiID0gZGV2X2FsbG9jX3NrYih0b3RfbGVuKTsKLQkJaWYgKCFza2IpCisJCQkJInRvICVkLCBsZW4gJWRcbiIsIE1QX1NFUShmcm9tKSwgCisJCQkJKE1QX1NFUShmcm9tKStuLTEpICYgTVBfTE9OR1NFUV9NQVNLLCB0b3RfbGVuICk7CisJCWlmKCAoc2tiID0gZGV2X2FsbG9jX3NrYih0b3RfbGVuKSkgPT0gTlVMTCApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaXNkbl9tcHBwOiBjYW5ub3QgYWxsb2NhdGUgc2sgYnVmZiAiCi0JCQkgICAgICAgIm9mIHNpemUgJWRcbiIsIHRvdF9sZW4pOworCQkJCQkib2Ygc2l6ZSAlZFxuIiwgdG90X2xlbik7CisJCQlpc2RuX3BwcF9tcF9kaXNjYXJkKG1wLCBmcm9tLCB0byk7CisJCQlyZXR1cm47CisJCX0KIAotCQlmb3VuZF9zdGFydCA9IDA7Ci0JCXNrYl9xdWV1ZV93YWxrX3NhZmUoJm1wLT5mcmFncywgd2FsaywgdG1wKSB7Ci0JCQlpZiAod2FsayA9PSBmcm9tKQotCQkJCWZvdW5kX3N0YXJ0ID0gMTsKLQkJCWlmICghZm91bmRfc3RhcnQpCi0JCQkJY29udGludWU7CisJCXdoaWxlKCBmcm9tICE9IHRvICkgeworCQkJdW5zaWduZWQgaW50IGxlbiA9IGZyb20tPmxlbiAtIE1QX0hFQURFUl9MRU47CiAKLQkJCWlmIChza2IpIHsKLQkJCQl1bnNpZ25lZCBpbnQgbGVuID0gd2Fsay0+bGVuIC0gTVBfSEVBREVSX0xFTjsKLQkJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldCh3YWxrLCBNUF9IRUFERVJfTEVOLAotCQkJCQkJCQkgc2tiX3B1dChza2IsIGxlbiksCi0JCQkJCQkJCSBsZW4pOwotCQkJfQotCQkJX19za2JfdW5saW5rKHdhbGssICZtcC0+ZnJhZ3MpOwotCQkJaXNkbl9wcHBfbXBfZnJlZV9za2IobXAsIHdhbGspOwotCi0JCQlpZiAod2FsayA9PSB0bykKLQkJCQlicmVhazsKKwkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGZyb20sIE1QX0hFQURFUl9MRU4sCisJCQkJCQkJIHNrYl9wdXQoc2tiLGxlbiksCisJCQkJCQkJIGxlbik7CisJCQlmcmFnID0gZnJvbS0+bmV4dDsKKwkJCWlzZG5fcHBwX21wX2ZyZWVfc2tiKG1wLCBmcm9tKTsKKwkJCWZyb20gPSBmcmFnOyAKIAkJfQogCX0KLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCiAgICAJcHJvdG8gPSBpc2RuX3BwcF9zdHJpcF9wcm90byhza2IpOwogCWlzZG5fcHBwX3B1c2hfaGlnaGVyKG5ldF9kZXYsIGxwLCBza2IsIHByb3RvKTsKIH0KIAotc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfZnJlZV9za2IoaXBwcF9idW5kbGUgKm1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgaXNkbl9wcHBfbXBfZnJlZV9za2IoaXBwcF9idW5kbGUgKiBtcCwgc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCW1wLT5mcmFtZXMtLTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9zdGFjay5jIGIvZHJpdmVycy9pc2RuL21JU0ROL3N0YWNrLmMKaW5kZXggM2UxNTMyYS4uMGQwNWVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL3N0YWNrLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3N0YWNrLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogc3RhdGljIGludAogc3Rfb3duX2N0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHVfaW50IGNtZCwgdm9pZCAqYXJnKQogewotCWlmICghY2gtPnN0IHx8IGNoLT5zdC0+bGF5ZXIxKQorCWlmICghY2gtPnN0IHx8ICFjaC0+c3QtPmxheWVyMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNoLT5zdC0+bGF5ZXIxLT5jdHJsKGNoLT5zdC0+bGF5ZXIxLCBjbWQsIGFyZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKaW5kZXggNzQ2Nzk4MC4uZTUyMjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwpAQCAtNzgsNiArNzgsOCBAQAogewogCWludCByZXQsIHN0YXRlOwogCisJbGVkX2RhdC0+Z3BpbyA9IC0xOworCiAJLyogc2tpcCBsZWRzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSAqLwogCWlmICghZ3Bpb19pc192YWxpZCh0ZW1wbGF0ZS0+Z3BpbykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgdW5hdmFpbGFibGUgTEVEIGdwaW8gJWQgKCVzKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBiNDBmYjliLi42ZjMwOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00MDUsNyArNDA1LDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgbWFwIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgMCwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CisJLyogV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQKKwkgKiBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIgc3VzcGVuZCwgd2UgY29udHJvbCBvdXIgb3duIGRpc2FibGluZworCSAqIGZvciB0aGF0IG9uZQorCSAqLworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDE5LDcgKzQyMyw3IEBACiAJCQlncGlvX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGdwaW9fbm9kZSwgMCk7CiAKIAkJaWYgKGdwaW9faXJxICE9IE5PX0lSUSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIDAsCisJCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgSVJRRl9USU1FUiwKIAkJCQkJIkdQSU8xIEFEQiIsICh2b2lkICopMCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJwbXU6IGNhbid0IGdldCBpcnEgJWQiCiAJCQkJICAgICAgICIgKEdQSU8xKVxuIiwgZ3Bpb19pcnEpOwpAQCAtOTI1LDggKzkyOSw3IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiAvKiBTZW5kIGFuIEFEQiBjb21tYW5kICovCi1zdGF0aWMgaW50Ci1wbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKK3N0YXRpYyBpbnQgcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTAwNSwxNiArMTAwOCwxMSBAQAogfQogCiAvKiBFbmFibGUvZGlzYWJsZSBhdXRvcG9sbGluZyAqLwotc3RhdGljIGludAotcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3N0YXRpYyBpbnQgX19wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAKLQlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZGV2cykgewotCQlhZGJfZGV2X21hcCA9IGRldnM7CiAJCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIFBNVV9BREJfQ01ELCAwLCAweDg2LAogCQkJICAgIGFkYl9kZXZfbWFwID4+IDgsIGFkYl9kZXZfbWFwKTsKIAkJcG11X2FkYl9mbGFncyA9IDI7CkBAIC0xMDI3LDkgKzEwMjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQoreworCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWFkYl9kZXZfbWFwID0gZGV2czsKKwlyZXR1cm4gX19wbXVfYWRiX2F1dG9wb2xsKGRldnMpOworfQorCiAvKiBSZXNldCB0aGUgQURCIGJ1cyAqLwotc3RhdGljIGludAotcG11X2FkYl9yZXNldF9idXModm9pZCkKK3N0YXRpYyBpbnQgcG11X2FkYl9yZXNldF9idXModm9pZCkKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCWludCBzYXZlX2F1dG9wb2xsID0gYWRiX2Rldl9tYXA7CkBAIC0xMDM4LDEzICsxMDQ0LDEzIEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiBhbnlvbmUgZ290IGEgYmV0dGVyIGlkZWE/PyAqLwotCXBtdV9hZGJfYXV0b3BvbGwoMCk7CisJX19wbXVfYWRiX2F1dG9wb2xsKDApOwogCi0JcmVxLm5ieXRlcyA9IDU7CisJcmVxLm5ieXRlcyA9IDQ7CiAJcmVxLmRvbmUgPSBOVUxMOwogCXJlcS5kYXRhWzBdID0gUE1VX0FEQl9DTUQ7Ci0JcmVxLmRhdGFbMV0gPSAwOwotCXJlcS5kYXRhWzJdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzFdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzJdID0gMDsKIAlyZXEuZGF0YVszXSA9IDA7CiAJcmVxLmRhdGFbNF0gPSAwOwogCXJlcS5yZXBseV9sZW4gPSAwOwpAQCAtMTA1Niw3ICsxMDYyLDcgQEAKIAlwbXVfd2FpdF9jb21wbGV0ZSgmcmVxKTsKIAogCWlmIChzYXZlX2F1dG9wb2xsICE9IDApCi0JCXBtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CisJCV9fcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKaW5kZXggMWRjNDE4NS4uZTM1NWU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL01ha2VmaWxlCkBAIC00Niw3ICs0Niw3IEBACiBvYmotJChDT05GSUdfRE1fWkVSTykJCSs9IGRtLXplcm8ubwogCiBxdWlldF9jbWRfdW5yb2xsID0gVU5ST0xMICAkQAotICAgICAgY21kX3Vucm9sbCA9ICQoUEVSTCkgJChzcmN0cmVlKS8kKHNyYykvdW5yb2xsLnBsICQoVU5ST0xMKSBcCisgICAgICBjbWRfdW5yb2xsID0gJChBV0spIC1mJChzcmN0cmVlKS8kKHNyYykvdW5yb2xsLmF3ayAtdk49JChVTlJPTEwpIFwKICAgICAgICAgICAgICAgICAgICA8ICQ8ID4gJEAgfHwgKCBybSAtZiAkQCAmJiBleGl0IDEgKQogCiBpZmVxICgkKENPTkZJR19BTFRJVkVDKSx5KQpAQCAtNTksNTYgKzU5LDU2IEBACiAKIHRhcmdldHMgKz0gcmFpZDZpbnQxLmMKICQob2JqKS9yYWlkNmludDEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQxLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50Mi5jCiAkKG9iaikvcmFpZDZpbnQyLmM6ICAgVU5ST0xMIDo9IDIKLSQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50Mi5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDQuYwogJChvYmopL3JhaWQ2aW50NC5jOiAgIFVOUk9MTCA6PSA0Ci0kKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ4LmMKICQob2JqKS9yYWlkNmludDguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ4LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50MTYuYwogJChvYmopL3JhaWQ2aW50MTYuYzogIFVOUk9MTCA6PSAxNgotJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQxNi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50MzIuYwogJChvYmopL3JhaWQ2aW50MzIuYzogIFVOUk9MTCA6PSAzMgotJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjMS5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjMS5jCiAkKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgIFVOUk9MTCA6PSAxCi0kKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjMi5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjMi5jCiAkKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZhbHRpdmVjMi5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjNC5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjNC5jCiAkKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgIFVOUk9MTCA6PSA0Ci0kKG9iaikvcmFpZDZhbHRpdmVjNC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBDRkxBR1NfcmFpZDZhbHRpdmVjOC5vICs9ICQoYWx0aXZlY19mbGFncykKIHRhcmdldHMgKz0gcmFpZDZhbHRpdmVjOC5jCiAkKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgIFVOUk9MTCA6PSA4Ci0kKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiBxdWlldF9jbWRfbWt0YWJsZSA9IFRBQkxFICAgJEAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IDY5ODZiMDAuLjYwZTJiMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtMTYyNCwxMCArMTYyNCwxMSBAQAogCWJpdG1hcC0+b2Zmc2V0ID0gbWRkZXYtPmJpdG1hcF9vZmZzZXQ7CiAJaWYgKGZpbGUpIHsKIAkJZ2V0X2ZpbGUoZmlsZSk7Ci0JCWRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIDAsIExMT05HX01BWCwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XUklURSB8Ci0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpOworCQkvKiBBcyBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBmaWxlIHdpbGwgdXNlIGJtYXAsCisJCSAqIGFuZCBieXBhc3MgdGhlIHBhZ2UgY2FjaGUsIHdlIG11c3Qgc3luYyB0aGUgZmlsZQorCQkgKiBmaXJzdC4KKwkJICovCisJCXZmc19mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSwgMSk7CiAJfQogCS8qIHJlYWQgc3VwZXJibG9jayBmcm9tIGJpdG1hcCBmaWxlICh0aGlzIHNldHMgYml0bWFwLT5jaHVua3NpemUpICovCiAJZXJyID0gYml0bWFwX3JlYWRfc2IoYml0bWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCmluZGV4IDU1NmFjZmYuLjdkYmU2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwpAQCAtMTM4LDE2ICsxMzgsNiBAQAogfQogRVhQT1JUX1NZTUJPTChkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKTsKIAotLyoKLSAqIFJvdW5kIGEgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0ICdzaXplJyBib3VuZGFyeS4gIHNpemUgbXVzdAotICogYmUgYSBwb3dlciBvZiAyLgotICovCi1zdGF0aWMgdWxvbmcgcm91bmRfdXAodWxvbmcgbiwgdWxvbmcgc2l6ZSkKLXsKLQlzaXplLS07Ci0JcmV0dXJuIChuICsgc2l6ZSkgJiB+c2l6ZTsKLX0KLQogc3RhdGljIGludCBzZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCSAgY29uc3QgY2hhciAqY2h1bmtfc2l6ZV9hcmcsIGNoYXIgKiplcnJvcikKIHsKQEAgLTE1NSw3ICsxNDUsOCBAQAogCWNoYXIgKnZhbHVlOwogCiAJY2h1bmtfc2l6ZV91bG9uZyA9IHNpbXBsZV9zdHJ0b3VsKGNodW5rX3NpemVfYXJnLCAmdmFsdWUsIDEwKTsKLQlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcpIHsKKwlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcgfHwKKwkgICAgY2h1bmtfc2l6ZV91bG9uZyA+IFVJTlRfTUFYKSB7CiAJCSplcnJvciA9ICJJbnZhbGlkIGNodW5rIHNpemUiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNjUsNDAgKzE1NiwzNSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIENodW5rIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiBwYWdlIHNpemUuICBTaWxlbnRseQotCSAqIHJvdW5kIHVwIGlmIGl0J3Mgbm90LgotCSAqLwotCWNodW5rX3NpemVfdWxvbmcgPSByb3VuZF91cChjaHVua19zaXplX3Vsb25nLCBQQUdFX1NJWkUgPj4gOSk7Ci0KLQlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLCBjaHVua19zaXplX3Vsb25nLAorCXJldHVybiBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RvcmUsCisJCQkJCQkgKHVuc2lnbmVkKSBjaHVua19zaXplX3Vsb25nLAogCQkJCQkJIGVycm9yKTsKIH0KIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NpemVfdWxvbmcsCisJCQkJICAgICAgdW5zaWduZWQgY2h1bmtfc2l6ZSwKIAkJCQkgICAgICBjaGFyICoqZXJyb3IpCiB7CiAJLyogQ2hlY2sgY2h1bmtfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZV91bG9uZykpIHsKKwlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFZhbGlkYXRlIHRoZSBjaHVuayBzaXplIGFnYWluc3QgdGhlIGRldmljZSBibG9jayBzaXplICovCi0JaWYgKGNodW5rX3NpemVfdWxvbmcgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKKwlpZiAoY2h1bmtfc2l6ZSAlIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgewogCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBkZXZpY2UgYmxvY2tzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNodW5rX3NpemVfdWxvbmcgPiBJTlRfTUFYID4+IFNFQ1RPUl9TSElGVCkgeworCWlmIChjaHVua19zaXplID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgdG9vIGhpZ2giOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemVfdWxvbmc7Ci0Jc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplX3Vsb25nIC0gMTsKLQlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZV91bG9uZykgLSAxOworCXN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKKwlzdG9yZS0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemUgLSAxOworCXN0b3JlLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MSw3ICsyMzcsNyBAQAogCiAJciA9IHNldF9jaHVua19zaXplKHRtcF9zdG9yZSwgYXJndlsyXSwgJnRpLT5lcnJvcik7CiAJaWYgKHIpCi0JCWdvdG8gYmFkX2NvdzsKKwkJZ290byBiYWRfY3RyOwogCiAJciA9IHR5cGUtPmN0cih0bXBfc3RvcmUsIDAsIE5VTEwpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAppbmRleCA4MTJjNzE4Li44YTIyM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKQEAgLTEwMSw5ICsxMDEsOSBAQAogCXN0cnVjdCBkbV9kZXYgKmNvdzsKIAogCS8qIFNpemUgb2YgZGF0YSBibG9ja3Mgc2F2ZWQgLSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwotCWNodW5rX3QgY2h1bmtfc2l6ZTsKLQljaHVua190IGNodW5rX21hc2s7Ci0JY2h1bmtfdCBjaHVua19zaGlmdDsKKwl1bnNpZ25lZCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX21hc2s7CisJdW5zaWduZWQgY2h1bmtfc2hpZnQ7CiAKIAl2b2lkICpjb250ZXh0OwogfTsKQEAgLTE2OSw3ICsxNjksNyBAQAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NpemVfdWxvbmcsCisJCQkJICAgICAgdW5zaWduZWQgY2h1bmtfc2l6ZSwKIAkJCQkgICAgICBjaGFyICoqZXJyb3IpOwogCiBpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKaW5kZXggNjUyYmQzMy4uN2FjMmMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl9CiAKIAkvKiBUaGUgcHRyIHZhbHVlIGlzIHN1ZmZpY2llbnQgZm9yIGxvY2FsIHVuaXF1ZSBpZCAqLwotCWxjLT5sdWlkID0gKHVpbnQ2NF90KWxjOworCWxjLT5sdWlkID0gKHVuc2lnbmVkIGxvbmcpbGM7CiAKIAlsYy0+dGkgPSB0aTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKaW5kZXggZDViMmUwOC4uMGM3NDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC0yODQsMTIgKzI4NCwxMyBAQAogewogCWludCByOwogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7Ci0JY2h1bmtfdCBjaHVua19zaXplOworCXVuc2lnbmVkIGNodW5rX3NpemU7CiAJaW50IGNodW5rX3NpemVfc3VwcGxpZWQgPSAxOwogCWNoYXIgKmNodW5rX2VycjsKIAogCS8qCi0JICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCisJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgbG9naWNhbF9ibG9ja19zaXplLCBpZiBsYXJnZXIpCisJICogaWYgbm9uZSBzdXBwbGllZAogCSAqLwogCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CiAJCXBzLT5zdG9yZS0+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+cmVzeW5jX21heCA9IE1heFNlY3RvcjsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkMWI5YmQ1Li5lMDdjZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjFfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjFfYmlvKQorCWlmICghcjFfYmlvICYmIHBpLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhwaS0+bWRkZXYpOwogCiAJcmV0dXJuIHIxX2JpbzsKQEAgLTE2NTAsMTEgKzE2NTAsMTIgQEAKIAkJCQkJICAgICAgIHIxX2Jpby0+c2VjdG9yLAogCQkJCQkgICAgICAgcjFfYmlvLT5zZWN0b3JzKTsKIAkJCQl1bmZyZWV6ZV9hcnJheShjb25mKTsKLQkJCX0KKwkJCX0gZWxzZQorCQkJCW1kX2Vycm9yKG1kZGV2LAorCQkJCQkgY29uZi0+bWlycm9yc1tyMV9iaW8tPnJlYWRfZGlza10ucmRldik7CiAKIAkJCWJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107Ci0JCQlpZiAoKGRpc2s9cmVhZF9iYWxhbmNlKGNvbmYsIHIxX2JpbykpID09IC0xIHx8Ci0JCQkgICAgZGlzayA9PSByMV9iaW8tPnJlYWRfZGlzaykgeworCQkJaWYgKChkaXNrPXJlYWRfYmFsYW5jZShjb25mLCByMV9iaW8pKSA9PSAtMSkgewogCQkJCXByaW50ayhLRVJOX0FMRVJUICJyYWlkMTogJXM6IHVucmVjb3ZlcmFibGUgSS9PIgogCQkJCSAgICAgICAiIHJlYWQgZXJyb3IgZm9yIGJsb2NrICVsbHVcbiIsCiAJCQkJICAgICAgIGJkZXZuYW1lKGJpby0+YmlfYmRldixiKSwKQEAgLTE2ODMsNiArMTY4NCw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0xOTc4LDEzICsxOTgwLDE0IEBACiAJY29uZi0+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+IHMvXCRcKi9cJC9nOwotCXByaW50ICR0bXA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYwppbmRleCA2NTU0NzRiLi5hYmQ0NzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAJaXItPmlyX3R5cGUgPSBpcl90eXBlOwogCi0JbWVtc2V0KGlyLT5pcl9jb2Rlcywgc2l6ZW9mKGlyLT5pcl9jb2RlcyksIDApOworCW1lbXNldChpci0+aXJfY29kZXMsIDAsIHNpemVvZihpci0+aXJfY29kZXMpKTsKIAogCS8qCiAJICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byB1c2UgdGhlIG5ldyBJUiB0YWJsZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggNjQ1OTUxMS4uM2E1MGNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTYxNiwxMyArNjE2LDEzIEBACiAJCWNhc2UgUkYyOgogCQkJbWFwW2ldLnJmX2ExID0gKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdIC0KIAkJCQkJcHJvZ19jYWxbUkYxXSArIHByb2dfdGFiW1JGMV0pIC8KLQkJCQkoKHJmX2ZyZXFbUkYyXSAtIHJmX2ZyZXFbUkYxXSkgLyAxMDAwKTsKKwkJCQkoczMyKSgocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDApOwogCQkJbWFwW2ldLnJmMiAgID0gcmZfZnJlcVtSRjJdIC8gMTAwMDsKIAkJCWJyZWFrOwogCQljYXNlIFJGMzoKIAkJCW1hcFtpXS5yZl9hMiA9IChwcm9nX2NhbFtSRjNdIC0gcHJvZ190YWJbUkYzXSAtCiAJCQkJCXByb2dfY2FsW1JGMl0gKyBwcm9nX3RhYltSRjJdKSAvCi0JCQkJKChyZl9mcmVxW1JGM10gLSByZl9mcmVxW1JGMl0pIC8gMTAwMCk7CisJCQkJKHMzMikoKHJmX2ZyZXFbUkYzXSAtIHJmX2ZyZXFbUkYyXSkgLyAxMDAwKTsKIAkJCW1hcFtpXS5yZl9iMiA9IHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdOwogCQkJbWFwW2ldLnJmMyAgID0gcmZfZnJlcVtSRjNdIC8gMTAwMDsKIAkJCWJyZWFrOwpAQCAtMTAwMCwxMiArMTAwMCwxMiBAQAogCXN0cnVjdCB0ZGExODI3MV9zdGRfbWFwX2l0ZW0gKm1hcDsKIAljaGFyICptb2RlOwogCWludCByZXQ7Ci0JdTMyIGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDYyNTAwOworCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiAxMjUgKgorCQkoKHBhcmFtcy0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKSA/IDEgOiAxMDAwKSAvIDI7CiAKIAlwcml2LT5tb2RlID0gVERBMTgyNzFfQU5BTE9HOwogCiAJaWYgKHBhcmFtcy0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKSB7Ci0JCWZyZXEgPSBmcmVxIC8gMTAwMDsKIAkJbWFwID0gJnN0ZF9tYXAtPmZtX3JhZGlvOwogCQltb2RlID0gImZtIjsKIAl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggZGRmNjM5ZS4uOTgwODI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDk3NDRiMDYuLjBlNGI5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTc1LDcgKzc1LDcgQEAKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKKwlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCmluZGV4IDA3MzdjNjMuLjNkZjIwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW50IGkgPSAwOwogCXN0cnVjdCByZXFfdCByZXE7CiAJaW50IHJldCA9IDA7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZigmcmVxKSk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKIAogCWlmIChudW0gPiAyKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCBmNjU1OTFmYjcuLjJhNTNkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTY2Myw2ICs2NjMsMTQgQEAKIAkucGFyYWxsZWxfdHMgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeHVzYl96bDEwMzUzX3hjMzAyOF9jb25maWdfbm9faTJjX2dhdGUgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBmLAorCS5pZjIgPSA0NTYwMCwKKwkubm9fdHVuZXIgPSAxLAorCS5wYXJhbGxlbF90cyA9IDEsCisJLmRpc2FibGVfaTJjX2dhdGVfY3RybCA9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IG10MzUyX2NvbmZpZyBjeHVzYl9tdDM1Ml94YzMwMjhfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKIAkuaWYyID0gNDU2MCwKQEAgLTg5NCw3ICs5MDIsNyBAQAogCWN4dXNiX2JsdWViaXJkX2dwaW9fcHVsc2UoYWRhcC0+ZGV2LCAweDAyLCAxKTsKIAogCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAotCQkJCSAgICZjeHVzYl96bDEwMzUzX3hjMzAyOF9jb25maWcsCisJCQkJICAgJmN4dXNiX3psMTAzNTNfeGMzMDI4X2NvbmZpZ19ub19pMmNfZ2F0ZSwKIAkJCQkgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCAwYjI4MTJhLi42YmQ4OTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE5MjUsNyArMTkyNSw3IEBACiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAoU1RLNzcwMFAgYmFzZWQpIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSB9LAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzhdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbMzRdIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIEV4cHJlc3MiLApAQCAtMjA2NCw3ICsyMDY0LDcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSAxMiwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAxMSwKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkRpQmNvbSBTVEs3MDcwUCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxNV0sIE5VTEwgfSwKQEAgLTIwOTgsMTEgKzIwOTgsNiBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMwXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKLQkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMvIFQzIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sCi0JCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs1Ml0sIE5VTEwgfSwKLQkJCQl7IE5VTEwgfSwKLQkJCX0sCiAJCQl7ICAgIkVsZ2F0byBFeWVUViBEVFQiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LApAQCAtMjM0Myw4ICsyMzM4LDEwIEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTldLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAotCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IFQgVVNCIFhYUyAoSEQpIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszNF0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVs2MF0gfSwKKwkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMgKEhEKS8gVDMiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMzXSwKKwkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzUyXSwKKwkJCQkJJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzYwXSwgTlVMTH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKaW5kZXggZDFiNjdmZS4uNDg1ZDA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCkBAIC0xMDUwLDI4ICsxMDUwLDI4IEBACiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfUE1UOyAvKiBjYSB0YWcgKi8KIAljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JLyogYy0+b3BlcmFuZFs3XSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxNzsgKi8gLyogbGVuZ3RoICovCi0JYy0+b3BlcmFuZFs4XSA9IGxpc3RfbWFuYWdlbWVudDsKLQljLT5vcGVyYW5kWzldID0gMHgwMTsgLyogcG10X2NtZD1PS19kZXNjcmFtYmxlICovCisJLyogVXNlIHRocmVlIGJ5dGVzIGZvciBsZW5ndGggZmllbGQgaW4gY2FzZSBsZW5ndGggPiAxMjcgKi8KKwljLT5vcGVyYW5kWzEwXSA9IGxpc3RfbWFuYWdlbWVudDsKKwljLT5vcGVyYW5kWzExXSA9IDB4MDE7IC8qIHBtdF9jbWQ9T0tfZGVzY3JhbWJsZSAqLwogCiAJLyogVFMgcHJvZ3JhbSBtYXAgdGFibGUgKi8KIAotCWMtPm9wZXJhbmRbMTBdID0gMHgwMjsgLyogVGFibGUgaWQ9MiAqLwotCWMtPm9wZXJhbmRbMTFdID0gMHg4MDsgLyogU2VjdGlvbiBzeW50YXggKyBsZW5ndGggKi8KLQkvKiBjLT5vcGVyYW5kWzEyXSA9IFhYWHByb2dyYW1faW5mb19sZW5ndGggKyAxMjsgKi8KLQljLT5vcGVyYW5kWzEzXSA9IG1zZ1sxXTsgLyogUHJvZ3JhbSBudW1iZXIgKi8KLQljLT5vcGVyYW5kWzE0XSA9IG1zZ1syXTsKLQljLT5vcGVyYW5kWzE1XSA9IDB4MDE7IC8qIFZlcnNpb24gbnVtYmVyPTAgKyBjdXJyZW50L25leHQ9MSAqLwotCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogU2VjdGlvbiBudW1iZXI9MCAqLwotCWMtPm9wZXJhbmRbMTddID0gMHgwMDsgLyogTGFzdCBzZWN0aW9uIG51bWJlcj0wICovCi0JYy0+b3BlcmFuZFsxOF0gPSAweDFmOyAvKiBQQ1JfUElEPTFGRkYgKi8KLQljLT5vcGVyYW5kWzE5XSA9IDB4ZmY7Ci0JYy0+b3BlcmFuZFsyMF0gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCA+PiA4KTsgLyogUHJvZ3JhbSBpbmZvIGxlbmd0aCAqLwotCWMtPm9wZXJhbmRbMjFdID0gKHByb2dyYW1faW5mb19sZW5ndGggJiAweGZmKTsKKwljLT5vcGVyYW5kWzEyXSA9IDB4MDI7IC8qIFRhYmxlIGlkPTIgKi8KKwljLT5vcGVyYW5kWzEzXSA9IDB4ODA7IC8qIFNlY3Rpb24gc3ludGF4ICsgbGVuZ3RoICovCisJLyogYy0+b3BlcmFuZFsxNF0gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTI7ICovCisJYy0+b3BlcmFuZFsxNV0gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCisJYy0+b3BlcmFuZFsxNl0gPSBtc2dbMl07CisJYy0+b3BlcmFuZFsxN10gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KKwljLT5vcGVyYW5kWzE4XSA9IDB4MDA7IC8qIFNlY3Rpb24gbnVtYmVyPTAgKi8KKwljLT5vcGVyYW5kWzE5XSA9IDB4MDA7IC8qIExhc3Qgc2VjdGlvbiBudW1iZXI9MCAqLworCWMtPm9wZXJhbmRbMjBdID0gMHgxZjsgLyogUENSX1BJRD0xRkZGICovCisJYy0+b3BlcmFuZFsyMV0gPSAweGZmOworCWMtPm9wZXJhbmRbMjJdID0gKHByb2dyYW1faW5mb19sZW5ndGggPj4gOCk7IC8qIFByb2dyYW0gaW5mbyBsZW5ndGggKi8KKwljLT5vcGVyYW5kWzIzXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoICYgMHhmZik7CiAKIAkvKiBDQSBkZXNjcmlwdG9ycyBhdCBwcm9ncmFtbWUgbGV2ZWwgKi8KIAlyZWFkX3BvcyA9IDY7Ci0Jd3JpdGVfcG9zID0gMjI7CisJd3JpdGVfcG9zID0gMjQ7CiAJaWYgKHByb2dyYW1faW5mb19sZW5ndGggPiAwKSB7CiAJCXBtdF9jbWRfaWQgPSBtc2dbcmVhZF9wb3MrK107CiAJCWlmIChwbXRfY21kX2lkICE9IDEgJiYgcG10X2NtZF9pZCAhPSA0KQpAQCAtMTExMyw4ICsxMTEzLDEwIEBACiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKIAotCWMtPm9wZXJhbmRbN10gPSB3cml0ZV9wb3MgLSA4OwotCWMtPm9wZXJhbmRbMTJdID0gd3JpdGVfcG9zIC0gMTM7CisJYy0+b3BlcmFuZFs3XSA9IDB4ODI7CisJYy0+b3BlcmFuZFs4XSA9ICh3cml0ZV9wb3MgLSAxMCkgPj4gODsKKwljLT5vcGVyYW5kWzldID0gKHdyaXRlX3BvcyAtIDEwKSAmIDB4ZmY7CisJYy0+b3BlcmFuZFsxNF0gPSB3cml0ZV9wb3MgLSAxNTsKIAogCWNyYzMyX2NzdW0gPSBjcmMzMl9iZSgwLCAmYy0+b3BlcmFuZFsxMF0sIGMtPm9wZXJhbmRbMTJdIC0gMSk7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSA0XSA9IChjcmMzMl9jc3VtID4+IDI0KSAmIDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKaW5kZXggN2JhNDM2My4uZTQ5Y2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYwpAQCAtMTQxLDE4ICsxNDEsMTIgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNkZWZpbmUgQUNDRVBURUQgMHg5Ci0KIHN0YXRpYyBpbnQgZmR0dl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OwogCi0JLyogRklYTUU6IGF2Y190dW5lcl9kc2QgbmV2ZXIgcmV0dXJucyBBQ0NFUFRFRC4gQ2hlY2sgc3RhdHVzPyAqLwotCWlmIChhdmNfdHVuZXJfZHNkKGZkdHYsIHBhcmFtcykgIT0gQUNDRVBURUQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UKLQkJcmV0dXJuIDA7IC8qIG5vdCBzdXJlIG9mIHRoaXMuLi4gKi8KKwlyZXR1cm4gYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKaW5kZXggOGEyZTFlNy4uZWVjOWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCkBAIC01MSw2ICs1MSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CitleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG9wZW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKIHsKQEAgLTYzLDcgKzY0LDExIEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggb3BlbikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKK30KICNlbmRpZgotZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDU1ZWY2ZWUuLjA3ODFmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC0xMzc1LDYgKzEzNzUsMTEgQEAKIAlpZiAoZGliNzAwMHBfaWRlbnRpZnkoc3QpICE9IDApCiAJCWdvdG8gZXJyb3I7CiAKKwkvKiBGSVhNRTogbWFrZSBzdXJlIHRoZSBkZXYucGFyZW50IGZpZWxkIGlzIGluaXRpYWxpemVkLCBvciBlbHNlCisJcmVxdWVzdF9maXJtd2FyZSgpIHdpbGwgaGl0IGFuIE9PUFMgKHRoaXMgc2hvdWxkIGJlIG1vdmVkIHNvbWV3aGVyZQorCW1vcmUgY29tbW9uKSAqLworCXN0LT5pMmNfbWFzdGVyLmdhdGVkX3R1bmVyX2kyY19hZGFwLmRldi5wYXJlbnQgPSBpMmNfYWRhcC0+ZGV2LnBhcmVudDsKKwogCWRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKCZzdC0+aTJjX21hc3RlciwgRElCNzAwMFAsIHN0LT5pMmNfYWRhcCwgc3QtPmkyY19hZGRyKTsKIAogCWRpYjcwMDBwX2RlbW9kX3Jlc2V0KHN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwppbmRleCA4MWU2MjNhLi4xZmQ4MzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJkdmJkZXYuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9LY29uZmlnCmluZGV4IDhjMWFlZDcuLjg1YTIyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAogY29uZmlnIFNNU19TSUFOT19NRFRWCiAJdHJpc3RhdGUgIlNpYW5vIFNNUzF4eHggYmFzZWQgTURUViByZWNlaXZlciIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIElOUFVUCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJTlBVVCAmJiBIQVNfRE1BCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgb3IgTSBoZXJlIGlmIHlvdSBoYXZlIE1EVFYgcmVjZWl2ZXIgd2l0aCBhIFNpYW5vIGNoaXBzZXQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKaW5kZXggY2I4YTM1OC4uOGY4OGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTUyOSw2ICs1MjksMTIgQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OSUNFIH0sCiAJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMzAxKSwKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19WRU5JQ0UgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGI5MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YzAwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCmluZGV4IGMzZjU3OWQuLmM2Y2YxMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCkBAIC0xODEsMTIgKzE4MSwxMCBAQAogCiBzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX3VubXV0ZShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKIHsKLQltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKIAlpZiAoY2FyZC0+bXV0ZSkgewogCQlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeShjYXJkLCBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSk7CiAJCWNhcmQtPm11dGUgPSBmYWxzZTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCBnZW10ZWtfcGNpX2dldHNpZ25hbChzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA5MzlkMWU1Li5hNjcyNDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAotCWlmICghbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCisJaWYgKG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAogCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KQEAgLTM4MDAsMTEgKzM4MDAsMzQgQEAKIAkJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGl0ZW0tPnZiLmZpZWxkKSAmJgogCQkgICAgKGl0ZW0tPnZiLnF1ZXVlLm5leHQgIT0gJmJ0di0+Y2FwdHVyZSkpIHsKIAkJCWl0ZW0gPSBsaXN0X2VudHJ5KGl0ZW0tPnZiLnF1ZXVlLm5leHQsIHN0cnVjdCBidHR2X2J1ZmZlciwgdmIucXVldWUpOworCQkJLyogTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAtIE9ubHkgY2hlY2sKKwkJCSAqIGFuZCBzZXQgdXAgdGhlIGJvdHRvbSBmaWVsZCBpbiB0aGUgbG9naWMKKwkJCSAqIGJlbG93LiAgRG9uJ3QgZXZlciBkbyB0aGUgdG9wIGZpZWxkLiAgVGhpcworCQkJICogb2YgY291cnNlIG1lYW5zIHRoYXQgaWYgd2Ugc2V0IHVwIHRoZQorCQkJICogYm90dG9tIGZpZWxkIGluIHRoZSBhYm92ZSBjb2RlIHRoYXQgd2UnbGwKKwkJCSAqIGFjdHVhbGx5IHNraXAgYSBmaWVsZC4gIEJ1dCB0aGF0J3MgT0suCisJCQkgKiBIYXZpbmcgcHJvY2Vzc2VkIG9ubHkgYSBzaW5nbGUgYnVmZmVyIHRoaXMKKwkJCSAqIHRpbWUsIHRoZW4gdGhlIG5leHQgdGltZSBhcm91bmQgdGhlIGZpcnN0CisJCQkgKiBhdmFpbGFibGUgYnVmZmVyIHNob3VsZCBiZSBmb3IgYSB0b3AgZmllbGQuCisJCQkgKiBUaGF0IHdpbGwgdGhlbiBjYXVzZSB1cyBoZXJlIHRvIHNldCB1cCBhCisJCQkgKiB0b3AgdGhlbiBhIGJvdHRvbSBmaWVsZCBpbiB0aGUgbm9ybWFsIHdheS4KKwkJCSAqIFRoZSBhbHRlcm5hdGl2ZSB0byB0aGlzIHVuZGVyc3RhbmRpbmcgaXMKKwkJCSAqIHRoYXQgd2Ugc2V0IHVwIHRoZSBzZWNvbmQgYXZhaWxhYmxlIGJ1ZmZlcgorCQkJICogYXMgYSB0b3AgZmllbGQsIGJ1dCB0aGF0J3Mgb3V0IG9mIG9yZGVyCisJCQkgKiBzaW5jZSB0aGlzIGRyaXZlciBhbHdheXMgcHJvY2Vzc2VzIHRoZSB0b3AKKwkJCSAqIGZpZWxkIGZpcnN0IC0gdGhlIGVmZmVjdCB3aWxsIGJlIHRoZSB0d28KKwkJCSAqIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIHdyb25nIG9yZGVyLAorCQkJICogd2l0aCB0aGUgc2Vjb25kIGJ1ZmZlciBhbHNvIGJlaW5nIGRlbGF5ZWQKKwkJCSAqIGJ5IG9uZSBmaWVsZCB0aW1lIChvd2luZyB0byB0aGUgZmlmbyBuYXR1cmUKKwkJCSAqIG9mIHZpZGVvYnVmKS4gIFdvcnNlIHN0aWxsLCB3ZSdsbCBiZSBzdHVjaworCQkJICogZG9pbmcgZmllbGRzIG91dCBvZiBvcmRlciBub3cgZXZlcnkgdGltZQorCQkJICogdW50aWwgc29tZXRoaW5nIGVsc2UgY2F1c2VzIGEgZmllbGQgdG8gYmUKKwkJCSAqIGRyb3BwZWQuICBCeSBlZmZlY3RpdmVseSBmb3JjaW5nIGEgZmllbGQgdG8KKwkJCSAqIGRyb3AgdGhpcyB3YXkgdGhlbiB3ZSBhbHdheXMgZ2V0IGJhY2sgaW50bworCQkJICogc3luYyB3aXRoaW4gYSBzaW5nbGUgZnJhbWUgdGltZS4gIChPdXQgb2YKKwkJCSAqIG9yZGVyIGZpZWxkcyBjYW4gc2NyZXcgdXAgZGVpbnRlcmxhY2luZworCQkJICogYWxnb3JpdGhtcy4pICovCiAJCQlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoaXRlbS0+dmIuZmllbGQpKSB7Ci0JCQkJaWYgKE5VTEwgPT0gc2V0LT50b3AgJiYKLQkJCQkgICAgVjRMMl9GSUVMRF9UT1AgPT0gaXRlbS0+dmIuZmllbGQpIHsKLQkJCQkJc2V0LT50b3AgPSBpdGVtOwotCQkJCX0KIAkJCQlpZiAoTlVMTCA9PSBzZXQtPmJvdHRvbSAmJgogCQkJCSAgICBWNEwyX0ZJRUxEX0JPVFRPTSA9PSBpdGVtLT52Yi5maWVsZCkgewogCQkJCQlzZXQtPmJvdHRvbSA9IGl0ZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKaW5kZXggYzAxNWRhOC4uZDE0Y2ZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYwpAQCAtMTQyNiw3ICsxNDI2LDYgQEAKIAlzdHJ1Y3QgdnBpZl9kaXNwbGF5X2NvbmZpZyAqY29uZmlnOwogCWludCBpLCBqID0gMCwgaywgcSwgbSwgZXJyID0gMDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOwotCXN0cnVjdCB2cGlmX2NvbmZpZyAqY29uZmlnOwogCXN0cnVjdCBjb21tb25fb2JqICpjb21tb247CiAJc3RydWN0IGNoYW5uZWxfb2JqICpjaDsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDdiZDhhNzAuLmFjOTQ3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC0zODMsNiArMzgzLDExIEBACiAKIHN0YXRpYyBpbnQgc25kX2VtMjh4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogeworCXN0cnVjdCBlbTI4eHggKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRldi0+YWRldi5od3B0cl9kb25lX2NhcHR1cmUgPSAwOworCWRldi0+YWRldi5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggYmRiMjQ5Yi4uYzBmZDVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTE1ODQsOCArMTU4NCw4IEBACiAJW0VNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YXSA9IHsKIAkJLm5hbWUgICAgICAgICAgPSAiUmVkZG8gRFZCLUMgVVNCIFRWIEJveCIsCiAJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfZ3BpbyAgICA9IHJlZGRvX2R2Yl9jX3VzYl9ib3gsCiAJCS5oYXNfZHZiICAgICAgID0gMSwKLQkJLmR2Yl9ncGlvICAgICAgPSByZWRkb19kdmJfY191c2JfYm94LAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggNTk0MDBlOC4uYTI3YWZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0zNSwxMiArMzUsMjUgQEAKICAgICBjb25zdAogCXN0cnVjdCBkbWlfc3lzdGVtX2lkIHM1azRhYV92ZmxpcF9kbWlfdGFibGVbXSA9IHsKIAl7CisJCS5pZGVudCA9ICJCUlVORUlOSVQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkJSVU5FTklUIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkJSVU5FTklUIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFUlNJT04sICIwMDAzMEQwMDAwMDAwMDAxIikKKwkJfQorCX0sIHsKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYYSAyNTI4IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGEgMjUyOCIpCiAJCX0KIAl9LCB7CisJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGkgMjUyOCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFhpIDI1MjgiKQorCQl9CisJfSwgewogCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhpIDI1NTAiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLApAQCAtNTcsNiArNzAsMTMgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyby1TdGFyIEludGVybmF0aW9uYWwiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiR1g3MDAiKSwKKwkJCURNSV9NQVRDSChETUlfQklPU19EQVRFLCAiMTIvMDIvMjAwOCIpCisJCX0KKwl9LCB7CisJCS5pZGVudCA9ICJNU0kgR1g3MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAogCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIwNy8yNi8yMDA3IikKIAkJfQogCX0sIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwppbmRleCAxNDBjOGYzLi5mODMyOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCkBAIC00ODMsNyArNDgzLDcgQEAKIAkJZGF0YVszXSA9IDB4MmM7CQkJICAgLyogcmVnIDIsIEggc2l6ZS84ICovCiAJCWRhdGFbNF0gPSAweDQ4OwkJCSAgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNjsJCQkgICAvKiByZWcgNSwgSCBzdGFydCAgKi8KLQkJZGF0YVs4XSA9IDB4MDYgKyBzZC0+c2Vuc29yX3R5cGU7ICAvKiByZWcgNywgViBzdGFydCAgKi8KKwkJZGF0YVs4XSA9IDB4MDYgLSBzZC0+c2Vuc29yX3R5cGU7ICAvKiByZWcgNywgViBzdGFydCAgKi8KIAkJYnJlYWs7CiAJfQogCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAxMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggMmY2ZTEzNS4uYTVjMTkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMjkxOSw3ICsyOTE5LDcgQEAKIAkvKiBBIGZhbHNlIHBvc2l0aXZlIGhlcmUgaXMgbGlrZWx5LCB1bnRpbCBPVlQgZ2l2ZXMgbWUKIAkgKiB0aGUgZGVmaW5pdGl2ZSBTT0YvRU9GIGZvcm1hdCAqLwogCWlmICgoIShkYXRhWzBdIHwgZGF0YVsxXSB8IGRhdGFbMl0gfCBkYXRhWzNdIHwgZGF0YVs1XSkpICYmIGRhdGFbNl0pIHsKLQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKIAkJc2QtPnBhY2tldF9uciA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKaW5kZXggNjU0ODlkNi4uYmZhZTYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC0zOTQsNyArMzk0LDggQEAKIAkJCVBERUJVRyhEX1BBQ0ssICJFbmQgb2YgZnJhbWUgZGV0ZWN0ZWQiKTsKIAogCQkJLyogQ29tcGxldGUgdGhlIGxhc3QgZnJhbWUgKGlmIGFueSkgKi8KLQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CisJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQkJZnJhbWUsIGRhdGEsIDApOwogCiAJCQlpZiAoY2h1bmtfbGVuKQogCQkJCVBERUJVRyhEX0VSUiwgIkNodW5rIGxlbmd0aCBpcyAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCmluZGV4IDVmMzc5NTIuLjcyODAyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKaW5kZXggZGZmMmU1ZS4uN2RiODJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggNjk1MmU5Ni4uNTFiNjgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgpAQCAtMTQzMiw3ICsxNDMzLDkgQEAKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAogCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7Ci0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZjYW1fZik7CisJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJKnBpeCA9IGNhbV9mLmZtdC5waXg7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDllMzI2MmMuLjJjMGJiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTU5OCwxMSArNTk4LDYgQEAKIAlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwKIAkJCSBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yi5xdWV1ZSk7CiAKLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+dmIuZG9uZSkpIHsKLQkJLyogbm8gb25lIGFjdGl2ZSAqLwotCQlyYyA9IC0xOwotCQlnb3RvIHVubG9jazsKLQl9CiAJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CiAJZHByaW50aygxMDAsICJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnZiLmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggNzExNDViZi4uMDkwMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zNDI4LDYgKzM0MjgsNyBAQAogCQkudHVuZXJfY29uZmlnICAgPSAzLAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19TRVJJQUwsCisJCS50c19mb3JjZV92YWwgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMSBpcyBhbiBJTlBVVCAqLwogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggM2ZhNjUyMi4uMDM0ODhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC0yNjIsMTEgKzI2MiwxMyBAQAogCXN3aXRjaCAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfdHlwZSkgewogCWNhc2UgU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHhkOCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2Yyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2YyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMHhiYyk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAyKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA2ZWUzZTliLi5mODY5N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTM2MCw2ICszNjAsNyBAQAogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CiAJZW51bSBzYWE3MTM0X21wZWdfdHNfdHlwZSB0c190eXBlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgdHNfZm9yY2VfdmFsOjE7CiB9OwogCiAjZGVmaW5lIGNhcmRfaGFzX3JhZGlvKGRldikgICAoTlVMTCAhPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpby5uYW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwppbmRleCBjNDU5NjZlLi45YzFkM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAkvKiBQcmVwYXJlIHNvbWUgYmFzaWMgY29tbWFuZC9yZXNwb25zZSBzdHJ1Y3R1cmVzICovCiAJbWVtc2V0KCZjb21tYW5kX3QsIDAsIHNpemVvZihjb21tYW5kX3QpKTsKLQltZW1zZXQoJnJlc3BvbnNlX3QsIDAsIHNpemVvZigmcmVzcG9uc2VfdCkpOworCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKHJlc3BvbnNlX3QpKTsKIAlwY29tbWFuZF90ID0gJmNvbW1hbmRfdDsKIAlwcmVzcG9uc2VfdCA9ICZyZXNwb25zZV90OwogCWNvbW1hbmRfdC5pZCA9IGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDY1YWM0NzQuLjljOGI3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KQEAgLTExNzMsOCArMTE3NCw4IEBACiAJd2lkdGhfaW4gPSBzY2FsZV91cChjYW0tPmNldV9yZWN0LndpZHRoLCAqc2NhbGVfaCk7CiAJaGVpZ2h0X2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC5oZWlnaHQsICpzY2FsZV92KTsKIAotCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3Qud2lkdGgsIGljZC0+dXNlcl93aWR0aCk7Ci0JKnNjYWxlX3YgPSBjYWxjX2dlbmVyaWNfc2NhbGUoY2FtLT5jZXVfcmVjdC5oZWlnaHQsIGljZC0+dXNlcl9oZWlnaHQpOworCSpzY2FsZV9oID0gY2FsY19nZW5lcmljX3NjYWxlKHdpZHRoX2luLCBpY2QtPnVzZXJfd2lkdGgpOworCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGhlaWdodF9pbiwgaWNkLT51c2VyX2hlaWdodCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MjMsMTEgKzE3MjQsMTIgQEAKIAogCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcigmcGNkZXYtPmljaSk7CiAJaWYgKGVycikKLQkJZ290byBleGl0X2ZyZWVfaXJxOworCQlnb3RvIGV4aXRfZnJlZV9jbGs7CiAKIAlyZXR1cm4gMDsKIAotZXhpdF9mcmVlX2lycToKK2V4aXRfZnJlZV9jbGs6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWZyZWVfaXJxKHBjZGV2LT5pcnEsIHBjZGV2KTsKIGV4aXRfcmVsZWFzZV9tZW06CiAJaWYgKHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSkpCkBAIC0xNzQ3LDYgKzE3NDksNyBAQAogCQkJCQlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYsIGljaSk7CiAKIAlzb2NfY2FtZXJhX2hvc3RfdW5yZWdpc3Rlcihzb2NfaG9zdCk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWZyZWVfaXJxKHBjZGV2LT5pcnEsIHBjZGV2KTsKIAlpZiAocGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKSkKIAkJZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KCZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA1OWFhN2EzLi45NWZkZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMTA5Nyw2ICsxMDk3LDEzIEBACiAJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2Nyb3AsIGEpOwogfQogCitzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2RldmljZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGRhdGEpCit7CisJZGV2LT5wbGF0Zm9ybV9kYXRhCT0gcGRhdGE7CisJZGV2LT5idXMJCT0gJnNvY19jYW1lcmFfYnVzX3R5cGU7CisJZGV2LT5yZWxlYXNlCQk9IGR1bW15X3JlbGVhc2U7Cit9CisKIGludCBzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKml4OwpAQCAtMTE1OCwxNSArMTE2NSwxOSBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpY2QsICZkZXZpY2VzLCBsaXN0KSB7CiAJCWlmIChpY2QtPmlmYWNlID09IGljaS0+bnIpIHsKKwkJCXZvaWQgKnBkYXRhID0gaWNkLT5kZXYucGxhdGZvcm1fZGF0YTsKIAkJCS8qIFRoZSBidXMtPnJlbW92ZSB3aWxsIGJlIGNhbGxlZCAqLwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljZC0+ZGV2KTsKLQkJCS8qIE5vdCBiZWZvcmUgZGV2aWNlX3VucmVnaXN0ZXIoKSwgLnJlbW92ZQotCQkJICogbmVlZHMgcGFyZW50IHRvIGNhbGwgaWNpLT5vcHMtPnJlbW92ZSgpICovCi0JCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOwotCi0JCQkvKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQotCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQiICovCi0JCQltZW1zZXQoJmljZC0+ZGV2LmtvYmosIDAsIHNpemVvZihpY2QtPmRldi5rb2JqKSk7CisJCQkvKgorCQkJICogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCisJCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkuCisJCQkgKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQorCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQsIiBzaW5jZSAyLjYuMzIKKwkJCSAqIHRoaXMgaXMgYWxzbyBuZWVkZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUKKwkJCSAqIGRldmljZSBwcml2YXRlIGRhdGEuCisJCQkgKi8KKwkJCW1lbXNldCgmaWNkLT5kZXYsIDAsIHNpemVvZihpY2QtPmRldikpOworCQkJc29jX2NhbWVyYV9kZXZpY2VfaW5pdCgmaWNkLT5kZXYsIHBkYXRhKTsKIAkJfQogCX0KIApAQCAtMTE5OCwxMCArMTIwOSw3IEBACiAJCSAqIG1hbiwgc3RheSByZWFzb25hYmxlLi4uICovCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWNkLT5kZXZudW0gPSBudW07Ci0JaWNkLT5kZXYuYnVzID0gJnNvY19jYW1lcmFfYnVzX3R5cGU7Ci0KLQlpY2QtPmRldi5yZWxlYXNlCT0gZHVtbXlfcmVsZWFzZTsKKwlpY2QtPmRldm51bQkJPSBudW07CiAJaWNkLT51c2VfY291bnQJCT0gMDsKIAlpY2QtPmhvc3RfcHJpdgkJPSBOVUxMOwogCW11dGV4X2luaXQoJmljZC0+dmlkZW9fbG9jayk7CkBAIC0xMzA5LDEyICsxMzE3LDEzIEBACiAJaWNkLT5pZmFjZSA9IGljbC0+YnVzX2lkOwogCWljZC0+cGRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaWNkKTsKLQlpY2QtPmRldi5wbGF0Zm9ybV9kYXRhID0gaWNsOwogCiAJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlc2NkZXZyZWc7CiAKKwlzb2NfY2FtZXJhX2RldmljZV9pbml0KCZpY2QtPmRldiwgaWNsKTsKKwogCWljZC0+dXNlcl93aWR0aAkJPSBERUZBVUxUX1dJRFRIOwogCWljZC0+dXNlcl9oZWlnaHQJPSBERUZBVUxUX0hFSUdIVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggYzMyMjVhNS4uMWI4OTczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlfX3MzMiB2YWx1ZSwgX191OCAqZGF0YSkKIHsKIAlkYXRhWzBdID0gdmFsdWUgPT0gMCA/IDAgOiAodmFsdWUgPiAwKSA/IDEgOiAweGZmOwotCWRhdGFbMl0gPSBtaW4oYWJzKHZhbHVlKSwgMHhmZik7CisJZGF0YVsyXSA9IG1pbigoaW50KWFicyh2YWx1ZSksIDB4ZmYpOwogfQogCiBzdGF0aWMgc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgdXZjX2N0cmxfbWFwcGluZ3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggZjk2MGU4ZS4uYTZlNDFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTkwLDcgKzkwLDggQEAKIAkJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKIAotCWlmIChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKKwlpZiAoIShmb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpICYmCisJICAgIHN0cmVhbS0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfRklYX0JBTkRXSURUSCAmJgogCSAgICBzdHJlYW0tPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgewogCQl1MzIgaW50ZXJ2YWw7CiAJCXUzMiBiYW5kd2lkdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCmluZGV4IDYzNWZmYzcuLmMzMDY1YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KIAogc3RydWN0IHZpZGVvYnVmX2RtYV9jb250aWdfbWVtb3J5IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKaW5kZXggZTgzMmU5Ny4uYTFjNDdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQkJdHdsLT5jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKIAkJCQkJdHdsLT5hZGRyZXNzKTsKIAkJCWlmICghdHdsLT5jbGllbnQpIHsKLQkJCQlkZXZfZXJyKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCQkiY2FuJ3QgYXR0YWNoIGNsaWVudCAlZFxuIiwgaSk7CiAJCQkJc3RhdHVzID0gLUVOT01FTTsKIAkJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYwppbmRleCA0OWI3ODg1Li43ZjI3NTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMKQEAgLTI5LDcgKzI5LDcgQEAKIC8qIEN1cnJlbnQgc2V0dGluZ3MgLSB2YWx1ZXMgYXJlIDIqMl4ocmVnX3ZhbC80KSBtaWNyb2FtcHMuICBUaGVzZSBhcmUKICAqIGV4cG9ydGVkIHNpbmNlIHRoZXkgYXJlIHVzZWQgYnkgbXVsdGlwbGUgZHJpdmVycy4KICAqLwotaW50IHdtODMxeF9pc2lua3ZfdmFsdWVzW1dNODMxWF9JU0lOS19NQVhfSVNFTF0gPSB7CitpbnQgd204MzF4X2lzaW5rdl92YWx1ZXNbV004MzFYX0lTSU5LX01BWF9JU0VMICsgMV0gPSB7CiAJMiwKIAkyLAogCTMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKaW5kZXggZDMwMTVkZi4uYWMwNTZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwpAQCAtNTA3LDYgKzUwNyw4IEBACiB7CiAJaW50IGksIHJldDsKIAorCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOworCiAJaWYgKCFpcnEpIHsKIAkJZGV2X3dhcm4od204MzF4LT5kZXYsCiAJCQkgIk5vIGludGVycnVwdCBzcGVjaWZpZWQgLSBmdW5jdGlvbmFsaXR5IGxpbWl0ZWRcbiIpOwpAQCAtNTIxLDcgKzUyMyw2IEBACiAJfQogCiAJd204MzF4LT5pcnEgPSBpcnE7Ci0JbXV0ZXhfaW5pdCgmd204MzF4LT5pcnFfbG9jayk7CiAJSU5JVF9XT1JLKCZ3bTgzMXgtPmlycV93b3JrLCB3bTgzMXhfaXJxX3dvcmtlcik7CiAKIAkvKiBNYXNrIHRoZSBpbmRpdmlkdWFsIGludGVycnVwdCBzb3VyY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL2F0MjQuYyBiL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jCmluZGV4IGRiMzlmNGEuLjJjYjI3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbMl07CiAJdTggbXNnYnVmWzJdOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCByZWFkX3RpbWU7CiAJaW50IHN0YXR1cywgaTsKIAogCW1lbXNldChtc2csIDAsIHNpemVvZihtc2cpKTsKQEAgLTE4Myw0NyArMTg0LDYwIEBACiAJaWYgKGNvdW50ID4gaW9fbGltaXQpCiAJCWNvdW50ID0gaW9fbGltaXQ7CiAKLQkvKiBTbWFsbGVyIGVlcHJvbXMgY2FuIHdvcmsgZ2l2ZW4gc29tZSBTTUJ1cyBleHRlbnNpb24gY2FsbHMgKi8KIAlpZiAoYXQyNC0+dXNlX3NtYnVzKSB7CisJCS8qIFNtYWxsZXIgZWVwcm9tcyBjYW4gd29yayBnaXZlbiBzb21lIFNNQnVzIGV4dGVuc2lvbiBjYWxscyAqLwogCQlpZiAoY291bnQgPiBJMkNfU01CVVNfQkxPQ0tfTUFYKQogCQkJY291bnQgPSBJMkNfU01CVVNfQkxPQ0tfTUFYOwotCQlzdGF0dXMgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIG9mZnNldCwKLQkJCQljb3VudCwgYnVmKTsKLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJzbWJ1cyByZWFkICV6dUAlZCAtLT4gJWRcbiIsCi0JCQkJY291bnQsIG9mZnNldCwgc3RhdHVzKTsKLQkJcmV0dXJuIChzdGF0dXMgPCAwKSA/IC1FSU8gOiBzdGF0dXM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2hlbiB3ZSBoYXZlIGEgYmV0dGVyIGNob2ljZSB0aGFuIFNNQnVzIGNhbGxzLCB1c2UgYQorCQkgKiBjb21iaW5lZCBJMkMgbWVzc2FnZS4gV3JpdGUgYWRkcmVzczsgdGhlbiByZWFkIHVwIHRvCisJCSAqIGlvX2xpbWl0IGRhdGEgYnl0ZXMuIE5vdGUgdGhhdCByZWFkIHBhZ2Ugcm9sbG92ZXIgaGVscHMgdXMKKwkJICogaGVyZSAodW5saWtlIHdyaXRlcykuIG1zZ2J1ZiBpcyB1OCBhbmQgd2lsbCBjYXN0IHRvIG91cgorCQkgKiBuZWVkcy4KKwkJICovCisJCWkgPSAwOworCQlpZiAoYXQyNC0+Y2hpcC5mbGFncyAmIEFUMjRfRkxBR19BRERSMTYpCisJCQltc2didWZbaSsrXSA9IG9mZnNldCA+PiA4OworCQltc2didWZbaSsrXSA9IG9mZnNldDsKKworCQltc2dbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwkJbXNnWzBdLmJ1ZiA9IG1zZ2J1ZjsKKwkJbXNnWzBdLmxlbiA9IGk7CisKKwkJbXNnWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJCW1zZ1sxXS5mbGFncyA9IEkyQ19NX1JEOworCQltc2dbMV0uYnVmID0gYnVmOworCQltc2dbMV0ubGVuID0gY291bnQ7CiAJfQogCiAJLyoKLQkgKiBXaGVuIHdlIGhhdmUgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gU01CdXMgY2FsbHMsIHVzZSBhIGNvbWJpbmVkCi0JICogSTJDIG1lc3NhZ2UuIFdyaXRlIGFkZHJlc3M7IHRoZW4gcmVhZCB1cCB0byBpb19saW1pdCBkYXRhIGJ5dGVzLgotCSAqIE5vdGUgdGhhdCByZWFkIHBhZ2Ugcm9sbG92ZXIgaGVscHMgdXMgaGVyZSAodW5saWtlIHdyaXRlcykuCi0JICogbXNnYnVmIGlzIHU4IGFuZCB3aWxsIGNhc3QgdG8gb3VyIG5lZWRzLgorCSAqIFJlYWRzIGZhaWwgaWYgdGhlIHByZXZpb3VzIHdyaXRlIGRpZG4ndCBjb21wbGV0ZSB5ZXQuIFdlIG1heQorCSAqIGxvb3AgYSBmZXcgdGltZXMgdW50aWwgdGhpcyBvbmUgc3VjY2VlZHMsIHdhaXRpbmcgYXQgbGVhc3QKKwkgKiBsb25nIGVub3VnaCBmb3Igb25lIGVudGlyZSBwYWdlIHdyaXRlIHRvIHdvcmsuCiAJICovCi0JaSA9IDA7Ci0JaWYgKGF0MjQtPmNoaXAuZmxhZ3MgJiBBVDI0X0ZMQUdfQUREUjE2KQotCQltc2didWZbaSsrXSA9IG9mZnNldCA+PiA4OwotCW1zZ2J1ZltpKytdID0gb2Zmc2V0OworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh3cml0ZV90aW1lb3V0KTsKKwlkbyB7CisJCXJlYWRfdGltZSA9IGppZmZpZXM7CisJCWlmIChhdDI0LT51c2Vfc21idXMpIHsKKwkJCXN0YXR1cyA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgb2Zmc2V0LAorCQkJCQljb3VudCwgYnVmKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMik7CisJCQlpZiAoc3RhdHVzID09IDIpCisJCQkJc3RhdHVzID0gY291bnQ7CisJCX0KKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJyZWFkICV6dUAlZCAtLT4gJWQgKCVsZClcbiIsCisJCQkJY291bnQsIG9mZnNldCwgc3RhdHVzLCBqaWZmaWVzKTsKIAotCW1zZ1swXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCW1zZ1swXS5idWYgPSBtc2didWY7Ci0JbXNnWzBdLmxlbiA9IGk7CisJCWlmIChzdGF0dXMgPT0gY291bnQpCisJCQlyZXR1cm4gY291bnQ7CiAKLQltc2dbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQltc2dbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQltc2dbMV0uYnVmID0gYnVmOwotCW1zZ1sxXS5sZW4gPSBjb3VudDsKKwkJLyogUkVWSVNJVDogYXQgSFo9MTAwLCB0aGlzIGlzIHNsb29vb3cgKi8KKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKHJlYWRfdGltZSwgdGltZW91dCkpOwogCi0Jc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKLQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImkyYyByZWFkICV6dUAlZCAtLT4gJWRcbiIsCi0JCQljb3VudCwgb2Zmc2V0LCBzdGF0dXMpOwotCi0JaWYgKHN0YXR1cyA9PSAyKQotCQlyZXR1cm4gY291bnQ7Ci0JZWxzZSBpZiAoc3RhdHVzID49IDApCi0JCXJldHVybiAtRUlPOwotCWVsc2UKLQkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIAogc3RhdGljIHNzaXplX3QgYXQyNF9yZWFkKHN0cnVjdCBhdDI0X2RhdGEgKmF0MjQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCmluZGV4IGNjZDQ0MDguLjNmMjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jCkBAIC0xNjEsMTQgKzE2MSwxNSBAQAogc3RhdGljIHNzaXplX3Qgb3B0aW9uc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWNoYXIgYnVmWzgwXTsKKwljaGFyIGJ1ZlsyMF07CiAKLQlpZiAoc3RybmNweV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBzaXplb2YoYnVmKSAtIDEpIDwgMCkKKwlpZiAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2NvdW50IC0gMV0gPSAnXDAnOwotCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCi0JCWdydV9vcHRpb25zID0gdmFsOworCWJ1Zltjb3VudF0gPSAnXDAnOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZncnVfb3B0aW9ucykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKaW5kZXggYzc2Njc3YS4uYjViYmU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCkBAIC0xMDYsNyArMTA2LDggQEAKIAlpbnQgbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobXEtPm1tcl9ibGFkZSk7CiAKICNpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKLQltcS0+aXJxID0gdXZfc2V0dXBfaXJxKGlycV9uYW1lLCBjcHUsIG1xLT5tbXJfYmxhZGUsIG1xLT5tbXJfb2Zmc2V0KTsKKwltcS0+aXJxID0gdXZfc2V0dXBfaXJxKGlycV9uYW1lLCBjcHUsIG1xLT5tbXJfYmxhZGUsIG1xLT5tbXJfb2Zmc2V0LAorCQkJVVZfQUZGSU5JVFlfQ1BVKTsKIAlpZiAobXEtPmlycSA8IDApIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInV2X3NldHVwX2lycSgpIHJldHVybmVkIGVycm9yPSVkXG4iLAogCQkJLW1xLT5pcnEpOwpAQCAtMTM2LDcgKzEzNyw3IEBACiB4cGNfcmVsZWFzZV9ncnVfbXFfaXJxX3V2KHN0cnVjdCB4cGNfZ3J1X21xX3V2ICptcSkKIHsKICNpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKLQl1dl90ZWFyZG93bl9pcnEobXEtPmlycSwgbXEtPm1tcl9ibGFkZSwgbXEtPm1tcl9vZmZzZXQpOworCXV2X3RlYXJkb3duX2lycShtcS0+aXJxKTsKIAogI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCiAJaW50IG1tcl9wbm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwppbmRleCBlNTU2ZDQyLi42MzkyNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCkBAIC03Miw3ICs3Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfbWNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IGU3YTMzMWQuLmI4ZmQ3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNTI5LDYgKzE1MjksNyBAQAogCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIAogCW1tY19vbWFwX2ZjbGtfZW5hYmxlKGhvc3QsIDApOworCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJY2xrX3B1dChob3N0LT5mY2xrKTsKIAljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKIAljbGtfcHV0KGhvc3QtPmljbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCA0NDg3Y2MwLi4wYWVjYWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtMjAxMyw3ICsyMDEzLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaHNtbWNfaW5pdCh2b2lkKQogewogCS8qIFJlZ2lzdGVyIHRoZSBNTUMgZHJpdmVyICovCi0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9oc21tY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXBfaHNtbWNfZHJpdmVyLCBvbWFwX2hzbW1jX3Byb2JlKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfaHNtbWNfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKaW5kZXggYjAwZDY3My4uOWZiNDgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCkBAIC03NjAsNiArNzYwLDggQEAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CisKIAkJaWYgKGhvc3QtPnBkYXRhKSB7CiAJCQlncGlvX2NkID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9kZXRlY3Q7CiAJCQlncGlvX3JvID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybzsKQEAgLTc3OSw4ICs3ODEsNiBAQAogCQlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmV4aXQpCiAJCQlob3N0LT5wZGF0YS0+ZXhpdCgmcGRldi0+ZGV2LCBtbWMpOwogCi0JCW1tY19yZW1vdmVfaG9zdChtbWMpOwotCiAJCXB4YW1jaV9zdG9wX2Nsb2NrKGhvc3QpOwogCQl3cml0ZWwoVFhGSUZPX1dSX1JFUXxSWEZJRk9fUkRfUkVRfENMS19JU19PRkZ8U1RPUF9DTUR8CiAJCSAgICAgICBFTkRfQ01EX1JFU3xQUkdfRE9ORXxEQVRBX1RSQU5fRE9ORSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA4NDFlMDg1Li4xNGJlMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC00ODYsNiArNDg2LDcgQEAKIAogY29uZmlnIE1URF9HUElPX0FERFIKIAl0cmlzdGF0ZSAiR1BJTy1hc3Npc3RlZCBGbGFzaCBDaGlwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRU5FUklDX0dQSU8gfHwgR1BJT0xJQgogCWRlcGVuZHMgb24gTVREX0NPTVBMRVhfTUFQUElOR1MKIAlzZWxlY3QgTVREX1BBUlRJVElPTlMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCAxZDVjZjg2Li5hZTJmNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTU4LDQgKzU4LDYgQEAKIG9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfUkJUWDQ5MzkpCSs9IHJidHg0OTM5LWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfVk1VKQkJKz0gdm11LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfR1BJT19BRERSKQkrPSBncGlvLWFkZHItZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKaW5kZXggNDRlZjlhNC4uMWFkNWNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCkBAIC0xMyw3ICsxMyw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CkBAIC0yMyw5ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KICNkZWZpbmUgcHJfZGV2aW5pdChmbXQsIGFyZ3MuLi4pICh7IHN0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBjaGFyIF9fZm10W10gPSBmbXQ7IHByaW50ayhfX2ZtdCwgIyMgYXJncyk7IH0pCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImdwaW8tYWRkci1mbGFzaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IGQ2MDBjMmQuLjY4OWQ2YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtMTE4LDExICsxMTgsOSBAQAogCQlERUJVRygyLCAiUmVtYXBwaW5nIHdpbmRvdyBmcm9tIDB4JTguOHggdG8gMHglOC44eCIsCiAJCSAgICAgIGRldi0+b2Zmc2V0LCBtcnEuQ2FyZE9mZnNldCk7CiAJCW1ycS5QYWdlID0gMDsKLQkJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZSh3aW4sICZtcnEpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWNzX2Vycm9yKGRldi0+cF9kZXYsIE1hcE1lbVBhZ2UsIHJldCk7CisJCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT5wX2Rldiwgd2luLCAmbXJxKTsKKwkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAkJZGV2LT5vZmZzZXQgPSBtcnEuQ2FyZE9mZnNldDsKIAl9CiAJcmV0dXJuIGRldi0+d2luX2Jhc2UgKyAodG8gJiAoZGV2LT53aW5fc2l6ZS0xKSk7CkBAIC0zMjcsOCArMzI1LDYgQEAKIAogCURFQlVHKDIsICJkZXYgPSAlcCBvbiA9ICVkIHZwcCA9ICVkXG4iLCBkZXYsIG9uLCBkZXYtPnZwcCk7CiAJcmV0ID0gcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKGxpbmssICZtb2QpOwotCWlmIChyZXQgIT0gMCkKLQkJY3NfZXJyb3IobGluaywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgcmV0KTsKIH0KIAogCkBAIC0zNDgsMTA3ICszNDQsMTE2IEBACiAJCQlpb3VubWFwKGRldi0+d2luX2Jhc2UpOwogCQkJZGV2LT53aW5fYmFzZSA9IE5VTEw7CiAJCX0KLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLT53aW4pOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKIAorI2lmZGVmIENPTkZJR19NVERfREVCVUcKK3N0YXRpYyBpbnQgcGNtY2lhbXRkX2Npc3RwbF9mb3JtYXQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCXR1cGxlX3QgKnR1cGxlLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwljaXNwYXJzZV90IHBhcnNlOworCisJaWYgKCFwY21jaWFfcGFyc2VfdHVwbGUodHVwbGUsICZwYXJzZSkpIHsKKwkJY2lzdHBsX2Zvcm1hdF90ICp0ID0gJnBhcnNlLmZvcm1hdDsKKwkJKHZvaWQpdDsgLyogU2h1dCB1cCwgZ2NjICovCisJCURFQlVHKDIsICJGb3JtYXQgdHlwZTogJXUsIEVycm9yIERldGVjdGlvbjogJXUsIG9mZnNldCA9ICV1LCBsZW5ndGggPSV1IiwKKwkJCXQtPnR5cGUsIHQtPmVkYywgdC0+b2Zmc2V0LCB0LT5sZW5ndGgpOworCX0KKwlyZXR1cm4gLUVOT1NQQzsKK30KKworc3RhdGljIGludCBwY21jaWFtdGRfY2lzdHBsX2plZGVjKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQl0dXBsZV90ICp0dXBsZSwKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgaTsKKworCWlmICghcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCAmcGFyc2UpKSB7CisJCWNpc3RwbF9qZWRlY190ICp0ID0gJnBhcnNlLmplZGVjOworCQlmb3IgKGkgPSAwOyBpIDwgdC0+bmlkOyBpKyspCisJCQlERUJVRygyLCAiSkVERUM6IDB4JTAyeCAweCUwMngiLCB0LT5pZFtpXS5tZnIsIHQtPmlkW2ldLmluZm8pOworCX0KKwlyZXR1cm4gLUVOT1NQQzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHBjbWNpYW10ZF9jaXN0cGxfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQl0dXBsZV90ICp0dXBsZSwKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IHByaXZfZGF0YTsKKwljaXNwYXJzZV90IHBhcnNlOworCWNpc3RwbF9kZXZpY2VfdCAqdCA9ICZwYXJzZS5kZXZpY2U7CisJaW50IGk7CisKKwlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCAmcGFyc2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURFQlVHKDIsICJDb21tb24gbWVtb3J5OiIpOworCWRldi0+cGNtY2lhX21hcC5zaXplID0gdC0+ZGV2WzBdLnNpemU7CisJLyogZnJvbSBoZXJlIG9uOiBERUJVRyBvbmx5ICovCisJZm9yIChpID0gMDsgaSA8IHQtPm5kZXY7IGkrKykgeworCQlERUJVRygyLCAiUmVnaW9uICVkLCB0eXBlID0gJXUiLCBpLCB0LT5kZXZbaV0udHlwZSk7CisJCURFQlVHKDIsICJSZWdpb24gJWQsIHdwID0gJXUiLCBpLCB0LT5kZXZbaV0ud3ApOworCQlERUJVRygyLCAiUmVnaW9uICVkLCBzcGVlZCA9ICV1IG5zIiwgaSwgdC0+ZGV2W2ldLnNwZWVkKTsKKwkJREVCVUcoMiwgIlJlZ2lvbiAlZCwgc2l6ZSA9ICV1IGJ5dGVzIiwgaSwgdC0+ZGV2W2ldLnNpemUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21jaWFtdGRfY2lzdHBsX2dlbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJdHVwbGVfdCAqdHVwbGUsCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwY21jaWFtdGRfZGV2ICpkZXYgPSBwcml2X2RhdGE7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwljaXN0cGxfZGV2aWNlX2dlb190ICp0ID0gJnBhcnNlLmRldmljZV9nZW87CisJaW50IGk7CisKKwlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCAmcGFyc2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+cGNtY2lhX21hcC5iYW5rd2lkdGggPSB0LT5nZW9bMF0uYnVzd2lkdGg7CisJLyogZnJvbSBoZXJlIG9uOiBERUJVRyBvbmx5ICovCisJZm9yIChpID0gMDsgaSA8IHQtPm5nZW87IGkrKykgeworCQlERUJVRygyLCAicmVnaW9uOiAlZCBiYW5rd2lkdGggPSAldSIsIGksIHQtPmdlb1tpXS5idXN3aWR0aCk7CisJCURFQlVHKDIsICJyZWdpb246ICVkIGVyYXNlX2Jsb2NrID0gJXUiLCBpLCB0LT5nZW9baV0uZXJhc2VfYmxvY2spOworCQlERUJVRygyLCAicmVnaW9uOiAlZCByZWFkX2Jsb2NrID0gJXUiLCBpLCB0LT5nZW9baV0ucmVhZF9ibG9jayk7CisJCURFQlVHKDIsICJyZWdpb246ICVkIHdyaXRlX2Jsb2NrID0gJXUiLCBpLCB0LT5nZW9baV0ud3JpdGVfYmxvY2spOworCQlERUJVRygyLCAicmVnaW9uOiAlZCBwYXJ0aXRpb24gPSAldSIsIGksIHQtPmdlb1tpXS5wYXJ0aXRpb24pOworCQlERUJVRygyLCAicmVnaW9uOiAlZCBpbnRlcmxlYXZlID0gJXUiLCBpLCB0LT5nZW9baV0uaW50ZXJsZWF2ZSk7CisJfQorCXJldHVybiAwOworfQorCisKIHN0YXRpYyB2b2lkIGNhcmRfc2V0dGluZ3Moc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCAqbmV3X25hbWUpCiB7Ci0JaW50IHJjOwotCXR1cGxlX3QgdHVwbGU7Ci0JY2lzcGFyc2VfdCBwYXJzZTsKLQl1X2NoYXIgYnVmWzY0XTsKKwlpbnQgaTsKIAotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKLQotCXJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCXdoaWxlIChyYyA9PSAwKSB7Ci0JCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChyYyAhPSAwKSB7Ci0JCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJjKTsKLQkJCWJyZWFrOworCWlmIChwX2Rldi0+cHJvZF9pZFswXSkgeworCQlkZXYtPm10ZF9uYW1lWzBdID0gJ1wwJzsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKGkpCisJCQkJc3RyY2F0KGRldi0+bXRkX25hbWUsICIgIik7CisJCQlpZiAocF9kZXYtPnByb2RfaWRbaV0pCisJCQkJc3RyY2F0KGRldi0+bXRkX25hbWUsIHBfZGV2LT5wcm9kX2lkW2ldKTsKIAkJfQotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7Ci0JCWlmIChyYyAhPSAwKSB7Ci0JCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCByYyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCh0dXBsZS5UdXBsZUNvZGUpIHsKLQkJY2FzZSAgQ0lTVFBMX0ZPUk1BVDogewotCQkJY2lzdHBsX2Zvcm1hdF90ICp0ID0gJnBhcnNlLmZvcm1hdDsKLQkJCSh2b2lkKXQ7IC8qIFNodXQgdXAsIGdjYyAqLwotCQkJREVCVUcoMiwgIkZvcm1hdCB0eXBlOiAldSwgRXJyb3IgRGV0ZWN0aW9uOiAldSwgb2Zmc2V0ID0gJXUsIGxlbmd0aCA9JXUiLAotCQkJICAgICAgdC0+dHlwZSwgdC0+ZWRjLCB0LT5vZmZzZXQsIHQtPmxlbmd0aCk7Ci0JCQlicmVhazsKLQotCQl9Ci0KLQkJY2FzZSBDSVNUUExfREVWSUNFOiB7Ci0JCQljaXN0cGxfZGV2aWNlX3QgKnQgPSAmcGFyc2UuZGV2aWNlOwotCQkJaW50IGk7Ci0JCQlERUJVRygyLCAiQ29tbW9uIG1lbW9yeToiKTsKLQkJCWRldi0+cGNtY2lhX21hcC5zaXplID0gdC0+ZGV2WzBdLnNpemU7Ci0JCQlmb3IoaSA9IDA7IGkgPCB0LT5uZGV2OyBpKyspIHsKLQkJCQlERUJVRygyLCAiUmVnaW9uICVkLCB0eXBlID0gJXUiLCBpLCB0LT5kZXZbaV0udHlwZSk7Ci0JCQkJREVCVUcoMiwgIlJlZ2lvbiAlZCwgd3AgPSAldSIsIGksIHQtPmRldltpXS53cCk7Ci0JCQkJREVCVUcoMiwgIlJlZ2lvbiAlZCwgc3BlZWQgPSAldSBucyIsIGksIHQtPmRldltpXS5zcGVlZCk7Ci0JCQkJREVCVUcoMiwgIlJlZ2lvbiAlZCwgc2l6ZSA9ICV1IGJ5dGVzIiwgaSwgdC0+ZGV2W2ldLnNpemUpOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXNlIENJU1RQTF9WRVJTXzE6IHsKLQkJCWNpc3RwbF92ZXJzXzFfdCAqdCA9ICZwYXJzZS52ZXJzaW9uXzE7Ci0JCQlpbnQgaTsKLQkJCWlmKHQtPm5zKSB7Ci0JCQkJZGV2LT5tdGRfbmFtZVswXSA9ICdcMCc7Ci0JCQkJZm9yKGkgPSAwOyBpIDwgdC0+bnM7IGkrKykgewotCQkJCQlpZihpKQotCQkJCQkJc3RyY2F0KGRldi0+bXRkX25hbWUsICIgIik7Ci0JCQkJCXN0cmNhdChkZXYtPm10ZF9uYW1lLCB0LT5zdHIrdC0+b2ZzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCQlERUJVRygyLCAiRm91bmQgbmFtZTogJXMiLCBkZXYtPm10ZF9uYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSBDSVNUUExfSkVERUNfQzogewotCQkJY2lzdHBsX2plZGVjX3QgKnQgPSAmcGFyc2UuamVkZWM7Ci0JCQlpbnQgaTsKLQkJCWZvcihpID0gMDsgaSA8IHQtPm5pZDsgaSsrKSB7Ci0JCQkJREVCVUcoMiwgIkpFREVDOiAweCUwMnggMHglMDJ4IiwgdC0+aWRbaV0ubWZyLCB0LT5pZFtpXS5pbmZvKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSBDSVNUUExfREVWSUNFX0dFTzogewotCQkJY2lzdHBsX2RldmljZV9nZW9fdCAqdCA9ICZwYXJzZS5kZXZpY2VfZ2VvOwotCQkJaW50IGk7Ci0JCQlkZXYtPnBjbWNpYV9tYXAuYmFua3dpZHRoID0gdC0+Z2VvWzBdLmJ1c3dpZHRoOwotCQkJZm9yKGkgPSAwOyBpIDwgdC0+bmdlbzsgaSsrKSB7Ci0JCQkJREVCVUcoMiwgInJlZ2lvbjogJWQgYmFua3dpZHRoID0gJXUiLCBpLCB0LT5nZW9baV0uYnVzd2lkdGgpOwotCQkJCURFQlVHKDIsICJyZWdpb246ICVkIGVyYXNlX2Jsb2NrID0gJXUiLCBpLCB0LT5nZW9baV0uZXJhc2VfYmxvY2spOwotCQkJCURFQlVHKDIsICJyZWdpb246ICVkIHJlYWRfYmxvY2sgPSAldSIsIGksIHQtPmdlb1tpXS5yZWFkX2Jsb2NrKTsKLQkJCQlERUJVRygyLCAicmVnaW9uOiAlZCB3cml0ZV9ibG9jayA9ICV1IiwgaSwgdC0+Z2VvW2ldLndyaXRlX2Jsb2NrKTsKLQkJCQlERUJVRygyLCAicmVnaW9uOiAlZCBwYXJ0aXRpb24gPSAldSIsIGksIHQtPmdlb1tpXS5wYXJ0aXRpb24pOwotCQkJCURFQlVHKDIsICJyZWdpb246ICVkIGludGVybGVhdmUgPSAldSIsIGksIHQtPmdlb1tpXS5pbnRlcmxlYXZlKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJZGVmYXVsdDoKLQkJCURFQlVHKDIsICJVbmtub3duIHR1cGxlIGNvZGUgJWQiLCB0dXBsZS5UdXBsZUNvZGUpOwotCQl9Ci0KLQkJcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKKwkJREVCVUcoMiwgIkZvdW5kIG5hbWU6ICVzIiwgZGV2LT5tdGRfbmFtZSk7CiAJfQorCisjaWZkZWYgQ09ORklHX01URF9ERUJVRworCXBjbWNpYV9sb29wX3R1cGxlKHBfZGV2LCBDSVNUUExfRk9STUFULCBwY21jaWFtdGRfY2lzdHBsX2Zvcm1hdCwgTlVMTCk7CisJcGNtY2lhX2xvb3BfdHVwbGUocF9kZXYsIENJU1RQTF9KRURFQ19DLCBwY21jaWFtdGRfY2lzdHBsX2plZGVjLCBOVUxMKTsKKyNlbmRpZgorCXBjbWNpYV9sb29wX3R1cGxlKHBfZGV2LCBDSVNUUExfREVWSUNFLCBwY21jaWFtdGRfY2lzdHBsX2RldmljZSwgZGV2KTsKKwlwY21jaWFfbG9vcF90dXBsZShwX2RldiwgQ0lTVFBMX0RFVklDRV9HRU8sIHBjbWNpYW10ZF9jaXN0cGxfZ2VvLCBkZXYpOworCiAJaWYoIWRldi0+cGNtY2lhX21hcC5zaXplKQogCQlkZXYtPnBjbWNpYV9tYXAuc2l6ZSA9IE1BWF9QQ01DSUFfQUREUjsKIApAQCAtNDgxLDE2ICs0ODYsMTIgQEAKICAqIE1URCBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHBjbWNpYW10ZF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBOVUxMOwogCWNzX3N0YXR1c190IHN0YXR1czsKIAl3aW5fcmVxX3QgcmVxOwotCWludCBsYXN0X3JldCA9IDAsIGxhc3RfZm4gPSAwOwogCWludCByZXQ7CiAJaW50IGk7CiAJc3RhdGljIGNoYXIgKnByb2Jlc1tdID0geyAiamVkZWNfcHJvYmUiLCAiY2ZpX3Byb2JlIiB9OwpAQCAtNTI5LDcgKzUzMCw3IEBACiAJCWludCByZXQ7CiAJCURFQlVHKDIsICJyZXF1ZXN0aW5nIHdpbmRvdyB3aXRoIHNpemUgPSAlZEtpQiBtZW1zcGVlZCA9ICVkIiwKIAkJICAgICAgcmVxLlNpemUgPj4gMTAsIHJlcS5BY2Nlc3NTcGVlZCk7Ci0JCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKIAkJREVCVUcoMiwgInJldCA9ICVkIGRldi0+d2luX3NpemUgPSAlZCIsIHJldCwgZGV2LT53aW5fc2l6ZSk7CiAJCWlmKHJldCkgewogCQkJcmVxLlNpemUgPj49IDE7CkBAIC01NzcsNyArNTc4LDYgQEAKIAlERUJVRygyLCAiU2V0dGluZyBDb25maWd1cmF0aW9uIik7CiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCByZXQpOwogCQlpZiAoZGV2LT53aW5fYmFzZSkgewogCQkJaW91bm1hcChkZXYtPndpbl9iYXNlKTsKIAkJCWRldi0+d2luX2Jhc2UgPSBOVUxMOwpAQCAtNjUyLDggKzY1Miw3IEBACiAJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwogCXJldHVybiAwOwogCi0gY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyBmYWlsZWQ6CiAJZXJyKCJDUyBFcnJvciwgZXhpdGluZyIpOwogCXBjbWNpYW10ZF9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggZmRiOTdmMy4uZDdhNDc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0yMDksOCArMjA5LDggQEAKIAl9CiAJc3ViZGV2LT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTQTExMDAgZmxhc2g6IENGSSBkZXZpY2UgYXQgMHglMDhseCwgJWRNaUIsICIKLQkJIiVkLWJpdFxuIiwgcGh5cywgc3ViZGV2LT5tdGQtPnNpemUgPj4gMjAsCisJcHJpbnRrKEtFUk5fSU5GTyAiU0ExMTAwIGZsYXNoOiBDRkkgZGV2aWNlIGF0IDB4JTA4bHgsICV1TWlCLCAlZC1iaXRcbiIsCisJCXBoeXMsICh1bnNpZ25lZCkoc3ViZGV2LT5tdGQtPnNpemUgPj4gMjApLAogCQlzdWJkZXYtPm1hcC5iYW5rd2lkdGggKiA4KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggMjIxMTM4Ni4uMjk1N2NjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC03NjEsNiArNzYxLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycywgd2hpY2ggdXNlIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KQEAgLTc3Nyw2ICs3NzgsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIFdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nIGV2ZW4gd2hlbiBPT0IgaXNuJ3QgdXNlZC4KICAqLwpAQCAtODE4LDYgKzgyMCw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3dlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCiAJCQkJdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKQEAgLTkzOSw2ICs5NDIsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIE5vdCBmb3Igc3luZHJvbWUgY2FsY3VsYXRpbmcgZWNjIGNvbnRyb2xsZXJzIHdoaWNoIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQKICAqLwpAQCAtOTgzLDYgKzk4Nyw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogSGFyZHdhcmUgRUNDIGZvciBsYXJnZSBwYWdlIGNoaXBzLCByZXF1aXJlIE9PQiB0byBiZSByZWFkIGZpcnN0LgogICogRm9yIHRoaXMgRUNDIG1vZGUsIHRoZSB3cml0ZV9wYWdlIG1ldGhvZCBpcyByZS11c2VkIGZyb20gRUNDX0hXLgpAQCAtMTAzMSw2ICsxMDM2LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBUaGUgaHcgZ2VuZXJhdG9yIGNhbGN1bGF0ZXMgdGhlIGVycm9yIHN5bmRyb21lIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yCiAgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggZTFmN2QwYS4uMTRjZWMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgInViaS5oIgogCiAvKiBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgJ210ZD0nIHBhcmFtZXRlciAqLwpAQCAtMTI1Nyw3ICsxMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIAogCXJlc3VsdCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZHAsIDApOwotCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPCAwKSB7CisJaWYgKHN0ciA9PSBlbmRwIHx8IHJlc3VsdCA+PSBJTlRfTUFYKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVUJJIGVycm9yOiBpbmNvcnJlY3QgYnl0ZXMgY291bnQ6IFwiJXNcIlxuIiwKIAkJICAgICAgIHN0cik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKaW5kZXggZTcxNjFhZC4uOTBhZjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYworKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCkBAIC03OTQsMTYgKzc5NCwxNSBAQAogCQkgKiBudW1iZXIuCiAJCSAqLwogCQlpbWFnZV9zZXEgPSBiZTMyX3RvX2NwdShlY2gtPmltYWdlX3NlcSk7Ci0JCWlmICghc2ktPmltYWdlX3NlcV9zZXQpIHsKKwkJaWYgKCF1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEpCiAJCQl1YmktPmltYWdlX3NlcSA9IGltYWdlX3NlcTsKLQkJCXNpLT5pbWFnZV9zZXFfc2V0ID0gMTsKLQkJfSBlbHNlIGlmICh1YmktPmltYWdlX3NlcSAmJiB1YmktPmltYWdlX3NlcSAhPSBpbWFnZV9zZXEpIHsKKwkJaWYgKHViaS0+aW1hZ2Vfc2VxICYmIGltYWdlX3NlcSAmJgorCQkgICAgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CiAJCQl1YmlfZXJyKCJiYWQgaW1hZ2Ugc2VxdWVuY2UgbnVtYmVyICVkIGluIFBFQiAlZCwgIgogCQkJCSJleHBlY3RlZCAlZCIsIGltYWdlX3NlcSwgcG51bSwgdWJpLT5pbWFnZV9zZXEpOwogCQkJdWJpX2RiZ19kdW1wX2VjX2hkcihlY2gpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQogCX0KIAogCS8qIE9LLCB3ZSd2ZSBkb25lIHdpdGggdGhlIEVDIGhlYWRlciwgbGV0J3MgbG9vayBhdCB0aGUgVklEIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaCBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKaW5kZXggYmFiMzE2OS4uZmYxNzlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAorKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCkBAIC0xMDMsNyArMTAzLDYgQEAKICAqIEBlY19zdW06IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGVjX2NvdW50OiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBjb3JyX2NvdW50OiBjb3VudCBvZiBjb3JydXB0ZWQgUEVCcwotICogQGltYWdlX3NlcV9zZXQ6IGluZGljYXRlcyBAdWJpLT5pbWFnZV9zZXEgaXMga25vd24KICAqCiAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSByZXN1bHQgb2Ygc2Nhbm5pbmcgYW5kIG1heSBiZSB1c2VkIGJ5IG90aGVyCiAgKiBVQkkgc3ViLXN5c3RlbXMgdG8gYnVpbGQgZmluYWwgVUJJIGRhdGEgc3RydWN0dXJlcywgZnVydGhlciBlcnJvci1yZWNvdmVyeQpAQCAtMTI3LDcgKzEyNiw2IEBACiAJdWludDY0X3QgZWNfc3VtOwogCWludCBlY19jb3VudDsKIAlpbnQgY29ycl9jb3VudDsKLQlpbnQgaW1hZ2Vfc2VxX3NldDsKIH07CiAKIHN0cnVjdCB1YmlfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggNzEyNzc2MC4uYjJmNzFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC05NzUsNyArOTc1LDcgQEAKIAogY29uZmlnIEVUSE9DCiAJdHJpc3RhdGUgIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBIQVNfSU9NRU0KKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBIQVNfSU9NRU0gJiYgSEFTX0RNQQogCXNlbGVjdCBNSUkKIAlzZWxlY3QgUEhZTElCCiAJc2VsZWN0IENSQzMyCkBAIC0xNzQxLDYgKzE3NDEsNyBAQAogY29uZmlnIEtTODg1MV9NTEwKIAl0cmlzdGF0ZSAiTWljcmVsIEtTODg1MSBNTEwiCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KKwlzZWxlY3QgTUlJCiAJaGVscAogCSAgVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgZm9yIE1pY3JlbCBLUzg4NTEgQWRkcmVzcy9kYXRhIGJ1cwogCSAgbXVsdGlwbGV4ZWQgbmV0d29yayBjaGlwLgpAQCAtMjQ4Miw2ICsyNDgzLDggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHM2Z21hYy4KIAorc291cmNlICJkcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyIKKwogZW5kaWYgIyBORVRERVZfMTAwMAogCiAjCkBAIC0zMjMwLDQgKzMyMzMsMTIgQEAKIAkgIFRoaXMgaXMgdGhlIHZpcnR1YWwgbmV0d29yayBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGgKICAgICAgICAgICBsZ3Vlc3Qgb3IgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS4KIAorY29uZmlnIFZNWE5FVDMKKyAgICAgICB0cmlzdGF0ZSAiVk13YXJlIFZNWE5FVDMgZXRoZXJuZXQgZHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBJTkVUCisgICAgICAgaGVscAorICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVk13YXJlJ3Mgdm14bmV0MyB2aXJ0dWFsIGV0aGVybmV0IE5JQy4KKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZteG5ldDMuCisKIGVuZGlmICMgTkVUREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCBkODY2YjhjLi4yNDYzMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMiw2ICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggbmV0d29yayAoZXRoZXJjYXJkKSBkZXZpY2UgZHJpdmVycy4KICMKIAorb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm8KK29iai0kKENPTkZJR19NRElPKSArPSBtZGlvLm8KK29iai0kKENPTkZJR19QSFlMSUIpICs9IHBoeS8KKwogb2JqLSQoQ09ORklHX1RJX0RBVklOQ0lfRU1BQykgKz0gZGF2aW5jaV9lbWFjLm8KIAogb2JqLSQoQ09ORklHX0UxMDAwKSArPSBlMTAwMC8KQEAgLTI2LDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19FTklDKSArPSBlbmljLwogb2JqLSQoQ09ORklHX0pNRSkgKz0gam1lLm8KIG9iai0kKENPTkZJR19CRTJORVQpICs9IGJlbmV0Lworb2JqLSQoQ09ORklHX1ZNWE5FVDMpICs9IHZteG5ldDMvCiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXApAQCAtOTUsMTUgKzEwMCwxMiBAQAogb2JqLSQoQ09ORklHX0FEQVBURUNfU1RBUkZJUkUpICs9IHN0YXJmaXJlLm8KIG9iai0kKENPTkZJR19SSU9ORVQpICs9IHJpb25ldC5vCiBvYmotJChDT05GSUdfU0hfRVRIKSArPSBzaF9ldGgubworb2JqLSQoQ09ORklHX1NUTU1BQ19FVEgpICs9IHN0bW1hYy8KIAogIwogIyBlbmQgbGluayBvcmRlciBzZWN0aW9uCiAjCiAKLW9iai0kKENPTkZJR19NSUkpICs9IG1paS5vCi1vYmotJChDT05GSUdfTURJTykgKz0gbWRpby5vCi1vYmotJChDT05GSUdfUEhZTElCKSArPSBwaHkvCi0KIG9iai0kKENPTkZJR19TVU5EQU5DRSkgKz0gc3VuZGFuY2Uubwogb2JqLSQoQ09ORklHX0hBTUFDSEkpICs9IGhhbWFjaGkubwogb2JqLSQoQ09ORklHX05FVCkgKz0gU3BhY2UubyBsb29wYmFjay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDVmMGIwNWMuLmQ4MmE5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC0xMjA5LDcgKzEyMDksOCBAQAogCW1lbXNldChhcC0+aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhY2VfaW5mbykpOwogCW1lbXNldChhcC0+c2tiLCAwLCBzaXplb2Yoc3RydWN0IGFjZV9za2IpKTsKIAotCWlmIChhY2VfbG9hZF9maXJtd2FyZShkZXYpKQorCWVjb2RlID0gYWNlX2xvYWRfZmlybXdhcmUoZGV2KTsKKwlpZiAoZWNvZGUpCiAJCWdvdG8gaW5pdF9lcnJvcjsKIAogCWFwLT5md19ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IDJiZTQ5YzguLmIyNTQ2N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtNjI4LDE1ICs2MjgsNiBAQAogCWlmIChlcDkzeHhfYWxsb2NfYnVmZmVycyhlcCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGdlbmVyYXRlZCByYW5kb20gTUFDIGFkZHJlc3MgIgotCQkJIiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4LlxuIiwgZGV2LT5uYW1lLAotCQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwKLQkJCWRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ZGV2X2FkZHJbM10sCi0JCQlkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKLQl9Ci0KIAluYXBpX2VuYWJsZSgmZXAtPm5hcGkpOwogCiAJaWYgKGVwOTN4eF9zdGFydF9odyhkZXYpKSB7CkBAIC04NzcsNiArODY4LDkgQEAKIAllcC0+bWlpLm1kaW9fd3JpdGUgPSBlcDkzeHhfbWRpb193cml0ZTsKIAllcC0+bWRjX2Rpdmlzb3IgPSA0MDsJLyogTWF4IEhDTEsgMTAwIE1IeiwgbWluIE1ESU8gY2xrIDIuNSBNSHouICAqLwogCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDA0ZjYzYzcuLjNmNGI0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTM0LDYgKzM0LDcgQEAKICAqCiAgKgogICovCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDg3LDcgKzEwODgsMTQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KSkgIT0gMCkgeworCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVyciAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKIAkJCQlEUlZfTkFNRSwgZXJyKTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTEyMDgsMTIgKzEyMTYsNiBAQAogCQlhdXAtPnR4X2RiX2ludXNlW2ldID0gcERCOwogCX0KIAotCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwotCiAJLyoKIAkgKiBUaGUgYm9vdCBjb2RlIHVzZXMgdGhlIGV0aGVybmV0IGNvbnRyb2xsZXIsIHNvIHJlc2V0IGl0IHRvIHN0YXJ0CiAJICogZnJlc2guICBhdTEwMDBfaW5pdCgpIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIGlzIGluIHJlc2V0IHN0YXRlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCBlMDQ2OTQzLi4yYTkxMzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtOTEyLDkgKzkxMiw2IEBACiAJCQlicC0+aXN0YXQgPSBpc3RhdDsKIAkJCV9fYjQ0X2Rpc2FibGVfaW50cyhicCk7CiAJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQl9CiAKIGlycV9hY2s6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCBhODBkYTBlLi4zYjc5YTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTI1OSw2ICsyNTksOCBAQAogCXUzMiBwb3J0X251bTsKIAlib29sIHByb21pc2N1b3VzOwogCXUzMiBjYXA7CisJdTMyIHJ4X2ZjOwkJLyogUnggZmxvdyBjb250cm9sICovCisJdTMyIHR4X2ZjOwkJLyogVHggZmxvdyBjb250cm9sICovCiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDg5ODc2YWQuLjI4YTBlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTI0MywxNSArMjQzLDI2IEBACiAKIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MTYgc3RhZ2UsIGVycm9yOworCXUxNiBzdGFnZTsKKwlpbnQgc3RhdHVzLCB0aW1lb3V0ID0gMDsKIAotCWVycm9yID0gYmVfUE9TVF9zdGFnZV9nZXQoYWRhcHRlciwgJnN0YWdlKTsKLQlpZiAoZXJyb3IgfHwgc3RhZ2UgIT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlkbyB7CisJCXN0YXR1cyA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGFkYXB0ZXIsICZzdGFnZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBPU1QgZXJyb3I7IHN0YWdlPTB4JXhcbiIsCisJCQkJc3RhZ2UpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgaWYgKHN0YWdlICE9IFBPU1RfU1RBR0VfQVJNRldfUkRZKSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGVfdGltZW91dCgyICogSFopOworCQkJdGltZW91dCArPSAyOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICh0aW1lb3V0IDwgMjApOwogCi0JcmV0dXJuIDA7CisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCB0aW1lb3V0OyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmVtYmVkZGVkX3BheWxvYWQoc3RydWN0IGJlX21jY193cmIgKndyYikKQEAgLTcyOSw4ICs3NDAsOCBAQAogLyogQ3JlYXRlIGFuIHJ4IGZpbHRlcmluZyBwb2xpY3kgY29uZmlndXJhdGlvbiBvbiBhbiBpL2YKICAqIFVzZXMgbWJveAogICovCi1pbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWdzLCB1OCAqbWFjLAotCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCkKK2ludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgY2FwX2ZsYWdzLCB1MzIgZW5fZmxhZ3MsCisJCXU4ICptYWMsIGJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfaWZfY3JlYXRlICpyZXE7CkBAIC03NDYsOCArNzU3LDggQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9OVFdLX0lOVEVSRkFDRV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CiAKLQlyZXEtPmNhcGFiaWxpdHlfZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7Ci0JcmVxLT5lbmFibGVfZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CisJcmVxLT5jYXBhYmlsaXR5X2ZsYWdzID0gY3B1X3RvX2xlMzIoY2FwX2ZsYWdzKTsKKwlyZXEtPmVuYWJsZV9mbGFncyA9IGNwdV90b19sZTMyKGVuX2ZsYWdzKTsKIAlyZXEtPnBtYWNfaW52YWxpZCA9IHBtYWNfaW52YWxpZDsKIAlpZiAoIXBtYWNfaW52YWxpZCkKIAkJbWVtY3B5KHJlcS0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IGE4NmY5MTcuLmU1Zjk2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9NQVNLCQkweEZGRkYKICNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVAkJMAkvKiBiaXRzIDAgLSAxNSAqLwogI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfTUFTSwkJMHhGRkZGCi0jZGVmaW5lIENRRV9TVEFUVVNfRVhURF9TSElGVAkJMAkvKiBiaXRzIDAgLSAxNSAqLworI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfU0hJRlQJCTE2CS8qIGJpdHMgMTYgLSAzMSAqLwogCiBzdHJ1Y3QgYmVfbWNjX2NvbXBsIHsKIAl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMCAqLwpAQCAtNzIwLDggKzcyMCw5IEBACiBleHRlcm4gaW50IGJlX2NtZF9wbWFjX2FkZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLAogCQkJdTMyIGlmX2lkLCB1MzIgKnBtYWNfaWQpOwogZXh0ZXJuIGludCBiZV9jbWRfcG1hY19kZWwoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwgdTMyIHBtYWNfaWQpOwotZXh0ZXJuIGludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfZmxhZ3MsIHU4ICptYWMsCi0JCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCk7CitleHRlcm4gaW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjYXBfZmxhZ3MsCisJCQl1MzIgZW5fZmxhZ3MsIHU4ICptYWMsIGJvb2wgcG1hY19pbnZhbGlkLAorCQkJdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCk7CiBleHRlcm4gaW50IGJlX2NtZF9pZl9kZXN0cm95KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaGFuZGxlKTsKIGV4dGVybiBpbnQgYmVfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgaW50IGVxX2RlbGF5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwppbmRleCBjZGE1YmYyLi5mMGZkOTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCkBAIC0zMjMsMTAgKzMyMywxMiBAQAogCiAJaWYgKGVjbWQtPmF1dG9uZWcgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJYWRhcHRlci0+dHhfZmMgPSBlY21kLT50eF9wYXVzZTsKKwlhZGFwdGVyLT5yeF9mYyA9IGVjbWQtPnJ4X3BhdXNlOwogCi0Jc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwgZWNtZC0+dHhfcGF1c2UsCi0JCQllY21kLT5yeF9wYXVzZSk7Ci0JaWYgKCFzdGF0dXMpCisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwKKwkJCQkJYWRhcHRlci0+dHhfZmMsIGFkYXB0ZXItPnJ4X2ZjKTsKKwlpZiAoc3RhdHVzKQogCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUGF1c2UgcGFyYW0gc2V0IGZhaWxlZC5cbiIpOwogCiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCA2ZDVlODFmLi44NzZiMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0xNjEwLDI5ICsxNjEwLDQyIEBACiAKIAlzdGF0dXMgPSBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoYWRhcHRlciwgJmxpbmtfdXApOwogCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gcmV0X3N0czsKIAliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwgbGlua191cCk7CiAKKwlzdGF0dXMgPSBiZV92aWRfY29uZmlnKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gcmV0X3N0czsKKworCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKGFkYXB0ZXIsCisJCQkJCWFkYXB0ZXItPnR4X2ZjLCBhZGFwdGVyLT5yeF9mYyk7CisJaWYgKHN0YXR1cykKKwkJZ290byByZXRfc3RzOworCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwotCXJldHVybiAwOworcmV0X3N0czoKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IGJlX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTMyIGlmX2ZsYWdzOworCXUzMiBjYXBfZmxhZ3MsIGVuX2ZsYWdzOwogCWludCBzdGF0dXM7CiAKLQlpZl9mbGFncyA9IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8IEJFX0lGX0ZMQUdTX1BST01JU0NVT1VTIHwKLQkJQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMgfCBCRV9JRl9GTEFHU19VTlRBR0dFRCB8Ci0JCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlM7Ci0Jc3RhdHVzID0gYmVfY21kX2lmX2NyZWF0ZShhZGFwdGVyLCBpZl9mbGFncywgbmV0ZGV2LT5kZXZfYWRkciwKLQkJCWZhbHNlLyogcG1hY19pbnZhbGlkICovLCAmYWRhcHRlci0+aWZfaGFuZGxlLAotCQkJJmFkYXB0ZXItPnBtYWNfaWQpOworCWNhcF9mbGFncyA9IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwgQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwKKwkJCUJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTIHwKKwkJCUJFX0lGX0ZMQUdTX1BST01JU0NVT1VTIHwKKwkJCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlM7CisJZW5fZmxhZ3MgPSBCRV9JRl9GTEFHU19VTlRBR0dFRCB8IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8CisJCQlCRV9JRl9GTEFHU19QQVNTX0wzTDRfRVJST1JTOworCisJc3RhdHVzID0gYmVfY21kX2lmX2NyZWF0ZShhZGFwdGVyLCBjYXBfZmxhZ3MsIGVuX2ZsYWdzLAorCQkJbmV0ZGV2LT5kZXZfYWRkciwgZmFsc2UvKiBwbWFjX2ludmFsaWQgKi8sCisJCQkmYWRhcHRlci0+aWZfaGFuZGxlLCAmYWRhcHRlci0+cG1hY19pZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIGRvX25vbmU7CiAKLQogCXN0YXR1cyA9IGJlX3R4X3F1ZXVlc19jcmVhdGUoYWRhcHRlcik7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIGlmX2Rlc3Ryb3k7CkBAIC0xNjQ1LDE3ICsxNjU4LDggQEAKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gcnhfcXNfZGVzdHJveTsKIAotCXN0YXR1cyA9IGJlX3ZpZF9jb25maWcoYWRhcHRlcik7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIG1jY3FzX2Rlc3Ryb3k7Ci0KLQlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCB0cnVlLCB0cnVlKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gbWNjcXNfZGVzdHJveTsKIAlyZXR1cm4gMDsKIAotbWNjcXNfZGVzdHJveToKLQliZV9tY2NfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiByeF9xc19kZXN0cm95OgogCWJlX3J4X3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogdHhfcXNfZGVzdHJveToKQEAgLTE5MDYsNiArMTkxMCwxMCBAQAogCiAJYWRhcHRlci0+cnhfY3N1bSA9IHRydWU7CiAKKwkvKiBEZWZhdWx0IHNldHRpbmdzIGZvciBSeCBhbmQgVHggZmxvdyBjb250cm9sICovCisJYWRhcHRlci0+cnhfZmMgPSB0cnVlOworCWFkYXB0ZXItPnR4X2ZjID0gdHJ1ZTsKKwogCW5ldGlmX3NldF9nc29fbWF4X3NpemUobmV0ZGV2LCA2NTUzNSk7CiAKIAlCRV9TRVRfTkVUREVWX09QUyhuZXRkZXYsICZiZV9uZXRkZXZfb3BzKTsKQEAgLTIwNTUsNiArMjA2MywxMCBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKKwlzdGF0dXMgPSBiZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwogCXN0YXR1cyA9IGJlX2NtZF9nZXRfZndfdmVyKGFkYXB0ZXIsIGFkYXB0ZXItPmZ3X3Zlcik7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTIxMDgsMTAgKzIxMjAsNiBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gZnJlZV9uZXRkZXY7CiAKLQlzdGF0dXMgPSBiZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBjdHJsX2NsZWFuOwotCiAJc3RhdHVzID0gYmVfc3RhdHNfaW5pdChhZGFwdGVyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGN0cmxfY2xlYW47CkBAIC0yMTY4LDYgKzIxNzYsNyBAQAogCQliZV9jbG9zZShuZXRkZXYpOwogCQlydG5sX3VubG9jaygpOwogCX0KKwliZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCAmYWRhcHRlci0+dHhfZmMsICZhZGFwdGVyLT5yeF9mYyk7CiAJYmVfY2xlYXIoYWRhcHRlcik7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA2YzdmNzk1Li5hNGQ4MzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC0zNjEsOSArMzYxLDEyIEBACiAjZGVmaW5lIEJOWDJfTDJDVFhfQ1RYX1RZUEVfQ1RYX0JEX0NITl9UWVBFX1ZBTFVFCSAoMTw8MjgpCiAKICNkZWZpbmUgQk5YMl9MMkNUWF9IT1NUX0JESURYCQkJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQk5YMl9MMkNUWF9TVEFUVVNCX05VTV9TSElGVAkJCSAxNgotI2RlZmluZSBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNKHNiX2lkKQkJCSBcCi0JKCgoc2JfaWQpID4gMCkgPyAoKChzYl9pZCkgKyA3KSA8PCBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNX1NISUZUKSA6IDApCisjZGVmaW5lIEJOWDJfTDJDVFhfTDVfU1RBVFVTQl9OVU1fU0hJRlQJCQkgMTYKKyNkZWZpbmUgQk5YMl9MMkNUWF9MMl9TVEFUVVNCX05VTV9TSElGVAkJCSAyNAorI2RlZmluZSBCTlgyX0wyQ1RYX0w1X1NUQVRVU0JfTlVNKHNiX2lkKQkJXAorCSgoKHNiX2lkKSA+IDApID8gKCgoc2JfaWQpICsgNykgPDwgQk5YMl9MMkNUWF9MNV9TVEFUVVNCX05VTV9TSElGVCkgOiAwKQorI2RlZmluZSBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNKHNiX2lkKQkJXAorCSgoKHNiX2lkKSA+IDApID8gKCgoc2JfaWQpICsgNykgPDwgQk5YMl9MMkNUWF9MMl9TVEFUVVNCX05VTV9TSElGVCkgOiAwKQogI2RlZmluZSBCTlgyX0wyQ1RYX0hPU1RfQlNFUQkJCQkweDAwMDAwMDA4CiAjZGVmaW5lIEJOWDJfTDJDVFhfTlhfQlNFUQkJCQkweDAwMDAwMDBjCiAjZGVmaW5lIEJOWDJfTDJDVFhfTlhfQkRIQUREUl9ISQkJCTB4MDAwMDAwMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDY5YzViMTUuLjQwZmI1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwgaW50IHJlcG9ydGluZykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKnNsYXZlX29wcyA9IHNsYXZlX2Rldi0+bmV0ZGV2X29wczsKLQlzdGF0aWMgaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOworCWludCAoKmlvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKIAlzdHJ1Y3QgaWZyZXEgaWZyOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpOwogCkBAIC0zNjY1LDEwICszNjY1LDEwIEBACiAKIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJcmV0dXJuICgobnRvaGwoaXBoLT5zYWRkciBeIGlwaC0+ZGFkZHIpICYgMHhmZmZmKSBeCi0JCQkoZGF0YS0+aF9kZXN0WzVdIF4gYm9uZF9kZXYtPmRldl9hZGRyWzVdKSkgJSBjb3VudDsKKwkJCShkYXRhLT5oX2Rlc3RbNV0gXiBkYXRhLT5oX3NvdXJjZVs1XSkpICUgY291bnQ7CiAJfQogCi0JcmV0dXJuIChkYXRhLT5oX2Rlc3RbNV0gXiBib25kX2Rldi0+ZGV2X2FkZHJbNV0pICUgY291bnQ7CisJcmV0dXJuIChkYXRhLT5oX2Rlc3RbNV0gXiBkYXRhLT5oX3NvdXJjZVs1XSkgJSBjb3VudDsKIH0KIAogLyoKQEAgLTM2OTUsNyArMzY5NSw3IEBACiAKIAl9CiAKLQlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGJvbmRfZGV2LT5kZXZfYWRkcls1XSkgJSBjb3VudDsKKwlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSAlIGNvdW50OwogfQogCiAvKgpAQCAtMzcwNiw3ICszNzA2LDcgQEAKIHsKIAlzdHJ1Y3QgZXRoaGRyICpkYXRhID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAKLQlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGJvbmRfZGV2LT5kZXZfYWRkcls1XSkgJSBjb3VudDsKKwlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSAlIGNvdW50OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldmljZSBlbnRyeSBwb2ludHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IGRmMzJjMTAuLjc3MmY2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC0zNSw2NiArMzUsMTYgQEAKIAkgIGFyZ3VtZW50cyAidHEiLCAicHJvcF9zZWciLCAicGhhc2Vfc2VnMSIsICJwaGFzZV9zZWcyIiBhbmQgInNqdyIuCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCi1jb25maWcgQ0FOX1NKQTEwMDAKLQlkZXBlbmRzIG9uIENBTl9ERVYgJiYgSEFTX0lPTUVNCi0JdHJpc3RhdGUgIlBoaWxpcHMgU0pBMTAwMCIKLQktLS1oZWxwLS0tCi0JICBEcml2ZXIgZm9yIHRoZSBTSkExMDAwIENBTiBjb250cm9sbGVycyBmcm9tIFBoaWxpcHMgb3IgTlhQCi0KLWNvbmZpZyBDQU5fU0pBMTAwMF9JU0EKLQlkZXBlbmRzIG9uIENBTl9TSkExMDAwICYmIElTQQotCXRyaXN0YXRlICJJU0EgQnVzIGJhc2VkIGxlZ2FjeSBTSkExMDAwIGRyaXZlciIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBhZGRzIGxlZ2FjeSBzdXBwb3J0IGZvciBTSkExMDAwIGNoaXBzIGNvbm5lY3RlZCB0bwotCSAgdGhlIElTQSBidXMgdXNpbmcgSS9PIHBvcnQsIG1lbW9yeSBtYXBwZWQgb3IgaW5kaXJlY3QgYWNjZXNzLgotCi1jb25maWcgQ0FOX1NKQTEwMDBfUExBVEZPUk0KLQlkZXBlbmRzIG9uIENBTl9TSkExMDAwCi0JdHJpc3RhdGUgIkdlbmVyaWMgUGxhdGZvcm0gQnVzIGJhc2VkIFNKQTEwMDAgZHJpdmVyIgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNKQTEwMDAgY2hpcHMgY29ubmVjdGVkIHRvCi0JICB0aGUgInBsYXRmb3JtIGJ1cyIgKExpbnV4IGFic3RyYWN0aW9uIGZvciBkaXJlY3RseSB0byB0aGUKLQkgIHByb2Nlc3NvciBhdHRhY2hlZCBkZXZpY2VzKS4gIFdoaWNoIGNhbiBiZSBmb3VuZCBvbiB2YXJpb3VzCi0JICBib2FyZHMgZnJvbSBQaHl0ZWMgKGh0dHA6Ly93d3cucGh5dGVjLmRlKSBsaWtlIHRoZSBQQ00wMjcsCi0JICBQQ00wMzguCi0KLWNvbmZpZyBDQU5fU0pBMTAwMF9PRl9QTEFURk9STQotCWRlcGVuZHMgb24gQ0FOX1NKQTEwMDAgJiYgUFBDX09GCi0JdHJpc3RhdGUgIkdlbmVyaWMgT0YgUGxhdGZvcm0gQnVzIGJhc2VkIFNKQTEwMDAgZHJpdmVyIgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNKQTEwMDAgY2hpcHMgY29ubmVjdGVkIHRvCi0JICB0aGUgT3BlbkZpcm13YXJlICJwbGF0Zm9ybSBidXMiIGZvdW5kIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2l0aAotCSAgT3BlbkZpcm13YXJlIGJpbmRpbmdzLCBlLmcuIGlmIHlvdSBoYXZlIGEgUG93ZXJQQyBiYXNlZCBzeXN0ZW0KLQkgIHlvdSBtYXkgd2FudCB0byBlbmFibGUgdGhpcyBvcHRpb24uCi0KLWNvbmZpZyBDQU5fRU1TX1BDSQotCXRyaXN0YXRlICJFTVMgQ1BDLVBDSSwgQ1BDLVBDSWUgYW5kIENQQy0xMDRQIENhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQ0FOX1NKQTEwMDAKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIG9uZSwgdHdvIG9yIGZvdXIgY2hhbm5lbCBDUEMtUENJLAotCSAgQ1BDLVBDSWUgYW5kIENQQy0xMDRQIGNhcmRzIGZyb20gRU1TIERyLiBUaG9tYXMgV3VlbnNjaGUKLQkgIChodHRwOi8vd3d3LmVtcy13dWVuc2NoZS5kZSkuCi0KLWNvbmZpZyBDQU5fRU1TX1VTQgotCXRyaXN0YXRlICJFTVMgQ1BDLVVTQi9BUk03IENBTi9VU0IgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gVVNCICYmIENBTl9ERVYKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIG9uZSBjaGFubmVsIENQQy1VU0IvQVJNNyBDQU4vVVNCIGludGVyZmFjZQotCSAgZnJvbSBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlIChodHRwOi8vd3d3LmVtcy13dWVuc2NoZS5kZSkuCi0KLWNvbmZpZyBDQU5fS1ZBU0VSX1BDSQotCXRyaXN0YXRlICJLdmFzZXIgUENJY2FueCBhbmQgS3Zhc2VyIFBDSWNhbiBQQ0kgQ2FyZHMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQ0FOX1NKQTEwMDAKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIHRoZSBQQ0ljYW54IGFuZCBQQ0ljYW4gY2FyZHMgKDEsIDIgb3IKLQkgIDQgY2hhbm5lbCkgZnJvbSBLdmFzZXIgKGh0dHA6Ly93d3cua3Zhc2VyLmNvbSkuCi0KIGNvbmZpZyBDQU5fQVQ5MQogCXRyaXN0YXRlICJBdG1lbCBBVDkxIG9uY2hpcCBDQU4gY29udHJvbGxlciIKLQlkZXBlbmRzIG9uIENBTiAmJiBDQU5fREVWICYmIEFSQ0hfQVQ5MVNBTTkyNjMKKwlkZXBlbmRzIG9uIENBTl9ERVYgJiYgQVJDSF9BVDkxU0FNOTI2MwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTb0MgQ0FOIGNvbnRyb2xsZXIgaW4gQXRtZWwncyBBVDkxU0FNOTI2My4KIAorc291cmNlICJkcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZyIKKwogY29uZmlnIENBTl9ERUJVR19ERVZJQ0VTCiAJYm9vbCAiQ0FOIGRldmljZXMgZGVidWdnaW5nIG1lc3NhZ2VzIgogCWRlcGVuZHMgb24gQ0FOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKaW5kZXggZjBiOWExZS4uMjg2OGZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwpAQCAtNTg5LDYgKzU4OSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc2l6ZV90IGNhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc2l6ZV90IHNpemU7CisKKwlzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAgIC8qIElGTEFfQ0FOX1NUQVRFICovCisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGNhbl9jdHJsbW9kZSk7ICAvKiBJRkxBX0NBTl9DVFJMTU9ERSAqLworCXNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAgLyogSUZMQV9DQU5fUkVTVEFSVF9NUyAqLworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBjYW5fYml0dGltaW5nKTsgLyogSUZMQV9DQU5fQklUVElNSU5HICovCisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IGNhbl9jbG9jayk7ICAgICAvKiBJRkxBX0NBTl9DTE9DSyAqLworCWlmIChwcml2LT5iaXR0aW1pbmdfY29uc3QpCSAgICAgIC8qIElGTEFfQ0FOX0JJVFRJTUlOR19DT05TVCAqLworCQlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKwogc3RhdGljIGludCBjYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTYxMyw2ICs2MjksMTEgQEAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCitzdGF0aWMgc2l6ZV90IGNhbl9nZXRfeHN0YXRzX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBjYW5fZGV2aWNlX3N0YXRzKTsKK30KKwogc3RhdGljIGludCBjYW5fZmlsbF94c3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjM5LDcgKzY2MCw5IEBACiAJLnNldHVwCQk9IGNhbl9zZXR1cCwKIAkubmV3bGluawk9IGNhbl9uZXdsaW5rLAogCS5jaGFuZ2VsaW5rCT0gY2FuX2NoYW5nZWxpbmssCisJLmdldF9zaXplCT0gY2FuX2dldF9zaXplLAogCS5maWxsX2luZm8JPSBjYW5fZmlsbF9pbmZvLAorCS5nZXRfeHN0YXRzX3NpemUgPSBjYW5fZ2V0X3hzdGF0c19zaXplLAogCS5maWxsX3hzdGF0cwk9IGNhbl9maWxsX3hzdGF0cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjc0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnCkBAIC0wLDAgKzEsNDcgQEAKK21lbnVjb25maWcgQ0FOX1NKQTEwMDAKKwl0cmlzdGF0ZSAiUGhpbGlwcy9OWFAgU0pBMTAwMCBkZXZpY2VzIgorCWRlcGVuZHMgb24gQ0FOX0RFViAmJiBIQVNfSU9NRU0KKworaWYgQ0FOX1NKQTEwMDAKKworY29uZmlnIENBTl9TSkExMDAwX0lTQQorCXRyaXN0YXRlICJJU0EgQnVzIGJhc2VkIGxlZ2FjeSBTSkExMDAwIGRyaXZlciIKKwlkZXBlbmRzIG9uIElTQQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGFkZHMgbGVnYWN5IHN1cHBvcnQgZm9yIFNKQTEwMDAgY2hpcHMgY29ubmVjdGVkIHRvCisJICB0aGUgSVNBIGJ1cyB1c2luZyBJL08gcG9ydCwgbWVtb3J5IG1hcHBlZCBvciBpbmRpcmVjdCBhY2Nlc3MuCisKK2NvbmZpZyBDQU5fU0pBMTAwMF9QTEFURk9STQorCXRyaXN0YXRlICJHZW5lcmljIFBsYXRmb3JtIEJ1cyBiYXNlZCBTSkExMDAwIGRyaXZlciIKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTSkExMDAwIGNoaXBzIGNvbm5lY3RlZCB0bworCSAgdGhlICJwbGF0Zm9ybSBidXMiIChMaW51eCBhYnN0cmFjdGlvbiBmb3IgZGlyZWN0bHkgdG8gdGhlCisJICBwcm9jZXNzb3IgYXR0YWNoZWQgZGV2aWNlcykuICBXaGljaCBjYW4gYmUgZm91bmQgb24gdmFyaW91cworCSAgYm9hcmRzIGZyb20gUGh5dGVjIChodHRwOi8vd3d3LnBoeXRlYy5kZSkgbGlrZSB0aGUgUENNMDI3LAorCSAgUENNMDM4LgorCitjb25maWcgQ0FOX1NKQTEwMDBfT0ZfUExBVEZPUk0KKwl0cmlzdGF0ZSAiR2VuZXJpYyBPRiBQbGF0Zm9ybSBCdXMgYmFzZWQgU0pBMTAwMCBkcml2ZXIiCisJZGVwZW5kcyBvbiBQUENfT0YKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTSkExMDAwIGNoaXBzIGNvbm5lY3RlZCB0bworCSAgdGhlIE9wZW5GaXJtd2FyZSAicGxhdGZvcm0gYnVzIiBmb3VuZCBvbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGgKKwkgIE9wZW5GaXJtd2FyZSBiaW5kaW5ncywgZS5nLiBpZiB5b3UgaGF2ZSBhIFBvd2VyUEMgYmFzZWQgc3lzdGVtCisJICB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLgorCitjb25maWcgQ0FOX0VNU19QQ0kKKwl0cmlzdGF0ZSAiRU1TIENQQy1QQ0ksIENQQy1QQ0llIGFuZCBDUEMtMTA0UCBDYXJkIgorCWRlcGVuZHMgb24gUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBvbmUsIHR3byBvciBmb3VyIGNoYW5uZWwgQ1BDLVBDSSwKKwkgIENQQy1QQ0llIGFuZCBDUEMtMTA0UCBjYXJkcyBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlCisJICAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgorCitjb25maWcgQ0FOX0tWQVNFUl9QQ0kKKwl0cmlzdGF0ZSAiS3Zhc2VyIFBDSWNhbnggYW5kIEt2YXNlciBQQ0ljYW4gUENJIENhcmRzIgorCWRlcGVuZHMgb24gUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSB0aGUgUENJY2FueCBhbmQgUENJY2FuIGNhcmRzICgxLCAyIG9yCisJICA0IGNoYW5uZWwpIGZyb20gS3Zhc2VyIChodHRwOi8vd3d3Lmt2YXNlci5jb20pLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9vZl9wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9vZl9wbGF0Zm9ybS5jCmluZGV4IDMzNzM1NjAuLjlkZDA3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfb2ZfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCXsuY29tcGF0aWJsZSA9ICJueHAsc2phMTAwMCJ9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNqYTEwMDBfb2ZwX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgc2phMTAwMF9vZnBfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzc4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorbWVudSAiQ0FOIFVTQiBpbnRlcmZhY2VzIgorCWRlcGVuZHMgb24gVVNCICYmIENBTl9ERVYKKworY29uZmlnIENBTl9FTVNfVVNCCisJdHJpc3RhdGUgIkVNUyBDUEMtVVNCL0FSTTcgQ0FOL1VTQiBpbnRlcmZhY2UiCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBvbmUgY2hhbm5lbCBDUEMtVVNCL0FSTTcgQ0FOL1VTQiBpbnRlcmZhY2UKKwkgIGZyb20gZnJvbSBFTVMgRHIuIFRob21hcyBXdWVuc2NoZSAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9NYWtlZmlsZQppbmRleCBjM2Y3NWJhLi4wYWZkNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBACiAjCiAKIG9iai0kKENPTkZJR19DQU5fRU1TX1VTQikgKz0gZW1zX3VzYi5vCisKK2NjZmxhZ3MtJChDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKaW5kZXggOTAxMmUwYS4uYWJkYmQ5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCiAJY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGNhbl9mcmFtZSkpOwogCi0JY2YtPmNhbl9pZCA9IG1zZy0+bXNnLmNhbl9tc2cuaWQ7CisJY2YtPmNhbl9pZCA9IGxlMzJfdG9fY3B1KG1zZy0+bXNnLmNhbl9tc2cuaWQpOwogCWNmLT5jYW5fZGxjID0gbWluX3QodTgsIG1zZy0+bXNnLmNhbl9tc2cubGVuZ3RoLCA4KTsKIAogCWlmIChtc2ctPnR5cGUgPT0gQ1BDX01TR19UWVBFX0VYVF9DQU5fRlJBTUUKQEAgLTgxMyw2ICs4MTMsOSBAQAogCQltc2ctPmxlbmd0aCA9IENQQ19DQU5fTVNHX01JTl9TSVpFICsgY2YtPmNhbl9kbGM7CiAJfQogCisJLyogUmVzcGVjdCBieXRlIG9yZGVyICovCisJbXNnLT5tc2cuY2FuX21zZy5pZCA9IGNwdV90b19sZTMyKG1zZy0+bXNnLmNhbl9tc2cuaWQpOworCiAJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9VUkJTOyBpKyspIHsKIAkJaWYgKGRldi0+dHhfY29udGV4dHNbaV0uZWNob19pbmRleCA9PSBNQVhfVFhfVVJCUykgewogCQkJY29udGV4dCA9ICZkZXYtPnR4X2NvbnRleHRzW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IDA1OTE2YWEuLmY4NTdhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTQzNDIsMTEgKzQzNDIsMTEgQEAKIAkJY2FzX3VubG9ja19hbGxfcmVzdG9yZShjcCwgZmxhZ3MpOwogCX0KIAorCWVyciA9IC1FTk9NRU07CiAJaWYgKGNhc190eF90aW55X2FsbG9jKGNwKSA8IDApCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGVycl91bmxvY2s7CiAKIAkvKiBhbGxvYyByeCBkZXNjcmlwdG9ycyAqLwotCWVyciA9IC1FTk9NRU07CiAJaWYgKGNhc19hbGxvY19yeGRzKGNwKSA8IDApCiAJCWdvdG8gZXJyX3R4X3Rpbnk7CiAKQEAgLTQzODYsNiArNDM4Niw3IEBACiAJY2FzX2ZyZWVfcnhkcyhjcCk7CiBlcnJfdHhfdGlueToKIAljYXNfdHhfdGlueV9mcmVlKGNwKTsKK2Vycl91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggNDZjODdlYy4uM2JmMWIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtMjI2NCw5ICsyMjY0LDkgQEAKIAljbmljX2N0eF93cihkZXYsIGNpZF9hZGRyLCBCTlgyX0wyQ1RYX0NUWF9UWVBFLCB2YWwpOwogCiAJaWYgKHNiX2lkID09IDApCi0JCXZhbCA9IDIgPDwgQk5YMl9MMkNUWF9TVEFUVVNCX05VTV9TSElGVDsKKwkJdmFsID0gMiA8PCBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNX1NISUZUOwogCWVsc2UKLQkJdmFsID0gQk5YMl9MMkNUWF9TVEFUVVNCX05VTShzYl9pZCk7CisJCXZhbCA9IEJOWDJfTDJDVFhfTDJfU1RBVFVTQl9OVU0oc2JfaWQpOwogCWNuaWNfY3R4X3dyKGRldiwgY2lkX2FkZHIsIEJOWDJfTDJDVFhfSE9TVF9CRElEWCwgdmFsKTsKIAogCXJ4YmQgPSAoc3RydWN0IHJ4X2JkICopIChjcC0+bDJfcmluZyArIEJDTV9QQUdFX1NJWkUpOwpAQCAtMjQyMyw3ICsyNDIzLDcgQEAKIAljcC0+aW50X251bSA9IDA7CiAJaWYgKGV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkgewogCQl1MzIgc2JfaWQgPSBjcC0+c3RhdHVzX2Jsa19udW07Ci0JCXUzMiBzYiA9IEJOWDJfTDJDVFhfU1RBVFVTQl9OVU0oc2JfaWQpOworCQl1MzIgc2IgPSBCTlgyX0wyQ1RYX0w1X1NUQVRVU0JfTlVNKHNiX2lkKTsKIAogCQljcC0+aW50X251bSA9IHNiX2lkIDw8IEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOVF9OVU1fU0hJRlQ7CiAJCWNuaWNfY3R4X3dyKGRldiwgY3AtPmt3cV9jaWRfYWRkciwgTDVfS1JOTFFfSE9TVF9RSURYLCBzYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IGY4NjYxMjguLjYzNjYwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC04NzksNyArODc5LDcgQEAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwgZG1hX2FkZHIsIGxlbiwKIAkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkoKnNkLT5wZ19jaHVuay5wX2NudCktLTsKLQlpZiAoISpzZC0+cGdfY2h1bmsucF9jbnQpCisJaWYgKCEqc2QtPnBnX2NodW5rLnBfY250ICYmIHNkLT5wZ19jaHVuay5wYWdlICE9IGZsLT5wZ19jaHVuay5wYWdlKQogCQlwY2lfdW5tYXBfcGFnZShhZGFwLT5wZGV2LAogCQkJICAgICAgIHNkLT5wZ19jaHVuay5tYXBwaW5nLAogCQkJICAgICAgIGZsLT5hbGxvY19zaXplLApAQCAtMjA4OCw3ICsyMDg4LDcgQEAKIAkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCSgqc2QtPnBnX2NodW5rLnBfY250KS0tOwotCWlmICghKnNkLT5wZ19jaHVuay5wX2NudCkKKwlpZiAoISpzZC0+cGdfY2h1bmsucF9jbnQgJiYgc2QtPnBnX2NodW5rLnBhZ2UgIT0gZmwtPnBnX2NodW5rLnBhZ2UpCiAJCXBjaV91bm1hcF9wYWdlKGFkYXAtPnBkZXYsCiAJCQkgICAgICAgc2QtPnBnX2NodW5rLm1hcHBpbmcsCiAJCQkgICAgICAgZmwtPmFsbG9jX3NpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDY1YTJkMGIuLmUzNDc4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC0xNjQsMTYgKzE2NCwxNCBAQAogIyBkZWZpbmUgRU1BQ19NQlBfTUNBU1RDSEFOKGNoKQkJKChjaCkgJiAweDcpCiAKIC8qIEVNQUMgbWFjX2NvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUFRZUEUJCSgweDIwMCkKLSNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUEFDRUVOCSgweDQwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfTUlJRU4JCSgweDIwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR0lHQUJJVEVOCSgweDgwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR0lHQUJJVEVOX1NISUZUICg3KQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfRlVMTERVUExFWEVOCSgweDEpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9UWFBUWVBFCQlCSVQoOSkKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUEFDRUVOCUJJVCg2KQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR01JSUVOCQlCSVQoNSkKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0dJR0FCSVRFTglCSVQoNykKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX0ZVTExEVVBMRVhFTglCSVQoMCkKICNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1JNSUlTUEVFRF9NQVNLCUJJVCgxNSkKIAogLyogR0lHQUJJVCBNT0RFIHJlbGF0ZWQgYml0cyAqLwotI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dNSUlFTglCSVQoNSkKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUcJQklUKDcpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR0lHRk9SQ0UJQklUKDE3KQogCkBAIC0xOTIsMTAgKzE5MCwxMCBAQAogI2RlZmluZSBFTUFDX1JYX0JVRkZFUl9PRkZTRVRfTUFTSwkoMHhGRkZGKQogCiAvKiBNQUNfSU5fVkVDVE9SICgweDE4MCkgcmVnaXN0ZXIgYml0IGZpZWxkcyAqLwotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX0hPU1RfSU5UCSAgICAgICgweDIwMDAwKQotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1NUQVRQRU5EX0lOVAkgICAgICAoMHgxMDAwMCkKLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9SWF9JTlRfVkVDCSAgICAgICgweDAxMDApCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfVFhfSU5UX1ZFQwkgICAgICAoMHgwMSkKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAlCSVQoMTcpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfU1RBVFBFTkRfSU5UCUJJVCgxNikKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9SWF9JTlRfVkVDCUJJVCg4KQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1RYX0lOVF9WRUMJQklUKDApCiAKIC8qKiBOT1RFOjogRm9yIERNNjQ2eCB0aGUgSU5fVkVDVE9SIGhhcyBjaGFuZ2VkICovCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfUlhfSU5UX1ZFQwlCSVQoRU1BQ19ERUZfUlhfQ0gpCkBAIC0yMDMsNyArMjAxLDYgQEAKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0lOX1ZFQ1RPUl9IT1NUX0lOVAlCSVQoMjYpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19JTl9WRUNUT1JfU1RBVFBFTkRfSU5UCUJJVCgyNykKIAotCiAvKiBDUFBJIGJpdCBwb3NpdGlvbnMgKi8KICNkZWZpbmUgRU1BQ19DUFBJX1NPUF9CSVQJCUJJVCgzMSkKICNkZWZpbmUgRU1BQ19DUFBJX0VPUF9CSVQJCUJJVCgzMCkKQEAgLTMzMyw2ICszMzAsOSBAQAogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfRU9JX0MwX1JYRU4JKDB4MDEpCiAjZGVmaW5lIEVNQUNfRE02NDZYX01BQ19FT0lfQzBfVFhFTgkoMHgwMikKIAorLyogRU1BQyBTdGF0cyBDbGVhciBNYXNrICovCisjZGVmaW5lIEVNQUNfU1RBVFNfQ0xSX01BU0sgICAgKDB4RkZGRkZGRkYpCisKIC8qKiBuZXRfYnVmX29iajogRU1BQyBuZXR3b3JrIGJ1ZmZlcmRhdGEgc3RydWN0dXJlCiAgKgogICogRU1BQyBuZXR3b3JrIGJ1ZmZlciBkYXRhIHN0cnVjdHVyZQpAQCAtNzQ3LDggKzc0Nyw3IEBACiAKIAlpZiAocHJpdi0+c3BlZWQgPT0gU1BFRURfMTAwMCAmJiAocHJpdi0+dmVyc2lvbiA9PSBFTUFDX1ZFUlNJT05fMikpIHsKIAkJbWFjX2NvbnRyb2wgPSBlbWFjX3JlYWQoRU1BQ19NQUNDT05UUk9MKTsKLQkJbWFjX2NvbnRyb2wgfD0gKEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR01JSUVOIHwKLQkJCQlFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJRyB8CisJCW1hY19jb250cm9sIHw9IChFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJRyB8CiAJCQkJRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUdGT1JDRSk7CiAJfSBlbHNlIHsKIAkJLyogQ2xlYXIgdGhlIEdJRyBiaXQgYW5kIEdJR0ZPUkNFIGJpdCAqLwpAQCAtMjEwNSw3ICsyMTA0LDcgQEAKIAogCS8qIEVuYWJsZSBNSUkgKi8KIAl2YWwgPSBlbWFjX3JlYWQoRU1BQ19NQUNDT05UUk9MKTsKLQl2YWwgfD0gKEVNQUNfTUFDQ09OVFJPTF9NSUlFTik7CisJdmFsIHw9IChFTUFDX01BQ0NPTlRST0xfR01JSUVOKTsKIAllbWFjX3dyaXRlKEVNQUNfTUFDQ09OVFJPTCwgdmFsKTsKIAogCS8qIEVuYWJsZSBOQVBJIGFuZCBpbnRlcnJ1cHRzICovCkBAIC0yMTM3LDkgKzIxMzYsNiBAQAogCXUzMiBzdGF0dXMgPSAwOwogCXUzMiBudW1fcGt0cyA9IDA7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpCi0JCXJldHVybiAwOwotCiAJLyogQ2hlY2sgaW50ZXJydXB0IHZlY3RvcnMgYW5kIGNhbGwgcGFja2V0IHByb2Nlc3NpbmcgKi8KIAlzdGF0dXMgPSBlbWFjX3JlYWQoRU1BQ19NQUNJTlZFQ1RPUik7CiAKQEAgLTIyMTgsNyArMjIxNCw3IEBACiAJc3RydWN0IGVtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJZW1hY19pbnRfZGlzYWJsZShwcml2KTsKLQllbWFjX2lycShuZGV2LT5pcnEsIHByaXYpOworCWVtYWNfaXJxKG5kZXYtPmlycSwgbmRldik7CiAJZW1hY19pbnRfZW5hYmxlKHByaXYpOwogfQogI2VuZGlmCkBAIC0yNTQ4LDQwICsyNTQ0LDQ5IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVtYWNfZGV2X2dldG5ldHN0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBlbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgbWFjX2NvbnRyb2w7CisJdTMyIHN0YXRzX2NsZWFyX21hc2s7CiAKIAkvKiB1cGRhdGUgZW1hYyBoYXJkd2FyZSBzdGF0cyBhbmQgcmVzZXQgdGhlIHJlZ2lzdGVycyovCiAKKwltYWNfY29udHJvbCA9IGVtYWNfcmVhZChFTUFDX01BQ0NPTlRST0wpOworCisJaWYgKG1hY19jb250cm9sICYgRU1BQ19NQUNDT05UUk9MX0dNSUlFTikKKwkJc3RhdHNfY2xlYXJfbWFzayA9IEVNQUNfU1RBVFNfQ0xSX01BU0s7CisJZWxzZQorCQlzdGF0c19jbGVhcl9tYXNrID0gMDsKKwogCXByaXYtPm5ldF9kZXZfc3RhdHMubXVsdGljYXN0ICs9IGVtYWNfcmVhZChFTUFDX1JYTUNBU1RGUkFNRVMpOwotCWVtYWNfd3JpdGUoRU1BQ19SWE1DQVNURlJBTUVTLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19SWE1DQVNURlJBTUVTLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMuY29sbGlzaW9ucyArPSAoZW1hY19yZWFkKEVNQUNfVFhDT0xMSVNJT04pICsKIAkJCQkJICAgZW1hY19yZWFkKEVNQUNfVFhTSU5HTEVDT0xMKSArCiAJCQkJCSAgIGVtYWNfcmVhZChFTUFDX1RYTVVMVElDT0xMKSk7Ci0JZW1hY193cml0ZShFTUFDX1RYQ09MTElTSU9OLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOwotCWVtYWNfd3JpdGUoRU1BQ19UWFNJTkdMRUNPTEwsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7Ci0JZW1hY193cml0ZShFTUFDX1RYTVVMVElDT0xMLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19UWENPTExJU0lPTiwgc3RhdHNfY2xlYXJfbWFzayk7CisJZW1hY193cml0ZShFTUFDX1RYU0lOR0xFQ09MTCwgc3RhdHNfY2xlYXJfbWFzayk7CisJZW1hY193cml0ZShFTUFDX1RYTVVMVElDT0xMLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSAoZW1hY19yZWFkKEVNQUNfUlhPVkVSU0laRUQpICsKIAkJCQkJCWVtYWNfcmVhZChFTUFDX1JYSkFCQkVSKSArCiAJCQkJCQllbWFjX3JlYWQoRU1BQ19SWFVOREVSU0laRUQpKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhPVkVSU0laRUQsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7Ci0JZW1hY193cml0ZShFTUFDX1JYSkFCQkVSLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOwotCWVtYWNfd3JpdGUoRU1BQ19SWFVOREVSU0laRUQsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1JYT1ZFUlNJWkVELCBzdGF0c19jbGVhcl9tYXNrKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhKQUJCRVIsIHN0YXRzX2NsZWFyX21hc2spOworCWVtYWNfd3JpdGUoRU1BQ19SWFVOREVSU0laRUQsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSAoZW1hY19yZWFkKEVNQUNfUlhTT0ZPVkVSUlVOUykgKwogCQkJCQkgICAgICAgZW1hY19yZWFkKEVNQUNfUlhNT0ZPVkVSUlVOUykpOwotCWVtYWNfd3JpdGUoRU1BQ19SWFNPRk9WRVJSVU5TLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOwotCWVtYWNfd3JpdGUoRU1BQ19SWE1PRk9WRVJSVU5TLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19SWFNPRk9WRVJSVU5TLCBzdGF0c19jbGVhcl9tYXNrKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhNT0ZPVkVSUlVOUywgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzICs9IGVtYWNfcmVhZChFTUFDX1JYRE1BT1ZFUlJVTlMpOwotCWVtYWNfd3JpdGUoRU1BQ19SWERNQU9WRVJSVU5TLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19SWERNQU9WRVJSVU5TLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0KIAkJZW1hY19yZWFkKEVNQUNfVFhDQVJSSUVSU0VOU0UpOwotCWVtYWNfd3JpdGUoRU1BQ19UWENBUlJJRVJTRU5TRSwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfVFhDQVJSSUVSU0VOU0UsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy50eF9maWZvX2Vycm9ycyA9IGVtYWNfcmVhZChFTUFDX1RYVU5ERVJSVU4pOwotCWVtYWNfd3JpdGUoRU1BQ19UWFVOREVSUlVOLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19UWFVOREVSUlVOLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXJldHVybiAmcHJpdi0+bmV0X2Rldl9zdGF0czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5oIGIvZHJpdmVycy9uZXQvZG05MDAwLmgKaW5kZXggODA4MTdjMi4uZmIxYzkyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIERNOTAwMF9SQ1NSCSAgICAgICAweDMyCiAKICNkZWZpbmUgQ0hJUFJfRE05MDAwQQkgICAgICAgMHgxOQotI2RlZmluZSBDSElQUl9ETTkwMDBCCSAgICAgICAweDFCCisjZGVmaW5lIENISVBSX0RNOTAwMEIJICAgICAgIDB4MUEKIAogI2RlZmluZSBETTkwMDBfTVJDTURYICAgICAgICAgIDB4RjAKICNkZWZpbmUgRE05MDAwX01SQ01EICAgICAgICAgICAweEYyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggNWQyZjQ4Zi4uZDI2OWE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTU3LDYgKzE1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CkBAIC02MDIsNiArNjAzLDcgQEAKIAlzdHJ1Y3QgbWVtICptZW07CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAorCXN0cnVjdCBwY2lfcG9vbCAqY2JzX3Bvb2w7CiAJZG1hX2FkZHJfdCBjYnNfZG1hX2FkZHI7CiAJdTggYWRhcHRpdmVfaWZzOwogCXU4IHR4X3RocmVzaG9sZDsKQEAgLTE0MjcsMTkgKzE0MjksMzEgQEAKIAl9IGVsc2UKIAkJRFBSSU5USyhIVywgREVCVUcsICJwaHlfYWRkciA9ICVkXG4iLCBuaWMtPm1paS5waHlfaWQpOwogCi0JLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKLQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KLQlibWNyICY9IH5CTUNSX0lTT0xBVEU7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwotCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CiAJaWRfaGkgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQyKTsKIAluaWMtPnBoeSA9ICh1MzIpaWRfaGkgPDwgMTYgfCAodTMyKWlkX2xvOwogCURQUklOVEsoSFcsIERFQlVHLCAicGh5IElEID0gMHglMDhYXG4iLCBuaWMtPnBoeSk7CiAKKwkvKiBTZWxlY3QgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7CisJCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgeworCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCQl9IGVsc2UgaWYgKG5pYy0+cGh5ICE9IHBoeV84MjU1Ml92KSB7CisJCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgYWRkciwgTUlJX0JNQ1IpOworCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLAorCQkJCWJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKKwkJfQorCX0KKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDgyNTUyOgorCSAqIENsZWFyIHRoZSBJU09MQVRFIGJpdCBvbiBzZWxlY3RlZCBwaHlfaWQgbGFzdCAobWlycm9yZWQgb24gYWxsCisJICogb3RoZXIgcGh5X2lkJ3MpIHVzaW5nIGJtY3IgdmFsdWUgZnJvbSBhZGRyIGRpc2NvdmVyeSBsb29wIGFib3ZlLgorCSAqLworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7CisKIAkvKiBIYW5kbGUgTmF0aW9uYWwgdHggcGh5cyAqLwogI2RlZmluZSBOQ1NfUEhZX01PREVMX01BU0sJMHhGRkYwRkZGRgogCWlmICgobmljLT5waHkgJiBOQ1NfUEhZX01PREVMX01BU0spID09IHBoeV9uc2NfdHgpIHsKQEAgLTE3ODEsOSArMTc5NSw3IEBACiAJCQluaWMtPmNiX3RvX2NsZWFuID0gbmljLT5jYl90b19jbGVhbi0+bmV4dDsKIAkJCW5pYy0+Y2JzX2F2YWlsKys7CiAJCX0KLQkJcGNpX2ZyZWVfY29uc2lzdGVudChuaWMtPnBkZXYsCi0JCQlzaXplb2Yoc3RydWN0IGNiKSAqIG5pYy0+cGFyYW1zLmNicy5jb3VudCwKLQkJCW5pYy0+Y2JzLCBuaWMtPmNic19kbWFfYWRkcik7CisJCXBjaV9wb29sX2ZyZWUobmljLT5jYnNfcG9vbCwgbmljLT5jYnMsIG5pYy0+Y2JzX2RtYV9hZGRyKTsKIAkJbmljLT5jYnMgPSBOVUxMOwogCQluaWMtPmNic19hdmFpbCA9IDA7CiAJfQpAQCAtMTgwMSw4ICsxODEzLDggQEAKIAluaWMtPmNiX3RvX3VzZSA9IG5pYy0+Y2JfdG9fc2VuZCA9IG5pYy0+Y2JfdG9fY2xlYW4gPSBOVUxMOwogCW5pYy0+Y2JzX2F2YWlsID0gMDsKIAotCW5pYy0+Y2JzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmljLT5wZGV2LAotCQlzaXplb2Yoc3RydWN0IGNiKSAqIGNvdW50LCAmbmljLT5jYnNfZG1hX2FkZHIpOworCW5pYy0+Y2JzID0gcGNpX3Bvb2xfYWxsb2MobmljLT5jYnNfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkgICZuaWMtPmNic19kbWFfYWRkcik7CiAJaWYgKCFuaWMtPmNicykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI4MjksNyArMjg0MSwxMSBAQAogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQotCisJbmljLT5jYnNfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZShuZXRkZXYtPm5hbWUsCisJCQkgICBuaWMtPnBkZXYsCisJCQkgICBuaWMtPnBhcmFtcy5jYnMuY291bnQgKiBzaXplb2Yoc3RydWN0IGNiKSwKKwkJCSAgIHNpemVvZih1MzIpLAorCQkJICAgMCk7CiAJRFBSSU5USyhQUk9CRSwgSU5GTywgImFkZHIgMHglbGx4LCBpcnEgJWQsIE1BQyBhZGRyICVwTVxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgdXNlX2lvID8gMSA6IDApLAogCQlwZGV2LT5pcnEsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMjg1OSw2ICsyODc1LDcgQEAKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAkJZTEwMF9mcmVlKG5pYyk7CiAJCXBjaV9pb3VubWFwKHBkZXYsIG5pYy0+Y3NyKTsKKwkJcGNpX3Bvb2xfZGVzdHJveShuaWMtPmNic19wb29sKTsKIAkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKaW5kZXggYzBmMTg1Yi4uMTE5MDE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCkBAIC03Niw2ICs3Niw3IEBACiAvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmFibGUgUGluIDcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NQRF9CWVBTICAweDAwMDA4MDAwIC8qIFNwZWVkIFNlbGVjdCBCeXBhc3MgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUk9fRElTICAgIDB4MDAwMjAwMDAgLyogUmVsYXhlZCBPcmRlcmluZyBkaXNhYmxlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0RNQV9EWU5fQ0xLX0VOIDB4MDAwODAwMDAgLyogRE1BIER5bmFtaWMgQ2xvY2sgR2F0aW5nICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLIDB4MDBDMDAwMDAKQEAgLTM0Nyw2ICszNDgsNyBAQAogLyogRXh0ZW5kZWQgQ29uZmlndXJhdGlvbiBDb250cm9sIGFuZCBTaXplICovCiAjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBFMTAwMF9FWFRDTkZfQ1RSTF9MQ0RfV1JJVEVfRU5BQkxFICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRTEwMDBfRVhUQ05GX0NUUkxfT0VNX1dSSVRFX0VOQUJMRSAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIEUxMDAwX0VYVENORl9DVFJMX1NXRkxBRyAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfTUFTSyAgIDB4MDBGRjAwMDAKICNkZWZpbmUgRTEwMDBfRVhUQ05GX1NJWkVfRVhUX1BDSUVfTEVOR1RIX1NISUZUICAgICAgICAgIDE2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDk4MTkzNmMuLjNlMTg3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xNDEsNiArMTQxLDIyIEBACiAjZGVmaW5lIEhWX1ROQ1JTX1VQUEVSCQlQSFlfUkVHKDc3OCwgMjkpIC8qIFRyYW5zbWl0IHdpdGggbm8gQ1JTICovCiAjZGVmaW5lIEhWX1ROQ1JTX0xPV0VSCQlQSFlfUkVHKDc3OCwgMzApCiAKKyNkZWZpbmUgRTEwMDBfRkNSVFZfUENIICAgICAweDA1RjQwIC8qIFBDSCBGbG93IENvbnRyb2wgUmVmcmVzaCBUaW1lciBWYWx1ZSAqLworCisvKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIFN0YXR1cyAqLworI2RlZmluZSBCTV9DU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQk1fQ1NfU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBCTV9DU19TVEFUVVNfUkVTT0xWRUQgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEJNX0NTX1NUQVRVU19TUEVFRF9NQVNLICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgQk1fQ1NfU1RBVFVTX1NQRUVEXzEwMDAgICAgICAgICAgIDB4ODAwMAorCisvKiA4MjU3NyBNb2JpbGUgUGh5IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBIVl9NX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgSFZfTV9TVEFUVVNfQVVUT05FR19DT01QTEVURSAgICAgIDB4MTAwMAorI2RlZmluZSBIVl9NX1NUQVRVU19TUEVFRF9NQVNLICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEhWX01fU1RBVFVTX1NQRUVEXzEwMDAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgSFZfTV9TVEFUVVNfTElOS19VUCAgICAgICAgICAgICAgIDB4MDA0MAorCiBlbnVtIGUxMDAwX2JvYXJkcyB7CiAJYm9hcmRfODI1NzEsCiAJYm9hcmRfODI1NzIsCkBAIC01MTksOSArNTM1LDEzIEBACiBleHRlcm4gczMyIGUxMDAwZV9nZXRfY2FibGVfbGVuZ3RoX2lncF8yKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZ2V0X3BoeV9pbmZvX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3BfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfcGh5X2h3X3Jlc2V0X2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9zZXRfZDNfbHBsdV9zdGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSk7CiBleHRlcm4gczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CitleHRlcm4gczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncF9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfc3dfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2dldF9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTUzOCw3ICs1NTgsMTEgQEAKIGV4dGVybiBzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfYm0yKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqcGh5X2N0cmwpOwogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWdfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZ19sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfaGFzX2xpbmtfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaXRlcmF0aW9ucywKIAkJCSAgICAgICB1MzIgdXNlY19pbnRlcnZhbCwgYm9vbCAqc3VjY2Vzcyk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtNTQ2LDcgKzU3MCwxMSBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKIGV4dGVybiBzMzIgZTEwMDBlX2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBfcmVhZF9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSk7CitleHRlcm4gczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBfd3JpdGVfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBzbG93KTsKIGV4dGVybiBzMzIgZTEwMDBfbGlua19zdGFsbF93b3JrYXJvdW5kX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMF9jb3BwZXJfbGlua19zZXR1cF84MjU3NyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCmluZGV4IDFiZjRkMmEuLmU4MjYzOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwpAQCAtMzI3LDEwICszMjcsMTggQEAKIAogCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOwogCi0JCXJldHZhbCA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KLQkJCSAgaHctPm1hYy5vcHMuc2V0dXBfbGluayhodykgOiBlMTAwMGVfZm9yY2VfbWFjX2ZjKGh3KSk7CisJCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgeworCQkJcmV0dmFsID0gaHctPm1hYy5vcHMuc2V0dXBfbGluayhodyk7CisJCQkvKiBpbXBsaWNpdCBnb3RvIG91dCAqLworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZTEwMDBlX2ZvcmNlX21hY19mYyhodyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gb3V0OworCQkJZTEwMDBlX3NldF9mY193YXRlcm1hcmtzKGh3KTsKKwkJfQogCX0KIAorb3V0OgogCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCBmZDQ0ZDlmLi5hYWVhNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtNzY0LDExICs3NjQsMTMgQEAKIAlzMzIgICgqZ2V0X2NhYmxlX2xlbmd0aCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfcGh5X2luZm8pKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqcmVhZF9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7CisJczMyICAoKnJlYWRfcGh5X3JlZ19sb2NrZWQpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNiAqKTsKIAl2b2lkICgqcmVsZWFzZV9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqcmVzZXRfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnNldF9kMF9scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKnNldF9kM19scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKndyaXRlX3BoeV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CisJczMyICAoKndyaXRlX3BoeV9yZWdfbG9ja2VkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOwogCXMzMiAgKCpjZmdfb25fbGlua191cCkoc3RydWN0IGUxMDAwX2h3ICopOwogfTsKIApAQCAtOTAxLDYgKzkwMyw3IEBACiBzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfaWNoOGxhbiB7CiAJYm9vbCBrbXJuX2xvY2tfbG9zc193b3JrYXJvdW5kX2VuYWJsZWQ7CiAJc3RydWN0IGUxMDAwX3NoYWRvd19yYW0gc2hhZG93X3JhbVtFMTAwMF9JQ0g4X1NIQURPV19SQU1fV09SRFNdOworCWJvb2wgbnZtX2sxX2VuYWJsZWQ7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfaHcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggOTlkZjJhYi4uZWZmM2Y0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0xMjIsNiArMTIyLDI3IEBACiAKICNkZWZpbmUgSFZfTEVEX0NPTkZJRwkJUEhZX1JFRyg3NjgsIDMwKSAvKiBMRUQgQ29uZmlndXJhdGlvbiAqLwogCisjZGVmaW5lIFNXX0ZMQUdfVElNRU9VVCAgICAxMDAwIC8qIFNXIFNlbWFwaG9yZSBmbGFnIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisKKy8qIFNNQnVzIEFkZHJlc3MgUGh5IFJlZ2lzdGVyICovCisjZGVmaW5lIEhWX1NNQl9BRERSICAgICAgICAgICAgUEhZX1JFRyg3NjgsIDI2KQorI2RlZmluZSBIVl9TTUJfQUREUl9QRUNfRU4gICAgIDB4MDIwMAorI2RlZmluZSBIVl9TTUJfQUREUl9WQUxJRCAgICAgIDB4MDA4MAorCisvKiBTdHJhcHBpbmcgT3B0aW9uIFJlZ2lzdGVyIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfU1RSQVAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDCisjZGVmaW5lIEUxMDAwX1NUUkFQX1NNQlVTX0FERFJFU1NfTUFTSyAgMHgwMEZFMDAwMAorI2RlZmluZSBFMTAwMF9TVFJBUF9TTUJVU19BRERSRVNTX1NISUZUIDE3CisKKy8qIE9FTSBCaXRzIFBoeSBSZWdpc3RlciAqLworI2RlZmluZSBIVl9PRU1fQklUUyAgICAgICAgICAgIFBIWV9SRUcoNzY4LCAyNSkKKyNkZWZpbmUgSFZfT0VNX0JJVFNfTFBMVSAgICAgICAweDAwMDQgLyogTG93IFBvd2VyIExpbmsgVXAgKi8KKyNkZWZpbmUgSFZfT0VNX0JJVFNfR0JFX0RJUyAgICAweDAwNDAgLyogR2lnYWJpdCBEaXNhYmxlICovCisjZGVmaW5lIEhWX09FTV9CSVRTX1JFU1RBUlRfQU4gMHgwNDAwIC8qIFJlc3RhcnQgQXV0by1uZWdvdGlhdGlvbiAqLworCisjZGVmaW5lIEUxMDAwX05WTV9LMV9DT05GSUcgMHgxQiAvKiBOVk0gSzEgQ29uZmlnIFdvcmQgKi8KKyNkZWZpbmUgRTEwMDBfTlZNX0sxX0VOQUJMRSAweDEgIC8qIE5WTSBFbmFibGUgSzEgYml0ICovCisKIC8qIElDSCBHYkUgRmxhc2ggSGFyZHdhcmUgU2VxdWVuY2luZyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgYml0IGJyZWFrZG93biAqLwogLyogT2Zmc2V0IDA0aCBIU0ZTVFMgKi8KIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyB7CkBAIC0yMDAsNiArMjIxLDEwIEBACiBzdGF0aWMgczMyIGUxMDAwX2NsZWFudXBfbGVkX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfbGVkX29uX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfbGVkX29mZl9wY2hsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyIGUxMDAwX3NldF9scGx1X3N0YXRlX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSk7CitzdGF0aWMgdm9pZCBlMTAwMF9sYW5faW5pdF9kb25lX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgczMyICBlMTAwMF9rMV9naWdfd29ya2Fyb3VuZF9odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGxpbmspOworc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfazFfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGsxX2VuYWJsZSk7CiAKIHN0YXRpYyBpbmxpbmUgdTE2IF9fZXIxNmZsYXNoKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmVnKQogewpAQCAtMjQyLDcgKzI2NywxMSBAQAogCiAJcGh5LT5vcHMuY2hlY2tfcG9sYXJpdHkgICAgICAgPSBlMTAwMF9jaGVja19wb2xhcml0eV9pZmVfaWNoOGxhbjsKIAlwaHktPm9wcy5yZWFkX3BoeV9yZWcgICAgICAgICA9IGUxMDAwX3JlYWRfcGh5X3JlZ19odjsKKwlwaHktPm9wcy5yZWFkX3BoeV9yZWdfbG9ja2VkICA9IGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQ7CisJcGh5LT5vcHMuc2V0X2QwX2xwbHVfc3RhdGUgICAgPSBlMTAwMF9zZXRfbHBsdV9zdGF0ZV9wY2hsYW47CisJcGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUgICAgPSBlMTAwMF9zZXRfbHBsdV9zdGF0ZV9wY2hsYW47CiAJcGh5LT5vcHMud3JpdGVfcGh5X3JlZyAgICAgICAgPSBlMTAwMF93cml0ZV9waHlfcmVnX2h2OworCXBoeS0+b3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19odl9sb2NrZWQ7CiAJcGh5LT5hdXRvbmVnX21hc2sgICAgICAgICAgICAgPSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUOwogCiAJcGh5LT5pZCA9IGUxMDAwX3BoeV91bmtub3duOwpAQCAtMzAzLDYgKzMzMiw4IEBACiAJY2FzZSBJR1AwM0UxMDAwX0VfUEhZX0lEOgogCQlwaHktPnR5cGUgPSBlMTAwMF9waHlfaWdwXzM7CiAJCXBoeS0+YXV0b25lZ19tYXNrID0gQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVDsKKwkJcGh5LT5vcHMucmVhZF9waHlfcmVnX2xvY2tlZCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwX2xvY2tlZDsKKwkJcGh5LT5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3BfbG9ja2VkOwogCQlicmVhazsKIAljYXNlIElGRV9FX1BIWV9JRDoKIAljYXNlIElGRV9QTFVTX0VfUEhZX0lEOgpAQCAtNDY5LDE0ICs1MDAsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgewotCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX0sxX0NPTkZJRywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9LMV9FTkFCTEUpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWdvdG8gb3V0OwotCX0KLQogCS8qCiAJICogRmlyc3Qgd2Ugd2FudCB0byBzZWUgaWYgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgcmVwb3J0cwogCSAqIGxpbmsuICBJZiBzbywgdGhlbiB3ZSB3YW50IHRvIGdldCB0aGUgY3VycmVudCBzcGVlZC9kdXBsZXgKQEAgLTQ4Niw2ICs1MDksMTIgQEAKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgeworCQlyZXRfdmFsID0gZTEwMDBfazFfZ2lnX3dvcmthcm91bmRfaHYoaHcsIGxpbmspOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KKwogCWlmICghbGluaykKIAkJZ290byBvdXQ7IC8qIE5vIGxpbmsgZGV0ZWN0ZWQgKi8KIApAQCAtNTY4LDEyICs1OTcsMzkgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgobnZtX211dGV4KTsKIAogLyoqCisgKiAgZTEwMDBfYWNxdWlyZV9udm1faWNoOGxhbiAtIEFjcXVpcmUgTlZNIG11dGV4CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQWNxdWlyZXMgdGhlIG11dGV4IGZvciBwZXJmb3JtaW5nIE5WTSBvcGVyYXRpb25zLgorICoqLworc3RhdGljIHMzMiBlMTAwMF9hY3F1aXJlX252bV9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBlMTAwMF9yZWxlYXNlX252bV9pY2g4bGFuIC0gUmVsZWFzZSBOVk0gbXV0ZXgKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZWxlYXNlcyB0aGUgbXV0ZXggdXNlZCB3aGlsZSBwZXJmb3JtaW5nIE5WTSBvcGVyYXRpb25zLgorICoqLworc3RhdGljIHZvaWQgZTEwMDBfcmVsZWFzZV9udm1faWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCW11dGV4X3VubG9jaygmbnZtX211dGV4KTsKKworCXJldHVybjsKK30KKworc3RhdGljIERFRklORV9NVVRFWChzd2ZsYWdfbXV0ZXgpOworCisvKioKICAqICBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuIC0gQWNxdWlyZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKLSAqICBBY3F1aXJlcyB0aGUgc29mdHdhcmUgY29udHJvbCBmbGFnIGZvciBwZXJmb3JtaW5nIE5WTSBhbmQgUEhZCi0gKiAgb3BlcmF0aW9ucy4gIFRoaXMgaXMgYSBmdW5jdGlvbiBwb2ludGVyIGVudHJ5IHBvaW50IG9ubHkgY2FsbGVkIGJ5Ci0gKiAgcmVhZC93cml0ZSByb3V0aW5lcyBmb3IgdGhlIFBIWSBhbmQgTlZNIHBhcnRzLgorICogIEFjcXVpcmVzIHRoZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcgZm9yIHBlcmZvcm1pbmcgUEhZIGFuZCBzZWxlY3QKKyAqICBNQUMgQ1NSIGFjY2Vzc2VzLgogICoqLwogc3RhdGljIHMzMiBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC01ODIsNyArNjM4LDcgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQltdXRleF9sb2NrKCZudm1fbXV0ZXgpOworCW11dGV4X2xvY2soJnN3ZmxhZ19tdXRleCk7CiAKIAl3aGlsZSAodGltZW91dCkgewogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwpAQCAtNTk5LDcgKzY1NSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXRpbWVvdXQgPSBQSFlfQ0ZHX1RJTUVPVVQgKiAyOworCXRpbWVvdXQgPSBTV19GTEFHX1RJTUVPVVQ7CiAKIAlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUc7CiAJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwpAQCAtNjIzLDcgKzY3OSw3IEBACiAKIG91dDoKIAlpZiAocmV0X3ZhbCkKLQkJbXV0ZXhfdW5sb2NrKCZudm1fbXV0ZXgpOworCQltdXRleF91bmxvY2soJnN3ZmxhZ19tdXRleCk7CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KQEAgLTYzMiw5ICs2ODgsOCBAQAogICogIGUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4gLSBSZWxlYXNlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgotICogIFJlbGVhc2VzIHRoZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcgZm9yIHBlcmZvcm1pbmcgTlZNIGFuZCBQSFkgb3BlcmF0aW9ucy4KLSAqICBUaGlzIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBlbnRyeSBwb2ludCBvbmx5IGNhbGxlZCBieSByZWFkL3dyaXRlCi0gKiAgcm91dGluZXMgZm9yIHRoZSBQSFkgYW5kIE5WTSBwYXJ0cy4KKyAqICBSZWxlYXNlcyB0aGUgc29mdHdhcmUgY29udHJvbCBmbGFnIGZvciBwZXJmb3JtaW5nIFBIWSBhbmQgc2VsZWN0CisgKiAgTUFDIENTUiBhY2Nlc3Nlcy4KICAqKi8KIHN0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTY0NCw3ICs2OTksOSBAQAogCWV4dGNuZl9jdHJsICY9IH5FMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUc7CiAJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwogCi0JbXV0ZXhfdW5sb2NrKCZudm1fbXV0ZXgpOworCW11dGV4X3VubG9jaygmc3dmbGFnX211dGV4KTsKKworCXJldHVybjsKIH0KIAogLyoqCkBAIC03NTIsNiArODA5LDMyNyBAQAogfQogCiAvKioKKyAqICBlMTAwMF9zd19sY2RfY29uZmlnX2ljaDhsYW4gLSBTVy1iYXNlZCBMQ0QgQ29uZmlndXJhdGlvbgorICogIEBodzogICBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgU1cgc2hvdWxkIGNvbmZpZ3VyZSB0aGUgTENEIGZyb20gdGhlIE5WTSBleHRlbmRlZCBjb25maWd1cmF0aW9uIHJlZ2lvbgorICogIGFzIGEgd29ya2Fyb3VuZCBmb3IgY2VydGFpbiBwYXJ0cy4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfc3dfbGNkX2NvbmZpZ19pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwl1MzIgaSwgZGF0YSwgY25mX3NpemUsIGNuZl9iYXNlX2FkZHIsIHN3X2NmZ19tYXNrOworCXMzMiByZXRfdmFsOworCXUxNiB3b3JkX2FkZHIsIHJlZ19kYXRhLCByZWdfYWRkciwgcGh5X3BhZ2UgPSAwOworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIFBIWSBmcm9tIHRoZSBOVk0gb24gSUNIIHBsYXRmb3Jtcy4gIFRoaXMKKwkgKiBpcyBuZWVkZWQgZHVlIHRvIGFuIGlzc3VlIHdoZXJlIHRoZSBOVk0gY29uZmlndXJhdGlvbiBpcworCSAqIG5vdCBwcm9wZXJseSBhdXRvbG9hZGVkIGFmdGVyIHBvd2VyIHRyYW5zaXRpb25zLgorCSAqIFRoZXJlZm9yZSwgYWZ0ZXIgZWFjaCBQSFkgcmVzZXQsIHdlIHdpbGwgbG9hZCB0aGUKKwkgKiBjb25maWd1cmF0aW9uIGRhdGEgb3V0IG9mIHRoZSBOVk0gbWFudWFsbHkuCisJICovCisJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfaWNoOGxhbiAmJiBwaHktPnR5cGUgPT0gZTEwMDBfcGh5X2lncF8zKSB8fAorCQkoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikpIHsKKwkJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YWRhcHRlcjsKKworCQkvKiBDaGVjayBpZiBTVyBuZWVkcyB0byBjb25maWd1cmUgdGhlIFBIWSAqLworCQlpZiAoKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTV9BTVQpIHx8CisJCSAgICAoYWRhcHRlci0+cGRldi0+ZGV2aWNlID09IEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9NKSB8fAorCQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pKQorCQkJc3dfY2ZnX21hc2sgPSBFMTAwMF9GRVhUTlZNX1NXX0NPTkZJR19JQ0g4TTsKKwkJZWxzZQorCQkJc3dfY2ZnX21hc2sgPSBFMTAwMF9GRVhUTlZNX1NXX0NPTkZJRzsKKworCQlkYXRhID0gZXIzMihGRVhUTlZNKTsKKwkJaWYgKCEoZGF0YSAmIHN3X2NmZ19tYXNrKSkKKwkJCWdvdG8gb3V0OworCisJCS8qIFdhaXQgZm9yIGJhc2ljIGNvbmZpZ3VyYXRpb24gY29tcGxldGVzIGJlZm9yZSBwcm9jZWVkaW5nICovCisJCWUxMDAwX2xhbl9pbml0X2RvbmVfaWNoOGxhbihodyk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIEhXIGRvZXMgbm90IGNvbmZpZ3VyZSBMQ0QgZnJvbSBQSFkKKwkJICogZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgU1cgY29uZmlndXJhdGlvbgorCQkgKi8KKwkJZGF0YSA9IGVyMzIoRVhUQ05GX0NUUkwpOworCQlpZiAoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUpCisJCQlnb3RvIG91dDsKKworCQljbmZfc2l6ZSA9IGVyMzIoRVhUQ05GX1NJWkUpOworCQljbmZfc2l6ZSAmPSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfTUFTSzsKKwkJY25mX3NpemUgPj49IEUxMDAwX0VYVENORl9TSVpFX0VYVF9QQ0lFX0xFTkdUSF9TSElGVDsKKwkJaWYgKCFjbmZfc2l6ZSkKKwkJCWdvdG8gb3V0OworCisJCWNuZl9iYXNlX2FkZHIgPSBkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfRVhUX0NORl9QT0lOVEVSX01BU0s7CisJCWNuZl9iYXNlX2FkZHIgPj49IEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9TSElGVDsKKworCQlpZiAoIShkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfT0VNX1dSSVRFX0VOQUJMRSkgJiYKKwkJICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSkgeworCQkJLyoKKwkJCSAqIEhXIGNvbmZpZ3VyZXMgdGhlIFNNQnVzIGFkZHJlc3MgYW5kIExFRHMgd2hlbiB0aGUKKwkJCSAqIE9FTSBhbmQgTENEIFdyaXRlIEVuYWJsZSBiaXRzIGFyZSBzZXQgaW4gdGhlIE5WTS4KKwkJCSAqIFdoZW4gYm90aCBOVk0gYml0cyBhcmUgY2xlYXJlZCwgU1cgd2lsbCBjb25maWd1cmUKKwkJCSAqIHRoZW0gaW5zdGVhZC4KKwkJCSAqLworCQkJZGF0YSA9IGVyMzIoU1RSQVApOworCQkJZGF0YSAmPSBFMTAwMF9TVFJBUF9TTUJVU19BRERSRVNTX01BU0s7CisJCQlyZWdfZGF0YSA9IGRhdGEgPj4gRTEwMDBfU1RSQVBfU01CVVNfQUREUkVTU19TSElGVDsKKwkJCXJlZ19kYXRhIHw9IEhWX1NNQl9BRERSX1BFQ19FTiB8IEhWX1NNQl9BRERSX1ZBTElEOworCQkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfaHZfbG9ja2VkKGh3LCBIVl9TTUJfQUREUiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIG91dDsKKworCQkJZGF0YSA9IGVyMzIoTEVEQ1RMKTsKKwkJCXJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVl9MRURfQ09ORklHLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYpZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBDb25maWd1cmUgTENEIGZyb20gZXh0ZW5kZWQgY29uZmlndXJhdGlvbiByZWdpb24uICovCisKKwkJLyogY25mX2Jhc2VfYWRkciBpcyBpbiBEV09SRCAqLworCQl3b3JkX2FkZHIgPSAodTE2KShjbmZfYmFzZV9hZGRyIDw8IDEpOworCisJCWZvciAoaSA9IDA7IGkgPCBjbmZfc2l6ZTsgaSsrKSB7CisJCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsICh3b3JkX2FkZHIgKyBpICogMiksIDEsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVnX2RhdGEpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisKKwkJCXJldF92YWwgPSBlMTAwMF9yZWFkX252bShodywgKHdvcmRfYWRkciArIGkgKiAyICsgMSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmcmVnX2FkZHIpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qIFNhdmUgb2ZmIHRoZSBQSFkgcGFnZSBmb3IgZnV0dXJlIHdyaXRlcy4gKi8KKwkJCWlmIChyZWdfYWRkciA9PSBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCkgeworCQkJCXBoeV9wYWdlID0gcmVnX2RhdGE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJlZ19hZGRyICY9IFBIWV9SRUdfTUFTSzsKKwkJCXJlZ19hZGRyIHw9IHBoeV9wYWdlOworCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQoaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyKXJlZ19hZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2sxX2dpZ193b3JrYXJvdW5kX2h2IC0gSzEgU2kgd29ya2Fyb3VuZAorICogIEBodzogICBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbGluazogbGluayB1cCBib29sIGZsYWcKKyAqCisgKiAgSWYgSzEgaXMgZW5hYmxlZCBmb3IgMUdicHMsIHRoZSBNQUMgbWlnaHQgc3RhbGwgd2hlbiB0cmFuc2l0aW9uaW5nCisgKiAgZnJvbSBhIGxvd2VyIHNwZWVkLiAgVGhpcyB3b3JrYXJvdW5kIGRpc2FibGVzIEsxIHdoZW5ldmVyIGxpbmsgaXMgYXQgMUdpZworICogIElmIGxpbmsgaXMgZG93biwgdGhlIGZ1bmN0aW9uIHdpbGwgcmVzdG9yZSB0aGUgZGVmYXVsdCBLMSBzZXR0aW5nIGxvY2F0ZWQKKyAqICBpbiB0aGUgTlZNLgorICoqLworc3RhdGljIHMzMiBlMTAwMF9rMV9naWdfd29ya2Fyb3VuZF9odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGxpbmspCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBzdGF0dXNfcmVnID0gMDsKKwlib29sIGsxX2VuYWJsZSA9IGh3LT5kZXZfc3BlYy5pY2g4bGFuLm52bV9rMV9lbmFibGVkOworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF9wY2hsYW4pCisJCWdvdG8gb3V0OworCisJLyogV3JhcCB0aGUgd2hvbGUgZmxvdyB3aXRoIHRoZSBzdyBmbGFnICovCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwkvKiBEaXNhYmxlIEsxIHdoZW4gbGluayBpcyAxR2Jwcywgb3RoZXJ3aXNlIHVzZSB0aGUgTlZNIHNldHRpbmcgKi8KKwlpZiAobGluaykgeworCQlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgeworCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZ19sb2NrZWQoaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTV9DU19TVEFUVVMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHVzX3JlZyk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIHJlbGVhc2U7CisKKwkJCXN0YXR1c19yZWcgJj0gQk1fQ1NfU1RBVFVTX0xJTktfVVAgfAorCQkJICAgICAgICAgICAgICBCTV9DU19TVEFUVVNfUkVTT0xWRUQgfAorCQkJICAgICAgICAgICAgICBCTV9DU19TVEFUVVNfU1BFRURfTUFTSzsKKworCQkJaWYgKHN0YXR1c19yZWcgPT0gKEJNX0NTX1NUQVRVU19MSU5LX1VQIHwKKwkJCSAgICAgICAgICAgICAgICAgICBCTV9DU19TVEFUVVNfUkVTT0xWRUQgfAorCQkJICAgICAgICAgICAgICAgICAgIEJNX0NTX1NUQVRVU19TUEVFRF8xMDAwKSkKKwkJCQlrMV9lbmFibGUgPSBmYWxzZTsKKwkJfQorCisJCWlmIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSB7CisJCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnX2xvY2tlZChodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWX01fU1RBVFVTLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1c19yZWcpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byByZWxlYXNlOworCisJCQlzdGF0dXNfcmVnICY9IEhWX01fU1RBVFVTX0xJTktfVVAgfAorCQkJICAgICAgICAgICAgICBIVl9NX1NUQVRVU19BVVRPTkVHX0NPTVBMRVRFIHwKKwkJCSAgICAgICAgICAgICAgSFZfTV9TVEFUVVNfU1BFRURfTUFTSzsKKworCQkJaWYgKHN0YXR1c19yZWcgPT0gKEhWX01fU1RBVFVTX0xJTktfVVAgfAorCQkJICAgICAgICAgICAgICAgICAgIEhWX01fU1RBVFVTX0FVVE9ORUdfQ09NUExFVEUgfAorCQkJICAgICAgICAgICAgICAgICAgIEhWX01fU1RBVFVTX1NQRUVEXzEwMDApKQorCQkJCWsxX2VuYWJsZSA9IGZhbHNlOworCQl9CisKKwkJLyogTGluayBzdGFsbCBmaXggZm9yIGxpbmsgdXAgKi8KKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkKGh3LCBQSFlfUkVHKDc3MCwgMTkpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIHJlbGVhc2U7CisKKwl9IGVsc2UgeworCQkvKiBMaW5rIHN0YWxsIGZpeCBmb3IgbGluayBkb3duICovCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnX2xvY2tlZChodywgUEhZX1JFRyg3NzAsIDE5KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEwMCk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byByZWxlYXNlOworCX0KKworCXJldF92YWwgPSBlMTAwMF9jb25maWd1cmVfazFfaWNoOGxhbihodywgazFfZW5hYmxlKTsKKworcmVsZWFzZToKKwlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2NvbmZpZ3VyZV9rMV9pY2g4bGFuIC0gQ29uZmlndXJlIEsxIHBvd2VyIHN0YXRlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAZW5hYmxlOiBLMSBzdGF0ZSB0byBjb25maWd1cmUKKyAqCisgKiAgQ29uZmlndXJlIHRoZSBLMSBwb3dlciBzdGF0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyLgorICogIEFzc3VtZXMgc2VtYXBob3JlIGFscmVhZHkgYWNxdWlyZWQuCisgKgorICogIFN1Y2Nlc3MgcmV0dXJucyAwLCBGYWlsdXJlIHJldHVybnMgLUUxMDAwX0VSUl9QSFkgKC0yKQorICoqLworc3RhdGljIHMzMiBlMTAwMF9jb25maWd1cmVfazFfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGsxX2VuYWJsZSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGN0cmxfcmVnID0gMDsKKwl1MzIgY3RybF9leHQgPSAwOworCXUzMiByZWcgPSAwOworCXUxNiBrbXJuX3JlZyA9IDA7CisKKwlyZXRfdmFsID0gZTEwMDBlX3JlYWRfa21ybl9yZWdfbG9ja2VkKGh3LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9LMV9DT05GSUcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbXJuX3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGsxX2VuYWJsZSkKKwkJa21ybl9yZWcgfD0gRTEwMDBfS01STkNUUkxTVEFfSzFfRU5BQkxFOworCWVsc2UKKwkJa21ybl9yZWcgJj0gfkUxMDAwX0tNUk5DVFJMU1RBX0sxX0VOQUJMRTsKKworCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfa21ybl9yZWdfbG9ja2VkKGh3LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfQ09ORklHLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga21ybl9yZWcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXVkZWxheSgyMCk7CisJY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKKwljdHJsX3JlZyA9IGVyMzIoQ1RSTCk7CisKKwlyZWcgPSBjdHJsX3JlZyAmIH4oRTEwMDBfQ1RSTF9TUERfMTAwMCB8IEUxMDAwX0NUUkxfU1BEXzEwMCk7CisJcmVnIHw9IEUxMDAwX0NUUkxfRlJDU1BEOworCWV3MzIoQ1RSTCwgcmVnKTsKKworCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0IHwgRTEwMDBfQ1RSTF9FWFRfU1BEX0JZUFMpOworCXVkZWxheSgyMCk7CisJZXczMihDVFJMLCBjdHJsX3JlZyk7CisJZXczMihDVFJMX0VYVCwgY3RybF9leHQpOworCXVkZWxheSgyMCk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgZTEwMDBfb2VtX2JpdHNfY29uZmlnX2ljaDhsYW4gLSBTVy1iYXNlZCBMQ0QgQ29uZmlndXJhdGlvbgorICogIEBodzogICAgICAgcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGQwX3N0YXRlOiBib29sZWFuIGlmIGVudGVyaW5nIGQwIG9yIGQzIGRldmljZSBzdGF0ZQorICoKKyAqICBTVyB3aWxsIGNvbmZpZ3VyZSBHYmUgRGlzYWJsZSBhbmQgTFBMVSBiYXNlZCBvbiB0aGUgTlZNLiBUaGUgZm91ciBiaXRzIGFyZQorICogIGNvbGxlY3RpdmVseSBjYWxsZWQgT0VNIGJpdHMuICBUaGUgT0VNIFdyaXRlIEVuYWJsZSBiaXQgYW5kIFNXIENvbmZpZyBiaXQKKyAqICBpbiBOVk0gZGV0ZXJtaW5lcyB3aGV0aGVyIEhXIHNob3VsZCBjb25maWd1cmUgTFBMVSBhbmQgR2JlIERpc2FibGUuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX29lbV9iaXRzX2NvbmZpZ19pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgZDBfc3RhdGUpCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBtYWNfcmVnOworCXUxNiBvZW1fcmVnOworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF9wY2hsYW4pCisJCXJldHVybiByZXRfdmFsOworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwltYWNfcmVnID0gZXIzMihFWFRDTkZfQ1RSTCk7CisJaWYgKG1hY19yZWcgJiBFMTAwMF9FWFRDTkZfQ1RSTF9PRU1fV1JJVEVfRU5BQkxFKQorCQlnb3RvIG91dDsKKworCW1hY19yZWcgPSBlcjMyKEZFWFROVk0pOworCWlmICghKG1hY19yZWcgJiBFMTAwMF9GRVhUTlZNX1NXX0NPTkZJR19JQ0g4TSkpCisJCWdvdG8gb3V0OworCisJbWFjX3JlZyA9IGVyMzIoUEhZX0NUUkwpOworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZ19sb2NrZWQoaHcsIEhWX09FTV9CSVRTLCAmb2VtX3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJb2VtX3JlZyAmPSB+KEhWX09FTV9CSVRTX0dCRV9ESVMgfCBIVl9PRU1fQklUU19MUExVKTsKKworCWlmIChkMF9zdGF0ZSkgeworCQlpZiAobWFjX3JlZyAmIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFKQorCQkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19HQkVfRElTOworCisJCWlmIChtYWNfcmVnICYgRTEwMDBfUEhZX0NUUkxfRDBBX0xQTFUpCisJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CisJfSBlbHNlIHsKKwkJaWYgKG1hY19yZWcgJiBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfR0JFX0RJU0FCTEUpCisJCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0dCRV9ESVM7CisKKwkJaWYgKG1hY19yZWcgJiBFMTAwMF9QSFlfQ1RSTF9OT05EMEFfTFBMVSkKKwkJCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfTFBMVTsKKwl9CisJLyogUmVzdGFydCBhdXRvLW5lZyB0byBhY3RpdmF0ZSB0aGUgYml0cyAqLworCWlmICghZTEwMDBfY2hlY2tfcmVzZXRfYmxvY2soaHcpKQorCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkKGh3LCBIVl9PRU1fQklUUywgb2VtX3JlZyk7CisKK291dDoKKwlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworCisvKioKICAqICBlMTAwMF9odl9waHlfd29ya2Fyb3VuZHNfaWNoOGxhbiAtIEEgc2VyaWVzIG9mIFBoeSB3b3JrYXJvdW5kcyB0byBiZQogICogIGRvbmUgYWZ0ZXIgZXZlcnkgUEhZIHJlc2V0LgogICoqLwpAQCAtNzkxLDEwICsxMTY5LDIwIEBACiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CisKIAlody0+cGh5LmFkZHIgPSAxOwotCWUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULCAwKTsKKwlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDApOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgSzEgU2kgd29ya2Fyb3VuZCBkdXJpbmcgcGh5IHJlc2V0IGFzc3VtaW5nIHRoZXJlIGlzCisJICogbGluayBzbyB0aGF0IGl0IGRpc2FibGVzIEsxIGlmIGxpbmsgaXMgaW4gMUdicHMuCisJICovCisJcmV0X3ZhbCA9IGUxMDAwX2sxX2dpZ193b3JrYXJvdW5kX2h2KGh3LCB0cnVlKTsKKworb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC04NDAsMTEgKzEyMjgsOCBAQAogICoqLwogc3RhdGljIHMzMiBlMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7Ci0JdTMyIGk7Ci0JdTMyIGRhdGEsIGNuZl9zaXplLCBjbmZfYmFzZV9hZGRyLCBzd19jZmdfbWFzazsKLQlzMzIgcmV0X3ZhbDsKLQl1MTYgd29yZF9hZGRyLCByZWdfZGF0YSwgcmVnX2FkZHIsIHBoeV9wYWdlID0gMDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IHJlZzsKIAogCXJldF92YWwgPSBlMTAwMGVfcGh5X2h3X3Jlc2V0X2dlbmVyaWMoaHcpOwogCWlmIChyZXRfdmFsKQpAQCAtODU5LDgxICsxMjQ0LDIwIEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIFBIWSBmcm9tIHRoZSBOVk0gb24gSUNIIHBsYXRmb3Jtcy4gIFRoaXMKLQkgKiBpcyBuZWVkZWQgZHVlIHRvIGFuIGlzc3VlIHdoZXJlIHRoZSBOVk0gY29uZmlndXJhdGlvbiBpcwotCSAqIG5vdCBwcm9wZXJseSBhdXRvbG9hZGVkIGFmdGVyIHBvd2VyIHRyYW5zaXRpb25zLgotCSAqIFRoZXJlZm9yZSwgYWZ0ZXIgZWFjaCBQSFkgcmVzZXQsIHdlIHdpbGwgbG9hZCB0aGUKLQkgKiBjb25maWd1cmF0aW9uIGRhdGEgb3V0IG9mIHRoZSBOVk0gbWFudWFsbHkuCi0JICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuICYmIHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpIHsKLQkJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YWRhcHRlcjsKKwkvKiBEdW1teSByZWFkIHRvIGNsZWFyIHRoZSBwaHkgd2FrZXVwIGJpdCBhZnRlciBsY2QgcmVzZXQgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZTFlX3JwaHkoaHcsIEJNX1dVQywgJnJlZyk7CiAKLQkJLyogQ2hlY2sgaWYgU1cgbmVlZHMgY29uZmlndXJlIHRoZSBQSFkgKi8KLQkJaWYgKChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UKSB8fAotCQkgICAgKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSkpCi0JCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHX0lDSDhNOwotCQllbHNlCi0JCQlzd19jZmdfbWFzayA9IEUxMDAwX0ZFWFROVk1fU1dfQ09ORklHOworCS8qIENvbmZpZ3VyZSB0aGUgTENEIHdpdGggdGhlIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gcmVnaW9uIGluIE5WTSAqLworCXJldF92YWwgPSBlMTAwMF9zd19sY2RfY29uZmlnX2ljaDhsYW4oaHcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAotCQlkYXRhID0gZXIzMihGRVhUTlZNKTsKLQkJaWYgKCEoZGF0YSAmIHN3X2NmZ19tYXNrKSkKLQkJCXJldHVybiAwOworCS8qIENvbmZpZ3VyZSB0aGUgTENEIHdpdGggdGhlIE9FTSBiaXRzIGluIE5WTSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQorCQlyZXRfdmFsID0gZTEwMDBfb2VtX2JpdHNfY29uZmlnX2ljaDhsYW4oaHcsIHRydWUpOwogCi0JCS8qIFdhaXQgZm9yIGJhc2ljIGNvbmZpZ3VyYXRpb24gY29tcGxldGVzIGJlZm9yZSBwcm9jZWVkaW5nICovCi0JCWUxMDAwX2xhbl9pbml0X2RvbmVfaWNoOGxhbihodyk7Ci0KLQkJLyoKLQkJICogTWFrZSBzdXJlIEhXIGRvZXMgbm90IGNvbmZpZ3VyZSBMQ0QgZnJvbSBQSFkKLQkJICogZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBiZWZvcmUgU1cgY29uZmlndXJhdGlvbgotCQkgKi8KLQkJZGF0YSA9IGVyMzIoRVhUQ05GX0NUUkwpOwotCQlpZiAoZGF0YSAmIEUxMDAwX0VYVENORl9DVFJMX0xDRF9XUklURV9FTkFCTEUpCi0JCQlyZXR1cm4gMDsKLQotCQljbmZfc2l6ZSA9IGVyMzIoRVhUQ05GX1NJWkUpOwotCQljbmZfc2l6ZSAmPSBFMTAwMF9FWFRDTkZfU0laRV9FWFRfUENJRV9MRU5HVEhfTUFTSzsKLQkJY25mX3NpemUgPj49IEUxMDAwX0VYVENORl9TSVpFX0VYVF9QQ0lFX0xFTkdUSF9TSElGVDsKLQkJaWYgKCFjbmZfc2l6ZSkKLQkJCXJldHVybiAwOwotCi0JCWNuZl9iYXNlX2FkZHIgPSBkYXRhICYgRTEwMDBfRVhUQ05GX0NUUkxfRVhUX0NORl9QT0lOVEVSX01BU0s7Ci0JCWNuZl9iYXNlX2FkZHIgPj49IEUxMDAwX0VYVENORl9DVFJMX0VYVF9DTkZfUE9JTlRFUl9TSElGVDsKLQotCQkvKiBDb25maWd1cmUgTENEIGZyb20gZXh0ZW5kZWQgY29uZmlndXJhdGlvbiByZWdpb24uICovCi0KLQkJLyogY25mX2Jhc2VfYWRkciBpcyBpbiBEV09SRCAqLwotCQl3b3JkX2FkZHIgPSAodTE2KShjbmZfYmFzZV9hZGRyIDw8IDEpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjbmZfc2l6ZTsgaSsrKSB7Ci0JCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsCi0JCQkJCQkod29yZF9hZGRyICsgaSAqIDIpLAotCQkJCQkJMSwKLQkJCQkJCSZyZWdfZGF0YSk7Ci0JCQlpZiAocmV0X3ZhbCkKLQkJCQlyZXR1cm4gcmV0X3ZhbDsKLQotCQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LAotCQkJCQkJKHdvcmRfYWRkciArIGkgKiAyICsgMSksCi0JCQkJCQkxLAotCQkJCQkJJnJlZ19hZGRyKTsKLQkJCWlmIChyZXRfdmFsKQotCQkJCXJldHVybiByZXRfdmFsOwotCi0JCQkvKiBTYXZlIG9mZiB0aGUgUEhZIHBhZ2UgZm9yIGZ1dHVyZSB3cml0ZXMuICovCi0JCQlpZiAocmVnX2FkZHIgPT0gSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QpIHsKLQkJCQlwaHlfcGFnZSA9IHJlZ19kYXRhOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlyZWdfYWRkciB8PSBwaHlfcGFnZTsKLQotCQkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCAodTMyKXJlZ19hZGRyLCByZWdfZGF0YSk7Ci0JCQlpZiAocmV0X3ZhbCkKLQkJCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQotCX0KLQorb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0xMDU0LDYgKzEzNzgsMzggQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuIC0gU2V0IExvdyBQb3dlciBMaW5rIFVwIHN0YXRlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAYWN0aXZlOiB0cnVlIHRvIGVuYWJsZSBMUExVLCBmYWxzZSB0byBkaXNhYmxlCisgKgorICogIFNldHMgdGhlIExQTFUgc3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBhY3RpdmUgZmxhZy4gIEZvciBQQ0gsIGlmIE9FTSB3cml0ZQorICogIGJpdCBhcmUgZGlzYWJsZWQgaW4gdGhlIE5WTSwgd3JpdGluZyB0aGUgTFBMVSBiaXRzIGluIHRoZSBNQUMgd2lsbCBub3Qgc2V0CisgKiAgdGhlIHBoeSBzcGVlZC4gVGhpcyBmdW5jdGlvbiB3aWxsIG1hbnVhbGx5IHNldCB0aGUgTFBMVSBiaXQgYW5kIHJlc3RhcnQKKyAqICBhdXRvLW5lZyBhcyBodyB3b3VsZCBkby4gRDMgYW5kIEQwIExQTFUgd2lsbCBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uCisgKiAgc2luY2UgaXQgY29uZmlndXJlcyB0aGUgc2FtZSBiaXQuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX3NldF9scGx1X3N0YXRlX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGFjdGl2ZSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IG9lbV9yZWc7CisKKwlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIEhWX09FTV9CSVRTLCAmb2VtX3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGFjdGl2ZSkKKwkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19MUExVOworCWVsc2UKKwkJb2VtX3JlZyAmPSB+SFZfT0VNX0JJVFNfTFBMVTsKKworCW9lbV9yZWcgfD0gSFZfT0VNX0JJVFNfUkVTVEFSVF9BTjsKKwlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIEhWX09FTV9CSVRTLCBvZW1fcmVnKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF9zZXRfZDBfbHBsdV9zdGF0ZV9pY2g4bGFuIC0gU2V0IExvdyBQb3dlciBMaW5rdXAgRDAgc3RhdGUKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBhY3RpdmU6IFRSVUUgdG8gZW5hYmxlIExQTFUsIEZBTFNFIHRvIGRpc2FibGUKQEAgLTEzMTQsMTIgKzE2NzAsMTEgQEAKIAlpZiAoKG9mZnNldCA+PSBudm0tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gbnZtLT53b3JkX3NpemUgLSBvZmZzZXQpIHx8CiAJICAgICh3b3JkcyA9PSAwKSkgewogCQlod19kYmcoaHcsICJudm0gcGFyYW1ldGVyKHMpIG91dCBvZiBib3VuZHNcbiIpOwotCQlyZXR1cm4gLUUxMDAwX0VSUl9OVk07CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKKwkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4oaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKKwludm0tPm9wcy5hY3F1aXJlX252bShodyk7CiAKIAlyZXRfdmFsID0gZTEwMDBfdmFsaWRfbnZtX2JhbmtfZGV0ZWN0X2ljaDhsYW4oaHcsICZiYW5rKTsKIAlpZiAocmV0X3ZhbCkgewpAQCAtMTM0NSw3ICsxNzAwLDcgQEAKIAkJfQogCX0KIAotCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAogb3V0OgogCWlmIChyZXRfdmFsKQpAQCAtMTYwMywxMSArMTk1OCwxNSBAQAogCQlyZXR1cm4gLUUxMDAwX0VSUl9OVk07CiAJfQogCisJbnZtLT5vcHMuYWNxdWlyZV9udm0oaHcpOworCiAJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKIAkJZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLm1vZGlmaWVkID0gMTsKIAkJZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLnZhbHVlID0gZGF0YVtpXTsKIAl9CiAKKwludm0tPm9wcy5yZWxlYXNlX252bShodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzNyw5ICsxOTk2LDcgQEAKIAlpZiAobnZtLT50eXBlICE9IGUxMDAwX252bV9mbGFzaF9zdykKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OworCW52bS0+b3BzLmFjcXVpcmVfbnZtKGh3KTsKIAogCS8qCiAJICogV2UncmUgd3JpdGluZyB0byB0aGUgb3Bwb3NpdGUgYmFuayBzbyBpZiB3ZSdyZSBvbiBiYW5rIDEsCkBAIC0xNjU3LDcgKzIwMTQsNyBAQAogCQlvbGRfYmFua19vZmZzZXQgPSAwOwogCQlyZXRfdmFsID0gZTEwMDBfZXJhc2VfZmxhc2hfYmFua19pY2g4bGFuKGh3LCAxKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTY2NSw3ICsyMDIyLDcgQEAKIAkJbmV3X2Jhbmtfb2Zmc2V0ID0gMDsKIAkJcmV0X3ZhbCA9IGUxMDAwX2VyYXNlX2ZsYXNoX2JhbmtfaWNoOGxhbihodywgMCk7CiAJCWlmIChyZXRfdmFsKSB7Ci0JCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMTcyMyw3ICsyMDgwLDcgQEAKIAlpZiAocmV0X3ZhbCkgewogCQkvKiBQb3NzaWJseSByZWFkLW9ubHksIHNlZSBlMTAwMGVfd3JpdGVfcHJvdGVjdF9udm1faWNoOGxhbigpICovCiAJCWh3X2RiZyhodywgIkZsYXNoIGNvbW1pdCBmYWlsZWQuXG4iKTsKLQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzM2LDcgKzIwOTMsNyBAQAogCWFjdF9vZmZzZXQgPSBuZXdfYmFua19vZmZzZXQgKyBFMTAwMF9JQ0hfTlZNX1NJR19XT1JEOwogCXJldF92YWwgPSBlMTAwMF9yZWFkX2ZsYXNoX3dvcmRfaWNoOGxhbihodywgYWN0X29mZnNldCwgJmRhdGEpOwogCWlmIChyZXRfdmFsKSB7Ci0JCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQludm0tPm9wcy5yZWxlYXNlX252bShodyk7CiAJCWdvdG8gb3V0OwogCX0KIAlkYXRhICY9IDB4QkZGRjsKQEAgLTE3NDQsNyArMjEwMSw3IEBACiAJCQkJCQkgICAgICAgYWN0X29mZnNldCAqIDIgKyAxLAogCQkJCQkJICAgICAgICh1OCkoZGF0YSA+PiA4KSk7CiAJaWYgKHJldF92YWwpIHsKLQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNzU3LDcgKzIxMTQsNyBAQAogCWFjdF9vZmZzZXQgPSAob2xkX2Jhbmtfb2Zmc2V0ICsgRTEwMDBfSUNIX05WTV9TSUdfV09SRCkgKiAyICsgMTsKIAlyZXRfdmFsID0gZTEwMDBfcmV0cnlfd3JpdGVfZmxhc2hfYnl0ZV9pY2g4bGFuKGh3LCBhY3Rfb2Zmc2V0LCAwKTsKIAlpZiAocmV0X3ZhbCkgewotCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3NjcsNyArMjEyNCw3IEBACiAJCWRldl9zcGVjLT5zaGFkb3dfcmFtW2ldLnZhbHVlID0gMHhGRkZGOwogCX0KIAotCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAogCS8qCiAJICogUmVsb2FkIHRoZSBFRVBST00sIG9yIGVsc2UgbW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBhcHBlYXIKQEAgLTE4MzEsMTQgKzIxODgsMTIgQEAKICAqKi8KIHZvaWQgZTEwMDBlX3dyaXRlX3Byb3RlY3RfbnZtX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKKwlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOwogCXVuaW9uIGljaDhfZmxhc2hfcHJvdGVjdGVkX3JhbmdlIHByMDsKIAl1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgaHNmc3RzOwogCXUzMiBnZnByZWc7Ci0JczMyIHJldF92YWw7CiAKLQlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybjsKKwludm0tPm9wcy5hY3F1aXJlX252bShodyk7CiAKIAlnZnByZWcgPSBlcjMyZmxhc2goSUNIX0ZMQVNIX0dGUFJFRyk7CiAKQEAgLTE4NTksNyArMjIxNCw3IEBACiAJaHNmc3RzLmhzZl9zdGF0dXMuZmxvY2tkbiA9IHRydWU7CiAJZXczMmZsYXNoKElDSF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOwogCi0JZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogfQogCiAvKioKQEAgLTIyMjksNiArMjU4NCw4IEBACiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX3Jlc2V0X2h3X2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKKwlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfaWNoOGxhbiAqZGV2X3NwZWMgPSAmaHctPmRldl9zcGVjLmljaDhsYW47CisJdTE2IHJlZzsKIAl1MzIgY3RybCwgaWNyLCBrYWI7CiAJczMyIHJldF92YWw7CiAKQEAgLTIyNjMsNiArMjYyMCwxOCBAQAogCQlldzMyKFBCUywgRTEwMDBfUEJTXzE2Syk7CiAJfQogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyogU2F2ZSB0aGUgTlZNIEsxIGJpdCBzZXR0aW5nKi8KKwkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBFMTAwMF9OVk1fSzFfQ09ORklHLCAxLCAmcmVnKTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKworCQlpZiAocmVnICYgRTEwMDBfTlZNX0sxX0VOQUJMRSkKKwkJCWRldl9zcGVjLT5udm1fazFfZW5hYmxlZCA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9zcGVjLT5udm1fazFfZW5hYmxlZCA9IGZhbHNlOworCX0KKwogCWN0cmwgPSBlcjMyKENUUkwpOwogCiAJaWYgKCFlMTAwMF9jaGVja19yZXNldF9ibG9jayhodykpIHsKQEAgLTIzMDQsNyArMjY3MywxOSBAQAogCQkJaHdfZGJnKGh3LCAiQXV0byBSZWFkIERvbmUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCX0KIAl9CisJLyogRHVtbXkgcmVhZCB0byBjbGVhciB0aGUgcGh5IHdha2V1cCBiaXQgYWZ0ZXIgbGNkIHJlc2V0ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCisJCWUxZV9ycGh5KGh3LCBCTV9XVUMsICZyZWcpOwogCisJcmV0X3ZhbCA9IGUxMDAwX3N3X2xjZF9jb25maWdfaWNoOGxhbihodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX29lbV9iaXRzX2NvbmZpZ19pY2g4bGFuKGh3LCB0cnVlKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CiAJLyoKIAkgKiBGb3IgUENILCB0aGlzIHdyaXRlIHdpbGwgbWFrZSBzdXJlIHRoYXQgYW55IG5vaXNlCiAJICogd2lsbCBiZSBkZXRlY3RlZCBhcyBhIENSQyBlcnJvciBhbmQgYmUgZHJvcHBlZCByYXRoZXIgdGhhbiBzaG93IHVwCkBAIC0yMzIzLDYgKzI3MDQsNyBAQAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQogCQlyZXRfdmFsID0gZTEwMDBfaHZfcGh5X3dvcmthcm91bmRzX2ljaDhsYW4oaHcpOwogCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTI2MjcsMTQgKzMwMDksNiBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgJiYgKCpzcGVlZCA9PSBTUEVFRF8xMDAwKSkgewotCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX2ttcm5fcmVnKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfQ09ORklHLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfSzFfRElTQUJMRSk7Ci0JCWlmIChyZXRfdmFsKQotCQkJcmV0dXJuIHJldF92YWw7Ci0JfQotCiAJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfaWNoOGxhbikgJiYKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCiAJICAgICgqc3BlZWQgPT0gU1BFRURfMTAwMCkpIHsKQEAgLTI4NDMsOSArMzIxNyw4IEBACiAJCSAgICAgICAgICAgIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFOwogCQlldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAKLQkJLyogV29ya2Fyb3VuZCBTV0ZMQUcgdW5leHBlY3RlZGx5IHNldCBkdXJpbmcgUzAtPlN4ICovCiAJCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKQotCQkJdWRlbGF5KDUwMCk7CisJCQllMTAwMF9waHlfaHdfcmVzZXRfaWNoOGxhbihodyk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMzExMyw5ICszNDg2LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgaWNoOF9udm1fb3BzID0gewotCS5hY3F1aXJlX252bQkJPSBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuLAorCS5hY3F1aXJlX252bQkJPSBlMTAwMF9hY3F1aXJlX252bV9pY2g4bGFuLAogCS5yZWFkX252bQkgCT0gZTEwMDBfcmVhZF9udm1faWNoOGxhbiwKLQkucmVsZWFzZV9udm0JCT0gZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbiwKKwkucmVsZWFzZV9udm0JCT0gZTEwMDBfcmVsZWFzZV9udm1faWNoOGxhbiwKIAkudXBkYXRlX252bQkJPSBlMTAwMF91cGRhdGVfbnZtX2NoZWNrc3VtX2ljaDhsYW4sCiAJLnZhbGlkX2xlZF9kZWZhdWx0CT0gZTEwMDBfdmFsaWRfbGVkX2RlZmF1bHRfaWNoOGxhbiwKIAkudmFsaWRhdGVfbnZtCQk9IGUxMDAwX3ZhbGlkYXRlX252bV9jaGVja3N1bV9pY2g4bGFuLApAQCAtMzE4Niw2ICszNTU5LDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0ZMQVNICiAJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUworCQkJCSAgfCBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSAvKiBlcnJhdGEgKi8KIAkJCQkgIHwgRkxBR19BUE1FX0lOX1dVQywKIAkucGJhCQkJPSAyNiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSA0MDk2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDA2ODdjNmEuLmZhZDhmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTI3NjksMjUgKzI3NjksMzggQEAKIAkvKgogCSAqIGZsb3cgY29udHJvbCBzZXR0aW5ncwogCSAqCi0JICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IHR3byBmdWxsIGZyYW1lCisJICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBtdXN0IGJlIGxvdyBlbm91Z2ggdG8gZml0IG9uZSBmdWxsIGZyYW1lCiAJICogKG9yIHRoZSBzaXplIHVzZWQgZm9yIGVhcmx5IHJlY2VpdmUpIGFib3ZlIGl0IGluIHRoZSBSeCBGSUZPLgogCSAqIFNldCBpdCB0byB0aGUgbG93ZXIgb2Y6CiAJICogLSA5MCUgb2YgdGhlIFJ4IEZJRk8gc2l6ZSwgYW5kCiAJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgdGhlIGVhcmx5IHJlY2VpdmUgc2l6ZSAoZm9yIHBhcnRzCiAJICogICB3aXRoIEVSVCBzdXBwb3J0IGFzc3VtaW5nIEVSVCBzZXQgdG8gRTEwMDBfRVJUXzIwNDgpLCBvcgotCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHR3byBmdWxsIGZyYW1lcworCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIG9uZSBmdWxsIGZyYW1lCiAJICovCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgJiYKLQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtIChFMTAwMF9FUlRfMjA0OCA8PCAzKSkpOwotCWVsc2UKLQkJaHdtID0gbWluKCgocGJhIDw8IDEwKSAqIDkgLyAxMCksCi0JCQkgICgocGJhIDw8IDEwKSAtICgyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKSk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHsKKwkJLyoKKwkJICogV29ya2Fyb3VuZCBQQ0ggTE9NIGFkYXB0ZXIgaGFuZ3Mgd2l0aCBjZXJ0YWluIG5ldHdvcmsKKwkJICogbG9hZHMuICBJZiBoYW5ncyBwZXJzaXN0LCB0cnkgZGlzYWJsaW5nIFR4IGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkJZmMtPmhpZ2hfd2F0ZXIgPSAweDM1MDA7CisJCQlmYy0+bG93X3dhdGVyICA9IDB4MTUwMDsKKwkJfSBlbHNlIHsKKwkJCWZjLT5oaWdoX3dhdGVyID0gMHg1MDAwOworCQkJZmMtPmxvd193YXRlciAgPSAweDMwMDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfRVJUKSAmJgorCQkgICAgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gKEUxMDAwX0VSVF8yMDQ4IDw8IDMpKSk7CisJCWVsc2UKKwkJCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkJCSAgKChwYmEgPDwgMTApIC0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KLQlmYy0+bG93X3dhdGVyID0gKGZjLT5oaWdoX3dhdGVyIC0gKDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkpOwotCWZjLT5sb3dfd2F0ZXIgJj0gRTEwMDBfRkNSVExfUlRMOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiBFMTAwMF9GQ1JUSF9SVEg7IC8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSA4OworCX0KIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfRElTQUJMRV9GQ19QQVVTRV9USU1FKQogCQlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKQEAgLTI4MTMsNiArMjgyNiwxMCBAQAogCWlmIChtYWMtPm9wcy5pbml0X2h3KGh3KSkKIAkJZV9lcnIoIkhhcmR3YXJlIEVycm9yXG4iKTsKIAorCS8qIGFkZGl0aW9uYWwgcGFydCBvZiB0aGUgZmxvdy1jb250cm9sIHdvcmthcm91bmQgYWJvdmUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKKwkJZXczMihGQ1JUVl9QQ0gsIDB4MTAwMCk7CisKIAllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7CiAKIAkvKiBFbmFibGUgaC93IHRvIHJlY29nbml6ZSBhbiA4MDIuMVEgVkxBTiBFdGhlcm5ldCBwYWNrZXQgKi8KQEAgLTM2MTAsNyArMzYyNyw3IEBACiAJCQljYXNlIFNQRUVEXzEwMDoKIAkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7Ci0JCQkJLyogbWF5YmUgYWRkIHNvbWUgdGltZW91dCBmYWN0b3IgPyAqLworCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTA7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQyODgsOCArNDMwNSwxMCBAQAogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKLQkvKiBlMTAwMGVfZG93biBoYXMgYSBkZXBlbmRlbmN5IG9uIG1heF9mcmFtZV9zaXplICovCisJLyogZTEwMDBlX2Rvd24gLT4gZTEwMDBlX3Jlc2V0IGRlcGVuZGVudCBvbiBtYXhfZnJhbWVfc2l6ZSAmIG10dSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOworCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CiAKQEAgLTQzMTksOSArNDMzOCw2IEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFVEhfRlJBTUVfTEVOICsgVkxBTl9ITEVOCiAJCQkJCSArIEVUSF9GQ1NfTEVOOwogCi0JZV9pbmZvKCJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwotCW5ldGRldi0+bXR1ID0gbmV3X210dTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwZV91cChhZGFwdGVyKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKaW5kZXggOTk0NDAxZi4uODVmOTU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwpAQCAtNzEsNyArNzEsNiBAQAogI2RlZmluZSBJODI1NzdfQ0ZHX0FTU0VSVF9DUlNfT05fVFggICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIEk4MjU3N19DRkdfRU5BQkxFX0RPV05TSElGVCAgICAgICAoMyA8PCAxMCkgLyogYXV0byBkb3duc2hpZnQgMTAwLzEwICovCiAjZGVmaW5lIEk4MjU3N19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBJODI1NzdfQ1RSTF9ET1dOU0hJRlRfTUFTSyAgICAgICAgKDcgPDwgMTApCiAKIC8qIDgyNTc3IHNwZWNpZmljIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTgyNTc3X1BIWV9DVFJMXzIgICAgICAgICAgICAxOApAQCAtOTUsMTMgKzk0LDYgQEAKIC8qIEJNIFBIWSBDb3BwZXIgU3BlY2lmaWMgQ29udHJvbCAxICovCiAjZGVmaW5lIEJNX0NTX0NUUkwxICAgICAgICAgICAgICAgICAgICAgICAxNgogCi0vKiBCTSBQSFkgQ29wcGVyIFNwZWNpZmljIFN0YXR1cyAqLwotI2RlZmluZSBCTV9DU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgQk1fQ1NfU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBCTV9DU19TVEFUVVNfUkVTT0xWRUQgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIEJNX0NTX1NUQVRVU19TUEVFRF9NQVNLICAgICAgICAgICAweEMwMDAKLSNkZWZpbmUgQk1fQ1NfU1RBVFVTX1NQRUVEXzEwMDAgICAgICAgICAgIDB4ODAwMAotCiAjZGVmaW5lIEhWX01VWF9EQVRBX0NUUkwgICAgICAgICAgICAgICBQSFlfUkVHKDc3NiwgMTYpCiAjZGVmaW5lIEhWX01VWF9EQVRBX0NUUkxfR0VOX1RPX01BQyAgICAweDA0MDAKICNkZWZpbmUgSFZfTVVYX0RBVEFfQ1RSTF9GT1JDRV9TUEVFRCAgIDB4MDAwNApAQCAtMTY0LDE2ICsxNTYsMjUgQEAKIAkJICogTURJQyBtb2RlLiBObyBoYXJtIGluIHRyeWluZyBhZ2FpbiBpbiB0aGlzIGNhc2Ugc2luY2UKIAkJICogdGhlIFBIWSBJRCBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgYW55d2F5CiAJCSAqLworCQlyZXRfdmFsID0gcGh5LT5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCB0cnVlKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKKwkJcGh5LT5vcHMucmVsZWFzZV9waHkoaHcpOwogCiAJCXJldHJ5X2NvdW50Kys7CiAJfQogb3V0OgogCS8qIFJldmVydCB0byBNRElPIGZhc3QgbW9kZSwgaWYgYXBwbGljYWJsZSAqLwotCWlmIChyZXRyeV9jb3VudCkKKwlpZiAocmV0cnlfY291bnQpIHsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOworCQlwaHktPm9wcy5yZWxlYXNlX3BoeShodyk7CisJfQogCiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC0zNTQsMzggKzM1NSwxMTcgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3AgLSBSZWFkIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBfX2UxMDAwZV9yZWFkX3BoeV9yZWdfaWdwIC0gUmVhZCBpZ3AgUEhZIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAogICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqICBAbG9ja2VkOiBzZW1hcGhvcmUgaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCBvciBub3QKICAqCiAgKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQKLSAqICBhbmQgc3RvcmluZyB0aGUgcmV0cmlldmVkIGluZm9ybWF0aW9uIGluIGRhdGEuICBSZWxlYXNlIGFueSBhY3F1aXJlZAorICogIGFuZCBzdG9yZXMgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKICAqICBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3N0YXRpYyBzMzIgX19lMTAwMGVfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2tlZCkKIHsKLQlzMzIgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbCA9IDA7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlpZiAoIWxvY2tlZCkgeworCQlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkpCisJCQlnb3RvIG91dDsKKworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAogCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgICh1MTYpb2Zmc2V0KTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9CisJCWlmIChyZXRfdmFsKQorCQkJZ290byByZWxlYXNlOwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCi0JCQkJCSAgIGRhdGEpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKIAotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKK3JlbGVhc2U6CisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KIAorLyoqCisgKiAgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3AgLSBSZWFkIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCisgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiByZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZQorICogIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLgorICogIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZSBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMGVfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3AoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMGVfcmVhZF9waHlfcmVnX2lncF9sb2NrZWQgLSBSZWFkIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCisgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICoKKyAqICBSZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24KKyAqICBpbiBkYXRhLiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMGVfcmVhZF9waHlfcmVnX2lncF9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXJldHVybiBfX2UxMDAwZV9yZWFkX3BoeV9yZWdfaWdwKGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKKyAqICBlMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3AgLSBXcml0ZSBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqICBAbG9ja2VkOiBzZW1hcGhvcmUgaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCBvciBub3QKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlcgorICogIGF0IHRoZSBvZmZzZXQuICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgorICoqLworc3RhdGljIHMzMiBfX2UxMDAwZV93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2tlZCkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwlpZiAoIWxvY2tlZCkgeworCQlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkpCisJCQlnb3RvIG91dDsKKworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CisJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAorCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkJICAgICh1MTYpb2Zmc2V0KTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIHJlbGVhc2U7CisJfQorCisJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCisJCQkJCSAgICBkYXRhKTsKKworcmVsZWFzZToKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTM5NSw1MyArNDc1LDUzIEBACiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CiAgKgotICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyCiAgKiAgYXQgdGhlIG9mZnNldC4gIFJlbGVhc2UgYW55IGFjcXVpcmVkIHNlbWFwaG9yZXMgYmVmb3JlIGV4aXRpbmcuCiAgKiovCiBzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQogewotCXMzMiByZXRfdmFsOwotCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewotCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCQkJCSAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCQkJCSAgICAodTE2KW9mZnNldCk7Ci0JCWlmIChyZXRfdmFsKSB7Ci0JCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQotCX0KLQotCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAotCQkJCQkgICAgZGF0YSk7Ci0KLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gX19lMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3AoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOwogfQogCiAvKioKLSAqICBlMTAwMGVfcmVhZF9rbXJuX3JlZyAtIFJlYWQga3VtZXJhbiByZWdpc3RlcgorICogIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncF9sb2NrZWQgLSBXcml0ZSBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqCisgKiAgV3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlciBhdCB0aGUgb2Zmc2V0LgorICogIEFzc3VtZXMgc2VtYXBob3JlIGFscmVhZHkgYWNxdWlyZWQuCisgKiovCitzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3AoaHcsIG9mZnNldCwgZGF0YSwgdHJ1ZSk7Cit9CisKKy8qKgorICogIF9fZTEwMDBfcmVhZF9rbXJuX3JlZyAtIFJlYWQga3VtZXJhbiByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LiAgVGhlbiByZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldAogICogIHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFRoZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgaXMgc3RvcmVkIGluIGRhdGEuCiAgKiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KICAqKi8KLXMzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2tlZCkKIHsKIAl1MzIga21ybmN0cmxzdGE7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJcmV0dXJuIHJldF92YWw7CisJaWYgKCFsb2NrZWQpIHsKKwkJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZV9waHkpKQorCQkJZ290byBvdXQ7CisKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CiAKIAlrbXJuY3RybHN0YSA9ICgob2Zmc2V0IDw8IEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVF9TSElGVCkgJgogCQkgICAgICAgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUKSB8IEUxMDAwX0tNUk5DVFJMU1RBX1JFTjsKQEAgLTQ1Miw0MSArNTMyLDExMSBAQAogCWttcm5jdHJsc3RhID0gZXIzMihLTVJOQ1RSTFNUQSk7CiAJKmRhdGEgPSAodTE2KWttcm5jdHJsc3RhOwogCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCWlmICghbG9ja2VkKQorCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAKK291dDoKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyoqCi0gKiAgZTEwMDBlX3dyaXRlX2ttcm5fcmVnIC0gV3JpdGUga3VtZXJhbiByZWdpc3RlcgorICogIGUxMDAwZV9yZWFkX2ttcm5fcmVnIC0gIFJlYWQga3VtZXJhbiByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IHVzaW5nIHRoZQorICogIGt1bWVyYW4gaW50ZXJmYWNlLiAgVGhlIGluZm9ybWF0aW9uIHJldHJpZXZlZCBpcyBzdG9yZWQgaW4gZGF0YS4KKyAqICBSZWxlYXNlIHRoZSBhY3F1aXJlZCBzZW1hcGhvcmUgYmVmb3JlIGV4aXRpbmcuCisgKiovCitzMzIgZTEwMDBlX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3JlYWRfa21ybl9yZWcoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMGVfcmVhZF9rbXJuX3JlZ19sb2NrZWQgLSAgUmVhZCBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgUmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgdXNpbmcgdGhlIGt1bWVyYW4gaW50ZXJmYWNlLiAgVGhlCisgKiAgaW5mb3JtYXRpb24gcmV0cmlldmVkIGlzIHN0b3JlZCBpbiBkYXRhLgorICogIEFzc3VtZXMgc2VtYXBob3JlIGFscmVhZHkgYWNxdWlyZWQuCisgKiovCitzMzIgZTEwMDBlX3JlYWRfa21ybl9yZWdfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF9yZWFkX2ttcm5fcmVnKGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKKyAqICBfX2UxMDAwX3dyaXRlX2ttcm5fcmVnIC0gV3JpdGUga3VtZXJhbiByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LiAgVGhlbiB3cml0ZSB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKICAqICBhdCB0aGUgb2Zmc2V0IHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkIHNlbWFwaG9yZXMKICAqICBiZWZvcmUgZXhpdGluZy4KICAqKi8KLXMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7CiAJdTMyIGttcm5jdHJsc3RhOwotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOworCWlmICghbG9ja2VkKSB7CisJCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KSkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQogCiAJa21ybmN0cmxzdGEgPSAoKG9mZnNldCA8PCBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKIAkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVCkgfCBkYXRhOwogCWV3MzIoS01STkNUUkxTVEEsIGttcm5jdHJsc3RhKTsKIAogCXVkZWxheSgyKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgorICogIGUxMDAwZV93cml0ZV9rbXJuX3JlZyAtICBXcml0ZSBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldAorICogIHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZSBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfd3JpdGVfa21ybl9yZWcoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMGVfd3JpdGVfa21ybl9yZWdfbG9ja2VkIC0gIFdyaXRlIGt1bWVyYW4gcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqICBXcml0ZSB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldCB1c2luZyB0aGUga3VtZXJhbiBpbnRlcmZhY2UuCisgKiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWdfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3dyaXRlX2ttcm5fcmVnKGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKICAqICBlMTAwMF9jb3BwZXJfbGlua19zZXR1cF84MjU3NyAtIFNldHVwIDgyNTc3IFBIWSBmb3IgY29wcGVyIGxpbmsKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKQEAgLTUwOSwxNSArNjU5LDYgQEAKIAlwaHlfZGF0YSB8PSBJODI1NzdfQ0ZHX0VOQUJMRV9ET1dOU0hJRlQ7CiAKIAlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSTgyNTc3X0NGR19SRUcsIHBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBTZXQgbnVtYmVyIG9mIGxpbmsgYXR0ZW1wdHMgYmVmb3JlIGRvd25zaGlmdCAqLwotCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIEk4MjU3N19DVFJMX1JFRywgJnBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0JcGh5X2RhdGEgJj0gfkk4MjU3N19DVFJMX0RPV05TSElGVF9NQVNLOwotCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJODI1NzdfQ1RSTF9SRUcsIHBoeV9kYXRhKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMjEwNSw2ICsyMjQ2LDEwIEBACiAJdTMyIHBhZ2UgPSBvZmZzZXQgPj4gSUdQX1BBR0VfU0hJRlQ7CiAJdTMyIHBhZ2Vfc2hpZnQgPSAwOwogCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKIAkvKiBQYWdlIDgwMCB3b3JrcyBkaWZmZXJlbnRseSB0aGFuIHRoZSByZXN0IHNvIGl0IGhhcyBpdHMgb3duIGZ1bmMgKi8KIAlpZiAocGFnZSA9PSBCTV9XVUNfUEFHRSkgewogCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV93YWtldXBfcmVnX2JtKGh3LCBvZmZzZXQsICZkYXRhLApAQCAtMjExMiwxMCArMjI1Nyw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OwotCiAJaHctPnBoeS5hZGRyID0gZTEwMDBfZ2V0X3BoeV9hZGRyX2Zvcl9ibV9wYWdlKHBhZ2UsIG9mZnNldCk7CiAKIAlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewpAQCAtMjEzNSwxOCArMjI3NiwxNSBAQAogCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KIAkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIHBhZ2Vfc2VsZWN0LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZSA8PCBwYWdlX3NoaWZ0KSk7Ci0JCWlmIChyZXRfdmFsKSB7Ci0JCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7Ci0JCX0KIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKIAotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogb3V0OgorCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjE2Nyw2ICsyMzA1LDEwIEBACiAJdTMyIHBhZ2UgPSBvZmZzZXQgPj4gSUdQX1BBR0VfU0hJRlQ7CiAJdTMyIHBhZ2Vfc2hpZnQgPSAwOwogCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKIAkvKiBQYWdlIDgwMCB3b3JrcyBkaWZmZXJlbnRseSB0aGFuIHRoZSByZXN0IHNvIGl0IGhhcyBpdHMgb3duIGZ1bmMgKi8KIAlpZiAocGFnZSA9PSBCTV9XVUNfUEFHRSkgewogCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV93YWtldXBfcmVnX2JtKGh3LCBvZmZzZXQsIGRhdGEsCkBAIC0yMTc0LDEwICsyMzE2LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KIAlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2JtX3BhZ2UocGFnZSwgb2Zmc2V0KTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMTk3LDE3ICsyMzM1LDE0IEBACiAJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLwogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgcGFnZV9zZWxlY3QsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IHBhZ2Vfc2hpZnQpKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQkJfQogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KIG91dDoKKwlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTIyMjYsMTcgKzIzNjEsMTcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGFnZSA9ICh1MTYpKG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVCk7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgZGF0YSwKIAkJCQkJCQkgdHJ1ZSk7Ci0JCXJldHVybiByZXRfdmFsOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCWh3LT5waHkuYWRkciA9IDE7CiAKIAlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewpAQCAtMjI0NSwxNiArMjM4MCwxNCBAQAogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgQk1fUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgIHBhZ2UpOwogCi0JCWlmIChyZXRfdmFsKSB7Ci0JCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQorCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfcmVhZF9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJCQkJCSAgIGRhdGEpOworb3V0OgogCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yMjcyLDE3ICsyNDA1LDE3IEBACiAJczMyIHJldF92YWw7CiAJdTE2IHBhZ2UgPSAodTE2KShvZmZzZXQgPj4gSUdQX1BBR0VfU0hJRlQpOwogCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJcmV0dXJuIHJldF92YWw7CisKIAkvKiBQYWdlIDgwMCB3b3JrcyBkaWZmZXJlbnRseSB0aGFuIHRoZSByZXN0IHNvIGl0IGhhcyBpdHMgb3duIGZ1bmMgKi8KIAlpZiAocGFnZSA9PSBCTV9XVUNfUEFHRSkgewogCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV93YWtldXBfcmVnX2JtKGh3LCBvZmZzZXQsICZkYXRhLAogCQkJCQkJCSBmYWxzZSk7Ci0JCXJldHVybiByZXRfdmFsOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCWh3LT5waHkuYWRkciA9IDE7CiAKIAlpZiAob2Zmc2V0ID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewpAQCAtMjI5MCwxNyArMjQyMywxNSBAQAogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgQk1fUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgIHBhZ2UpOwogCi0JCWlmIChyZXRfdmFsKSB7Ci0JCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQorCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAogCQkJCQkgICAgZGF0YSk7CiAKK291dDoKIAlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjMyMCw2ICsyNDUxLDggQEAKICAqICAzKSBXcml0ZSB0aGUgYWRkcmVzcyB1c2luZyB0aGUgYWRkcmVzcyBvcGNvZGUgKDB4MTEpCiAgKiAgNCkgUmVhZCBvciB3cml0ZSB0aGUgZGF0YSB1c2luZyB0aGUgZGF0YSBvcGNvZGUgKDB4MTIpCiAgKiAgNSkgUmVzdG9yZSA3NjlfMTcuMiB0byBpdHMgb3JpZ2luYWwgdmFsdWUKKyAqCisgKiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfYWNjZXNzX3BoeV93YWtldXBfcmVnX2JtKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCiAJCQkJCSAgdTE2ICpkYXRhLCBib29sIHJlYWQpCkBAIC0yMzI3LDIwICsyNDYwLDEyIEBACiAJczMyIHJldF92YWw7CiAJdTE2IHJlZyA9IEJNX1BIWV9SRUdfTlVNKG9mZnNldCk7CiAJdTE2IHBoeV9yZWcgPSAwOwotCXU4ICBwaHlfYWNxdWlyZWQgPSAxOwotCiAKIAkvKiBHaWcgbXVzdCBiZSBkaXNhYmxlZCBmb3IgTURJTyBhY2Nlc3NlcyB0byBwYWdlIDgwMCAqLwogCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikgJiYKIAkgICAoIShlcjMyKFBIWV9DVFJMKSAmIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFKSkpCiAJCWh3X2RiZyhodywgIkF0dGVtcHRpbmcgdG8gYWNjZXNzIHBhZ2UgODAwIHdoaWxlIGdpZyBlbmFibGVkXG4iKTsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpIHsKLQkJcGh5X2FjcXVpcmVkID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogQWxsIG9wZXJhdGlvbnMgaW4gdGhpcyBmdW5jdGlvbiBhcmUgcGh5IGFkZHJlc3MgMSAqLwogCWh3LT5waHkuYWRkciA9IDE7CiAKQEAgLTIzOTcsOCArMjUyMiw2IEBACiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIEJNX1dVQ19FTkFCTEVfUkVHLCBwaHlfcmVnKTsKIAogb3V0OgotCWlmIChwaHlfYWNxdWlyZWQgPT0gMSkKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yNDM5LDMxICsyNTYyLDExNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqICBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYgLSBTZXQgc2xvdyBNRElPIGFjY2VzcyBtb2RlCisgKiAgQGh3OiAgIHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBzbG93OiB0cnVlIGZvciBzbG93IG1vZGUsIGZhbHNlIGZvciBub3JtYWwgbW9kZQorICoKKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLwogczMyIGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIHNsb3cpCiB7CiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBkYXRhID0gMDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCiAJLyogU2V0IE1ESU8gbW9kZSAtIHBhZ2UgNzY5LCByZWdpc3RlciAxNjogMHgyNTgwPT1zbG93LCAweDIxODA9PWZhc3QgKi8KIAlody0+cGh5LmFkZHIgPSAxOwogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCQkgICAgICAgICAoQk1fUE9SVF9DVFJMX1BBR0UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQlpZiAocmV0X3ZhbCkgewotCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0JCXJldHVybiByZXRfdmFsOwotCX0KKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgQk1fQ1NfQ1RSTDEsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMTgwIHwgKHNsb3cgPDwgMTApKSk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OwogCiAJLyogZHVtbXkgcmVhZCB3aGVuIHJldmVydGluZyB0byBmYXN0IG1vZGUgLSB0aHJvdyBhd2F5IHJlc3VsdCAqLwogCWlmICghc2xvdykKLQkJZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBCTV9DU19DVFJMMSwgJmRhdGEpOworCQlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBCTV9DU19DVFJMMSwgJmRhdGEpOwogCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBfX2UxMDAwX3JlYWRfcGh5X3JlZ19odiAtICBSZWFkIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0CisgKiAgYW5kIHN0b3JlcyB0aGUgcmV0cmlldmVkIGluZm9ybWF0aW9uIGluIGRhdGEuICBSZWxlYXNlIGFueSBhY3F1aXJlZAorICogIHNlbWFwaG9yZSBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3N0YXRpYyBzMzIgX19lMTAwMF9yZWFkX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2tlZCkKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgcGFnZSA9IEJNX1BIWV9SRUdfUEFHRShvZmZzZXQpOworCXUxNiByZWcgPSBCTV9QSFlfUkVHX05VTShvZmZzZXQpOworCWJvb2wgaW5fc2xvd19tb2RlID0gZmFsc2U7CisKKwlpZiAoIWxvY2tlZCkgeworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KKworCS8qIFdvcmthcm91bmQgZmFpbHVyZSBpbiBNRElPIGFjY2VzcyB3aGlsZSBjYWJsZSBpcyBkaXNjb25uZWN0ZWQgKi8KKwlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmCisJICAgICEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKSkgeworCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCB0cnVlKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQlpbl9zbG93X21vZGUgPSB0cnVlOworCX0KKworCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLworCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CisJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0cnVlKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBhZ2UgPiAwICYmIHBhZ2UgPCBIVl9JTlRDX0ZDX1BBR0VfU1RBUlQpIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX2FjY2Vzc19waHlfZGVidWdfcmVnc19odihodywgb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRydWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UocGFnZSk7CisKKwlpZiAocGFnZSA9PSBIVl9JTlRDX0ZDX1BBR0VfU1RBUlQpCisJCXBhZ2UgPSAwOworCisJaWYgKHJlZyA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKKwkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOworCisJCWh3LT5waHkuYWRkciA9IDE7CisKKwkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCisJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAorCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7CisJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOworCisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CitvdXQ6CisJLyogUmV2ZXJ0IHRvIE1ESU8gZmFzdCBtb2RlLCBpZiBhcHBsaWNhYmxlICovCisJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSAmJiBpbl9zbG93X21vZGUpCisJCXJldF92YWwgfD0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CisKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC0yNDc0LDk3ICsyNjgxLDUzIEBACiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCiAgKgotICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKLSAqICBzZW1hcGhvcmUgYmVmb3JlIGV4aXRpbmcuCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgYW5kIHN0b3JlcworICogIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZQorICogIGJlZm9yZSBleGl0aW5nLgogICoqLwogczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCiB7Ci0JczMyIHJldF92YWw7Ci0JdTE2IHBhZ2UgPSBCTV9QSFlfUkVHX1BBR0Uob2Zmc2V0KTsKLQl1MTYgcmVnID0gQk1fUEhZX1JFR19OVU0ob2Zmc2V0KTsKLQlib29sIGluX3Nsb3dfbW9kZSA9IGZhbHNlOwotCi0JLyogV29ya2Fyb3VuZCBmYWlsdXJlIGluIE1ESU8gYWNjZXNzIHdoaWxlIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCAqLwotCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYKLQkgICAgIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKSB7Ci0JCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIHRydWUpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWdvdG8gb3V0OwotCi0JCWluX3Nsb3dfbW9kZSA9IHRydWU7Ci0JfQotCi0JLyogUGFnZSA4MDAgd29ya3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgcmVzdCBzbyBpdCBoYXMgaXRzIG93biBmdW5jICovCi0JaWYgKHBhZ2UgPT0gQk1fV1VDX1BBR0UpIHsKLQkJcmV0X3ZhbCA9IGUxMDAwX2FjY2Vzc19waHlfd2FrZXVwX3JlZ19ibShodywgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRydWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocGFnZSA+IDAgJiYgcGFnZSA8IEhWX0lOVENfRkNfUEFHRV9TVEFSVCkgewotCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV9kZWJ1Z19yZWdzX2h2KGh3LCBvZmZzZXQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgdHJ1ZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OwotCi0JaHctPnBoeS5hZGRyID0gZTEwMDBfZ2V0X3BoeV9hZGRyX2Zvcl9odl9wYWdlKHBhZ2UpOwotCi0JaWYgKHBhZ2UgPT0gSFZfSU5UQ19GQ19QQUdFX1NUQVJUKQotCQlwYWdlID0gMDsKLQotCWlmIChyZWcgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7Ci0JCWlmICgoaHctPnBoeS50eXBlICE9IGUxMDAwX3BoeV84MjU3OCkgfHwKLQkJICAgICgocmVnICE9IEk4MjU3OF9BRERSX1JFRykgJiYKLQkJICAgICAocmVnICE9IEk4MjU3OF9BRERSX1JFRyArIDEpKSkgewotCQkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOwotCi0JCQlody0+cGh5LmFkZHIgPSAxOwotCi0JCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KLQkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWlmIChyZXRfdmFsKSB7Ci0JCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7Ci0JCX0KLQl9Ci0KLQlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KLW91dDoKLQkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KLQlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKLQkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwotCi0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIF9fZTEwMDBfcmVhZF9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKIH0KIAogLyoqCi0gKiAgZTEwMDBfd3JpdGVfcGh5X3JlZ19odiAtIFdyaXRlIEhWIFBIWSByZWdpc3RlcgorICogIGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQgLSAgUmVhZCBIViBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCisgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICoKKyAqICBSZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24KKyAqICBpbiBkYXRhLiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMF9yZWFkX3BoeV9yZWdfaHZfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF9yZWFkX3BoeV9yZWdfaHYoaHcsIG9mZnNldCwgZGF0YSwgdHJ1ZSk7Cit9CisKKy8qKgorICogIF9fZTEwMDBfd3JpdGVfcGh5X3JlZ19odiAtIFdyaXRlIEhWIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKICAqICBhdCB0aGUgb2Zmc2V0LiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KICAqKi8KLXMzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQorc3RhdGljIHMzMiBfX2UxMDAwX3dyaXRlX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2tlZCkKIHsKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGFnZSA9IEJNX1BIWV9SRUdfUEFHRShvZmZzZXQpOwogCXUxNiByZWcgPSBCTV9QSFlfUkVHX05VTShvZmZzZXQpOwogCWJvb2wgaW5fc2xvd19tb2RlID0gZmFsc2U7CiAKKwlpZiAoIWxvY2tlZCkgeworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KKwogCS8qIFdvcmthcm91bmQgZmFpbHVyZSBpbiBNRElPIGFjY2VzcyB3aGlsZSBjYWJsZSBpcyBkaXNjb25uZWN0ZWQgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmCiAJICAgICEoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKSkgewpAQCAtMjU4OCwxMCArMjc1MSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OwotCiAJaHctPnBoeS5hZGRyID0gZTEwMDBfZ2V0X3BoeV9hZGRyX2Zvcl9odl9wYWdlKHBhZ2UpOwogCiAJaWYgKHBhZ2UgPT0gSFZfSU5UQ19GQ19QQUdFX1NUQVJUKQpAQCAtMjYwNyw1MCArMjc2Niw3MCBAQAogCSAgICAoKE1BWF9QSFlfUkVHX0FERFJFU1MgJiByZWcpID09IDApICYmCiAJICAgIChkYXRhICYgKDEgPDwgMTEpKSkgewogCQl1MTYgZGF0YTIgPSAweDdFRkY7Ci0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAkJcmV0X3ZhbCA9IGUxMDAwX2FjY2Vzc19waHlfZGVidWdfcmVnc19odihodywgKDEgPDwgNikgfCAweDMsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEyLCBmYWxzZSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7Ci0KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQkJaWYgKHJldF92YWwpCi0JCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocmVnID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgewotCQlpZiAoKGh3LT5waHkudHlwZSAhPSBlMTAwMF9waHlfODI1NzgpIHx8Ci0JCSAgICAoKHJlZyAhPSBJODI1NzhfQUREUl9SRUcpICYmCi0JCSAgICAgKHJlZyAhPSBJODI1NzhfQUREUl9SRUcgKyAxKSkpIHsKLQkJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKKwkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOwogCi0JCQlody0+cGh5LmFkZHIgPSAxOworCQlody0+cGh5LmFkZHIgPSAxOwogCi0JCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KLQkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWlmIChyZXRfdmFsKSB7Ci0JCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7Ci0JCX0KKwkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCisJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAorCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7CisJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOworCisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiByZWcsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAogb3V0OgogCS8qIFJldmVydCB0byBNRElPIGZhc3QgbW9kZSwgaWYgYXBwbGljYWJsZSAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYgaW5fc2xvd19tb2RlKQotCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CisJCXJldF92YWwgfD0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CisKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgorICogIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYgLSBXcml0ZSBIViBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQuCisgKiAgUmVsZWFzZSB0aGUgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3dyaXRlX3BoeV9yZWdfaHYoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZCAtIFdyaXRlIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4gIEFzc3VtZXMgc2VtYXBob3JlCisgKiAgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF93cml0ZV9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKICAqICBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UgLSBHZXQgUEhZIGFkcnJlc3MgYmFzZWQgb24gcGFnZQogICogIEBwYWdlOiBwYWdlIHRvIGJlIGFjY2Vzc2VkCiAgKiovCkBAIC0yNjcxLDEwICsyODUwLDkgQEAKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSByZWFkIG9yIHdyaXR0ZW4KICAqICBAcmVhZDogZGV0ZXJtaW5lcyBpZiBvcGVyYXRpb24gaXMgcmVhZCBvciB3cml0dGVuCiAgKgotICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJlaXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKLSAqICBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLiAgTm90ZSB0aGF0IHRoZSBwcm9jZWR1cmUgdG8gcmVhZCB0aGVzZSByZWdzCi0gKiAgdXNlcyB0aGUgYWRkcmVzcyBwb3J0IGFuZCBkYXRhIHBvcnQgdG8gcmVhZC93cml0ZS4KKyAqICBSZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXRyZWl2ZWQgaW5mb3JtYXRpb24KKyAqICBpbiBkYXRhLiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4gIE5vdGUgdGhhdCB0aGUgcHJvY2VkdXJlCisgKiAgdG8gcmVhZCB0aGVzZSByZWdzIHVzZXMgdGhlIGFkZHJlc3MgcG9ydCBhbmQgZGF0YSBwb3J0IHRvIHJlYWQvd3JpdGUuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX2FjY2Vzc19waHlfZGVidWdfcmVnc19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhLCBib29sIHJlYWQpCkBAIC0yNjgyLDIwICsyODYwLDEyIEBACiAJczMyIHJldF92YWw7CiAJdTMyIGFkZHJfcmVnID0gMDsKIAl1MzIgZGF0YV9yZWcgPSAwOwotCXU4ICBwaHlfYWNxdWlyZWQgPSAxOwogCiAJLyogVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBkaWZmZXJlbmNlIHdpdGggZGVza3RvcCB2cyBtb2JpbGUgcGh5ICovCiAJYWRkcl9yZWcgPSAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgPwogCSAgICAgICAgICAgSTgyNTc4X0FERFJfUkVHIDogSTgyNTc3X0FERFJfUkVHOwogCWRhdGFfcmVnID0gYWRkcl9yZWcgKyAxOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJDb3VsZCBub3QgYWNxdWlyZSBQSFlcbiIpOwotCQlwaHlfYWNxdWlyZWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBBbGwgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBwaHkgYWRkcmVzcyAyICovCiAJaHctPnBoeS5hZGRyID0gMjsKIApAQCAtMjcxOCw4ICsyODg4LDYgQEAKIAl9CiAKIG91dDoKLQlpZiAocGh5X2FjcXVpcmVkID09IDEpCi0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggOTZmNWIyYS4uZjdkOWFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0yMjMsMjQgKzIyMywyNSBAQAogCXUzMiBhZGRyOwogfTsKIAotc3RhdGljIHUzMiBldGhvY19yZWFkKHN0cnVjdCBldGhvYyAqZGV2LCBsb2ZmX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1MzIgZXRob2NfcmVhZChzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCkKIHsKIAlyZXR1cm4gaW9yZWFkMzIoZGV2LT5pb2Jhc2UgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBldGhvY193cml0ZShzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCwgdTMyIGRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGUoc3RydWN0IGV0aG9jICpkZXYsIGxvZmZfdCBvZmZzZXQsIHUzMiBkYXRhKQogewogCWlvd3JpdGUzMihkYXRhLCBkZXYtPmlvYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3JlYWRfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19yZWFkX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCisJCXN0cnVjdCBldGhvY19iZCAqYmQpCiB7CiAJbG9mZl90IG9mZnNldCA9IEVUSE9DX0JEX0JBU0UgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IGV0aG9jX2JkKSk7CiAJYmQtPnN0YXQgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgMCk7CiAJYmQtPmFkZHIgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgNCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3dyaXRlX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGVfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwKIAkJY29uc3Qgc3RydWN0IGV0aG9jX2JkICpiZCkKIHsKIAlsb2ZmX3Qgb2Zmc2V0ID0gRVRIT0NfQkRfQkFTRSArIChpbmRleCAqIHNpemVvZihzdHJ1Y3QgZXRob2NfYmQpKTsKQEAgLTI0OCwzMyArMjQ5LDMzIEBACiAJZXRob2Nfd3JpdGUoZGV2LCBvZmZzZXQgKyA0LCBiZC0+YWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCXUzMiBpbWFzayA9IGV0aG9jX3JlYWQoZGV2LCBJTlRfTUFTSyk7CiAJaW1hc2sgfD0gbWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Rpc2FibGVfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19kaXNhYmxlX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCiB7CiAJdTMyIGltYXNrID0gZXRob2NfcmVhZChkZXYsIElOVF9NQVNLKTsKIAlpbWFzayAmPSB+bWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCWV0aG9jX3dyaXRlKGRldiwgSU5UX1NPVVJDRSwgbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZW5hYmxlX3J4X2FuZF90eChzdHJ1Y3QgZXRob2MgKmRldikKIHsKIAl1MzIgbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CiAJbW9kZSB8PSBNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTjsKIAlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCiB7CiAJdTMyIG1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOwogCW1vZGUgJj0gfihNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTik7CkBAIC01MDgsNyArNTA5LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwlldGhvY19hY2tfaXJxKHByaXYsIHBlbmRpbmcpOwogCiAJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19CVVNZKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicGFja2V0IGRyb3BwZWRcbiIpOwpAQCAtNjY0LDcgKzY2NSw4IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUWC9SWCBidWZmZXJzLCBtYXhpbXVtIDEyOCBzdXBwb3J0ZWQgKi8KLQludW1fYmQgPSBtaW4oMTI4LCAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQgKyAxKSAvIEVUSE9DX0JVRlNJWik7CisJbnVtX2JkID0gbWluX3QodW5zaWduZWQgaW50LAorCQkxMjgsIChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laKTsKIAlwcml2LT5udW1fdHggPSBtYXgobWluX3R4LCBudW1fYmQgLyA0KTsKIAlwcml2LT5udW1fcnggPSBudW1fYmQgLSBwcml2LT5udW1fdHg7CiAJZXRob2Nfd3JpdGUocHJpdiwgVFhfQkRfTlVNLCBwcml2LT5udW1fdHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyOTIzNDM4Li4xNmExZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMTY1NCw3ICsxNjU0LDcgQEAKICAgKgogICAqIGluZGV4IGlzIG9ubHkgdXNlZCBpbiBsZWdhY3kgY29kZQogICAqLwotaW50IF9faW5pdCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJ1ZmRlc2MgKmNiZF9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggYzQwMTEzZi4uNjZkYWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC03NTksMTIgKzc1OSw2IEBACiAKIAltcGM1Mnh4X2ZlY19od19pbml0KGRldik7CiAKLQlpZiAocHJpdi0+cGh5ZGV2KSB7Ci0JCXBoeV9zdG9wKHByaXYtPnBoeWRldik7Ci0JCXBoeV93cml0ZShwcml2LT5waHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7Ci0JfQotCiAJYmNvbV9mZWNfcnhfcmVzZXQocHJpdi0+cnhfZG1hdHNrKTsKIAliY29tX2ZlY190eF9yZXNldChwcml2LT50eF9kbWF0c2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCmluZGV4IDMxZTZkNjIuLmVlMGYzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCkBAIC0xNTUsNiArMTU1LDcgQEAKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDBiLWZlYy1waHkiLCB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXBjNTJ4eF9mZWNfbWRpb19tYXRjaCk7CiAKIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9mZWNfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAibXBjNTIwMGItZmVjLXBoeSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGUxZGE0NjYuLjMxMTY2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC01ODIxLDEwICs1ODIxLDcgQEAKIAkJICAgICAgICBkZXYtPmRldl9hZGRyKTsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBjaV9kZXYtPmRldiwKIAkJCSJQbGVhc2UgY29tcGxhaW4gdG8geW91ciBoYXJkd2FyZSB2ZW5kb3IuIFN3aXRjaGluZyB0byBhIHJhbmRvbSBNQUMuXG4iKTsKLQkJZGV2LT5kZXZfYWRkclswXSA9IDB4MDA7Ci0JCWRldi0+ZGV2X2FkZHJbMV0gPSAweDAwOwotCQlkZXYtPmRldl9hZGRyWzJdID0gMHg2YzsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmZGV2LT5kZXZfYWRkclszXSwgMyk7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCX0KIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBBZGRyZXNzICVwTVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IDJiYzJkMmIuLmVjMmY1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMTExMCw2ICsxMTEwLDcgQEAKICNlbmRpZgogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNfZW5ldF9tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzX2VuZXRfZHJpdmVyID0gewogCS5uYW1lCT0gImZzX2VuZXQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCmluZGV4IDkzYjQ4MWIuLjI0ZmY5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKQEAgLTIyMSw2ICsyMjEsNyBAQAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZnNfZW5ldF9tZGlvX2JiX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNfZW5ldF9iYl9tZGlvX2RyaXZlciA9IHsKIAkubmFtZSA9ICJmc2wtYmItbWRpbyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCmluZGV4IGEyZDY5YzEuLjk2ZWJhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCkBAIC0yMTksNiArMjE5LDcgQEAKICNlbmRpZgogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzX2VuZXRfbWRpb19mZWNfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc19lbmV0X2ZlY19tZGlvX2RyaXZlciA9IHsKIAkubmFtZSA9ICJmc2wtZmVjLW1kaW8iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKaW5kZXggZDE2NzA5MC4uZWZiZjY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCkBAIC00MDcsNiArNDA3LDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9wcV9tZGlvX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNsX3BxX21kaW9fZHJpdmVyID0gewogCS5uYW1lID0gImZzbC1wcV9tZGlvIiwKQEAgLTQyNiwzICs0MjcsNCBAQAogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmc2xfcHFfbWRpb19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoZnNsX3BxX21kaW9fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMWU1Mjg5Zi4uNWJmMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjMyNSw5ICsyMzI1LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpmc2wtZ2lhbmZhciIpOwotCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBnZmFyX21hdGNoW10gPQogewogCXsKQEAgLTIzMzYsNiArMjMzMyw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnZmFyX21hdGNoKTsKIAogLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGdmYXJfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDg5YzgyYzUuLjNmYWU4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTQ0Myw3ICs0NDQsNyBAQAogCQlyZXQgfD0gRU1BQ19NUjFfVEZTXzJLOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBSeCBGSUZPIHNpemUgJWRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIFR4IEZJRk8gc2l6ZSAlZFxuIiwKIAkJICAgICAgIGRldi0+bmRldi0+bmFtZSwgdHhfc2l6ZSk7CiAJfQogCkBAIC00NzAsNiArNDcxLDkgQEAKIAlEQkcyKGRldiwgIl9fZW1hYzRfY2FsY19iYXNlX21yMSIgTkwpOwogCiAJc3dpdGNoKHR4X3NpemUpIHsKKwljYXNlIDE2Mzg0OgorCQlyZXQgfD0gRU1BQzRfTVIxX1RGU18xNks7CisJCWJyZWFrOwogCWNhc2UgNDA5NjoKIAkJcmV0IHw9IEVNQUM0X01SMV9URlNfNEs7CiAJCWJyZWFrOwpAQCAtNDc3LDcgKzQ4MSw3IEBACiAJCXJldCB8PSBFTUFDNF9NUjFfVEZTXzJLOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBSeCBGSUZPIHNpemUgJWRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIFR4IEZJRk8gc2l6ZSAlZFxuIiwKIAkJICAgICAgIGRldi0+bmRldi0+bmFtZSwgdHhfc2l6ZSk7CiAJfQogCkBAIC0yOTg1LDYgKzI5ODksNyBAQAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW1hY19tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGVtYWNfZHJpdmVyID0gewogCS5uYW1lID0gImVtYWMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvZW1hYy5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvZW1hYy5oCmluZGV4IDBhZmMyY2YuLjhhNjFiNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2VtYWMuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9lbWFjLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogI2RlZmluZSBFTUFDNF9NUjFfUkZTXzE2SwkJMHgwMDI4MDAwMAogI2RlZmluZSBFTUFDNF9NUjFfVEZTXzJLICAgICAgIAkJMHgwMDAyMDAwMAogI2RlZmluZSBFTUFDNF9NUjFfVEZTXzRLCQkweDAwMDMwMDAwCisjZGVmaW5lIEVNQUM0X01SMV9URlNfMTZLCQkweDAwMDUwMDAwCiAjZGVmaW5lIEVNQUM0X01SMV9UUgkJCTB4MDAwMDgwMDAKICNkZWZpbmUgRU1BQzRfTVIxX01XU1dfMDAxCQkweDAwMDAxMDAwCiAjZGVmaW5lIEVNQUM0X01SMV9KUFNNCQkJMHgwMDAwMDgwMApAQCAtMjYyLDggKzI2Myw4IEBACiAKIAogLyogRU1BQ3hfVFJUUiAqLwotI2RlZmluZSBFTUFDX1RSVFJfU0hJRlRfRU1BQzQJCTI3Ci0jZGVmaW5lIEVNQUNfVFJUUl9TSElGVAkJCTI0CisjZGVmaW5lIEVNQUNfVFJUUl9TSElGVF9FTUFDNAkJMjQKKyNkZWZpbmUgRU1BQ19UUlRSX1NISUZUCQkyNwogCiAvKiBFTUFDIHNwZWNpZmljIFRYIGRlc2NyaXB0b3IgY29udHJvbCBmaWVsZHMgKHdyaXRlIGFjY2VzcykgKi8KICNkZWZpbmUgRU1BQ19UWF9DVFJMX0dGQ1MJCTB4MDIwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCA4MDFmMDg4Li4wMzA5MTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtOTgsMTIgKzk4LDEzIEBACiAJCXN0YXRzLT50eF9wYWNrZXRzKys7CiAJCXN0YXRzLT50eF9ieXRlcyArPXNrYi0+bGVuOwogCi0JCXNrYi0+ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOworCQlza2ItPmRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7CiAJCWlmICghc2tiLT5kZXYpIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJCQlicmVhazsKIAkJfQorCQlkZXZfcHV0KHNrYi0+ZGV2KTsKIAkJc2tiLT5paWYgPSBfZGV2LT5pZmluZGV4OwogCiAJCWlmIChmcm9tICYgQVRfRUdSRVNTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IGRlYWVhOGYuLmIyNDNlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC03MzIsNyArNzMyLDcgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpZ2JfcmluZyAqdGVtcF9yaW5nOwotCWludCBpLCBlcnI7CisJaW50IGksIGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKQEAgLTc1MiwxOCArNzUyLDMwIEBACiAJCXJldHVybiAwOwogCX0KIAorCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OworCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCQlnb3RvIGNsZWFyX3Jlc2V0OworCX0KKwogCWlmIChhZGFwdGVyLT5udW1fdHhfcXVldWVzID4gYWRhcHRlci0+bnVtX3J4X3F1ZXVlcykKIAkJdGVtcF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOwogCWVsc2UKIAkJdGVtcF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOwotCWlmICghdGVtcF9yaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCWlmICghdGVtcF9yaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gY2xlYXJfcmVzZXQ7CisJfQogCi0JaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJaWdiX2Rvd24oYWRhcHRlcik7CisJaWdiX2Rvd24oYWRhcHRlcik7CiAKIAkvKgogCSAqIFdlIGNhbid0IGp1c3QgZnJlZSBldmVyeXRoaW5nIGFuZCB0aGVuIHNldHVwIGFnYWluLApAQCAtODIwLDE0ICs4MzIsMTEgQEAKIAogCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCX0KLQotCWVyciA9IDA7CiBlcnJfc2V0dXA6Ci0JaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJaWdiX3VwKGFkYXB0ZXIpOwotCi0JY2xlYXJfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZ2JfdXAoYWRhcHRlcik7CiAJdmZyZWUodGVtcF9yaW5nKTsKK2NsZWFyX3Jlc2V0OgorCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCmluZGV4IGVlMTdhMDkuLmM2ODI2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogewogCXN0cnVjdCBpZ2J2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaWdidmZfcmluZyAqdGVtcF9yaW5nOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKQEAgLTI5OSwxNSArMjk5LDIyIEBACiAJCXJldHVybiAwOwogCX0KIAotCXRlbXBfcmluZyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9yaW5nKSk7Ci0JaWYgKCF0ZW1wX3JpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYnZmX2Rvd24oYWRhcHRlcik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJYWRhcHRlci0+dHhfcmluZy0+Y291bnQgPSBuZXdfdHhfY291bnQ7CisJCWFkYXB0ZXItPnJ4X3JpbmctPmNvdW50ID0gbmV3X3J4X2NvdW50OworCQlnb3RvIGNsZWFyX3Jlc2V0OworCX0KKworCXRlbXBfcmluZyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9yaW5nKSk7CisJaWYgKCF0ZW1wX3JpbmcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBjbGVhcl9yZXNldDsKKwl9CisKKwlpZ2J2Zl9kb3duKGFkYXB0ZXIpOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBqdXN0IGZyZWUgZXZlcnl0aGluZyBhbmQgdGhlbiBzZXR1cCBhZ2FpbiwKQEAgLTMzOSwxNCArMzQ2LDExIEBACiAKIAkJbWVtY3B5KGFkYXB0ZXItPnJ4X3JpbmcsIHRlbXBfcmluZyxzaXplb2Yoc3RydWN0IGlnYnZmX3JpbmcpKTsKIAl9Ci0KLQllcnIgPSAwOwogZXJyX3NldHVwOgotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYnZmX3VwKGFkYXB0ZXIpOwotCi0JY2xlYXJfYml0KF9fSUdCVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCWlnYnZmX3VwKGFkYXB0ZXIpOwogCXZmcmVlKHRlbXBfcmluZyk7CitjbGVhcl9yZXNldDoKKwljbGVhcl9iaXQoX19JR0JWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggMzhiZjdjZi4uYzQxMmU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC0yMzIsOCArMjMyLDExIEBACiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgcG9ydHMgZm9yIHRoaXMgZGV2aWNlIGFyZSBzZXR1cCBjb3JyZWN0bHkuCiAJICovCi0JaWYgKHNpLT5wZGF0YS0+c3RhcnR1cCkKLQkJc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOworCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApCXsKKwkJcmV0ID0gc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAkvKgogCSAqIENvbmZpZ3VyZSBQUEMgZm9yIElSREEgLSB3ZSB3YW50IHRvIGRyaXZlIFRYRDIgbG93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IGZhMzE0Y2IuLjg1NmMxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTc5OCw3ICs3OTgsNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfcmluZyAqdGVtcF90eF9yaW5nLCAqdGVtcF9yeF9yaW5nOwotCWludCBpLCBlcnI7CisJaW50IGksIGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCWJvb2wgbmVlZF91cGRhdGUgPSBmYWxzZTsKIApAQCAtODIyLDYgKzgyMiwxNiBAQAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7CisJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CisJCWdvdG8gZXJyX3NldHVwOworCX0KKwogCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKIAkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwogCWlmICghdGVtcF90eF9yaW5nKSB7CkBAIC04NzksOCArODg5LDcgQEAKIAogCS8qIGlmIHJpbmdzIG5lZWQgdG8gYmUgdXBkYXRlZCwgaGVyZSdzIHRoZSBwbGFjZSB0byBkbyBpdCBpbiBvbmUgc2hvdCAqLwogCWlmIChuZWVkX3VwZGF0ZSkgewotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJaXhnYmVfZG93bihhZGFwdGVyKTsKKwkJaXhnYmVfZG93bihhZGFwdGVyKTsKIAogCQkvKiB0eCAqLwogCQlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKQEAgLTg5NywxMyArOTA2LDggQEAKIAkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CiAJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCQl9Ci0JfQotCi0JLyogc3VjY2VzcyEgKi8KLQllcnIgPSAwOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3VwKGFkYXB0ZXIpOwotCisJfQogZXJyX3NldHVwOgogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGNiYjE0M2MuLmE0NTY1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCisjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk5LmgiCiAKIGNoYXIgaXhnYmVfZHJpdmVyX25hbWVbXSA9ICJpeGdiZSI7CiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfc3RyaW5nW10gPQpAQCAtMjI2LDYgKzIyNyw1NiBAQAogCS8qIHR4X2J1ZmZlcl9pbmZvIG11c3QgYmUgY29tcGxldGVseSBzZXQgdXAgaW4gdGhlIHRyYW5zbWl0IHBhdGggKi8KIH0KIAorLyoqCisgKiBpeGdiZV90eF9pc19wYXVzZWQgLSBjaGVjayBpZiB0aGUgdHggcmluZyBpcyBwYXVzZWQKKyAqIEBhZGFwdGVyOiB0aGUgaXhnYmUgYWRhcHRlcgorICogQHR4X3Jpbmc6IHRoZSBjb3JyZXNwb25kaW5nIHR4X3JpbmcKKyAqCisgKiBJZiBub3QgaW4gRENCIG1vZGUsIGNoZWNrcyBURkNTLlRYT0ZGLCBvdGhlcndpc2UsIGZpbmQgb3V0IHRoZQorICogY29ycmVzcG9uZGluZyBUQyBvZiB0aGlzIHR4X3Jpbmcgd2hlbiBjaGVja2luZyBURkNTLgorICoKKyAqIFJldHVybnMgOiB0cnVlIGlmIHBhdXNlZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfdHhfaXNfcGF1c2VkKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKK3sKKwl1MzIgdHhvZmYgPSBJWEdCRV9URkNTX1RYT0ZGOworCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJaW50IHRjOworCQlpbnQgcmVnX2lkeCA9IHR4X3JpbmctPnJlZ19pZHg7CisJCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdGMgPSByZWdfaWR4ID4+IDI7CisJCQl0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkYwOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQl0YyA9IDA7CisJCQl0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkY7CisJCQlpZiAoZGNiX2kgPT0gOCkgeworCQkJCS8qIFRDMCwgVEMxICovCisJCQkJdGMgPSByZWdfaWR4ID4+IDU7CisJCQkJaWYgKHRjID09IDIpIC8qIFRDMiwgVEMzICovCisJCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDQ7CisJCQkJZWxzZSBpZiAodGMgPT0gMykgLyogVEM0LCBUQzUsIFRDNiwgVEM3ICovCisJCQkJCXRjICs9IDEgKyAoKHJlZ19pZHggLSA5NikgPj4gMyk7CisJCQl9IGVsc2UgaWYgKGRjYl9pID09IDQpIHsKKwkJCQkvKiBUQzAsIFRDMSAqLworCQkJCXRjID0gcmVnX2lkeCA+PiA2OworCQkJCWlmICh0YyA9PSAxKSB7CisJCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDU7CisJCQkJCWlmICh0YyA9PSAyKSAvKiBUQzIsIFRDMyAqLworCQkJCQkJdGMgKz0gKHJlZ19pZHggLSA5NikgPj4gNDsKKwkJCQl9CisJCQl9CisJCX0KKwkJdHhvZmYgPDw9IHRjOworCX0KKyNlbmRpZgorCXJldHVybiBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1RGQ1MpICYgdHhvZmY7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jaGVja190eF9oYW5nKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW9wKQpAQCAtMjM3LDcgKzI4OCw3IEBACiAJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKIAlpZiAodHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopICYmCi0JICAgICEoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URkNTKSAmIElYR0JFX1RGQ1NfVFhPRkYpKSB7CisJICAgICFpeGdiZV90eF9pc19wYXVzZWQoYWRhcHRlciwgdHhfcmluZykpIHsKIAkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCiAJCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICp0eF9kZXNjOwogCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGVvcCk7CkBAIC00MTIsMTkgKzQ2MywyMyBAQAogCXUzMiB0eGN0cmw7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAlpbnQgcSA9IHR4X3JpbmcgLSBhZGFwdGVyLT50eF9yaW5nOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAodHhfcmluZy0+Y3B1ICE9IGNwdSkgewotCQl0eGN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9UWENUUkwocSkpOwogCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpKTsKIAkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwogCQkJdHhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOworCQkJdHhjdHJsIHw9IElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU47CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkwocSksIHR4Y3RybCk7CiAJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHEpKTsKIAkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OwogCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAotCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJCSAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHEpLCB0eGN0cmwpOwogCQl9Ci0JCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpLCB0eGN0cmwpOwogCQl0eF9yaW5nLT5jcHUgPSBjcHU7CiAJfQogCXB1dF9jcHUoKTsKQEAgLTE5MTMsMTEgKzE5NjgsMjUgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQl1MzIgcnR0ZGNzOworCisJCS8qIGRpc2FibGUgdGhlIGFyYml0ZXIgd2hpbGUgc2V0dGluZyBNVFFDICovCisJCXJ0dGRjcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SVFREQ1MpOworCQlydHRkY3MgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJ0dGRjcyk7CisKIAkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLwogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCAoSVhHQkVfTVRRQ19SVF9FTkEgfAogCQkJICAgICAgICAgICAgICAgIElYR0JFX01UUUNfOFRDXzhUUSkpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIElYR0JFX01UUUNfNjRRXzFQQik7CisKKwkJLyogcmUtZWFibGUgdGhlIGFyYml0ZXIgKi8KKwkJcnR0ZGNzICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcnR0ZGNzKTsKIAl9CiB9CiAKQEAgLTI0NzEsNyArMjU0MCwxMCBAQAogCWl4Z2JlX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgewotCQluZXRpZl9zZXRfZ3NvX21heF9zaXplKG5ldGRldiwgMzI3NjgpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShuZXRkZXYsIDMyNzY4KTsKKwkJZWxzZQorCQkJbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShuZXRkZXYsIDY1NTM2KTsKIAkJaXhnYmVfY29uZmlndXJlX2RjYihhZGFwdGVyKTsKIAl9IGVsc2UgewogCQluZXRpZl9zZXRfZ3NvX21heF9zaXplKG5ldGRldiwgNjU1MzYpOwpAQCAtNTkyMiw2ICs1OTk0LDcgQEAKIAl9IGVsc2UgewogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJCXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCmluZGV4IGIwMmE5ODEuLjM0YTZjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jCkBAIC0xMTksMjQgKzExOSw5IEBACiAJfQogfTsKIAotc3RydWN0IGVucDI2MTFfaXhwZGV2X3ByaXYKLXsKLQlzdHJ1Y3QgaXhwZGV2X3ByaXYJCWl4cGRldl9wcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCQlzdGF0czsKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmRzWzNdOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGxpbmtfY2hlY2tfdGltZXI7CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZW5wMjYxMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZW5wMjYxMV9peHBkZXZfcHJpdiAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcG0zMzg2X2dldF9zdGF0cyhpcC0+aXhwZGV2X3ByaXYuY2hhbm5lbCwgJihpcC0+c3RhdHMpKTsKLQotCXJldHVybiAmKGlwLT5zdGF0cyk7Ci19Ci0KIC8qIEBAQCBQb2xsIHRoZSBTRlAgbW9kZGVmMCBsaW5lIHRvby4gICovCiAvKiBAQEAgVHJ5IHRvIHVzZSB0aGUgcG0zMzg2IERPT0wgaW50ZXJydXB0IGFzIHdlbGwuICAqLwogc3RhdGljIHZvaWQgZW5wMjYxMV9jaGVja19saW5rX3N0YXR1cyh1bnNpZ25lZCBsb25nIF9fZHVtbXkpCkBAIC0yMDMsMTQgKzE4OCwxMyBAQAogCiAJcG9ydHMgPSBwbTMzODZfcG9ydF9jb3VudCgpOwogCWZvciAoaSA9IDA7IGkgPCBwb3J0czsgaSsrKSB7Ci0JCW5kc1tpXSA9IGl4cGRldl9hbGxvYyhpLCBzaXplb2Yoc3RydWN0IGVucDI2MTFfaXhwZGV2X3ByaXYpKTsKKwkJbmRzW2ldID0gaXhwZGV2X2FsbG9jKGksIHNpemVvZihzdHJ1Y3QgaXhwZGV2X3ByaXYpKTsKIAkJaWYgKG5kc1tpXSA9PSBOVUxMKSB7CiAJCQl3aGlsZSAoLS1pID49IDApCiAJCQkJZnJlZV9uZXRkZXYobmRzW2ldKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJbmRzW2ldLT5nZXRfc3RhdHMgPSBlbnAyNjExX2dldF9zdGF0czsKIAkJcG0zMzg2X2luaXRfcG9ydChpKTsKIAkJcG0zMzg2X2dldF9tYWMoaSwgbmRzW2ldLT5kZXZfYWRkcik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKaW5kZXggMTI3MjQzNC4uOWFlZTBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiaXhwMjQwMF90eC51Y29kZSIKICNpbmNsdWRlICJpeHBkZXZfcHJpdi5oIgogI2luY2x1ZGUgIml4cGRldi5oIgorI2luY2x1ZGUgInBtMzM4Ni5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC4yIgogCkBAIC0yNzEsNiArMjcyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXhwZGV2X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpeHBkZXZfcHJpdiAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcG0zMzg2X2dldF9zdGF0cyhpcC0+Y2hhbm5lbCwgJihkZXYtPnN0YXRzKSk7CisKKwlyZXR1cm4gJihkZXYtPnN0YXRzKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpeHBkZXZfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gaXhwZGV2X29wZW4sCiAJLm5kb19zdG9wCQk9IGl4cGRldl9jbG9zZSwKQEAgLTI3OCw2ICsyODgsNyBAQAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX2dldF9zdGF0cwkJPSBpeHBkZXZfZ2V0X3N0YXRzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBpeHBkZXZfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTEuYyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCmluZGV4IDIzNzgzNTguLmEyM2Y3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCkBAIC0xNzEsNiArMTcxLDM2IEBACiB9CiAKIC8qKgorICoga3M4ODUxX3dycmVnOCAtIHdyaXRlIDhiaXQgcmVnaXN0ZXIgdmFsdWUgdG8gY2hpcAorICogQGtzOiBUaGUgY2hpcCBzdGF0ZQorICogQHJlZzogVGhlIHJlZ2lzdGVyIGFkZHJlc3MKKyAqIEB2YWw6IFRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqIElzc3VlIGEgd3JpdGUgdG8gcHV0IHRoZSB2YWx1ZSBAdmFsIGludG8gdGhlIHJlZ2lzdGVyIHNwZWNpZmllZCBpbiBAcmVnLgorICovCitzdGF0aWMgdm9pZCBrczg4NTFfd3JyZWc4KHN0cnVjdCBrczg4NTFfbmV0ICprcywgdW5zaWduZWQgcmVnLCB1bnNpZ25lZCB2YWwpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciA9ICZrcy0+c3BpX3hmZXIxOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gJmtzLT5zcGlfbXNnMTsKKwlfX2xlMTYgdHhiWzJdOworCWludCByZXQ7CisJaW50IGJpdDsKKworCWJpdCA9IDEgPDwgKHJlZyAmIDMpOworCisJdHhiWzBdID0gY3B1X3RvX2xlMTYoTUtfT1AoYml0LCByZWcpIHwgS1NfU1BJT1BfV1IpOworCXR4YlsxXSA9IHZhbDsKKworCXhmZXItPnR4X2J1ZiA9IHR4YjsKKwl4ZmVyLT5yeF9idWYgPSBOVUxMOworCXhmZXItPmxlbiA9IDM7CisKKwlyZXQgPSBzcGlfc3luYyhrcy0+c3BpZGV2LCBtc2cpOworCWlmIChyZXQgPCAwKQorCQlrc19lcnIoa3MsICJzcGlfc3luYygpIGZhaWxlZFxuIik7Cit9CisKKy8qKgogICoga3M4ODUxX3J4XzFtc2cgLSBzZWxlY3Qgd2hldGhlciB0byB1c2Ugb25lIG9yIHR3byBtZXNzYWdlcyBmb3Igc3BpIHJlYWQKICAqIEBrczogVGhlIGRldmljZSBzdHJ1Y3R1cmUKICAqCkBAIC0zMjIsMTMgKzM1MiwxMiBAQAogc3RhdGljIGludCBrczg4NTFfd3JpdGVfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qga3M4ODUxX25ldCAqa3MgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiAqbWNwID0gKHUxNiAqKWRldi0+ZGV2X2FkZHI7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZrcy0+bG9jayk7CiAKLQlrczg4NTFfd3JyZWcxNihrcywgS1NfTUFSTCwgbWNwWzBdKTsKLQlrczg4NTFfd3JyZWcxNihrcywgS1NfTUFSTSwgbWNwWzFdKTsKLQlrczg4NTFfd3JyZWcxNihrcywgS1NfTUFSSCwgbWNwWzJdKTsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJa3M4ODUxX3dycmVnOChrcywgS1NfTUFSKGkpLCBkZXYtPmRldl9hZGRyW2ldKTsKIAogCW11dGV4X3VubG9jaygma3MtPmxvY2spOwogCkBAIC05NTEsNyArOTgwLDcgQEAKIAkJCW1jcHRyID0gbWNwdHItPm5leHQ7CiAJCX0KIAotCQlyeGN0cmwucnhjcjEgPSBSWENSMV9SWE1FIHwgUlhDUjFfUlhBRSB8IFJYQ1IxX1JYUEFGTUE7CisJCXJ4Y3RybC5yeGNyMSA9IFJYQ1IxX1JYTUUgfCBSWENSMV9SWFBBRk1BOwogCX0gZWxzZSB7CiAJCS8qIGp1c3QgYWNjZXB0IGJyb2FkY2FzdCAvIHVuaWNhc3QgKi8KIAkJcnhjdHJsLnJ4Y3IxID0gUlhDUjFfUlhQQUZNQTsKQEAgLTEyMzksNiArMTI2OCw5IEBACiAJbmRldi0+bmV0ZGV2X29wcyA9ICZrczg4NTFfbmV0ZGV2X29wczsKIAluZGV2LT5pcnEgPSBzcGktPmlycTsKIAorCS8qIGlzc3VlIGEgZ2xvYmFsIHNvZnQgcmVzZXQgdG8gcmVzZXQgdGhlIGRldmljZS4gKi8KKwlrczg4NTFfc29mdF9yZXNldChrcywgR1JSX0dTUik7CisKIAkvKiBzaW1wbGUgY2hlY2sgZm9yIGEgdmFsaWQgY2hpcCBiZWluZyBjb25uZWN0ZWQgdG8gdGhlIGJ1cyAqLwogCiAJaWYgKChrczg4NTFfcmRyZWcxNihrcywgS1NfQ0lERVIpICYgfkNJREVSX1JFVl9NQVNLKSAhPSBDSURFUl9JRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmggYi9kcml2ZXJzL25ldC9rczg4NTEuaAppbmRleCA4NWFiZTE0Li5mNTJjMzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuaAorKysgYi9kcml2ZXJzL25ldC9rczg4NTEuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBDQ1JfMzJQSU4JCQkJKDEgPDwgMCkKIAogLyogTUFDIGFkZHJlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIEtTX01BUihfbSkJCQkJMHgxNSAtIChfbSkKICNkZWZpbmUgS1NfTUFSTAkJCQkJMHgxMAogI2RlZmluZSBLU19NQVJNCQkJCQkweDEyCiAjZGVmaW5lIEtTX01BUkgJCQkJCTB4MTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwppbmRleCAwYmUxNGQ3Li5jMTQ2MzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCkBAIC01NjgsNiArNTY4LDE2IEBACiAJCWlvd3JpdGUxNigqd3B0cisrLCBrcy0+aHdfYWRkcik7CiB9CiAKK3N0YXRpYyB2b2lkIGtzX2Rpc2FibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQoreworCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwgMHgwMDAwKTsKK30gIC8qIGtzX2Rpc2FibGVfaW50ICovCisKK3N0YXRpYyB2b2lkIGtzX2VuYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCit7CisJa3Nfd3JyZWcxNihrcywgS1NfSUVSLCBrcy0+cmNfaWVyKTsKK30gIC8qIGtzX2VuYWJsZV9pbnQgKi8KKwogLyoqCiAgKiBrc190eF9maWZvX3NwYWNlIC0gcmV0dXJuIHRoZSBhdmFpbGFibGUgaGFyZHdhcmUgYnVmZmVyIHNpemUuCiAgKiBAa3M6IFRoZSBjaGlwIGluZm9ybWF0aW9uCkBAIC02ODEsNiArNjkxLDQ3IEBACiB9CiAKIAordm9pZCBrc19lbmFibGVfcW11KHN0cnVjdCBrc19uZXQgKmtzKQoreworCXUxNiB3OworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOworCS8qIEVuYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KKwlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3IHwgVFhDUl9UWEUpOworCisJLyoKKwkgKiBSWCBGcmFtZSBDb3VudCBUaHJlc2hvbGQgRW5hYmxlIGFuZCBBdXRvLURlcXVldWUgUlhRIEZyYW1lCisJICogRW5hYmxlCisJICovCisKKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhRQ1IpOworCWtzX3dycmVnMTYoa3MsIEtTX1JYUUNSLCB3IHwgUlhRQ1JfUlhGQ1RFKTsKKworCS8qIEVuYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOworCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3IHwgUlhDUjFfUlhFKTsKKwlrcy0+ZW5hYmxlZCA9IHRydWU7Cit9ICAvKiBrc19lbmFibGVfcW11ICovCisKK3N0YXRpYyB2b2lkIGtzX2Rpc2FibGVfcW11KHN0cnVjdCBrc19uZXQgKmtzKQoreworCXUxNgl3OworCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1RYQ1IpOworCisJLyogRGlzYWJsZXMgUU1VIFRyYW5zbWl0IChUWENSKS4gKi8KKwl3ICAmPSB+VFhDUl9UWEU7CisJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7CisKKwkvKiBEaXNhYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7CisJdyAmPSB+UlhDUjFfUlhFIDsKKwlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyk7CisKKwlrcy0+ZW5hYmxlZCA9IGZhbHNlOworCit9ICAvKiBrc19kaXNhYmxlX3FtdSAqLworCiAvKioKICAqIGtzX3JlYWRfcW11IC0gcmVhZCAxIHBrdCBkYXRhIGZyb20gdGhlIFFNVS4KICAqIEBrczogVGhlIGNoaXAgaW5mb3JtYXRpb24KQEAgLTc1Miw3ICs4MDMsNyBAQAogCQkJKGZyYW1lX2hkci0+bGVuIDwgUlhfQlVGX1NJWkUpICYmIGZyYW1lX2hkci0+bGVuKSkgewogCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJCS8qIHJlYWQgZGF0YSBibG9jayBpbmNsdWRpbmcgQ1JDIDQgYnl0ZXMgKi8KLQkJCWtzX3JlYWRfcW11KGtzLCAodTE2ICopc2tiLT5kYXRhLCBmcmFtZV9oZHItPmxlbiArIDQpOworCQkJa3NfcmVhZF9xbXUoa3MsICh1MTYgKilza2ItPmRhdGEsIGZyYW1lX2hkci0+bGVuKTsKIAkJCXNrYl9wdXQoc2tiLCBmcmFtZV9oZHItPmxlbik7CiAJCQlza2ItPmRldiA9IG5ldGRldjsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CkBAIC04NjEsNyArOTEyLDcgQEAKIAkJa3NfZGJnKGtzLCAiJXMgLSBlbnRyeVxuIiwgX19mdW5jX18pOwogCiAJLyogcmVzZXQgdGhlIEhXICovCi0JZXJyID0gcmVxdWVzdF9pcnEoa3MtPmlycSwga3NfaXJxLCBLU19JTlRfRkxBR1MsIERSVl9OQU1FLCBrcyk7CisJZXJyID0gcmVxdWVzdF9pcnEoa3MtPmlycSwga3NfaXJxLCBLU19JTlRfRkxBR1MsIERSVl9OQU1FLCBuZXRkZXYpOwogCiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWQ6ICVkXG4iLApAQCAtODY5LDYgKzkyMCwxNSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIHdha2UgdXAgcG93ZXJtb2RlIHRvIG5vcm1hbCBtb2RlICovCisJa3Nfc2V0X3Bvd2VybW9kZShrcywgUE1FQ1JfUE1fTk9STUFMKTsKKwltZGVsYXkoMSk7CS8qIHdhaXQgZm9yIG5vcm1hbCBtb2RlIHRvIHRha2UgZWZmZWN0ICovCisKKwlrc193cnJlZzE2KGtzLCBLU19JU1IsIDB4ZmZmZik7CisJa3NfZW5hYmxlX2ludChrcyk7CisJa3NfZW5hYmxlX3FtdShrcyk7CisJbmV0aWZfc3RhcnRfcXVldWUoa3MtPm5ldGRldik7CisKIAlpZiAobmV0aWZfbXNnX2lmdXAoa3MpKQogCQlrc19kYmcoa3MsICJuZXR3b3JrIGRldmljZSAlcyB1cFxuIiwgbmV0ZGV2LT5uYW1lKTsKIApAQCAtODkyLDE5ICs5NTIsMTQgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAotCWtmcmVlKGtzLT5mcmFtZV9oZWFkX2luZm8pOwotCiAJbXV0ZXhfbG9jaygma3MtPmxvY2spOwogCiAJLyogdHVybiBvZmYgdGhlIElSUXMgYW5kIGFjayBhbnkgb3V0c3RhbmRpbmcgKi8KIAlrc193cnJlZzE2KGtzLCBLU19JRVIsIDB4MDAwMCk7CiAJa3Nfd3JyZWcxNihrcywgS1NfSVNSLCAweGZmZmYpOwogCi0JLyogc2h1dGRvd24gUlggcHJvY2VzcyAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCAweDAwMDApOwotCi0JLyogc2h1dGRvd24gVFggcHJvY2VzcyAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIDB4MDAwMCk7CisJLyogc2h1dGRvd24gUlgvVFggUU1VICovCisJa3NfZGlzYWJsZV9xbXUoa3MpOwogCiAJLyogc2V0IHBvd2VybW9kZSB0byBzb2Z0IHBvd2VyIGRvd24gdG8gc2F2ZSBwb3dlciAqLwogCWtzX3NldF9wb3dlcm1vZGUoa3MsIFBNRUNSX1BNX1NPRlRET1dOKTsKQEAgLTkyOSwxNyArOTg0LDggQEAKICAqLwogc3RhdGljIHZvaWQga3Nfd3JpdGVfcW11KHN0cnVjdCBrc19uZXQgKmtzLCB1OCAqcGRhdGEsIHUxNiBsZW4pCiB7Ci0JdW5zaWduZWQgZmlkID0ga3MtPmZpZDsKLQotCWZpZCA9IGtzLT5maWQ7Ci0Ja3MtPmZpZCA9IChrcy0+ZmlkICsgMSkgJiBUWEZSX1RYRklEX01BU0s7Ci0KLQkvKiByZWR1Y2UgdGhlIHR4IGludGVycnVwdCBvY2N1cnJhbmNlcy4gKi8KLQlpZiAoIWZpZCkKLQkJZmlkIHw9IFRYRlJfVFhJQzsgICAgICAgLyogaXJxIG9uIGNvbXBsZXRpb24gKi8KLQogCS8qIHN0YXJ0IGhlYWRlciBhdCB0eGJbMF0gdG8gYWxpZ24gdHh3IGVudHJpZXMgKi8KLQlrcy0+dHhoLnR4d1swXSA9IGNwdV90b19sZTE2KGZpZCk7CisJa3MtPnR4aC50eHdbMF0gPSAwOwogCWtzLT50eGgudHh3WzFdID0gY3B1X3RvX2xlMTYobGVuKTsKIAogCS8qIDEuIHNldCBzdWRvLURNQSBtb2RlICovCkBAIC05NTcsMTYgKzEwMDMsNiBAQAogCQk7CiB9CiAKLXN0YXRpYyB2b2lkIGtzX2Rpc2FibGVfaW50KHN0cnVjdCBrc19uZXQgKmtzKQotewotCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwgMHgwMDAwKTsKLX0gIC8qIGtzX2Rpc2FibGVfaW50ICovCi0KLXN0YXRpYyB2b2lkIGtzX2VuYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0Ja3Nfd3JyZWcxNihrcywgS1NfSUVSLCBrcy0+cmNfaWVyKTsKLX0gIC8qIGtzX2VuYWJsZV9pbnQgKi8KLQogLyoqCiAgKiBrc19zdGFydF94bWl0IC0gdHJhbnNtaXQgcGFja2V0CiAgKiBAc2tiCQk6IFRoZSBidWZmZXIgdG8gdHJhbnNtaXQKQEAgLTE0MTAsMjUgKzE0NDYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGtzX2Rpc2FibGUoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0JdTE2CXc7Ci0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7Ci0KLQkvKiBEaXNhYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLwotCXcgICY9IH5UWENSX1RYRTsKLQlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3KTsKLQotCS8qIERpc2FibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKLQl3ICY9IH5SWENSMV9SWEUgOwotCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3KTsKLQotCWtzLT5lbmFibGVkID0gZmFsc2U7Ci0KLX0gIC8qIGtzX2Rpc2FibGUgKi8KLQogc3RhdGljIHZvaWQga3Nfc2V0dXAoc3RydWN0IGtzX25ldCAqa3MpCiB7CiAJdTE2CXc7CkBAIC0xNDYzLDcgKzE0ODAsNyBAQAogCXcgPSBUWENSX1RYRkNFIHwgVFhDUl9UWFBFIHwgVFhDUl9UWENSQyB8IFRYQ1JfVENHSVA7CiAJa3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyk7CiAKLQl3ID0gUlhDUjFfUlhGQ0UgfCBSWENSMV9SWEJFIHwgUlhDUjFfUlhVRTsKKwl3ID0gUlhDUjFfUlhGQ0UgfCBSWENSMV9SWEJFIHwgUlhDUjFfUlhVRSB8IFJYQ1IxX1JYTUUgfCBSWENSMV9SWElQRkNDOwogCiAJaWYgKGtzLT5wcm9taXNjdW91cykgICAgICAgICAvKiBiUHJvbWlzY3VvdXMgKi8KIAkJdyB8PSAoUlhDUjFfUlhBRSB8IFJYQ1IxX1JYSU5WRik7CkBAIC0xNDg2LDI4ICsxNTAzLDYgQEAKIAlrcy0+cmNfaWVyID0gKElSUV9MQ0kgfCBJUlFfVFhJIHwgSVJRX1JYSSk7CiB9ICAvKiBrc19zZXR1cF9pbnQgKi8KIAotdm9pZCBrc19lbmFibGUoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0JdTE2IHc7Ci0KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7Ci0JLyogRW5hYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLwotCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcgfCBUWENSX1RYRSk7Ci0KLQkvKgotCSAqIFJYIEZyYW1lIENvdW50IFRocmVzaG9sZCBFbmFibGUgYW5kIEF1dG8tRGVxdWV1ZSBSWFEgRnJhbWUKLQkgKiBFbmFibGUKLQkgKi8KLQotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWFFDUik7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfUlhRQ1IsIHcgfCBSWFFDUl9SWEZDVEUpOwotCi0JLyogRW5hYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLwotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcgfCBSWENSMV9SWEUpOwotCWtzLT5lbmFibGVkID0gdHJ1ZTsKLX0gIC8qIGtzX2VuYWJsZSAqLwotCiBzdGF0aWMgaW50IGtzX2h3X2luaXQoc3RydWN0IGtzX25ldCAqa3MpCiB7CiAjZGVmaW5lCU1IRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB0eXBlX2ZyYW1lX2hlYWQpICogTUFYX1JFQ1ZfRlJBTUVTKQpAQCAtMTYxMiwxMSArMTYwNyw5IEBACiAKIAlrc19zb2Z0X3Jlc2V0KGtzLCBHUlJfR1NSKTsKIAlrc19od19pbml0KGtzKTsKLQlrc19kaXNhYmxlKGtzKTsKKwlrc19kaXNhYmxlX3FtdShrcyk7CiAJa3Nfc2V0dXAoa3MpOwogCWtzX3NldHVwX2ludChrcyk7Ci0Ja3NfZW5hYmxlX2ludChrcyk7Ci0Ja3NfZW5hYmxlKGtzKTsKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwga3MtPm1hY19hZGRyLCA2KTsKIAogCWRhdGEgPSBrc19yZHJlZzE2KGtzLCBLU19PQkNSKTsKQEAgLTE2NTgsNiArMTY1MSw3IEBACiAJc3RydWN0IGtzX25ldCAqa3MgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCisJa2ZyZWUoa3MtPmZyYW1lX2hlYWRfaW5mbyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpb3VubWFwKGtzLT5od19hZGRyKTsKIAlmcmVlX25ldGRldihuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggNjFlYWJjYS4uYjNkN2Q4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC0yMjMsNjkgKzIyMyw3MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtYWNfb25ib2FyZF9zb25pY19ldGhlcm5ldF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisjZGVmaW5lIElOVkFMSURfTUFDKG1hYykgKG1lbWNtcChtYWMsICJceDA4XHgwMFx4MDciLCAzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChtYWMsICJceDAwXHhBMFx4NDAiLCAzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChtYWMsICJceDAwXHg4MFx4MTkiLCAzKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChtYWMsICJceDAwXHgwNVx4MDIiLCAzKSkKKworc3RhdGljIHZvaWQgX19kZXZpbml0IG1hY19vbmJvYXJkX3NvbmljX2V0aGVybmV0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljb25zdCBpbnQgcHJvbV9hZGRyID0gT05CT0FSRF9TT05JQ19QUk9NX0JBU0U7Ci0JaW50IGk7CisJdW5zaWduZWQgc2hvcnQgdmFsOwogCi0JLyogT24gTnVCdXMgYm9hcmRzIHdlIGNhbiBzb21ldGltZXMgbG9vayBpbiB0aGUgUk9NIHJlc291cmNlcy4KLQkgICBObyBzdWNoIGx1Y2sgZm9yIGNvbW0tc2xvdC9vbmJvYXJkLiAqLwotCWZvcihpID0gMDsgaSA8IDY7IGkrKykKLQkJZGV2LT5kZXZfYWRkcltpXSA9IFNPTklDX1JFQURfUFJPTShpKTsKKwkvKgorCSAqIE9uIE51QnVzIGJvYXJkcyB3ZSBjYW4gc29tZXRpbWVzIGxvb2sgaW4gdGhlIFJPTSByZXNvdXJjZXMuCisJICogTm8gc3VjaCBsdWNrIGZvciBjb21tLXNsb3Qvb25ib2FyZC4KKwkgKiBPbiB0aGUgUG93ZXJCb29rIDUyMCwgdGhlIFBST00gYmFzZSBhZGRyZXNzIGlzIGEgbXlzdGVyeS4KKwkgKi8KKwlpZiAoaHdyZWdfcHJlc2VudCgodm9pZCAqKXByb21fYWRkcikpIHsKKwkJaW50IGk7CiAKLQkvKiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgYWRkcmVzcyBpcyBiaXQtcmV2ZXJzZWQuICBUaGUgTmV0QlNECi0JICAgc291cmNlIGhhcyBhIHJhdGhlciBsb25nIGFuZCBkZXRhaWxlZCBoaXN0b3JpY2FsIGFjY291bnQgb2YKLQkgICB3aHkgdGhpcyBpcyBzby4gKi8KLQlpZiAobWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDA4XHgwMFx4MDciLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceEEwXHg0MCIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4ODBceDE5IiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHgwNVx4MDIiLCAzKSkKLQkJYml0X3JldmVyc2VfYWRkcihkZXYtPmRldl9hZGRyKTsKLQllbHNlCi0JCXJldHVybiAwOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJZGV2LT5kZXZfYWRkcltpXSA9IFNPTklDX1JFQURfUFJPTShpKTsKKwkJaWYgKCFJTlZBTElEX01BQyhkZXYtPmRldl9hZGRyKSkKKwkJCXJldHVybjsKIAotCS8qIElmIHdlIHN0aWxsIGhhdmUgd2hhdCBzZWVtcyB0byBiZSBhIGJvZ3VzIGFkZHJlc3MsIHdlJ2xsCi0gICAgICAgICAgIGxvb2sgaW4gdGhlIENBTS4gIFRoZSB0b3AgZW50cnkgc2hvdWxkIGJlIG91cnMuICovCi0JLyogRGFuZ2VyISBUaGlzIG9ubHkgd29ya3MgaWYgTWFjT1MgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQKLSAgICAgICAgICAgdGhlIGNhcmQuLi4gKi8KLQlpZiAobWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDA4XHgwMFx4MDciLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceEEwXHg0MCIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4ODBceDE5IiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHgwNVx4MDIiLCAzKSkKLQl7Ci0JCXVuc2lnbmVkIHNob3J0IHZhbDsKLQotCQlwcmludGsoS0VSTl9JTkZPICJtYWNzb25pYzogUFJPTSBzZWVtcyB0byBiZSB3cm9uZywgdHJ5aW5nIENBTSBlbnRyeSAxNVxuIik7Ci0KLQkJU09OSUNfV1JJVEUoU09OSUNfQ01ELCBTT05JQ19DUl9SU1QpOwotCQlTT05JQ19XUklURShTT05JQ19DRVAsIDE1KTsKLQotCQl2YWwgPSBTT05JQ19SRUFEKFNPTklDX0NBUDIpOwotCQlkZXYtPmRldl9hZGRyWzVdID0gdmFsID4+IDg7Ci0JCWRldi0+ZGV2X2FkZHJbNF0gPSB2YWwgJiAweGZmOwotCQl2YWwgPSBTT05JQ19SRUFEKFNPTklDX0NBUDEpOwotCQlkZXYtPmRldl9hZGRyWzNdID0gdmFsID4+IDg7Ci0JCWRldi0+ZGV2X2FkZHJbMl0gPSB2YWwgJiAweGZmOwotCQl2YWwgPSBTT05JQ19SRUFEKFNPTklDX0NBUDApOwotCQlkZXYtPmRldl9hZGRyWzFdID0gdmFsID4+IDg7Ci0JCWRldi0+ZGV2X2FkZHJbMF0gPSB2YWwgJiAweGZmOwotCi0JCXByaW50ayhLRVJOX0lORk8gIkhXIEFkZHJlc3MgZnJvbSBDQU0gMTU6ICVwTVxuIiwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHIpOwotCX0gZWxzZSByZXR1cm4gMDsKLQotCWlmIChtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDhceDAwXHgwNyIsIDMpICYmCi0JICAgIG1lbWNtcChkZXYtPmRldl9hZGRyLCAiXHgwMFx4QTBceDQwIiwgMykgJiYKLQkgICAgbWVtY21wKGRldi0+ZGV2X2FkZHIsICJceDAwXHg4MFx4MTkiLCAzKSAmJgotCSAgICBtZW1jbXAoZGV2LT5kZXZfYWRkciwgIlx4MDBceDA1XHgwMiIsIDMpKQotCXsKIAkJLyoKLQkJICogU3RpbGwgbm9uc2Vuc2UgLi4uIG1lc3NlZCB1cCBzb21lcGxhY2UhCisJCSAqIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBhZGRyZXNzIGlzIGJpdC1yZXZlcnNlZC4gVGhlIE5ldEJTRAorCQkgKiBzb3VyY2UgaGFzIGEgcmF0aGVyIGxvbmcgYW5kIGRldGFpbGVkIGhpc3RvcmljYWwgYWNjb3VudCBvZgorCQkgKiB3aHkgdGhpcyBpcyBzby4KIAkJICovCi0JCXByaW50ayhLRVJOX0VSUiAibWFjc29uaWM6IEVSUk9SIChJTlZBTElEIE1BQylcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9IGVsc2UgcmV0dXJuIDA7CisJCWJpdF9yZXZlcnNlX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCWlmICghSU5WQUxJRF9NQUMoZGV2LT5kZXZfYWRkcikpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogSWYgd2Ugc3RpbGwgaGF2ZSB3aGF0IHNlZW1zIHRvIGJlIGEgYm9ndXMgYWRkcmVzcywgd2UnbGwKKwkJICogbG9vayBpbiB0aGUgQ0FNLiBUaGUgdG9wIGVudHJ5IHNob3VsZCBiZSBvdXJzLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWFjc29uaWM6IE1BQyBhZGRyZXNzIGluIFBST00gc2VlbXMgIgorCQkgICAgICAgICAgICAgICAgICAgICJ0byBiZSBpbnZhbGlkLCB0cnlpbmcgQ0FNXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNzb25pYzogY2Fubm90IHJlYWQgTUFDIGFkZHJlc3MgZnJvbSAiCisJCSAgICAgICAgICAgICAgICAgICAgIlBST00sIHRyeWluZyBDQU1cbiIpOworCX0KKworCS8qIFRoaXMgb25seSB3b3JrcyBpZiBNYWNPUyBoYXMgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgY2FyZC4gKi8KKworCVNPTklDX1dSSVRFKFNPTklDX0NNRCwgU09OSUNfQ1JfUlNUKTsKKwlTT05JQ19XUklURShTT05JQ19DRVAsIDE1KTsKKworCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMik7CisJZGV2LT5kZXZfYWRkcls1XSA9IHZhbCA+PiA4OworCWRldi0+ZGV2X2FkZHJbNF0gPSB2YWwgJiAweGZmOworCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMSk7CisJZGV2LT5kZXZfYWRkclszXSA9IHZhbCA+PiA4OworCWRldi0+ZGV2X2FkZHJbMl0gPSB2YWwgJiAweGZmOworCXZhbCA9IFNPTklDX1JFQUQoU09OSUNfQ0FQMCk7CisJZGV2LT5kZXZfYWRkclsxXSA9IHZhbCA+PiA4OworCWRldi0+ZGV2X2FkZHJbMF0gPSB2YWwgJiAweGZmOworCisJaWYgKCFJTlZBTElEX01BQyhkZXYtPmRldl9hZGRyKSkKKwkJcmV0dXJuOworCisJLyogU3RpbGwgbm9uc2Vuc2UgLi4uIG1lc3NlZCB1cCBzb21lcGxhY2UhICovCisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJtYWNzb25pYzogTUFDIGFkZHJlc3MgaW4gQ0FNIGVudHJ5IDE1ICIKKwkgICAgICAgICAgICAgICAgICAgICJzZWVtcyBpbnZhbGlkLCB3aWxsIHVzZSBhIHJhbmRvbSBNQUNcbiIpOworCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYWNfb25ib2FyZF9zb25pY19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDAyLDggKzQwNiw3IEBACiAJU09OSUNfV1JJVEUoU09OSUNfSVNSLCAweDdmZmYpOwogCiAJLyogTm93IGxvb2sgZm9yIHRoZSBNQUMgYWRkcmVzcy4gKi8KLQlpZiAobWFjX29uYm9hcmRfc29uaWNfZXRoZXJuZXRfYWRkcihkZXYpICE9IDApCi0JCXJldHVybiAtRU5PREVWOworCW1hY19vbmJvYXJkX3NvbmljX2V0aGVybmV0X2FkZHIoZGV2KTsKIAogCS8qIFNoYXJlZCBpbml0IGNvZGUgKi8KIAlyZXR1cm4gbWFjc29uaWNfaW5pdChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDNhYWJmZDkuLjI0OTBhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYworKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTM2MCw2ICszNjAsNyBAQAogCWRldi0+c3RhdGUJCT0gKGRldi0+c3RhdGUgJiB+TUFDVkxBTl9TVEFURV9NQVNLKSB8CiAJCQkJICAobG93ZXJkZXYtPnN0YXRlICYgTUFDVkxBTl9TVEFURV9NQVNLKTsKIAlkZXYtPmZlYXR1cmVzIAkJPSBsb3dlcmRldi0+ZmVhdHVyZXMgJiBNQUNWTEFOX0ZFQVRVUkVTOworCWRldi0+Z3NvX21heF9zaXplCT0gbG93ZXJkZXYtPmdzb19tYXhfc2l6ZTsKIAlkZXYtPmlmbGluawkJPSBsb3dlcmRldi0+aWZpbmRleDsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IGxvd2VyZGV2LT5oYXJkX2hlYWRlcl9sZW47CiAKQEAgLTU5Niw2ICs1OTcsNyBAQAogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZwb3J0LT52bGFucywgbGlzdCkgewogCQkJdmxhbi0+ZGV2LT5mZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXMgJiBNQUNWTEFOX0ZFQVRVUkVTOworCQkJdmxhbi0+ZGV2LT5nc29fbWF4X3NpemUgPSBkZXYtPmdzb19tYXhfc2l6ZTsKIAkJCW5ldGRldl9mZWF0dXJlc19jaGFuZ2Uodmxhbi0+ZGV2KTsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggNWRkNzIyNS4uMjkxYTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODIsNiArMTI4Miw3IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNjkzMGM4Ny4uZjM2MjQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC03NSw3ICs3NSw3IEBACiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwLmgiCiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCIKIAotI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjAtMS40MzIiCisjZGVmaW5lIE1ZUkkxMEdFX1ZFUlNJT05fU1RSICIxLjUuMS0xLjQ1MSIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNeXJpY29tIDEwRyBkcml2ZXIgKDEwR2JFKSIpOwogTU9EVUxFX0FVVEhPUigiTWFpbnRhaW5lcjogaGVscEBteXJpLmNvbSIpOwpAQCAtMTYyNCwxMCArMTYyNCwyMSBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JaWYgKCpwdHIgPT0gJ1InIHx8ICpwdHIgPT0gJ1EnKSB7Ci0JCS8qIFdlJ3ZlIGZvdW5kIGVpdGhlciBhbiBYRlAgb3IgcXVhZCByaWJib24gZmliZXIgKi8KKwlpZiAoKnB0ciA9PSAnMicpCisJCXB0cisrOworCWlmICgqcHRyID09ICdSJyB8fCAqcHRyID09ICdRJyB8fCAqcHRyID09ICdTJykgeworCQkvKiBXZSd2ZSBmb3VuZCBlaXRoZXIgYW4gWEZQLCBxdWFkIHJpYmJvbiBmaWJlciwgb3IgU0ZQKyAqLwogCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQljbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CisJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9GSUJSRTsKKwl9IGVsc2UgeworCQljbWQtPnBvcnQgPSBQT1JUX09USEVSOwogCX0KKwlpZiAoKnB0ciA9PSAnUicgfHwgKnB0ciA9PSAnUycpCisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCWVsc2UKKwkJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggNzM4NGY1OS4uZTEyMzdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0xMTYzLDYgKzExNjMsOCBAQAogCXUzMiBpbnRfdmVjX2JpdDsKIAl1MzIgaGVhcnRiaXQ7CiAKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CiAKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggN2E3MTc3NC4uMTdiYjM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTQxOSw2ICs0MTksNyBAQAogI2RlZmluZSBORVRYRU5fQ1JCX1JPTVVTQglcCiAJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1JPTVVTQikKICNkZWZpbmUgTkVUWEVOX0NSQl9JMlEJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9JMlEpCisjZGVmaW5lIE5FVFhFTl9DUkJfSTJDMAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX0kyQzApCiAjZGVmaW5lIE5FVFhFTl9DUkJfU01CCQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfU01CKQogI2RlZmluZSBORVRYRU5fQ1JCX01BWAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKDY0KQogCkBAIC01NDQsNiArNTQ1LDggQEAKICNkZWZpbmUJTkVUWEVOX05JVV9URVNUX01VWF9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwOTQpCiAjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUEFVU0VfQ1RMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDk4KQogI2RlZmluZQlORVRYRU5fTklVX1hHX1BBVVNFX0xFVkVMCShORVRYRU5fQ1JCX05JVSArIDB4MDAwZGMpCisjZGVmaW5lCU5FVFhFTl9OSVVfRlJBTUVfQ09VTlRfU0VMRUNUCShORVRYRU5fQ1JCX05JVSArIDB4MDAwYWMpCisjZGVmaW5lCU5FVFhFTl9OSVVfRlJBTUVfQ09VTlQJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwYjApCiAjZGVmaW5lCU5FVFhFTl9OSVVfWEdfU0VMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMTI4KQogI2RlZmluZSBORVRYRU5fTklVX0dCX1BBVVNFX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDMwYykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggMzIzMTQwMC4uNTJhMzc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0zODMsMjQgKzM4Myw1MSBAQAogCiBpbnQgbmV0eGVuX3AyX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtb2RlKQogewotCV9fdTMyIHJlZzsKKwl1MzIgbWFjX2NmZzsKKwl1MzIgY250ID0gMDsKKwlfX3UzMiByZWcgPSAweDAyMDA7CiAJdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCXUxNiBib2FyZF90eXBlID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAKIAlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOwotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQotCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOwotCWVsc2UKLQkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisJbWFjX2NmZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCkpOworCW1hY19jZmcgJj0gfjB4NDsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzAgKyAoMHgxMDAwMCAqIHBvcnQpLCBtYWNfY2ZnKTsKIAotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSkKLQkJcmVnID0gKHJlZyB8IDB4MTAwMFVMKTsKLQllbHNlCi0JCXJlZyA9IChyZWcgJiB+MHgxMDAwVUwpOworCWlmICgoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaKSB8fAorCQkJKGJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWikpCisJCXJlZyA9ICgweDIwIDw8IHBvcnQpOwogCi0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSwgcmVnKTsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9GUkFNRV9DT1VOVF9TRUxFQ1QsIHJlZyk7CisKKwltZGVsYXkoMTApOworCisJd2hpbGUgKE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0ZSQU1FX0NPVU5UKSAmJiArK2NudCA8IDIwKQorCQltZGVsYXkoMTApOworCisJaWYgKGNudCA8IDIwKSB7CisKKwkJcmVnID0gTlhSRDMyKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOworCisJCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQorCQkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKKwkJZWxzZQorCQkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisKKwkJaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFKQorCQkJcmVnID0gKHJlZyB8IDB4MTAwMFVMKTsKKwkJZWxzZQorCQkJcmVnID0gKHJlZyAmIH4weDEwMDBVTCk7CisKKwkJTlhXUjMyKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7CisJfQorCisJbWFjX2NmZyB8PSAweDQ7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQzNiw3ICs0NjMsNyBAQAogewogCXUzMgl2YWwgPSAwOwogCXUxNiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQl1OCAqYWRkciA9IGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHI7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5tYWNfYWRkcjsKIAogCWlmIChhZGFwdGVyLT5tY19lbmFibGVkKQogCQlyZXR1cm4gMDsKQEAgLTQ2NSw3ICs0OTIsNyBAQAogewogCXUzMgl2YWwgPSAwOwogCXUxNiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQl1OCAqYWRkciA9IGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHI7CisJdTggKmFkZHIgPSBhZGFwdGVyLT5tYWNfYWRkcjsKIAogCWlmICghYWRhcHRlci0+bWNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CkBAIC02NjAsNyArNjg3LDcgQEAKIAogCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYWRhcHRlci0+bWFjX2xpc3QsICZkZWxfbGlzdCk7CiAKLQlueF9wM19uaWNfYWRkX21hYyhhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyLCAmZGVsX2xpc3QpOworCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyLCAmZGVsX2xpc3QpOwogCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIGJjYXN0X2FkZHIsICZkZWxfbGlzdCk7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC0xOTAxLDIyICsxOTI4LDE2IEBACiAKIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CisJaW50IG9mZnNldCwgYm9hcmRfdHlwZSwgbWFnaWM7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJb2Zmc2V0ID0gTlhfRldfTUFHSUNfT0ZGU0VUOwogCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZtYWdpYykpCiAJCXJldHVybiAtRUlPOwogCi0Jb2Zmc2V0ID0gTlhfSERSX1ZFUlNJT05fT0ZGU0VUOwotCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZoZWFkZXJfdmVyc2lvbikpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMgfHwKLQkJCWhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHgsIHZlcnNpb249JTA4eFxuIiwKLQkJCW1hZ2ljLCBoZWFkZXJfdmVyc2lvbik7CisJaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHhcbiIsCisJCQltYWdpYyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDkxYzJiYzYuLjhhMDkwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTUzMSw2ICs1MzEsOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJCWlmIChvZmYgPT0gKE5FVFhFTl9DUkJfSTJDMCArIDB4MWMpKQorCQkJCWNvbnRpbnVlOwogCQkJLyogZG8gbm90IHJlc2V0IFBDSSAqLwogCQkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4YmMpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTQyLDYgKzU0NCw4IEBACiAJCQkJY29udGludWU7CiAJCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHgxYykpIC8qIE1TIGNsb2NrICovCiAJCQkJY29udGludWU7CisJCQlpZiAoKG9mZiAmIDB4MGZmMDAwMDApID09IE5FVFhFTl9DUkJfRERSX05FVCkKKwkJCQljb250aW51ZTsKIAkJCWlmIChvZmYgPT0gKE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHgxOCkpCiAJCQkJYnVmW2ldLmRhdGEgPSAweDEwMjA7CiAJCQkvKiBza2lwIHRoZSBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KQEAgLTU1MywxMiArNTU3LDYgQEAKIAkJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChvZmYgPT0gTkVUWEVOX0FERFJfRVJST1IpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycjogVW5rbm93biBhZGRyOiAweCUwOHhcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGJ1ZltpXS5hZGRyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJaW5pdF9kZWxheSA9IDE7CiAJCS8qIEFmdGVyIHdyaXRpbmcgdGhpcyByZWdpc3RlciwgSFcgbmVlZHMgdGltZSBmb3IgQ1JCICovCiAJCS8qIHRvIHF1aWV0IGRvd24gKGVsc2UgY3JiX3dpbmRvdyByZXR1cm5zIDB4ZmZmZmZmZmYpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggOWI5ZWFiMS4uM2JmNzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNDM3LDYgKzQzNyw3IEBACiAJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSAqKHAgKyA1IC0gaSk7CiAKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBzZXQgc3RhdGlvbiBhZGRyZXNzICovCiAKQEAgLTQ1OSw2ICs0NjAsNyBAQAogCQluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOwogCX0KIAorCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIGFkZHItPnNhX2RhdGEpOwogCkBAIC01OTUsNyArNTk3LDggQEAKIAl2b2lkIF9faW9tZW0gKm1lbV9wdHIyID0gTlVMTDsKIAl2b2lkIF9faW9tZW0gKmRiX3B0ciA9IE5VTEw7CiAKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlLCBtZW1fbGVuLCBkYl9iYXNlLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9iYXNlLCBkYl9iYXNlOworCXVuc2lnbmVkIGxvbmcgbWVtX2xlbiwgZGJfbGVuID0gMCwgcGNpX2xlbjAgPSAwOwogCiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBwY2lfZnVuYyA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKQEAgLTk1NSw3ICs5NTgsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgbmV0ZGV2LT5kZXZfYWRkcik7CisJCWFkYXB0ZXItPm1hY2FkZHJfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyKTsKIAogCWFkYXB0ZXItPnNldF9tdWx0aShuZXRkZXYpOwogCWFkYXB0ZXItPnNldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOwpAQCAtMTkxOCw2ICsxOTIxLDcgQEAKIAogcmVxdWVzdF9yZXNldDoKIAlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMTsKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiB9CiAKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCBmOTM2NGQwLi5kNmM3YWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMzU0NSw3ICszNTQ1LDcgQEAKIAlycC0+cmNyX2luZGV4ID0gaW5kZXg7CiAKIAlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIE5JVV9SWFBVTExfTUFYKSk7CisJX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIFZMQU5fRVRIX0hMRU4pKTsKIAogCXJwLT5yeF9wYWNrZXRzKys7CiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBlZThhZDNlLi4xN2EyNzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMTE4LDE0ICsxMTgsNiBAQAogLyogQXV0b2RldGVjdCBsaW5rIHBvbGFyaXR5IHJldmVyc2FsPyAqLwogSU5UX01PRFVMRV9QQVJNKGF1dG9fcG9sYXJpdHksIDEpOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1JTlRfTU9EVUxFX1BBUk0ocGNfZGVidWcsIFBDTUNJQV9ERUJVRyk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0iM2M1NzRfY3MuYyAxLjY1YWMxIDIwMDMvMDQvMDcgRG9uYWxkIEJlY2tlci9EYXZpZCBIaW5kcywgYmVja2VyQHNjeWxkLmNvbS5cbiI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0yNTEsNiArMjQzLDcgQEAKIHN0YXRpYyBpbnQgZWwzX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIHZvaWQgdGM1NzRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKQEAgLTI2Niw3ICsyNTksNyBAQAogCS5uZG9fdHhfdGltZW91dCAJPSBlbDNfdHhfdGltZW91dCwKIAkubmRvX2dldF9zdGF0cwkJPSBlbDNfZ2V0X3N0YXRzLAogCS5uZG9fZG9faW9jdGwJCT0gZWwzX2lvY3RsLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTI3Nyw3ICsyNzAsNyBAQAogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCURFQlVHKDAsICIzYzU3NF9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiM2M1NzRfYXR0YWNoKClcbiIpOwogCiAJLyogQ3JlYXRlIHRoZSBQQyBjYXJkIGRldmljZSBvYmplY3QuICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlbDNfcHJpdmF0ZSkpOwpAQCAtMjkwLDEwICsyODMsOCBAQAogCXNwaW5fbG9ja19pbml0KCZscC0+d2luZG93X2xvY2spOwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9IQU5ETEVfUFJFU0VOVDsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLkhhbmRsZXIgPSAmZWwzX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwpAQCAtMzE4LDcgKzMwOSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAiM2M1NzRfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICIzYzU3NF9kZXRhY2goKVxuIik7CiAKIAlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0zMzQsMjYgKzMyNSwyMyBAQAogCWV0aGVybmV0IGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotICBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgY29uc3QgY2hhciAqcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OwogCiBzdGF0aWMgaW50IHRjNTc0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl0dXBsZV90IHR1cGxlOwotCV9fbGUxNiBidWZbMzJdOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldCwgaSwgajsKKwlpbnQgcmV0LCBpLCBqOwogCXVuc2lnbmVkIGludCBpb2FkZHI7CiAJX19iZTE2ICpwaHlzX2FkZHI7CiAJY2hhciAqY2FyZG5hbWU7CiAJX191MzIgY29uZmlnOworCXU4ICpidWY7CisJc2l6ZV90IGxlbjsKIAogCXBoeXNfYWRkciA9IChfX2JlMTYgKilkZXYtPmRldl9hZGRyOwogCi0JREVCVUcoMCwgIjNjNTc0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiM2M1NzRfY29uZmlnKClcbiIpOwogCiAJbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKIAlmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKQEAgLTM2MiwxMiArMzUwLDE2IEBACiAJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworCWlmIChpICE9IDApCiAJCWdvdG8gZmFpbGVkOwotCX0KLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzc3LDE2ICszNjksMTQgQEAKIAkvKiBUaGUgM2M1NzQgbm9ybWFsbHkgdXNlcyBhbiBFRVBST00gZm9yIGNvbmZpZ3VyYXRpb24gaW5mbywgaW5jbHVkaW5nCiAJICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgZnV0dXJlIHByb2R1Y3RzIG1heSBpbmNsdWRlIGEgbW9kZW0gY2hpcAogCSAgIGFuZCBwdXQgdGhlIGFkZHJlc3MgaW4gdGhlIENJUy4gKi8KLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg4OwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgewotCQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKKworCWxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgMHg4OCwgJmJ1Zik7CisJaWYgKGJ1ZiAmJiBsZW4gPj0gNikgewogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkJcGh5c19hZGRyW2ldID0gaHRvbnMobGUxNl90b19jcHUoYnVmW2ldKSk7CisJCQlwaHlzX2FkZHJbaV0gPSBodG9ucyhsZTE2X3RvX2NwdShidWZbaSAqIDJdKSk7CisJCWtmcmVlKGJ1Zik7CiAJfSBlbHNlIHsKKwkJa2ZyZWUoYnVmKTsgLyogMCA8IGxlbiA8IDYgKi8KIAkJRUwzV0lORE9XKDApOwogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQkJcGh5c19hZGRyW2ldID0gaHRvbnMocmVhZF9lZXByb20oaW9hZGRyLCBpICsgMTApKTsKQEAgLTQzNCw3ICs0MjQsOCBAQAogCQkJbWlpX3N0YXR1cyA9IG1kaW9fcmVhZChpb2FkZHIsIHBoeSAmIDB4MWYsIDEpOwogCQkJaWYgKG1paV9zdGF0dXMgIT0gMHhmZmZmKSB7CiAJCQkJbHAtPnBoeXMgPSBwaHkgJiAweDFmOwotCQkJCURFQlVHKDAsICIgIE1JSSB0cmFuc2NlaXZlciBhdCBpbmRleCAlZCwgc3RhdHVzICV4LlxuIiwKKwkJCQlkZXZfZGJnKCZsaW5rLT5kZXYsICIgIE1JSSB0cmFuc2NlaXZlciBhdCAiCisJCQkJCSJpbmRleCAlZCwgc3RhdHVzICV4LlxuIiwKIAkJCQkJICBwaHksIG1paV9zdGF0dXMpOwogCQkJCWlmICgobWlpX3N0YXR1cyAmIDB4MDA0MCkgPT0gMCkKIAkJCQkJbWlpX3ByZWFtYmxlX3JlcXVpcmVkID0gMTsKQEAgLTQ1Niw3ICs0NDcsNyBAQAogCX0KIAogCWxpbmstPmRldl9ub2RlID0gJmxwLT5ub2RlOwotCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOworCVNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIjNjNTc0X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtNDc3LDggKzQ2OCw2IEBACiAKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAl0YzU3NF9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpAQCAtNzM3LDcgKzcyNiw3IEBACiAJbHAtPm1lZGlhLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CiAJYWRkX3RpbWVyKCZscC0+bWVkaWEpOwogCQotCURFQlVHKDIsICIlczogb3BlbmVkLCBzdGF0dXMgJTQuNHguXG4iLAorCWRldl9kYmcoJmxpbmstPmRldiwgIiVzOiBvcGVuZWQsIHN0YXR1cyAlNC40eC5cbiIsCiAJCSAgZGV2LT5uYW1lLCBpbncoZGV2LT5iYXNlX2FkZHIgKyBFTDNfU1RBVFVTKSk7CiAJCiAJcmV0dXJuIDA7CkBAIC03NzEsNyArNzYwLDcgQEAKIAkJaWYgKHR4X3N0YXR1cyAmIDB4MzApCiAJCQl0YzU3NF93YWl0X2Zvcl9jb21wbGV0aW9uKGRldiwgVHhSZXNldCk7CiAJCWlmICh0eF9zdGF0dXMgJiAweDM4KSB7Ci0JCQlERUJVRygxLCAiJXM6IHRyYW5zbWl0IGVycm9yOiBzdGF0dXMgMHglMDJ4XG4iLAorCQkJcHJfZGVidWcoIiVzOiB0cmFuc21pdCBlcnJvcjogc3RhdHVzIDB4JTAyeFxuIiwKIAkJCQkgIGRldi0+bmFtZSwgdHhfc3RhdHVzKTsKIAkJCW91dHcoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwogCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwpAQCAtNzg3LDcgKzc3Niw3IEBACiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURFQlVHKDMsICIlczogZWwzX3N0YXJ0X3htaXQobGVuZ3RoID0gJWxkKSBjYWxsZWQsICIKKwlwcl9kZWJ1ZygiJXM6IGVsM19zdGFydF94bWl0KGxlbmd0aCA9ICVsZCkgY2FsbGVkLCAiCiAJCSAgInN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwgKGxvbmcpc2tiLT5sZW4sCiAJCSAgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIApAQCAtODI2LDcgKzgxNSw3IEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotCURFQlVHKDMsICIlczogaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAorCXByX2RlYnVnKCIlczogaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAogCQkgIGRldi0+bmFtZSwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAogCXNwaW5fbG9jaygmbHAtPndpbmRvd19sb2NrKTsKQEAgLTgzNSw3ICs4MjQsNyBAQAogCQkgICAoSW50TGF0Y2ggfCBSeENvbXBsZXRlIHwgUnhFYXJseSB8IFN0YXRzRnVsbCkpIHsKIAkJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpIHx8CiAJCQkoKHN0YXR1cyAmIDB4ZTAwMCkgIT0gMHgyMDAwKSkgewotCQkJREVCVUcoMSwgIiVzOiBJbnRlcnJ1cHQgZnJvbSBkZWFkIGNhcmRcbiIsIGRldi0+bmFtZSk7CisJCQlwcl9kZWJ1ZygiJXM6IEludGVycnVwdCBmcm9tIGRlYWQgY2FyZFxuIiwgZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTg0NSw3ICs4MzQsNyBAQAogCQkJd29ya19idWRnZXQgPSBlbDNfcngoZGV2LCB3b3JrX2J1ZGdldCk7CiAKIAkJaWYgKHN0YXR1cyAmIFR4QXZhaWxhYmxlKSB7Ci0JCQlERUJVRygzLCAiICBUWCByb29tIGJpdCB3YXMgaGFuZGxlZC5cbiIpOworCQkJcHJfZGVidWcoIiAgVFggcm9vbSBiaXQgd2FzIGhhbmRsZWQuXG4iKTsKIAkJCS8qIFRoZXJlJ3Mgcm9vbSBpbiB0aGUgRklGTyBmb3IgYSBmdWxsLXNpemVkIHBhY2tldC4gKi8KIAkJCW91dHcoQWNrSW50ciB8IFR4QXZhaWxhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTg4NSw3ICs4NzQsNyBAQAogCQl9CiAKIAkJaWYgKC0td29ya19idWRnZXQgPCAwKSB7Ci0JCQlERUJVRygwLCAiJXM6IFRvbyBtdWNoIHdvcmsgaW4gaW50ZXJydXB0LCAiCisJCQlwcl9kZWJ1ZygiJXM6IFRvbyBtdWNoIHdvcmsgaW4gaW50ZXJydXB0LCAiCiAJCQkJICAic3RhdHVzICU0LjR4LlxuIiwgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJLyogQ2xlYXIgYWxsIGludGVycnVwdHMgKi8KIAkJCW91dHcoQWNrSW50ciB8IDB4RkYsIGlvYWRkciArIEVMM19DTUQpOwpAQCAtODk1LDcgKzg4NCw3IEBACiAJCW91dHcoQWNrSW50ciB8IEludFJlcSB8IEludExhdGNoLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAl9CiAKLQlERUJVRygzLCAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAorCXByX2RlYnVnKCIlczogZXhpdGluZyBpbnRlcnJ1cHQsIHN0YXR1cyAlNC40eC5cbiIsCiAJCSAgZGV2LT5uYW1lLCBpbncoaW9hZGRyICsgRUwzX1NUQVRVUykpOwogCQkgIAogCXNwaW5fdW5sb2NrKCZscC0+d2luZG93X2xvY2spOwpAQCAtMTAwMiw3ICs5OTEsNyBAQAogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1OCByeCwgdHgsIHVwOwogCi0JREVCVUcoMiwgIiVzOiB1cGRhdGluZyB0aGUgc3RhdGlzdGljcy5cbiIsIGRldi0+bmFtZSk7CisJcHJfZGVidWcoIiVzOiB1cGRhdGluZyB0aGUgc3RhdGlzdGljcy5cbiIsIGRldi0+bmFtZSk7CiAKIAlpZiAoaW53KGlvYWRkcitFTDNfU1RBVFVTKSA9PSAweGZmZmYpIC8qIE5vIGNhcmQuICovCiAJCXJldHVybjsKQEAgLTEwMzgsNyArMTAyNyw3IEBACiAJdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCXNob3J0IHJ4X3N0YXR1czsKIAkKLQlERUJVRygzLCAiJXM6IGluIHJ4X3BhY2tldCgpLCBzdGF0dXMgJTQuNHgsIHJ4X3N0YXR1cyAlNC40eC5cbiIsCisJcHJfZGVidWcoIiVzOiBpbiByeF9wYWNrZXQoKSwgc3RhdHVzICU0LjR4LCByeF9zdGF0dXMgJTQuNHguXG4iLAogCQkgIGRldi0+bmFtZSwgaW53KGlvYWRkcitFTDNfU1RBVFVTKSwgaW53KGlvYWRkcitSeFN0YXR1cykpOwogCXdoaWxlICghKChyeF9zdGF0dXMgPSBpbncoaW9hZGRyICsgUnhTdGF0dXMpKSAmIDB4ODAwMCkgJiYKIAkJCXdvcmtsaW1pdCA+IDApIHsKQEAgLTEwNjAsNyArMTA0OSw3IEBACiAKIAkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbis1KTsKIAotCQkJREVCVUcoMywgIiAgUmVjZWl2aW5nIHBhY2tldCBzaXplICVkIHN0YXR1cyAlNC40eC5cbiIsCisJCQlwcl9kZWJ1ZygiICBSZWNlaXZpbmcgcGFja2V0IHNpemUgJWQgc3RhdHVzICU0LjR4LlxuIiwKIAkJCQkgIHBrdF9sZW4sIHJ4X3N0YXR1cyk7CiAJCQlpZiAoc2tiICE9IE5VTEwpIHsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwpAQCAtMTA3MSw3ICsxMDYwLDcgQEAKIAkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCQl9IGVsc2UgewotCQkJCURFQlVHKDEsICIlczogY291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIgorCQkJCXByX2RlYnVnKCIlczogY291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIgogCQkJCQkgICIgc2l6ZSAlZC5cbiIsIGRldi0+bmFtZSwgcGt0X2xlbik7CiAJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9CkBAIC0xMTAwLDcgKzEwODksNyBAQAogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAJaW50IHBoeSA9IGxwLT5waHlzICYgMHgxZjsKIAotCURFQlVHKDIsICIlczogSW4gaW9jdCglLS42cywgJSM0LjR4KSAlNC40eCAlNC40eCAlNC40eCAlNC40eC5cbiIsCisJcHJfZGVidWcoIiVzOiBJbiBpb2N0KCUtLjZzLCAlIzQuNHgpICU0LjR4ICU0LjR4ICU0LjR4ICU0LjR4LlxuIiwKIAkJICBkZXYtPm5hbWUsIHJxLT5pZnJfaWZybi5pZnJuX25hbWUsIGNtZCwKIAkJICBkYXRhLT5waHlfaWQsIGRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbiwgZGF0YS0+dmFsX291dCk7CiAKQEAgLTExNjEsMTMgKzExNTAsMjMgQEAKIAkJb3V0dyhTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlzZXRfcnhfbW9kZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgaW50IGVsM19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAotCURFQlVHKDIsICIlczogc2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOworCWRldl9kYmcoJmxpbmstPmRldiwgIiVzOiBzaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAJCiAJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCA1NjlmYjA2Li42ZjhkN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTMwLDE0ICsxMzAsNiBAQAogLyogU3BlY2lhbCBob29rIGZvciBzZXR0aW5nIGlmX3BvcnQgd2hlbiBtb2R1bGUgaXMgbG9hZGVkICovCiBJTlRfTU9EVUxFX1BBUk0oaWZfcG9ydCwgMCk7CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLUlOVF9NT0RVTEVfUEFSTShwY19kZWJ1ZywgUENNQ0lBX0RFQlVHKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLURSVl9OQU1FICIuYyAiIERSVl9WRVJTSU9OICIgMjAwMS8xMC8xMyAwMDowODo1MCAoRGF2aWQgSGluZHMpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTE4OSw3ICsxODEsNyBAQAogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHA7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotICAgIERFQlVHKDAsICIzYzU4OV9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiM2M1ODlfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyBldGhlcm5ldCBkZXZpY2UgKi8KICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVsM19wcml2YXRlKSk7CkBAIC0yMDIsMTAgKzE5NCw4IEBACiAgICAgc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJmVsM19pbnRlcnJ1cHQ7Ci0gICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKQEAgLTIzMSw3ICsyMjEsNyBAQAogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0gICAgREVCVUcoMCwgIjNjNTg5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiM2M1ODlfZGV0YWNoXG4iKTsKIAogICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtMjQ5LDI5ICsyMzksMjAgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgdGM1ODlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgX19sZTE2IGJ1ZlszMl07CiAgICAgX19iZTE2ICpwaHlzX2FkZHI7Ci0gICAgaW50IGxhc3RfZm4sIGxhc3RfcmV0LCBpLCBqLCBtdWx0aSA9IDAsIGZpZm87CisgICAgaW50IHJldCwgaSwgaiwgbXVsdGkgPSAwLCBmaWZvOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgY2hhciAqcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OworICAgIHU4ICpidWY7CisgICAgc2l6ZV90IGxlbjsKICAgICAKLSAgICBERUJVRygwLCAiM2M1ODlfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICIzYzU4OV9jb25maWdcbiIpOwogCiAgICAgcGh5c19hZGRyID0gKF9fYmUxNiAqKWRldi0+ZGV2X2FkZHI7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0KICAgICAvKiBJcyB0aGlzIGEgM2M1NjI/ICovCiAgICAgaWYgKGxpbmstPm1hbmZfaWQgIT0gTUFORklEXzNDT00pCiAJICAgIHByaW50ayhLRVJOX0lORk8gIjNjNTg5X2NzOiBobW1tLCBpcyB0aGlzIHJlYWxseSBhICIKQEAgLTI4NywxMiArMjY4LDE2IEBACiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQotICAgIGlmIChpICE9IDApIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworICAgIGlmIChpICE9IDApCiAJZ290byBmYWlsZWQ7Ci0gICAgfQotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKworICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKKworICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCQogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtMzAxLDEyICsyODYsMTMgQEAKIAogICAgIC8qIFRoZSAzYzU4OSBoYXMgYW4gZXh0cmEgRUVQUk9NIGZvciBjb25maWd1cmF0aW9uIGluZm8sIGluY2x1ZGluZwogICAgICAgIHRoZSBoYXJkd2FyZSBhZGRyZXNzLiAgVGhlIDNjNTYyIHB1dHMgdGhlIGFkZHJlc3MgaW4gdGhlIENJUy4gKi8KLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg4OwotICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgewotCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JICAgIHBoeXNfYWRkcltpXSA9IGh0b25zKGxlMTZfdG9fY3B1KGJ1ZltpXSkpOworICAgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgMHg4OCwgJmJ1Zik7CisgICAgaWYgKGJ1ZiAmJiBsZW4gPj0gNikgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkgICAgcGh5c19hZGRyW2ldID0gaHRvbnMobGUxNl90b19jcHUoYnVmW2kqMl0pKTsKKwkgICAga2ZyZWUoYnVmKTsKICAgICB9IGVsc2UgeworCWtmcmVlKGJ1Zik7IC8qIDAgPCBsZW4gPCA2ICovCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkgICAgcGh5c19hZGRyW2ldID0gaHRvbnMocmVhZF9lZXByb20oaW9hZGRyLCBpKSk7CiAJaWYgKHBoeXNfYWRkclswXSA9PSBodG9ucygweDYwNjApKSB7CkBAIC0zMjgsNyArMzE0LDcgQEAKIAlwcmludGsoS0VSTl9FUlIgIjNjNTg5X2NzOiBpbnZhbGlkIGlmX3BvcnQgcmVxdWVzdGVkXG4iKTsKICAgICAKICAgICBsaW5rLT5kZXZfbm9kZSA9ICZscC0+bm9kZTsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9FUlIgIjNjNTg5X2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtMzQ3LDggKzMzMyw2IEBACiAJICAgaWZfbmFtZXNbZGV2LT5pZl9wb3J0XSk7CiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgdGM1ODlfcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTUxMSwyNCArNDk1LDggQEAKIAlzcHJpbnRmKGluZm8tPmJ1c19pbmZvLCAiUENNQ0lBIDB4JWx4IiwgZGV2LT5iYXNlX2FkZHIpOwogfQogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgdTMyIG5ldGRldl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gcGNfZGVidWc7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ldGRldl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotCXBjX2RlYnVnID0gbGV2ZWw7Ci19Ci0jZW5kaWYgLyogUENNQ0lBX0RFQlVHICovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0JLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAotCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKLSNlbmRpZiAvKiBQQ01DSUFfREVCVUcgKi8KIH07CiAKIHN0YXRpYyBpbnQgZWwzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKQEAgLTU2Myw3ICs1MzEsNyBAQAogICAgIGxwLT5tZWRpYS5leHBpcmVzID0gamlmZmllcyArIEhaOwogICAgIGFkZF90aW1lcigmbHAtPm1lZGlhKTsKIAotICAgIERFQlVHKDEsICIlczogb3BlbmVkLCBzdGF0dXMgJTQuNHguXG4iLAorICAgIGRldl9kYmcoJmxpbmstPmRldiwgIiVzOiBvcGVuZWQsIHN0YXR1cyAlNC40eC5cbiIsCiAJICBkZXYtPm5hbWUsIGludyhkZXYtPmJhc2VfYWRkciArIEVMM19TVEFUVVMpKTsKICAgICAKICAgICByZXR1cm4gMDsKQEAgLTU5Niw3ICs1NjQsNyBAQAogCWlmICh0eF9zdGF0dXMgJiAweDMwKQogCSAgICB0YzU4OV93YWl0X2Zvcl9jb21wbGV0aW9uKGRldiwgVHhSZXNldCk7CiAJaWYgKHR4X3N0YXR1cyAmIDB4MzgpIHsKLQkgICAgREVCVUcoMSwgIiVzOiB0cmFuc21pdCBlcnJvcjogc3RhdHVzIDB4JTAyeFxuIiwKKwkgICAgcHJfZGVidWcoIiVzOiB0cmFuc21pdCBlcnJvcjogc3RhdHVzIDB4JTAyeFxuIiwKIAkJICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CiAJICAgIG91dHcoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwogCSAgICBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC02MTIsNyArNTgwLDcgQEAKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgICBERUJVRygzLCAiJXM6IGVsM19zdGFydF94bWl0KGxlbmd0aCA9ICVsZCkgY2FsbGVkLCAiCisgICAgcHJfZGVidWcoIiVzOiBlbDNfc3RhcnRfeG1pdChsZW5ndGggPSAlbGQpIGNhbGxlZCwgIgogCSAgInN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwgKGxvbmcpc2tiLT5sZW4sCiAJICBpbncoaW9hZGRyICsgRUwzX1NUQVRVUykpOwogCkBAIC02NTQsMTQgKzYyMiwxNCBAQAogCiAgICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLSAgICBERUJVRygzLCAiJXM6IGludGVycnVwdCwgc3RhdHVzICU0LjR4LlxuIiwKKyAgICBwcl9kZWJ1ZygiJXM6IGludGVycnVwdCwgc3RhdHVzICU0LjR4LlxuIiwKIAkgIGRldi0+bmFtZSwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAogICAgIHNwaW5fbG9jaygmbHAtPmxvY2spOyAgICAKICAgICB3aGlsZSAoKHN0YXR1cyA9IGludyhpb2FkZHIgKyBFTDNfU1RBVFVTKSkgJgogCShJbnRMYXRjaCB8IFJ4Q29tcGxldGUgfCBTdGF0c0Z1bGwpKSB7CiAJaWYgKChzdGF0dXMgJiAweGUwMDApICE9IDB4MjAwMCkgewotCSAgICBERUJVRygxLCAiJXM6IGludGVycnVwdCBmcm9tIGRlYWQgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkgICAgcHJfZGVidWcoIiVzOiBpbnRlcnJ1cHQgZnJvbSBkZWFkIGNhcmRcbiIsIGRldi0+bmFtZSk7CiAJICAgIGhhbmRsZWQgPSAwOwogCSAgICBicmVhazsKIAl9CkBAIC02NzAsNyArNjM4LDcgQEAKIAkgICAgZWwzX3J4KGRldik7CiAJCiAJaWYgKHN0YXR1cyAmIFR4QXZhaWxhYmxlKSB7Ci0JICAgIERFQlVHKDMsICIgICAgVFggcm9vbSBiaXQgd2FzIGhhbmRsZWQuXG4iKTsKKwkgICAgcHJfZGVidWcoIiAgICBUWCByb29tIGJpdCB3YXMgaGFuZGxlZC5cbiIpOwogCSAgICAvKiBUaGVyZSdzIHJvb20gaW4gdGhlIEZJRk8gZm9yIGEgZnVsbC1zaXplZCBwYWNrZXQuICovCiAJICAgIG91dHcoQWNrSW50ciB8IFR4QXZhaWxhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtNzIyLDcgKzY5MCw3IEBACiAKICAgICBscC0+bGFzdF9pcnEgPSBqaWZmaWVzOwogICAgIHNwaW5fdW5sb2NrKCZscC0+bG9jayk7ICAgIAotICAgIERFQlVHKDMsICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIHN0YXR1cyAlNC40eC5cbiIsCisgICAgcHJfZGVidWcoIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzICU0LjR4LlxuIiwKIAkgIGRldi0+bmFtZSwgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKICAgICByZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KQEAgLTgzMyw3ICs4MDEsNyBAQAogewogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIERFQlVHKDIsICIlczogdXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MuXG4iLCBkZXYtPm5hbWUpOworICAgIHByX2RlYnVnKCIlczogdXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MuXG4iLCBkZXYtPm5hbWUpOwogICAgIC8qIFR1cm4gb2ZmIHN0YXRpc3RpY3MgdXBkYXRlcyB3aGlsZSByZWFkaW5nLiAqLwogICAgIG91dHcoU3RhdHNEaXNhYmxlLCBpb2FkZHIgKyBFTDNfQ01EKTsKICAgICAvKiBTd2l0Y2ggdG8gdGhlIHN0YXRzIHdpbmRvdywgYW5kIHJlYWQgZXZlcnl0aGluZy4gKi8KQEAgLTg2MSw3ICs4MjksNyBAQAogICAgIGludCB3b3JrbGltaXQgPSAzMjsKICAgICBzaG9ydCByeF9zdGF0dXM7CiAgICAgCi0gICAgREVCVUcoMywgIiVzOiBpbiByeF9wYWNrZXQoKSwgc3RhdHVzICU0LjR4LCByeF9zdGF0dXMgJTQuNHguXG4iLAorICAgIHByX2RlYnVnKCIlczogaW4gcnhfcGFja2V0KCksIHN0YXR1cyAlNC40eCwgcnhfc3RhdHVzICU0LjR4LlxuIiwKIAkgIGRldi0+bmFtZSwgaW53KGlvYWRkcitFTDNfU1RBVFVTKSwgaW53KGlvYWRkcitSWF9TVEFUVVMpKTsKICAgICB3aGlsZSAoISgocnhfc3RhdHVzID0gaW53KGlvYWRkciArIFJYX1NUQVRVUykpICYgMHg4MDAwKSAmJgogCQkgICAgd29ya2xpbWl0ID4gMCkgewpAQCAtODgzLDcgKzg1MSw3IEBACiAJICAgIAogCSAgICBza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4rNSk7CiAJICAgIAotCSAgICBERUJVRygzLCAiICAgIFJlY2VpdmluZyBwYWNrZXQgc2l6ZSAlZCBzdGF0dXMgJTQuNHguXG4iLAorCSAgICBwcl9kZWJ1ZygiICAgIFJlY2VpdmluZyBwYWNrZXQgc2l6ZSAlZCBzdGF0dXMgJTQuNHguXG4iLAogCQkgIHBrdF9sZW4sIHJ4X3N0YXR1cyk7CiAJICAgIGlmIChza2IgIT0gTlVMTCkgewogCQlza2JfcmVzZXJ2ZShza2IsIDIpOwpAQCAtODk0LDcgKzg2Miw3IEBACiAJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJICAgIH0gZWxzZSB7Ci0JCURFQlVHKDEsICIlczogY291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIgorCQlwcl9kZWJ1ZygiJXM6IGNvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiIKIAkJICAgICAgIiBzaXplICVkLlxuIiwgZGV2LT5uYW1lLCBwa3RfbGVuKTsKIAkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJICAgIH0KQEAgLTkzNSw3ICs5MDMsNyBAQAogICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICAKLSAgICBERUJVRygxLCAiJXM6IHNodXR0aW5nIGRvd24gZXRoZXJjYXJkLlxuIiwgZGV2LT5uYW1lKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICIlczogc2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwogCiAgICAgaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCS8qIFR1cm4gb2ZmIHN0YXRpc3RpY3MgQVNBUC4gIFdlIHVwZGF0ZSBkZXYtPnN0YXRzIGJlbG93LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAzMTMxYTU5Li44MDA1OTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtNzUsMTYgKzc1LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQXNpeCBBWDg4MTkwIFBDTUNJQSBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotI2RlZmluZSBJTlRfTU9EVUxFX1BBUk0obiwgdikgc3RhdGljIGludCBuID0gdjsgbW9kdWxlX3BhcmFtKG4sIGludCwgMCkKLQotSU5UX01PRFVMRV9QQVJNKHBjX2RlYnVnLCBQQ01DSUFfREVCVUcpOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQotc3RhdGljIGNoYXIgKnZlcnNpb24gPQotImF4bmV0X2NzLmMgMS4yOCAyMDAyLzA2LzI5IDA2OjI3OjM3IChEYXZpZCBIaW5kcykiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTY3LDcgKzE1Nyw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICBzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKIAotICAgIERFQlVHKDAsICJheG5ldF9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiYXhuZXRfYXR0YWNoKClcbiIpOwogCiAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpICsgc2l6ZW9mKGF4bmV0X2Rldl90KSk7CiAgICAgaWYgKCFkZXYpCkBAIC0xODAsNyArMTcwLDYgQEAKICAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0yMDUsNyArMTk0LDcgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJheG5ldF9kZXRhY2goMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImF4bmV0X2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKICAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTI3Miw5ICsyNjEsNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHRyeV9pb19wb3J0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGludCBqLCByZXQ7CkBAIC0zNDEsMjYgKzMyNywyOSBAQAogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGF4bmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIGludCBpLCBqLCBqMiwgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IGksIGosIGoyLCByZXQ7CiAKLSAgICBERUJVRygwLCAiYXhuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJheG5ldF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCiAgICAgLyogZG9uJ3QgdHJ1c3QgdGhlIENJUyBvbiB0aGlzOyBMaW5rc3lzIGdvdCBpdCB3cm9uZyAqLwogICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IDB4NjM7Ci0gICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgYXhuZXRfY29uZmlnY2hlY2ssIE5VTEwpOwotICAgIGlmIChsYXN0X3JldCAhPSAwKSB7Ci0JY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisgICAgcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGF4bmV0X2NvbmZpZ2NoZWNrLCBOVUxMKTsKKyAgICBpZiAocmV0ICE9IDApCiAJZ290byBmYWlsZWQ7Ci0gICAgfQogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgCiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSB7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKICAgICB9CiAgICAgCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKKwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCkBAIC00MTAsNyArMzk5LDcgQEAKIAogICAgIGluZm8tPnBoeV9pZCA9IChpIDwgMzIpID8gaSA6IC0xOwogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJheG5ldF9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKQEAgLTQyNiwxNCArNDE1LDEyIEBACiAJICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxLAogCSAgIGRldi0+ZGV2X2FkZHIpOwogICAgIGlmIChpbmZvLT5waHlfaWQgIT0gLTEpIHsKLQlERUJVRygwLCAiICBNSUkgdHJhbnNjZWl2ZXIgYXQgaW5kZXggJWQsIHN0YXR1cyAleC5cbiIsIGluZm8tPnBoeV9pZCwgaik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiICBNSUkgdHJhbnNjZWl2ZXIgYXQgaW5kZXggJWQsIHN0YXR1cyAleC5cbiIsIGluZm8tPnBoeV9pZCwgaik7CiAgICAgfSBlbHNlIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiAgTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCFcbiIpOwogICAgIH0KICAgICByZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBheG5ldF9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwpAQCAtNTQzLDcgKzUzMCw3IEBACiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKICAgICB1bnNpZ25lZCBpbnQgbmljX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICAKLSAgICBERUJVRygyLCAiYXhuZXRfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJheG5ldF9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCiAgICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJcmV0dXJuIC1FTk9ERVY7CkBAIC01NzIsNyArNTU5LDcgQEAKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGluZm8tPnBfZGV2OwogCi0gICAgREVCVUcoMiwgImF4bmV0X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImF4bmV0X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCiAgICAgYXhfY2xvc2UoZGV2KTsKICAgICBmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKQEAgLTc0MSwxMCArNzI4LDggQEAKICAgICBpbnQgeGZlcl9jb3VudCA9IGNvdW50OwogICAgIGNoYXIgKmJ1ZiA9IHNrYi0+ZGF0YTsKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwogICAgIGlmICgoZWlfZGVidWcgPiA0KSAmJiAoY291bnQgIT0gNCkpCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBbYmk9JWRdXG4iLCBkZXYtPm5hbWUsIGNvdW50KzQpOwotI2VuZGlmCisJICAgIHByX2RlYnVnKCIlczogW2JpPSVkXVxuIiwgZGV2LT5uYW1lLCBjb3VudCs0KTsKICAgICBvdXRiX3AocmluZ19vZmZzZXQgJiAweGZmLCBuaWNfYmFzZSArIEVOMF9SU0FSTE8pOwogICAgIG91dGJfcChyaW5nX29mZnNldCA+PiA4LCBuaWNfYmFzZSArIEVOMF9SU0FSSEkpOwogICAgIG91dGJfcChFODM5MF9SUkVBRCtFODM5MF9TVEFSVCwgbmljX2Jhc2UgKyBBWE5FVF9DTUQpOwpAQCAtNzYyLDEwICs3NDcsNyBAQAogewogICAgIHVuc2lnbmVkIGludCBuaWNfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKGVpX2RlYnVnID4gNCkKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFtibz0lZF1cbiIsIGRldi0+bmFtZSwgY291bnQpOwotI2VuZGlmCisgICAgcHJfZGVidWcoIiVzOiBbYm89JWRdXG4iLCBkZXYtPm5hbWUsIGNvdW50KTsKIAogICAgIC8qIFJvdW5kIHRoZSBjb3VudCB1cCBmb3Igd29yZCB3cml0ZXMuICBEbyB3ZSBuZWVkIHRvIGRvIHRoaXM/CiAgICAgICAgV2hhdCBlZmZlY3Qgd2lsbCBhbiBvZGQgYnl0ZSBjb3VudCBoYXZlIG9uIHRoZSA4MzkwPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwppbmRleCA3YjVjNzdiNy4uMjFkOWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKQEAgLTUzLDExICs1Myw3IEBACiAKICNkZWZpbmUgVkVSU0lPTiAiYXJjbmV0OiBDT00yMDAyMCBQQ01DSUEgc3VwcG9ydCBsb2FkZWQuXG4iCiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLQotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKKyNpZmRlZiBERUJVRwogCiBzdGF0aWMgdm9pZCByZWdkdW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC05Miw3ICs4OCw2IEBACiAKICNlbHNlCiAKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSB2b2lkIHJlZ2R1bXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9CiAKICNlbmRpZgpAQCAtMTQ0LDcgKzEzOSw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICBzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscDsKIAotICAgIERFQlVHKDAsICJjb20yMDAyMF9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmcF9kZXYtPmRldiwgImNvbTIwMDIwX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIENyZWF0ZSBuZXcgbmV0d29yayBkZXZpY2UgKi8KICAgICBpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbTIwMDIwX2Rldl90KSwgR0ZQX0tFUk5FTCk7CkBAIC0xNjksMTEgKzE2NCwxMCBAQAogICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAxNjsKICAgICBwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0gICAgcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBpbmZvLT5kZXYgPSBkZXY7CisgICAgaW5mby0+ZGV2ID0gZGV2OwogICAgIHBfZGV2LT5wcml2ID0gaW5mbzsKIAogICAgIHJldHVybiBjb20yMDAyMF9jb25maWcocF9kZXYpOwpAQCAtMTk4LDEyICsxOTIsMTIgQEAKICAgICBzdHJ1Y3QgY29tMjAwMjBfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAKLSAgICBERUJVRygxLCJkZXRhY2guLi5cbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImRldGFjaC4uLlxuIik7CiAKLSAgICBERUJVRygwLCAiY29tMjAwMjBfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJjb20yMDAyMF9kZXRhY2hcbiIpOwogCiAgICAgaWYgKGxpbmstPmRldl9ub2RlKSB7Ci0JREVCVUcoMSwidW5yZWdpc3Rlci4uLlxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAidW5yZWdpc3Rlci4uLlxuIik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCkBAIC0yMTgsMTYgKzIxMiwxNiBAQAogICAgIGNvbTIwMDIwX3JlbGVhc2UobGluayk7CiAKICAgICAvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgZnJlZSBiaXRzICovCi0gICAgREVCVUcoMSwidW5saW5raW5nLi4uXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJ1bmxpbmtpbmcuLi5cbiIpOwogICAgIGlmIChsaW5rLT5wcml2KQogICAgIHsKIAlkZXYgPSBpbmZvLT5kZXY7CiAJaWYgKGRldikKIAl7Ci0JICAgIERFQlVHKDEsImtmcmVlLi4uXG4iKTsKKwkgICAgZGV2X2RiZygmbGluay0+ZGV2LCAia2ZyZWUuLi5cbiIpOwogCSAgICBmcmVlX25ldGRldihkZXYpOwogCX0KLQlERUJVRygxLCJrZnJlZTIuLi5cbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgImtmcmVlMi4uLlxuIik7CiAJa2ZyZWUoaW5mbyk7CiAgICAgfQogCkBAIC0yNDEsMjUgKzIzNSwyMiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IGNvbTIwMDIwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscDsKICAgICBjb20yMDAyMF9kZXZfdCAqaW5mbzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotICAgIGludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKKyAgICBpbnQgaSwgcmV0OwogICAgIGludCBpb2FkZHI7CiAKICAgICBpbmZvID0gbGluay0+cHJpdjsKICAgICBkZXYgPSBpbmZvLT5kZXY7CiAKLSAgICBERUJVRygxLCJjb25maWcuLi5cbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImNvbmZpZy4uLlxuIik7CiAKLSAgICBERUJVRygwLCAiY29tMjAwMjBfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJjb20yMDAyMF9jb25maWdcbiIpOwogCi0gICAgREVCVUcoMSwiYXJjbmV0OiBiYXNlcG9ydDEgaXMgJVhoXG4iLCBsaW5rLT5pby5CYXNlUG9ydDEpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImJhc2Vwb3J0MSBpcyAlWGhcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSk7CiAgICAgaSA9IC1FTk9ERVY7CiAgICAgaWYgKCFsaW5rLT5pby5CYXNlUG9ydDEpCiAgICAgewpAQCAtMjc2LDI2ICsyNjcsMjcgQEAKICAgICAKICAgICBpZiAoaSAhPSAwKQogICAgIHsKLQlERUJVRygxLCJhcmNuZXQ6IHJlcXVlc3RJTyBmYWlsZWQgdG90YWxseSFcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJlcXVlc3RJTyBmYWlsZWQgdG90YWxseSFcbiIpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KIAkKICAgICBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLSAgICBERUJVRygxLCJhcmNuZXQ6IGdvdCBpb2FkZHIgJVhoXG4iLCBpb2FkZHIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImdvdCBpb2FkZHIgJVhoXG4iLCBpb2FkZHIpOwogCi0gICAgREVCVUcoMSwiYXJjbmV0OiByZXF1ZXN0IElSUSAlZCAoJVhoLyVYaClcbiIsCi0JICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCSAgIGxpbmstPmlycS5JUlFJbmZvMSwgbGluay0+aXJxLklSUUluZm8yKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJyZXF1ZXN0IElSUSAlZFxuIiwKKwkgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogICAgIGlmIChpICE9IDApCiAgICAgewotCURFQlVHKDEsImFyY25ldDogcmVxdWVzdElSUSBmYWlsZWQgdG90YWxseSFcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJlcXVlc3RJUlEgZmFpbGVkIHRvdGFsbHkhXG4iKTsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICBpZiAoY29tMjAwMjBfY2hlY2soZGV2KSkKICAgICB7CkBAIC0zMDgsMjYgKzMwMCwyNSBAQAogICAgIGxwLT5jYXJkX2ZsYWdzID0gQVJDX0NBTl8xME1CSVQ7IC8qIHByZXRlbmQgYWxsIG9mIHRoZW0gY2FuIDEwTWJpdCAqLwogCiAgICAgbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwogCiAgICAgaSA9IGNvbTIwMDIwX2ZvdW5kKGRldiwgMCk7CS8qIGNhbGxzIHJlZ2lzdGVyX25ldGRldiAqLwogICAgIAogICAgIGlmIChpICE9IDApIHsKLQlERUJVRygxLEtFUk5fTk9USUNFICJjb20yMDAyMF9jczogY29tMjAwMjBfZm91bmQoKSBmYWlsZWRcbiIpOworCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZsaW5rLT5kZXYsCisJCSJjb20yMDAyMF9jczogY29tMjAwMjBfZm91bmQoKSBmYWlsZWRcbiIpOwogCWxpbmstPmRldl9ub2RlID0gTlVMTDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKICAgICBzdHJjcHkoaW5mby0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKIAotICAgIERFQlVHKDEsS0VSTl9JTkZPICIlczogcG9ydCAlIzNseCwgaXJxICVkXG4iLAorICAgIGRldl9kYmcoJmxpbmstPmRldixLRVJOX0lORk8gIiVzOiBwb3J0ICUjM2x4LCBpcnEgJWRcbiIsCiAgICAgICAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxKTsKICAgICByZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKLSAgICBERUJVRygxLCJjb20yMDAyMF9jb25maWcgZmFpbGVkLi4uXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJjb20yMDAyMF9jb25maWcgZmFpbGVkLi4uXG4iKTsKICAgICBjb20yMDAyMF9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwogfSAvKiBjb20yMDAyMF9jb25maWcgKi8KQEAgLTM0Miw3ICszMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBjb20yMDAyMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJjb20yMDAyMF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJjb20yMDAyMF9yZWxlYXNlXG4iKTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IDdlMDFmYmQuLjZlM2UxY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtNzIsMTMgKzcyLDYgQEAKIC8qIDA6NEtCKjIgVFggYnVmZmVyICAgZWxzZTo4S0IqMiBUWCBidWZmZXIgKi8KIElOVF9NT0RVTEVfUEFSTShzcmFtX2NvbmZpZywgMCk7CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLUlOVF9NT0RVTEVfUEFSTShwY19kZWJ1ZywgUENNQ0lBX0RFQlVHKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0gRFJWX05BTUUgIi5jICIgRFJWX1ZFUlNJT04gIiAyMDAyLzAzLzIzIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKgpAQCAtMjQ1LDcgKzIzOCw3IEBACiAgICAgbG9jYWxfaW5mb190ICpscDsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0gICAgREVCVUcoMCwgImZtdmoxOHhfYXR0YWNoKClcbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImZtdmoxOHhfYXR0YWNoKClcbiIpOwogCiAgICAgLyogTWFrZSB1cCBhIEZNVkoxOHggc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgKi8KICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobG9jYWxfaW5mb190KSk7CkBAIC0yNjIsMTAgKzI1NSw4IEBACiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OwogCiAgICAgLyogSW50ZXJydXB0IHNldHVwICovCi0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0hBTkRMRV9QUkVTRU5UOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9ICZmam5faW50ZXJydXB0OwotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CkBAIC0yODUsNyArMjc2LDcgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJmbXZqMTh4X2RldGFjaCgweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZm12ajE4eF9kZXRhY2hcbiIpOwogCiAgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0yOTcsOSArMjg4LDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCBtZmNfdHJ5X2lvX3BvcnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgaW50IGksIHJldDsKQEAgLTM0MSwzMyArMzI5LDM4IEBACiAgICAgcmV0dXJuIHJldDsJLyogUmVxdWVzdElPIGZhaWxlZCAqLwogfQogCitzdGF0aWMgaW50IGZtdmoxOHhfaW9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlyZXR1cm4gMDsgLyogc3RyYW5nZSwgYnV0IHRoYXQncyB3aGF0IHRoZSBjb2RlIGRpZCBhbHJlYWR5IGJlZm9yZS4uLiAqLworfQorCiBzdGF0aWMgaW50IGZtdmoxOHhfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICB1X3Nob3J0IGJ1ZlszMl07Ci0gICAgaW50IGksIGxhc3RfZm4gPSAwLCBsYXN0X3JldCA9IDAsIHJldDsKKyAgICBpbnQgaSwgcmV0OwogICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgY2FyZHR5cGVfdCBjYXJkdHlwZTsKICAgICBjaGFyICpjYXJkX25hbWUgPSAidW5rbm93biI7Ci0gICAgdV9jaGFyICpub2RlX2lkOworICAgIHU4ICpidWY7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1X2NoYXIgYnVnZ3lidWZbMzJdOwogCi0gICAgREVCVUcoMCwgImZtdmoxOHhfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJmbXZqMTh4X2NvbmZpZ1xuIik7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAodV9jaGFyICopYnVmOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7Ci0gICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIGlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgeworICAgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgQ0lTVFBMX0ZVTkNFLCAmYnVmKTsKKyAgICBrZnJlZShidWYpOworCisgICAgaWYgKGxlbikgewogCS8qIFllcywgSSBoYXZlIENJU1RQTF9GVU5DRS4gTGV0J3MgY2hlY2sgQ0lTVFBMX01BTkZJRCAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7Ci0JQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSk7Ci0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGZtdmoxOHhfaW9wcm9iZSwgTlVMTCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxlZDsKKwogCXN3aXRjaCAobGluay0+bWFuZl9pZCkgewogCWNhc2UgTUFORklEX1RESzoKIAkgICAgY2FyZHR5cGUgPSBUREs7CkBAIC00MzMsMTcgKzQyNiwyNCBAQAogCiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiAhPSAwKSB7CiAgICAgCWxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQkJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUR8SVJRX0hBTkRMRV9QUkVTRU5UOworCQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAlyZXQgPSBtZmNfdHJ5X2lvX3BvcnQobGluayk7Ci0JaWYgKHJldCAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsKKwlpZiAocmV0ICE9IDApIGdvdG8gZmFpbGVkOwogICAgIH0gZWxzZSBpZiAoY2FyZHR5cGUgPT0gVU5HRVJNQU5OKSB7CiAJcmV0ID0gdW5nZXJtYW5uX3RyeV9pb19wb3J0KGxpbmspOwotCWlmIChyZXQgIT0gMCkgZ290byBjc19mYWlsZWQ7CisJaWYgKHJldCAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICB9IGVsc2UgeyAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCSAgICBpZiAocmV0KQorCQkgICAgZ290byBmYWlsZWQ7CiAgICAgfQotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CisKICAgICBkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIApAQCAtNDc0LDIxICs0NzQsMjEgQEAKICAgICBjYXNlIENPTlRFQzoKICAgICBjYXNlIE5FQzoKICAgICBjYXNlIEtNRToKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwogCWlmIChjYXJkdHlwZSA9PSBNQkgxMDMwNCkgewotCSAgICAvKiBNQkgxMDMwNCdzIENJU19GVU5DRSBpcyBjb3JydXB0ZWQgKi8KLQkgICAgbm9kZV9pZCA9ICYodHVwbGUuVHVwbGVEYXRhWzVdKTsKIAkgICAgY2FyZF9uYW1lID0gIkZNVi1KMTgyIjsKLQl9IGVsc2UgewotCSAgICB3aGlsZSAodHVwbGUuVHVwbGVEYXRhWzBdICE9IENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCApIHsKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0JCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOworCisJICAgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgQ0lTVFBMX0ZVTkNFLCAmYnVmKTsKKwkgICAgaWYgKGxlbiA8IDExKSB7CisJCSAgICBrZnJlZShidWYpOworCQkgICAgZ290byBmYWlsZWQ7CiAJICAgIH0KLQkgICAgbm9kZV9pZCA9ICYodHVwbGUuVHVwbGVEYXRhWzJdKTsKKwkgICAgLyogUmVhZCBNQUNJRCBmcm9tIENJUyAqLworCSAgICBmb3IgKGkgPSA1OyBpIDwgMTE7IGkrKykKKwkJICAgIGRldi0+ZGV2X2FkZHJbaV0gPSBidWZbaV07CisJICAgIGtmcmVlKGJ1Zik7CisJfSBlbHNlIHsKKwkgICAgaWYgKHBjbWNpYV9nZXRfbWFjX2Zyb21fY2lzKGxpbmssIGRldikpCisJCWdvdG8gZmFpbGVkOwogCSAgICBpZiggY2FyZHR5cGUgPT0gVERLICkgewogCQljYXJkX25hbWUgPSAiVERLIExBSy1DRDAyMSI7CiAJICAgIH0gZWxzZSBpZiggY2FyZHR5cGUgPT0gTEE1MDEgKSB7CkBAIC01MDEsOSArNTAxLDYgQEAKIAkJY2FyZF9uYW1lID0gIkMtTkVUKFBDKUMiOwogCSAgICB9CiAJfQotCS8qIFJlYWQgTUFDSUQgZnJvbSBDSVMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCSAgICBkZXYtPmRldl9hZGRyW2ldID0gbm9kZV9pZFtpXTsKIAlicmVhazsKICAgICBjYXNlIFVOR0VSTUFOTjoKIAkvKiBSZWFkIE1BQ0lEIGZyb20gcmVnaXN0ZXIgKi8KQEAgLTUxMywxMiArNTEwLDEyIEBACiAJYnJlYWs7CiAgICAgY2FzZSBYWFgxMDMwNDoKIAkvKiBSZWFkIE1BQ0lEIGZyb20gQnVnZ3kgQ0lTICovCi0JaWYgKGZtdmoxOHhfZ2V0X2h3aW5mbyhsaW5rLCB0dXBsZS5UdXBsZURhdGEpID09IC0xKSB7CisJaWYgKGZtdmoxOHhfZ2V0X2h3aW5mbyhsaW5rLCBidWdneWJ1ZikgPT0gLTEpIHsKIAkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJmbXZqMTh4X2NzOiB1bmFibGUgdG8gcmVhZCBoYXJkd2FyZSBuZXQgYWRkcmVzcy5cbiIpOwogCSAgICBnb3RvIGZhaWxlZDsKIAl9CiAJZm9yIChpID0gMCA7IGkgPCA2OyBpKyspIHsKLQkgICAgZGV2LT5kZXZfYWRkcltpXSA9IHR1cGxlLlR1cGxlRGF0YVtpXTsKKwkgICAgZGV2LT5kZXZfYWRkcltpXSA9IGJ1Z2d5YnVmW2ldOwogCX0KIAljYXJkX25hbWUgPSAiRk1WLUoxODIiOwogCWJyZWFrOwpAQCAtNTMzLDcgKzUzMCw3IEBACiAKICAgICBscC0+Y2FyZHR5cGUgPSBjYXJkdHlwZTsKICAgICBsaW5rLT5kZXZfbm9kZSA9ICZscC0+bm9kZTsKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKyAgICBTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwogCiAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZtdmoxOHhfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CkBAIC01NTEsOSArNTQ4LDYgQEAKIAogICAgIHJldHVybiAwOwogICAgIAotY3NfZmFpbGVkOgotICAgIC8qIEFsbCBDYXJkIFNlcnZpY2VzIGVycm9ycyBlbmQgdXAgaGVyZSAqLwotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBmbXZqMTh4X3JlbGVhc2UobGluayk7CiAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC01NzEsMTYgKzU2NSwxNCBAQAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwotICAgIGlmIChpICE9IDApIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsaW5rLT53aW4pOworICAgIGlmIChpICE9IDApCiAJcmV0dXJuIC0xOwotICAgIH0KIAogICAgIGJhc2UgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAgICAgbWVtLlBhZ2UgPSAwOwogICAgIG1lbS5DYXJkT2Zmc2V0ID0gMDsKLSAgICBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSk7CisgICAgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwogCiAgICAgLyoKICAgICAgKiAgTUJIMTAzMDQgQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEIGZvcm1hdApAQCAtNjA1LDkgKzU5Nyw3IEBACiAgICAgfQogCiAgICAgaW91bm1hcChiYXNlKTsKLSAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgaWYgKGogIT0gMCkKLQljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKKyAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstPndpbik7CiAgICAgcmV0dXJuIChpICE9IDB4MjAwKSA/IDAgOiAtMTsKIAogfSAvKiBmbXZqMTh4X2dldF9od2luZm8gKi8KQEAgLTYyNiwxMSArNjE2LDkgQEAKICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0FNfFdJTl9FTkFCTEU7CiAgICAgcmVxLkJhc2UgPSAwOyByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKLSAgICBpZiAoaSAhPSAwKSB7Ci0JY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpZiAoaSAhPSAwKQogCXJldHVybiAtMTsKLSAgICB9CiAKICAgICBscC0+YmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKICAgICBpZiAobHAtPmJhc2UgPT0gTlVMTCkgewpAQCAtNjQwLDExICs2MjgsMTAgQEAKIAogICAgIG1lbS5QYWdlID0gMDsKICAgICBtZW0uQ2FyZE9mZnNldCA9IDA7Ci0gICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKKyAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwogICAgIGlmIChpICE9IDApIHsKIAlpb3VubWFwKGxwLT5iYXNlKTsKIAlscC0+YmFzZSA9IE5VTEw7Ci0JY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgaSk7CiAJcmV0dXJuIC0xOwogICAgIH0KICAgICAKQEAgLTY3MSwxNSArNjU4LDEzIEBACiAgICAgdV9jaGFyIF9faW9tZW0gKnRtcDsKICAgICBpbnQgajsKIAotICAgIERFQlVHKDAsICJmbXZqMTh4X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImZtdmoxOHhfcmVsZWFzZVxuIik7CiAKICAgICBpZiAobHAtPmJhc2UgIT0gTlVMTCkgewogCXRtcCA9IGxwLT5iYXNlOwogCWxwLT5iYXNlID0gTlVMTDsgICAgLyogc2V0IE5VTEwgYmVmb3JlIGlvdW5tYXAgKi8KIAlpb3VubWFwKHRtcCk7Ci0JaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotCWlmIChqICE9IDApCi0JICAgIGNzX2Vycm9yKGxpbmssIFJlbGVhc2VXaW5kb3csIGopOworCWogPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0+d2luKTsKICAgICB9CiAKICAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CkBAIC03ODgsOCArNzczLDggQEAKICAgICBvdXRiKHR4X3N0YXQsIGlvYWRkciArIFRYX1NUQVRVUyk7CiAgICAgb3V0YihyeF9zdGF0LCBpb2FkZHIgKyBSWF9TVEFUVVMpOwogICAgIAotICAgIERFQlVHKDQsICIlczogaW50ZXJydXB0LCByeF9zdGF0dXMgJTAyeC5cbiIsIGRldi0+bmFtZSwgcnhfc3RhdCk7Ci0gICAgREVCVUcoNCwgIiAgICAgICAgICAgICAgIHR4X3N0YXR1cyAlMDJ4LlxuIiwgdHhfc3RhdCk7CisgICAgcHJfZGVidWcoIiVzOiBpbnRlcnJ1cHQsIHJ4X3N0YXR1cyAlMDJ4LlxuIiwgZGV2LT5uYW1lLCByeF9zdGF0KTsKKyAgICBwcl9kZWJ1ZygiICAgICAgICAgICAgICAgdHhfc3RhdHVzICUwMnguXG4iLCB0eF9zdGF0KTsKICAgICAKICAgICBpZiAocnhfc3RhdCB8fCAoaW5iKGlvYWRkciArIFJYX01PREUpICYgRl9CVUZfRU1QKSA9PSAwKSB7CiAJLyogdGhlcmUgaXMgcGFja2V0KHMpIGluIHJ4IGJ1ZmZlciAqLwpAQCAtODA5LDggKzc5NCw4IEBACiAJfQogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKICAgICB9Ci0gICAgREVCVUcoNCwgIiVzOiBleGl0aW5nIGludGVycnVwdCxcbiIsIGRldi0+bmFtZSk7Ci0gICAgREVCVUcoNCwgIiAgICB0eF9zdGF0dXMgJTAyeCwgcnhfc3RhdHVzICUwMnguXG4iLCB0eF9zdGF0LCByeF9zdGF0KTsKKyAgICBwcl9kZWJ1ZygiJXM6IGV4aXRpbmcgaW50ZXJydXB0LFxuIiwgZGV2LT5uYW1lKTsKKyAgICBwcl9kZWJ1ZygiICAgIHR4X3N0YXR1cyAlMDJ4LCByeF9zdGF0dXMgJTAyeC5cbiIsIHR4X3N0YXQsIHJ4X3N0YXQpOwogCiAgICAgb3V0YihEX1RYX0lOVFIsIGlvYWRkciArIFRYX0lOVFIpOwogICAgIG91dGIoRF9SWF9JTlRSLCBpb2FkZHIgKyBSWF9JTlRSKTsKQEAgLTg4Miw3ICs4NjcsNyBAQAogCSAgICByZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JREVCVUcoNCwgIiVzOiBUcmFuc21pdHRpbmcgYSBwYWNrZXQgb2YgbGVuZ3RoICVsdS5cbiIsCisJcHJfZGVidWcoIiVzOiBUcmFuc21pdHRpbmcgYSBwYWNrZXQgb2YgbGVuZ3RoICVsdS5cbiIsCiAJICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylza2ItPmxlbik7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIApAQCAtOTM3LDcgKzkyMiw3IEBACiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBpOwogCi0gICAgREVCVUcoNCwgImZqbl9yZXNldCglcykgY2FsbGVkLlxuIixkZXYtPm5hbWUpOworICAgIHByX2RlYnVnKCJmam5fcmVzZXQoJXMpIGNhbGxlZC5cbiIsZGV2LT5uYW1lKTsKIAogICAgIC8qIFJlc2V0IGNvbnRyb2xsZXIgKi8KICAgICBpZiggc3JhbV9jb25maWcgPT0gMCApIApAQCAtMTAxNSwxMyArMTAwMCwxMyBAQAogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgYm9ndXNjb3VudCA9IDEwOwkvKiA1IC0+IDEwOiBieSBhZ3kgMTk5NDA5MjIgKi8KIAotICAgIERFQlVHKDQsICIlczogaW4gcnhfcGFja2V0KCksIHJ4X3N0YXR1cyAlMDJ4LlxuIiwKKyAgICBwcl9kZWJ1ZygiJXM6IGluIHJ4X3BhY2tldCgpLCByeF9zdGF0dXMgJTAyeC5cbiIsCiAJICBkZXYtPm5hbWUsIGluYihpb2FkZHIgKyBSWF9TVEFUVVMpKTsKIAogICAgIHdoaWxlICgoaW5iKGlvYWRkciArIFJYX01PREUpICYgRl9CVUZfRU1QKSA9PSAwKSB7CiAJdV9zaG9ydCBzdGF0dXMgPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwogCi0JREVCVUcoNCwgIiVzOiBSeGluZyBwYWNrZXQgbW9kZSAlMDJ4IHN0YXR1cyAlMDR4LlxuIiwKKwlwcl9kZWJ1ZygiJXM6IFJ4aW5nIHBhY2tldCBtb2RlICUwMnggc3RhdHVzICUwNHguXG4iLAogCSAgICAgIGRldi0+bmFtZSwgaW5iKGlvYWRkciArIFJYX01PREUpLCBzdGF0dXMpOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJaWYgKHN0YXR1cyA9PSAwKSB7CkBAIC0xMDYxLDE2ICsxMDQ2LDE0IEBACiAJCSAocGt0X2xlbiArIDEpID4+IDEpOwogCSAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0JICAgIGlmIChwY19kZWJ1ZyA+IDUpIHsKKwkgICAgewogCQlpbnQgaTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSeGVkIHBhY2tldCBvZiBsZW5ndGggJWQ6ICIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOworCQlwcl9kZWJ1ZygiJXM6IFJ4ZWQgcGFja2V0IG9mIGxlbmd0aCAlZDogIiwKKwkJCWRldi0+bmFtZSwgcGt0X2xlbik7CiAJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQotCQkgICAgcHJpbnRrKCIgJTAyeCIsIHNrYi0+ZGF0YVtpXSk7Ci0JCXByaW50aygiLlxuIik7CisJCQlwcl9kZWJ1ZygiICUwMngiLCBza2ItPmRhdGFbaV0pOworCQlwcl9kZWJ1ZygiLlxuIik7CiAJICAgIH0KLSNlbmRpZgogCiAJICAgIG5ldGlmX3J4KHNrYik7CiAJICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMTA5NCw3ICsxMDc3LDcgQEAKIAl9CiAKIAlpZiAoaSA+IDApCi0JICAgIERFQlVHKDUsICIlczogRXhpbnQgUnggcGFja2V0IHdpdGggbW9kZSAlMDJ4IGFmdGVyICIKKwkgICAgcHJfZGVidWcoIiVzOiBFeGludCBSeCBwYWNrZXQgd2l0aCBtb2RlICUwMnggYWZ0ZXIgIgogCQkgICIlZCB0aWNrcy5cbiIsIGRldi0+bmFtZSwgaW5iKGlvYWRkciArIFJYX01PREUpLCBpKTsKICAgICB9CiAqLwpAQCAtMTExMiwyNCArMTA5NSw4IEBACiAJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIlBDTUNJQSAweCVseCIsIGRldi0+YmFzZV9hZGRyKTsKIH0KIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIHUzMiBuZXRkZXZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHBjX2RlYnVnOwotfQotCi1zdGF0aWMgdm9pZCBuZXRkZXZfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKLXsKLQlwY19kZWJ1ZyA9IGxldmVsOwotfQotI2VuZGlmIC8qIFBDTUNJQV9ERUJVRyAqLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAotI2lmZGVmIFBDTUNJQV9ERUJVRwotCS5nZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X2dldF9tc2dsZXZlbCwKLQkuc2V0X21zZ2xldmVsCQk9IG5ldGRldl9zZXRfbXNnbGV2ZWwsCi0jZW5kaWYgLyogUENNQ0lBX0RFQlVHICovCiB9OwogCiBzdGF0aWMgaW50IGZqbl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApewpAQCAtMTE0MSw3ICsxMTA4LDcgQEAKICAgICBzdHJ1Y3QgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLSAgICBERUJVRyg0LCAiZmpuX29wZW4oJyVzJykuXG4iLCBkZXYtPm5hbWUpOworICAgIHByX2RlYnVnKCJmam5fb3BlbignJXMnKS5cbiIsIGRldi0+bmFtZSk7CiAKICAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTExNjcsNyArMTEzNCw3IEBACiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCi0gICAgREVCVUcoNCwgImZqbl9jbG9zZSgnJXMnKS5cbiIsIGRldi0+bmFtZSk7CisgICAgcHJfZGVidWcoImZqbl9jbG9zZSgnJXMnKS5cbiIsIGRldi0+bmFtZSk7CiAKICAgICBscC0+b3Blbl90aW1lID0gMDsKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCmluZGV4IDA2NjE4YWYuLjM3ZjRhNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCkBAIC02OSwxNyArNjksNiBAQAogI2RlZmluZSBQQ01DSUEKICNpbmNsdWRlICIuLi90b2tlbnJpbmcvaWJtdHIuYyIKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLSJpYm10cl9jcy5jIDEuMTAgICAxOTk2LzAxLzA2IDA1OjE5OjAwIChTdGV2ZSBLaXBpc3opXG4iCi0iICAgICAgICAgICAyLjIuNyAgMTk5OS8wNS8wMyAxMjowMDowMCAoTWlrZSBQaGlsbGlwcylcbiIKLSIgICAgICAgICAgIDIuNC4yICAyMDAxLzMwLzI4IE1pZG5pZ2h0IChCdXJ0IFNpbHZlcm1hbilcbiI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xMzAsNiArMTE5LDEyIEBACiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBpYm10cl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKSB7CisJaWJtdHJfZGV2X3QgKmluZm8gPSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKKwlyZXR1cm4gdG9rX2ludGVycnVwdChpcnEsIGRldik7Cit9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIGlibXRyX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCkBAIC0xNDMsNyArMTM4LDcgQEAKICAgICBpYm10cl9kZXZfdCAqaW5mbzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0gICAgREVCVUcoMCwgImlibXRyX2F0dGFjaCgpXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJpYm10cl9hdHRhY2goKVxuIik7CiAKICAgICAvKiBDcmVhdGUgbmV3IHRva2VuLXJpbmcgZGV2aWNlICovCiAgICAgaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNjEsMTQgKzE1NiwxMyBAQAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gNDsKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKLSAgICBsaW5rLT5pcnEuSGFuZGxlciA9ICZ0b2tfaW50ZXJydXB0OworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworICAgIGxpbmstPmlycS5IYW5kbGVyID0gaWJtdHJfaW50ZXJydXB0OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGluZm8tPmRldiA9IGRldjsKKyAgICBpbmZvLT5kZXYgPSBkZXY7CiAKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKIApAQCAtMTkwLDcgKzE4NCw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPmRldjsKICAgICAgc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICBERUJVRygwLCAiaWJtdHJfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJpYm10cl9kZXRhY2hcbiIpOwogICAgIAogICAgIC8qIAogICAgICAqIFdoZW4gdGhlIGNhcmQgcmVtb3ZhbCBpbnRlcnJ1cHQgaGl0cyB0b2tfaW50ZXJydXB0KCksIApAQCAtMjE3LDkgKzIxMSw2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IGlibXRyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpYm10cl9kZXZfdCAqaW5mbyA9IGxpbmstPnByaXY7CkBAIC0yMjcsOSArMjE4LDkgQEAKICAgICBzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB3aW5fcmVxX3QgcmVxOwogICAgIG1lbXJlcV90IG1lbTsKLSAgICBpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IGksIHJldDsKIAotICAgIERFQlVHKDAsICJpYm10cl9jb25maWcoMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlibXRyX2NvbmZpZ1xuIik7CiAKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg2MTsKIApAQCAtMjQxLDExICsyMzIsMTUgQEAKICAgICBpZiAoaSAhPSAwKSB7CiAJLyogQ291bGRuJ3QgZ2V0IDB4QTIwLTB4QTIzLiAgVHJ5IEFMVEVSTkFURSBhdCAweEEyNC0weEEyNy4gKi8KIAlsaW5rLT5pby5CYXNlUG9ydDEgPSAweEEyNDsKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAgICAgfQogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgdGktPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKICAgICB0aS0+Z2xvYmFsX2ludF9lbmFibGU9R0xPQkFMX0lOVF9FTkFCTEUrKChkZXYtPmlycT09OSkgPyAyIDogZGV2LT5pcnEpOwpAQCAtMjU2LDExICsyNTEsMTUgQEAKICAgICByZXEuQmFzZSA9IDA7IAogICAgIHJlcS5TaXplID0gMHgyMDAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDI1MDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxpbmstPndpbik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICBtZW0uQ2FyZE9mZnNldCA9IG1taW9iYXNlOwogICAgIG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOworICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKICAgICB0aS0+bW1pbyA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAogICAgIC8qIEFsbG9jYXRlIHRoZSBTUkFNIG1lbW9yeSB3aW5kb3cgKi8KQEAgLTI2OSwxNyArMjY4LDIzIEBACiAgICAgcmVxLkJhc2UgPSAwOwogICAgIHJlcS5TaXplID0gc3JhbXNpemUgKiAxMDI0OwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDI1MDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZpbmZvLT5zcmFtX3dpbl9oYW5kbGUpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmluZm8tPnNyYW1fd2luX2hhbmRsZSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICBtZW0uQ2FyZE9mZnNldCA9IHNyYW1iYXNlOwogICAgIG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGluZm8tPnNyYW1fd2luX2hhbmRsZSwgJm1lbSkpOworICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgaW5mby0+c3JhbV93aW5faGFuZGxlLCAmbWVtKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIHRpLT5zcmFtX2Jhc2UgPSBtZW0uQ2FyZE9mZnNldCA+PiAxMjsKICAgICB0aS0+c3JhbV92aXJ0ID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgIHRpLT5zcmFtX3BoeXMgPSByZXEuQmFzZTsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICAvKiAgU2V0IHVwIHRoZSBUb2tlbi1SaW5nIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBhbmQKICAgICAgICAgdHVybiBvbiB0aGUgY2FyZC4gIENoZWNrIHRoZSAiTG9jYWwgQXJlYSBOZXR3b3JrIENyZWRpdCBDYXJkCkBAIC0yODcsNyArMjkyLDcgQEAKICAgICBpYm10cl9od19zZXR1cChkZXYsIG1taW9iYXNlKTsKIAogICAgIGxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAogICAgIGkgPSBpYm10cl9wcm9iZV9jYXJkKGRldik7CiAgICAgaWYgKGkgIT0gMCkgewpAQCAtMzA1LDggKzMxMCw2IEBACiAJICAgZGV2LT5kZXZfYWRkcik7CiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgaWJtdHJfcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTMyNSwxMiArMzI4LDEyIEBACiAJaWJtdHJfZGV2X3QgKmluZm8gPSBsaW5rLT5wcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAKLQlERUJVRygwLCAiaWJtdHJfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiaWJtdHJfcmVsZWFzZVxuIik7CiAKIAlpZiAobGluay0+d2luKSB7CiAJCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlpb3VubWFwKHRpLT5tbWlvKTsKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGluZm8tPnNyYW1fd2luX2hhbmRsZSk7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBpbmZvLT5zcmFtX3dpbl9oYW5kbGUpOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggNWVkNjMzOS4uZGFlNWVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMzgxLDEzICszODEsNiBAQAogUHJpdmF0ZSBHbG9iYWwgVmFyaWFibGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBjaGFyIHJjc2lkW10gPQotIm5tY2xhbl9jcy5jLHYgMC4xNiAxOTk1LzA3LzAxIDA2OjQyOjE3IHJwYW8gRXhwIHJwYW8iOwotc3RhdGljIGNoYXIgKnZlcnNpb24gPQotRFJWX05BTUUgIiAiIERSVl9WRVJTSU9OICIgKFJvZ2VyIEMuIFBhbykiOwotI2VuZGlmCi0KIHN0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdPXsKICAgICAiQXV0byIsICIxMGJhc2VUIiwgIkJOQyIsCiB9OwpAQCAtNDA2LDEyICszOTksNiBAQAogLyogMD1hdXRvLCAxPTEwYmFzZVQsIDIgPSAxMGJhc2UyLCBkZWZhdWx0PWF1dG8gKi8KIElOVF9NT0RVTEVfUEFSTShpZl9wb3J0LCAwKTsKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotSU5UX01PRFVMRV9QQVJNKHBjX2RlYnVnLCBQQ01DSUFfREVCVUcpOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGdW5jdGlvbiBQcm90b3R5cGVzCkBAIC00NjIsOCArNDQ5LDcgQEAKICAgICBtYWNlX3ByaXZhdGUgKmxwOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLSAgICBERUJVRygwLCAibm1jbGFuX2F0dGFjaCgpXG4iKTsKLSAgICBERUJVRygxLCAiJXNcbiIsIHJjc2lkKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJubWNsYW5fYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyBldGhlcm5ldCBkZXZpY2UgKi8KICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobWFjZV9wcml2YXRlKSk7CkBAIC00NzcsMTAgKzQ2Myw4IEBACiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMzI7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJm1hY2VfaW50ZXJydXB0OwotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CkBAIC01MDcsNyArNDkxLDcgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJubWNsYW5fZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJubWNsYW5fZGV0YWNoXG4iKTsKIAogICAgIGlmIChsaW5rLT5kZXZfbm9kZSkKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtNjU0LDM3ICs2MzgsNDAgQEAKIAlldGhlcm5ldCBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotICBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IG5tY2xhbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgdHVwbGVfdCB0dXBsZTsKLSAgdV9jaGFyIGJ1Zls2NF07Ci0gIGludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKKyAgdTggKmJ1ZjsKKyAgc2l6ZV90IGxlbjsKKyAgaW50IGksIHJldDsKICAgdW5zaWduZWQgaW50IGlvYWRkcjsKIAotICBERUJVRygwLCAibm1jbGFuX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisgIGRldl9kYmcoJmxpbmstPmRldiwgIm5tY2xhbl9jb25maWdcbiIpOwogCi0gIENTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0gIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisgIGlmIChyZXQpCisJICBnb3RvIGZhaWxlZDsKKyAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICBpZiAocmV0KQorCSAgZ290byBmYWlsZWQ7CisgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworICBpZiAocmV0KQorCSAgZ290byBmYWlsZWQ7CisKICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCiAgIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCiAgIC8qIFJlYWQgdGhlIGV0aGVybmV0IGFkZHJlc3MgZnJvbSB0aGUgQ0lTLiAqLwotICB0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDgwIC8qIENJU1RQTF9DRlRBQkxFX0VOVFJZX01JU0MgKi87Ci0gIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLSAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7Ci0gIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotICBtZW1jcHkoZGV2LT5kZXZfYWRkciwgdHVwbGUuVHVwbGVEYXRhLCBFVEhFUl9BRERSX0xFTik7CisgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgMHg4MCwgJmJ1Zik7CisgIGlmICghYnVmIHx8IGxlbiA8IEVUSEVSX0FERFJfTEVOKSB7CisJICBrZnJlZShidWYpOworCSAgZ290byBmYWlsZWQ7CisgIH0KKyAgbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJ1ZiwgRVRIRVJfQUREUl9MRU4pOworICBrZnJlZShidWYpOwogCiAgIC8qIFZlcmlmeSBjb25maWd1cmF0aW9uIGJ5IHJlYWRpbmcgdGhlIE1BQ0UgSUQuICovCiAgIHsKQEAgLTY5Myw3ICs2ODAsNyBAQAogICAgIHNpZ1swXSA9IG1hY2VfcmVhZChscCwgaW9hZGRyLCBNQUNFX0NISVBJREwpOwogICAgIHNpZ1sxXSA9IG1hY2VfcmVhZChscCwgaW9hZGRyLCBNQUNFX0NISVBJREgpOwogICAgIGlmICgoc2lnWzBdID09IDB4NDApICYmICgoc2lnWzFdICYgMHgwRikgPT0gMHgwOSkpIHsKLSAgICAgIERFQlVHKDAsICJubWNsYW5fY3MgY29uZmlndXJlZDogbWFjZSBpZD0leCAleFxuIiwKKyAgICAgIGRldl9kYmcoJmxpbmstPmRldiwgIm5tY2xhbl9jcyBjb25maWd1cmVkOiBtYWNlIGlkPSV4ICV4XG4iLAogCSAgICBzaWdbMF0sIHNpZ1sxXSk7CiAgICAgfSBlbHNlIHsKICAgICAgIHByaW50ayhLRVJOX05PVElDRSAibm1jbGFuX2NzOiBtYWNlIGlkIG5vdCBmb3VuZDogJXggJXggc2hvdWxkIgpAQCAtNzEyLDcgKzY5OSw3IEBACiAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJubWNsYW5fY3M6IGludmFsaWQgaWZfcG9ydCByZXF1ZXN0ZWRcbiIpOwogCiAgIGxpbmstPmRldl9ub2RlID0gJmxwLT5ub2RlOwotICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKyAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAogICBpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgIGlmIChpICE9IDApIHsKQEAgLTcyOSw4ICs3MTYsNiBAQAogCSBkZXYtPmRldl9hZGRyKTsKICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJbm1jbGFuX3JlbGVhc2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC03NDQsNyArNzI5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyB2b2lkIG5tY2xhbl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJubWNsYW5fcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3JlbGVhc2VcbiIpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0KIApAQCAtNzk1LDcgKzc4MCw3IEBACiAgIC8qIFJlc2V0IFhpbGlueCAqLwogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotICBERUJVRygxLCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHglbFgsIHJlc2V0dGluZy4uLlxuIiwKKyAgZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHglbFgsIHJlc2V0dGluZy4uLlxuIiwKIAlPcmlnQ29yVmFsdWUpOwogICByZWcuVmFsdWUgPSBDT1JfU09GVF9SRVNFVDsKICAgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwpAQCAtODcyLDcgKzg1Nyw3IEBACiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5wX2RldjsKIAotICBERUJVRygyLCAiJXM6IHNodXR0aW5nIGRvd24gZXRoZXJjYXJkLlxuIiwgZGV2LT5uYW1lKTsKKyAgZGV2X2RiZygmbGluay0+ZGV2LCAiJXM6IHNodXR0aW5nIGRvd24gZXRoZXJjYXJkLlxuIiwgZGV2LT5uYW1lKTsKIAogICAvKiBNYXNrIG9mZiBhbGwgaW50ZXJydXB0cyBmcm9tIHRoZSBNQUNFIGNoaXAuICovCiAgIG91dGIoMHhGRiwgaW9hZGRyICsgQU0yMTUwX01BQ0VfQkFTRSArIE1BQ0VfSU1SKTsKQEAgLTg5MSwyNCArODc2LDggQEAKIAlzcHJpbnRmKGluZm8tPmJ1c19pbmZvLCAiUENNQ0lBIDB4JWx4IiwgZGV2LT5iYXNlX2FkZHIpOwogfQogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgdTMyIG5ldGRldl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gcGNfZGVidWc7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ldGRldl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotCXBjX2RlYnVnID0gbGV2ZWw7Ci19Ci0jZW5kaWYgLyogUENNQ0lBX0RFQlVHICovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0JLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAotCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKLSNlbmRpZiAvKiBQQ01DSUFfREVCVUcgKi8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk0Niw3ICs5MTUsNyBAQAogCiAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotICBERUJVRygzLCAiJXM6IG1hY2Vfc3RhcnRfeG1pdChsZW5ndGggPSAlbGQpIGNhbGxlZC5cbiIsCisgIHByX2RlYnVnKCIlczogbWFjZV9zdGFydF94bWl0KGxlbmd0aCA9ICVsZCkgY2FsbGVkLlxuIiwKIAlkZXYtPm5hbWUsIChsb25nKXNrYi0+bGVuKTsKIAogI2lmICghVFhfSU5URVJSVVBUQUJMRSkKQEAgLTEwMDgsNyArOTc3LDcgQEAKICAgaW50IEludHJDbnQgPSBNQUNFX01BWF9JUl9JVEVSQVRJT05TOwogCiAgIGlmIChkZXYgPT0gTlVMTCkgewotICAgIERFQlVHKDIsICJtYWNlX2ludGVycnVwdCgpOiBpcnEgMHglWCBmb3IgdW5rbm93biBkZXZpY2UuXG4iLAorICAgIHByX2RlYnVnKCJtYWNlX2ludGVycnVwdCgpOiBpcnEgMHglWCBmb3IgdW5rbm93biBkZXZpY2UuXG4iLAogCSAgaXJxKTsKICAgICByZXR1cm4gSVJRX05PTkU7CiAgIH0KQEAgLTEwMzEsNyArMTAwMCw3IEBACiAgIH0KIAogICBpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKLSAgICBERUJVRygyLCAiJXM6IGludGVycnVwdCBmcm9tIGRlYWQgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKyAgICBwcl9kZWJ1ZygiJXM6IGludGVycnVwdCBmcm9tIGRlYWQgY2FyZFxuIiwgZGV2LT5uYW1lKTsKICAgICByZXR1cm4gSVJRX05PTkU7CiAgIH0KIApAQCAtMTAzOSw3ICsxMDA4LDcgQEAKICAgICAvKiBXQVJOSU5HOiBNQUNFX0lSIGlzIGEgUkVBRC9DTEVBUiBwb3J0ISAqLwogICAgIHN0YXR1cyA9IGluYihpb2FkZHIgKyBBTTIxNTBfTUFDRV9CQVNFICsgTUFDRV9JUik7CiAKLSAgICBERUJVRygzLCAibWFjZV9pbnRlcnJ1cHQ6IGlycSAweCVYIHN0YXR1cyAweCVYLlxuIiwgaXJxLCBzdGF0dXMpOworICAgIHByX2RlYnVnKCJtYWNlX2ludGVycnVwdDogaXJxIDB4JVggc3RhdHVzIDB4JVguXG4iLCBpcnEsIHN0YXR1cyk7CiAKICAgICBpZiAoc3RhdHVzICYgTUFDRV9JUl9SQ1ZJTlQpIHsKICAgICAgIG1hY2VfcngoZGV2LCBNQUNFX01BWF9SWF9JVEVSQVRJT05TKTsKQEAgLTExNTgsNyArMTEyNyw3IEBACiAgICkgewogICAgIHJ4X3N0YXR1cyA9IGludyhpb2FkZHIgKyBBTTIxNTBfUkNWKTsKIAotICAgIERFQlVHKDMsICIlczogaW4gbWFjZV9yeCgpLCBmcmFtZWNudCAweCVYLCByeF9zdGF0dXMiCisgICAgcHJfZGVidWcoIiVzOiBpbiBtYWNlX3J4KCksIGZyYW1lY250IDB4JVgsIHJ4X3N0YXR1cyIKIAkgICIgMHglWC5cbiIsIGRldi0+bmFtZSwgcnhfZnJhbWVjbnQsIHJ4X3N0YXR1cyk7CiAKICAgICBpZiAocnhfc3RhdHVzICYgTUFDRV9SQ1ZGU19SQ1ZTVFMpIHsgLyogRXJyb3IsIHVwZGF0ZSBzdGF0cy4gKi8KQEAgLTExODUsNyArMTE1NCw3IEBACiAgICAgICBscC0+bWFjZV9zdGF0cy5yZnNfcmN2Y2MgKz0gaW5iKGlvYWRkciArIEFNMjE1MF9SQ1YpOwogICAgICAgICAvKiByY3YgY29sbGlzaW9uIGNvdW50ICovCiAKLSAgICAgIERFQlVHKDMsICIgICAgcmVjZWl2aW5nIHBhY2tldCBzaXplIDB4JVggcnhfc3RhdHVzIgorICAgICAgcHJfZGVidWcoIiAgICByZWNlaXZpbmcgcGFja2V0IHNpemUgMHglWCByeF9zdGF0dXMiCiAJICAgICIgMHglWC5cbiIsIHBrdF9sZW4sIHJ4X3N0YXR1cyk7CiAKICAgICAgIHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbisyKTsKQEAgLTEyMDQsNyArMTE3Myw3IEBACiAJb3V0YigweEZGLCBpb2FkZHIgKyBBTTIxNTBfUkNWX05FWFQpOyAvKiBza2lwIHRvIG5leHQgZnJhbWUgKi8KIAljb250aW51ZTsKICAgICAgIH0gZWxzZSB7Ci0JREVCVUcoMSwgIiVzOiBjb3VsZG4ndCBhbGxvY2F0ZSBhIHNrX2J1ZmYgb2Ygc2l6ZSIKKwlwcl9kZWJ1ZygiJXM6IGNvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiBzaXplIgogCSAgICAgICIgJWQuXG4iLCBkZXYtPm5hbWUsIHBrdF9sZW4pOwogCWxwLT5saW51eF9zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICB9CkBAIC0xMjIwLDI4ICsxMTg5LDI4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgdm9pZCBwcl9saW51eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHN0YXRzKQogewotICBERUJVRygyLCAicHJfbGludXhfc3RhdHNcbiIpOwotICBERUJVRygyLCAiIHJ4X3BhY2tldHM9JS03bGQgICAgICAgIHR4X3BhY2tldHM9JWxkXG4iLAorICBwcl9kZWJ1ZygicHJfbGludXhfc3RhdHNcbiIpOworICBwcl9kZWJ1ZygiIHJ4X3BhY2tldHM9JS03bGQgICAgICAgIHR4X3BhY2tldHM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+cnhfcGFja2V0cywgKGxvbmcpcHN0YXRzLT50eF9wYWNrZXRzKTsKLSAgREVCVUcoMiwgIiByeF9lcnJvcnM9JS03bGQgICAgICAgICB0eF9lcnJvcnM9JWxkXG4iLAorICBwcl9kZWJ1ZygiIHJ4X2Vycm9ycz0lLTdsZCAgICAgICAgIHR4X2Vycm9ycz0lbGRcbiIsCiAJKGxvbmcpcHN0YXRzLT5yeF9lcnJvcnMsIChsb25nKXBzdGF0cy0+dHhfZXJyb3JzKTsKLSAgREVCVUcoMiwgIiByeF9kcm9wcGVkPSUtN2xkICAgICAgICB0eF9kcm9wcGVkPSVsZFxuIiwKKyAgcHJfZGVidWcoIiByeF9kcm9wcGVkPSUtN2xkICAgICAgICB0eF9kcm9wcGVkPSVsZFxuIiwKIAkobG9uZylwc3RhdHMtPnJ4X2Ryb3BwZWQsIChsb25nKXBzdGF0cy0+dHhfZHJvcHBlZCk7Ci0gIERFQlVHKDIsICIgbXVsdGljYXN0PSUtN2xkICAgICAgICAgY29sbGlzaW9ucz0lbGRcbiIsCisgIHByX2RlYnVnKCIgbXVsdGljYXN0PSUtN2xkICAgICAgICAgY29sbGlzaW9ucz0lbGRcbiIsCiAJKGxvbmcpcHN0YXRzLT5tdWx0aWNhc3QsIChsb25nKXBzdGF0cy0+Y29sbGlzaW9ucyk7CiAKLSAgREVCVUcoMiwgIiByeF9sZW5ndGhfZXJyb3JzPSUtN2xkICByeF9vdmVyX2Vycm9ycz0lbGRcbiIsCisgIHByX2RlYnVnKCIgcnhfbGVuZ3RoX2Vycm9ycz0lLTdsZCAgcnhfb3Zlcl9lcnJvcnM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycywgKGxvbmcpcHN0YXRzLT5yeF9vdmVyX2Vycm9ycyk7Ci0gIERFQlVHKDIsICIgcnhfY3JjX2Vycm9ycz0lLTdsZCAgICAgcnhfZnJhbWVfZXJyb3JzPSVsZFxuIiwKKyAgcHJfZGVidWcoIiByeF9jcmNfZXJyb3JzPSUtN2xkICAgICByeF9mcmFtZV9lcnJvcnM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+cnhfY3JjX2Vycm9ycywgKGxvbmcpcHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMpOwotICBERUJVRygyLCAiIHJ4X2ZpZm9fZXJyb3JzPSUtN2xkICAgIHJ4X21pc3NlZF9lcnJvcnM9JWxkXG4iLAorICBwcl9kZWJ1ZygiIHJ4X2ZpZm9fZXJyb3JzPSUtN2xkICAgIHJ4X21pc3NlZF9lcnJvcnM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+cnhfZmlmb19lcnJvcnMsIChsb25nKXBzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyk7CiAKLSAgREVCVUcoMiwgIiB0eF9hYm9ydGVkX2Vycm9ycz0lLTdsZCB0eF9jYXJyaWVyX2Vycm9ycz0lbGRcbiIsCisgIHByX2RlYnVnKCIgdHhfYWJvcnRlZF9lcnJvcnM9JS03bGQgdHhfY2Fycmllcl9lcnJvcnM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMsIChsb25nKXBzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMpOwotICBERUJVRygyLCAiIHR4X2ZpZm9fZXJyb3JzPSUtN2xkICAgIHR4X2hlYXJ0YmVhdF9lcnJvcnM9JWxkXG4iLAorICBwcl9kZWJ1ZygiIHR4X2ZpZm9fZXJyb3JzPSUtN2xkICAgIHR4X2hlYXJ0YmVhdF9lcnJvcnM9JWxkXG4iLAogCShsb25nKXBzdGF0cy0+dHhfZmlmb19lcnJvcnMsIChsb25nKXBzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyk7Ci0gIERFQlVHKDIsICIgdHhfd2luZG93X2Vycm9ycz0lbGRcbiIsCisgIHByX2RlYnVnKCIgdHhfd2luZG93X2Vycm9ycz0lbGRcbiIsCiAJKGxvbmcpcHN0YXRzLT50eF93aW5kb3dfZXJyb3JzKTsKIH0gLyogcHJfbGludXhfc3RhdHMgKi8KIApAQCAtMTI1MCw0OCArMTIxOSw0OCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIHZvaWQgcHJfbWFjZV9zdGF0cyhtYWNlX3N0YXRpc3RpY3MgKnBzdGF0cykKIHsKLSAgREVCVUcoMiwgInByX21hY2Vfc3RhdHNcbiIpOworICBwcl9kZWJ1ZygicHJfbWFjZV9zdGF0c1xuIik7CiAKLSAgREVCVUcoMiwgIiB4bXRzdj0lLTdkICAgICAgICAgICAgIHVmbG89JWRcbiIsCisgIHByX2RlYnVnKCIgeG10c3Y9JS03ZCAgICAgICAgICAgICB1ZmxvPSVkXG4iLAogCXBzdGF0cy0+eG10c3YsIHBzdGF0cy0+dWZsbyk7Ci0gIERFQlVHKDIsICIgbGNvbD0lLTdkICAgICAgICAgICAgICBtb3JlPSVkXG4iLAorICBwcl9kZWJ1ZygiIGxjb2w9JS03ZCAgICAgICAgICAgICAgbW9yZT0lZFxuIiwKIAlwc3RhdHMtPmxjb2wsIHBzdGF0cy0+bW9yZSk7Ci0gIERFQlVHKDIsICIgb25lPSUtN2QgICAgICAgICAgICAgICBkZWZlcj0lZFxuIiwKKyAgcHJfZGVidWcoIiBvbmU9JS03ZCAgICAgICAgICAgICAgIGRlZmVyPSVkXG4iLAogCXBzdGF0cy0+b25lLCBwc3RhdHMtPmRlZmVyKTsKLSAgREVCVUcoMiwgIiBsY2FyPSUtN2QgICAgICAgICAgICAgIHJ0cnk9JWRcbiIsCisgIHByX2RlYnVnKCIgbGNhcj0lLTdkICAgICAgICAgICAgICBydHJ5PSVkXG4iLAogCXBzdGF0cy0+bGNhciwgcHN0YXRzLT5ydHJ5KTsKIAogICAvKiBNQUNFX1hNVFJDICovCi0gIERFQlVHKDIsICIgZXhkZWY9JS03ZCAgICAgICAgICAgICB4bXRyYz0lZFxuIiwKKyAgcHJfZGVidWcoIiBleGRlZj0lLTdkICAgICAgICAgICAgIHhtdHJjPSVkXG4iLAogCXBzdGF0cy0+ZXhkZWYsIHBzdGF0cy0+eG10cmMpOwogCiAgIC8qIFJGUzEtLVJlY2VpdmUgU3RhdHVzIChSQ1ZTVFMpICovCi0gIERFQlVHKDIsICIgb2Zsbz0lLTdkICAgICAgICAgICAgICBjbHNuPSVkXG4iLAorICBwcl9kZWJ1ZygiIG9mbG89JS03ZCAgICAgICAgICAgICAgY2xzbj0lZFxuIiwKIAlwc3RhdHMtPm9mbG8sIHBzdGF0cy0+Y2xzbik7Ci0gIERFQlVHKDIsICIgZnJhbT0lLTdkICAgICAgICAgICAgICBmY3M9JWRcbiIsCisgIHByX2RlYnVnKCIgZnJhbT0lLTdkICAgICAgICAgICAgICBmY3M9JWRcbiIsCiAJcHN0YXRzLT5mcmFtLCBwc3RhdHMtPmZjcyk7CiAKICAgLyogUkZTMi0tUnVudCBQYWNrZXQgQ291bnQgKFJOVFBDKSAqLwogICAvKiBSRlMzLS1SZWNlaXZlIENvbGxpc2lvbiBDb3VudCAoUkNWQ0MpICovCi0gIERFQlVHKDIsICIgcmZzX3JudHBjPSUtN2QgICAgICAgICByZnNfcmN2Y2M9JWRcbiIsCisgIHByX2RlYnVnKCIgcmZzX3JudHBjPSUtN2QgICAgICAgICByZnNfcmN2Y2M9JWRcbiIsCiAJcHN0YXRzLT5yZnNfcm50cGMsIHBzdGF0cy0+cmZzX3JjdmNjKTsKIAogICAvKiBNQUNFX0lSICovCi0gIERFQlVHKDIsICIgamFiPSUtN2QgICAgICAgICAgICAgICBiYWJsPSVkXG4iLAorICBwcl9kZWJ1ZygiIGphYj0lLTdkICAgICAgICAgICAgICAgYmFibD0lZFxuIiwKIAlwc3RhdHMtPmphYiwgcHN0YXRzLT5iYWJsKTsKLSAgREVCVUcoMiwgIiBjZXJyPSUtN2QgICAgICAgICAgICAgIHJjdmNjbz0lZFxuIiwKKyAgcHJfZGVidWcoIiBjZXJyPSUtN2QgICAgICAgICAgICAgIHJjdmNjbz0lZFxuIiwKIAlwc3RhdHMtPmNlcnIsIHBzdGF0cy0+cmN2Y2NvKTsKLSAgREVCVUcoMiwgIiBybnRwY289JS03ZCAgICAgICAgICAgIG1wY289JWRcbiIsCisgIHByX2RlYnVnKCIgcm50cGNvPSUtN2QgICAgICAgICAgICBtcGNvPSVkXG4iLAogCXBzdGF0cy0+cm50cGNvLCBwc3RhdHMtPm1wY28pOwogCiAgIC8qIE1BQ0VfTVBDICovCi0gIERFQlVHKDIsICIgbXBjPSVkXG4iLCBwc3RhdHMtPm1wYyk7CisgIHByX2RlYnVnKCIgbXBjPSVkXG4iLCBwc3RhdHMtPm1wYyk7CiAKICAgLyogTUFDRV9STlRQQyAqLwotICBERUJVRygyLCAiIHJudHBjPSVkXG4iLCBwc3RhdHMtPnJudHBjKTsKKyAgcHJfZGVidWcoIiBybnRwYz0lZFxuIiwgcHN0YXRzLT5ybnRwYyk7CiAKICAgLyogTUFDRV9SQ1ZDQyAqLwotICBERUJVRygyLCAiIHJjdmNjPSVkXG4iLCBwc3RhdHMtPnJjdmNjKTsKKyAgcHJfZGVidWcoIiByY3ZjYz0lZFxuIiwgcHN0YXRzLT5yY3ZjYyk7CiAKIH0gLyogcHJfbWFjZV9zdGF0cyAqLwogCkBAIC0xMzYwLDcgKzEzMjksNyBAQAogCiAgIHVwZGF0ZV9zdGF0cyhkZXYtPmJhc2VfYWRkciwgZGV2KTsKIAotICBERUJVRygxLCAiJXM6IHVwZGF0aW5nIHRoZSBzdGF0aXN0aWNzLlxuIiwgZGV2LT5uYW1lKTsKKyAgcHJfZGVidWcoIiVzOiB1cGRhdGluZyB0aGUgc3RhdGlzdGljcy5cbiIsIGRldi0+bmFtZSk7CiAgIHByX2xpbnV4X3N0YXRzKCZscC0+bGludXhfc3RhdHMpOwogICBwcl9tYWNlX3N0YXRzKCZscC0+bWFjZV9zdGF0cyk7CiAKQEAgLTE0MjcsNyArMTM5Niw3IEBACiAgIGxhZHJmW2J5dGVdIHw9ICgxIDw8IChoYXNoY29kZSAmIDcpKTsKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwotICBpZiAocGNfZGVidWcgPiAyKQorICBpZiAoMCkKICAgICBwcmludGsoS0VSTl9ERUJVRyAiICAgIGFkciA9JXBNXG4iLCBhZHIpOwogICBwcmludGsoS0VSTl9ERUJVRyAiICAgIGhhc2hjb2RlID0gJWQoZGVjaW1hbCksIGxhZHJmWzA6NjNdID0iLCBoYXNoY29kZSk7CiAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCkBAIC0xNDU0LDEyICsxNDIzLDEyIEBACiAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgaW50IGk7CiAKLSAgREVCVUcoMiwgIiVzOiByZXN0b3JpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLAorICBwcl9kZWJ1ZygiJXM6IHJlc3RvcmluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCiAJZGV2LT5uYW1lLCBudW1fYWRkcnMpOwogCiAgIGlmIChudW1fYWRkcnMgPiAwKSB7CiAKLSAgICBERUJVRygxLCAiQXR0ZW1wdCB0byByZXN0b3JlIG11bHRpY2FzdCBsaXN0IGRldGVjdGVkLlxuIik7CisgICAgcHJfZGVidWcoIkF0dGVtcHQgdG8gcmVzdG9yZSBtdWx0aWNhc3QgbGlzdCBkZXRlY3RlZC5cbiIpOwogCiAgICAgbWFjZV93cml0ZShscCwgaW9hZGRyLCBNQUNFX0lBQywgTUFDRV9JQUNfQUREUkNIRyB8IE1BQ0VfSUFDX0xPR0FERFIpOwogICAgIC8qIFBvbGwgQUREUkNIRyBiaXQgKi8KQEAgLTE1MTEsMTEgKzE0ODAsMTEgQEAKICAgc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CiAKICNpZmRlZiBQQ01DSUFfREVCVUcKLSAgaWYgKHBjX2RlYnVnID4gMSkgeworICB7CiAgICAgc3RhdGljIGludCBvbGQ7CiAgICAgaWYgKGRldi0+bWNfY291bnQgIT0gb2xkKSB7CiAgICAgICBvbGQgPSBkZXYtPm1jX2NvdW50OwotICAgICAgREVCVUcoMCwgIiVzOiBzZXR0aW5nIFJ4IG1vZGUgdG8gJWQgYWRkcmVzc2VzLlxuIiwKKyAgICAgIHByX2RlYnVnKCIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCiAJICAgIGRldi0+bmFtZSwgb2xkKTsKICAgICB9CiAgIH0KQEAgLTE1NDYsNyArMTUxNSw3IEBACiAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgbWFjZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgREVCVUcoMiwgIiVzOiByZXN0b3JpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLCBkZXYtPm5hbWUsCisgIHByX2RlYnVnKCIlczogcmVzdG9yaW5nIFJ4IG1vZGUgdG8gJWQgYWRkcmVzc2VzLlxuIiwgZGV2LT5uYW1lLAogCWxwLT5tdWx0aWNhc3RfbnVtX2FkZHJzKTsKIAogICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC0xNTY3LDExICsxNTM2LDExIEBACiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gIGlmIChwY19kZWJ1ZyA+IDEpIHsKKyAgewogICAgIHN0YXRpYyBpbnQgb2xkOwogICAgIGlmIChkZXYtPm1jX2NvdW50ICE9IG9sZCkgewogICAgICAgb2xkID0gZGV2LT5tY19jb3VudDsKLSAgICAgIERFQlVHKDAsICIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCisgICAgICBwcl9kZWJ1ZygiJXM6IHNldHRpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLAogCSAgICBkZXYtPm5hbWUsIG9sZCk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGJkMzQ0N2YuLmNiZTQ2MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC03MSwxNSArNzEsNiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqaWZfbmFtZXNbXSA9IHsgImF1dG8iLCAiMTBiYXNlVCIsICIxMGJhc2UyIn07CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0icGNuZXRfY3MuYyAxLjE1MyAyMDAzLzExLzA5IDE4OjUzOjA5IChEYXZpZCBIaW5kcykiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMjY1LDcgKzI1Niw3IEBACiAgICAgcGNuZXRfZGV2X3QgKmluZm87CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotICAgIERFQlVHKDAsICJwY25ldF9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAicGNuZXRfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQ3JlYXRlIG5ldyBldGhlcm5ldCBkZXZpY2UgKi8KICAgICBkZXYgPSBfX2FsbG9jX2VpX25ldGRldihzaXplb2YocGNuZXRfZGV2X3QpKTsKQEAgLTI3NSw3ICsyNjYsNiBAQAogICAgIGxpbmstPnByaXYgPSBkZXY7CiAKICAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0yOTcsNyArMjg3LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCURFQlVHKDAsICJwY25ldF9kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInBjbmV0X2RldGFjaFxuIik7CiAKIAlpZiAobGluay0+ZGV2X25vZGUpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0zMjYsMTcgKzMxNiwxNSBAQAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwotICAgIGlmIChpICE9IDApIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsaW5rLT53aW4pOworICAgIGlmIChpICE9IDApCiAJcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgdmlydCA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKICAgICBtZW0uUGFnZSA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IE5SX0lORk87IGkrKykgewogCW1lbS5DYXJkT2Zmc2V0ID0gaHdfaW5mb1tpXS5vZmZzZXQgJiB+KHJlcS5TaXplLTEpOwotCXBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKKwlwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CiAJYmFzZSA9ICZ2aXJ0W2h3X2luZm9baV0ub2Zmc2V0ICYgKHJlcS5TaXplLTEpXTsKIAlpZiAoKHJlYWRiKGJhc2UrMCkgPT0gaHdfaW5mb1tpXS5hMCkgJiYKIAkgICAgKHJlYWRiKGJhc2UrMikgPT0gaHdfaW5mb1tpXS5hMSkgJiYKQEAgLTM0OCw5ICszMzYsNyBAQAogICAgIH0KIAogICAgIGlvdW5tYXAodmlydCk7Ci0gICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmIChqICE9IDApCi0JY3NfZXJyb3IobGluaywgUmVsZWFzZVdpbmRvdywgaik7CisgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLT53aW4pOwogICAgIHJldHVybiAoaSA8IE5SX0lORk8pID8gaHdfaW5mbytpIDogTlVMTDsKIH0gLyogZ2V0X2h3aW5mbyAqLwogCkBAIC00OTUsOSArNDgxLDYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwpAQCAtNTY3LDE5ICs1NTAsMTkgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm4sIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7CisgICAgaW50IHJldCwgc3RhcnRfcGcsIHN0b3BfcGcsIGNtX29mZnNldDsKICAgICBpbnQgaGFzX3NobWVtID0gMDsKICAgICBod19pbmZvX3QgKmxvY2FsX2h3X2luZm87CiAKLSAgICBERUJVRygwLCAicGNuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJwY25ldF9jb25maWdcbiIpOwogCi0gICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcGNuZXRfY29uZmNoZWNrLCAmaGFzX3NobWVtKTsKLSAgICBpZiAobGFzdF9yZXQpIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKyAgICByZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcGNuZXRfY29uZmNoZWNrLCAmaGFzX3NobWVtKTsKKyAgICBpZiAocmV0KQogCWdvdG8gZmFpbGVkOwotICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSB7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CkBAIC01ODksNyArNTcyLDkgQEAKIAkobGluay0+Y2FyZF9pZCA9PSBQUk9ESURfSUJNX0hPTUVfQU5EX0FXQVkpKQogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggfD0gMHgxMDsKIAotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAgICAgaWYgKGluZm8tPmZsYWdzICYgSEFTX01JU0NfUkVHKSB7CkBAIC02NjAsNyArNjQ1LDcgQEAKIAltaWlfcGh5X3Byb2JlKGRldik7CiAKICAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX05PVElDRSAicGNuZXRfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CkBAIC02ODcsOCArNjcyLDYgQEAKICAgICBwcmludGsoIiBod19hZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgcGNuZXRfcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTcwNiw3ICs2ODksNyBAQAogewogCXBjbmV0X2Rldl90ICppbmZvID0gUFJJVihsaW5rLT5wcml2KTsKIAotCURFQlVHKDAsICJwY25ldF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJwY25ldF9yZWxlYXNlXG4iKTsKIAogCWlmIChpbmZvLT5mbGFncyAmIFVTRV9TSE1FTSkKIAkJaW91bm1hcChpbmZvLT5iYXNlKTsKQEAgLTk2MCw3ICs5NDMsNyBAQAogCXBoeWlkID0gdG1wIDw8IDE2OwogCXBoeWlkIHw9IG1kaW9fcmVhZChtaWlfYWRkciwgaSwgTUlJX1BIWUlEX1JFRzIpOwogCXBoeWlkICY9IE1JSV9QSFlJRF9SRVZfTUFTSzsKLQlERUJVRygwLCAiJXM6IE1JSSBhdCAlZCBpcyAweCUwOHhcbiIsIGRldi0+bmFtZSwgaSwgcGh5aWQpOworCXByX2RlYnVnKCIlczogTUlJIGF0ICVkIGlzIDB4JTA4eFxuIiwgZGV2LT5uYW1lLCBpLCBwaHlpZCk7CiAJaWYgKHBoeWlkID09IEFNNzlDOVhYX0hPTUVfUEhZKSB7CiAJICAgIGluZm8tPnBuYV9waHkgPSBpOwogCX0gZWxzZSBpZiAocGh5aWQgIT0gQU03OUM5WFhfRVRIX1BIWSkgewpAQCAtOTc2LDcgKzk1OSw3IEBACiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpbmZvLT5wX2RldjsKICAgICB1bnNpZ25lZCBpbnQgbmljX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIERFQlVHKDIsICJwY25ldF9vcGVuKCclcycpXG4iLCBkZXYtPm5hbWUpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgInBjbmV0X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKICAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwMDgsNyArOTkxLDcgQEAKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGluZm8tPnBfZGV2OwogCi0gICAgREVCVUcoMiwgInBjbmV0X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgInBjbmV0X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCiAgICAgZWlfY2xvc2UoZGV2KTsKICAgICBmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKQEAgLTEyNTEsMTAgKzEyMzQsOCBAQAogICAgIGludCB4ZmVyX2NvdW50ID0gY291bnQ7CiAgICAgY2hhciAqYnVmID0gc2tiLT5kYXRhOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCiAgICAgaWYgKChlaV9kZWJ1ZyA+IDQpICYmIChjb3VudCAhPSA0KSkKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFtiaT0lZF1cbiIsIGRldi0+bmFtZSwgY291bnQrNCk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiJXM6IFtiaT0lZF1cbiIsIGRldi0+bmFtZSwgY291bnQrNCk7CiAgICAgaWYgKGVpX3N0YXR1cy5kbWFpbmcpIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBETUFpbmcgY29uZmxpY3QgaW4gZG1hX2Jsb2NrX2lucHV0LiIKIAkgICAgICAgIltETUFzdGF0OiUxeF1baXJxbG9jazolMXhdXG4iLApAQCAtMTQ5NSw3ICsxNDc2LDcgQEAKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKICAgICB3aW5fcmVxX3QgcmVxOwogICAgIG1lbXJlcV90IG1lbTsKLSAgICBpbnQgaSwgd2luZG93X3NpemUsIG9mZnNldCwgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IGksIHdpbmRvd19zaXplLCBvZmZzZXQsIHJldDsKIAogICAgIHdpbmRvd19zaXplID0gKHN0b3BfcGcgLSBzdGFydF9wZykgPDwgODsKICAgICBpZiAod2luZG93X3NpemUgPiAzMiAqIDEwMjQpCkBAIC0xNTA5LDEzICsxNDkwLDE3IEBACiAgICAgcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX1VTRV9XQUlUOwogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSB3aW5kb3dfc2l6ZTsKICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsaW5rLT53aW4pOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgbWVtLkNhcmRPZmZzZXQgPSAoc3RhcnRfcGcgPDwgOCkgKyBjbV9vZmZzZXQ7CiAgICAgb2Zmc2V0ID0gbWVtLkNhcmRPZmZzZXQgJSB3aW5kb3dfc2l6ZTsKICAgICBtZW0uQ2FyZE9mZnNldCAtPSBvZmZzZXQ7CiAgICAgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7CisgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqLwogICAgIGluZm8tPmJhc2UgPSBpb3JlbWFwKHJlcS5CYXNlLCB3aW5kb3dfc2l6ZSk7CkBAIC0xNTI3LDggKzE1MTIsOCBAQAogICAgIHBjbmV0X3Jlc2V0XzgzOTAoZGV2KTsKICAgICBpZiAoaSAhPSAoVFhfUEFHRVM8PDgpKSB7CiAJaW91bm1hcChpbmZvLT5iYXNlKTsKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluay0+d2luKTsKLQlpbmZvLT5iYXNlID0gTlVMTDsgbGluay0+d2luID0gTlVMTDsKKwlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0+d2luKTsKKwlpbmZvLT5iYXNlID0gTlVMTDsgbGluay0+d2luID0gMDsKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAKQEAgLTE1NDksOCArMTUzNCw2IEBACiAgICAgaW5mby0+ZmxhZ3MgfD0gVVNFX1NITUVNOwogICAgIHJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0gICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogICAgIHJldHVybiAxOwogfQpAQCAtMTc2MCw3ICsxNzQzLDcgQEAKIAlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHhjMDBmLCAweDAwMDIsICJjaXMvTEEtUENNLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiS1RJIiwgIlBFNTIwIFBMVVMiLCAweGFkMTgwMzQ1LCAweDlkNThkMzkyLCAiUEU1MjAuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJOREMiLCAiRXRoZXJuZXQiLCAweDAxYzQzYWUxLCAweDAwYjJlOTQxLCAiY2lzL05FMksuY2lzIiksCi0JUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJQTVggICAiLCAiUEUtMjAwIiwgMHgzNGYzZjFjOCwgMHgxMGI1OWY4YywgIlBFLTIwMC5jaXMiKSwKKwlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlBNWCAgICIsICJQRS0yMDAiLCAweDM0ZjNmMWM4LCAweDEwYjU5ZjhjLCAiY2lzL1BFLTIwMC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlRBTUFSQUNLIiwgIkV0aGVybmV0IiwgMHhjZjQzNGZiYSwgMHgwMGIyZTk0MSwgImNpcy90YW1hcmFjay5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRXRoZXJuZXQiLCAiQ0YgU2l6ZSBQQyBDYXJkIiwgMHgwMGIyZTk0MSwgMHg0M2FjMjM5YiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJGYXN0IEV0aGVybmV0IiwgIkNGIFNpemUgUEMgQ2FyZCIsICIxLjAiLApAQCAtMTc4OCw3ICsxNzcxLDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcGNuZXRfY3Modm9pZCkKIHsKLSAgICBERUJVRygwLCAicGNuZXRfY3M6IHVubG9hZGluZ1xuIik7CiAgICAgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZwY25ldF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDdiZGUyY2QuLjllMGRhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC03OSwxNCArNzksNiBAQAogKi8KIElOVF9NT0RVTEVfUEFSTShpZl9wb3J0LCAwKTsKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotSU5UX01PRFVMRV9QQVJNKHBjX2RlYnVnLCBQQ01DSUFfREVCVUcpOwotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPQotInNtYzkxYzkyX2NzLmMgMS4xMjMgMjAwNi8xMS8wOSBEb25hbGQgQmVja2VyLCBiZWNrZXJAc2N5bGQuY29tLlxuIjsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogI2RlZmluZSBEUlZfTkFNRQkic21jOTFjOTJfY3MiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjEyMyIKQEAgLTEyNiwxMiArMTE4LDYgQEAKICAgICBpbnQJCQkJcnhfb3ZybjsKIH07CiAKLXN0cnVjdCBzbWNfY2ZnX21lbSB7Ci0gICAgdHVwbGVfdCB0dXBsZTsKLSAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIHVfY2hhciBidWZbMjU1XTsKLX07Ci0KIC8qIFNwZWNpYWwgZGVmaW5pdGlvbnMgZm9yIE1lZ2FoZXJ0eiBtdWx0aWZ1bmN0aW9uIGNhcmRzICovCiAjZGVmaW5lIE1FR0FIRVJUWl9JU1IJCTB4MDM4MAogCkBAIC0zMjksNyArMzE1LDcgQEAKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0gICAgREVCVUcoMCwgInNtYzkxYzkyX2F0dGFjaCgpXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJzbWM5MWM5Ml9hdHRhY2goKVxuIik7CiAKICAgICAvKiBDcmVhdGUgbmV3IGV0aGVybmV0IGRldmljZSAqLwogICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc21jX3ByaXZhdGUpKTsKQEAgLTM0MywxMCArMzI5LDggQEAKICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gNDsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfSEFORExFX1BSRVNFTlQ7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0gJnNtY19pbnRlcnJ1cHQ7Ci0gICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMzc3LDcgKzM2MSw3IEBACiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAKLSAgICBERUJVRygwLCAic21jOTFjOTJfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJzbWM5MWM5Ml9kZXRhY2hcbiIpOwogCiAgICAgaWYgKGxpbmstPmRldl9ub2RlKQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC00MDgsMzQgKzM5Miw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotCQljaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpbnQgaTsKLQotCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IDApCi0JCXJldHVybiBpOwotCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIGk7Ci0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwotfQotCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCi0JCWNpc3BhcnNlX3QgKnBhcnNlKQotewotCWludCBpOwotCi0JaWYgKChpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpKSAhPSAwIHx8Ci0JCQkoaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgIT0gMCkKLQkJcmV0dXJuIGk7Ci0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIENvbmZpZ3VyYXRpb24gc3R1ZmYgZm9yIE1lZ2FoZXJ0eiBjYXJkcwogCkBAIC00OTAsMTkgKzQ0NywxNCBAQAogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07CiAgICAgd2luX3JlcV90IHJlcTsKICAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGk7CiAKLSAgICBjZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtY19jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFjZmdfbWVtKQotCSAgICByZXR1cm4gLUVOT01FTTsKLQogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEfElSUV9IQU5ETEVfUFJFU0VOVDsKKwlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKICAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKQEAgLTUxMCw5MSArNDYyLDgwIEBACiAgICAgLyogVGhlIE1lZ2FoZXJ0eiBjb21ibyBjYXJkcyBoYXZlIG1vZGVtLWxpa2UgQ0lTIGVudHJpZXMsIHNvCiAgICAgICAgd2UgaGF2ZSB0byBleHBsaWNpdGx5IHRyeSBhIGJ1bmNoIG9mIHBvcnQgY29tYmluYXRpb25zLiAqLwogICAgIGlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgbWh6X21mY19jb25maWdfY2hlY2ssIE5VTEwpKQotCWdvdG8gZnJlZV9jZmdfbWVtOworCSAgICByZXR1cm4gLUVOT0RFVjsKKwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwogCiAgICAgLyogQWxsb2NhdGUgYSBtZW1vcnkgd2luZG93LCBmb3IgYWNjZXNzaW5nIHRoZSBJU1IgKi8KICAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzh8V0lOX01FTU9SWV9UWVBFX0FNfFdJTl9FTkFCTEU7CiAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKLSAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsaW5rLT53aW4pOwogICAgIGlmIChpICE9IDApCi0JZ290byBmcmVlX2NmZ19tZW07CisJICAgIHJldHVybiAtRU5PREVWOworCiAgICAgc21jLT5iYXNlID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgIG1lbS5DYXJkT2Zmc2V0ID0gbWVtLlBhZ2UgPSAwOwogICAgIGlmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTU9UT1JPTEEpCiAJbWVtLkNhcmRPZmZzZXQgPSBsaW5rLT5jb25mLkNvbmZpZ0Jhc2U7Ci0gICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKKyAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwogCiAgICAgaWYgKChpID09IDApCiAJJiYgKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NRUdBSEVSVFopCiAJJiYgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9NRUdBSEVSVFpfRU0zMjg4KSkKIAltaHpfMzI4OF9wb3dlcihsaW5rKTsKIAotZnJlZV9jZmdfbWVtOgotICAgIGtmcmVlKGNmZ19tZW0pOwotICAgIHJldHVybiAtRU5PREVWOworICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBjbWNpYV9nZXRfdmVyc21hYyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICB0dXBsZV90ICp0dXBsZSwKKwkJCSAgICAgIHZvaWQgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXY7CisJY2lzcGFyc2VfdCBwYXJzZTsKKworCWlmIChwY21jaWFfcGFyc2VfdHVwbGUodHVwbGUsICZwYXJzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChwYXJzZS52ZXJzaW9uXzEubnMgPiAzKSAmJgorCSAgICAoY3Z0X2FzY2lpX2FkZHJlc3MoZGV2LAorCQkJICAgICAgIChwYXJzZS52ZXJzaW9uXzEuc3RyICsgcGFyc2UudmVyc2lvbl8xLm9mc1szXSkpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTlZBTDsKK307CisKIHN0YXRpYyBpbnQgbWh6X3NldHVwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotICAgIHN0cnVjdCBzbWNfY2ZnX21lbSAqY2ZnX21lbTsKLSAgICB0dXBsZV90ICp0dXBsZTsKLSAgICBjaXNwYXJzZV90ICpwYXJzZTsKLSAgICB1X2NoYXIgKmJ1ZiwgKnN0YXRpb25fYWRkcjsKKyAgICBzaXplX3QgbGVuOworICAgIHU4ICpidWY7CiAgICAgaW50IHJjOwogCi0gICAgY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbWNfY2ZnX21lbSksIEdGUF9LRVJORUwpOwotICAgIGlmICghY2ZnX21lbSkKLQlyZXR1cm4gLTE7Ci0KLSAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLSAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLSAgICBidWYgPSBjZmdfbWVtLT5idWY7Ci0KLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IHR1cGxlLT5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKLQogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHRoZSBDSVMuICBJdCBpcyBzdG9yZWQgYXMgdGhlIGxhc3QKICAgICAgICAoZm91cnRoKSBzdHJpbmcgaW4gdGhlIFZlcnNpb24gMSBWZXJzaW9uL0lEIHR1cGxlLiAqLwotICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIGlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IDApIHsKLQlyYyA9IC0xOwotCWdvdG8gZnJlZV9jZmdfbWVtOwotICAgIH0KKyAgICBpZiAoKGxpbmstPnByb2RfaWRbM10pICYmCisJKGN2dF9hc2NpaV9hZGRyZXNzKGRldiwgbGluay0+cHJvZF9pZFszXSkgPT0gMCkpCisJICAgIHJldHVybiAwOworCisgICAgLyogV29ya2Fyb3VuZHMgZm9yIGJyb2tlbiBjYXJkcyBzdGFydCBoZXJlLiAqLwogICAgIC8qIFVnaCAtLSB0aGUgRU0xMTQ0IGNhcmQgaGFzIHR3byBWRVJTXzEgdHVwbGVzIT8hICovCi0gICAgaWYgKG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSAwKQotCWZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0gICAgaWYgKHBhcnNlLT52ZXJzaW9uXzEubnMgPiAzKSB7Ci0Jc3RhdGlvbl9hZGRyID0gcGFyc2UtPnZlcnNpb25fMS5zdHIgKyBwYXJzZS0+dmVyc2lvbl8xLm9mc1szXTsKLQlpZiAoY3Z0X2FzY2lpX2FkZHJlc3MoZGV2LCBzdGF0aW9uX2FkZHIpID09IDApIHsKLQkJcmMgPSAwOwotCQlnb3RvIGZyZWVfY2ZnX21lbTsKLQl9Ci0gICAgfQorICAgIGlmICghcGNtY2lhX2xvb3BfdHVwbGUobGluaywgQ0lTVFBMX1ZFUlNfMSwgcGNtY2lhX2dldF92ZXJzbWFjLCBkZXYpKQorCSAgICByZXR1cm4gMDsKIAogICAgIC8qIEFub3RoZXIgcG9zc2liaWxpdHk6IGZvciB0aGUgRU0zMjg4LCBpbiBhIHNwZWNpYWwgdHVwbGUgKi8KLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gMHg4MTsKLSAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSkgIT0gMCkgewotCXJjID0gLTE7Ci0JZ290byBmcmVlX2NmZ19tZW07Ci0gICAgfQotICAgIGlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgdHVwbGUpICE9IDApIHsKLQlyYyA9IC0xOwotCWdvdG8gZnJlZV9jZmdfbWVtOwotICAgIH0KLSAgICBidWZbMTJdID0gJ1wwJzsKLSAgICBpZiAoY3Z0X2FzY2lpX2FkZHJlc3MoZGV2LCBidWYpID09IDApIHsKLQlyYyA9IDA7Ci0JZ290byBmcmVlX2NmZ19tZW07Ci0gICB9CiAgICAgcmMgPSAtMTsKLWZyZWVfY2ZnX21lbToKLSAgIGtmcmVlKGNmZ19tZW0pOwotICAgcmV0dXJuIHJjOwotfQorICAgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgMHg4MSwgJmJ1Zik7CisgICAgaWYgKGJ1ZiAmJiBsZW4gPj0gMTMpIHsKKwkgICAgYnVmWzEyXSA9ICdcMCc7CisJICAgIGlmIChjdnRfYXNjaWlfYWRkcmVzcyhkZXYsIGJ1ZikpCisJCSAgICByYyA9IDA7CisgICAgfQorICAgIGtmcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gcmM7Cit9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNjg0LDU4ICs2MjUsMjEgQEAKICAgICByZXR1cm4gaTsKIH0KIAorCiBzdGF0aWMgaW50IHNtY19zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07Ci0gICAgdHVwbGVfdCAqdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCAqcGFyc2U7Ci0gICAgY2lzdHBsX2xhbl9ub2RlX2lkX3QgKm5vZGVfaWQ7Ci0gICAgdV9jaGFyICpidWYsICpzdGF0aW9uX2FkZHI7Ci0gICAgaW50IGksIHJjOwotCi0gICAgY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbWNfY2ZnX21lbSksIEdGUF9LRVJORUwpOwotICAgIGlmICghY2ZnX21lbSkKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLSAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLSAgICBidWYgPSBjZmdfbWVtLT5idWY7Ci0KLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IHR1cGxlLT5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKIAogICAgIC8qIENoZWNrIGZvciBhIExBTiBmdW5jdGlvbiBleHRlbnNpb24gdHVwbGUgKi8KLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotICAgIHdoaWxlIChpID09IDApIHsKLQlpZiAocGFyc2UtPmZ1bmNlLnR5cGUgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQotCSAgICBicmVhazsKLQlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotICAgIH0KLSAgICBpZiAoaSA9PSAwKSB7Ci0Jbm9kZV9pZCA9IChjaXN0cGxfbGFuX25vZGVfaWRfdCAqKXBhcnNlLT5mdW5jZS5kYXRhOwotCWlmIChub2RlX2lkLT5uYiA9PSA2KSB7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWRldi0+ZGV2X2FkZHJbaV0gPSBub2RlX2lkLT5pZFtpXTsKLQkgICAgcmMgPSAwOwotCSAgICBnb3RvIGZyZWVfY2ZnX21lbTsKLQl9Ci0gICAgfQorICAgIGlmICghcGNtY2lhX2dldF9tYWNfZnJvbV9jaXMobGluaywgZGV2KSkKKwkgICAgcmV0dXJuIDA7CisKICAgICAvKiBUcnkgdGhlIHRoaXJkIHN0cmluZyBpbiB0aGUgVmVyc2lvbiAxIFZlcnNpb24vSUQgdHVwbGUuICovCiAgICAgaWYgKGxpbmstPnByb2RfaWRbMl0pIHsKLQlzdGF0aW9uX2FkZHIgPSBsaW5rLT5wcm9kX2lkWzJdOwotCWlmIChjdnRfYXNjaWlfYWRkcmVzcyhkZXYsIHN0YXRpb25fYWRkcikgPT0gMCkgewotCQlyYyA9IDA7Ci0JCWdvdG8gZnJlZV9jZmdfbWVtOwotCX0KKwkgICAgaWYgKGN2dF9hc2NpaV9hZGRyZXNzKGRldiwgbGluay0+cHJvZF9pZFsyXSkgPT0gMCkKKwkJICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHJjID0gLTE7Ci1mcmVlX2NmZ19tZW06Ci0gICAga2ZyZWUoY2ZnX21lbSk7Ci0gICAgcmV0dXJuIHJjOworICAgIHJldHVybiAtMTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC03NDksNyArNjUzLDcgQEAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwogICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRHxJUlFfSEFORExFX1BSRVNFTlQ7CisJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUQ7CiAgICAgbGluay0+aW8uTnVtUG9ydHMxID0gNjQ7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OwpAQCAtNzk0LDQxICs2OTgsMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHBjbWNpYV9vc2lfbWFjKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgdHVwbGVfdCAqdHVwbGUsCisJCQkgIHZvaWQgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXY7CisJaW50IGk7CisKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDgpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0dXBsZS0+VHVwbGVEYXRhWzBdICE9IDB4MDQpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWRldi0+ZGV2X2FkZHJbaV0gPSB0dXBsZS0+VHVwbGVEYXRhW2krMl07CisJcmV0dXJuIDA7Cit9OworCisKIHN0YXRpYyBpbnQgb3NpX3NldHVwKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCB1X3Nob3J0IG1hbmZpZCwgdV9zaG9ydCBjYXJkaWQpCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0gICAgc3RydWN0IHNtY19jZmdfbWVtICpjZmdfbWVtOwotICAgIHR1cGxlX3QgKnR1cGxlOwotICAgIHVfY2hhciAqYnVmOwotICAgIGludCBpLCByYzsKLQotICAgIGNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc21jX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIWNmZ19tZW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotICAgIGJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKLQotICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICB0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLSAgICB0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLT5UdXBsZU9mZnNldCA9IDA7CisgICAgaW50IHJjOwogCiAgICAgLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdHVwbGUgMHg5MCwgc3VidHVwbGUgMHgwNCAqLwotICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSAweDkwOwotICAgIGkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssIHR1cGxlKTsKLSAgICB3aGlsZSAoaSA9PSAwKSB7Ci0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCB0dXBsZSk7Ci0JaWYgKChpICE9IDApIHx8IChidWZbMF0gPT0gMHgwNCkpCi0JICAgIGJyZWFrOwotCWkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgdHVwbGUpOwotICAgIH0KLSAgICBpZiAoaSAhPSAwKSB7Ci0JcmMgPSAtMTsKLQlnb3RvIGZyZWVfY2ZnX21lbTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQlkZXYtPmRldl9hZGRyW2ldID0gYnVmW2krMl07CisgICAgaWYgKHBjbWNpYV9sb29wX3R1cGxlKGxpbmssIDB4OTAsIHBjbWNpYV9vc2lfbWFjLCBkZXYpKQorCSAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoKChtYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCiAJIChjYXJkaWQgPT0gUFJPRElEX09TSVRFQ0hfU0VWRU4pKSB8fApAQCAtODM2LDIwICs3MzAsMTcgQEAKIAkgKGNhcmRpZCA9PSBQUk9ESURfUFNJT05fTkVUMTAwKSkpIHsKIAlyYyA9IG9zaV9sb2FkX2Zpcm13YXJlKGxpbmspOwogCWlmIChyYykKLQkJZ290byBmcmVlX2NmZ19tZW07CisJCXJldHVybiByYzsKICAgICB9IGVsc2UgaWYgKG1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgewogCS8qIE1ha2Ugc3VyZSBib3RoIGZ1bmN0aW9ucyBhcmUgcG93ZXJlZCB1cCAqLwogCXNldF9iaXRzKDB4MzAwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyBPU0lURUNIX0FVSV9QV1IpOwogCS8qIE5vdywgdHVybiBvbiB0aGUgaW50ZXJydXB0IGZvciBib3RoIGNhcmQgZnVuY3Rpb25zICovCiAJc2V0X2JpdHMoMHgzMDAsIGxpbmstPmlvLkJhc2VQb3J0MSArIE9TSVRFQ0hfUkVTRVRfSVNSKTsKLQlERUJVRygyLCAiQVVJL1BXUjogJTQuNHggUkVTRVQvSVNSOiAlNC40eFxuIiwKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJBVUkvUFdSOiAlNC40eCBSRVNFVC9JU1I6ICU0LjR4XG4iLAogCSAgICAgIGludyhsaW5rLT5pby5CYXNlUG9ydDEgKyBPU0lURUNIX0FVSV9QV1IpLAogCSAgICAgIGludyhsaW5rLT5pby5CYXNlUG9ydDEgKyBPU0lURUNIX1JFU0VUX0lTUikpOwogICAgIH0KLSAgICByYyA9IDA7Ci1mcmVlX2NmZ19tZW06Ci0gICBrZnJlZShjZmdfbWVtKTsKLSAgIHJldHVybiByYzsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbWM5MWM5Ml9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtOTU5LDEyICs4NTAsNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBDU19FWElUX1RFU1QocmV0LCBzdmMsIGxhYmVsKQlcCi1pZiAocmV0ICE9IDApIHsJCQkJXAotCWNzX2Vycm9yKGxpbmssIHN2YywgcmV0KTsJXAotCWdvdG8gbGFiZWw7IAkJCVwKLX0KLQogc3RhdGljIGludCBzbWM5MWM5Ml9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CkBAIC05NzQsNyArODU5LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyOwogICAgIHVfbG9uZyBtaXI7CiAKLSAgICBERUJVRygwLCAic21jOTFjOTJfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJzbWM5MWM5Ml9jb25maWdcbiIpOwogCiAgICAgc21jLT5tYW5maWQgPSBsaW5rLT5tYW5mX2lkOwogICAgIHNtYy0+Y2FyZGlkID0gbGluay0+Y2FyZF9pZDsKQEAgLTk5MCwxMiArODc1LDE1IEBACiAgICAgfSBlbHNlIHsKIAlpID0gc21jX2NvbmZpZyhsaW5rKTsKICAgICB9Ci0gICAgQ1NfRVhJVF9URVNUKGksIFJlcXVlc3RJTywgY29uZmlnX2ZhaWxlZCk7CisgICAgaWYgKGkpCisJICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKIAogICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0gICAgQ1NfRVhJVF9URVNUKGksIFJlcXVlc3RJUlEsIGNvbmZpZ19mYWlsZWQpOworICAgIGlmIChpKQorCSAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotICAgIENTX0VYSVRfVEVTVChpLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgY29uZmlnX2ZhaWxlZCk7CisgICAgaWYgKGkpCisJICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKIAogICAgIGlmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTU9UT1JPTEEpCiAJbW90X2NvbmZpZyhsaW5rKTsKQEAgLTEwNzQsNyArOTYyLDcgQEAKICAgICB9CiAKICAgICBsaW5rLT5kZXZfbm9kZSA9ICZzbWMtPm5vZGU7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAogICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7CiAJcHJpbnRrKEtFUk5fRVJSICJzbWM5MWM5Ml9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKQEAgLTExMDAsNyArOTg4LDcgQEAKIAogICAgIGlmIChzbWMtPmNmZyAmIENGR19NSUlfU0VMRUNUKSB7CiAJaWYgKHNtYy0+bWlpX2lmLnBoeV9pZCAhPSAtMSkgewotCSAgICBERUJVRygwLCAiICBNSUkgdHJhbnNjZWl2ZXIgYXQgaW5kZXggJWQsIHN0YXR1cyAleC5cbiIsCisJICAgIGRldl9kYmcoJmxpbmstPmRldiwgIiAgTUlJIHRyYW5zY2VpdmVyIGF0IGluZGV4ICVkLCBzdGF0dXMgJXguXG4iLAogCQkgIHNtYy0+bWlpX2lmLnBoeV9pZCwgaik7CiAJfSBlbHNlIHsKICAgICAJICAgIHByaW50ayhLRVJOX05PVElDRSAiICBObyBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kIVxuIik7CkBAIC0xMTEwLDcgKzk5OCw3IEBACiAKIGNvbmZpZ191bmRvOgogICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci1jb25maWdfZmFpbGVkOgkJCS8qIENTX0VYSVRfVEVTVCgpIGNhbGxzIGp1bXAgdG8gaGVyZS4uLiAqLworY29uZmlnX2ZhaWxlZDoKICAgICBzbWM5MWM5Ml9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwogfSAvKiBzbWM5MWM5Ml9jb25maWcgKi8KQEAgLTExMjUsNyArMTAxMyw3IEBACiAKIHN0YXRpYyB2b2lkIHNtYzkxYzkyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgInNtYzkxYzkyX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInNtYzkxYzkyX3JlbGVhc2VcbiIpOwogCWlmIChsaW5rLT53aW4pIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJCXN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMjIsMTAgKzExMTAsMTAgQEAKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBzbWMtPnBfZGV2OwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgREVCVUcoMCwgIiVzOiBzbWNfb3BlbiglcCksIElEL1dpbmRvdyAlNC40eC5cbiIsCisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiJXM6IHNtY19vcGVuKCVwKSwgSUQvV2luZG93ICU0LjR4LlxuIiwKIAkgIGRldi0+bmFtZSwgZGV2LCBpbncoZGV2LT5iYXNlX2FkZHIgKyBCQU5LX1NFTEVDVCkpOwotICAgIGlmIChwY19kZWJ1ZyA+IDEpIHNtY19kdW1wKGRldik7CisjaWZkZWYgUENNQ0lBX0RFQlVHCisgICAgc21jX2R1bXAoZGV2KTsKICNlbmRpZgogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgUENNQ0lBIGNhcmQgaXMgc3RpbGwgaGVyZS4gKi8KQEAgLTEyNjAsNyArMTE0OCw3IEBACiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBzbWMtPnBfZGV2OwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIERFQlVHKDAsICIlczogc21jX2Nsb3NlKCksIHN0YXR1cyAlNC40eC5cbiIsCisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiJXM6IHNtY19jbG9zZSgpLCBzdGF0dXMgJTQuNHguXG4iLAogCSAgZGV2LT5uYW1lLCBpbncoaW9hZGRyICsgQkFOS19TRUxFQ1QpKTsKIAogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTEzMjcsNyArMTIxNSw3IEBACiAJdV9jaGFyICpidWYgPSBza2ItPmRhdGE7CiAJdV9pbnQgbGVuZ3RoID0gc2tiLT5sZW47IC8qIFRoZSBjaGlwIHdpbGwgcGFkIHRvIGV0aGVybmV0IG1pbi4gKi8KIAotCURFQlVHKDIsICIlczogVHJ5aW5nIHRvIHhtaXQgcGFja2V0IG9mIGxlbmd0aCAlZC5cbiIsCisJcHJfZGVidWcoIiVzOiBUcnlpbmcgdG8geG1pdCBwYWNrZXQgb2YgbGVuZ3RoICVkLlxuIiwKIAkgICAgICBkZXYtPm5hbWUsIGxlbmd0aCk7CiAJCiAJLyogc2VuZCB0aGUgcGFja2V0IGxlbmd0aDogKzYgZm9yIHN0YXR1cyB3b3JkLCBsZW5ndGgsIGFuZCBjdGwgKi8KQEAgLTEzODIsNyArMTI3MCw3IEBACiAKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICBERUJVRygyLCAiJXM6IHNtY19zdGFydF94bWl0KGxlbmd0aCA9ICVkKSBjYWxsZWQsIgorICAgIHByX2RlYnVnKCIlczogc21jX3N0YXJ0X3htaXQobGVuZ3RoID0gJWQpIGNhbGxlZCwiCiAJICAiIHN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwgc2tiLT5sZW4sIGludyhpb2FkZHIgKyAyKSk7CiAKICAgICBpZiAoc21jLT5zYXZlZF9za2IpIHsKQEAgLTE0MjksNyArMTMxNyw3IEBACiAgICAgfQogCiAgICAgLyogT3RoZXJ3aXNlIGRlZmVyIHVudGlsIHRoZSBUeC1zcGFjZS1hbGxvY2F0ZWQgaW50ZXJydXB0LiAqLwotICAgIERFQlVHKDIsICIlczogbWVtb3J5IGFsbG9jYXRpb24gZGVmZXJyZWQuXG4iLCBkZXYtPm5hbWUpOworICAgIHByX2RlYnVnKCIlczogbWVtb3J5IGFsbG9jYXRpb24gZGVmZXJyZWQuXG4iLCBkZXYtPm5hbWUpOwogICAgIG91dHcoKElNX0FMTE9DX0lOVCA8PCA4KSB8IChpciAmIDB4ZmYwMCksIGlvYWRkciArIElOVEVSUlVQVCk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21jLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE0OTQsNyArMTM4Miw3IEBACiAKICAgICBTTUNfU0VMRUNUX0JBTksoMCk7CiAgICAgZXBocyA9IGludyhpb2FkZHIgKyBFUEgpOwotICAgIERFQlVHKDIsICIlczogRXRoZXJuZXQgcHJvdG9jb2wgaGFuZGxlciBpbnRlcnJ1cHQsIHN0YXR1cyIKKyAgICBwcl9kZWJ1ZygiJXM6IEV0aGVybmV0IHByb3RvY29sIGhhbmRsZXIgaW50ZXJydXB0LCBzdGF0dXMiCiAJICAiICU0LjR4LlxuIiwgZGV2LT5uYW1lLCBlcGhzKTsKICAgICAvKiBDb3VsZCBiZSBhIGNvdW50ZXIgcm9sbC1vdmVyIHdhcm5pbmc6IHVwZGF0ZSBzdGF0cy4gKi8KICAgICBjYXJkX3N0YXRzID0gaW53KGlvYWRkciArIENPVU5URVIpOwpAQCAtMTUzNCw3ICsxNDIyLDcgQEAKIAogICAgIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCi0gICAgREVCVUcoMywgIiVzOiBTTUM5MWM5MiBpbnRlcnJ1cHQgJWQgYXQgJSN4LlxuIiwgZGV2LT5uYW1lLAorICAgIHByX2RlYnVnKCIlczogU01DOTFjOTIgaW50ZXJydXB0ICVkIGF0ICUjeC5cbiIsIGRldi0+bmFtZSwKIAkgIGlycSwgaW9hZGRyKTsKIAogICAgIHNwaW5fbG9jaygmc21jLT5sb2NrKTsKQEAgLTE1NDMsNyArMTQzMSw3IEBACiAgICAgaWYgKChzYXZlZF9iYW5rICYgMHhmZjAwKSAhPSAweDMzMDApIHsKIAkvKiBUaGUgZGV2aWNlIGRvZXMgbm90IGV4aXN0IC0tIHRoZSBjYXJkIGNvdWxkIGJlIG9mZi1saW5lLCBvcgogCSAgIG1heWJlIGl0IGhhcyBiZWVuIGVqZWN0ZWQuICovCi0JREVCVUcoMSwgIiVzOiBTTUM5MWM5MiBpbnRlcnJ1cHQgJWQgZm9yIG5vbi1leGlzdGVudCIKKwlwcl9kZWJ1ZygiJXM6IFNNQzkxYzkyIGludGVycnVwdCAlZCBmb3Igbm9uLWV4aXN0ZW50IgogCSAgICAgICIvZWplY3RlZCBkZXZpY2UuXG4iLCBkZXYtPm5hbWUsIGlycSk7CiAJaGFuZGxlZCA9IDA7CiAJZ290byBpcnFfZG9uZTsKQEAgLTE1NTcsNyArMTQ0NSw3IEBACiAKICAgICBkbyB7IC8qIHJlYWQgdGhlIHN0YXR1cyBmbGFnLCBhbmQgbWFzayBpdCAqLwogCXN0YXR1cyA9IGludyhpb2FkZHIgKyBJTlRFUlJVUFQpICYgMHhmZjsKLQlERUJVRygzLCAiJXM6IFN0YXR1cyBpcyAlIzIuMnggKG1hc2sgJSMyLjJ4KS5cbiIsIGRldi0+bmFtZSwKKwlwcl9kZWJ1ZygiJXM6IFN0YXR1cyBpcyAlIzIuMnggKG1hc2sgJSMyLjJ4KS5cbiIsIGRldi0+bmFtZSwKIAkgICAgICBzdGF0dXMsIG1hc2spOwogCWlmICgoc3RhdHVzICYgbWFzaykgPT0gMCkgewogCSAgICBpZiAoYm9ndXNfY250ID09IElOVFJfV09SSykKQEAgLTE2MDIsNyArMTQ5MCw3IEBACiAJICAgIHNtY19lcGhfaXJxKGRldik7CiAgICAgfSB3aGlsZSAoLS1ib2d1c19jbnQpOwogCi0gICAgREVCVUcoMywgIiAgUmVzdG9yaW5nIHNhdmVkIHJlZ2lzdGVycyBtYXNrICUyLjJ4IGJhbmsgJTQuNHgiCisgICAgcHJfZGVidWcoIiAgUmVzdG9yaW5nIHNhdmVkIHJlZ2lzdGVycyBtYXNrICUyLjJ4IGJhbmsgJTQuNHgiCiAJICAiIHBvaW50ZXIgJTQuNHguXG4iLCBtYXNrLCBzYXZlZF9iYW5rLCBzYXZlZF9wb2ludGVyKTsKIAogICAgIC8qIHJlc3RvcmUgc3RhdGUgcmVnaXN0ZXIgKi8KQEAgLTE2MTAsNyArMTQ5OCw3IEBACiAgICAgb3V0dyhzYXZlZF9wb2ludGVyLCBpb2FkZHIgKyBQT0lOVEVSKTsKICAgICBTTUNfU0VMRUNUX0JBTksoc2F2ZWRfYmFuayk7CiAKLSAgICBERUJVRygzLCAiJXM6IEV4aXRpbmcgaW50ZXJydXB0IElSUSVkLlxuIiwgZGV2LT5uYW1lLCBpcnEpOworICAgIHByX2RlYnVnKCIlczogRXhpdGluZyBpbnRlcnJ1cHQgSVJRJWQuXG4iLCBkZXYtPm5hbWUsIGlycSk7CiAKIGlycV9kb25lOgogCkBAIC0xNjYxLDcgKzE1NDksNyBAQAogICAgIHJ4X3N0YXR1cyA9IGludyhpb2FkZHIgKyBEQVRBXzEpOwogICAgIHBhY2tldF9sZW5ndGggPSBpbncoaW9hZGRyICsgREFUQV8xKSAmIDB4MDdmZjsKIAotICAgIERFQlVHKDIsICIlczogUmVjZWl2ZSBzdGF0dXMgJTQuNHggbGVuZ3RoICVkLlxuIiwKKyAgICBwcl9kZWJ1ZygiJXM6IFJlY2VpdmUgc3RhdHVzICU0LjR4IGxlbmd0aCAlZC5cbiIsCiAJICBkZXYtPm5hbWUsIHJ4X3N0YXR1cywgcGFja2V0X2xlbmd0aCk7CiAKICAgICBpZiAoIShyeF9zdGF0dXMgJiBSU19FUlJPUlMpKSB7CQkKQEAgLTE2NzIsNyArMTU2MCw3IEBACiAJc2tiID0gZGV2X2FsbG9jX3NrYihwYWNrZXRfbGVuZ3RoKzIpOwogCQogCWlmIChza2IgPT0gTlVMTCkgewotCSAgICBERUJVRygxLCAiJXM6IExvdyBtZW1vcnksIHBhY2tldCBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lKTsKKwkgICAgcHJfZGVidWcoIiVzOiBMb3cgbWVtb3J5LCBwYWNrZXQgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSk7CiAJICAgIGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCSAgICBvdXR3KE1DX1JFTEVBU0UsIGlvYWRkciArIE1NVV9DTUQpOwogCSAgICByZXR1cm47CkBAIC0xODMyLDcgKzE3MjAsNyBAQAogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgaTsKIAotICAgIERFQlVHKDAsICIlczogc21jOTFjOTIgcmVzZXQgY2FsbGVkLlxuIiwgZGV2LT5uYW1lKTsKKyAgICBwcl9kZWJ1ZygiJXM6IHNtYzkxYzkyIHJlc2V0IGNhbGxlZC5cbiIsIGRldi0+bmFtZSk7CiAKICAgICAvKiBUaGUgZmlyc3QgaW50ZXJhY3Rpb24gbXVzdCBiZSBhIHdyaXRlIHRvIGJyaW5nIHRoZSBjaGlwIG91dAogICAgICAgIG9mIHNsZWVwIG1vZGUuICovCkBAIC0yMTQ5LDE4ICsyMDM3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgdTMyIHNtY19nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gcGNfZGVidWc7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtY19zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbCkKLXsKLQlwY19kZWJ1ZyA9IHZhbDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHNtY19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjE4NCwxMCArMjA2MCw2IEBACiAJLmdldF9zZXR0aW5ncyA9IHNtY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHNtY19zZXRfc2V0dGluZ3MsCiAJLmdldF9saW5rID0gc21jX2dldF9saW5rLAotI2lmZGVmIFBDTUNJQV9ERUJVRwotCS5nZXRfbXNnbGV2ZWwgPSBzbWNfZ2V0X21zZ2xldmVsLAotCS5zZXRfbXNnbGV2ZWwgPSBzbWNfc2V0X21zZ2xldmVsLAotI2VuZGlmCiAJLm53YXlfcmVzZXQgPSBzbWNfbndheV9yZXNldCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IGNmODQyMzEuLmZlNTA0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtMjExLDIwICsyMTEsNiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqaWZfbmFtZXNbXSA9IHsgIkF1dG8iLCAiMTBCYXNlVCIsICIxMEJhc2UyIiwgIkFVSSIsICIxMDBCYXNlVCIgfTsKIAotLyoqKioqKioqKioqKioqKioKLSAqIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gKiB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICogbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gKiBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAqIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSAqLwotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtEQkdfWElSQyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAjZGVmaW5lIEtEQkdfWElSQyBLRVJOX0RFQlVHICAgInhpcmMycHNfY3M6ICIKICNkZWZpbmUgS0VSUl9YSVJDIEtFUk5fRVJSICAgICAieGlyYzJwc19jczogIgpAQCAtMzU5LDcgKzM0NSw3IEBACiBzdGF0aWMgdm9pZCB4aXJjMnBzX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgY29uc3Qgdm9pZCAqcyk7CitzdGF0aWMgaW50IHNldF9jYXJkX3R5cGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKQEAgLTM3MSwyOCArMzU3LDYgQEAKIHN0YXRpYyBpbnQgZG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyo9PT09PT09PT09PT09PT0gSGVscGVyIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQKLWZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpKSA9PSAwICYmCi0JCQkoZXJyID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpKSA9PSAwKQotCQllcnIgPSBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGUsIHBhcnNlKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkpID09IDAgJiYKLQkJCShlcnIgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSkpID09IDApCi0JCWVyciA9IHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwotCXJldHVybiBlcnI7Ci19Ci0KICNkZWZpbmUgU2VsZWN0UGFnZShwZ25yKSAgIG91dGIoKHBnbnIpLCBpb2FkZHIgKyBYSVJDUkVHX1BSKQogI2RlZmluZSBHZXRCeXRlKHJlZykJICAgKCh1bnNpZ25lZClpbmIoaW9hZGRyICsgKHJlZykpKQogI2RlZmluZSBHZXRXb3JkKHJlZykJICAgKCh1bnNpZ25lZClpbncoaW9hZGRyICsgKHJlZykpKQpAQCAtNDAwLDcgKzM2NCw3IEBACiAjZGVmaW5lIFB1dFdvcmQocmVnLHZhbHVlKSBvdXR3KCh2YWx1ZSksIGlvYWRkcisocmVnKSkKIAogLyo9PT09PT0gRnVuY3Rpb25zIHVzZWQgZm9yIGRlYnVnZ2luZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2lmIGRlZmluZWQoUENNQ0lBX0RFQlVHKSAmJiAwIC8qIHJlYWRpbmcgcmVncyBtYXkgY2hhbmdlIHN5c3RlbSBzdGF0dXMgKi8KKyNpZiAwIC8qIHJlYWRpbmcgcmVncyBtYXkgY2hhbmdlIHN5c3RlbSBzdGF0dXMgKi8KIHN0YXRpYyB2b2lkCiBQcmludFJlZ2lzdGVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNDMyLDcgKzM5Niw3IEBACiAJfQogICAgIH0KIH0KLSNlbmRpZiAvKiBQQ01DSUFfREVCVUcgKi8KKyNlbmRpZiAvKiAwICovCiAKIC8qPT09PT09PT09PT09PT0gTUlJIE1hbmFnZW1lbnQgZnVuY3Rpb25zID09PT09PT09PT09PT09PSovCiAKQEAgLTU3Niw3ICs1NDAsNyBAQAogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbDsKIAotICAgIERFQlVHKDAsICJhdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobG9jYWxfaW5mb190KSk7CkBAIC01OTIsNyArNTU2LDYgQEAKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9IHhpcmMycHNfaW50ZXJydXB0OwotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKIAogICAgIC8qIEZpbGwgaW4gY2FyZCBzcGVjaWZpYyBlbnRyaWVzICovCiAgICAgZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CkBAIC02MTUsNyArNTc4LDcgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotICAgIERFQlVHKDAsICJkZXRhY2goMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImRldGFjaFxuIik7CiAKICAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTY0NCwxNyArNjA3LDI1IEBACiAgKgogICovCiBzdGF0aWMgaW50Ci1zZXRfY2FyZF90eXBlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBjb25zdCB2b2lkICpzKQorc2V0X2NhcmRfdHlwZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIHVuc2lnbmVkIGNpc3JldiA9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKXMpWzJdOwotICAjZW5kaWYKLSAgICB1bnNpZ25lZCBtZWRpYWlkPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzKVszXTsKLSAgICB1bnNpZ25lZCBwcm9kaWQgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzKVs0XTsKKyAgICB1OCAqYnVmOworICAgIHVuc2lnbmVkIGludCBjaXNyZXYsIG1lZGlhaWQsIHByb2RpZDsKKyAgICBzaXplX3QgbGVuOwogCi0gICAgREVCVUcoMCwgImNpc3Jldj0lMDJ4IG1lZGlhaWQ9JTAyeCBwcm9kaWQ9JTAyeFxuIiwKKyAgICBsZW4gPSBwY21jaWFfZ2V0X3R1cGxlKGxpbmssIENJU1RQTF9NQU5GSUQsICZidWYpOworICAgIGlmIChsZW4gPCA1KSB7CisJICAgIGRldl9lcnIoJmxpbmstPmRldiwgImludmFsaWQgQ0lTIC0tIHNvcnJ5XG4iKTsKKwkgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2lzcmV2ID0gYnVmWzJdOworICAgIG1lZGlhaWQgPSBidWZbM107CisgICAgcHJvZGlkID0gYnVmWzRdOworCisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiY2lzcmV2PSUwMnggbWVkaWFpZD0lMDJ4IHByb2RpZD0lMDJ4XG4iLAogCSAgY2lzcmV2LCBtZWRpYWlkLCBwcm9kaWQpOwogCiAgICAgbG9jYWwtPm1vaGF3ayA9IDA7CkBAIC03NjEsNiArNzMyLDI2IEBACiAKIH0KIAorCitzdGF0aWMgaW50IHBjbWNpYV9nZXRfbWFjX2NlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgdHVwbGVfdCAqdHVwbGUsCisJCQkgICAgIHZvaWQgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXY7CisJaW50IGk7CisKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiAhPSAxMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh0dXBsZS0+VHVwbGVEYXRhWzBdICE9IDIpIHx8ICh0dXBsZS0+VHVwbGVEYXRhWzFdICE9IDEpIHx8CisJCSh0dXBsZS0+VHVwbGVEYXRhWzJdICE9IDYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBhbm90aGVyIHRyeQkoSmFtZXMgTGVobWVyJ3MgQ0UyIHZlcnNpb24gNC4xKSovCisJZm9yIChpID0gMjsgaSA8IDY7IGkrKykKKwkJZGV2LT5kZXZfYWRkcltpXSA9IHR1cGxlLT5UdXBsZURhdGFbaSsyXTsKKwlyZXR1cm4gMDsKK307CisKKwogLyoqKioqKioqKioqKioqKioKICAqIHhpcmMycHNfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgKiBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKQEAgLTc3MiwzMyArNzYzLDIxIEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgbG9jYWxfaW5mb190ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkcjsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgaW50IGVyciwgaTsKLSAgICB1X2NoYXIgYnVmWzY0XTsKLSAgICBjaXN0cGxfbGFuX25vZGVfaWRfdCAqbm9kZV9pZCA9IChjaXN0cGxfbGFuX25vZGVfaWRfdCopcGFyc2UuZnVuY2UuZGF0YTsKKyAgICBpbnQgZXJyOworICAgIHU4ICpidWY7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGxvY2FsLT5kaW5nb19jY3IgPSBOVUxMOwogCi0gICAgREVCVUcoMCwgImNvbmZpZygweCVwKVxuIiwgbGluayk7Ci0KLSAgICAvKgotICAgICAqIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgotICAgICAqIHJlZ2lzdGVycy4KLSAgICAgKi8KLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0gICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7Ci0gICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImNvbmZpZ1xuIik7CiAKICAgICAvKiBJcyB0aGlzIGEgdmFsaWQJY2FyZCAqLwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0gICAgaWYgKChlcnI9Zmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpKSkgeworICAgIGlmIChsaW5rLT5oYXNfbWFuZl9pZCA9PSAwKSB7CiAJcHJpbnRrKEtOT1RfWElSQyAibWFuZmlkIG5vdCBmb3VuZCBpbiBDSVNcbiIpOwogCWdvdG8gZmFpbHVyZTsKICAgICB9CiAKLSAgICBzd2l0Y2gocGFyc2UubWFuZmlkLm1hbmYpIHsKKyAgICBzd2l0Y2ggKGxpbmstPm1hbmZfaWQpIHsKICAgICAgIGNhc2UgTUFORklEX1hJUkNPTToKIAlsb2NhbC0+bWFuZl9zdHIgPSAiWGlyY29tIjsKIAlicmVhazsKQEAgLTgxNyw2NSArNzk2LDQ0IEBACiAJYnJlYWs7CiAgICAgICBkZWZhdWx0OgogCXByaW50ayhLTk9UX1hJUkMgIlVua25vd24gQ2FyZCBNYW51ZmFjdHVyZXIgSUQ6IDB4JTA0eFxuIiwKLQkgICAgICAgKHVuc2lnbmVkKXBhcnNlLm1hbmZpZC5tYW5mKTsKKwkgICAgICAgKHVuc2lnbmVkKWxpbmstPm1hbmZfaWQpOwogCWdvdG8gZmFpbHVyZTsKICAgICB9Ci0gICAgREVCVUcoMCwgImZvdW5kICVzIGNhcmRcbiIsIGxvY2FsLT5tYW5mX3N0cik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZm91bmQgJXMgY2FyZFxuIiwgbG9jYWwtPm1hbmZfc3RyKTsKIAotICAgIGlmICghc2V0X2NhcmRfdHlwZShsaW5rLCBidWYpKSB7CisgICAgaWYgKCFzZXRfY2FyZF90eXBlKGxpbmspKSB7CiAJcHJpbnRrKEtOT1RfWElSQyAidGhpcyBjYXJkIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwogCWdvdG8gZmFpbHVyZTsKICAgICB9CiAKICAgICAvKiBnZXQgdGhlIGV0aGVybmV0IGFkZHJlc3MgZnJvbSB0aGUgQ0lTICovCi0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotICAgIGZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOwotCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgewotCS8qIE9uY2UgSSBzYXcgdHdvIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCBlbnRyaWVzOgotCSAqIHRoZSBmaXJzdCBvbmUgd2l0aCBhIGxlbmd0aCBvZiB6ZXJvIHRoZSBzZWNvbmQgY29ycmVjdCAtCi0JICogc28gSSBza2lwIGFsbCBlbnRyaWVzIHdpdGggbGVuZ3RoIDAgKi8KLQlpZiAocGFyc2UuZnVuY2UudHlwZSA9PSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQKLQkgICAgJiYgKChjaXN0cGxfbGFuX25vZGVfaWRfdCAqKXBhcnNlLmZ1bmNlLmRhdGEpLT5uYikKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChlcnIpIHsgLyogbm90IGZvdW5kOiB0cnkgdG8gZ2V0IHRoZSBub2RlLWlkIGZyb20gdHVwbGUgMHg4OSAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IDB4ODk7ICAvKiBkYXRhIGxheW91dCBsb29rcyBsaWtlIHR1cGxlIDB4MjIgKi8KLQlpZiAoKGVyciA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgPT0gMCAmJgotCQkoZXJyID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpID09IDApIHsKLQkgICAgaWYgKHR1cGxlLlR1cGxlRGF0YUxlbiA9PSA4ICYmICpidWYgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQotCQltZW1jcHkoJnBhcnNlLCBidWYsIDgpOwotCSAgICBlbHNlCi0JCWVyciA9IC0xOwotCX0KLSAgICB9Ci0gICAgaWYgKGVycikgeyAvKiBhbm90aGVyIHRyeQkoSmFtZXMgTGVobWVyJ3MgQ0UyIHZlcnNpb24gNC4xKSovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwotCWZvciAoZXJyID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOyAhZXJyOwotCQkJCSBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgewotCSAgICBpZiAocGFyc2UuZnVuY2UudHlwZSA9PSAweDAyICYmIHBhcnNlLmZ1bmNlLmRhdGFbMF0gPT0gMQotCQkmJiBwYXJzZS5mdW5jZS5kYXRhWzFdID09IDYgJiYgdHVwbGUuVHVwbGVEYXRhTGVuID09IDEzKSB7Ci0JCWJ1ZlsxXSA9IDQ7Ci0JCW1lbWNweSgmcGFyc2UsIGJ1ZisxLCA4KTsKLQkJYnJlYWs7CisgICAgZXJyID0gcGNtY2lhX2dldF9tYWNfZnJvbV9jaXMobGluaywgZGV2KTsKKworICAgIC8qIG5vdCBmb3VuZDogdHJ5IHRvIGdldCB0aGUgbm9kZS1pZCBmcm9tIHR1cGxlIDB4ODkgKi8KKyAgICBpZiAoZXJyKSB7CisJICAgIGxlbiA9IHBjbWNpYV9nZXRfdHVwbGUobGluaywgMHg4OSwgJmJ1Zik7CisJICAgIC8qIGRhdGEgbGF5b3V0IGxvb2tzIGxpa2UgdHVwbGUgMHgyMiAqLworCSAgICBpZiAoYnVmICYmIGxlbiA9PSA4KSB7CisJCSAgICBpZiAoKmJ1ZiA9PSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQpIHsKKwkJCSAgICBpbnQgaTsKKwkJCSAgICBmb3IgKGkgPSAyOyBpIDwgNjsgaSsrKQorCQkJCSAgICBkZXYtPmRldl9hZGRyW2ldID0gYnVmW2krMl07CisJCSAgICB9IGVsc2UKKwkJCSAgICBlcnIgPSAtMTsKIAkgICAgfQotCX0KKwkgICAga2ZyZWUoYnVmKTsKICAgICB9CisKKyAgICBpZiAoZXJyKQorCWVyciA9IHBjbWNpYV9sb29wX3R1cGxlKGxpbmssIENJU1RQTF9GVU5DRSwgcGNtY2lhX2dldF9tYWNfY2UsIGRldik7CisKICAgICBpZiAoZXJyKSB7CiAJcHJpbnRrKEtOT1RfWElSQyAibm9kZS1pZCBub3QgZm91bmQgaW4gQ0lTXG4iKTsKIAlnb3RvIGZhaWx1cmU7CiAgICAgfQotICAgIG5vZGVfaWQgPSAoY2lzdHBsX2xhbl9ub2RlX2lkX3QgKilwYXJzZS5mdW5jZS5kYXRhOwotICAgIGlmIChub2RlX2lkLT5uYiAhPSA2KSB7Ci0JcHJpbnRrKEtOT1RfWElSQyAibWFsZm9ybWVkIG5vZGUtaWQgaW4gQ0lTXG4iKTsKLQlnb3RvIGZhaWx1cmU7Ci0gICAgfQotICAgIGZvciAoaT0wOyBpIDwgNjsgaSsrKQotCWRldi0+ZGV2X2FkZHJbaV0gPSBub2RlX2lkLT5pZFtpXTsKIAogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0xMDsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9IQU5ETEVfUFJFU0VOVDsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAgICAgaWYgKGxvY2FsLT5tb2RlbSkgewogCWludCBwYXNzOwogCkBAIC05MTYsMTAgKzg3NCw4IEBACiAJCWdvdG8gcG9ydF9mb3VuZDsKIAl9CiAJbGluay0+aW8uQmFzZVBvcnQxID0gMDsgLyogbGV0IENTIGRlY2lkZSAqLwotCWlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgZXJyKTsKKwlpZiAoKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7Ci0JfQogICAgIH0KICAgcG9ydF9mb3VuZDoKICAgICBpZiAoZXJyKQpAQCAtOTI5LDE5ICs4ODUsMTUgQEAKICAgICAgKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuCU5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAgICAgICogYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogICAgICAqLwotICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkpIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBlcnIpOworICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkpCiAJZ290byBjb25maWdfZXJyb3I7Ci0gICAgfQogCiAgICAgLyoqKioqKioqKioqKioqKioKICAgICAgKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAogICAgICAqIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgogICAgICAqLwotICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkgewotCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBlcnIpOworICAgIGlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkKIAlnb3RvIGNvbmZpZ19lcnJvcjsKLSAgICB9CiAKICAgICBpZiAobG9jYWwtPmRpbmdvKSB7CiAJY29uZl9yZWdfdCByZWc7CkBAIC05NTYsMTcgKzkwOCwxMyBAQAogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0lPQkFTRV8wOwogCXJlZy5WYWx1ZSA9IGxpbmstPmlvLkJhc2VQb3J0MiAmIDB4ZmY7Ci0JaWYgKChlcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpKSB7Ci0JICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgZXJyKTsKKwlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpCiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwotCX0KIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19JT0JBU0VfMTsKIAlyZWcuVmFsdWUgPSAobGluay0+aW8uQmFzZVBvcnQyID4+IDgpICYgMHhmZjsKLQlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpIHsKLQkgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBlcnIpOworCWlmICgoZXJyID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7Ci0JfQogCiAJLyogVGhlcmUgaXMgbm8gY29uZmlnIGVudHJ5IGZvciB0aGUgRXRoZXJuZXQgcGFydCB3aGljaAogCSAqIGlzIGF0IDB4MDgwMC4gU28gd2UgYWxsb2NhdGUgYSB3aW5kb3cgaW50byB0aGUgYXR0cmlidXRlCkBAIC05NzUsMTcgKzkyMywxNCBAQAogCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKIAlyZXEuQmFzZSA9IHJlcS5TaXplID0gMDsKIAlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCWlmICgoZXJyID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkpIHsKLQkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgZXJyKTsKKwlpZiAoKGVyciA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbGluay0+d2luKSkpCiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwotCX0KKwogCWxvY2FsLT5kaW5nb19jY3IgPSBpb3JlbWFwKHJlcS5CYXNlLDB4MTAwMCkgKyAweDA4MDA7CiAJbWVtLkNhcmRPZmZzZXQgPSAweDA7CiAJbWVtLlBhZ2UgPSAwOwotCWlmICgoZXJyID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKSkgewotCSAgICBjc19lcnJvcihsaW5rLCBNYXBNZW1QYWdlLCBlcnIpOworCWlmICgoZXJyID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7Ci0JfQogCiAJLyogU2V0dXAgdGhlIENDUnM7IHRoZXJlIGFyZSBubyBpbmZvcyBpbiB0aGUgQ0lTIGFib3V0IHRoZSBFdGhlcm5ldAogCSAqIHBhcnQuCkBAIC0xMDQ0LDcgKzk4OSw3IEBACiAJZG9fcmVzZXQoZGV2LCAxKTsgLyogYSBrbHVkZ2UgdG8gbWFrZSB0aGUgY2VtNTYgd29yayAqLwogCiAgICAgbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAogICAgIGlmICgoZXJyPXJlZ2lzdGVyX25ldGRldihkZXYpKSkgewogCXByaW50ayhLTk9UX1hJUkMgInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CkBAIC0xMDc3LDcgKzEwMjIsNyBAQAogc3RhdGljIHZvaWQKIHhpcmMycHNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAicmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmVsZWFzZVxuIik7CiAKIAlpZiAobGluay0+d2luKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwpAQCAtMTE0NCw3ICsxMDg5LDcgQEAKIAlQdXRCeXRlKFhJUkNSRUdfQ1IsIDApOwogICAgIH0KIAotICAgIERFQlVHKDYsICIlczogaW50ZXJydXB0ICVkIGF0ICUjeC5cbiIsIGRldi0+bmFtZSwgaXJxLCBpb2FkZHIpOworICAgIHByX2RlYnVnKCIlczogaW50ZXJydXB0ICVkIGF0ICUjeC5cbiIsIGRldi0+bmFtZSwgaXJxLCBpb2FkZHIpOwogCiAgICAgc2F2ZWRfcGFnZSA9IEdldEJ5dGUoWElSQ1JFR19QUik7CiAgICAgLyogUmVhZCB0aGUgSVNSIHRvIHNlZSB3aGF0cyB0aGUgY2F1c2UgZm9yIHRoZSBpbnRlcnJ1cHQuCkBAIC0xMTU0LDcgKzEwOTksNyBAQAogICAgIGJ5dGVzX3JjdmQgPSAwOwogICBsb29wX2VudHJ5OgogICAgIGlmIChpbnRfc3RhdHVzID09IDB4ZmYpIHsgLyogY2FyZCBtYXkgYmUgZWplY3RlZCAqLwotCURFQlVHKDMsICIlczogaW50ZXJydXB0ICVkIGZvciBkZWFkIGNhcmRcbiIsIGRldi0+bmFtZSwgaXJxKTsKKwlwcl9kZWJ1ZygiJXM6IGludGVycnVwdCAlZCBmb3IgZGVhZCBjYXJkXG4iLCBkZXYtPm5hbWUsIGlycSk7CiAJZ290byBsZWF2ZTsKICAgICB9CiAgICAgZXRoX3N0YXR1cyA9IEdldEJ5dGUoWElSQ1JFR19FU1IpOwpAQCAtMTE2Nyw3ICsxMTEyLDcgQEAKICAgICBQdXRCeXRlKFhJUkNSRUc0MF9UWFNUMCwgMCk7CiAgICAgUHV0Qnl0ZShYSVJDUkVHNDBfVFhTVDEsIDApOwogCi0gICAgREVCVUcoMywgIiVzOiBJU1I9JSMyLjJ4IEVTUj0lIzIuMnggUlNSPSUjMi4yeCBUU1I9JSM0LjR4XG4iLAorICAgIHByX2RlYnVnKCIlczogSVNSPSUjMi4yeCBFU1I9JSMyLjJ4IFJTUj0lIzIuMnggVFNSPSUjNC40eFxuIiwKIAkgIGRldi0+bmFtZSwgaW50X3N0YXR1cywgZXRoX3N0YXR1cywgcnhfc3RhdHVzLCB0eF9zdGF0dXMpOwogCiAgICAgLyoqKioqIHJlY2VpdmUgc2VjdGlvbiAqKioqKiovCkBAIC0xMTc4LDE0ICsxMTIzLDE0IEBACiAJICAgIC8qIHRvbyBtYW55IGJ5dGVzIHJlY2VpdmVkIGR1cmluZyB0aGlzIGludCwgZHJvcCB0aGUgcmVzdCBvZiB0aGUKIAkgICAgICogcGFja2V0cyAqLwogCSAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkgICAgREVCVUcoMiwgIiVzOiBSWCBkcm9wLCB0b28gbXVjaCBkb25lXG4iLCBkZXYtPm5hbWUpOworCSAgICBwcl9kZWJ1ZygiJXM6IFJYIGRyb3AsIHRvbyBtdWNoIGRvbmVcbiIsIGRldi0+bmFtZSk7CiAJfSBlbHNlIGlmIChyc3IgJiBQa3RSeE9rKSB7CiAJICAgIHN0cnVjdCBza19idWZmICpza2I7CiAKIAkgICAgcGt0bGVuID0gR2V0V29yZChYSVJDUkVHMF9SQkMpOwogCSAgICBieXRlc19yY3ZkICs9IHBrdGxlbjsKIAotCSAgICBERUJVRyg1LCAicnNyPSUjMDJ4IHBhY2tldF9sZW5ndGg9JXVcbiIsIHJzciwgcGt0bGVuKTsKKwkgICAgcHJfZGVidWcoInJzcj0lIzAyeCBwYWNrZXRfbGVuZ3RoPSV1XG4iLCByc3IsIHBrdGxlbik7CiAKIAkgICAgc2tiID0gZGV2X2FsbG9jX3NrYihwa3RsZW4rMyk7IC8qIDEgZXh0cmEgc28gd2UgY2FuIHVzZSBpbnN3ICovCiAJICAgIGlmICghc2tiKSB7CkBAIC0xMjUzLDE5ICsxMTk4LDE5IEBACiAJCSAgICBkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCSAgICB9CiAJfSBlbHNlIHsgLyogYmFkIHBhY2tldCAqLwotCSAgICBERUJVRyg1LCAicnNyPSUjMDJ4XG4iLCByc3IpOworCSAgICBwcl9kZWJ1ZygicnNyPSUjMDJ4XG4iLCByc3IpOwogCX0KIAlpZiAocnNyICYgUGt0VG9vTG9uZykgewogCSAgICBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCSAgICBERUJVRygzLCAiJXM6IFBhY2tldCB0b28gbG9uZ1xuIiwgZGV2LT5uYW1lKTsKKwkgICAgcHJfZGVidWcoIiVzOiBQYWNrZXQgdG9vIGxvbmdcbiIsIGRldi0+bmFtZSk7CiAJfQogCWlmIChyc3IgJiBDUkNFcnIpIHsKIAkgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JICAgIERFQlVHKDMsICIlczogQ1JDIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCSAgICBwcl9kZWJ1ZygiJXM6IENSQyBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAJaWYgKHJzciAmIEFsaWduRXJyKSB7CiAJICAgIGRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsgLyogb2theSA/ICovCi0JICAgIERFQlVHKDMsICIlczogQWxpZ25tZW50IGVycm9yXG4iLCBkZXYtPm5hbWUpOworCSAgICBwcl9kZWJ1ZygiJXM6IEFsaWdubWVudCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKIAkvKiBjbGVhciB0aGUgcmVjZWl2ZWQvZHJvcHBlZC9lcnJvciBwYWNrZXQgKi8KQEAgLTEyNzcsNyArMTIyMiw3IEBACiAgICAgaWYgKHJ4X3N0YXR1cyAmIDB4MTApIHsgLyogUmVjZWl2ZSBvdmVycnVuICovCiAJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCVB1dEJ5dGUoWElSQ1JFR19DUiwgQ2xlYXJSeE92cnVuKTsKLQlERUJVRygzLCAicmVjZWl2ZSBvdmVycnVuIGNsZWFyZWRcbiIpOworCXByX2RlYnVnKCJyZWNlaXZlIG92ZXJydW4gY2xlYXJlZFxuIik7CiAgICAgfQogCiAgICAgLyoqKioqIHRyYW5zbWl0IHNlY3Rpb24gKioqKioqLwpAQCAtMTI5MCwxMyArMTIzNSwxMyBAQAogCWlmIChubiA8IG4pIC8qIHJvbGxvdmVyICovCiAJICAgIGRldi0+c3RhdHMudHhfcGFja2V0cyArPSAyNTYgLSBuOwogCWVsc2UgaWYgKG4gPT0gbm4pIHsgLyogaGFwcGVucyBzb21ldGltZXMgLSBkb24ndCBrbm93IHdoeSAqLwotCSAgICBERUJVRygwLCAiUFRSIG5vdCBjaGFuZ2VkP1xuIik7CisJICAgIHByX2RlYnVnKCJQVFIgbm90IGNoYW5nZWQ/XG4iKTsKIAl9IGVsc2UKIAkgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzICs9IGxwLT5sYXN0X3B0cl92YWx1ZSAtIG47CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogICAgIH0KICAgICBpZiAodHhfc3RhdHVzICYgMHgwMDAyKSB7CS8qIEV4ZWNlc3NpdmUgY29sbGlzc2lvbnMgKi8KLQlERUJVRygwLCAidHggcmVzdGFydGVkIGR1ZSB0byBleGVjc3NpdmUgY29sbGlzc2lvbnNcbiIpOworCXByX2RlYnVnKCJ0eCByZXN0YXJ0ZWQgZHVlIHRvIGV4ZWNzc2l2ZSBjb2xsaXNzaW9uc1xuIik7CiAJUHV0Qnl0ZShYSVJDUkVHX0NSLCBSZXN0YXJ0VHgpOyAgLyogcmVzdGFydCB0cmFuc21pdHRlciBwcm9jZXNzICovCiAgICAgfQogICAgIGlmICh0eF9zdGF0dXMgJiAweDAwNDApCkBAIC0xMzE1LDE0ICsxMjYwLDE0IEBACiAJCW1heHJ4X2J5dGVzID0gMjAwMDsKIAkgICAgZWxzZSBpZiAobWF4cnhfYnl0ZXMgPiAyMjAwMCkKIAkJbWF4cnhfYnl0ZXMgPSAyMjAwMDsKLQkgICAgREVCVUcoMSwgInNldCBtYXhyeD0ldSAocmN2ZD0ldSB0aWNrcz0lbHUpXG4iLAorCSAgICBwcl9kZWJ1Zygic2V0IG1heHJ4PSV1IChyY3ZkPSV1IHRpY2tzPSVsdSlcbiIsCiAJCSAgbWF4cnhfYnl0ZXMsIGJ5dGVzX3JjdmQsIGR1cmF0aW9uKTsKIAl9IGVsc2UgaWYgKCFkdXJhdGlvbiAmJiBtYXhyeF9ieXRlcyA8IDIyMDAwKSB7CiAJICAgIC8qIG5vdyBtdWNoIGZhc3RlciAqLwogCSAgICBtYXhyeF9ieXRlcyArPSAyMDAwOwogCSAgICBpZiAobWF4cnhfYnl0ZXMgPiAyMjAwMCkKIAkJbWF4cnhfYnl0ZXMgPSAyMjAwMDsKLQkgICAgREVCVUcoMSwgInNldCBtYXhyeD0ldVxuIiwgbWF4cnhfYnl0ZXMpOworCSAgICBwcl9kZWJ1Zygic2V0IG1heHJ4PSV1XG4iLCBtYXhyeF9ieXRlcyk7CiAJfQogICAgIH0KIApAQCAtMTM3Miw3ICsxMzE3LDcgQEAKICAgICB1bnNpZ25lZCBmcmVlc3BhY2U7CiAgICAgdW5zaWduZWQgcGt0bGVuID0gc2tiLT5sZW47CiAKLSAgICBERUJVRygxLCAiZG9fc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcCkgbGVuPSV1XG4iLAorICAgIHByX2RlYnVnKCJkb19zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKSBsZW49JXVcbiIsCiAJICBza2IsIGRldiwgcGt0bGVuKTsKIAogCkBAIC0xMzk4LDcgKzEzNDMsNyBAQAogICAgIGZyZWVzcGFjZSAmPSAweDdmZmY7CiAgICAgLyogVFJTIGRvZXNuJ3Qgd29yayAtIChpbmRlZWQgaXQgaXMgZWxpbWluYXRlZCB3aXRoIHNpbC1yZXYgMSkgKi8KICAgICBva2F5ID0gcGt0bGVuICsyIDwgZnJlZXNwYWNlOwotICAgIERFQlVHKDIgKyAob2theSA/IDIgOiAwKSwgIiVzOiBhdmFpbC4gdHggc3BhY2U9JXUlc1xuIiwKKyAgICBwcl9kZWJ1ZygiJXM6IGF2YWlsLiB0eCBzcGFjZT0ldSVzXG4iLAogCSAgZGV2LT5uYW1lLCBmcmVlc3BhY2UsIG9rYXkgPyAiIChva2F5KSI6IiAobm90IGVub3VnaCkiKTsKICAgICBpZiAoIW9rYXkpIHsgLyogbm90IGVub3VnaCBzcGFjZSAqLwogCXJldHVybiBORVRERVZfVFhfQlVTWTsgIC8qIHVwcGVyIGxheWVyIG1heSBkZWNpZGUgdG8gcmVxdWV1ZSB0aGlzIHBhY2tldCAqLwpAQCAtMTUwMCw3ICsxNDQ1LDcgQEAKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIERFQlVHKDAsICJkb19jb25maWcoJXApXG4iLCBkZXYpOworICAgIHByX2RlYnVnKCJkb19jb25maWcoJXApXG4iLCBkZXYpOwogICAgIGlmIChtYXAtPnBvcnQgIT0gMjU1ICYmIG1hcC0+cG9ydCAhPSBkZXYtPmlmX3BvcnQpIHsKIAlpZiAobWFwLT5wb3J0ID4gNCkKIAkgICAgcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTI3LDcgKzE0NzIsNyBAQAogICAgIGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPnBfZGV2OwogCi0gICAgREVCVUcoMCwgImRvX29wZW4oJXApXG4iLCBkZXYpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImRvX29wZW4oJXApXG4iLCBkZXYpOwogCiAgICAgLyogQ2hlY2sgdGhhdCB0aGUgUENNQ0lBIGNhcmQgaXMgc3RpbGwgaGVyZS4gKi8KICAgICAvKiBQaHlzaWNhbCBkZXZpY2UgcHJlc2VudCBzaWduYXR1cmUuICovCkBAIC0xNTYxLDcgKzE1MDYsNyBAQAogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogCi0gICAgREVCVUcoMSwgIiVzOiBpb2N0bCglLS42cywgJSMwNHgpICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCisgICAgcHJfZGVidWcoIiVzOiBpb2N0bCglLS42cywgJSMwNHgpICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCiAJICBkZXYtPm5hbWUsIHJxLT5pZnJfaWZybi5pZnJuX25hbWUsIGNtZCwKIAkgIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSwgZGF0YS0+dmFsX2luLCBkYXRhLT52YWxfb3V0KTsKIApAQCAtMTYxMCw3ICsxNTU1LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgdW5zaWduZWQgdmFsdWU7CiAKLSAgICBERUJVRygwLCAiJXM6IGRvX3Jlc2V0KCVwLCVkKVxuIiwgZGV2PyBkZXYtPm5hbWU6ImV0aD8iLCBkZXYsIGZ1bGwpOworICAgIHByX2RlYnVnKCIlczogZG9fcmVzZXQoJXAsJWQpXG4iLCBkZXY/IGRldi0+bmFtZToiZXRoPyIsIGRldiwgZnVsbCk7CiAKICAgICBoYXJkcmVzZXQoZGV2KTsKICAgICBQdXRCeXRlKFhJUkNSRUdfQ1IsIFNvZnRSZXNldCk7IC8qIHNldCAqLwpAQCAtMTY0OCw4ICsxNTkzLDggQEAKICAgICB9CiAgICAgbXNsZWVwKDQwKTsJCQkgICAgIC8qIHdhaXQgNDAgbXNlYyB0byBsZXQgaXQgY29tcGxldGUgKi8KIAotICAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnKSB7CisgICNpZiAwCisgICAgewogCVNlbGVjdFBhZ2UoMCk7CiAJdmFsdWUgPSBHZXRCeXRlKFhJUkNSRUdfRVNSKTsJIC8qIHJlYWQgdGhlIEVTUiAqLwogCXByaW50ayhLRVJOX0RFQlVHICIlczogRVNSIGlzOiAlIzAyeFxuIiwgZGV2LT5uYW1lLCB2YWx1ZSk7CkBAIC0xNjY2LDcgKzE2MTEsNyBAQAogCXZhbHVlIHw9IERpc2FibGVMaW5rUHVsc2U7CiAgICAgUHV0Qnl0ZShYSVJDUkVHMV9FQ1IsIHZhbHVlKTsKICAgI2VuZGlmCi0gICAgREVCVUcoMCwgIiVzOiBFQ1IgaXM6ICUjMDJ4XG4iLCBkZXYtPm5hbWUsIHZhbHVlKTsKKyAgICBwcl9kZWJ1ZygiJXM6IEVDUiBpczogJSMwMnhcbiIsIGRldi0+bmFtZSwgdmFsdWUpOwogCiAgICAgU2VsZWN0UGFnZSgweDQyKTsKICAgICBQdXRCeXRlKFhJUkNSRUc0Ml9TV0MwLCAweDIwKTsgLyogZGlzYWJsZSBzb3VyY2UgaW5zZXJ0aW9uICovCkBAIC0xODQ0LDcgKzE3ODksNyBAQAogCiAgICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCi0gICAgREVCVUcoMCwgImRvX3Bvd2VyZG93biglcClcbiIsIGRldik7CisgICAgcHJfZGVidWcoImRvX3Bvd2VyZG93biglcClcbiIsIGRldik7CiAKICAgICBTZWxlY3RQYWdlKDQpOwogICAgIFB1dEJ5dGUoWElSQ1JFRzRfR1BSMSwgMCk7CSAgICAgLyogY2xlYXIgYml0IDA6IHBvd2VyIGRvd24gKi8KQEAgLTE4NTgsNyArMTgwMyw3IEBACiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+cF9kZXY7CiAKLSAgICBERUJVRygwLCAiZG9fc3RvcCglcClcbiIsIGRldik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZG9fc3RvcCglcClcbiIsIGRldik7CiAKICAgICBpZiAoIWxpbmspCiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKaW5kZXggMjUwZTEwZi4uMzU4OTcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBtZGlvX2dwaW9fYnVzX2RlaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBtZGlvX2dwaW9fYnVzX2RlaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBtZGlvX2dwaW9faW5mbyAqYml0YmFuZyA9IGJ1cy0+cHJpdjsKQEAgLTIzOCw2ICsyMzgsNyBAQAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWRpb19vZmdwaW9fbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtZGlvX29mZ3Bpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAibWRpby1ncGlvIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDliZjJhNmIuLjk2NWFkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtMTk0NCw4ICsxOTQ0LDE1IEBACiAJfQogCiAJLyogUHVsbCBjb21wbGV0ZWQgcGFja2V0cyBvZmYgdGhlIHF1ZXVlIGFuZCByZWNlaXZlIHRoZW0uICovCi0Jd2hpbGUgKChza2IgPSBwcHBfbXBfcmVjb25zdHJ1Y3QocHBwKSkpCi0JCXBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHBwcCwgc2tiKTsKKwl3aGlsZSAoKHNrYiA9IHBwcF9tcF9yZWNvbnN0cnVjdChwcHApKSkgeworCQlpZiAocHNrYl9tYXlfcHVsbChza2IsIDIpKQorCQkJcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUocHBwLCBza2IpOworCQllbHNlIHsKKwkJCSsrcHBwLT5kZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7CisJCX0KKwl9CiAKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHBvZS5jCmluZGV4IDdjYmY2ZjkuLjI1NTk5OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9lLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2UuYwpAQCAtMTExLDkgKzExMSw2IEBACiAJcndsb2NrX3QgaGFzaF9sb2NrOwogfTsKIAotLyogdG8gZWxpbWluYXRlIGEgcmFjZSBidHcgcHBwb2VfZmx1c2hfZGV2IGFuZCBwcHBvZV9yZWxlYXNlICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZsdXNoX2xvY2spOwotCiAvKgogICogUFBQb0UgY291bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBzdGFnZXM6CiAgKiAxKSBEaXNjb3Zlcnkgc3RhZ2UgKHRvIG9idGFpbiByZW1vdGUgTUFDIGFuZCBTZXNzaW9uIElEKQpAQCAtMzAzLDQ1ICszMDAsNDggQEAKIAl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgUFBQT0VfSEFTSF9TSVpFOyBpKyspIHsKIAkJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcG4tPmhhc2hfdGFibGVbaV07CisJCXN0cnVjdCBzb2NrICpzazsKIAotCQl3aGlsZSAocG8gIT0gTlVMTCkgewotCQkJc3RydWN0IHNvY2sgKnNrOwotCQkJaWYgKHBvLT5wcHBvZV9kZXYgIT0gZGV2KSB7CisJCXdoaWxlIChwbykgeworCQkJd2hpbGUgKHBvICYmIHBvLT5wcHBvZV9kZXYgIT0gZGV2KSB7CiAJCQkJcG8gPSBwby0+bmV4dDsKLQkJCQljb250aW51ZTsKIAkJCX0KKworCQkJaWYgKCFwbykKKwkJCQlicmVhazsKKwogCQkJc2sgPSBza19wcHBveChwbyk7Ci0JCQlzcGluX2xvY2soJmZsdXNoX2xvY2spOwotCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7Ci0JCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7Ci0JCQlkZXZfcHV0KGRldik7CiAKIAkJCS8qIFdlIGFsd2F5cyBncmFiIHRoZSBzb2NrZXQgbG9jaywgZm9sbG93ZWQgYnkgdGhlCi0JCQkgKiBoYXNoX2xvY2ssIGluIHRoYXQgb3JkZXIuICBTaW5jZSB3ZSBzaG91bGQKLQkJCSAqIGhvbGQgdGhlIHNvY2sgbG9jayB3aGlsZSBkb2luZyBhbnkgdW5iaW5kaW5nLAotCQkJICogd2UgbmVlZCB0byByZWxlYXNlIHRoZSBsb2NrIHdlJ3JlIGhvbGRpbmcuCi0JCQkgKiBIb2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBzb2NrIHNvIGl0IGRvZXNuJ3QgZGlzYXBwZWFyCi0JCQkgKiBhcyB3ZSdyZSBqdW1waW5nIGJldHdlZW4gbG9ja3MuCisJCQkgKiBoYXNoX2xvY2ssIGluIHRoYXQgb3JkZXIuICBTaW5jZSB3ZSBzaG91bGQgaG9sZCB0aGUKKwkJCSAqIHNvY2sgbG9jayB3aGlsZSBkb2luZyBhbnkgdW5iaW5kaW5nLCB3ZSBuZWVkIHRvCisJCQkgKiByZWxlYXNlIHRoZSBsb2NrIHdlJ3JlIGhvbGRpbmcuICBIb2xkIGEgcmVmZXJlbmNlIHRvCisJCQkgKiB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhciBhcyB3ZSdyZSBqdW1waW5nCisJCQkgKiBiZXR3ZWVuIGxvY2tzLgogCQkJICovCiAKIAkJCXNvY2tfaG9sZChzayk7Ci0KIAkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlsb2NrX3NvY2soc2spOwogCi0JCQlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgeworCQkJaWYgKHBvLT5wcHBvZV9kZXYgPT0gZGV2CisJCQkgICAgJiYgc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgewogCQkJCXBwcG94X3VuYmluZF9zb2NrKHNrKTsKIAkJCQlzay0+c2tfc3RhdGUgPSBQUFBPWF9aT01CSUU7CiAJCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CisJCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CisJCQkJZGV2X3B1dChkZXYpOwogCQkJfQogCiAJCQlyZWxlYXNlX3NvY2soc2spOwogCQkJc29ja19wdXQoc2spOwogCi0JCQkvKiBSZXN0YXJ0IHNjYW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGhhc2ggY2hhaW4uCi0JCQkgKiBXaGlsZSB0aGUgbG9jayB3YXMgZHJvcHBlZCB0aGUgY2hhaW4gY29udGVudHMgbWF5Ci0JCQkgKiBoYXZlIGNoYW5nZWQuCisJCQkvKiBSZXN0YXJ0IHRoZSBwcm9jZXNzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50CisJCQkgKiBoYXNoIGNoYWluLiBXZSBkcm9wcGVkIGxvY2tzIHNvIHRoZSB3b3JsZCBtYXkgaGF2ZQorCQkJICogY2hhbmdlIGZyb20gdW5kZXJuZWF0aCB1cy4KIAkJCSAqLworCisJCQlCVUdfT04ocHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSkgPT0gTlVMTCk7CiAJCQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJCXBvID0gcG4tPmhhc2hfdGFibGVbaV07CiAJCX0KQEAgLTM4OCwxMSArMzg4LDE2IEBACiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBwcHBveF9zb2NrICpyZWxheV9wbzsKIAorCS8qIEJhY2tsb2cgcmVjZWl2ZS4gU2VtYW50aWNzIG9mIGJhY2tsb2cgcmN2IHByZWNsdWRlIGFueSBjb2RlIGZyb20KKwkgKiBleGVjdXRpbmcgaW4gbG9ja19zb2NrKCkvcmVsZWFzZV9zb2NrKCkgYm91bmRzOyBtZWFuaW5nIHNrLT5za19zdGF0ZQorCSAqIGNhbid0IGNoYW5nZS4KKwkgKi8KKwogCWlmIChzay0+c2tfc3RhdGUgJiBQUFBPWF9CT1VORCkgewogCQlwcHBfaW5wdXQoJnBvLT5jaGFuLCBza2IpOwogCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfUkVMQVkpIHsKLQkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKGRldl9uZXQocG8tPnBwcG9lX2RldiksCi0JCQkJCQkmcG8tPnBwcG9lX3JlbGF5KTsKKwkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKHNvY2tfbmV0KHNrKSwKKwkJCQkJICAgICZwby0+cHBwb2VfcmVsYXkpOwogCQlpZiAocmVsYXlfcG8gPT0gTlVMTCkKIAkJCWdvdG8gYWJvcnRfa2ZyZWU7CiAKQEAgLTQ0Nyw2ICs0NTIsMTAgQEAKIAkJZ290byBkcm9wOwogCiAJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKKworCS8qIE5vdGUgdGhhdCBnZXRfaXRlbSBkb2VzIGEgc29ja19ob2xkKCksIHNvIHNrX3BwcG94KHBvKQorCSAqIGlzIGtub3duIHRvIGJlIHNhZmUuCisJICovCiAJcG8gPSBnZXRfaXRlbShwbiwgcGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKIAlpZiAoIXBvKQogCQlnb3RvIGRyb3A7CkBAIC01NjEsNiArNTcwLDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CiAJc3RydWN0IHBwcG9lX25ldCAqcG47CisJc3RydWN0IG5ldCAqbmV0ID0gTlVMTDsKIAogCWlmICghc2spCiAJCXJldHVybiAwOwpAQCAtNTcxLDQ0ICs1ODEsMjggQEAKIAkJcmV0dXJuIC1FQkFERjsKIAl9CiAKKwlwbyA9IHBwcG94X3NrKHNrKTsKKworCWlmIChzay0+c2tfc3RhdGUgJiAoUFBQT1hfQ09OTkVDVEVEIHwgUFBQT1hfQk9VTkQpKSB7CisJCWRldl9wdXQocG8tPnBwcG9lX2Rldik7CisJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOworCX0KKwogCXBwcG94X3VuYmluZF9zb2NrKHNrKTsKIAogCS8qIFNpZ25hbCB0aGUgZGVhdGggb2YgdGhlIHNvY2tldC4gKi8KIAlzay0+c2tfc3RhdGUgPSBQUFBPWF9ERUFEOwogCi0JLyoKLQkgKiBwcHBvZV9mbHVzaF9kZXYgY291bGQgbGVhZCB0byBhIHJhY2Ugd2l0aAotCSAqIHRoaXMgcm91dGluZSBzbyB3ZSB1c2UgZmx1c2hfbG9jayB0byBlbGltaW5hdGUKLQkgKiBzdWNoIGEgY2FzZSAod2Ugb25seSBuZWVkIHBlci1uZXQgc3BlY2lmaWMgZGF0YSkKLQkgKi8KLQlzcGluX2xvY2soJmZsdXNoX2xvY2spOwotCXBvID0gcHBwb3hfc2soc2spOwotCWlmICghcG8tPnBwcG9lX2RldikgewotCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7Ci0JCWdvdG8gb3V0OwotCX0KLQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KHBvLT5wcHBvZV9kZXYpKTsKLQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CisJbmV0ID0gc29ja19uZXQoc2spOworCXBuID0gcHBwb2VfcGVybmV0KG5ldCk7CiAKIAkvKgogCSAqIHByb3RlY3QgInBvIiBmcm9tIGNvbmN1cnJlbnQgdXBkYXRlcwogCSAqIG9uIHBwcG9lX2ZsdXNoX2RldgogCSAqLwotCXdyaXRlX2xvY2tfYmgoJnBuLT5oYXNoX2xvY2spOworCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlLAorCQkgICAgcG8tPnBwcG9lX2lmaW5kZXgpOwogCi0JcG8gPSBwcHBveF9zayhzayk7Ci0JaWYgKHN0YWdlX3Nlc3Npb24ocG8tPnBwcG9lX3BhLnNpZCkpCi0JCV9fZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsCi0JCQkJcG8tPnBwcG9lX2lmaW5kZXgpOwotCi0JaWYgKHBvLT5wcHBvZV9kZXYpIHsKLQkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKLQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7Ci0JfQotCi0Jd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKLQotb3V0OgogCXNvY2tfb3JwaGFuKHNrKTsKIAlzb2NrLT5zayA9IE5VTEw7CiAKQEAgLTYyNSw4ICs2MTksOSBAQAogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3AgPSAoc3RydWN0IHNvY2thZGRyX3BwcG94ICopdXNlcnZhZGRyOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCXN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7CiAJaW50IGVycm9yOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTY1MiwxMiArNjQ3LDE0IEBACiAJLyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqLwogCWlmIChzdGFnZV9zZXNzaW9uKHBvLT5wcHBvZV9wYS5zaWQpKSB7CiAJCXBwcG94X3VuYmluZF9zb2NrKHNrKTsKKwkJcG4gPSBwcHBvZV9wZXJuZXQoc29ja19uZXQoc2spKTsKKwkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCisJCQkgICAgcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwogCQlpZiAocG8tPnBwcG9lX2RldikgewotCQkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7Ci0JCQlkZWxldGVfaXRlbShwbiwgcG8tPnBwcG9lX3BhLnNpZCwKLQkJCQlwby0+cHBwb2VfcGEucmVtb3RlLCBwby0+cHBwb2VfaWZpbmRleCk7CiAJCQlkZXZfcHV0KHBvLT5wcHBvZV9kZXYpOworCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CiAJCX0KKwogCQltZW1zZXQoc2tfcHBwb3gocG8pICsgMSwgMCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb3hfc29jaykgLSBzaXplb2Yoc3RydWN0IHNvY2spKTsKIAkJc2stPnNrX3N0YXRlID0gUFBQT1hfTk9ORTsKQEAgLTY2NiwxNiArNjYzLDE1IEBACiAJLyogUmUtYmluZCBpbiBzZXNzaW9uIHN0YWdlIG9ubHkgKi8KIAlpZiAoc3RhZ2Vfc2Vzc2lvbihzcC0+c2FfYWRkci5wcHBvZS5zaWQpKSB7CiAJCWVycm9yID0gLUVOT0RFVjsKLQkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKHNvY2tfbmV0KHNrKSwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKKwkJbmV0ID0gc29ja19uZXQoc2spOworCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUobmV0LCBzcC0+c2FfYWRkci5wcHBvZS5kZXYpOwogCQlpZiAoIWRldikKLQkJCWdvdG8gZW5kOworCQkJZ290byBlcnJfcHV0OwogCiAJCXBvLT5wcHBvZV9kZXYgPSBkZXY7CiAJCXBvLT5wcHBvZV9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOwotCQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwkJcG4gPSBwcHBvZV9wZXJuZXQobmV0KTsKIAkJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKLQkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlnb3RvIGVycl9wdXQ7CiAJCX0KIApAQCAtNjgzLDYgKzY3OSw3IEBACiAJCSAgICAgICAmc3AtPnNhX2FkZHIucHBwb2UsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTsKIAorCQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJZXJyb3IgPSBfX3NldF9pdGVtKHBuLCBwbyk7CiAJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCWlmIChlcnJvciA8IDApCkBAIC02OTYsOCArNjkzLDExIEBACiAJCXBvLT5jaGFuLm9wcyA9ICZwcHBvZV9jaGFuX29wczsKIAogCQllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChkZXZfbmV0KGRldiksICZwby0+Y2hhbik7Ci0JCWlmIChlcnJvcikKKwkJaWYgKGVycm9yKSB7CisJCQlkZWxldGVfaXRlbShwbiwgcG8tPnBwcG9lX3BhLnNpZCwKKwkJCQkgICAgcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwogCQkJZ290byBlcnJfcHV0OworCQl9CiAKIAkJc2stPnNrX3N0YXRlID0gUFBQT1hfQ09OTkVDVEVEOwogCX0KQEAgLTkxNSw2ICs5MTUsMTQgQEAKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKIAlpbnQgZGF0YV9sZW4gPSBza2ItPmxlbjsKIAorCS8qIFRoZSBoaWdoZXItbGV2ZWwgUFBQIGNvZGUgKHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSkgZW5zdXJlcyB0aGUgUFBQCisJICogeG1pdCBvcGVyYXRpb25zIGNvbmNsdWRlIHByaW9yIHRvIGFuIHVucmVnaXN0cmF0aW9uIGNhbGwuICBUaHVzCisJICogc2stPnNrX3N0YXRlIGNhbm5vdCBjaGFuZ2UsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gbG9ja19zb2NrKCkuCisJICogQnV0LCB3ZSBhbHNvIGNhbid0IGRvIGEgbG9ja19zb2NrIHNpbmNlIHRoYXQgaW50cm9kdWNlcyBhIHBvdGVudGlhbAorCSAqIGRlYWRsb2NrIGFzIHdlJ2QgcmV2ZXJzZSB0aGUgbG9jayBvcmRlcmluZyB1c2VkIHdoZW4gY2FsbGluZworCSAqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKS4KKwkgKi8KKwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpKQogCQlnb3RvIGFib3J0OwogCkBAIC05NDQsNyArOTUyLDYgQEAKIAkJCXBvLT5wcHBvZV9wYS5yZW1vdGUsIE5VTEwsIGRhdGFfbGVuKTsKIAogCWRldl9xdWV1ZV94bWl0KHNrYik7Ci0KIAlyZXR1cm4gMTsKIAogYWJvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDNlYzZlODUuLmMyMzgzYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC05NSw2ICs5NSw3IEBACiAKIAkvKiBNaXNjLiBzdHVmZiAqLwogCU1BSUxCT1hfQ09VTlQgPSAxNiwKKwlNQUlMQk9YX1RJTUVPVVQgPSA1LAogCiAJUFJPQ19BRERSX1JEWSA9ICgxIDw8IDMxKSwKIAlQUk9DX0FERFJfUiA9ICgxIDw8IDMwKSwKQEAgLTgwMyw2ICs4MDQsMTIgQEAKIAlNQl9DTURfU0VUX1BPUlRfQ0ZHID0gMHgwMDAwMDEyMiwKIAlNQl9DTURfR0VUX1BPUlRfQ0ZHID0gMHgwMDAwMDEyMywKIAlNQl9DTURfR0VUX0xJTktfU1RTID0gMHgwMDAwMDEyNCwKKwlNQl9DTURfU0VUX01HTU5UX1RGS19DVEwgPSAweDAwMDAwMTYwLCAvKiBTZXQgTWdtbnQgVHJhZmZpYyBDb250cm9sICovCisJTUJfU0VUX01QSV9URktfU1RPUCA9ICgxIDw8IDApLAorCU1CX1NFVF9NUElfVEZLX1JFU1VNRSA9ICgxIDw8IDEpLAorCU1CX0NNRF9HRVRfTUdNTlRfVEZLX0NUTCA9IDB4MDAwMDAxNjEsIC8qIEdldCBNZ21udCBUcmFmZmljIENvbnRyb2wgKi8KKwlNQl9HRVRfTVBJX1RGS19TVE9QUEVEID0gKDEgPDwgMCksCisJTUJfR0VUX01QSV9URktfRklGT19FTVBUWSA9ICgxIDw8IDEpLAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwpAQCAtMTE2OCw3ICsxMTc1LDcgQEAKICNkZWZpbmUgUlNTX1JJNiAweDQwCiAjZGVmaW5lIFJTU19SVDYgMHg4MAogCV9fbGUxNiBtYXNrOwotCV9fbGUzMiBoYXNoX2NxX2lkWzI1Nl07CisJdTggaGFzaF9jcV9pZFsxMDI0XTsKIAlfX2xlMzIgaXB2Nl9oYXNoX2tleVsxMF07CiAJX19sZTMyIGlwdjRfaGFzaF9rZXlbNF07CiB9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKQEAgLTE2MDYsNiArMTYxMyw4IEBACiBpbnQgcWxfbWJfYWJvdXRfZncoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogdm9pZCBxbF9saW5rX29uKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIHZvaWQgcWxfbGlua19vZmYoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOworaW50IHFsX21iX3NldF9tZ21udF90cmFmZmljX2N0bChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGNvbnRyb2wpOworaW50IHFsX3dhaXRfZmlmb19lbXB0eShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwppbmRleCA2MTY4MDcxLi5hMmZjNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKQEAgLTMyMCw2ICszMjAsMzcgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CisJCXsKKwkJCXUzMiB1cHBlciA9IChhZGRyWzBdIDw8IDgpIHwgYWRkclsxXTsKKwkJCXUzMiBsb3dlciA9IChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8CisJCQkJCShhZGRyWzRdIDw8IDgpIHwgKGFkZHJbNV0pOworCisJCQlzdGF0dXMgPQorCQkJCXFsX3dhaXRfcmVnX3JkeShxZGV2LAorCQkJCU1BQ19BRERSX0lEWCwgTUFDX0FERFJfTVcsIDApOworCQkJaWYgKHN0YXR1cykKKwkJCQlnb3RvIGV4aXQ7CisJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0lEWCwgKG9mZnNldCsrKSB8CisJCQkJKGluZGV4IDw8IE1BQ19BRERSX0lEWF9TSElGVCkgfAorCQkJCXR5cGUgfCBNQUNfQUREUl9FKTsKKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfREFUQSwgbG93ZXIpOworCQkJc3RhdHVzID0KKwkJCQlxbF93YWl0X3JlZ19yZHkocWRldiwKKwkJCQlNQUNfQUREUl9JRFgsIE1BQ19BRERSX01XLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBleGl0OworCQkJcWxfd3JpdGUzMihxZGV2LCBNQUNfQUREUl9JRFgsIChvZmZzZXQrKykgfAorCQkJCShpbmRleCA8PCBNQUNfQUREUl9JRFhfU0hJRlQpIHwKKwkJCQl0eXBlIHwgTUFDX0FERFJfRSk7CisKKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfREFUQSwgdXBwZXIpOworCQkJc3RhdHVzID0KKwkJCQlxbF93YWl0X3JlZ19yZHkocWRldiwKKwkJCQlNQUNfQUREUl9JRFgsIE1BQ19BRERSX01XLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBleGl0OworCQkJYnJlYWs7CisJCX0KIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKIAkJewogCQkJdTMyIGNhbV9vdXRwdXQ7CkBAIC0zNjUsMTYgKzM5NiwxNCBAQAogCQkJICAgYW5kIHBvc3NpYmx5IHRoZSBmdW5jdGlvbiBpZC4gIFJpZ2h0IG5vdyB3ZSBoYXJkY29kZQogCQkJICAgdGhlIHJvdXRlIGZpZWxkIHRvIE5JQyBjb3JlLgogCQkJICovCi0JCQlpZiAodHlwZSA9PSBNQUNfQUREUl9UWVBFX0NBTV9NQUMpIHsKLQkJCQljYW1fb3V0cHV0ID0gKENBTV9PVVRfUk9VVEVfTklDIHwKLQkJCQkJICAgICAgKHFkZXYtPgotCQkJCQkgICAgICAgZnVuYyA8PCBDQU1fT1VUX0ZVTkNfU0hJRlQpIHwKLQkJCQkJCSgwIDw8IENBTV9PVVRfQ1FfSURfU0hJRlQpKTsKLQkJCQlpZiAocWRldi0+dmxncnApCi0JCQkJCWNhbV9vdXRwdXQgfD0gQ0FNX09VVF9SVjsKLQkJCQkvKiByb3V0ZSB0byBOSUMgY29yZSAqLwotCQkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfREFUQSwgY2FtX291dHB1dCk7Ci0JCQl9CisJCQljYW1fb3V0cHV0ID0gKENBTV9PVVRfUk9VVEVfTklDIHwKKwkJCQkgICAgICAocWRldi0+CisJCQkJICAgICAgIGZ1bmMgPDwgQ0FNX09VVF9GVU5DX1NISUZUKSB8CisJCQkJCSgwIDw8IENBTV9PVVRfQ1FfSURfU0hJRlQpKTsKKwkJCWlmIChxZGV2LT52bGdycCkKKwkJCQljYW1fb3V0cHV0IHw9IENBTV9PVVRfUlY7CisJCQkvKiByb3V0ZSB0byBOSUMgY29yZSAqLworCQkJcWxfd3JpdGUzMihxZGV2LCBNQUNfQUREUl9EQVRBLCBjYW1fb3V0cHV0KTsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBNQUNfQUREUl9UWVBFX1ZMQU46CkBAIC01NDYsMTQgKzU3NSwxNCBAQAogCQl9CiAJY2FzZSBSVF9JRFhfTUNBU1Q6CS8qIFBhc3MgdXAgQWxsIE11bHRpY2FzdCBmcmFtZXMuICovCiAJCXsKLQkJCXZhbHVlID0gUlRfSURYX0RTVF9DQU1fUSB8CS8qIGRlc3QgKi8KKwkJCXZhbHVlID0gUlRfSURYX0RTVF9ERkxUX1EgfAkvKiBkZXN0ICovCiAJCQkgICAgUlRfSURYX1RZUEVfTklDUSB8CS8qIHR5cGUgKi8KIAkJCSAgICAoUlRfSURYX0FMTE1VTFRJX1NMT1QgPDwgUlRfSURYX0lEWF9TSElGVCk7LyogaW5kZXggKi8KIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBSVF9JRFhfTUNBU1RfTUFUQ0g6CS8qIFBhc3MgdXAgbWF0Y2hlZCBNdWx0aWNhc3QgZnJhbWVzLiAqLwogCQl7Ci0JCQl2YWx1ZSA9IFJUX0lEWF9EU1RfQ0FNX1EgfAkvKiBkZXN0ICovCisJCQl2YWx1ZSA9IFJUX0lEWF9EU1RfREZMVF9RIHwJLyogZGVzdCAqLwogCQkJICAgIFJUX0lEWF9UWVBFX05JQ1EgfAkvKiB0eXBlICovCiAJCQkgICAgKFJUX0lEWF9NQ0FTVF9NQVRDSF9TTE9UIDw8IFJUX0lEWF9JRFhfU0hJRlQpOy8qIGluZGV4ICovCiAJCQlicmVhazsKQEAgLTMwNzcsNiArMzEwNiwxMiBAQAogCiBzdGF0aWMgaW50IHFsX3N0YXJ0X3JzcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKKwl1OCBpbml0X2hhc2hfc2VlZFtdID0gezB4NmQsIDB4NWEsIDB4NTYsIDB4ZGEsIDB4MjUsIDB4NWIsIDB4MGUsIDB4YzIsCisJCQkJMHg0MSwgMHg2NywgMHgyNSwgMHgzZCwgMHg0MywgMHhhMywgMHg4ZiwKKwkJCQkweGIwLCAweGQwLCAweGNhLCAweDJiLCAweGNiLCAweGFlLCAweDdiLAorCQkJCTB4MzAsIDB4YjQsIDB4NzcsIDB4Y2IsIDB4MmQsIDB4YTMsIDB4ODAsCisJCQkJMHgzMCwgMHhmMiwgMHgwYywgMHg2YSwgMHg0MiwgMHhiNywgMHgzYiwKKwkJCQkweGJlLCAweGFjLCAweDAxLCAweGZhfTsKIAlzdHJ1Y3QgcmljYiAqcmljYiA9ICZxZGV2LT5yaWNiOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwpAQCAtMzA4NiwyMSArMzEyMSwxNyBAQAogCiAJcmljYi0+YmFzZV9jcSA9IFJTU19MNEs7CiAJcmljYi0+ZmxhZ3MgPQotCSAgICAoUlNTX0w2SyB8IFJTU19MSSB8IFJTU19MQiB8IFJTU19MTSB8IFJTU19SSTQgfCBSU1NfUkk2IHwgUlNTX1JUNCB8Ci0JICAgICBSU1NfUlQ2KTsKLQlyaWNiLT5tYXNrID0gY3B1X3RvX2xlMTYocWRldi0+cnNzX3JpbmdfY291bnQgLSAxKTsKKwkJKFJTU19MNksgfCBSU1NfTEkgfCBSU1NfTEIgfCBSU1NfTE0gfCBSU1NfUlQ0IHwgUlNTX1JUNik7CisJcmljYi0+bWFzayA9IGNwdV90b19sZTE2KCh1MTYpKDB4M2ZmKSk7CiAKIAkvKgogCSAqIEZpbGwgb3V0IHRoZSBJbmRpcmVjdGlvbiBUYWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCWhhc2hfaWRbaV0gPSBpICYgKHFkZXYtPnJzc19yaW5nX2NvdW50IC0gMSk7CisJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKKwkJaGFzaF9pZFtpXSA9IChpICYgKHFkZXYtPnJzc19yaW5nX2NvdW50IC0gMSkpOwogCi0JLyoKLQkgKiBSYW5kb20gdmFsdWVzIGZvciB0aGUgSVB2NiBhbmQgSVB2NCBIYXNoIEtleXMuCi0JICovCi0JZ2V0X3JhbmRvbV9ieXRlcygodm9pZCAqKSZyaWNiLT5pcHY2X2hhc2hfa2V5WzBdLCA0MCk7Ci0JZ2V0X3JhbmRvbV9ieXRlcygodm9pZCAqKSZyaWNiLT5pcHY0X2hhc2hfa2V5WzBdLCAxNik7CisJbWVtY3B5KCh2b2lkICopJnJpY2ItPmlwdjZfaGFzaF9rZXlbMF0sIGluaXRfaGFzaF9zZWVkLCA0MCk7CisJbWVtY3B5KCh2b2lkICopJnJpY2ItPmlwdjRfaGFzaF9rZXlbMF0sIGluaXRfaGFzaF9zZWVkLCAxNik7CiAKIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOwogCkBAIC0zMjM5LDYgKzMyNzAsMTMgQEAKIAlxbF93cml0ZTMyKHFkZXYsIFNQTFRfSERSLCBTUExUX0hEUl9FUCB8CiAJCW1pbihTTUFMTF9CVUZGRVJfU0laRSwgTUFYX1NQTElUX1NJWkUpKTsKIAorCS8qIFNldCBSWCBwYWNrZXQgcm91dGluZyB0byB1c2UgcG9ydC9wY2kgZnVuY3Rpb24gb24gd2hpY2ggdGhlCisJICogcGFja2V0IGFycml2ZWQgb24gaW4gYWRkaXRpb24gdG8gdXN1YWwgZnJhbWUgcm91dGluZy4KKwkgKiBUaGlzIGlzIGhlbHBmdWwgb24gYm9uZGluZyB3aGVyZSBib3RoIGludGVyZmFjZXMgY2FuIGhhdmUKKwkgKiB0aGUgc2FtZSBNQUMgYWRkcmVzcy4KKwkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIFJTVF9GTywgUlNUX0ZPX1JSX01BU0sgfCBSU1RfRk9fUlJfUkNWX0ZVTkNfQ1EpOworCiAJLyogU3RhcnQgdXAgdGhlIHJ4IHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3N0YXJ0X3J4X3JpbmcocWRldiwgJnFkZXYtPnJ4X3JpbmdbaV0pOwpAQCAtMzMxMSw2ICszMzQ5LDEzIEBACiAKIAllbmRfamlmZmllcyA9IGppZmZpZXMgKwogCQltYXgoKHVuc2lnbmVkIGxvbmcpMSwgdXNlY3NfdG9famlmZmllcygzMCkpOworCisJLyogU3RvcCBtYW5hZ2VtZW50IHRyYWZmaWMuICovCisJcWxfbWJfc2V0X21nbW50X3RyYWZmaWNfY3RsKHFkZXYsIE1CX1NFVF9NUElfVEZLX1NUT1ApOworCisJLyogV2FpdCBmb3IgdGhlIE5JQyBhbmQgTUdNTlQgRklGT3MgdG8gZW1wdHkuICovCisJcWxfd2FpdF9maWZvX2VtcHR5KHFkZXYpOworCiAJcWxfd3JpdGUzMihxZGV2LCBSU1RfRk8sIChSU1RfRk9fRlIgPDwgMTYpIHwgUlNUX0ZPX0ZSKTsKIAogCWRvIHsKQEAgLTMzMjYsNiArMzM3MSw4IEBACiAJCXN0YXR1cyA9IC1FVElNRURPVVQ7CiAJfQogCisJLyogUmVzdW1lIG1hbmFnZW1lbnQgdHJhZmZpYy4gKi8KKwlxbF9tYl9zZXRfbWdtbnRfdHJhZmZpY19jdGwocWRldiwgTUJfU0VUX01QSV9URktfUkVTVU1FKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNzA0LDYgKzM3NTEsMTIgQEAKIAlzdGF0dXMgPSBxbF9hZGFwdGVyX3VwKHFkZXYpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXJyb3I7CisKKwkvKiBSZXN0b3JlIHJ4IG1vZGUuICovCisJY2xlYXJfYml0KFFMX0FMTE1VTFRJLCAmcWRldi0+ZmxhZ3MpOworCWNsZWFyX2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKKwlxbGdlX3NldF9tdWx0aWNhc3RfbGlzdChxZGV2LT5uZGV2KTsKKwogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuOwogZXJyb3I6CkBAIC0zODYzLDYgKzM5MTYsOSBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJLyogU2V0IFBDSWUgcmVzZXQgdHlwZSBmb3IgRUVIIHRvIGZ1bmRhbWVudGFsLiAqLworCXBkZXYtPm5lZWRzX2ZyZXNldCA9IDE7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcWRldi0+cmVnX2Jhc2UgPQogCSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpLAogCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOwpAQCAtNDAxNyw2ICs0MDczLDMzIEBACiAJZnJlZV9uZXRkZXYobmRldik7CiB9CiAKKy8qIENsZWFuIHVwIHJlc291cmNlcyB3aXRob3V0IHRvdWNoaW5nIGhhcmR3YXJlLiAqLworc3RhdGljIHZvaWQgcWxfZWVoX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCBpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkgeworCQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKwl9CisKKwlpZiAodGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3Jlc2V0X3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrKTsKKworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrKQorCQluZXRpZl9uYXBpX2RlbCgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKKworCWNsZWFyX2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOworCXFsX3R4X3JpbmdfY2xlYW4ocWRldik7CisJcWxfZnJlZV9yeF9idWZmZXJzKHFkZXYpOworCXFsX3JlbGVhc2VfYWRhcHRlcl9yZXNvdXJjZXMocWRldik7Cit9CisKIC8qCiAgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB3aGVuZXZlcgogICogYSBQQ0kgYnVzIGVycm9yIGlzIGRldGVjdGVkLgpAQCAtNDAyNSwxNyArNDEwOCwyMSBAQAogCQkJCQkgICAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKLQotCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgcGNpX2NoYW5uZWxfaW9fbm9ybWFsOgorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7CisJY2FzZSBwY2lfY2hhbm5lbF9pb19mcm96ZW46CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKQorCQkJcWxfZWVoX2Nsb3NlKG5kZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworCWNhc2UgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlOgorCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiJXM6IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKLQkJcWxfYWRhcHRlcl9kb3duKHFkZXYpOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCX0KIAogCS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLwogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwpAQCAtNDA1MiwyNSArNDEzOSwxNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKKwlwZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQotCiAJcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKLQlxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpOwotCi0JLyogTWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwotCW1lbWNweShuZGV2LT5wZXJtX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5hZGRyX2xlbik7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi0+cGVybV9hZGRyKSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkFmdGVyIHJlc2V0LCBpbnZhbGlkIE1BQyBhZGRyZXNzLlxuIik7Ci0JCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwotCX0KLQogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiB9CiAKQEAgLTQwNzgsMTcgKzQxNTUsMjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBlcnIgPSAwOwogCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KKwlpZiAocWxfYWRhcHRlcl9yZXNldChxZGV2KSkKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgInJlc2V0IEZBSUxFRCFcbiIpOwogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7Ci0JCWlmIChxbF9hZGFwdGVyX3VwKHFkZXYpKSB7CisJCWVyciA9IHFsZ2Vfb3BlbihuZGV2KTsKKwkJaWYgKGVycikgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkJIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJCXJldHVybjsKIAkJfQorCX0gZWxzZSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJIkRldmljZSB3YXMgbm90IHJ1bm5pbmcgcHJpb3IgdG8gRUVILlxuIik7CiAJfQotCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCmluZGV4IGMyZTQzMDcuLmFlYzA1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKQEAgLTQ3MCw3ICs0NzAsOCBAQAogICovCiBzdGF0aWMgaW50IHFsX21haWxib3hfY29tbWFuZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IG1ib3hfcGFyYW1zICptYmNwKQogewotCWludCBzdGF0dXMsIGNvdW50OworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKIAogCiAJLyogQmVnaW4gcG9sbGVkIG1vZGUgZm9yIE1QSSAqLwpAQCAtNDkxLDE0ICs0OTIsMTQgQEAKIAkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZS4gV2UgbG9vcAogCSAqIGhlcmUgYmVjYXVzZSBzb21lIEFFTiBtaWdodCBhcnJpdmUgd2hpbGUKIAkgKiB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgbWFpbGJveCBjb21tYW5kIHRvCi0JICogY29tcGxldGUuIElmIG1vcmUgdGhhbiA1IGFycml2ZSB0aGVuIHdlIGNhbgorCSAqIGNvbXBsZXRlLiBJZiBtb3JlIHRoYW4gNSBzZWNvbmRzIGV4cGlyZSB3ZSBjYW4KIAkgKiBhc3N1bWUgc29tZXRoaW5nIGlzIHdyb25nLiAqLwotCWNvdW50ID0gNTsKKwljb3VudCA9IGppZmZpZXMgKyBIWiAqIE1BSUxCT1hfVElNRU9VVDsKIAlkbyB7CiAJCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gY29tZSBpbi4gKi8KIAkJc3RhdHVzID0gcWxfd2FpdF9tYnhfY21kX2NtcGx0KHFkZXYpOwogCQlpZiAoc3RhdHVzKQotCQkJZ290byBlbmQ7CisJCQljb250aW51ZTsKIAogCQkvKiBQcm9jZXNzIHRoZSBldmVudC4gIElmIGl0J3MgYW4gQUVOLCBpdAogCQkgKiB3aWxsIGJlIGhhbmRsZWQgaW4tbGluZSBvciBhIHdvcmtlcgpAQCAtNTE3LDE1ICs1MTgsMTUgQEAKIAkJCQkJTUJfQ01EX1NUU19HT09EKSB8fAogCQkJKChtYmNwLT5tYm94X291dFswXSAmIDB4MDAwMGYwMDApID09CiAJCQkJCU1CX0NNRF9TVFNfSU5UUk1EVCkpCi0JCQlicmVhazsKLQl9IHdoaWxlICgtLWNvdW50KTsKKwkJCWdvdG8gZG9uZTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBjb3VudCkpOwogCi0JaWYgKCFjb3VudCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtYWlsYm94IGNvbXBsZXRlLlxuIik7Ci0JCXN0YXR1cyA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZW5kOwotCX0KKwlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1haWxib3ggY29tcGxldGUuXG4iKTsKKwlzdGF0dXMgPSAtRVRJTUVET1VUOworCWdvdG8gZW5kOworCitkb25lOgogCiAJLyogTm93IHdlIGNhbiBjbGVhciB0aGUgaW50ZXJydXB0IGNvbmRpdGlvbgogCSAqIGFuZCBsb29rIGF0IG91ciBzdGF0dXMuCkBAIC03NjgsNiArNzY5LDk1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAoraW50IHFsX21iX3NldF9tZ21udF90cmFmZmljX2N0bChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGNvbnRyb2wpCit7CisJc3RydWN0IG1ib3hfcGFyYW1zIG1iYzsKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3AgPSAmbWJjOworCWludCBzdGF0dXM7CisKKwltZW1zZXQobWJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtYm94X3BhcmFtcykpOworCisJbWJjcC0+aW5fY291bnQgPSAxOworCW1iY3AtPm91dF9jb3VudCA9IDI7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX1NFVF9NR01OVF9URktfQ1RMOworCW1iY3AtPm1ib3hfaW5bMV0gPSBjb250cm9sOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19HT09EKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0VSUikgeworCQkvKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBmaXJtd2FyZSBpcworCQkgKiBhbHJlYWR5IGluIHRoZSBzdGF0ZSB3ZSBhcmUgdHJ5aW5nIHRvCisJCSAqIGNoYW5nZSBpdCB0by4KKwkJICovCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiQ29tbWFuZCBwYXJhbWV0ZXJzIG1ha2Ugbm8gY2hhbmdlLlxuIik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHRoZSBtYWlsYm94IGNvbW1hbmQgc3RhdHVzLiAqLworc3RhdGljIGludCBxbF9tYl9nZXRfbWdtbnRfdHJhZmZpY19jdGwoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1czsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisJKmNvbnRyb2wgPSAwOworCisJbWJjcC0+aW5fY291bnQgPSAxOworCW1iY3AtPm91dF9jb3VudCA9IDE7CisKKwltYmNwLT5tYm94X2luWzBdID0gTUJfQ01EX0dFVF9NR01OVF9URktfQ1RMOworCisJc3RhdHVzID0gcWxfbWFpbGJveF9jb21tYW5kKHFkZXYsIG1iY3ApOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19HT09EKSB7CisJCSpjb250cm9sID0gbWJjcC0+bWJveF9pblsxXTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19JTlZMRF9DTUQpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7CisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCQkiRmFpbGVkIHRvIGdldCBNUEkgdHJhZmZpYyBjb250cm9sLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBxbF93YWl0X2ZpZm9fZW1wdHkoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGNvdW50ID0gNTsKKwl1MzIgbWdtbnRfZmlmb19lbXB0eTsKKwl1MzIgbmljX2ZpZm9fZW1wdHk7CisKKwlkbyB7CisJCW5pY19maWZvX2VtcHR5ID0gcWxfcmVhZDMyKHFkZXYsIFNUUykgJiBTVFNfTkZFOworCQlxbF9tYl9nZXRfbWdtbnRfdHJhZmZpY19jdGwocWRldiwgJm1nbW50X2ZpZm9fZW1wdHkpOworCQltZ21udF9maWZvX2VtcHR5ICY9IE1CX0dFVF9NUElfVEZLX0ZJRk9fRU1QVFk7CisJCWlmIChuaWNfZmlmb19lbXB0eSAmJiBtZ21udF9maWZvX2VtcHR5KQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxMDApOworCX0gd2hpbGUgKGNvdW50LS0gPiAwKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKwogLyogQVBJIGNhbGxlZCBpbiB3b3JrIHRocmVhZCBjb250ZXh0IHRvIHNldCBuZXcgVFgvUlgKICAqIG1heGltdW0gZnJhbWUgc2l6ZSB2YWx1ZXMgdG8gbWF0Y2ggTVRVLgogICovCkBAIC04NzYsNiArOTY2LDggQEAKIAlpbnQgZXJyID0gMDsKIAogCXJ0bmxfbG9jaygpOworCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGZvciBNUEkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikpOwogCiAJd2hpbGUgKHFsX3JlYWQzMihxZGV2LCBTVFMpICYgU1RTX1BJKSB7CiAJCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CkBAIC04ODgsNiArOTgwLDggQEAKIAkJCWJyZWFrOwogCX0KIAorCS8qIEVuZCBwb2xsZWQgbW9kZSBmb3IgTVBJICovCisJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpIHwgSU5UUl9NQVNLX1BJKTsKIAlydG5sX3VubG9jaygpOwogCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IDdkZmNiNTguLjhiMTRjNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAKIAlpbnQgYmFyID0gMDsKIAl1MTYgKmFkcnA7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgdmVyc2lvbik7CisJcHJpbnRrKCIlc1xuIiwgdmVyc2lvbik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNTBjNmEzYy4uMGZlMmZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xMTUsNyArMTE1LDkgQEAKIAlSVExfR0lHQV9NQUNfVkVSXzIyID0gMHgxNiwgLy8gODE2OEMKIAlSVExfR0lHQV9NQUNfVkVSXzIzID0gMHgxNywgLy8gODE2OENQCiAJUlRMX0dJR0FfTUFDX1ZFUl8yNCA9IDB4MTgsIC8vIDgxNjhDUAotCVJUTF9HSUdBX01BQ19WRVJfMjUgPSAweDE5ICAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjUgPSAweDE5LCAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjYgPSAweDFhLCAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjcgPSAweDFiICAvLyA4MTY4RFAKIH07CiAKICNkZWZpbmUgX1IoTkFNRSxNQUMsTUFTSykgXApAQCAtMTUwLDcgKzE1Miw5IEBACiAJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCiAJX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfR0lHQV9NQUNfVkVSXzIzLCAweGZmN2UxODgwKSwgLy8gUENJLUUKIAlfUigiUlRMODE2OGNwLzgxMTFjcCIsCVJUTF9HSUdBX01BQ19WRVJfMjQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApICAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNywgMHhmZjdlMTg4MCkgIC8vIFBDSS1FCiB9OwogI3VuZGVmIF9SCiAKQEAgLTI1Myw2ICsyNTcsMTMgQEAKIAlEQkdfUkVHCQkJPSAweGQxLAogI2RlZmluZQlGSVhfTkFLXzEJCQkoMSA8PCA0KQogI2RlZmluZQlGSVhfTkFLXzIJCQkoMSA8PCAzKQorCUVGVVNFQVIJCQk9IDB4ZGMsCisjZGVmaW5lCUVGVVNFQVJfRkxBRwkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJRUZVU0VBUl9XUklURV9DTUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUJRUZVU0VBUl9SRUFEX0NNRAkJMHgwMDAwMDAwMAorI2RlZmluZQlFRlVTRUFSX1JFR19NQVNLCQkweDAzZmYKKyNkZWZpbmUJRUZVU0VBUl9SRUdfU0hJRlQJCTgKKyNkZWZpbmUJRUZVU0VBUl9EQVRBX01BU0sJCTB4ZmYKIH07CiAKIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewpAQCAtNTY4LDYgKzU3OSwxNCBAQAogCW1kaW9fd3JpdGUoaW9hZGRyLCByZWdfYWRkciwgbWRpb19yZWFkKGlvYWRkciwgcmVnX2FkZHIpIHwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBtZGlvX3BsdXNfbWludXModm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgaW50IHAsIGludCBtKQoreworCWludCB2YWw7CisKKwl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCByZWdfYWRkcik7CisJbWRpb193cml0ZShpb2FkZHIsIHJlZ19hZGRyLCAodmFsIHwgcCkgJiB+bSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKIAkJCSAgIGludCB2YWwpCiB7CkBAIC02NTEsNiArNjcwLDI0IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCitzdGF0aWMgdTggcnRsODE2OGRfZWZ1c2VfcmVhZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyKQoreworCXU4IHZhbHVlID0gMHhmZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCVJUTF9XMzIoRUZVU0VBUiwgKHJlZ19hZGRyICYgRUZVU0VBUl9SRUdfTUFTSykgPDwgRUZVU0VBUl9SRUdfU0hJRlQpOworCisJZm9yIChpID0gMDsgaSA8IDMwMDsgaSsrKSB7CisJCWlmIChSVExfUjMyKEVGVVNFQVIpICYgRUZVU0VBUl9GTEFHKSB7CisJCQl2YWx1ZSA9IFJUTF9SMzIoRUZVU0VBUikgJiBFRlVTRUFSX0RBVEFfTUFTSzsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwogc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCVJUTF9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CkBAIC05OTIsNyArMTAyOSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJdHAtPnZsZ3JwID0gZ3JwOwotCWlmICh0cC0+dmxncnApCisJLyoKKwkgKiBEbyBub3QgZGlzYWJsZSBSeFZsYW4gb24gODExMFNDZC4KKwkgKi8KKwlpZiAodHAtPnZsZ3JwIHx8ICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkpCiAJCXRwLT5jcF9jbWQgfD0gUnhWbGFuOwogCWVsc2UKIAkJdHAtPmNwX2NtZCAmPSB+UnhWbGFuOwpAQCAtMTI0Myw3ICsxMjgzLDEwIEBACiAJCWludCBtYWNfdmVyc2lvbjsKIAl9IG1hY19pbmZvW10gPSB7CiAJCS8qIDgxNjhEIGZhbWlseS4gKi8KLQkJeyAweDdjODAwMDAwLCAweDI4MDAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI1IH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgyODMwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAorCQl7IDB4N2NmMDAwMDAsIDB4MjgxMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjUgfSwKKwkJeyAweDdjODAwMDAwLCAweDI4ODAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI3IH0sCisJCXsgMHg3YzgwMDAwMCwgMHgyODAwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAogCiAJCS8qIDgxNjhDIGZhbWlseS4gKi8KIAkJeyAweDdjZjAwMDAwLCAweDNjYTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI0IH0sCkBAIC0xNjQ4LDc0ICsxNjkxLDkwMyBAQAogCXJ0bDgxNjhjXzNfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4ZF9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsODE2OGRfMV9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQogewotCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CisJc3RhdGljIHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCi0JCXsgMHgwOSwgMHgyNzcwIH0sCi0JCXsgMHgwOCwgMHgwNGQwIH0sCi0JCXsgMHgwYiwgMHhhZDE1IH0sCi0JCXsgMHgwYywgMHg1YmYwIH0sCi0JCXsgMHgxYywgMHhmMTAxIH0sCisJCXsgMHgwNiwgMHg0MDY0IH0sCisJCXsgMHgwNywgMHgyODYzIH0sCisJCXsgMHgwOCwgMHgwNTljIH0sCisJCXsgMHgwOSwgMHgyNmI0IH0sCisJCXsgMHgwYSwgMHg2YTE5IH0sCisJCXsgMHgwYiwgMHhkY2M4IH0sCisJCXsgMHgxMCwgMHhmMDZkIH0sCisJCXsgMHgxNCwgMHg3ZjY4IH0sCisJCXsgMHgxOCwgMHg3ZmQ5IH0sCisJCXsgMHgxYywgMHhmMGZmIH0sCisJCXsgMHgxZCwgMHgzZDljIH0sCiAJCXsgMHgxZiwgMHgwMDAzIH0sCi0JCXsgMHgxNCwgMHg5NGQ3IH0sCi0JCXsgMHgxMiwgMHhmNGQ2IH0sCi0JCXsgMHgwOSwgMHhjYTBmIH0sCisJCXsgMHgxMiwgMHhmNDlmIH0sCisJCXsgMHgxMywgMHgwNzBiIH0sCisJCXsgMHgxYSwgMHgwNWFkIH0sCisJCXsgMHgxNCwgMHg5NGMwIH0KKwl9OworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMVtdID0gewogCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MGIsIDB4MGIxMCB9LAotCQl7IDB4MGMsIDB4ZDFmNyB9LAotCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MDYsIDB4NTQ2MSB9LAotCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MDUsIDB4NjY2MiB9LAotCQl7IDB4MWYsIDB4MDAwMCB9LAotCQl7IDB4MTQsIDB4MDA2MCB9LAotCQl7IDB4MWYsIDB4MDAwMCB9LAotCQl7IDB4MGQsIDB4ZjhhMCB9LAorCQl7IDB4MDYsIDB4NTU2MSB9LAogCQl7IDB4MWYsIDB4MDAwNSB9LAotCQl7IDB4MDUsIDB4ZmZjMiB9CisJCXsgMHgwNSwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0KKwl9OworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMltdID0geworCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ZmZjMiB9LAorCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ODAwMCB9LAorCQl7IDB4MDYsIDB4ZjhmOSB9LAorCQl7IDB4MDYsIDB4ZmFlZiB9LAorCQl7IDB4MDYsIDB4NTllZSB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4MDBlMCB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4N2Q1OSB9LAorCQl7IDB4MDYsIDB4MGZlZiB9LAorCQl7IDB4MDYsIDB4MDEzOSB9LAorCQl7IDB4MDYsIDB4MDI5ZSB9LAorCQl7IDB4MDYsIDB4MDZlZiB9LAorCQl7IDB4MDYsIDB4MTAzOSB9LAorCQl7IDB4MDYsIDB4MDg5ZiB9LAorCQl7IDB4MDYsIDB4MmFlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4MDFlMCB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4N2Q1OCB9LAorCQl7IDB4MDYsIDB4NDA5ZSB9LAorCQl7IDB4MDYsIDB4MGYzOSB9LAorCQl7IDB4MDYsIDB4NDZhYSB9LAorCQl7IDB4MDYsIDB4MGJiZiB9LAorCQl7IDB4MDYsIDB4ODI5MCB9LAorCQl7IDB4MDYsIDB4ZDY4MiB9LAorCQl7IDB4MDYsIDB4OTgwMiB9LAorCQl7IDB4MDYsIDB4MDE0ZiB9LAorCQl7IDB4MDYsIDB4YWUwOSB9LAorCQl7IDB4MDYsIDB4YmY4MiB9LAorCQl7IDB4MDYsIDB4OThkNiB9LAorCQl7IDB4MDYsIDB4ODJhMCB9LAorCQl7IDB4MDYsIDB4MDIwMSB9LAorCQl7IDB4MDYsIDB4NGZlZiB9LAorCQl7IDB4MDYsIDB4OTVmZSB9LAorCQl7IDB4MDYsIDB4ZmRmYyB9LAorCQl7IDB4MDYsIDB4MDVmOCB9LAorCQl7IDB4MDYsIDB4ZjlmYSB9LAorCQl7IDB4MDYsIDB4ZWVmOCB9LAorCQl7IDB4MDYsIDB4ZWEwMCB9LAorCQl7IDB4MDYsIDB4ZWVmOCB9LAorCQl7IDB4MDYsIDB4ZWIwMCB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4N2NlMyB9LAorCQl7IDB4MDYsIDB4Zjg3ZCB9LAorCQl7IDB4MDYsIDB4YTUxMSB9LAorCQl7IDB4MDYsIDB4MTExMiB9LAorCQl7IDB4MDYsIDB4ZDI0MCB9LAorCQl7IDB4MDYsIDB4ZDY0NCB9LAorCQl7IDB4MDYsIDB4NDQwMiB9LAorCQl7IDB4MDYsIDB4ODIxNyB9LAorCQl7IDB4MDYsIDB4ZDJhMCB9LAorCQl7IDB4MDYsIDB4ZDZhYSB9LAorCQl7IDB4MDYsIDB4YWEwMiB9LAorCQl7IDB4MDYsIDB4ODIxNyB9LAorCQl7IDB4MDYsIDB4YWUwZiB9LAorCQl7IDB4MDYsIDB4YTU0NCB9LAorCQl7IDB4MDYsIDB4NDQwMiB9LAorCQl7IDB4MDYsIDB4YWU0ZCB9LAorCQl7IDB4MDYsIDB4YTVhYSB9LAorCQl7IDB4MDYsIDB4YWEwMiB9LAorCQl7IDB4MDYsIDB4YWU0NyB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGZlZSB9LAorCQl7IDB4MDYsIDB4ODM0YyB9LAorCQl7IDB4MDYsIDB4MGZlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZmZlZSB9LAorCQl7IDB4MDYsIDB4ODM0YiB9LAorCQl7IDB4MDYsIDB4ZmZlMCB9LAorCQl7IDB4MDYsIDB4ODMzMCB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzE1OCB9LAorCQl7IDB4MDYsIDB4ZmVlNCB9LAorCQl7IDB4MDYsIDB4Zjg4YSB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4OGJlMCB9LAorCQl7IDB4MDYsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzM1OSB9LAorCQl7IDB4MDYsIDB4MGZlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGMyNCB9LAorCQl7IDB4MDYsIDB4NWFmMCB9LAorCQl7IDB4MDYsIDB4MWUxMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGNlNSB9LAorCQl7IDB4MDYsIDB4Zjg4ZCB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4MTBlNCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDA5ZiB9LAorCQl7IDB4MDYsIDB4MGFlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4YTAxMCB9LAorCQl7IDB4MDYsIDB4YTVlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDFlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwNSB9LAorCQl7IDB4MDYsIDB4OWU5YSB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDQ5ZSB9LAorCQl7IDB4MDYsIDB4MTBlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMyB9LAorCQl7IDB4MDYsIDB4OWUwZiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDE5ZSB9LAorCQl7IDB4MDYsIDB4MDVhZSB9LAorCQl7IDB4MDYsIDB4MGNhZiB9LAorCQl7IDB4MDYsIDB4ODFmOCB9LAorCQl7IDB4MDYsIDB4YWY4MSB9LAorCQl7IDB4MDYsIDB4YTNhZiB9LAorCQl7IDB4MDYsIDB4ODFkYyB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlZSB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0OSB9LAorCQl7IDB4MDYsIDB4MDBlMCB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4MTBlNCB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4NTgwMSB9LAorCQl7IDB4MDYsIDB4OWZlYSB9LAorCQl7IDB4MDYsIDB4ZDAwMCB9LAorCQl7IDB4MDYsIDB4ZDE4MCB9LAorCQl7IDB4MDYsIDB4MWY2NiB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4ZWFlMyB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4NWFmOCB9LAorCQl7IDB4MDYsIDB4MWUyMCB9LAorCQl7IDB4MDYsIDB4ZTZmOCB9LAorCQl7IDB4MDYsIDB4ZWFlNSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4ZDMwMiB9LAorCQl7IDB4MDYsIDB4YjNmZSB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4N2NlZiB9LAorCQl7IDB4MDYsIDB4MzI1YiB9LAorCQl7IDB4MDYsIDB4ODBlMyB9LAorCQl7IDB4MDYsIDB4Zjg3ZCB9LAorCQl7IDB4MDYsIDB4OWUwMyB9LAorCQl7IDB4MDYsIDB4N2RmZiB9LAorCQl7IDB4MDYsIDB4ZmYwZCB9LAorCQl7IDB4MDYsIDB4NTgxYyB9LAorCQl7IDB4MDYsIDB4NTUxYSB9LAorCQl7IDB4MDYsIDB4NjUxMSB9LAorCQl7IDB4MDYsIDB4YTE5MCB9LAorCQl7IDB4MDYsIDB4ZDNlMiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NDkxYiB9LAorCQl7IDB4MDYsIDB4NTZhYiB9LAorCQl7IDB4MDYsIDB4MDhlZiB9LAorCQl7IDB4MDYsIDB4NTZlNiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTc4MyB9LAorCQl7IDB4MDYsIDB4NDkxMCB9LAorCQl7IDB4MDYsIDB4ZDE4MCB9LAorCQl7IDB4MDYsIDB4MWY2NiB9LAorCQl7IDB4MDYsIDB4YTAwNCB9LAorCQl7IDB4MDYsIDB4YjllMiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NDllZiB9LAorCQl7IDB4MDYsIDB4NjVlMiB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NGIxYiB9LAorCQl7IDB4MDYsIDB4NTZhYSB9LAorCQl7IDB4MDYsIDB4MGVlZiB9LAorCQl7IDB4MDYsIDB4NTZlNiB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZTc4MyB9LAorCQl7IDB4MDYsIDB4NGJlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4ZTY4MyB9LAorCQl7IDB4MDYsIDB4NGNlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4YTAwMCB9LAorCQl7IDB4MDYsIDB4MGNhZiB9LAorCQl7IDB4MDYsIDB4ODFkYyB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGQxMCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NGRhZSB9LAorCQl7IDB4MDYsIDB4MDQ4MCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NGRlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMyB9LAorCQl7IDB4MDYsIDB4OWUwYiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDQ5ZSB9LAorCQl7IDB4MDYsIDB4MDRlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDJlMCB9LAorCQl7IDB4MDYsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzM1OSB9LAorCQl7IDB4MDYsIDB4MGZlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGMyNCB9LAorCQl7IDB4MDYsIDB4NWFmMCB9LAorCQl7IDB4MDYsIDB4MWUxMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGNlNSB9LAorCQl7IDB4MDYsIDB4Zjg4ZCB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4MzBlMSB9LAorCQl7IDB4MDYsIDB4ODMzMSB9LAorCQl7IDB4MDYsIDB4NjgwMSB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGFlNSB9LAorCQl7IDB4MDYsIDB4Zjg4YiB9LAorCQl7IDB4MDYsIDB4YWUzNyB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwMyB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGNlMSB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MWIwMSB9LAorCQl7IDB4MDYsIDB4OWUwNCB9LAorCQl7IDB4MDYsIDB4YWFhMSB9LAorCQl7IDB4MDYsIDB4YWVhOCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwNCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGYwMCB9LAorCQl7IDB4MDYsIDB4YWVhYiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGY3OCB9LAorCQl7IDB4MDYsIDB4MDM5ZiB9LAorCQl7IDB4MDYsIDB4MTRlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDVkMiB9LAorCQl7IDB4MDYsIDB4NDBkNiB9LAorCQl7IDB4MDYsIDB4NTU1NCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4MTdkMiB9LAorCQl7IDB4MDYsIDB4YTBkNiB9LAorCQl7IDB4MDYsIDB4YmEwMCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4MTdmZSB9LAorCQl7IDB4MDYsIDB4ZmRmYyB9LAorCQl7IDB4MDYsIDB4MDVmOCB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NjBlMSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4NjgwMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NjBlNSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NDhlMSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NTgwZiB9LAorCQl7IDB4MDYsIDB4MWUwMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4ZDAwMCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4NWJiZiB9LAorCQl7IDB4MDYsIDB4ODM1MCB9LAorCQl7IDB4MDYsIDB4ZWY0NiB9LAorCQl7IDB4MDYsIDB4ZGMxOSB9LAorCQl7IDB4MDYsIDB4ZGRkMCB9LAorCQl7IDB4MDYsIDB4MDEwMiB9LAorCQl7IDB4MDYsIDB4ODI1YiB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4NzdlMCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4NjE1OCB9LAorCQl7IDB4MDYsIDB4ZmRlNCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NjFmYyB9LAorCQl7IDB4MDYsIDB4MDRmOSB9LAorCQl7IDB4MDYsIDB4ZmFmYiB9LAorCQl7IDB4MDYsIDB4YzZiZiB9LAorCQl7IDB4MDYsIDB4Zjg0MCB9LAorCQl7IDB4MDYsIDB4YmU4MyB9LAorCQl7IDB4MDYsIDB4NTBhMCB9LAorCQl7IDB4MDYsIDB4MDEwMSB9LAorCQl7IDB4MDYsIDB4MDcxYiB9LAorCQl7IDB4MDYsIDB4ODljZiB9LAorCQl7IDB4MDYsIDB4ZDIwOCB9LAorCQl7IDB4MDYsIDB4ZWJkYiB9LAorCQl7IDB4MDYsIDB4MTliMiB9LAorCQl7IDB4MDYsIDB4ZmJmZiB9LAorCQl7IDB4MDYsIDB4ZmVmZCB9LAorCQl7IDB4MDYsIDB4MDRmOCB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NDhlMSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NjgwOCB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NThmNyB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4ZmMwNCB9LAorCQl7IDB4MDYsIDB4NGQyMCB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NGUyMiB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NGRkZiB9LAorCQl7IDB4MDYsIDB4ZmYwMSB9LAorCQl7IDB4MDYsIDB4NGVkZCB9LAorCQl7IDB4MDYsIDB4ZmYwMSB9LAorCQl7IDB4MDUsIDB4ODNkNCB9LAorCQl7IDB4MDYsIDB4ODAwMCB9LAorCQl7IDB4MDUsIDB4ODNkOCB9LAorCQl7IDB4MDYsIDB4ODA1MSB9LAorCQl7IDB4MDIsIDB4NjAxMCB9LAorCQl7IDB4MDMsIDB4ZGMwMCB9LAorCQl7IDB4MDUsIDB4ZmZmNiB9LAorCQl7IDB4MDYsIDB4MDBmYyB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAwIH0sCisJCXsgMHgwZCwgMHhmODgwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KIAl9OwogCiAJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8wLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8wKSk7CiAKLQlpZiAobWRpb19yZWFkKGlvYWRkciwgMHgwNikgPT0gMHhjNDAwKSB7Ci0JCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8xW10gPSB7CisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwYiwgMHgwMDEwLCAweDAwZWYpOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MGMsIDB4YTIwMCwgMHg1ZDAwKTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMSwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMSkpOworCisJaWYgKHJ0bDgxNjhkX2VmdXNlX3JlYWQoaW9hZGRyLCAweDAxKSA9PSAweGIxKSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjlhIH0sCiAJCQl7IDB4MWYsIDB4MDAwNSB9LAotCQkJeyAweDAxLCAweDAzMDAgfSwKLQkJCXsgMHgxZiwgMHgwMDAwIH0sCi0JCQl7IDB4MTEsIDB4NDAxYyB9LAotCQkJeyAweDE2LCAweDQxMDAgfSwKKwkJCXsgMHgwNSwgMHg4MzMwIH0sCisJCQl7IDB4MDYsIDB4NjY5YSB9LAorCQkJeyAweDFmLCAweDAwMDIgfQorCQl9OworCQlpbnQgdmFsOworCisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisKKwkJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgMHgwZCk7CisKKwkJaWYgKCh2YWwgJiAweDAwZmYpICE9IDB4MDA2YykgeworCQkJdTMyIHNldFtdID0geworCQkJCTB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwKKwkJCQkweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMKKwkJCX07CisJCQlpbnQgaTsKKworCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisKKwkJCXZhbCAmPSAweGZmMDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXQpOyBpKyspCisJCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MGQsIHZhbCB8IHNldFtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJCXsgMHgxZiwgMHgwMDAyIH0sCisJCQl7IDB4MDUsIDB4NjY2MiB9LAogCQkJeyAweDFmLCAweDAwMDUgfSwKLQkJCXsgMHgwNywgMHgwMDEwIH0sCi0JCQl7IDB4MDUsIDB4ODNkYyB9LAotCQkJeyAweDA2LCAweDA4N2QgfSwKLQkJCXsgMHgwNSwgMHg4MzAwIH0sCi0JCQl7IDB4MDYsIDB4MDEwMSB9LAotCQkJeyAweDA2LCAweDA1ZjggfSwKLQkJCXsgMHgwNiwgMHhmOWZhIH0sCi0JCQl7IDB4MDYsIDB4ZmJlZiB9LAotCQkJeyAweDA2LCAweDc5ZTIgfSwKLQkJCXsgMHgwNiwgMHg4MzVmIH0sCi0JCQl7IDB4MDYsIDB4ZTBmOCB9LAotCQkJeyAweDA2LCAweDlhZTEgfSwKLQkJCXsgMHgwNiwgMHhmODliIH0sCi0JCQl7IDB4MDYsIDB4ZWYzMSB9LAotCQkJeyAweDA2LCAweDNiNjUgfSwKLQkJCXsgMHgwNiwgMHhhYTA3IH0sCi0JCQl7IDB4MDYsIDB4ODFlNCB9LAotCQkJeyAweDA2LCAweGY4OWEgfSwKLQkJCXsgMHgwNiwgMHhlNWY4IH0sCi0JCQl7IDB4MDYsIDB4OWJhZiB9LAotCQkJeyAweDA2LCAweDA2YWUgfSwKLQkJCXsgMHgwNSwgMHg4M2RjIH0sCi0JCQl7IDB4MDYsIDB4ODMwMCB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjYyIH0KIAkJfTsKIAotCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0XzEsCi0JCQkgICAgICBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7CisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiAJfQogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMCk7CisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wYXRjaChpb2FkZHIsIDB4MGQsIDB4MDMwMCk7CisJbWRpb19wYXRjaChpb2FkZHIsIDB4MGYsIDB4MDAxMCk7CisKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDAyLCAweDAxMDAsIDB4MDYwMCk7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwMywgMHgwMDAwLCAweGUwMDApOworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8yLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8yKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNjhkXzJfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdGF0aWMgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzBbXSA9IHsKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDA2LCAweDQwNjQgfSwKKwkJeyAweDA3LCAweDI4NjMgfSwKKwkJeyAweDA4LCAweDA1OWMgfSwKKwkJeyAweDA5LCAweDI2YjQgfSwKKwkJeyAweDBhLCAweDZhMTkgfSwKKwkJeyAweDBiLCAweGRjYzggfSwKKwkJeyAweDEwLCAweGYwNmQgfSwKKwkJeyAweDE0LCAweDdmNjggfSwKKwkJeyAweDE4LCAweDdmZDkgfSwKKwkJeyAweDFjLCAweGYwZmYgfSwKKwkJeyAweDFkLCAweDNkOWMgfSwKKwkJeyAweDFmLCAweDAwMDMgfSwKKwkJeyAweDEyLCAweGY0OWYgfSwKKwkJeyAweDEzLCAweDA3MGIgfSwKKwkJeyAweDFhLCAweDA1YWQgfSwKKwkJeyAweDE0LCAweDk0YzAgfSwKKworCQl7IDB4MWYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NTU2MSB9LAorCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4NTU2MSB9CisJfTsKKwlzdGF0aWMgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzFbXSA9IHsKKwkJeyAweDFmLCAweDAwMDUgfSwKKwkJeyAweDA1LCAweGZmYzIgfSwKKwkJeyAweDFmLCAweDAwMDUgfSwKKwkJeyAweDA1LCAweDgwMDAgfSwKKwkJeyAweDA2LCAweGY4ZjkgfSwKKwkJeyAweDA2LCAweGZhZWUgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweDAwZWUgfSwKKwkJeyAweDA2LCAweGY4ZWIgfSwKKwkJeyAweDA2LCAweDAwZTIgfSwKKwkJeyAweDA2LCAweGY4N2MgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweDdkYTUgfSwKKwkJeyAweDA2LCAweDExMTEgfSwKKwkJeyAweDA2LCAweDEyZDIgfSwKKwkJeyAweDA2LCAweDQwZDYgfSwKKwkJeyAweDA2LCAweDQ0NDQgfSwKKwkJeyAweDA2LCAweDAyODEgfSwKKwkJeyAweDA2LCAweGM2ZDIgfSwKKwkJeyAweDA2LCAweGEwZDYgfSwKKwkJeyAweDA2LCAweGFhYWEgfSwKKwkJeyAweDA2LCAweDAyODEgfSwKKwkJeyAweDA2LCAweGM2YWUgfSwKKwkJeyAweDA2LCAweDBmYTUgfSwKKwkJeyAweDA2LCAweDQ0NDQgfSwKKwkJeyAweDA2LCAweDAyYWUgfSwKKwkJeyAweDA2LCAweDRkYTUgfSwKKwkJeyAweDA2LCAweGFhYWEgfSwKKwkJeyAweDA2LCAweDAyYWUgfSwKKwkJeyAweDA2LCAweDQ3YWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRkMGYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRjMGYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRmMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDUxMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRhZmYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRiZmYgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMwZTEgfSwKKwkJeyAweDA2LCAweDgzMzEgfSwKKwkJeyAweDA2LCAweDU4ZmUgfSwKKwkJeyAweDA2LCAweGU0ZjggfSwKKwkJeyAweDA2LCAweDhhZTUgfSwKKwkJeyAweDA2LCAweGY4OGIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMyZTEgfSwKKwkJeyAweDA2LCAweDgzMzMgfSwKKwkJeyAweDA2LCAweDU5MGYgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkMGMgfSwKKwkJeyAweDA2LCAweDI0NWEgfSwKKwkJeyAweDA2LCAweGYwMWUgfSwKKwkJeyAweDA2LCAweDEyZTQgfSwKKwkJeyAweDA2LCAweGY4OGMgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhkYWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRmMTAgfSwKKwkJeyAweDA2LCAweGU0ODMgfSwKKwkJeyAweDA2LCAweDRmZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDAgfSwKKwkJeyAweDA2LCAweDlmMGEgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRmYTAgfSwKKwkJeyAweDA2LCAweDEwYTUgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDEgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDA1OWUgfSwKKwkJeyAweDA2LCAweDlhZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDQgfSwKKwkJeyAweDA2LCAweDllMTAgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDAzOWUgfSwKKwkJeyAweDA2LCAweDBmZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDEgfSwKKwkJeyAweDA2LCAweDllMDUgfSwKKwkJeyAweDA2LCAweGFlMGMgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweGE3YWYgfSwKKwkJeyAweDA2LCAweDgxNTIgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweDhiYWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDQ4MDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDQ5MDAgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDUxMTAgfSwKKwkJeyAweDA2LCAweGU0ODMgfSwKKwkJeyAweDA2LCAweDUxNTggfSwKKwkJeyAweDA2LCAweDAxOWYgfSwKKwkJeyAweDA2LCAweGVhZDAgfSwKKwkJeyAweDA2LCAweDAwZDEgfSwKKwkJeyAweDA2LCAweDgwMWYgfSwKKwkJeyAweDA2LCAweDY2ZTIgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweGViNWEgfSwKKwkJeyAweDA2LCAweGY4MWUgfSwKKwkJeyAweDA2LCAweDIwZTYgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweGViZDMgfSwKKwkJeyAweDA2LCAweDAyYjMgfSwKKwkJeyAweDA2LCAweGZlZTIgfSwKKwkJeyAweDA2LCAweGY4N2MgfSwKKwkJeyAweDA2LCAweGVmMzIgfSwKKwkJeyAweDA2LCAweDViODAgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweDdkOWUgfSwKKwkJeyAweDA2LCAweDAzN2QgfSwKKwkJeyAweDA2LCAweGZmZmYgfSwKKwkJeyAweDA2LCAweDBkNTggfSwKKwkJeyAweDA2LCAweDFjNTUgfSwKKwkJeyAweDA2LCAweDFhNjUgfSwKKwkJeyAweDA2LCAweDExYTEgfSwKKwkJeyAweDA2LCAweDkwZDMgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDQ4ZTMgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweDFiNTYgfSwKKwkJeyAweDA2LCAweGFiMDggfSwKKwkJeyAweDA2LCAweGVmNTYgfSwKKwkJeyAweDA2LCAweGU2ODMgfSwKKwkJeyAweDA2LCAweDQ4ZTcgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweDEwZDEgfSwKKwkJeyAweDA2LCAweDgwMWYgfSwKKwkJeyAweDA2LCAweDY2YTAgfSwKKwkJeyAweDA2LCAweDA0YjkgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDQ4ZTMgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweGVmNjUgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRhZTMgfSwKKwkJeyAweDA2LCAweDgzNGIgfSwKKwkJeyAweDA2LCAweDFiNTYgfSwKKwkJeyAweDA2LCAweGFhMGUgfSwKKwkJeyAweDA2LCAweGVmNTYgfSwKKwkJeyAweDA2LCAweGU2ODMgfSwKKwkJeyAweDA2LCAweDRhZTcgfSwKKwkJeyAweDA2LCAweDgzNGIgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkZTYgfSwKKwkJeyAweDA2LCAweDgzNGMgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRkYTAgfSwKKwkJeyAweDA2LCAweDAwMGMgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweDhiZTAgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweDEwZTQgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweGFlMDQgfSwKKwkJeyAweDA2LCAweDgwZTQgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDAzOWUgfSwKKwkJeyAweDA2LCAweDBiZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDQgfSwKKwkJeyAweDA2LCAweDllMDQgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMyZTEgfSwKKwkJeyAweDA2LCAweDgzMzMgfSwKKwkJeyAweDA2LCAweDU5MGYgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkMGMgfSwKKwkJeyAweDA2LCAweDI0NWEgfSwKKwkJeyAweDA2LCAweGYwMWUgfSwKKwkJeyAweDA2LCAweDEyZTQgfSwKKwkJeyAweDA2LCAweGY4OGMgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhkZTAgfSwKKwkJeyAweDA2LCAweDgzMzAgfSwKKwkJeyAweDA2LCAweGUxODMgfSwKKwkJeyAweDA2LCAweDMxNjggfSwKKwkJeyAweDA2LCAweDAxZTQgfSwKKwkJeyAweDA2LCAweGY4OGEgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhiYWUgfSwKKwkJeyAweDA2LCAweDM3ZWUgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDAzZTAgfSwKKwkJeyAweDA2LCAweDgzNGMgfSwKKwkJeyAweDA2LCAweGUxODMgfSwKKwkJeyAweDA2LCAweDRkMWIgfSwKKwkJeyAweDA2LCAweDAxOWUgfSwKKwkJeyAweDA2LCAweDA0YWEgfSwKKwkJeyAweDA2LCAweGExYWUgfSwKKwkJeyAweDA2LCAweGE4ZWUgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDA0ZWUgfSwKKwkJeyAweDA2LCAweDgzNGYgfSwKKwkJeyAweDA2LCAweDAwYWUgfSwKKwkJeyAweDA2LCAweGFiZTAgfSwKKwkJeyAweDA2LCAweDgzNGYgfSwKKwkJeyAweDA2LCAweDc4MDMgfSwKKwkJeyAweDA2LCAweDlmMTQgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDUgfSwKKwkJeyAweDA2LCAweGQyNDAgfSwKKwkJeyAweDA2LCAweGQ2NTUgfSwKKwkJeyAweDA2LCAweDU0MDIgfSwKKwkJeyAweDA2LCAweDgxYzYgfSwKKwkJeyAweDA2LCAweGQyYTAgfSwKKwkJeyAweDA2LCAweGQ2YmEgfSwKKwkJeyAweDA2LCAweDAwMDIgfSwKKwkJeyAweDA2LCAweDgxYzYgfSwKKwkJeyAweDA2LCAweGZlZmQgfSwKKwkJeyAweDA2LCAweGZjMDUgfSwKKwkJeyAweDA2LCAweGY4ZTAgfSwKKwkJeyAweDA2LCAweGY4NjAgfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDYxNjggfSwKKwkJeyAweDA2LCAweDAyZTQgfSwKKwkJeyAweDA2LCAweGY4NjAgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDYxZTAgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDQ5NTggfSwKKwkJeyAweDA2LCAweDBmMWUgfSwKKwkJeyAweDA2LCAweDAyZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5ZDAgfSwKKwkJeyAweDA2LCAweDAwMDIgfSwKKwkJeyAweDA2LCAweDgyMGEgfSwKKwkJeyAweDA2LCAweGJmODMgfSwKKwkJeyAweDA2LCAweDUwZWYgfSwKKwkJeyAweDA2LCAweDQ2ZGMgfSwKKwkJeyAweDA2LCAweDE5ZGQgfSwKKwkJeyAweDA2LCAweGQwMDEgfSwKKwkJeyAweDA2LCAweDAyODIgfSwKKwkJeyAweDA2LCAweDBhMDIgfSwKKwkJeyAweDA2LCAweDgyMjYgfSwKKwkJeyAweDA2LCAweGUwZjggfSwKKwkJeyAweDA2LCAweDYwZTEgfSwKKwkJeyAweDA2LCAweGY4NjEgfSwKKwkJeyAweDA2LCAweDU4ZmQgfSwKKwkJeyAweDA2LCAweGU0ZjggfSwKKwkJeyAweDA2LCAweDYwZTUgfSwKKwkJeyAweDA2LCAweGY4NjEgfSwKKwkJeyAweDA2LCAweGZjMDQgfSwKKwkJeyAweDA2LCAweGY5ZmEgfSwKKwkJeyAweDA2LCAweGZiYzYgfSwKKwkJeyAweDA2LCAweGJmZjggfSwKKwkJeyAweDA2LCAweDQwYmUgfSwKKwkJeyAweDA2LCAweDgzNTAgfSwKKwkJeyAweDA2LCAweGEwMDEgfSwKKwkJeyAweDA2LCAweDAxMDcgfSwKKwkJeyAweDA2LCAweDFiODkgfSwKKwkJeyAweDA2LCAweGNmZDIgfSwKKwkJeyAweDA2LCAweDA4ZWIgfSwKKwkJeyAweDA2LCAweGRiMTkgfSwKKwkJeyAweDA2LCAweGIyZmIgfSwKKwkJeyAweDA2LCAweGZmZmUgfSwKKwkJeyAweDA2LCAweGZkMDQgfSwKKwkJeyAweDA2LCAweGY4ZTAgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDQ5NjggfSwKKwkJeyAweDA2LCAweDA4ZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5NTggfSwKKwkJeyAweDA2LCAweGY3ZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5ZmMgfSwKKwkJeyAweDA2LCAweDA0NGQgfSwKKwkJeyAweDA2LCAweDIwMDAgfSwKKwkJeyAweDA2LCAweDAyNGUgfSwKKwkJeyAweDA2LCAweDIyMDAgfSwKKwkJeyAweDA2LCAweDAyNGQgfSwKKwkJeyAweDA2LCAweGRmZmYgfSwKKwkJeyAweDA2LCAweDAxNGUgfSwKKwkJeyAweDA2LCAweGRkZmYgfSwKKwkJeyAweDA2LCAweDAxMDAgfSwKKwkJeyAweDA1LCAweDgzZDggfSwKKwkJeyAweDA2LCAweDgwMDAgfSwKKwkJeyAweDAzLCAweGRjMDAgfSwKKwkJeyAweDA1LCAweGZmZjYgfSwKKwkJeyAweDA2LCAweDAwZmMgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MGQsIDB4Zjg4MCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9CisJfTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMCkpOworCisJaWYgKHJ0bDgxNjhkX2VmdXNlX3JlYWQoaW9hZGRyLCAweDAxKSA9PSAweGIxKSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjlhIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjlhIH0sCisKKwkJCXsgMHgxZiwgMHgwMDAyIH0KKwkJfTsKKwkJaW50IHZhbDsKKworCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCisJCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIDB4MGQpOworCQlpZiAoKHZhbCAmIDB4MDBmZikgIT0gMHgwMDZjKSB7CisJCQl1MzIgc2V0W10gPSB7CisJCQkJMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LAorCQkJCTB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YworCQkJfTsKKwkJCWludCBpOworCisJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKworCQkJdmFsICY9IDB4ZmYwMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNldCk7IGkrKykKKwkJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgwZCwgdmFsIHwgc2V0W2ldKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHgyNjQyIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHgyNjQyIH0KKwkJfTsKKworCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCX0KKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDIsIDB4MDEwMCwgMHgwNjAwKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDAzLCAweDAwMDAsIDB4ZTAwMCk7CisKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAxKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxNywgMHgwY2MwKTsKKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCW1kaW9fcGF0Y2goaW9hZGRyLCAweDBmLCAweDAwMTcpOworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8xLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNjhkXzNfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJeyAweDFmLCAweDAwMDIgfSwKKwkJeyAweDEwLCAweDAwMDggfSwKKwkJeyAweDBkLCAweDAwNmMgfSwKKworCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MGQsIDB4Zjg4MCB9LAorCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxNywgMHgwY2MwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDBiLCAweGE0ZDggfSwKKwkJeyAweDA5LCAweDI4MWMgfSwKKwkJeyAweDA3LCAweDI4ODMgfSwKKwkJeyAweDBhLCAweDZiMzUgfSwKKwkJeyAweDFkLCAweDNkYTQgfSwKKwkJeyAweDFjLCAweGVmZmQgfSwKKwkJeyAweDE0LCAweDdmNTIgfSwKKwkJeyAweDE4LCAweDdmYzYgfSwKKwkJeyAweDA4LCAweDA2MDEgfSwKKwkJeyAweDA2LCAweDQwNjMgfSwKKwkJeyAweDEwLCAweGYwNzQgfSwKKwkJeyAweDFmLCAweDAwMDMgfSwKKwkJeyAweDEzLCAweDA3ODkgfSwKKwkJeyAweDEyLCAweGY0YmQgfSwKKwkJeyAweDFhLCAweDA0ZmQgfSwKKwkJeyAweDE0LCAweDg0YjAgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKwkJeyAweDAwLCAweDkyMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDEsIDB4MDM0MCB9LAorCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MDQsIDB4NDAwMCB9LAorCQl7IDB4MDMsIDB4MWQyMSB9LAorCQl7IDB4MDIsIDB4MGMzMiB9LAorCQl7IDB4MDEsIDB4MDIwMCB9LAorCQl7IDB4MDAsIDB4NTU1NCB9LAorCQl7IDB4MDQsIDB4NDgwMCB9LAorCQl7IDB4MDQsIDB4NDAwMCB9LAorCQl7IDB4MDQsIDB4ZjAwMCB9LAorCQl7IDB4MDMsIDB4ZGYwMSB9LAorCQl7IDB4MDIsIDB4ZGYyMCB9LAorCQl7IDB4MDEsIDB4MTAxYSB9LAorCQl7IDB4MDAsIDB4YTBmZiB9LAorCQl7IDB4MDQsIDB4ZjgwMCB9LAorCQl7IDB4MDQsIDB4ZjAwMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDA3IH0sCisJCXsgMHgxZSwgMHgwMDIzIH0sCisJCXsgMHgxNiwgMHgwMDAwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODEwMmVfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKQEAgLTE3OTIsNyArMjY2NCwxMyBAQAogCQlydGw4MTY4Y3BfMl9od19waHlfY29uZmlnKGlvYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKLQkJcnRsODE2OGRfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCQlydGw4MTY4ZF8yX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQlydGw4MTY4ZF8zX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjMyMiw2ICszMjAwLDE0IEBACiAJfQogCiAJcnRsODE2OV9pbml0X3BoeShkZXYsIHRwKTsKKworCS8qCisJICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmUKKwkgKiBJbnRlcnJ1cHRzIHN0b3AgZmxvd2luZyBvbiBoaWdoIGxvYWQgb24gODExMFNDZCBjb250cm9sbGVycy4KKwkgKi8KKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDUpCisJCVJUTF9XMTYoQ1BsdXNDbWQsIFJUTF9SMTYoQ1BsdXNDbWQpIHwgUnhWbGFuKTsKKwogCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcGRldi0+ZGV2LCB0cC0+ZmVhdHVyZXMgJiBSVExfRkVBVFVSRV9XT0wpOwogCiBvdXQ6CkBAIC0yMzQ5LDYgKzMyMzUsMTAgQEAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCS8qIHJlc3RvcmUgb3JpZ2luYWwgTUFDIGFkZHJlc3MgKi8KKwlydGxfcmFyX3NldCh0cCwgZGV2LT5wZXJtX2FkZHIpOworCiAJcnRsX2Rpc2FibGVfbXNpKHBkZXYsIHRwKTsKIAlydGw4MTY5X3JlbGVhc2VfYm9hcmQocGRldiwgZGV2LCB0cC0+bW1pb19hZGRyKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0yMzU3LDkgKzMyNDcsOSBAQAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhidWZzaXplKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBpbnQgbXR1ID0gZGV2LT5tdHU7CisJdW5zaWduZWQgaW50IG1heF9mcmFtZSA9IGRldi0+bXR1ICsgVkxBTl9FVEhfSExFTiArIEVUSF9GQ1NfTEVOOwogCi0JdHAtPnJ4X2J1Zl9zeiA9IChtdHUgPiBSWF9CVUZfU0laRSkgPyBtdHUgKyBFVEhfSExFTiArIDggOiBSWF9CVUZfU0laRTsKKwl0cC0+cnhfYnVmX3N6ID0gKG1heF9mcmFtZSA+IFJYX0JVRl9TSVpFKSA/IG1heF9mcmFtZSA6IFJYX0JVRl9TSVpFOwogfQogCiBzdGF0aWMgaW50IHJ0bDgxNjlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjQ5Myw3ICszMzgzLDcgQEAKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUodm9pZCBfX2lvbWVtICppb2FkZHIsIHVuc2lnbmVkIGludCByeF9idWZfc3opCiB7CiAJLyogTG93IGh1cnRzLiBMZXQncyBkaXNhYmxlIHRoZSBmaWx0ZXJpbmcuICovCi0JUlRMX1cxNihSeE1heFNpemUsIHJ4X2J1Zl9zeik7CisJUlRMX1cxNihSeE1heFNpemUsIHJ4X2J1Zl9zeiArIDEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcodm9pZCBfX2lvbWVtICppb2FkZHIsIHVuc2lnbmVkIG1hY192ZXJzaW9uKQpAQCAtMjg2Myw2ICszNzUzLDggQEAKIAlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgogCQlydGxfaHdfc3RhcnRfODE2OGQoaW9hZGRyLCBwZGV2KTsKIAlicmVhazsKIApAQCAtMzk5Myw2ICs0ODg1LDkgQEAKIAogCXJ0bDgxNjlfbmV0X3N1c3BlbmQoZGV2KTsKIAorCS8qIHJlc3RvcmUgb3JpZ2luYWwgTUFDIGFkZHJlc3MgKi8KKwlydGxfcmFyX3NldCh0cCwgZGV2LT5wZXJtX2FkZHIpOworCiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCiAJcnRsODE2OV9hc2ljX2Rvd24oaW9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCBkZGNjZjVmLi4wZGQ3ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC0zNDk0LDYgKzM0OTQsNyBAQAogCiAJCS8qIFJlc3RvcmUgdGhlIFBDSSBzdGF0ZSBzYXZlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCiAJCXBjaV9yZXN0b3JlX3N0YXRlKHNwLT5wZGV2KTsKKwkJcGNpX3NhdmVfc3RhdGUoc3AtPnBkZXYpOwogCQlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgMHgyLCAmdmFsMTYpOwogCQlpZiAoY2hlY2tfcGNpX2RldmljZV9pZCh2YWwxNikgIT0gKHUxNilQQ0lfQU5ZX0lEKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguYyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCmluZGV4IDAxZjk0MzIuLjk4YmZmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCkBAIC00NDQsNyArNDQ0LDggQEAKICAqIHRoZSBhcHByb3ByaWF0ZSBMUk8gbWV0aG9kCiAgKi8KIHN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYpCisJCQkgICAgICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmLAorCQkJICAgICAgYm9vbCBjaGVja3N1bW1lZCkKIHsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmY2hhbm5lbC0+bmFwaV9zdHI7CiAKQEAgLTQ2Niw3ICs0NjcsOCBAQAogCQlza2ItPmxlbiA9IHJ4X2J1Zi0+bGVuOwogCQlza2ItPmRhdGFfbGVuID0gcnhfYnVmLT5sZW47CiAJCXNrYi0+dHJ1ZXNpemUgKz0gcnhfYnVmLT5sZW47Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCXNrYi0+aXBfc3VtbWVkID0KKwkJCWNoZWNrc3VtbWVkID8gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgOiBDSEVDS1NVTV9OT05FOwogCiAJCW5hcGlfZ3JvX2ZyYWdzKG5hcGkpOwogCkBAIC00NzUsNiArNDc3LDcgQEAKIAkJcnhfYnVmLT5wYWdlID0gTlVMTDsKIAl9IGVsc2UgewogCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFyeF9idWYtPnNrYik7CisJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWNoZWNrc3VtbWVkKTsKIAogCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHJ4X2J1Zi0+c2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwpAQCAtNTcwLDcgKzU3Myw3IEBACiAJfQogCiAJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPnBhZ2UpKSB7Ci0JCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1Zik7CisJCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1ZiwgY2hlY2tzdW1tZWQpOwogCQlnb3RvIGRvbmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwppbmRleCBjZWUwMGFkLi40OWViOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCWVmeF9vd29yZF90IHJlZzsKIAogCS8qIEdQSU8gMyBhbmQgdGhlIEdQSU8gcmVnaXN0ZXIgYXJlIHNoYXJlZCB3aXRoIEkyQywgc28gYmxvY2sgdGhhdCAqLwotCW11dGV4X2xvY2soJmVmeC0+aTJjX2FkYXAuYnVzX2xvY2spOworCWkyY19sb2NrX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCiAJLyogUHVsbCBSU1RfTiAoR1BJTyAyKSBsb3cgdGhlbiBsZXQgaXQgdXAgYWdhaW4sIHNldHRpbmcgdGhlCiAJICogRkxBU0hfQ0ZHXzEgc3RyYXAgKEdQSU8gMykgYXBwcm9wcmlhdGVseS4gIE9ubHkgY2hhbmdlIHRoZQpAQCAtMjA0LDcgKzIwNCw3IEBACiAJZmFsY29uX3dyaXRlKGVmeCwgJnJlZywgR1BJT19DVExfUkVHX0tFUik7CiAJbXNsZWVwKDEpOwogCi0JbXV0ZXhfdW5sb2NrKCZlZngtPmkyY19hZGFwLmJ1c19sb2NrKTsKKwlpMmNfdW5sb2NrX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCiAJc3NsZWVwKDEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCBmNDlkMDgwLi41MjhiOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAic2hfZXRoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAyYWI1YzM5Li42YTEwZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC00NTM4LDYgKzQ1MzgsOCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogCW5ldGlmX25hcGlfYWRkKGRldiwgJmh3LT5uYXBpLCBza3kyX3BvbGwsIE5BUElfV0VJR0hUKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2t5Ml9pbnRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCAwNWM5MWVlLi5mMTIyMDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAogCW5kZXYtPmlycSA9IGlyZXMtPnN0YXJ0OwogCi0JaWYgKGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spCisJaWYgKGlycV9mbGFncyA9PSAtMSB8fCBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQogCQlpcnFfZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmV0ID0gc21jX3JlcXVlc3RfYXR0cmliKHBkZXYsIG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggY2NkZDE5Ni4uZjljZGNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC05ODYsNyArOTg2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGRhdGEtPmRldjsKIAlpbnQgbnBhY2tldHMgPSAwOwogCi0Jd2hpbGUgKGxpa2VseShuZXRpZl9ydW5uaW5nKGRldikpICYmIChucGFja2V0cyA8IGJ1ZGdldCkpIHsKKwl3aGlsZSAobnBhY2tldHMgPCBidWRnZXQpIHsKIAkJdW5zaWduZWQgaW50IHBrdGxlbmd0aDsKIAkJdW5zaWduZWQgaW50IHBrdHdvcmRzOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKaW5kZXggYjQ5MDlhMi4uMGY3OTA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCkBAIC0yNTIsNiArMjUyLDkgQEAKIHsKIAlzdHJ1Y3Qgc21zYzk0MjBfcGRhdGEgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmICghcGQtPnBoeV9kZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJY21kLT5tYXh0eHBrdCA9IDE7CiAJY21kLT5tYXhyeHBrdCA9IDE7CiAJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocGQtPnBoeV9kZXYsIGNtZCk7CkBAIC0yNjIsNiArMjY1LDkgQEAKIHsKIAlzdHJ1Y3Qgc21zYzk0MjBfcGRhdGEgKnBkID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmICghcGQtPnBoeV9kZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocGQtPnBoeV9kZXYsIGNtZCk7CiB9CiAKQEAgLTI5MCw2ICsyOTYsMTAgQEAKIHN0YXRpYyBpbnQgc21zYzk0MjBfZXRodG9vbF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IHNtc2M5NDIwX3BkYXRhICpwZCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIXBkLT5waHlfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBwaHlfc3RhcnRfYW5lZyhwZC0+cGh5X2Rldik7CiB9CiAKQEAgLTMxMiw2ICszMjIsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMHgxMDA7IGkgKz0gKHNpemVvZih1MzIpKSkKIAkJZGF0YVtqKytdID0gc21zYzk0MjBfcmVnX3JlYWQocGQsIGkpOwogCisJLy8gY2Fubm90IHJlYWQgcGh5IHJlZ2lzdGVycyBpZiB0aGUgbmV0IGRldmljZSBpcyBkb3duCisJaWYgKCFwaHlfZGV2KQorCQlyZXR1cm47CisKIAlmb3IgKGkgPSAwOyBpIDw9IDMxOyBpKyspCiAJCWRhdGFbaisrXSA9IHNtc2M5NDIwX21paV9yZWFkKHBoeV9kZXYtPmJ1cywgcGh5X2Rldi0+YWRkciwgaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWFhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZwpAQCAtMCwwICsxLDUzIEBACitjb25maWcgU1RNTUFDX0VUSAorCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgMTAvMTAwLzEwMDAgRXRoZXJuZXQgZHJpdmVyIgorCXNlbGVjdCBNSUkKKwlzZWxlY3QgUEhZTElCCisJZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmIENQVV9TVUJUWVBFX1NUNDAKKwloZWxwCisJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBTVCBNQUMgMTAvMTAwLzEwMDAgb24tY2hpcCBFdGhlcm5ldAorCSAgY29udHJvbGxlcnMuIFNUIEV0aGVybmV0IElQcyBhcmUgYnVpbHQgYXJvdW5kIGEgU3lub3BzeXMgSVAgQ29yZS4KKworaWYgU1RNTUFDX0VUSAorCitjb25maWcgU1RNTUFDX0RBCisJYm9vbCAiU1RNTUFDIERNQSBhcmJpdHJhdGlvbiBzY2hlbWUiCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uLCByeCBoYXMgcHJpb3JpdHkgb3ZlciBUeCAob25seSBmb3IgR2lnYQorCSAgRXRoZXJuZXQgZGV2aWNlKS4KKwkgIEJ5IGRlZmF1bHQsIHRoZSBETUEgYXJiaXRyYXRpb24gc2NoZW1lIGlzIGJhc2VkIG9uIFJvdW5kLXJvYmluCisJICAocng6dHggcHJpb3JpdHkgaXMgMToxKS4KKworY29uZmlnIFNUTU1BQ19EVUFMX01BQworCWJvb2wgIlNUTU1BQzogZHVhbCBtYWMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZWZhdWx0IG4KKyAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgU1RNTUFDX0VUSCAmJiAhU1RNTUFDX1RJTUVSCisJaGVscAorCSAgU29tZSBTVCBTb0NzIChmb3IgZXhhbXBsZSB0aGUgc3R4NzE0MSBhbmQgc3R4NzIwMGMyKSBoYXZlIHR3bworCSAgRXRoZXJuZXQgQ29udHJvbGxlcnMuIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSBzZWNvbmQgRXRoZXJuZXQKKwkgIGRldmljZSBvbiB0aGlzIGtpbmQgb2YgcGxhdGZvcm1zLgorCitjb25maWcgU1RNTUFDX1RJTUVSCisJYm9vbCAiU1RNTUFDIFRpbWVyIG9wdGltaXNhdGlvbiIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2UgYW4gZXh0ZXJuYWwgdGltZXIgZm9yIG1pdGlnYXRpbmcgdGhlIG51bWJlciBvZiBuZXR3b3JrCisJICBpbnRlcnJ1cHRzLgorCitjaG9pY2UKKyAgICAgICAgcHJvbXB0ICJTZWxlY3QgVGltZXIgZGV2aWNlIgorICAgICAgICBkZXBlbmRzIG9uIFNUTU1BQ19USU1FUgorCitjb25maWcgU1RNTUFDX1RNVV9USU1FUgorICAgICAgICBib29sICJUTVUgY2hhbm5lbCAyIgorICAgICAgICBkZXBlbmRzIG9uIENQVV9TSDQKKwloZWxwCisKK2NvbmZpZyBTVE1NQUNfUlRDX1RJTUVSCisgICAgICAgIGJvb2wgIlJlYWwgdGltZSBjbG9jayIKKyAgICAgICAgZGVwZW5kcyBvbiBSVENfQ0xBU1MKKwloZWxwCisKK2VuZGNob2ljZQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDdhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitvYmotJChDT05GSUdfU1RNTUFDX0VUSCkgKz0gc3RtbWFjLm8KK3N0bW1hYy0kKENPTkZJR19TVE1NQUNfVElNRVIpICs9IHN0bW1hY190aW1lci5vCitzdG1tYWMtb2Jqczo9IHN0bW1hY19tYWluLm8gc3RtbWFjX2V0aHRvb2wubyBzdG1tYWNfbWRpby5vIFwKKwkJbWFjMTAwLm8gIGdtYWMubyAkKHN0bW1hYy15KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OWU1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmgKQEAgLTAsMCArMSwzMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBDb21tb24gSGVhZGVyIEZpbGUKKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImRlc2NzLmgiCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERNQV9CVVNfTU9ERQkJMHgwMDAwMTAwMAkvKiBCdXMgTW9kZSAqLworI2RlZmluZSBETUFfWE1UX1BPTExfREVNQU5ECTB4MDAwMDEwMDQJLyogVHJhbnNtaXQgUG9sbCBEZW1hbmQgKi8KKyNkZWZpbmUgRE1BX1JDVl9QT0xMX0RFTUFORAkweDAwMDAxMDA4CS8qIFJlY2VpdmVkIFBvbGwgRGVtYW5kICovCisjZGVmaW5lIERNQV9SQ1ZfQkFTRV9BRERSCTB4MDAwMDEwMGMJLyogUmVjZWl2ZSBMaXN0IEJhc2UgKi8KKyNkZWZpbmUgRE1BX1RYX0JBU0VfQUREUgkweDAwMDAxMDEwCS8qIFRyYW5zbWl0IExpc3QgQmFzZSAqLworI2RlZmluZSBETUFfU1RBVFVTCQkweDAwMDAxMDE0CS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ09OVFJPTAkJMHgwMDAwMTAxOAkvKiBDdHJsIChPcGVyYXRpb25hbCBNb2RlKSAqLworI2RlZmluZSBETUFfSU5UUl9FTkEJCTB4MDAwMDEwMWMJLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX0NUUgkweDAwMDAxMDIwCS8qIE1pc3NlZCBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIERNQV9DVVJfVFhfQlVGX0FERFIJMHgwMDAwMTA1MAkvKiBDdXJyZW50IEhvc3QgVHggQnVmZmVyICovCisjZGVmaW5lIERNQV9DVVJfUlhfQlVGX0FERFIJMHgwMDAwMTA1NAkvKiBDdXJyZW50IEhvc3QgUnggQnVmZmVyICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBETUEgQ29udHJvbCByZWdpc3RlciBkZWZpbmVzCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1QJCTB4MDAwMDIwMDAJLyogU3RhcnQvU3RvcCBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1IJCTB4MDAwMDAwMDIJLyogU3RhcnQvU3RvcCBSZWNlaXZlICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBETUEgSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciBkZWZpbmVzCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqIE5PUk1BTCBJTlRFUlJVUFQgKioqKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX05JRSAweDAwMDEwMDAwCS8qIE5vcm1hbCBTdW1tYXJ5ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9USUUgMHgwMDAwMDAwMQkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1RVRSAweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUklFIDB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0VSRSAweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgKi8KKworI2RlZmluZSBETUFfSU5UUl9OT1JNQUwJKERNQV9JTlRSX0VOQV9OSUUgfCBETUFfSU5UUl9FTkFfUklFIHwgXAorCQkJRE1BX0lOVFJfRU5BX1RJRSkKKworLyoqKiogQUJOT1JNQUwgSU5URVJSVVBUICoqKiovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9BSUUgMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBTdW1tYXJ5ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9GQkUgMHgwMDAwMjAwMAkvKiBGYXRhbCBCdXMgRXJyb3IgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0VURSAweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9SV0UgMHgwMDAwMDIwMAkvKiBSZWNlaXZlIFdhdGNoZG9nICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9SU0UgMHgwMDAwMDEwMAkvKiBSZWNlaXZlIFN0b3BwZWQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JVRSAweDAwMDAwMDgwCS8qIFJlY2VpdmUgQnVmZmVyIFVuYXZhaWxhYmxlICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9VTkUgMHgwMDAwMDAyMAkvKiBUeCBVbmRlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX09WRSAweDAwMDAwMDEwCS8qIFJlY2VpdmUgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1RKRSAweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEphYmJlciAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVFNFIDB4MDAwMDAwMDIJLyogVHJhbnNtaXQgU3RvcHBlZCAqLworCisjZGVmaW5lIERNQV9JTlRSX0FCTk9STUFMCShETUFfSU5UUl9FTkFfQUlFIHwgRE1BX0lOVFJfRU5BX0ZCRSB8IFwKKwkJCQlETUFfSU5UUl9FTkFfVU5FKQorCisvKiBETUEgZGVmYXVsdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBETUFfSU5UUl9ERUZBVUxUX01BU0sJKERNQV9JTlRSX05PUk1BTCB8IERNQV9JTlRSX0FCTk9STUFMKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRE1BIFN0YXR1cyByZWdpc3RlciBkZWZpbmVzCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBETUFfU1RBVFVTX0dQSQkJMHgxMDAwMDAwMAkvKiBQTVQgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfR01JCQkweDA4MDAwMDAwCS8qIE1NQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAJLyogR01BQyBMaW5lIGludGVyZmFjZSBpbnQuICovCisjZGVmaW5lIERNQV9TVEFUVVNfR01JCQkweDA4MDAwMDAwCisjZGVmaW5lIERNQV9TVEFUVVNfR0xJCQkweDA0MDAwMDAwCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfTUFTSwkweDAwMzgwMDAwCS8qIEVycm9yIEJpdHMgTWFzayAqLworI2RlZmluZSBETUFfU1RBVFVTX0VCX1RYX0FCT1JUCTB4MDAwODAwMDAJLyogRXJyb3IgQml0cyAtIFRYIEFib3J0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfUlhfQUJPUlQJMHgwMDEwMDAwMAkvKiBFcnJvciBCaXRzIC0gUlggQWJvcnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UU19NQVNLCTB4MDA3MDAwMDAJLyogVHJhbnNtaXQgUHJvY2VzcyBTdGF0ZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1RTX1NISUZUCTIwCisjZGVmaW5lIERNQV9TVEFUVVNfUlNfTUFTSwkweDAwMGUwMDAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1JTX1NISUZUCTE3CisjZGVmaW5lIERNQV9TVEFUVVNfTklTCTB4MDAwMTAwMDAJLyogTm9ybWFsIEludGVycnVwdCBTdW1tYXJ5ICovCisjZGVmaW5lIERNQV9TVEFUVVNfQUlTCTB4MDAwMDgwMDAJLyogQWJub3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FUkkJMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0ZCSQkweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FVEkJMHgwMDAwMDQwMAkvKiBFYXJseSBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19SV1QJMHgwMDAwMDIwMAkvKiBSZWNlaXZlIFdhdGNoZG9nIFRpbWVvdXQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19SUFMJMHgwMDAwMDEwMAkvKiBSZWNlaXZlIFByb2Nlc3MgU3RvcHBlZCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JVCTB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19SSQkweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVU5GCTB4MDAwMDAwMjAJLyogVHJhbnNtaXQgVW5kZXJmbG93ICovCisjZGVmaW5lIERNQV9TVEFUVVNfT1ZGCTB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfU1RBVFVTX1RKVAkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEphYmJlciBUaW1lb3V0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFUJMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UUFMJMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBQcm9jZXNzIFN0b3BwZWQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19USQkweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEludGVycnVwdCAqLworCisvKiBPdGhlciBkZWZpbmVzICovCisjZGVmaW5lIEhBU0hfVEFCTEVfU0laRSA2NAorI2RlZmluZSBQQVVTRV9USU1FIDB4MjAwCisKKy8qIEZsb3cgQ29udHJvbCBkZWZpbmVzICovCisjZGVmaW5lIEZMT1dfT0ZGCTAKKyNkZWZpbmUgRkxPV19SWAkJMQorI2RlZmluZSBGTE9XX1RYCQkyCisjZGVmaW5lIEZMT1dfQVVUTwkoRkxPV19UWCB8IEZMT1dfUlgpCisKKy8qIERNQSBTVE9SRS1BTkQtRk9SV0FSRCBPcGVyYXRpb24gTW9kZSAqLworI2RlZmluZSBTRl9ETUFfTU9ERSAxCisKKyNkZWZpbmUgSFdfQ1NVTSAxCisjZGVmaW5lIE5PX0hXX0NTVU0gMAorCisvKiBHTUFDIFRYIEZJRk8gaXMgOEssIFJ4IEZJRk8gaXMgMTZLICovCisjZGVmaW5lIEJVRl9TSVpFXzE2S2lCIDE2Mzg0CisjZGVmaW5lIEJVRl9TSVpFXzhLaUIgODE5MgorI2RlZmluZSBCVUZfU0laRV80S2lCIDQwOTYKKyNkZWZpbmUgQlVGX1NJWkVfMktpQiAyMDQ4CisKKy8qIFBvd2VyIERvd24gYW5kIFdPTCAqLworI2RlZmluZSBQTVRfTk9UX1NVUFBPUlRFRCAwCisjZGVmaW5lIFBNVF9TVVBQT1JURUQgMQorCisvKiBDb21tb24gTUFDIGRlZmluZXMgKi8KKyNkZWZpbmUgTUFDX0NUUkxfUkVHCQkweDAwMDAwMDAwCS8qIE1BQyBDb250cm9sICovCisjZGVmaW5lIE1BQ19FTkFCTEVfVFgJCTB4MDAwMDAwMDgJLyogVHJhbnNtaXR0ZXIgRW5hYmxlICovCisjZGVmaW5lIE1BQ19STkFCTEVfUlgJCTB4MDAwMDAwMDQJLyogUmVjZWl2ZXIgRW5hYmxlICovCisKKy8qIE1BQyBNYW5hZ2VtZW50IENvdW50ZXJzIHJlZ2lzdGVyICovCisjZGVmaW5lIE1NQ19DT05UUk9MCQkweDAwMDAwMTAwCS8qIE1NQyBDb250cm9sICovCisjZGVmaW5lIE1NQ19ISUdIX0lOVFIJCTB4MDAwMDAxMDQJLyogTU1DIEhpZ2ggSW50ZXJydXB0ICovCisjZGVmaW5lIE1NQ19MT1dfSU5UUgkJMHgwMDAwMDEwOAkvKiBNTUMgTG93IEludGVycnVwdCAqLworI2RlZmluZSBNTUNfSElHSF9JTlRSX01BU0sJMHgwMDAwMDEwYwkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBNTUNfTE9XX0lOVFJfTUFTSwkweDAwMDAwMTEwCS8qIE1NQyBMb3cgSW50ZXJydXB0IE1hc2sgKi8KKworI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJNX01BU0sJMHgwMDAzZmY4CS8qIE1heGltdW0gRnJhbWUgU2l6ZSAqLworI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJNX1NISUZUCTMKKyNkZWZpbmUgTU1DX0NPTlRST0xfTUFYX0ZSQU1FCQkweDdGRgorCitzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzIHsKKwkvKiBUcmFuc21pdCBlcnJvcnMgKi8KKwl1bnNpZ25lZCBsb25nIHR4X3VuZGVyZmxvdyBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdW5zaWduZWQgbG9uZyB0eF9jYXJyaWVyOworCXVuc2lnbmVkIGxvbmcgdHhfbG9zc2NhcnJpZXI7CisJdW5zaWduZWQgbG9uZyB0eF9oZWFydGJlYXQ7CisJdW5zaWduZWQgbG9uZyB0eF9kZWZlcnJlZDsKKwl1bnNpZ25lZCBsb25nIHR4X3ZsYW47CisJdW5zaWduZWQgbG9uZyB0eF9qYWJiZXI7CisJdW5zaWduZWQgbG9uZyB0eF9mcmFtZV9mbHVzaGVkOworCXVuc2lnbmVkIGxvbmcgdHhfcGF5bG9hZF9lcnJvcjsKKwl1bnNpZ25lZCBsb25nIHR4X2lwX2hlYWRlcl9lcnJvcjsKKwkvKiBSZWNlaXZlIGVycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgcnhfZGVzYzsKKwl1bnNpZ25lZCBsb25nIHJ4X3BhcnRpYWw7CisJdW5zaWduZWQgbG9uZyByeF9ydW50OworCXVuc2lnbmVkIGxvbmcgcnhfdG9vbG9uZzsKKwl1bnNpZ25lZCBsb25nIHJ4X2NvbGxpc2lvbjsKKwl1bnNpZ25lZCBsb25nIHJ4X2NyYzsKKwl1bnNpZ25lZCBsb25nIHJ4X2xlbmdodDsKKwl1bnNpZ25lZCBsb25nIHJ4X21paTsKKwl1bnNpZ25lZCBsb25nIHJ4X211bHRpY2FzdDsKKwl1bnNpZ25lZCBsb25nIHJ4X2dtYWNfb3ZlcmZsb3c7CisJdW5zaWduZWQgbG9uZyByeF93YXRjaGRvZzsKKwl1bnNpZ25lZCBsb25nIGRhX3J4X2ZpbHRlcl9mYWlsOworCXVuc2lnbmVkIGxvbmcgc2FfcnhfZmlsdGVyX2ZhaWw7CisJdW5zaWduZWQgbG9uZyByeF9taXNzZWRfY250cjsKKwl1bnNpZ25lZCBsb25nIHJ4X292ZXJmbG93X2NudHI7CisJdW5zaWduZWQgbG9uZyByeF92bGFuOworCS8qIFR4L1J4IElSUSBlcnJvcnMgKi8KKwl1bnNpZ25lZCBsb25nIHR4X3VuZGVmbG93X2lycTsKKwl1bnNpZ25lZCBsb25nIHR4X3Byb2Nlc3Nfc3RvcHBlZF9pcnE7CisJdW5zaWduZWQgbG9uZyB0eF9qYWJiZXJfaXJxOworCXVuc2lnbmVkIGxvbmcgcnhfb3ZlcmZsb3dfaXJxOworCXVuc2lnbmVkIGxvbmcgcnhfYnVmX3VuYXZfaXJxOworCXVuc2lnbmVkIGxvbmcgcnhfcHJvY2Vzc19zdG9wcGVkX2lycTsKKwl1bnNpZ25lZCBsb25nIHJ4X3dhdGNoZG9nX2lycTsKKwl1bnNpZ25lZCBsb25nIHR4X2Vhcmx5X2lycTsKKwl1bnNpZ25lZCBsb25nIGZhdGFsX2J1c19lcnJvcl9pcnE7CisJLyogRXh0cmEgaW5mbyAqLworCXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkOworCXVuc2lnbmVkIGxvbmcgdHhfcGt0X247CisJdW5zaWduZWQgbG9uZyByeF9wa3RfbjsKKwl1bnNpZ25lZCBsb25nIHBvbGxfbjsKKwl1bnNpZ25lZCBsb25nIHNjaGVkX3RpbWVyX247CisJdW5zaWduZWQgbG9uZyBub3JtYWxfaXJxX247Cit9OworCisvKiBHTUFDIGNvcmUgY2FuIGNvbXB1dGUgdGhlIGNoZWNrc3VtcyBpbiBIVy4gKi8KK2VudW0gcnhfZnJhbWVfc3RhdHVzIHsKKwlnb29kX2ZyYW1lID0gMCwKKwlkaXNjYXJkX2ZyYW1lID0gMSwKKwljc3VtX25vbmUgPSAyLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCisJCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJZGF0YSA9IChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgaGlnaCk7CisJZGF0YSA9IChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgbG93KTsKKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19nZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsCisJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGhpZ2gsCisJCQkJdW5zaWduZWQgaW50IGxvdykKK3sKKwl1bnNpZ25lZCBpbnQgaGlfYWRkciwgbG9fYWRkcjsKKworCS8qIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIGhhcmR3YXJlICovCisJaGlfYWRkciA9IHJlYWRsKGlvYWRkciArIGhpZ2gpOworCWxvX2FkZHIgPSByZWFkbChpb2FkZHIgKyBsb3cpOworCisJLyogRXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGlnaCBhbmQgbG93IHdvcmRzICovCisJYWRkclswXSA9IGxvX2FkZHIgJiAweGZmOworCWFkZHJbMV0gPSAobG9fYWRkciA+PiA4KSAmIDB4ZmY7CisJYWRkclsyXSA9IChsb19hZGRyID4+IDE2KSAmIDB4ZmY7CisJYWRkclszXSA9IChsb19hZGRyID4+IDI0KSAmIDB4ZmY7CisJYWRkcls0XSA9IGhpX2FkZHIgJiAweGZmOworCWFkZHJbNV0gPSAoaGlfYWRkciA+PiA4KSAmIDB4ZmY7CisKKwlyZXR1cm47Cit9CisKK3N0cnVjdCBzdG1tYWNfb3BzIHsKKwkvKiBNQUMgY29yZSBpbml0aWFsaXphdGlvbiAqLworCXZvaWQgKCpjb3JlX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkcikgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCS8qIERNQSBjb3JlIGluaXRpYWxpemF0aW9uICovCisJaW50ICgqZG1hX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCk7CisJLyogRHVtcCBNQUMgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfbWFjX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJLyogRHVtcCBETUEgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfZG1hX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJLyogU2V0IHR4L3J4IHRocmVzaG9sZCBpbiB0aGUgY3NyNiByZWdpc3RlcgorCSAqIEFuIGludmFsaWQgdmFsdWUgZW5hYmxlcyB0aGUgc3RvcmUtYW5kLWZvcndhcmQgbW9kZSAqLworCXZvaWQgKCpkbWFfbW9kZSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLCBpbnQgcnhtb2RlKTsKKwkvKiBUbyB0cmFjayBleHRyYSBzdGF0aXN0aWMgKGlmIHN1cHBvcnRlZCkgKi8KKwl2b2lkICgqZG1hX2RpYWdub3N0aWNfZnIpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBSWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KKwl2b2lkICgqaW5pdF9yeF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAorCQkJCWludCBkaXNhYmxlX3J4X2ljKTsKKwkvKiBUWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KKwl2b2lkICgqaW5pdF90eF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplKTsKKworCS8qIEludm9rZWQgYnkgdGhlIHhtaXQgZnVuY3Rpb24gdG8gcHJlcGFyZSB0aGUgdHggZGVzY3JpcHRvciAqLworCXZvaWQgKCpwcmVwYXJlX3R4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgaW50IGNzdW1fZmxhZyk7CisJLyogU2V0L2dldCB0aGUgb3duZXIgb2YgdGhlIGRlc2NyaXB0b3IgKi8KKwl2b2lkICgqc2V0X3R4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwlpbnQgKCpnZXRfdHhfb3duZXIpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIEludm9rZWQgYnkgdGhlIHhtaXQgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIHR4IGRlc2NyaXB0b3IgKi8KKwl2b2lkICgqY2xvc2VfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogQ2xlYW4gdGhlIHR4IGRlc2NyaXB0b3IgYXMgc29vbiBhcyB0aGUgdHggaXJxIGlzIHJlY2VpdmVkICovCisJdm9pZCAoKnJlbGVhc2VfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogQ2xlYXIgaW50ZXJydXB0IG9uIHR4IGZyYW1lIGNvbXBsZXRpb24uIFdoZW4gdGhpcyBiaXQgaXMKKwkgKiBzZXQgYW4gaW50ZXJydXB0IGhhcHBlbnMgYXMgc29vbiBhcyB0aGUgZnJhbWUgaXMgdHJhbnNtaXR0ZWQgKi8KKwl2b2lkICgqY2xlYXJfdHhfaWMpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIExhc3QgdHggc2VnbWVudCByZXBvcnRzIHRoZSB0cmFuc21pdCBzdGF0dXMgKi8KKwlpbnQgKCpnZXRfdHhfbHMpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIFJldHVybiB0aGUgdHJhbnNtaXQgc3RhdHVzIGxvb2tpbmcgYXQgdGhlIFRERVMxICovCisJaW50ICgqdHhfc3RhdHVzKSAodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCSAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJLyogR2V0IHRoZSBidWZmZXIgc2l6ZSBmcm9tIHRoZSBkZXNjcmlwdG9yICovCisJaW50ICgqZ2V0X3R4X2xlbikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogSGFuZGxlIGV4dHJhIGV2ZW50cyBvbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGh3IGRlcGVuZGVudCAqLworCXZvaWQgKCpob3N0X2lycV9zdGF0dXMpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJaW50ICgqZ2V0X3J4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwl2b2lkICgqc2V0X3J4X293bmVyKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBHZXQgdGhlIHJlY2VpdmUgZnJhbWUgc2l6ZSAqLworCWludCAoKmdldF9yeF9mcmFtZV9sZW4pIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIFJldHVybiB0aGUgcmVjZXB0aW9uIHN0YXR1cyBsb29raW5nIGF0IHRoZSBSREVTMSAqLworCWludCAoKnJ4X3N0YXR1cykgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkgIHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogTXVsdGljYXN0IGZpbHRlciBzZXR0aW5nICovCisJdm9pZCAoKnNldF9maWx0ZXIpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkvKiBGbG93IGNvbnRyb2wgc2V0dGluZyAqLworCXZvaWQgKCpmbG93X2N0cmwpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKKwkJCSAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpOworCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50IG1vZGUgKGUuZy4gbWFnaWMgZnJhbWUpICovCisJdm9pZCAoKnBtdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpOworCS8qIFNldC9HZXQgVW5pY2FzdCBNQUMgYWRkcmVzc2VzICovCisJdm9pZCAoKnNldF91bWFjX2FkZHIpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgICAgdW5zaWduZWQgaW50IHJlZ19uKTsKKwl2b2lkICgqZ2V0X3VtYWNfYWRkcikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOworfTsKKworc3RydWN0IG1hY19saW5rIHsKKwlpbnQgcG9ydDsKKwlpbnQgZHVwbGV4OworCWludCBzcGVlZDsKK307CisKK3N0cnVjdCBtaWlfcmVncyB7CisJdW5zaWduZWQgaW50IGFkZHI7CS8qIE1JSSBBZGRyZXNzICovCisJdW5zaWduZWQgaW50IGRhdGE7CS8qIE1JSSBEYXRhICovCit9OworCitzdHJ1Y3QgaHdfY2FwIHsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogQ29yZSBWZXJzaW9uIHJlZ2lzdGVyIChHTUFDKSAqLworCXVuc2lnbmVkIGludCBwbXQ7CS8qIFBvd2VyLURvd24gbW9kZSAoR01BQykgKi8KKwlzdHJ1Y3QgbWFjX2xpbmsgbGluazsKKwlzdHJ1Y3QgbWlpX3JlZ3MgbWlpOworfTsKKworc3RydWN0IG1hY19kZXZpY2VfaW5mbyB7CisJc3RydWN0IGh3X2NhcCBodzsKKwlzdHJ1Y3Qgc3RtbWFjX29wcyAqb3BzOworfTsKKworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZ21hY19zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kZXNjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMmEwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZGVzY3MuaApAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgSGVhZGVyIEZpbGUgdG8gZGVzY3JpYmUgdGhlIERNQSBkZXNjcmlwdG9ycworICBVc2UgZW5oYW5jZWQgZGVzY3JpcHRvcnMgaW4gY2FzZSBvZiBHTUFDIENvcmVzLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBkbWFfZGVzYyB7CisJLyogUmVjZWl2ZSBkZXNjcmlwdG9yICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyogUkRFUzAgKi8KKwkJCXUzMiByZXNlcnZlZDE6MTsKKwkJCXUzMiBjcmNfZXJyb3I6MTsKKwkJCXUzMiBkcmliYmxpbmc6MTsKKwkJCXUzMiBtaWlfZXJyb3I6MTsKKwkJCXUzMiByZWNlaXZlX3dhdGNoZG9nOjE7CisJCQl1MzIgZnJhbWVfdHlwZToxOworCQkJdTMyIGNvbGxpc2lvbjoxOworCQkJdTMyIGZyYW1lX3Rvb19sb25nOjE7CisJCQl1MzIgbGFzdF9kZXNjcmlwdG9yOjE7CisJCQl1MzIgZmlyc3RfZGVzY3JpcHRvcjoxOworCQkJdTMyIG11bHRpY2FzdF9mcmFtZToxOworCQkJdTMyIHJ1bl9mcmFtZToxOworCQkJdTMyIGxlbmd0aF9lcnJvcjoxOworCQkJdTMyIHBhcnRpYWxfZnJhbWVfZXJyb3I6MTsKKwkJCXUzMiBkZXNjcmlwdG9yX2Vycm9yOjE7CisJCQl1MzIgZXJyb3Jfc3VtbWFyeToxOworCQkJdTMyIGZyYW1lX2xlbmd0aDoxNDsKKwkJCXUzMiBmaWx0ZXJpbmdfZmFpbDoxOworCQkJdTMyIG93bjoxOworCQkJLyogUkRFUzEgKi8KKwkJCXUzMiBidWZmZXIxX3NpemU6MTE7CisJCQl1MzIgYnVmZmVyMl9zaXplOjExOworCQkJdTMyIHJlc2VydmVkMjoyOworCQkJdTMyIHNlY29uZF9hZGRyZXNzX2NoYWluZWQ6MTsKKwkJCXUzMiBlbmRfcmluZzoxOworCQkJdTMyIHJlc2VydmVkMzo1OworCQkJdTMyIGRpc2FibGVfaWM6MTsKKwkJfSByeDsKKwkJc3RydWN0IHsKKwkJCS8qIFJERVMwICovCisJCQl1MzIgcGF5bG9hZF9jc3VtX2Vycm9yOjE7CisJCQl1MzIgY3JjX2Vycm9yOjE7CisJCQl1MzIgZHJpYmJsaW5nOjE7CisJCQl1MzIgZXJyb3JfZ21paToxOworCQkJdTMyIHJlY2VpdmVfd2F0Y2hkb2c6MTsKKwkJCXUzMiBmcmFtZV90eXBlOjE7CisJCQl1MzIgbGF0ZV9jb2xsaXNpb246MTsKKwkJCXUzMiBpcGNfY3N1bV9lcnJvcjoxOworCQkJdTMyIGxhc3RfZGVzY3JpcHRvcjoxOworCQkJdTMyIGZpcnN0X2Rlc2NyaXB0b3I6MTsKKwkJCXUzMiB2bGFuX3RhZzoxOworCQkJdTMyIG92ZXJmbG93X2Vycm9yOjE7CisJCQl1MzIgbGVuZ3RoX2Vycm9yOjE7CisJCQl1MzIgc2FfZmlsdGVyX2ZhaWw6MTsKKwkJCXUzMiBkZXNjcmlwdG9yX2Vycm9yOjE7CisJCQl1MzIgZXJyb3Jfc3VtbWFyeToxOworCQkJdTMyIGZyYW1lX2xlbmd0aDoxNDsKKwkJCXUzMiBkYV9maWx0ZXJfZmFpbDoxOworCQkJdTMyIG93bjoxOworCQkJLyogUkRFUzEgKi8KKwkJCXUzMiBidWZmZXIxX3NpemU6MTM7CisJCQl1MzIgcmVzZXJ2ZWQxOjE7CisJCQl1MzIgc2Vjb25kX2FkZHJlc3NfY2hhaW5lZDoxOworCQkJdTMyIGVuZF9yaW5nOjE7CisJCQl1MzIgYnVmZmVyMl9zaXplOjEzOworCQkJdTMyIHJlc2VydmVkMjoyOworCQkJdTMyIGRpc2FibGVfaWM6MTsKKwkJfSBlcng7CQkvKiAtLSBlbmhhbmNlZCAtLSAqLworCisJCS8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgKi8KKwkJc3RydWN0IHsKKwkJCS8qIFRERVMwICovCisJCQl1MzIgZGVmZXJyZWQ6MTsKKwkJCXUzMiB1bmRlcmZsb3dfZXJyb3I6MTsKKwkJCXUzMiBleGNlc3NpdmVfZGVmZXJyYWw6MTsKKwkJCXUzMiBjb2xsaXNpb25fY291bnQ6NDsKKwkJCXUzMiBoZWFydGJlYXRfZmFpbDoxOworCQkJdTMyIGV4Y2Vzc2l2ZV9jb2xsaXNpb25zOjE7CisJCQl1MzIgbGF0ZV9jb2xsaXNpb246MTsKKwkJCXUzMiBub19jYXJyaWVyOjE7CisJCQl1MzIgbG9zc19jYXJyaWVyOjE7CisJCQl1MzIgcmVzZXJ2ZWQxOjM7CisJCQl1MzIgZXJyb3Jfc3VtbWFyeToxOworCQkJdTMyIHJlc2VydmVkMjoxNTsKKwkJCXUzMiBvd246MTsKKwkJCS8qIFRERVMxICovCisJCQl1MzIgYnVmZmVyMV9zaXplOjExOworCQkJdTMyIGJ1ZmZlcjJfc2l6ZToxMTsKKwkJCXUzMiByZXNlcnZlZDM6MTsKKwkJCXUzMiBkaXNhYmxlX3BhZGRpbmc6MTsKKwkJCXUzMiBzZWNvbmRfYWRkcmVzc19jaGFpbmVkOjE7CisJCQl1MzIgZW5kX3Jpbmc6MTsKKwkJCXUzMiBjcmNfZGlzYWJsZToxOworCQkJdTMyIHJlc2VydmVkNDoyOworCQkJdTMyIGZpcnN0X3NlZ21lbnQ6MTsKKwkJCXUzMiBsYXN0X3NlZ21lbnQ6MTsKKwkJCXUzMiBpbnRlcnJ1cHQ6MTsKKwkJfSB0eDsKKwkJc3RydWN0IHsKKwkJCS8qIFRERVMwICovCisJCQl1MzIgZGVmZXJyZWQ6MTsKKwkJCXUzMiB1bmRlcmZsb3dfZXJyb3I6MTsKKwkJCXUzMiBleGNlc3NpdmVfZGVmZXJyYWw6MTsKKwkJCXUzMiBjb2xsaXNpb25fY291bnQ6NDsKKwkJCXUzMiB2bGFuX2ZyYW1lOjE7CisJCQl1MzIgZXhjZXNzaXZlX2NvbGxpc2lvbnM6MTsKKwkJCXUzMiBsYXRlX2NvbGxpc2lvbjoxOworCQkJdTMyIG5vX2NhcnJpZXI6MTsKKwkJCXUzMiBsb3NzX2NhcnJpZXI6MTsKKwkJCXUzMiBwYXlsb2FkX2Vycm9yOjE7CisJCQl1MzIgZnJhbWVfZmx1c2hlZDoxOworCQkJdTMyIGphYmJlcl90aW1lb3V0OjE7CisJCQl1MzIgZXJyb3Jfc3VtbWFyeToxOworCQkJdTMyIGlwX2hlYWRlcl9lcnJvcjoxOworCQkJdTMyIHRpbWVfc3RhbXBfc3RhdHVzOjE7CisJCQl1MzIgcmVzZXJ2ZWQxOjI7CisJCQl1MzIgc2Vjb25kX2FkZHJlc3NfY2hhaW5lZDoxOworCQkJdTMyIGVuZF9yaW5nOjE7CisJCQl1MzIgY2hlY2tzdW1faW5zZXJ0aW9uOjI7CisJCQl1MzIgcmVzZXJ2ZWQyOjE7CisJCQl1MzIgdGltZV9zdGFtcF9lbmFibGU6MTsKKwkJCXUzMiBkaXNhYmxlX3BhZGRpbmc6MTsKKwkJCXUzMiBjcmNfZGlzYWJsZToxOworCQkJdTMyIGZpcnN0X3NlZ21lbnQ6MTsKKwkJCXUzMiBsYXN0X3NlZ21lbnQ6MTsKKwkJCXUzMiBpbnRlcnJ1cHQ6MTsKKwkJCXUzMiBvd246MTsKKwkJCS8qIFRERVMxICovCisJCQl1MzIgYnVmZmVyMV9zaXplOjEzOworCQkJdTMyIHJlc2VydmVkMzozOworCQkJdTMyIGJ1ZmZlcjJfc2l6ZToxMzsKKwkJCXUzMiByZXNlcnZlZDQ6MzsKKwkJfSBldHg7CQkvKiAtLSBlbmhhbmNlZCAtLSAqLworCX0gZGVzMDE7CisJdW5zaWduZWQgaW50IGRlczI7CisJdW5zaWduZWQgaW50IGRlczM7Cit9OworCisvKiBUcmFuc21pdCBjaGVja3N1bSBpbnNlcnRpb24gY29udHJvbCAqLworZW51bSB0ZGVzX2NzdW1faW5zZXJ0aW9uIHsKKwljaWNfZGlzYWJsZWQgPSAwLAkvKiBDaGVja3N1bSBJbnNlcnRpb24gQ29udHJvbCAqLworCWNpY19vbmx5X2lwID0gMSwJLyogT25seSBJUCBoZWFkZXIgKi8KKwljaWNfbm9fcHNldWRvaGVhZGVyID0gMiwJLyogSVAgaGVhZGVyIGJ1dCBwc2V1ZG9oZWFkZXIKKwkJCQkJICogaXMgbm90IGNhbGN1bGF0ZWQgKi8KKwljaWNfZnVsbCA9IDMsCQkvKiBJUCBoZWFkZXIgYW5kIHBzZXVkb2hlYWRlciAqLworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MjRiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5jCkBAIC0wLDAgKzEsNjkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBHTUFDIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlciBmb3IgU1QgU29Dcy4KKyAgRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSAgaGFzIGJlZW4gdXNlZCBmb3IKKyAgZGV2ZWxvcGluZyB0aGlzIGNvZGUuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSAic3RtbWFjLmgiCisjaW5jbHVkZSAiZ21hYy5oIgorCisjdW5kZWYgR01BQ19ERUJVRworLyojZGVmaW5lIEdNQUNfREVCVUcqLworI3VuZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworLyojZGVmaW5lIEZSQU1FX0ZJTFRFUl9ERUJVRyovCisjaWZkZWYgR01BQ19ERUJVRworI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgZ21hY19kdW1wX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IGk7CisJcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJICAgICAgICJcdCAgR01BQyByZWdpc3RlcnMgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgorCSAgICAgICAiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KWlvYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTU7IGkrKykgeworCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7CisJCXByX2luZm8oIlx0UmVnIE5vLiAlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCisJCSAgICAgICBvZmZzZXQsIHJlYWRsKGlvYWRkciArIG9mZnNldCkpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZ21hY19kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCkKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpOworCS8qIERNQSBTVyByZXNldCAqLworCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9TRlRfUkVTRVQ7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOworCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKSAmIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQpKTsKKworCXZhbHVlID0gLyogRE1BX0JVU19NT0RFX0ZCIHwgKi8gRE1BX0JVU19NT0RFXzRQQkwgfAorCSAgICAoKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSB8CisJICAgICAocGJsIDw8IERNQV9CVVNfTU9ERV9SUEJMX1NISUZUKSk7CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX0RBCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX0RBOwkvKiBSeCBoYXMgcHJpb3JpdHkgb3ZlciB0eCAqLworI2VuZGlmCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOworCisJLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLworCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7CisKKwkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCisJICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KKwl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKKwl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogVHJhbnNtaXQgRklGTyBmbHVzaCBvcGVyYXRpb24gKi8KK3N0YXRpYyB2b2lkIGdtYWNfZmx1c2hfdHhfZmlmbyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl3cml0ZWwoKGNzcjYgfCBETUFfQ09OVFJPTF9GVEYpLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKSAmIERNQV9DT05UUk9MX0ZURikpOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKKwkJCQkgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOworCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOworCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQorCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLworCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKKwl9IGVsc2UgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCisJCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7CisJCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKKwkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOworCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVhc2hvbGQgKi8KKwkJaWYgKHR4bW9kZSA8PSAzMikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzMyOworCQllbHNlIGlmICh0eG1vZGUgPD0gNjQpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ182NDsKKwkJZWxzZSBpZiAodHhtb2RlIDw9IDEyOCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzEyODsKKwkJZWxzZSBpZiAodHhtb2RlIDw9IDE5MikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzE5MjsKKwkJZWxzZQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMjU2OworCX0KKworCWlmIChyeG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFJYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOworCQljc3I2IHw9IERNQV9DT05UUk9MX1JTRjsKKwl9IGVsc2UgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFJYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCisJCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHJ4bW9kZSk7CisJCWNzcjYgJj0gfkRNQV9DT05UUk9MX1JTRjsKKwkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19SWF9NQVNLOworCQlpZiAocnhtb2RlIDw9IDMyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfMzI7CisJCWVsc2UgaWYgKHJ4bW9kZSA8PSA2NCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzY0OworCQllbHNlIGlmIChyeG1vZGUgPD0gOTYpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ185NjsKKwkJZWxzZQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfMTI4OworCX0KKworCXdyaXRlbChjc3I2LCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJcmV0dXJuOworfQorCisvKiBOb3QgeWV0IGltcGxlbWVudGVkIC0tLSBubyBSTU9OIG1vZHVsZSAqLworc3RhdGljIHZvaWQgZ21hY19kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIiBETUEgcmVnaXN0ZXJzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykgeworCQlpZiAoKGkgPCA5KSB8fCAoaSA+IDE3KSkgeworCQkJaW50IG9mZnNldCA9IGkgKiA0OworCQkJcHJfZXJyKCJcdCBSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJCSAgICAgICAoRE1BX0JVU19NT0RFICsgb2Zmc2V0KSwKKwkJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBvZmZzZXQpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgIHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFRYIGVycm9yLi4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXR4KTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5qYWJiZXJfdGltZW91dCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRqYWJiZXJfdGltZW91dCBlcnJvclxuIik7CisJCQl4LT50eF9qYWJiZXIrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZnJhbWVfZmx1c2hlZCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRmcmFtZV9mbHVzaGVkIGVycm9yXG4iKTsKKwkJCXgtPnR4X2ZyYW1lX2ZsdXNoZWQrKzsKKwkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5sb3NzX2NhcnJpZXIpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bG9zc19jYXJyaWVyIGVycm9yXG4iKTsKKwkJCXgtPnR4X2xvc3NjYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lm5vX2NhcnJpZXIpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bm9fY2FycmllciBlcnJvclxuIik7CisJCQl4LT50eF9jYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmxhdGVfY29sbGlzaW9uKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGxhdGVfY29sbGlzaW9uIGVycm9yXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfY29sbGlzaW9ucykpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRleGNlc3NpdmVfY29sbGlzaW9uc1xuIik7CisJCQlzdGF0cy0+Y29sbGlzaW9ucyArPSBwLT5kZXMwMS5ldHguY29sbGlzaW9uX2NvdW50OworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXhjZXNzaXZlX2RlZmVycmFsKSkgeworCQkJREJHKEtFUk5fSU5GTyAiXHRleGNlc3NpdmUgdHhfZGVmZXJyYWxcbiIpOworCQkJeC0+dHhfZGVmZXJyZWQrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgudW5kZXJmbG93X2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdHVuZGVyZmxvdyBlcnJvclxuIik7CisJCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKKwkJCXgtPnR4X3VuZGVyZmxvdysrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5pcF9oZWFkZXJfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0VFggSVAgaGVhZGVyIGNzdW0gZXJyb3JcbiIpOworCQkJeC0+dHhfaXBfaGVhZGVyX2Vycm9yKys7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LnBheWxvYWRfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0QWRkci9QYXlsb2FkIGNzdW0gZXJyb3JcbiIpOworCQkJeC0+dHhfcGF5bG9hZF9lcnJvcisrOworCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlyZXQgPSAtMTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmRlZmVycmVkKSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogdHggZGVmZXJyZWRcbiIpOworCQl4LT50eF9kZWZlcnJlZCsrOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5ldHgudmxhbl9mcmFtZSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogVkxBTiBmcmFtZVxuIik7CisJCXgtPnR4X3ZsYW4rKzsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfdHhfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZTsKK30KKworc3RhdGljIGludCBnbWFjX2NvZV9yZGVzMChpbnQgaXBjX2VyciwgaW50IHR5cGUsIGludCBwYXlsb2FkX2VycikKK3sKKwlpbnQgcmV0ID0gZ29vZF9mcmFtZTsKKwl1MzIgc3RhdHVzID0gKHR5cGUgPDwgMiB8IGlwY19lcnIgPDwgMSB8IHBheWxvYWRfZXJyKSAmIDB4NzsKKworCS8qIGJpdHMgNSA3IDAgfCBGcmFtZSBzdGF0dXMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgICAwIDAgMCB8IElFRUUgODAyLjMgVHlwZSBmcmFtZSAobGVuZ2h0IDwgMTUzNiBvY3RlY3RzKQorCSAqICAgICAgMSAwIDAgfCBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuCisJICogICAgICAxIDAgMSB8IElQdjQvNiBDU1VNIFBBWUxPQUQgZXJyb3IKKwkgKiAgICAgIDEgMSAwIHwgSVB2NC82IENTVU0gSVAgSFIgZXJyb3IKKwkgKiAgICAgIDEgMSAxIHwgSVB2NC82IElQIFBBWUxPQUQgQU5EIEhFQURFUiBlcnJvclMKKwkgKiAgICAgIDAgMCAxIHwgSVB2NC82IHVuc3VwcG9ydGVkIElQIFBBWUxPQUQKKwkgKiAgICAgIDAgMSAxIHwgQ09FIGJ5cGFzc2VkLi4gbm8gSVB2NC82IGZyYW1lCisJICogICAgICAwIDEgMCB8IFJlc2VydmVkLgorCSAqLworCWlmIChzdGF0dXMgPT0gMHgwKSB7CisJCURCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJRUVFIDgwMi4zIFR5cGUgZnJhbWUuXG4iKTsKKwkJcmV0ID0gZ29vZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDQpIHsKKwkJREJHKEtFUk5fSU5GTyAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBObyBDU1VNIGVycm9yUy5cbiIpOworCQlyZXQgPSBnb29kX2ZyYW1lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NSkgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgUGF5bG9hZCBFcnJvci5cbiIpOworCQlyZXQgPSBjc3VtX25vbmU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg2KSB7CisJCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBIZWFkZXIgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NykgeworCQlEQkcoS0VSTl9FUlIKKwkJICAgICJSWCBEZXMwIHN0YXR1czogSVB2NC82IEhlYWRlciBhbmQgUGF5bG9hZCBFcnJvci5cbiIpOworCQlyZXQgPSBjc3VtX25vbmU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHgxKSB7CisJCURCRyhLRVJOX0VSUgorCQkgICAgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgdW5zdXBwb3J0ZWQgSVAgUEFZTE9BRC5cbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4MykgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBObyBJUHY0LCBJUHY2IGZyYW1lLlxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgIHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgcmV0ID0gZ29vZF9mcmFtZTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5lcnJvcl9zdW1tYXJ5KSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggRXJyb3IgU3VtbWFyeS4uLiAweCUwOHhcbiIsIHAtPmRlczAxLmVyeCk7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZGVzY3JpcHRvcl9lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRkZXNjcmlwdG9yIGVycm9yXG4iKTsKKwkJCXgtPnJ4X2Rlc2MrKzsKKwkJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5vdmVyZmxvd19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRvdmVyZmxvdyBlcnJvclxuIik7CisJCQl4LT5yeF9nbWFjX292ZXJmbG93Kys7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmlwY19jc3VtX2Vycm9yKSkKKwkJCURCRyhLRVJOX0VSUiAiXHRJUEMgQ3N1bSBFcnJvci9HaWFudCBmcmFtZVxuIik7CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5sYXRlX2NvbGxpc2lvbikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsYXRlX2NvbGxpc2lvbiBlcnJvclxuIik7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LnJlY2VpdmVfd2F0Y2hkb2cpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0cmVjZWl2ZV93YXRjaGRvZyBlcnJvclxuIik7CisJCQl4LT5yeF93YXRjaGRvZysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZXJyb3JfZ21paSkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRSZWNlaXZlIEVycm9yXG4iKTsKKwkJCXgtPnJ4X21paSsrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguY3JjX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdENSQyBlcnJvclxuIik7CisJCQl4LT5yeF9jcmMrKzsKKwkJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCX0KKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisKKwkvKiBBZnRlciBhIHBheWxvYWQgY3N1bSBlcnJvciwgdGhlIEVTIGJpdCBpcyBzZXQuCisJICogSXQgZG9lc24ndCBtYXRjaCB3aXRoIHRoZSBpbmZvcm1hdGlvbiByZXBvcnRlZCBpbnRvIHRoZSBkYXRhYm9vay4KKwkgKiBBdCBhbnkgcmF0ZSwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBDU1VNIGh3IGNvbXB1dGF0aW9uIGlzIG9rCisJICogYW5kIHJlcG9ydCB0aGlzIGluZm8gdG8gdGhlIHVwcGVyIGxheWVycy4gKi8KKwlyZXQgPSBnbWFjX2NvZV9yZGVzMChwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IsCisJCXAtPmRlczAxLmVyeC5mcmFtZV90eXBlLCBwLT5kZXMwMS5lcngucGF5bG9hZF9jc3VtX2Vycm9yKTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZHJpYmJsaW5nKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGRyaWJibGluZyBlcnJvclxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguc2FfZmlsdGVyX2ZhaWwpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCA6IFNvdXJjZSBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKKwkJeC0+c2FfcnhfZmlsdGVyX2ZhaWwrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kYV9maWx0ZXJfZmFpbCkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogRGVzdGluYXRpb24gQWRkcmVzcyBmaWx0ZXIgZmFpbFxuIik7CisJCXgtPmRhX3J4X2ZpbHRlcl9mYWlsKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGVuZ3RoX2Vycm9yKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGxlbmd0aF9lcnJvciBlcnJvclxuIik7CisJCXgtPnJ4X2xlbmdodCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5lcngudmxhbl90YWcpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBSWDogVkxBTiBmcmFtZSB0YWdnZWRcbiIpOworCQl4LT5yeF92bGFuKys7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ21hY19pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEdNQUNfSU5UX1NUQVRVUyk7CisKKwkvKiBOb3QgdXNlZCBldmVudHMgKGUuZy4gTU1DIGludGVycnVwdHMpIGFyZSBub3QgaGFuZGxlZC4gKi8KKwlpZiAoKGludHJfc3RhdHVzICYgbW1jX3R4X2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgdHggaW50ZXJydXB0OiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19UWF9JTlRSKSk7CisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgbW1jX3J4X2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggaW50ZXJydXB0OiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9JTlRSKSk7CisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgbW1jX3J4X2NzdW1fb2ZmbG9hZF9pcnEpKQorCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogTU1DIHJ4IGNzdW0gb2ZmbG9hZDogMHglMDh4XG4iLAorCQkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEKSk7CisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgcG10X2lycSkpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IHJlY2VpdmVkIE1hZ2ljIGZyYW1lXG4iKTsKKwkJLyogY2xlYXIgdGhlIFBNVCBiaXRzIDUgYW5kIDYgYnkgcmVhZGluZyB0aGUgUE1UCisJCSAqIHN0YXR1cyByZWdpc3Rlci4gKi8KKwkJcmVhZGwoaW9hZGRyICsgR01BQ19QTVQpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19jb3JlX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgR01BQ19DT05UUk9MKTsKKwl2YWx1ZSB8PSBHTUFDX0NPUkVfSU5JVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIEdNQUNfQ09OVFJPTCk7CisKKwkvKiBTVEJ1cyBCcmlkZ2UgQ29uZmlndXJhdGlvbiAqLworCS8qd3JpdGVsKDB4YzU2MDgsIGlvYWRkciArIDB4MDAwMDcwMDApOyovCisKKwkvKiBGcmVlemUgTU1DIGNvdW50ZXJzICovCisJd3JpdGVsKDB4OCwgaW9hZGRyICsgR01BQ19NTUNfQ1RSTCk7CisJLyogTWFzayBHTUFDIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMHgyMDcsIGlvYWRkciArIEdNQUNfSU5UX01BU0spOworCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwkvKiBUYWcgZGV0ZWN0aW9uIHdpdGhvdXQgZmlsdGVyaW5nICovCisJd3JpdGVsKDB4MCwgaW9hZGRyICsgR01BQ19WTEFOX1RBRyk7CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfc2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX3NldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIEdNQUNfQUREUl9ISUdIKHJlZ19uKSwKKwkJCQlHTUFDX0FERFJfTE9XKHJlZ19uKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfZ2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX2dldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIEdNQUNfQUREUl9ISUdIKHJlZ19uKSwKKwkJCQlHTUFDX0FERFJfTE9XKHJlZ19uKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfc2V0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKworCURCRyhLRVJOX0lORk8gIiVzOiAjIG1jYXN0cyAlZCwgIyB1bmljYXN0ICVkXG4iLAorCSAgICBfX2Z1bmNfXywgZGV2LT5tY19jb3VudCwgZGV2LT51Y19jb3VudCk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BSOworCWVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gSEFTSF9UQUJMRV9TSVpFKQorCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJdmFsdWUgPSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTTsJLyogcGFzcyBhbGwgbXVsdGkgKi8KKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOworCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IDApIHsKKwkJaW50IGk7CisJCXUzMiBtY19maWx0ZXJbMl07CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJCS8qIEhhc2ggZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KKwkJdmFsdWUgPSBHTUFDX0ZSQU1FX0ZJTFRFUl9ITUM7CisKKwkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJCSAgICAgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJLyogVGhlIHVwcGVyIDYgYml0cyBvZiB0aGUgY2FsY3VsYXRlZCBDUkMgYXJlIHVzZWQgdG8KKwkJCSAgIGluZGV4IHRoZSBjb250ZW5zIG9mIHRoZSBoYXNoIHRhYmxlICovCisJCQlpbnQgYml0X25yID0KKwkJCSAgICBiaXRyZXYzMih+Y3JjMzJfbGUofjAsIG1jbGlzdC0+ZG1pX2FkZHIsIDYpKSA+PiAyNjsKKwkJCS8qIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBkZXRlcm1pbmVzIHRoZSByZWdpc3RlciB0bworCQkJICogdXNlIChIL0wpIHdoaWxlIHRoZSBvdGhlciA1IGJpdHMgZGV0ZXJtaW5lIHRoZSBiaXQKKwkJCSAqIHdpdGhpbiB0aGUgcmVnaXN0ZXIuICovCisJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKKwkJfQorCQl3cml0ZWwobWNfZmlsdGVyWzBdLCBpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKTsKKwkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOworCX0KKworCS8qIEhhbmRsZSBtdWx0aXBsZSB1bmljYXN0IGFkZHJlc3NlcyAocGVyZmVjdCBmaWx0ZXJpbmcpKi8KKwlpZiAoZGV2LT51Y19jb3VudCA+IEdNQUNfTUFYX1VOSUNBU1RfQUREUkVTU0VTKQorCQkvKiBTd2l0Y2ggdG8gcHJvbWlzY3VvdXMgbW9kZSBpcyBtb3JlIHRoYW4gMTYgYWRkcnMKKwkJICAgYXJlIHJlcXVpcmVkICovCisJCXZhbHVlIHw9IEdNQUNfRlJBTUVfRklMVEVSX1BSOworCWVsc2UgeworCQlpbnQgaTsKKwkJc3RydWN0IGRldl9hZGRyX2xpc3QgKnVjX3B0ciA9IGRldi0+dWNfbGlzdDsKKworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+dWNfY291bnQ7IGkrKykgeworCQkJCWdtYWNfc2V0X3VtYWNfYWRkcihpb2FkZHIsIHVjX3B0ci0+ZGFfYWRkciwKKwkJCQkJCWkgKyAxKTsKKworCQkJCURCRyhLRVJOX0lORk8gIlx0JWQgIgorCQkJCSItIFVuaWNhc3QgYWRkciAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6IgorCQkJCSIlMDJ4XG4iLCBpICsgMSwKKwkJCQl1Y19wdHItPmRhX2FkZHJbMF0sIHVjX3B0ci0+ZGFfYWRkclsxXSwKKwkJCQl1Y19wdHItPmRhX2FkZHJbMl0sIHVjX3B0ci0+ZGFfYWRkclszXSwKKwkJCQl1Y19wdHItPmRhX2FkZHJbNF0sIHVjX3B0ci0+ZGFfYWRkcls1XSk7CisJCQkJdWNfcHRyID0gdWNfcHRyLT5uZXh0OworCQl9CisJfQorCisjaWZkZWYgRlJBTUVfRklMVEVSX0RFQlVHCisJLyogRW5hYmxlIFJlY2VpdmUgYWxsIG1vZGUgKHRvIGRlYnVnIGZpbHRlcmluZ19mYWlsIGVycm9ycykgKi8KKwl2YWx1ZSB8PSBHTUFDX0ZSQU1FX0ZJTFRFUl9SQTsKKyNlbmRpZgorCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19GUkFNRV9GSUxURVIpOworCisJREJHKEtFUk5fSU5GTyAiXHRGcmFtZSBGaWx0ZXIgcmVnOiAweCUwOHhcblx0SGFzaCByZWdzOiAiCisJICAgICJISSAweCUwOHgsIExPIDB4JTA4eFxuIiwgcmVhZGwoaW9hZGRyICsgR01BQ19GUkFNRV9GSUxURVIpLAorCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCksIHJlYWRsKGlvYWRkciArIEdNQUNfSEFTSF9MT1cpKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gMDsKKworCURCRyhLRVJOX0RFQlVHICJHTUFDIEZsb3ctQ29udHJvbDpcbiIpOworCWlmIChmYyAmIEZMT1dfUlgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0UmVjZWl2ZSBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1JGRTsKKwl9CisJaWYgKGZjICYgRkxPV19UWCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRUcmFuc21pdCBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1RGRTsKKwl9CisKKwlpZiAoZHVwbGV4KSB7CisJCURCRyhLRVJOX0RFQlVHICJcdGR1cGxleCBtb2RlOiBwYXVzZSB0aW1lOiAlZFxuIiwgcGF1c2VfdGltZSk7CisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCX0KKworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBHTUFDX0ZMT1dfQ1RSTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCXVuc2lnbmVkIGludCBwbXQgPSAwOworCisJaWYgKG1vZGUgPT0gV0FLRV9NQUdJQykgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIE1hZ2ljIGZyYW1lXG4iKTsKKwkJcG10IHw9IHBvd2VyX2Rvd24gfCBtYWdpY19wa3RfZW47CisJfSBlbHNlIGlmIChtb2RlID09IFdBS0VfVUNBU1QpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IFdPTCBvbiBnbG9iYWwgdW5pY2FzdFxuIik7CisJCXBtdCB8PSBnbG9iYWxfdW5pY2FzdDsKKwl9CisKKwl3cml0ZWwocG10LCBpb2FkZHIgKyBHTUFDX1BNVCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLmVyeC5vd24gPSAxOworCQlwLT5kZXMwMS5lcnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfOEtpQiAtIDE7CisJCS8qIFRvIHN1cHBvcnQganVtYm8gZnJhbWVzICovCisJCXAtPmRlczAxLmVyeC5idWZmZXIyX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLmVyeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEuZXJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19pbml0X3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLmV0eC5vd24gPSAwOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEuZXR4LmVuZF9yaW5nID0gMTsKKwkJcCsrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBnbWFjX2dldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5vd247Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5lcngub3duOworfQorCitzdGF0aWMgdm9pZCBnbWFjX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4Lm93biA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfc2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5lcngub3duID0gMTsKK30KKworc3RhdGljIGludCBnbWFjX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgdGVyID0gcC0+ZGVzMDEuZXR4LmVuZF9yaW5nOworCisJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpKTsKKwlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSB0ZXI7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAorCQkJCSBpbnQgY3N1bV9mbGFnKQoreworCXAtPmRlczAxLmV0eC5maXJzdF9zZWdtZW50ID0gaXNfZnM7CisJaWYgKHVubGlrZWx5KGxlbiA+IEJVRl9TSVpFXzRLaUIpKSB7CisJCXAtPmRlczAxLmV0eC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV80S2lCOworCQlwLT5kZXMwMS5ldHguYnVmZmVyMl9zaXplID0gbGVuIC0gQlVGX1NJWkVfNEtpQjsKKwl9IGVsc2UgeworCQlwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplID0gbGVuOworCX0KKwlpZiAobGlrZWx5KGNzdW1fZmxhZykpCisJCXAtPmRlczAxLmV0eC5jaGVja3N1bV9pbnNlcnRpb24gPSBjaWNfZnVsbDsKK30KKworc3RhdGljIHZvaWQgZ21hY19jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4Lmxhc3Rfc2VnbWVudCA9IDE7CisJcC0+ZGVzMDEuZXR4LmludGVycnVwdCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZ21hY19nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEuZXJ4LmZyYW1lX2xlbmd0aDsKK30KKworc3RydWN0IHN0bW1hY19vcHMgZ21hY19kcml2ZXIgPSB7CisJLmNvcmVfaW5pdCA9IGdtYWNfY29yZV9pbml0LAorCS5kdW1wX21hY19yZWdzID0gZ21hY19kdW1wX3JlZ3MsCisJLmRtYV9pbml0ID0gZ21hY19kbWFfaW5pdCwKKwkuZHVtcF9kbWFfcmVncyA9IGdtYWNfZHVtcF9kbWFfcmVncywKKwkuZG1hX21vZGUgPSBnbWFjX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBnbWFjX2RtYV9kaWFnbm9zdGljX2ZyLAorCS50eF9zdGF0dXMgPSBnbWFjX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IGdtYWNfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKKwkuZ2V0X3R4X2xlbiA9IGdtYWNfZ2V0X3R4X2xlbiwKKwkuc2V0X2ZpbHRlciA9IGdtYWNfc2V0X2ZpbHRlciwKKwkuZmxvd19jdHJsID0gZ21hY19mbG93X2N0cmwsCisJLnBtdCA9IGdtYWNfcG10LAorCS5pbml0X3J4X2Rlc2MgPSBnbWFjX2luaXRfcnhfZGVzYywKKwkuaW5pdF90eF9kZXNjID0gZ21hY19pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IGdtYWNfZ2V0X3R4X293bmVyLAorCS5nZXRfcnhfb3duZXIgPSBnbWFjX2dldF9yeF9vd25lciwKKwkucmVsZWFzZV90eF9kZXNjID0gZ21hY19yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IGdtYWNfcHJlcGFyZV90eF9kZXNjLAorCS5jbGVhcl90eF9pYyA9IGdtYWNfY2xlYXJfdHhfaWMsCisJLmNsb3NlX3R4X2Rlc2MgPSBnbWFjX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IGdtYWNfZ2V0X3R4X2xzLAorCS5zZXRfdHhfb3duZXIgPSBnbWFjX3NldF90eF9vd25lciwKKwkuc2V0X3J4X293bmVyID0gZ21hY19zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBnbWFjX2dldF9yeF9mcmFtZV9sZW4sCisJLmhvc3RfaXJxX3N0YXR1cyA9IGdtYWNfaXJxX3N0YXR1cywKKwkuc2V0X3VtYWNfYWRkciA9IGdtYWNfc2V0X3VtYWNfYWRkciwKKwkuZ2V0X3VtYWNfYWRkciA9IGdtYWNfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmdtYWNfc2V0dXAodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjOworCXUzMiB1aWQgPSByZWFkbChpb2FkZHIgKyBHTUFDX1ZFUlNJT04pOworCisJcHJfaW5mbygiXHRHTUFDIC0gdXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcbiIsCisJICAgICAgICgodWlkICYgMHgwMDAwZmYwMCkgPj4gOCksICh1aWQgJiAweDAwMDAwMGZmKSk7CisKKwltYWMgPSBremFsbG9jKHNpemVvZihjb25zdCBzdHJ1Y3QgbWFjX2RldmljZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwltYWMtPm9wcyA9ICZnbWFjX2RyaXZlcjsKKwltYWMtPmh3LnBtdCA9IFBNVF9TVVBQT1JURUQ7CisJbWFjLT5ody5saW5rLnBvcnQgPSBHTUFDX0NPTlRST0xfUFM7CisJbWFjLT5ody5saW5rLmR1cGxleCA9IEdNQUNfQ09OVFJPTF9ETTsKKwltYWMtPmh3Lmxpbmsuc3BlZWQgPSBHTUFDX0NPTlRST0xfRkVTOworCW1hYy0+aHcubWlpLmFkZHIgPSBHTUFDX01JSV9BRERSOworCW1hYy0+aHcubWlpLmRhdGEgPSBHTUFDX01JSV9EQVRBOworCisJcmV0dXJuIG1hYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NGEzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZ21hYy5oCkBAIC0wLDAgKzEsMjA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBHTUFDX0NPTlRST0wJCTB4MDAwMDAwMDAJLyogQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUgkweDAwMDAwMDA0CS8qIEZyYW1lIEZpbHRlciAqLworI2RlZmluZSBHTUFDX0hBU0hfSElHSAkJMHgwMDAwMDAwOAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCisjZGVmaW5lIEdNQUNfSEFTSF9MT1cJCTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFIJCTB4MDAwMDAwMTAJLyogTUlJIEFkZHJlc3MgKi8KKyNkZWZpbmUgR01BQ19NSUlfREFUQQkJMHgwMDAwMDAxNAkvKiBNSUkgRGF0YSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTAkJMHgwMDAwMDAxOAkvKiBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgR01BQ19WTEFOX1RBRwkJMHgwMDAwMDAxYwkvKiBWTEFOIFRhZyAqLworI2RlZmluZSBHTUFDX1ZFUlNJT04JCTB4MDAwMDAwMjAJLyogR01BQyBDT1JFIFZlcnNpb24gKi8KKyNkZWZpbmUgR01BQ19XQUtFVVBfRklMVEVSCTB4MDAwMDAwMjgJLyogV2FrZS11cCBGcmFtZSBGaWx0ZXIgKi8KKworI2RlZmluZSBHTUFDX0lOVF9TVEFUVVMJCTB4MDAwMDAwMzgJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworZW51bSBnbWFjX2lycV9zdGF0dXMgeworCXRpbWVfc3RhbXBfaXJxID0gMHgwMjAwLAorCW1tY19yeF9jc3VtX29mZmxvYWRfaXJxID0gMHgwMDgwLAorCW1tY190eF9pcnEgPSAweDAwNDAsCisJbW1jX3J4X2lycSA9IDB4MDAyMCwKKwltbWNfaXJxID0gMHgwMDEwLAorCXBtdF9pcnEgPSAweDAwMDgsCisJcGNzX2FuZV9pcnEgPSAweDAwMDQsCisJcGNzX2xpbmtfaXJxID0gMHgwMDAyLAorCXJnbWlpX2lycSA9IDB4MDAwMSwKK307CisjZGVmaW5lIEdNQUNfSU5UX01BU0sJCTB4MDAwMDAwM2MJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKworLyogUE1UIENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBHTUFDX1BNVAkJMHgwMDAwMDAyYworZW51bSBwb3dlcl9ldmVudCB7CisJcG9pbnRlcl9yZXNldCA9IDB4ODAwMDAwMDAsCisJZ2xvYmFsX3VuaWNhc3QgPSAweDAwMDAwMjAwLAorCXdha2VfdXBfcnhfZnJhbWUgPSAweDAwMDAwMDQwLAorCW1hZ2ljX2ZyYW1lID0gMHgwMDAwMDAyMCwKKwl3YWtlX3VwX2ZyYW1lX2VuID0gMHgwMDAwMDAwNCwKKwltYWdpY19wa3RfZW4gPSAweDAwMDAwMDAyLAorCXBvd2VyX2Rvd24gPSAweDAwMDAwMDAxLAorfTsKKworLyogR01BQyBIVyBBRERSIHJlZ3MgKi8KKyNkZWZpbmUgR01BQ19BRERSX0hJR0gocmVnKQkJKDB4MDAwMDAwNDArKHJlZyAqIDgpKQorI2RlZmluZSBHTUFDX0FERFJfTE9XKHJlZykJCSgweDAwMDAwMDQ0KyhyZWcgKiA4KSkKKyNkZWZpbmUgR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMJMTYKKworI2RlZmluZSBHTUFDX0FOX0NUUkwJMHgwMDAwMDBjMAkvKiBBTiBjb250cm9sICovCisjZGVmaW5lIEdNQUNfQU5fU1RBVFVTCTB4MDAwMDAwYzQJLyogQU4gc3RhdHVzICovCisjZGVmaW5lIEdNQUNfQU5FX0FEVgkweDAwMDAwMGM4CS8qIEF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCisjZGVmaW5lIEdNQUNfQU5FX0xJTksJMHgwMDAwMDBjYwkvKiBBdXRvLU5lZy4gbGluayBwYXJ0ZW5lciBhYmlsaXR5ICovCisjZGVmaW5lIEdNQUNfQU5FX0VYUAkweDAwMDAwMGQwCS8qIEFORSBleHBhbnNpb24gKi8KKyNkZWZpbmUgR01BQ19UQkkJMHgwMDAwMDBkNAkvKiBUQkkgZXh0ZW5kIHN0YXR1cyAqLworI2RlZmluZSBHTUFDX0dNSUlfU1RBVFVTIDB4MDAwMDAwZDgJLyogUy9SLUdNSUkgc3RhdHVzICovCisKKy8qIEdNQUMgQ29uZmlndXJhdGlvbiBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9UQwkweDAxMDAwMDAwCS8qIFRyYW5zbWl0IENvbmYuIGluIFJHTUlJL1NHTUlJICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9XRAkweDAwODAwMDAwCS8qIERpc2FibGUgV2F0Y2hkb2cgb24gcmVjZWl2ZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSkQJMHgwMDQwMDAwMAkvKiBKYWJiZXIgZGlzYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfQkUJMHgwMDIwMDAwMAkvKiBGcmFtZSBCdXJzdCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0pFCTB4MDAxMDAwMDAJLyogSnVtYm8gZnJhbWUgKi8KK2VudW0gaW50ZXJfZnJhbWVfZ2FwIHsKKwlHTUFDX0NPTlRST0xfSUZHXzg4ID0gMHgwMDA0MDAwMCwKKwlHTUFDX0NPTlRST0xfSUZHXzgwID0gMHgwMDAyMDAwMCwKKwlHTUFDX0NPTlRST0xfSUZHXzQwID0gMHgwMDBlMDAwMCwKK307CisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EQ1JTCTB4MDAwMTAwMDAgLyogRGlzYWJsZSBjYXJyaWVyIHNlbnNlIGR1cmluZyB0eCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfUFMJCTB4MDAwMDgwMDAgLyogUG9ydCBTZWxlY3QgMDpHTUkgMTpNSUkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0ZFUwkweDAwMDA0MDAwIC8qIFNwZWVkIDA6MTAgMToxMDAgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RPCQkweDAwMDAyMDAwIC8qIERpc2FibGUgUnggT3duICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9MTQkJMHgwMDAwMTAwMCAvKiBMb29wLWJhY2sgbW9kZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRE0JCTB4MDAwMDA4MDAgLyogRHVwbGV4IE1vZGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0lQQwkweDAwMDAwNDAwIC8qIENoZWNrc3VtIE9mZmxvYWQgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RSCQkweDAwMDAwMjAwIC8qIERpc2FibGUgUmV0cnkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0xVRAkweDAwMDAwMTAwIC8qIExpbmsgdXAvZG93biAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RDCQkweDAwMDAwMDEwIC8qIERlZmVycmFsIENoZWNrICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOCAvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0IC8qIFJlY2VpdmVyIEVuYWJsZSAqLworCisjZGVmaW5lIEdNQUNfQ09SRV9JTklUIChHTUFDX0NPTlRST0xfSkQgfCBHTUFDX0NPTlRST0xfUFMgfCBHTUFDX0NPTlRST0xfQUNTIHwgXAorCQkJR01BQ19DT05UUk9MX0lQQyB8IEdNQUNfQ09OVFJPTF9KRSB8IEdNQUNfQ09OVFJPTF9CRSkKKworLyogR01BQyBGcmFtZSBGaWx0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUgkweDAwMDAwMDAxCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFVDCTB4MDAwMDAwMDIJLyogSGFzaCBVbmljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hNQwkweDAwMDAwMDA0CS8qIEhhc2ggTXVsdGljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RBSUYJMHgwMDAwMDAwOAkvKiBEQSBJbnZlcnNlIEZpbHRlcmluZyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTQkweDAwMDAwMDEwCS8qIFBhc3MgYWxsIG11bHRpY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQkYJMHgwMDAwMDAyMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBmcmFtZXMgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FJRgkweDAwMDAwMTAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBRgkweDAwMDAwMjAwCS8qIFNvdXJjZSBBZGRyZXNzIEZpbHRlciAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IUEYJMHgwMDAwMDQwMAkvKiBIYXNoIG9yIHBlcmZlY3QgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBhbGwgbW9kZSAqLworLyogR01JSSBBRERSICBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KKy8qIEdNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgorI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9SRkUJMHgwMDAwMDAwNAkvKiBSeCBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1RGRQkweDAwMDAwMDAyCS8qIFR4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfRkNCX0JQQQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLworCisvKi0tLSBETUEgQkxPQ0sgZGVmaW5lcyAtLS0qLworLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EQQkJMHgwMDAwMDAwMgkvKiBBcmJpdHJhdGlvbiBzY2hlbWUgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLworI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCisvKiBQcm9ncmFtbWFibGUgYnVyc3QgbGVuZ3RoIChwYXNzZWQgdGhvcnVnaCBwbGF0Zm9ybSkqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAorCitlbnVtIHJ4X3R4X3ByaW9yaXR5X3JhdGlvIHsKKwlkb3VibGVfcmF0aW8gPSAweDAwMDA0MDAwLAkvKjI6MSAqLworCXRyaXBsZV9yYXRpbyA9IDB4MDAwMDgwMDAsCS8qMzoxICovCisJcXVhZHJ1cGxlX3JhdGlvID0gMHgwMDAwYzAwMCwJLyo0OjEgKi8KK307CisKKyNkZWZpbmUgRE1BX0JVU19NT0RFX0ZCCQkweDAwMDEwMDAwCS8qIEZpeGVkIGJ1cnN0ICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX01BU0sJMHgwMDNlMDAwMAkvKiBSeC1Qcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX1NISUZUCTE3CisjZGVmaW5lIERNQV9CVVNfTU9ERV9VU1AJMHgwMDgwMDAwMAorI2RlZmluZSBETUFfQlVTX01PREVfNFBCTAkweDAxMDAwMDAwCisjZGVmaW5lIERNQV9CVVNfTU9ERV9BQUwJMHgwMjAwMDAwMAorCisvKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCisjZGVmaW5lIERNQV9IT1NUX1RYX0RFU0MJICAweDAwMDAxMDQ4CS8qIEN1cnJlbnQgSG9zdCBUeCBkZXNjcmlwdG9yICovCisjZGVmaW5lIERNQV9IT1NUX1JYX0RFU0MJICAweDAwMDAxMDRjCS8qIEN1cnJlbnQgSG9zdCBSeCBkZXNjcmlwdG9yICovCisvKiAgRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19NQVNLCSAgMHgwMDAwYzAwMAkvKiBSeC9UeCBwcmlvcml0eSByYXRpbyAqLworI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX1NISUZUCSAgMTQKKyNkZWZpbmUgRE1BX0JVU19GQgkgIAkgIDB4MDAwMTAwMDAJLyogRml4ZWQgQnVyc3QgKi8KKworLyogRE1BIG9wZXJhdGlvbiBtb2RlIGRlZmluZXMgKHN0YXJ0L3N0b3AgdHgvcnggYXJlIHBsYWNlZCBpbiBjb21tb24gaGVhZGVyKSovCisjZGVmaW5lIERNQV9DT05UUk9MX0RUCQkweDA0MDAwMDAwIC8qIERpc2FibGUgRHJvcCBUQ1AvSVAgY3N1bSBlcnJvciAqLworI2RlZmluZSBETUFfQ09OVFJPTF9SU0YJCTB4MDIwMDAwMDAgLyogUmVjZWl2ZSBTdG9yZSBhbmQgRm9yd2FyZCAqLworI2RlZmluZSBETUFfQ09OVFJPTF9ERkYJCTB4MDEwMDAwMDAgLyogRGlzYWFibGUgZmx1c2hpbmcgKi8KKy8qIFRoZXNob2xkIGZvciBBY3RpdmF0aW5nIHRoZSBGQyAqLworZW51bSByZmEgeworCWFjdF9mdWxsX21pbnVzXzEgPSAweDAwODAwMDAwLAorCWFjdF9mdWxsX21pbnVzXzIgPSAweDAwODAwMjAwLAorCWFjdF9mdWxsX21pbnVzXzMgPSAweDAwODAwNDAwLAorCWFjdF9mdWxsX21pbnVzXzQgPSAweDAwODAwNjAwLAorfTsKKy8qIFRoZXNob2xkIGZvciBEZWFjdGl2YXRpbmcgdGhlIEZDICovCitlbnVtIHJmZCB7CisJZGVhY19mdWxsX21pbnVzXzEgPSAweDAwNDAwMDAwLAorCWRlYWNfZnVsbF9taW51c18yID0gMHgwMDQwMDgwMCwKKwlkZWFjX2Z1bGxfbWludXNfMyA9IDB4MDA0MDEwMDAsCisJZGVhY19mdWxsX21pbnVzXzQgPSAweDAwNDAxODAwLAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVFNGCQkweDAwMjAwMDAwIC8qIFRyYW5zbWl0ICBTdG9yZSBhbmQgRm9yd2FyZCAqLworI2RlZmluZSBETUFfQ09OVFJPTF9GVEYJCTB4MDAxMDAwMDAgLyogRmx1c2ggdHJhbnNtaXQgRklGTyAqLworCitlbnVtIHR0Y19jb250cm9sIHsKKwlETUFfQ09OVFJPTF9UVENfNjQgPSAweDAwMDAwMDAwLAorCURNQV9DT05UUk9MX1RUQ18xMjggPSAweDAwMDA0MDAwLAorCURNQV9DT05UUk9MX1RUQ18xOTIgPSAweDAwMDA4MDAwLAorCURNQV9DT05UUk9MX1RUQ18yNTYgPSAweDAwMDBjMDAwLAorCURNQV9DT05UUk9MX1RUQ180MCA9IDB4MDAwMTAwMDAsCisJRE1BX0NPTlRST0xfVFRDXzMyID0gMHgwMDAxNDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMjQgPSAweDAwMDE4MDAwLAorCURNQV9DT05UUk9MX1RUQ18xNiA9IDB4MDAwMWMwMDAsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLCTB4ZmZmZTNmZmYKKworI2RlZmluZSBETUFfQ09OVFJPTF9FRkMJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRE1BX0NPTlRST0xfRkVGCQkweDAwMDAwMDgwCisjZGVmaW5lIERNQV9DT05UUk9MX0ZVRgkJMHgwMDAwMDA0MAorCitlbnVtIHJ0Y19jb250cm9sIHsKKwlETUFfQ09OVFJPTF9SVENfNjQgPSAweDAwMDAwMDAwLAorCURNQV9DT05UUk9MX1JUQ18zMiA9IDB4MDAwMDAwMDgsCisJRE1BX0NPTlRST0xfUlRDXzk2ID0gMHgwMDAwMDAxMCwKKwlETUFfQ09OVFJPTF9SVENfMTI4ID0gMHgwMDAwMDAxOCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RDX1JYX01BU0sJMHhmZmZmZmZlNworCisjZGVmaW5lIERNQV9DT05UUk9MX09TRgkweDAwMDAwMDA0CS8qIE9wZXJhdGUgb24gc2Vjb25kIGZyYW1lICovCisKKy8qIE1NQyByZWdpc3RlcnMgb2Zmc2V0ICovCisjZGVmaW5lIEdNQUNfTU1DX0NUUkwgICAgICAweDEwMAorI2RlZmluZSBHTUFDX01NQ19SWF9JTlRSICAgMHgxMDQKKyNkZWZpbmUgR01BQ19NTUNfVFhfSU5UUiAgIDB4MTA4CisjZGVmaW5lIEdNQUNfTU1DX1JYX0NTVU1fT0ZGTE9BRCAgIDB4MjA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1MTcxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYwpAQCAtMCwwICsxLDUxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTUFDIDEwLzEwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIKKyAgY3VycmVudGx5IHRlc3RlZCBvbiBhbGwgdGhlIFNUIGJvYXJkcyBiYXNlZCBvbiBTVGI3MTA5IGFuZCBzdHg3MjAwIFNvQ3MuCisKKyAgRFdDIEV0aGVyIE1BQyAxMC8xMDAgVW5pdmVyc2FsIHZlcnNpb24gNC4wIGhhcyBiZWVuIHVzZWQgZm9yIGRldmVsb3BpbmcKKyAgdGhpcyBjb2RlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1hYzEwMC5oIgorCisjdW5kZWYgTUFDMTAwX0RFQlVHCisvKiNkZWZpbmUgTUFDMTAwX0RFQlVHKi8KKyNpZmRlZiBNQUMxMDBfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG1hYzEwMF9jb3JlX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisJd3JpdGVsKCh2YWx1ZSB8IE1BQ19DT1JFX0lOSVQpLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCXdyaXRlbChFVEhfUF84MDIxUSwgaW9hZGRyICsgTUFDX1ZMQU4xKTsKKyNlbmRpZgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfbWFjX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJICAgICAgICJcdCAgTUFDMTAwIENTUiAoYmFzZSBhZGRyID0gMHglOHgpXG4iCisJICAgICAgICJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKKwlwcl9pbmZvKCJcdGNvbnRyb2wgcmVnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0NPTlRST0wsCisJICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSk7CisJcHJfaW5mbygiXHRhZGRyIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuICIsIE1BQ19BRERSX0hJR0gsCisJICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0hJR0gpKTsKKwlwcl9pbmZvKCJcdGFkZHIgTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQUREUl9MT1csCisJICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0xPVykpOworCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOworCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQkJTUFDX0hBU0hfTE9XLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKKwlwcl9pbmZvKCJcdGZsb3cgY29udHJvbCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1BQ19GTE9XX0NUUkwsIHJlYWRsKGlvYWRkciArIE1BQ19GTE9XX0NUUkwpKTsKKwlwcl9pbmZvKCJcdFZMQU4xIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMSwKKwkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4xKSk7CisJcHJfaW5mbygiXHRWTEFOMiB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjIsCisJICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19WTEFOMikpOworCXByX2luZm8oIlxuXHRNQUMgbWFuYWdlbWVudCBjb3VudGVyIHJlZ2lzdGVyc1xuIik7CisJcHJfaW5mbygiXHQgTU1DIGNydGwgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICAgICBNTUNfQ09OVFJPTCwgcmVhZGwoaW9hZGRyICsgTU1DX0NPTlRST0wpKTsKKwlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICAgICBNTUNfSElHSF9JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSKSk7CisJcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICAgICBNTUNfTE9XX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUikpOworCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgICAgTU1DX0hJR0hfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spKTsKKwlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgICAgTU1DX0xPV19JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUl9NQVNLKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwKKwkJCSAgIHUzMiBkbWFfcngpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwkvKiBETUEgU1cgcmVzZXQgKi8KKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKwlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7CisKKwkvKiBFbmFibGUgQXBwbGljYXRpb24gQWNjZXNzIGJ5IHdyaXRpbmcgdG8gRE1BIENTUjAgKi8KKwl3cml0ZWwoRE1BX0JVU19NT0RFX0RFRkFVTFQgfCAocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpLAorCSAgICAgICBpb2FkZHIgKyBETUFfQlVTX01PREUpOworCisJLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLworCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7CisKKwkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCisJICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KKwl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKKwl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3RvcmUgYW5kIEZvcndhcmQgY2FwYWJpbGl0eSBpcyBub3QgdXNlZCBhdCBhbGwuLgorICogVGhlIHRyYW5zbWl0IHRocmVzaG9sZCBjYW4gYmUgcHJvZ3JhbW1lZCBieQorICogc2V0dGluZyB0aGUgVFRDIGJpdHMgaW4gdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLiovCitzdGF0aWMgdm9pZCBtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAorCQkJCSAgICAgIGludCByeG1vZGUpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlpZiAodHhtb2RlIDw9IDMyKQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKKwllbHNlIGlmICh0eG1vZGUgPD0gNjQpCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCWVsc2UKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IGk7CisKKwlEQkcoS0VSTl9ERUJVRyAiTUFDMTAwIERNQSBDU1IgXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlwcl9kZWJ1ZygiXHQgQ1NSJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAorCQkgICAgICAgKERNQV9CVVNfTU9ERSArIGkgKiA0KSwKKwkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIGkgKiA0KSk7CisJREJHKEtFUk5fREVCVUcgIlx0IENTUjIwIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgRE1BX0NVUl9UWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9UWF9CVUZfQUREUikpOworCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgIERNQV9DVVJfUlhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfUlhfQlVGX0FERFIpKTsKKwlyZXR1cm47Cit9CisKKy8qIERNQSBjb250cm9sbGVyIGhhcyB0d28gY291bnRlcnMgdG8gdHJhY2sgdGhlIG51bWJlciBvZgorICAgdGhlIHJlY2VpdmUgbWlzc2VkIGZyYW1lcy4gKi8KK3N0YXRpYyB2b2lkIG1hYzEwMF9kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKwl1MzIgY3NyOCA9IHJlYWRsKGlvYWRkciArIERNQV9NSVNTRURfRlJBTUVfQ1RSKTsKKworCWlmICh1bmxpa2VseShjc3I4KSkgeworCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFKSB7CisJCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gMHg4MDA7CisJCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IDB4ODAwOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IG92ZV9jbnRyOworCQkJb3ZlX2NudHIgPSAoKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9DTlRSKSA+PiAxNyk7CisJCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gb3ZlX2NudHI7CisJCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IG92ZV9jbnRyOworCQl9CisKKwkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9NKSB7CisJCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSAweGZmZmY7CisJCQl4LT5yeF9taXNzZWRfY250ciArPSAweGZmZmY7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbWlzc19mID0gKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX01fQ05UUik7CisJCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSBtaXNzX2Y7CisJCQl4LT5yeF9taXNzZWRfY250ciArPSBtaXNzX2Y7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgeworCQkJeC0+dHhfY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKKwkJCXgtPnR4X2xvc3NjYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKKwkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAorCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKKwkJcmV0ID0gLTE7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKKwkJeC0+dHhfaGVhcnRiZWF0Kys7CisJCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCXJldCA9IC0xOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQorCQl4LT50eF9kZWZlcnJlZCsrOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyBpZiBlYWNoIGluY29taW5nIGZyYW1lIGhhcyBzb21lIGVycm9ycworICogYW5kLCBpZiByZXF1aXJlZCwgdXBkYXRlcyB0aGUgbXVsdGljYXN0IHN0YXRpc3RpY3MuCisgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHJldHVybnMgY3N1bV9ub25lIGJlY2FzdWUgdGhlIGRldmljZQorICogaXMgbm90IGFibGUgdG8gY29tcHV0ZSB0aGUgY3N1bSBpbiBIVy4gKi8KK3N0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGNzdW1fbm9uZTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgeworCQlwcl93YXJuaW5nKCJtYWMxMDAgRXJyb3I6IE92ZXJzaXplZCBFdGhlcm5ldCAiCisJCQkgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzXG4iKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJcmV0dXJuIGRpc2NhcmRfZnJhbWU7CisJfQorCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmVycm9yX3N1bW1hcnkpKSB7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kZXNjcmlwdG9yX2Vycm9yKSkKKwkJCXgtPnJ4X2Rlc2MrKzsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnBhcnRpYWxfZnJhbWVfZXJyb3IpKQorCQkJeC0+cnhfcGFydGlhbCsrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucnVuX2ZyYW1lKSkKKwkJCXgtPnJ4X3J1bnQrKzsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmZyYW1lX3Rvb19sb25nKSkKKwkJCXgtPnJ4X3Rvb2xvbmcrKzsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNvbGxpc2lvbikpIHsKKwkJCXgtPnJ4X2NvbGxpc2lvbisrOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY3JjX2Vycm9yKSkgeworCQkJeC0+cnhfY3JjKys7CisJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQl9CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kcmliYmxpbmcpKQorCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxlbmd0aF9lcnJvcikpIHsKKwkJeC0+cnhfbGVuZ2h0Kys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5taWlfZXJyb3IpKSB7CisJCXgtPnJ4X21paSsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAocC0+ZGVzMDEucngubXVsdGljYXN0X2ZyYW1lKSB7CisJCXgtPnJ4X211bHRpY2FzdCsrOworCQlzdGF0cy0+bXVsdGljYXN0Kys7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgIHVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2dldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgIHVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUFI7CisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPIHwKKwkJCSAgIE1BQ19DT05UUk9MX0hQKTsKKwl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gSEFTSF9UQUJMRV9TSVpFKQorCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUE07CisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKKwl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgewkvKiBubyBtdWx0aWNhc3QgKi8KKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfAorCQkJICAgTUFDX0NPTlRST0xfSE8gfCBNQUNfQ09OVFJPTF9IUCk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXUzMiBtY19maWx0ZXJbMl07CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJCS8qIFBlcmZlY3QgZmlsdGVyIG1vZGUgZm9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kIEhhc2gKKwkJICAgZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KKwkJdmFsdWUgfD0gTUFDX0NPTlRST0xfSFA7CisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGCisJCQkgICB8IE1BQ19DT05UUk9MX0hPKTsKKworCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKKwkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bworCQkJICogaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KKwkJCWludCBiaXRfbnIgPQorCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CisJCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KKwkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0CisJCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCX0KKwkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKKwkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7CisJfQorCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwlEQkcoS0VSTl9JTkZPICIlczogQ1RSTCByZWc6IDB4JTA4eCBIYXNoIHJlZ3M6ICIKKwkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLAorCSAgICBfX2Z1bmNfXywgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpLAorCSAgICByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAorCQkJICAgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gTUFDX0ZMT1dfQ1RSTF9FTkFCTEU7CisKKwlpZiAoZHVwbGV4KQorCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBNQUNfRkxPV19DVFJMKTsKKworCXJldHVybjsKK30KKworLyogTm8gUE1UIG1vZHVsZSBzdXBwb3J0ZWQgaW4gb3VyIFNvQyAgZm9yIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLiAqLworc3RhdGljIHZvaWQgbWFjMTAwX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLnJ4Lm93biA9IDE7CisJCXAtPmRlczAxLnJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzJLaUIgLSAxOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEucnguZW5kX3JpbmcgPSAxOworCQlpZiAoZGlzYWJsZV9yeF9pYykKKwkJCXAtPmRlczAxLnJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLnR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS50eC5lbmRfcmluZyA9IDE7CisJCXArKzsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5vd247Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnJ4Lm93bjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEucngub3duID0gMTsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50OworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgdGVyID0gcC0+ZGVzMDEudHguZW5kX3Jpbmc7CisKKwkvKiBjbGVhbiBmaWVsZCB1c2VkIHdpdGhpbiB0aGUgeG1pdCAqLworCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSAwOworCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDA7CisJcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gMDsKKworCS8qIGNsZWFuIHN0YXR1cyByZXBvcnRlZCAqLworCXAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkgPSAwOworCXAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvciA9IDA7CisJcC0+ZGVzMDEudHgubm9fY2FycmllciA9IDA7CisJcC0+ZGVzMDEudHgubG9zc19jYXJyaWVyID0gMDsKKwlwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwgPSAwOworCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zID0gMDsKKwlwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbiA9IDA7CisJcC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwgPSAwOworCXAtPmRlczAxLnR4LmRlZmVycmVkID0gMDsKKworCS8qIHNldCB0ZXJtaW5hdGlvbiBmaWVsZCAqLworCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gdGVyOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAorCQkJCSAgIGludCBjc3VtX2ZsYWcpCit7CisJcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAwOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAxOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEucnguZnJhbWVfbGVuZ3RoOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBtYWMxMDBfZHJpdmVyID0geworCS5jb3JlX2luaXQgPSBtYWMxMDBfY29yZV9pbml0LAorCS5kdW1wX21hY19yZWdzID0gbWFjMTAwX2R1bXBfbWFjX3JlZ3MsCisJLmRtYV9pbml0ID0gbWFjMTAwX2RtYV9pbml0LAorCS5kdW1wX2RtYV9yZWdzID0gbWFjMTAwX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gbWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIsCisJLnR4X3N0YXR1cyA9IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzLAorCS5yeF9zdGF0dXMgPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKKwkuZ2V0X3R4X2xlbiA9IG1hYzEwMF9nZXRfdHhfbGVuLAorCS5zZXRfZmlsdGVyID0gbWFjMTAwX3NldF9maWx0ZXIsCisJLmZsb3dfY3RybCA9IG1hYzEwMF9mbG93X2N0cmwsCisJLnBtdCA9IG1hYzEwMF9wbXQsCisJLmluaXRfcnhfZGVzYyA9IG1hYzEwMF9pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IG1hYzEwMF9pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IG1hYzEwMF9nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IG1hYzEwMF9nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IG1hYzEwMF9yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IG1hYzEwMF9wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gbWFjMTAwX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gbWFjMTAwX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IG1hYzEwMF9nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IG1hYzEwMF9zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IG1hYzEwMF9zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKKwkuaG9zdF9pcnFfc3RhdHVzID0gbWFjMTAwX2lycV9zdGF0dXMsCisJLnNldF91bWFjX2FkZHIgPSBtYWMxMDBfc2V0X3VtYWNfYWRkciwKKwkuZ2V0X3VtYWNfYWRkciA9IG1hYzEwMF9nZXRfdW1hY19hZGRyLAorfTsKKworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKKworCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCXByX2luZm8oIlx0TUFDIDEwLzEwMFxuIik7CisKKwltYWMtPm9wcyA9ICZtYWMxMDBfZHJpdmVyOworCW1hYy0+aHcucG10ID0gUE1UX05PVF9TVVBQT1JURUQ7CisJbWFjLT5ody5saW5rLnBvcnQgPSBNQUNfQ09OVFJPTF9QUzsKKwltYWMtPmh3LmxpbmsuZHVwbGV4ID0gTUFDX0NPTlRST0xfRjsKKwltYWMtPmh3Lmxpbmsuc3BlZWQgPSAwOworCW1hYy0+aHcubWlpLmFkZHIgPSBNQUNfTUlJX0FERFI7CisJbWFjLT5ody5taWkuZGF0YSA9IE1BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjExMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuaApAQCAtMCwwICsxLDExNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgTUFDIDEwLzEwMCBIZWFkZXIgRmlsZQorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAJCQlNQUMgQkxPQ0sgZGVmaW5lcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTUFDIENTUiBvZmZzZXQgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0wJMHgwMDAwMDAwMAkvKiBNQUMgQ29udHJvbCAqLworI2RlZmluZSBNQUNfQUREUl9ISUdICTB4MDAwMDAwMDQJLyogTUFDIEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBNQUNfQUREUl9MT1cJMHgwMDAwMDAwOAkvKiBNQUMgQWRkcmVzcyBMb3cgKi8KKyNkZWZpbmUgTUFDX0hBU0hfSElHSAkweDAwMDAwMDBjCS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIEhpZ2ggKi8KKyNkZWZpbmUgTUFDX0hBU0hfTE9XCTB4MDAwMDAwMTAJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCisjZGVmaW5lIE1BQ19NSUlfQUREUgkweDAwMDAwMDE0CS8qIE1JSSBBZGRyZXNzICovCisjZGVmaW5lIE1BQ19NSUlfREFUQQkweDAwMDAwMDE4CS8qIE1JSSBEYXRhICovCisjZGVmaW5lIE1BQ19GTE9XX0NUUkwJMHgwMDAwMDAxYwkvKiBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX1ZMQU4xCTB4MDAwMDAwMjAJLyogVkxBTjEgVGFnICovCisjZGVmaW5lIE1BQ19WTEFOMgkweDAwMDAwMDI0CS8qIFZMQU4yIFRhZyAqLworCisvKiBNQUMgQ1RSTCBkZWZpbmVzICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBBbGwgTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9CTEUJMHg0MDAwMDAwMAkvKiBFbmRpYW4gTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9IQkQJMHgxMDAwMDAwMAkvKiBIZWFydGJlYXQgRGlzYWJsZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9QUwkweDA4MDAwMDAwCS8qIFBvcnQgU2VsZWN0ICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0RSTwkweDAwODAwMDAwCS8qIERpc2FibGUgUmVjZWl2ZSBPd24gKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfRVhUX0xPT1BCQUNLIDB4MDA0MDAwMDAJLyogUmVzZXJ2ZWQgKGV4dCBsb29wYmFjaz8pICovCisjZGVmaW5lIE1BQ19DT05UUk9MX09NCTB4MDAyMDAwMDAJLyogTG9vcGJhY2sgT3BlcmF0aW5nIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfRgkweDAwMTAwMDAwCS8qIEZ1bGwgRHVwbGV4IE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUE0JMHgwMDA4MDAwMAkvKiBQYXNzIEFsbCBNdWx0aWNhc3QgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUFIJMHgwMDA0MDAwMAkvKiBQcm9taXNjdW91cyBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0lGCTB4MDAwMjAwMDAJLyogSW52ZXJzZSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUEIJMHgwMDAxMDAwMAkvKiBQYXNzIEJhZCBGcmFtZXMgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfSE8JMHgwMDAwODAwMAkvKiBIYXNoIE9ubHkgRmlsdGVyaW5nIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfSFAJMHgwMDAwMjAwMAkvKiBIYXNoL1BlcmZlY3QgRmlsdGVyaW5nIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfTENDCTB4MDAwMDEwMDAJLyogTGF0ZSBDb2xsaXNpb24gQ29udHJvbCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9EQkYJMHgwMDAwMDgwMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBGcmFtZXMgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfRFJUWQkweDAwMDAwNDAwCS8qIERpc2FibGUgUmV0cnkgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQVNUUAkweDAwMDAwMTAwCS8qIEF1dG9tYXRpYyBQYWQgU3RyaXBwaW5nICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0JPTE1UXzEwCTB4MDAwMDAwMDAJLyogQmFjayBPZmYgTGltaXQgMTAgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQk9MTVRfOAkweDAwMDAwMDQwCS8qIEJhY2sgT2ZmIExpbWl0IDggKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQk9MTVRfNAkweDAwMDAwMDgwCS8qIEJhY2sgT2ZmIExpbWl0IDQgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQk9MTVRfMQkweDAwMDAwMGMwCS8qIEJhY2sgT2ZmIExpbWl0IDEgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfREMJCTB4MDAwMDAwMjAJLyogRGVmZXJyYWwgQ2hlY2sgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfVEUJCTB4MDAwMDAwMDgJLyogVHJhbnNtaXR0ZXIgRW5hYmxlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0CS8qIFJlY2VpdmVyIEVuYWJsZSAqLworCisjZGVmaW5lIE1BQ19DT1JFX0lOSVQgKE1BQ19DT05UUk9MX0hCRCB8IE1BQ19DT05UUk9MX0FTVFApCisKKy8qIE1BQyBGTE9XIENUUkwgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfRkxPV19DVFJMX1BUX01BU0sJMHhmZmZmMDAwMAkvKiBQYXVzZSBUaW1lIE1hc2sgKi8KKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgorI2RlZmluZSBNQUNfRkxPV19DVFJMX1BBU1MJMHgwMDAwMDAwNAkvKiBQYXNzIENvbnRyb2wgRnJhbWVzICovCisjZGVmaW5lIE1BQ19GTE9XX0NUUkxfRU5BQkxFCTB4MDAwMDAwMDIJLyogRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBNQUNfRkxPV19DVFJMX1BBVVNFCTB4MDAwMDAwMDEJLyogRmxvdyBDb250cm9sIEJ1c3kgLi4uICovCisKKy8qIE1JSSBBRERSICBkZWZpbmVzICovCisjZGVmaW5lIE1BQ19NSUlfQUREUl9XUklURQkweDAwMDAwMDAyCS8qIE1JSSBXcml0ZSAqLworI2RlZmluZSBNQUNfTUlJX0FERFJfQlVTWQkweDAwMDAwMDAxCS8qIE1JSSBCdXN5ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCQkJCURNQSBCTE9DSyBkZWZpbmVzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERNQSBCdXMgTW9kZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EQk8JMHgwMDEwMDAwMAkvKiBEZXNjcmlwdG9yIEJ5dGUgT3JkZXJpbmcgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0JMRQkweDAwMDAwMDgwCS8qIEJpZyBFbmRpYW4vTGl0dGxlIEVuZGlhbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAorI2RlZmluZSBETUFfQlVTX01PREVfRFNMX01BU0sJMHgwMDAwMDA3YwkvKiBEZXNjcmlwdG9yIFNraXAgTGVuZ3RoICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfU0hJRlQJMgkvKiAgIChpbiBEV09SRFMpICAgICAgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0JBUl9CVVMJMHgwMDAwMDAwMgkvKiBCYXItQnVzIEFyYml0cmF0aW9uICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQJMHgwMDAwMDAwMQkvKiBTb2Z0d2FyZSBSZXNldCAqLworI2RlZmluZSBETUFfQlVTX01PREVfREVGQVVMVAkweDAwMDAwMDAwCisKKy8qIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU0YJCTB4MDAyMDAwMDAJLyogU3RvcmUgQW5kIEZvcndhcmQgKi8KKworLyogVHJhbnNtaXQgVGhyZXNob2xkIENvbnRyb2wgKi8KK2VudW0gdHRjX2NvbnRyb2wgeworCURNQV9DT05UUk9MX1RUQ19ERUZBVUxUID0gMHgwMDAwMDAwMCwJLyogVGhyZXNob2xkIGlzIDMyIERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDQwMDAsCS8qIFRocmVzaG9sZCBpcyA2NCBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfMTI4ID0gMHgwMDAwODAwMCwJLyogVGhyZXNob2xkIGlzIDEyOCBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfMjU2ID0gMHgwMDAwYzAwMCwJLyogVGhyZXNob2xkIGlzIDI1NiBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfMTggPSAweDAwNDAwMDAwLAkvKiBUaHJlc2hvbGQgaXMgMTggRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzI0ID0gMHgwMDQwNDAwMCwJLyogVGhyZXNob2xkIGlzIDI0IERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ18zMiA9IDB4MDA0MDgwMDAsCS8qIFRocmVzaG9sZCBpcyAzMiBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfNDAgPSAweDAwNDBjMDAwLAkvKiBUaHJlc2hvbGQgaXMgNDAgRFdPUkRTICovCisJRE1BX0NPTlRST0xfU0UgPSAweDAwMDAwMDA4LAkvKiBTdG9wIE9uIEVtcHR5ICovCisJRE1BX0NPTlRST0xfT1NGID0gMHgwMDAwMDAwNCwJLyogT3BlcmF0ZSBPbiAybmQgRnJhbWUgKi8KK307CisKKy8qIFNUTUFDMTEwIERNQSBNaXNzZWQgRnJhbWUgQ291bnRlciByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfT1ZFCTB4MTAwMDAwMDAJLyogRklGTyBPdmVyZmxvdyBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX09WRV9DTlRSIDB4MGZmZTAwMDAJLyogT3ZlcmZsb3cgRnJhbWUgQ291bnRlciAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX09WRV9NCTB4MDAwMTAwMDAJLyogTWlzc2VkIEZyYW1lIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfTV9DTlRSCTB4MDAwMGZmZmYJLyogTWlzc2VkIEZyYW1lIENvdWludGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyZWFlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApAQCAtMCwwICsxLDk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIk9jdF8wOSIKKworI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQorI2RlZmluZSBTVE1NQUNfVkxBTl9UQUdfVVNFRAorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorI2luY2x1ZGUgInN0bW1hY190aW1lci5oIgorI2VuZGlmCisKK3N0cnVjdCBzdG1tYWNfcHJpdiB7CisJLyogRnJlcXVlbnRseSB1c2VkIHZhbHVlcyBhcmUga2VwdCBhZGphY2VudCBmb3IgY2FjaGUgZWZmZWN0ICovCisJc3RydWN0IGRtYV9kZXNjICpkbWFfdHggX19fX2NhY2hlbGluZV9hbGlnbmVkOworCWRtYV9hZGRyX3QgZG1hX3R4X3BoeTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X3NrYnVmZjsKKwl1bnNpZ25lZCBpbnQgY3VyX3R4OworCXVuc2lnbmVkIGludCBkaXJ0eV90eDsKKwl1bnNpZ25lZCBpbnQgZG1hX3R4X3NpemU7CisJaW50IHR4X2NvZTsKKwlpbnQgdHhfY29hbGVzY2U7CisKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRtYV9yeCA7CisJdW5zaWduZWQgaW50IGN1cl9yeDsKKwl1bnNpZ25lZCBpbnQgZGlydHlfcng7CisJc3RydWN0IHNrX2J1ZmYgKipyeF9za2J1ZmY7CisJZG1hX2FkZHJfdCAqcnhfc2tidWZmX2RtYTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3JlY3ljbGU7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpc19nbWFjOworCWRtYV9hZGRyX3QgZG1hX3J4X3BoeTsKKwl1bnNpZ25lZCBpbnQgZG1hX3J4X3NpemU7CisJaW50IHJ4X2NzdW07CisJdW5zaWduZWQgaW50IGRtYV9idWZfc3o7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hY190eXBlOworCisJc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyB4c3RhdHM7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisKKwlwaHlfaW50ZXJmYWNlX3QgcGh5X2ludGVyZmFjZTsKKwlpbnQgcGJsOworCWludCBidXNfaWQ7CisJaW50IHBoeV9hZGRyOworCWludCBwaHlfbWFzazsKKwlpbnQgKCpwaHlfcmVzZXQpICh2b2lkICpwcml2KTsKKwl2b2lkICgqZml4X21hY19zcGVlZCkgKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBzcGVlZCk7CisJdm9pZCAqYnNwX3ByaXY7CisKKwlpbnQgcGh5X2lycTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCWludCBvbGRsaW5rOworCWludCBzcGVlZDsKKwlpbnQgb2xkZHVwbGV4OworCXVuc2lnbmVkIGludCBmbG93X2N0cmw7CisJdW5zaWduZWQgaW50IHBhdXNlOworCXN0cnVjdCBtaWlfYnVzICptaWk7CisKKwl1MzIgbXNnX2VuYWJsZTsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IHdvbG9wdHM7CisJaW50IHdvbGVuYWJsZWQ7CisJaW50IHNodXRkb3duOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bTsKKyNlbmRpZgorI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOworI2VuZGlmCit9OworCitleHRlcm4gaW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworZXh0ZXJuIGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CitleHRlcm4gdm9pZCBzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRlYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKQEAgLTAsMCArMSwzOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBFdGh0b29sIHN1cHBvcnQKKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSAic3RtbWFjLmgiCisKKyNkZWZpbmUgUkVHX1NQQUNFX1NJWkUJMHgxMDU0CisjZGVmaW5lIE1BQzEwMF9FVEhUT09MX05BTUUJInN0X21hYzEwMCIKKyNkZWZpbmUgR01BQ19FVEhUT09MX05BTUUJInN0X2dtYWMiCisKK3N0cnVjdCBzdG1tYWNfc3RhdHMgeworCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKKwlpbnQgc2l6ZW9mX3N0YXQ7CisJaW50IHN0YXRfb2Zmc2V0OworfTsKKworI2RlZmluZSBTVE1NQUNfU1RBVChtKQlcCisJeyAjbSwgRklFTERfU0laRU9GKHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMsIG0pLAlcCisJb2Zmc2V0b2Yoc3RydWN0IHN0bW1hY19wcml2LCB4c3RhdHMubSl9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgIHN0bW1hY19zdGF0cyBzdG1tYWNfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKKwlTVE1NQUNfU1RBVCh0eF91bmRlcmZsb3cpLAorCVNUTU1BQ19TVEFUKHR4X2NhcnJpZXIpLAorCVNUTU1BQ19TVEFUKHR4X2xvc3NjYXJyaWVyKSwKKwlTVE1NQUNfU1RBVCh0eF9oZWFydGJlYXQpLAorCVNUTU1BQ19TVEFUKHR4X2RlZmVycmVkKSwKKwlTVE1NQUNfU1RBVCh0eF92bGFuKSwKKwlTVE1NQUNfU1RBVChyeF92bGFuKSwKKwlTVE1NQUNfU1RBVCh0eF9qYWJiZXIpLAorCVNUTU1BQ19TVEFUKHR4X2ZyYW1lX2ZsdXNoZWQpLAorCVNUTU1BQ19TVEFUKHR4X3BheWxvYWRfZXJyb3IpLAorCVNUTU1BQ19TVEFUKHR4X2lwX2hlYWRlcl9lcnJvciksCisJU1RNTUFDX1NUQVQocnhfZGVzYyksCisJU1RNTUFDX1NUQVQocnhfcGFydGlhbCksCisJU1RNTUFDX1NUQVQocnhfcnVudCksCisJU1RNTUFDX1NUQVQocnhfdG9vbG9uZyksCisJU1RNTUFDX1NUQVQocnhfY29sbGlzaW9uKSwKKwlTVE1NQUNfU1RBVChyeF9jcmMpLAorCVNUTU1BQ19TVEFUKHJ4X2xlbmdodCksCisJU1RNTUFDX1NUQVQocnhfbWlpKSwKKwlTVE1NQUNfU1RBVChyeF9tdWx0aWNhc3QpLAorCVNUTU1BQ19TVEFUKHJ4X2dtYWNfb3ZlcmZsb3cpLAorCVNUTU1BQ19TVEFUKHJ4X3dhdGNoZG9nKSwKKwlTVE1NQUNfU1RBVChkYV9yeF9maWx0ZXJfZmFpbCksCisJU1RNTUFDX1NUQVQoc2FfcnhfZmlsdGVyX2ZhaWwpLAorCVNUTU1BQ19TVEFUKHJ4X21pc3NlZF9jbnRyKSwKKwlTVE1NQUNfU1RBVChyeF9vdmVyZmxvd19jbnRyKSwKKwlTVE1NQUNfU1RBVCh0eF91bmRlZmxvd19pcnEpLAorCVNUTU1BQ19TVEFUKHR4X3Byb2Nlc3Nfc3RvcHBlZF9pcnEpLAorCVNUTU1BQ19TVEFUKHR4X2phYmJlcl9pcnEpLAorCVNUTU1BQ19TVEFUKHJ4X292ZXJmbG93X2lycSksCisJU1RNTUFDX1NUQVQocnhfYnVmX3VuYXZfaXJxKSwKKwlTVE1NQUNfU1RBVChyeF9wcm9jZXNzX3N0b3BwZWRfaXJxKSwKKwlTVE1NQUNfU1RBVChyeF93YXRjaGRvZ19pcnEpLAorCVNUTU1BQ19TVEFUKHR4X2Vhcmx5X2lycSksCisJU1RNTUFDX1NUQVQoZmF0YWxfYnVzX2Vycm9yX2lycSksCisJU1RNTUFDX1NUQVQodGhyZXNob2xkKSwKKwlTVE1NQUNfU1RBVCh0eF9wa3RfbiksCisJU1RNTUFDX1NUQVQocnhfcGt0X24pLAorCVNUTU1BQ19TVEFUKHBvbGxfbiksCisJU1RNTUFDX1NUQVQoc2NoZWRfdGltZXJfbiksCisJU1RNTUFDX1NUQVQobm9ybWFsX2lycV9uKSwKK307CisjZGVmaW5lIFNUTU1BQ19TVEFUU19MRU4gQVJSQVlfU0laRShzdG1tYWNfZ3N0cmluZ3Nfc3RhdHMpCisKK3ZvaWQgc3RtbWFjX2V0aHRvb2xfZ2V0ZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghcHJpdi0+aXNfZ21hYykKKwkJc3RyY3B5KGluZm8tPmRyaXZlciwgTUFDMTAwX0VUSFRPT0xfTkFNRSk7CisJZWxzZQorCQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBHTUFDX0VUSFRPT0xfTkFNRSk7CisKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OKTsKKwlpbmZvLT5md192ZXJzaW9uWzBdID0gJ1wwJzsKKwlpbmZvLT5uX3N0YXRzID0gU1RNTUFDX1NUQVRTX0xFTjsKKwlyZXR1cm47Cit9CisKK2ludCBzdG1tYWNfZXRodG9vbF9nZXRzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBwcml2LT5waHlkZXY7CisJaW50IHJjOworCWlmIChwaHkgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiAlczogUEhZIGlzIG5vdCByZWdpc3RlcmVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlwcl9lcnIoIiVzOiBpbnRlcmZhY2UgaXMgZGlzYWJsZWQ6IHdlIGNhbm5vdCB0cmFjayAiCisJCSJsaW5rIHNwZWVkIC8gZHVwbGV4IHNldHRpbmdcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXJjID0gcGh5X2V0aHRvb2xfZ3NldChwaHksIGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBzdG1tYWNfZXRodG9vbF9zZXRzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBwcml2LT5waHlkZXY7CisJaW50IHJjOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlyYyA9IHBoeV9ldGh0b29sX3NzZXQocGh5LCBjbWQpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKwordTMyIHN0bW1hY19ldGh0b29sX2dldG1zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gcHJpdi0+bXNnX2VuYWJsZTsKK30KKwordm9pZCBzdG1tYWNfZXRodG9vbF9zZXRtc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwcml2LT5tc2dfZW5hYmxlID0gbGV2ZWw7CisKK30KKworaW50IHN0bW1hY19jaGVja19pZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdG1tYWNfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gUkVHX1NQQUNFX1NJWkU7Cit9CisKK3ZvaWQgc3RtbWFjX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqc3BhY2UpCit7CisJaW50IGk7CisJdTMyICpyZWdfc3BhY2UgPSAodTMyICopIHNwYWNlOworCisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW1lbXNldChyZWdfc3BhY2UsIDB4MCwgUkVHX1NQQUNFX1NJWkUpOworCisJaWYgKCFwcml2LT5pc19nbWFjKSB7CisJCS8qIE1BQyByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCisJCQlyZWdfc3BhY2VbaV0gPSByZWFkbChkZXYtPmJhc2VfYWRkciArIChpICogNCkpOworCQkvKiBETUEgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlyZWdfc3BhY2VbaSArIDEyXSA9CisJCQkgICAgcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyAoRE1BX0JVU19NT0RFICsgKGkgKiA0KSkpOworCQlyZWdfc3BhY2VbMjJdID0gcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyBETUFfQ1VSX1RYX0JVRl9BRERSKTsKKwkJcmVnX3NwYWNlWzIzXSA9IHJlYWRsKGRldi0+YmFzZV9hZGRyICsgRE1BX0NVUl9SWF9CVUZfQUREUik7CisJfSBlbHNlIHsKKwkJLyogTUFDIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgNTU7IGkrKykKKwkJCXJlZ19zcGFjZVtpXSA9IHJlYWRsKGRldi0+YmFzZV9hZGRyICsgKGkgKiA0KSk7CisJCS8qIERNQSByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDIyOyBpKyspCisJCQlyZWdfc3BhY2VbaSArIDU1XSA9CisJCQkgICAgcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyAoRE1BX0JVU19NT0RFICsgKGkgKiA0KSkpOworCX0KKworCXJldHVybjsKK30KKworaW50IHN0bW1hY19ldGh0b29sX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwllbHNlCisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKKworCXJldHVybiAwOworfQorCit1MzIgc3RtbWFjX2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHByaXYtPnJ4X2NzdW07Cit9CisKK3N0YXRpYyB2b2lkCitzdG1tYWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwlwYXVzZS0+cnhfcGF1c2UgPSAwOworCXBhdXNlLT50eF9wYXVzZSA9IDA7CisJcGF1c2UtPmF1dG9uZWcgPSBwcml2LT5waHlkZXYtPmF1dG9uZWc7CisKKwlpZiAocHJpdi0+Zmxvd19jdHJsICYgRkxPV19SWCkKKwkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKKwlpZiAocHJpdi0+Zmxvd19jdHJsICYgRkxPV19UWCkKKwkJcGF1c2UtPnR4X3BhdXNlID0gMTsKKworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3N0bW1hY19zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBwcml2LT5waHlkZXY7CisJaW50IG5ld19wYXVzZSA9IEZMT1dfT0ZGOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCWlmIChwYXVzZS0+cnhfcGF1c2UpCisJCW5ld19wYXVzZSB8PSBGTE9XX1JYOworCWlmIChwYXVzZS0+dHhfcGF1c2UpCisJCW5ld19wYXVzZSB8PSBGTE9XX1RYOworCisJcHJpdi0+Zmxvd19jdHJsID0gbmV3X3BhdXNlOworCisJaWYgKHBoeS0+YXV0b25lZykgeworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCQkJLyogYXV0by1uZWdvdGlhdGlvbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCAqLworCQkJY21kLmNtZCA9IEVUSFRPT0xfTldBWV9SU1Q7CisJCQljbWQuc3VwcG9ydGVkID0gcGh5LT5zdXBwb3J0ZWQ7CisJCQljbWQuYWR2ZXJ0aXNpbmcgPSBwaHktPmFkdmVydGlzaW5nOworCQkJY21kLmF1dG9uZWcgPSBwaHktPmF1dG9uZWc7CisJCQljbWQuc3BlZWQgPSBwaHktPnNwZWVkOworCQkJY21kLmR1cGxleCA9IHBoeS0+ZHVwbGV4OworCQkJY21kLnBoeV9hZGRyZXNzID0gcGh5LT5hZGRyOworCQkJcmV0ID0gcGh5X2V0aHRvb2xfc3NldChwaHksICZjbWQpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBuZXRkZXYtPmJhc2VfYWRkcjsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Zmxvd19jdHJsKGlvYWRkciwgcGh5LT5kdXBsZXgsCisJCQkJCSAgICAgICBwcml2LT5mbG93X2N0cmwsIHByaXYtPnBhdXNlKTsKKwl9CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZHVtbXksIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IGk7CisKKwkvKiBVcGRhdGUgSFcgc3RhdHMgaWYgc3VwcG9ydGVkICovCisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX2RpYWdub3N0aWNfZnIoJmRldi0+c3RhdHMsICZwcml2LT54c3RhdHMsCisJCQkJCSAgICAgICBpb2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IFNUTU1BQ19TVEFUU19MRU47IGkrKykgeworCQljaGFyICpwID0gKGNoYXIgKilwcml2ICsgc3RtbWFjX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0OworCQlkYXRhW2ldID0gKHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQorCQlzaXplb2YodTY0KSkgPyAoKih1NjQgKilwKSA6ICgqKHUzMiAqKXApOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBzdG1tYWNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBTVE1NQUNfU1RBVFNfTEVOOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwl1OCAqcCA9IGRhdGE7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgU1RNTUFDX1NUQVRTX0xFTjsgaSsrKSB7CisJCQltZW1jcHkocCwgc3RtbWFjX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfc3RyaW5nLAorCQkJCUVUSF9HU1RSSU5HX0xFTik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorCisvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFdPTCB0aHJvdWdoIE1hZ2ljIHBhY2tldC4gKi8KK3N0YXRpYyB2b2lkIHN0bW1hY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJaWYgKHByaXYtPndvbGVuYWJsZWQgPT0gUE1UX1NVUFBPUlRFRCkgeworCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7CisJCXdvbC0+d29sb3B0cyA9IHByaXYtPndvbG9wdHM7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHN1cHBvcnQgPSBXQUtFX01BR0lDOworCisJaWYgKHByaXYtPndvbGVuYWJsZWQgPT0gUE1UX05PVF9TVVBQT1JURUQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdvbC0+d29sb3B0cyAmIH5zdXBwb3J0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgPT0gMCkKKwkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHByaXYtPmRldmljZSwgMCk7CisJZWxzZQorCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUocHJpdi0+ZGV2aWNlLCAxKTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXByaXYtPndvbG9wdHMgPSB3b2wtPndvbG9wdHM7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHN0bW1hY19ldGh0b29sX29wcyA9IHsKKwkuYmVnaW4gPSBzdG1tYWNfY2hlY2tfaWZfcnVubmluZywKKwkuZ2V0X2RydmluZm8gPSBzdG1tYWNfZXRodG9vbF9nZXRkcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgPSBzdG1tYWNfZXRodG9vbF9nZXRzZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gc3RtbWFjX2V0aHRvb2xfc2V0c2V0dGluZ3MsCisJLmdldF9tc2dsZXZlbCA9IHN0bW1hY19ldGh0b29sX2dldG1zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBzdG1tYWNfZXRodG9vbF9zZXRtc2dsZXZlbCwKKwkuZ2V0X3JlZ3MgPSBzdG1tYWNfZXRodG9vbF9ncmVncywKKwkuZ2V0X3JlZ3NfbGVuID0gc3RtbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yeF9jc3VtID0gc3RtbWFjX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBzdG1tYWNfZXRodG9vbF9zZXRfdHhfY3N1bSwKKwkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0gPSBzdG1tYWNfc2V0X3BhdXNlcGFyYW0sCisJLmdldF9ldGh0b29sX3N0YXRzID0gc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfc3RyaW5ncyA9IHN0bW1hY19nZXRfc3RyaW5ncywKKwkuZ2V0X3dvbCA9IHN0bW1hY19nZXRfd29sLAorCS5zZXRfd29sID0gc3RtbWFjX3NldF93b2wsCisJLmdldF9zc2V0X2NvdW50CT0gc3RtbWFjX2dldF9zc2V0X2NvdW50LAorI2lmZGVmIE5FVElGX0ZfVFNPCisJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisjZW5kaWYKK307CisKK3ZvaWQgc3RtbWFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZzdG1tYWNfZXRodG9vbF9vcHMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQyOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTAsMCArMSwyMjEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBTVCBNQUMgMTAvMTAwLzEwMDAgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVycy4KKyAgU1QgRXRoZXJuZXQgSVBzIGFyZSBidWlsdCBhcm91bmQgYSBTeW5vcHN5cyBJUCBDb3JlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisKKyAgRG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXQ6CisJaHR0cDovL3d3dy5zdGxpbnV4LmNvbQorICBTdXBwb3J0IGF2YWlsYWJsZSBhdDoKKwlodHRwczovL2J1Z3ppbGxhLnN0bGludXguY29tLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG0vc29jLmg+CisjaW5jbHVkZSAic3RtbWFjLmgiCisKKyNkZWZpbmUgU1RNTUFDX1JFU09VUkNFX05BTUUJInN0bW1hY2V0aCIKKyNkZWZpbmUgUEhZX1JFU09VUkNFX05BTUUJInN0bW1hY3BoeSIKKworI3VuZGVmIFNUTU1BQ19ERUJVRworLyojZGVmaW5lIFNUTU1BQ19ERUJVRyovCisjaWZkZWYgU1RNTUFDX0RFQlVHCisjZGVmaW5lIERCRyhubGV2ZWwsIGtsZXZlbCwgZm10LCBhcmdzLi4uKSBcCisJCSgodm9pZCkobmV0aWZfbXNnXyMjbmxldmVsKHByaXYpICYmIFwKKwkJcHJpbnRrKEtFUk5fIyNrbGV2ZWwgZm10LCAjIyBhcmdzKSkpCisjZWxzZQorI2RlZmluZSBEQkcobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyN1bmRlZiBTVE1NQUNfUlhfREVCVUcKKy8qI2RlZmluZSBTVE1NQUNfUlhfREVCVUcqLworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworI2RlZmluZSBSWF9EQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIFJYX0RCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI3VuZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisvKiNkZWZpbmUgU1RNTUFDX1hNSVRfREVCVUcqLworI2lmZGVmIFNUTU1BQ19UWF9ERUJVRworI2RlZmluZSBUWF9EQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIFRYX0RCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBTVE1NQUNfQUxJR04oeCkJTDFfQ0FDSEVfQUxJR04oeCkKKyNkZWZpbmUgSlVNQk9fTEVOCTkwMDAKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgVFhfVElNRU8gNTAwMCAvKiBkZWZhdWx0IDUgc2Vjb25kcyAqLworc3RhdGljIGludCB3YXRjaGRvZyA9IFRYX1RJTUVPOworbW9kdWxlX3BhcmFtKHdhdGNoZG9nLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Mod2F0Y2hkb2csICJUcmFuc21pdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyIpOworCitzdGF0aWMgaW50IGRlYnVnID0gLTE7CQkvKiAtMTogZGVmYXVsdCwgMDogbm8gb3V0cHV0LCAxNjogIGFsbCAqLworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJNZXNzYWdlIExldmVsICgwOiBubyBvdXRwdXQsIDE2OiBhbGwpIik7CisKK3N0YXRpYyBpbnQgcGh5YWRkciA9IC0xOworbW9kdWxlX3BhcmFtKHBoeWFkZHIsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHBoeWFkZHIsICJQaHlzaWNhbCBkZXZpY2UgYWRkcmVzcyIpOworCisjZGVmaW5lIERNQV9UWF9TSVpFIDI1Ngorc3RhdGljIGludCBkbWFfdHhzaXplID0gRE1BX1RYX1NJWkU7Cittb2R1bGVfcGFyYW0oZG1hX3R4c2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRtYV90eHNpemUsICJOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIFRYIGxpc3QiKTsKKworI2RlZmluZSBETUFfUlhfU0laRSAyNTYKK3N0YXRpYyBpbnQgZG1hX3J4c2l6ZSA9IERNQV9SWF9TSVpFOworbW9kdWxlX3BhcmFtKGRtYV9yeHNpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkbWFfcnhzaXplLCAiTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSBSWCBsaXN0Iik7CisKK3N0YXRpYyBpbnQgZmxvd19jdHJsID0gRkxPV19PRkY7Cittb2R1bGVfcGFyYW0oZmxvd19jdHJsLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZmxvd19jdHJsLCAiRmxvdyBjb250cm9sIGFiaWxpdHkgW29uL29mZl0iKTsKKworc3RhdGljIGludCBwYXVzZSA9IFBBVVNFX1RJTUU7Cittb2R1bGVfcGFyYW0ocGF1c2UsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwYXVzZSwgIkZsb3cgQ29udHJvbCBQYXVzZSBUaW1lIik7CisKKyNkZWZpbmUgVENfREVGQVVMVCA2NAorc3RhdGljIGludCB0YyA9IFRDX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW0odGMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh0YywgIkRNQSB0aHJlc2hvbGQgY29udHJvbCB2YWx1ZSIpOworCisjZGVmaW5lIFJYX05PX0NPQUxFU0NFCTEJLyogQWx3YXlzIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIFRYX05PX0NPQUxFU0NFCS0xCS8qIE5vIG1vZGVyYXRpb24gYnkgZGVmYXVsdCAqLworCisvKiBQYXkgYXR0ZW50aW9uIHRvIHR1bmUgdGhpcyBwYXJhbWV0ZXI7IHRha2UgY2FyZSBvZiBib3RoCisgKiBoYXJkd2FyZSBjYXBhYmlsaXR5IGFuZCBuZXR3b3JrIHN0YWJpdGlseS9wZXJmb3JtYW5jZSBpbXBhY3QuCisgKiBNYW55IHRlc3RzIHNob3dlZCB0aGF0IH40bXMgbGF0ZW5jeSBzZWVtcyB0byBiZSBnb29kIGVub3VnaC4gKi8KKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisjZGVmaW5lIERFRkFVTFRfUEVSSU9ESUNfUkFURQkyNTYKK3N0YXRpYyBpbnQgdG1yYXRlID0gREVGQVVMVF9QRVJJT0RJQ19SQVRFOworbW9kdWxlX3BhcmFtKHRtcmF0ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHRtcmF0ZSwgIkV4dGVybmFsIHRpbWVyIGZyZXEuIChkZWZhdWx0OiAyNTZIeikiKTsKKyNlbmRpZgorCisjZGVmaW5lIERNQV9CVUZGRVJfU0laRQlCVUZfU0laRV8yS2lCCitzdGF0aWMgaW50IGJ1Zl9zeiA9IERNQV9CVUZGRVJfU0laRTsKK21vZHVsZV9wYXJhbShidWZfc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhidWZfc3osICJETUEgYnVmZmVyIHNpemUiKTsKKworLyogSW4gY2FzZSBvZiBHaWdhIEVUSCwgd2UgY2FuIGVuYWJsZS9kaXNhYmxlIHRoZSBDT0UgZm9yIHRoZQorICogdHJhbnNtaXQgSFcgY2hlY2tzdW0gY29tcHV0YXRpb24uCisgKiBOb3RlIHRoYXQsIGlmIHR4IGNzdW0gaXMgb2ZmIGluIEhXLCBTRyB3aWxsIGJlIHN0aWxsIHN1cHBvcnRlZC4gKi8KK3N0YXRpYyBpbnQgdHhfY29lID0gSFdfQ1NVTTsKK21vZHVsZV9wYXJhbSh0eF9jb2UsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh0eF9jb2UsICJHTUFDIENPRSB0eXBlIDIgW29uL29mZl0iKTsKKworc3RhdGljIGNvbnN0IHUzMiBkZWZhdWx0X21zZ19sZXZlbCA9IChORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwKKwkJCQkgICAgICBORVRJRl9NU0dfTElOSyB8IE5FVElGX01TR19JRlVQIHwKKwkJCQkgICAgICBORVRJRl9NU0dfSUZET1dOIHwgTkVUSUZfTVNHX1RJTUVSKTsKKworc3RhdGljIGlycXJldHVybl90IHN0bW1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdG1tYWNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworLyoqCisgKiBzdG1tYWNfdmVyaWZ5X2FyZ3MgLSB2ZXJpZnkgdGhlIGRyaXZlciBwYXJhbWV0ZXJzLgorICogRGVzY3JpcHRpb246IGl0IHZlcmlmaWVzIGlmIHNvbWUgd3JvbmcgcGFyYW1ldGVyIGlzIHBhc3NlZCB0byB0aGUgZHJpdmVyLgorICogTm90ZSB0aGF0IHdyb25nIHBhcmFtZXRlcnMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfdmVyaWZ5X2FyZ3Modm9pZCkKK3sKKwlpZiAodW5saWtlbHkod2F0Y2hkb2cgPCAwKSkKKwkJd2F0Y2hkb2cgPSBUWF9USU1FTzsKKwlpZiAodW5saWtlbHkoZG1hX3J4c2l6ZSA8IDApKQorCQlkbWFfcnhzaXplID0gRE1BX1JYX1NJWkU7CisJaWYgKHVubGlrZWx5KGRtYV90eHNpemUgPCAwKSkKKwkJZG1hX3R4c2l6ZSA9IERNQV9UWF9TSVpFOworCWlmICh1bmxpa2VseSgoYnVmX3N6IDwgRE1BX0JVRkZFUl9TSVpFKSB8fCAoYnVmX3N6ID4gQlVGX1NJWkVfMTZLaUIpKSkKKwkJYnVmX3N6ID0gRE1BX0JVRkZFUl9TSVpFOworCWlmICh1bmxpa2VseShmbG93X2N0cmwgPiAxKSkKKwkJZmxvd19jdHJsID0gRkxPV19BVVRPOworCWVsc2UgaWYgKGxpa2VseShmbG93X2N0cmwgPCAwKSkKKwkJZmxvd19jdHJsID0gRkxPV19PRkY7CisJaWYgKHVubGlrZWx5KChwYXVzZSA8IDApIHx8IChwYXVzZSA+IDB4ZmZmZikpKQorCQlwYXVzZSA9IFBBVVNFX1RJTUU7CisKKwlyZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKFNUTU1BQ19YTUlUX0RFQlVHKSB8fCBkZWZpbmVkKFNUTU1BQ19SWF9ERUJVRykKK3N0YXRpYyB2b2lkIHByaW50X3BrdCh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IGo7CisJcHJfaW5mbygibGVuID0gJWQgYnl0ZSwgYnVmIGFkZHI6IDB4JXAiLCBsZW4sIGJ1Zik7CisJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisJCWlmICgoaiAlIDE2KSA9PSAwKQorCQkJcHJfaW5mbygiXG4gJTAzeDoiLCBqKTsKKwkJcHJfaW5mbygiICUwMngiLCBidWZbal0pOworCX0KKwlwcl9pbmZvKCJcbiIpOworCXJldHVybjsKK30KKyNlbmRpZgorCisvKiBtaW5pbXVtIG51bWJlciBvZiBmcmVlIFRYIGRlc2NyaXB0b3JzIHJlcXVpcmVkIHRvIHdha2UgdXAgVFggcHJvY2VzcyAqLworI2RlZmluZSBTVE1NQUNfVFhfVEhSRVNIKHgpCSh4LT5kbWFfdHhfc2l6ZS80KQorCitzdGF0aWMgaW5saW5lIHUzMiBzdG1tYWNfdHhfYXZhaWwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5kaXJ0eV90eCArIHByaXYtPmRtYV90eF9zaXplIC0gcHJpdi0+Y3VyX3R4IC0gMTsKK30KKworLyoqCisgKiBzdG1tYWNfYWRqdXN0X2xpbmsKKyAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgYWRqdXN0cyB0aGUgbGluayBwYXJhbWV0ZXJzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwcml2LT5waHlkZXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuZXdfc3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBmYyA9IHByaXYtPmZsb3dfY3RybCwgcGF1c2VfdGltZSA9IHByaXYtPnBhdXNlOworCisJaWYgKHBoeWRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlEQkcocHJvYmUsIERFQlVHLCAic3RtbWFjX2FkanVzdF9saW5rOiBjYWxsZWQuICBhZGRyZXNzICVkIGxpbmsgJWRcbiIsCisJICAgIHBoeWRldi0+YWRkciwgcGh5ZGV2LT5saW5rKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHBoeWRldi0+bGluaykgeworCQl1MzIgY3RybCA9IHJlYWRsKGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisKKwkJLyogTm93IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBiZSBpbiBmdWxsIGR1cGxleCBtb2RlLgorCQkgKiBJZiBub3QsIHdlIG9wZXJhdGUgaW4gaGFsZi1kdXBsZXggbW9kZS4gKi8KKwkJaWYgKHBoeWRldi0+ZHVwbGV4ICE9IHByaXYtPm9sZGR1cGxleCkgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKKwkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5kdXBsZXg7CisJCQllbHNlCisJCQkJY3RybCB8PSBwcml2LT5tYWNfdHlwZS0+aHcubGluay5kdXBsZXg7CisJCQlwcml2LT5vbGRkdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKKwkJfQorCQkvKiBGbG93IENvbnRyb2wgb3BlcmF0aW9uICovCisJCWlmIChwaHlkZXYtPnBhdXNlKQorCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Zmxvd19jdHJsKGlvYWRkciwgcGh5ZGV2LT5kdXBsZXgsCisJCQkJCQkgICAgICAgZmMsIHBhdXNlX3RpbWUpOworCisJCWlmIChwaHlkZXYtPnNwZWVkICE9IHByaXYtPnNwZWVkKSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJc3dpdGNoIChwaHlkZXYtPnNwZWVkKSB7CisJCQljYXNlIDEwMDA6CisJCQkJaWYgKGxpa2VseShwcml2LT5pc19nbWFjKSkKKwkJCQkJY3RybCAmPSB+cHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsucG9ydDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwOgorCQkJY2FzZSAxMDoKKwkJCQlpZiAocHJpdi0+aXNfZ21hYykgeworCQkJCQljdHJsIHw9IHByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJCQkJY3RybCB8PQorCQkJCQkJICAgIHByaXYtPm1hY190eXBlLT5ody5saW5rLgorCQkJCQkJICAgIHNwZWVkOworCQkJCQl9IGVsc2UgeworCQkJCQkJY3RybCAmPQorCQkJCQkJICAgIH4ocHJpdi0+bWFjX3R5cGUtPmh3LgorCQkJCQkJICAgICAgbGluay5zcGVlZCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCX0KKwkJCQlwcml2LT5maXhfbWFjX3NwZWVkKHByaXYtPmJzcF9wcml2LAorCQkJCQkJICAgIHBoeWRldi0+c3BlZWQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpCisJCQkJCXByX3dhcm5pbmcoIiVzOiBTcGVlZCAoJWQpIGlzIG5vdCAxMCIKKwkJCQkgICAgICAgIiBvciAxMDAhXG4iLCBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwcml2LT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCX0KKworCQl3cml0ZWwoY3RybCwgaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKworCQlpZiAoIXByaXYtPm9sZGxpbmspIHsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQlwcml2LT5vbGRsaW5rID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocHJpdi0+b2xkbGluaykgeworCQluZXdfc3RhdGUgPSAxOworCQlwcml2LT5vbGRsaW5rID0gMDsKKwkJcHJpdi0+c3BlZWQgPSAwOworCQlwcml2LT5vbGRkdXBsZXggPSAtMTsKKwl9CisKKwlpZiAobmV3X3N0YXRlICYmIG5ldGlmX21zZ19saW5rKHByaXYpKQorCQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlEQkcocHJvYmUsIERFQlVHLCAic3RtbWFjX2FkanVzdF9saW5rOiBleGl0aW5nXG4iKTsKK30KKworLyoqCisgKiBzdG1tYWNfaW5pdF9waHkgLSBQSFkgaW5pdGlhbGl6YXRpb24KKyAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgaW5pdGlhbGl6ZXMgdGhlIGRyaXZlcidzIFBIWSBzdGF0ZSwgYW5kIGF0dGFjaGVzIHRoZSBQSFkKKyAqIHRvIHRoZSBtYWMgZHJpdmVyLgorICogIFJldHVybiB2YWx1ZToKKyAqICAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBzdG1tYWNfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJY2hhciBwaHlfaWRbQlVTX0lEX1NJWkVdOwkvKiBQSFkgdG8gY29ubmVjdCAqLworCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKKworCXByaXYtPm9sZGxpbmsgPSAwOworCXByaXYtPnNwZWVkID0gMDsKKwlwcml2LT5vbGRkdXBsZXggPSAtMTsKKworCWlmIChwcml2LT5waHlfYWRkciA9PSAtMSkgeworCQkvKiBXZSBkb24ndCBoYXZlIGEgUEhZLCBzbyBkbyBub3RoaW5nICovCisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKGJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBwcml2LT5idXNfaWQpOworCXNucHJpbnRmKHBoeV9pZCwgQlVTX0lEX1NJWkUsIFBIWV9JRF9GTVQsIGJ1c19pZCwgcHJpdi0+cGh5X2FkZHIpOworCXByX2RlYnVnKCJzdG1tYWNfaW5pdF9waHk6ICB0cnlpbmcgdG8gYXR0YWNoIHRvICVzXG4iLCBwaHlfaWQpOworCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlfaWQsICZzdG1tYWNfYWRqdXN0X2xpbmssIDAsCisJCQlwcml2LT5waHlfaW50ZXJmYWNlKTsKKworCWlmIChJU19FUlIocGh5ZGV2KSkgeworCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisKKwkvKgorCSAqIEJyb2tlbiBIVyBpcyBzb21ldGltZXMgbWlzc2luZyB0aGUgcHVsbC11cCByZXNpc3RvciBvbiB0aGUKKwkgKiBNRElPIGxpbmUsIHdoaWNoIHJlc3VsdHMgaW4gcmVhZHMgdG8gbm9uLWV4aXN0ZW50IGRldmljZXMgcmV0dXJuaW5nCisJICogMCByYXRoZXIgdGhhbiAweGZmZmYuIENhdGNoIHRoaXMgaGVyZSBhbmQgdHJlYXQgMCBhcyBhIG5vbi1leGlzdGVudAorCSAqIGRldmljZSBhcyB3ZWxsLgorCSAqIE5vdGU6IHBoeWRldi0+cGh5X2lkIGlzIHRoZSByZXN1bHQgb2YgcmVhZGluZyB0aGUgVUlEIFBIWSByZWdpc3RlcnMuCisJICovCisJaWYgKHBoeWRldi0+cGh5X2lkID09IDApIHsKKwkJcGh5X2Rpc2Nvbm5lY3QocGh5ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByX2RlYnVnKCJzdG1tYWNfaW5pdF9waHk6ICAlczogYXR0YWNoZWQgdG8gUEhZIChVSUQgMHgleCkiCisJICAgICAgICIgTGluayA9ICVkXG4iLCBkZXYtPm5hbWUsIHBoeWRldi0+cGh5X2lkLCBwaHlkZXYtPmxpbmspOworCisJcHJpdi0+cGh5ZGV2ID0gcGh5ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfbWFjX2VuYWJsZV9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCXZhbHVlIHw9IE1BQ19STkFCTEVfUlg7CisJLyogU2V0IHRoZSBSRSAocmVjZWl2ZSBlbmFibGUgYml0IGludG8gdGhlIE1BQyBDVFJMIHJlZ2lzdGVyKS4gICovCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX21hY19lbmFibGVfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKwl2YWx1ZSB8PSBNQUNfRU5BQkxFX1RYOworCS8qIFNldCB0aGUgVEUgKHRyYW5zbWl0IGVuYWJsZSBiaXQgaW50byB0aGUgTUFDIENUUkwgcmVnaXN0ZXIpLiAgKi8KKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DVFJMX1JFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfbWFjX2Rpc2FibGVfcngodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKwl2YWx1ZSAmPSB+TUFDX1JOQUJMRV9SWDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DVFJMX1JFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfbWFjX2Rpc2FibGVfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKwl2YWx1ZSAmPSB+TUFDX0VOQUJMRV9UWDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DVFJMX1JFRyk7Cit9CisKKy8qKgorICogZGlzcGxheV9yaW5nCisgKiBAcDogcG9pbnRlciB0byB0aGUgcmluZy4KKyAqIEBzaXplOiBzaXplIG9mIHRoZSByaW5nLgorICogRGVzY3JpcHRpb246IGRpc3BsYXkgYWxsIHRoZSBkZXNjcmlwdG9ycyB3aXRoaW4gdGhlIHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfcmluZyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBzaXplKQoreworCXN0cnVjdCB0bXBfcyB7CisJCXU2NCBhOworCQl1bnNpZ25lZCBpbnQgYjsKKwkJdW5zaWduZWQgaW50IGM7CisJfTsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCB0bXBfcyAqeCA9IChzdHJ1Y3QgdG1wX3MgKikocCArIGkpOworCQlwcl9pbmZvKCJcdCVkIFsweCV4XTogREVTMD0weCV4IERFUzE9MHgleCBCVUYxPTB4JXggQlVGMj0weCV4IiwKKwkJICAgICAgIGksICh1bnNpZ25lZCBpbnQpdmlydF90b19waHlzKCZwW2ldKSwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpKHgtPmEpLCAodW5zaWduZWQgaW50KSgoeC0+YSkgPj4gMzIpLAorCQkgICAgICAgeC0+YiwgeC0+Yyk7CisJCXByX2luZm8oIlxuIik7CisJfQorfQorCisvKioKKyAqIGluaXRfZG1hX2Rlc2NfcmluZ3MgLSBpbml0IHRoZSBSWC9UWCBkZXNjcmlwdG9yIHJpbmdzCisgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246ICB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBETUEgUlgvVFggZGVzY3JpcHRvcnMKKyAqIGFuZCBhbGxvY2F0ZXMgdGhlIHNvY2tldCBidWZmZXJzLgorICovCitzdGF0aWMgdm9pZCBpbml0X2RtYV9kZXNjX3JpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhzaXplID0gcHJpdi0+ZG1hX3J4X3NpemU7CisJdW5zaWduZWQgaW50IGJmc2l6ZSA9IHByaXYtPmRtYV9idWZfc3o7CisJaW50IGJ1ZmYyX25lZWRlZCA9IDAsIGRpc19pYyA9IDA7CisKKwkvKiBTZXQgdGhlIEJ1ZmZlciBzaXplIGFjY29yZGluZyB0byB0aGUgTVRVOworCSAqIGluZGVlZCwgaW4gY2FzZSBvZiBqdW1ibyB3ZSBuZWVkIHRvIGJ1bXAtdXAgdGhlIGJ1ZmZlciBzaXplcy4KKwkgKi8KKwlpZiAodW5saWtlbHkoZGV2LT5tdHUgPj0gQlVGX1NJWkVfOEtpQikpCisJCWJmc2l6ZSA9IEJVRl9TSVpFXzE2S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IEJVRl9TSVpFXzRLaUIpKQorCQliZnNpemUgPSBCVUZfU0laRV84S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IEJVRl9TSVpFXzJLaUIpKQorCQliZnNpemUgPSBCVUZfU0laRV80S2lCOworCWVsc2UgaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IERNQV9CVUZGRVJfU0laRSkpCisJCWJmc2l6ZSA9IEJVRl9TSVpFXzJLaUI7CisJZWxzZQorCQliZnNpemUgPSBETUFfQlVGRkVSX1NJWkU7CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIG9uIGNvbXBsZXRpb24gZm9yIHRoZSByZWNlcHRpb24gaWYgdGltZXIgaXMgb24gKi8KKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlkaXNfaWMgPSAxOworI2VuZGlmCisJLyogSWYgdGhlIE1UVSBleGNlZWRzIDhrIHNvIHVzZSB0aGUgc2Vjb25kIGJ1ZmZlciBpbiB0aGUgY2hhaW4gKi8KKwlpZiAoYmZzaXplID49IEJVRl9TSVpFXzhLaUIpCisJCWJ1ZmYyX25lZWRlZCA9IDE7CisKKwlEQkcocHJvYmUsIElORk8sICJzdG1tYWM6IHR4c2l6ZSAlZCwgcnhzaXplICVkLCBiZnNpemUgJWRcbiIsCisJICAgIHR4c2l6ZSwgcnhzaXplLCBiZnNpemUpOworCisJcHJpdi0+cnhfc2tidWZmX2RtYSA9IGttYWxsb2MocnhzaXplICogc2l6ZW9mKGRtYV9hZGRyX3QpLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5yeF9za2J1ZmYgPQorCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIHJ4c2l6ZSwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+ZG1hX3J4ID0KKwkgICAgKHN0cnVjdCBkbWFfZGVzYyAqKWRtYV9hbGxvY19jb2hlcmVudChwcml2LT5kZXZpY2UsCisJCQkJCQkgIHJ4c2l6ZSAqCisJCQkJCQkgIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJCQkJICAmcHJpdi0+ZG1hX3J4X3BoeSwKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJcHJpdi0+dHhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKiB0eHNpemUsCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCXByaXYtPmRtYV90eCA9CisJICAgIChzdHJ1Y3QgZG1hX2Rlc2MgKilkbWFfYWxsb2NfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJCQkJICB0eHNpemUgKgorCQkJCQkJICBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwKKwkJCQkJCSAgJnByaXYtPmRtYV90eF9waHksCisJCQkJCQkgIEdGUF9LRVJORUwpOworCisJaWYgKChwcml2LT5kbWFfcnggPT0gTlVMTCkgfHwgKHByaXYtPmRtYV90eCA9PSBOVUxMKSkgeworCQlwcl9lcnIoIiVzOkVSUk9SIGFsbG9jYXRpbmcgdGhlIERNQSBUeC9SeCBkZXNjXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlEQkcocHJvYmUsIElORk8sICJzdG1tYWMgKCVzKSBETUEgZGVzYyByaW5nczogdmlydCBhZGRyIChSeCAlcCwgIgorCSAgICAiVHggJXApXG5cdERNQSBwaHkgYWRkciAoUnggMHglMDh4LCBUeCAweCUwOHgpXG4iLAorCSAgICBkZXYtPm5hbWUsIHByaXYtPmRtYV9yeCwgcHJpdi0+ZG1hX3R4LAorCSAgICAodW5zaWduZWQgaW50KXByaXYtPmRtYV9yeF9waHksICh1bnNpZ25lZCBpbnQpcHJpdi0+ZG1hX3R4X3BoeSk7CisKKwkvKiBSWCBJTklUSUFMSVpBVElPTiAqLworCURCRyhwcm9iZSwgSU5GTywgInN0bW1hYzogU0tCIGFkZHJlc3NlczpcbiIKKwkJCSAic2tiXHRcdHNrYiBkYXRhXHRkbWEgZGF0YVxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnhzaXplOyBpKyspIHsKKwkJc3RydWN0IGRtYV9kZXNjICpwID0gcHJpdi0+ZG1hX3J4ICsgaTsKKworCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldiwgYmZzaXplKTsKKwkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQkJcHJfZXJyKCIlczogUnggaW5pdCBmYWlsczsgc2tiIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnJ4X3NrYnVmZltpXSA9IHNrYjsKKwkJcHJpdi0+cnhfc2tidWZmX2RtYVtpXSA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQkJYmZzaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCXAtPmRlczIgPSBwcml2LT5yeF9za2J1ZmZfZG1hW2ldOworCQlpZiAodW5saWtlbHkoYnVmZjJfbmVlZGVkKSkKKwkJCXAtPmRlczMgPSBwLT5kZXMyICsgQlVGX1NJWkVfOEtpQjsKKwkJREJHKHByb2JlLCBJTkZPLCAiWyVwXVx0WyVwXVx0WyV4XVxuIiwgcHJpdi0+cnhfc2tidWZmW2ldLAorCQkJcHJpdi0+cnhfc2tidWZmW2ldLT5kYXRhLCBwcml2LT5yeF9za2J1ZmZfZG1hW2ldKTsKKwl9CisJcHJpdi0+Y3VyX3J4ID0gMDsKKwlwcml2LT5kaXJ0eV9yeCA9ICh1bnNpZ25lZCBpbnQpKGkgLSByeHNpemUpOworCXByaXYtPmRtYV9idWZfc3ogPSBiZnNpemU7CisJYnVmX3N6ID0gYmZzaXplOworCisJLyogVFggSU5JVElBTElaQVRJT04gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHhzaXplOyBpKyspIHsKKwkJcHJpdi0+dHhfc2tidWZmW2ldID0gTlVMTDsKKwkJcHJpdi0+ZG1hX3R4W2ldLmRlczIgPSAwOworCX0KKwlwcml2LT5kaXJ0eV90eCA9IDA7CisJcHJpdi0+Y3VyX3R4ID0gMDsKKworCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHJ4c2l6ZSwgZGlzX2ljKTsKKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCB0eHNpemUpOworCisJaWYgKG5ldGlmX21zZ19odyhwcml2KSkgeworCQlwcl9pbmZvKCJSWCBkZXNjcmlwdG9yIHJpbmc6XG4iKTsKKwkJZGlzcGxheV9yaW5nKHByaXYtPmRtYV9yeCwgcnhzaXplKTsKKwkJcHJfaW5mbygiVFggZGVzY3JpcHRvciByaW5nOlxuIik7CisJCWRpc3BsYXlfcmluZyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZG1hX2ZyZWVfcnhfc2tidWZzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kbWFfcnhfc2l6ZTsgaSsrKSB7CisJCWlmIChwcml2LT5yeF9za2J1ZmZbaV0pIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwcml2LT5yeF9za2J1ZmZfZG1hW2ldLAorCQkJCQkgcHJpdi0+ZG1hX2J1Zl9zeiwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHByaXYtPnJ4X3NrYnVmZltpXSk7CisJCX0KKwkJcHJpdi0+cnhfc2tidWZmW2ldID0gTlVMTDsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkbWFfZnJlZV90eF9za2J1ZnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPmRtYV90eF9zaXplOyBpKyspIHsKKwkJaWYgKHByaXYtPnR4X3NrYnVmZltpXSAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBpOworCQkJaWYgKHAtPmRlczIpCisJCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHAtPmRlczIsCisJCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCisJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKKwkJCXByaXYtPnR4X3NrYnVmZltpXSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJLyogUmVsZWFzZSB0aGUgRE1BIFRYL1JYIHNvY2tldCBidWZmZXJzICovCisJZG1hX2ZyZWVfcnhfc2tidWZzKHByaXYpOworCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKKworCS8qIEZyZWUgdGhlIHJlZ2lvbiBvZiBjb25zaXN0ZW50IG1lbW9yeSBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3IKKwkgKiB0aGUgRE1BICovCisJZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJICBwcml2LT5kbWFfdHhfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJICBwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9waHkpOworCWRtYV9mcmVlX2NvaGVyZW50KHByaXYtPmRldmljZSwKKwkJCSAgcHJpdi0+ZG1hX3J4X3NpemUgKiBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwKKwkJCSAgcHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfcGh5KTsKKwlrZnJlZShwcml2LT5yeF9za2J1ZmZfZG1hKTsKKwlrZnJlZShwcml2LT5yeF9za2J1ZmYpOworCWtmcmVlKHByaXYtPnR4X3NrYnVmZik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtbWFjX2RtYV9zdGFydF90eAorICogQGlvYWRkcjogZGV2aWNlIEkvTyBhZGRyZXNzCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBETUEgdHggcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdGFydF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgfD0gRE1BX0NPTlRST0xfU1Q7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXZhbHVlICY9IH5ETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtbWFjX2RtYV9zdGFydF9yeAorICogQGlvYWRkcjogZGV2aWNlIEkvTyBhZGRyZXNzCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBETUEgcnggcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdGFydF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgfD0gRE1BX0NPTlRST0xfU1I7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NSOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCisvKioKKyAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlCisgKiAgQHByaXYgOiBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiAgRGVzY3JpcHRpb246IGl0IHNldHMgdGhlIERNQSBvcGVyYXRpb24gbW9kZTogdHgvcnggRE1BIHRocmVzaG9sZHMKKyAqICBvciBTdG9yZS1BbmQtRm9yd2FyZCBjYXBhYmlsaXR5LiBJdCBhbHNvIHZlcmlmaWVzIHRoZSBDT0UgZm9yIHRoZQorICogIHRyYW5zbWlzc2lvbiBpbiBjYXNlIG9mIEdpZ2EgRVRILgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlpZiAoIXByaXYtPmlzX2dtYWMpIHsKKwkJLyogTUFDIDEwLzEwMCAqLworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOworCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOworCX0gZWxzZSB7CisJCWlmICgocHJpdi0+ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKSAmJiAodHhfY29lKSkgeworCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCQkgICAgICBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOworCQkJdGMgPSBTRl9ETUFfTU9ERTsKKwkJCXByaXYtPnR4X2NvZSA9IEhXX0NTVU07CisJCX0gZWxzZSB7CisJCQkvKiBDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc29mdHdhcmUuICovCisJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCisJCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOworCQl9CisJfQorCXR4X2NvZSA9IHByaXYtPnR4X2NvZTsKKworCXJldHVybjsKK30KKworI2lmZGVmIFNUTU1BQ19ERUJVRworLyoqCisgKiBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUKKyAqIEBzdGF0dXM6IHR4IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkCisgKiBEZXNjcmlwdGlvbjogaXQgc2hvd3MgdGhlIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgZm9yIENTUjVbMjI6MjBdCisgKi8KK3N0YXRpYyB2b2lkIHNob3dfdHhfcHJvY2Vzc19zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwlzdGF0ZSA9IChzdGF0dXMgJiBETUFfU1RBVFVTX1RTX01BU0spID4+IERNQV9TVEFUVVNfVFNfU0hJRlQ7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSAwOgorCQlwcl9pbmZvKCItIFRYIChTdG9wcGVkKTogUmVzZXQgb3IgU3RvcCBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTpGZXRjaGluZyB0aGUgVHggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIGVuZCBvZiB0eFxuIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFJlYWRpbmcgdGhlIGRhdGEgIgorCQkgICAgICAgImFuZCBxdWV1aW5nIHRoZSBkYXRhIGludG8gdGhlIFR4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBUWCAoU3VzcGVuZGVkKTogVHggQnVmZiBVbmRlcmZsb3cgIgorCQkgICAgICAgIm9yIGFuIHVuYXZhaWxhYmxlIFRyYW5zbWl0IGRlc2NyaXB0b3JcbiIpOworCQlicmVhazsKKwljYXNlIDc6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBDbG9zaW5nIFR4IGRlc2NyaXB0b3JcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorCisvKioKKyAqIHNob3dfcnhfcHJvY2Vzc19zdGF0ZQorICogQHN0YXR1czogcnggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKKyAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsxOToxN10KKyAqLworc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgorCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qKgorICogc3RtbWFjX3R4OgorICogQHByaXY6IHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IHJlY2xhaW1zIHJlc291cmNlcyBhZnRlciB0cmFuc21pc3Npb24gY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IHByaXYtPmRldi0+YmFzZV9hZGRyOworCisJd2hpbGUgKHByaXYtPmRpcnR5X3R4ICE9IHByaXYtPmN1cl90eCkgeworCQlpbnQgbGFzdDsKKwkJdW5zaWduZWQgaW50IGVudHJ5ID0gcHJpdi0+ZGlydHlfdHggJSB0eHNpemU7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT50eF9za2J1ZmZbZW50cnldOworCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKKworCQkvKiBDaGVjayBpZiB0aGUgZGVzY3JpcHRvciBpcyBvd25lZCBieSB0aGUgRE1BLiAqLworCQlpZiAocHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X293bmVyKHApKQorCQkJYnJlYWs7CisKKwkJLyogVmVyaWZ5IHR4IGVycm9yIGJ5IGxvb2tpbmcgYXQgdGhlIGxhc3Qgc2VnbWVudCAqLworCQlsYXN0ID0gcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xzKHApOworCQlpZiAobGlrZWx5KGxhc3QpKSB7CisJCQlpbnQgdHhfZXJyb3IgPQorCQkJICAgIHByaXYtPm1hY190eXBlLT5vcHMtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCQkgICAmcHJpdi0+eHN0YXRzLAorCQkJCQkJCSAgIHAsIGlvYWRkcik7CisJCQlpZiAobGlrZWx5KHR4X2Vycm9yID09IDApKSB7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJcHJpdi0+eHN0YXRzLnR4X3BrdF9uKys7CisJCQl9IGVsc2UKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQl9CisJCVRYX0RCRygiJXM6IGN1cnIgJWQsIGRpcnR5ICVkXG4iLCBfX2Z1bmNfXywKKwkJCXByaXYtPmN1cl90eCwgcHJpdi0+ZGlydHlfdHgpOworCisJCWlmIChsaWtlbHkocC0+ZGVzMikpCisJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgcC0+ZGVzMiwKKwkJCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCisJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczMpKQorCQkJcC0+ZGVzMyA9IDA7CisKKwkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIHJvb20gaW4gdGhlIHF1ZXVlIChsaW1pdCBpdCB0byBzaXplKQorCQkJICogd2UgYWRkIHRoaXMgc2tiIGJhY2sgaW50byB0aGUgcG9vbCwKKwkJCSAqIGlmIGl0J3MgdGhlIHJpZ2h0IHNpemUuCisJCQkgKi8KKwkJCWlmICgoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPAorCQkJCXByaXYtPmRtYV9yeF9zaXplKSAmJgorCQkJCXNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgcHJpdi0+ZG1hX2J1Zl9zeikpCisJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJCWVsc2UKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwkJCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQl9CisKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cmVsZWFzZV90eF9kZXNjKHApOworCisJCWVudHJ5ID0gKCsrcHJpdi0+ZGlydHlfdHgpICUgdHhzaXplOworCX0KKwlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5kZXYpICYmCisJCSAgICAgc3RtbWFjX3R4X2F2YWlsKHByaXYpID4gU1RNTUFDX1RYX1RIUkVTSChwcml2KSkpIHsKKwkJbmV0aWZfdHhfbG9jayhwcml2LT5kZXYpOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5kZXYpICYmCisJCSAgICAgc3RtbWFjX3R4X2F2YWlsKHByaXYpID4gU1RNTUFDX1RYX1RIUkVTSChwcml2KSkgeworCQkJVFhfREJHKCIlczogcmVzdGFydCB0cmFuc21pdFxuIiwgX19mdW5jX18pOworCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCQl9CisJCW5ldGlmX3R4X3VubG9jayhwcml2LT5kZXYpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZW5hYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworCWVsc2UKKyNlbmRpZgorCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19kaXNhYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CisJZWxzZQorI2VuZGlmCisJd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKK30KKworc3RhdGljIGludCBzdG1tYWNfaGFzX3dvcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCBoYXNfd29yayA9IDA7CisJaW50IHJ4cmV0LCB0eF93b3JrID0gMDsKKworCXJ4cmV0ID0gcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X293bmVyKHByaXYtPmRtYV9yeCArCisJCShwcml2LT5jdXJfcnggJSBwcml2LT5kbWFfcnhfc2l6ZSkpOworCisJaWYgKHByaXYtPmRpcnR5X3R4ICE9IHByaXYtPmN1cl90eCkKKwkJdHhfd29yayA9IDE7CisKKwlpZiAobGlrZWx5KCFyeHJldCB8fCB0eF93b3JrKSkKKwkJaGFzX3dvcmsgPSAxOworCisJcmV0dXJuIGhhc193b3JrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3N0bW1hY19zY2hlZHVsZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJaWYgKGxpa2VseShzdG1tYWNfaGFzX3dvcmsocHJpdikpKSB7CisJCXN0bW1hY19kaXNhYmxlX2lycShwcml2KTsKKwkJbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgordm9pZCBzdG1tYWNfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcHJpdi0+eHN0YXRzLnNjaGVkX3RpbWVyX24rKzsKKworCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19ub190aW1lcl9zdGFydGVkKHVuc2lnbmVkIGludCB4KQorezsKK307CisKK3N0YXRpYyB2b2lkIHN0bW1hY19ub190aW1lcl9zdG9wcGVkKHZvaWQpCit7OworfTsKKyNlbmRpZgorCisvKioKKyAqIHN0bW1hY190eF9lcnI6CisgKiBAcHJpdjogcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgY2xlYW5zIHRoZSBkZXNjcmlwdG9ycyBhbmQgcmVzdGFydHMgdGhlIHRyYW5zbWlzc2lvbgorICogaW4gY2FzZSBvZiBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY190eF9lcnIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+ZGV2KTsKKworCXN0bW1hY19kbWFfc3RvcF90eChwcml2LT5kZXYtPmJhc2VfYWRkcik7CisJZG1hX2ZyZWVfdHhfc2tidWZzKHByaXYpOworCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9zaXplKTsKKwlwcml2LT5kaXJ0eV90eCA9IDA7CisJcHJpdi0+Y3VyX3R4ID0gMDsKKwlzdG1tYWNfZG1hX3N0YXJ0X3R4KHByaXYtPmRldi0+YmFzZV9hZGRyKTsKKworCXByaXYtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHN0bW1hY19kbWFfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIKKyAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIgKERNQSkuCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCS8qIHJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciAoQ1NSNSkgKi8KKwl1MzIgaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBETUFfU1RBVFVTKTsKKworCURCRyhpbnRyLCBJTkZPLCAiJXM6IFtDU1I1OiAweCUwOHhdXG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCisjaWZkZWYgU1RNTUFDX0RFQlVHCisJLyogSXQgZGlzcGxheXMgdGhlIERNQSB0cmFuc21pdCBwcm9jZXNzIHN0YXRlIChDU1I1IHJlZ2lzdGVyKSAqLworCWlmIChuZXRpZl9tc2dfdHhfZG9uZShwcml2KSkKKwkJc2hvd190eF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKKwlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyhwcml2KSkKKwkJc2hvd19yeF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKKyNlbmRpZgorCS8qIEFCTk9STUFMIGludGVycnVwdHMgKi8KKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0FJUykpIHsKKwkJREJHKGludHIsIElORk8sICJDU1I1WzE1XSBETUEgQUJOT1JNQUwgSVJROiAiKTsKKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19VTkYpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CisJCQlpZiAodW5saWtlbHkodGMgIT0gU0ZfRE1BX01PREUpCisJCQkgICAgJiYgKHRjIDw9IDI1NikpIHsKKwkJCQkvKiBUcnkgdG8gYnVtcCB1cCB0aGUgdGhyZXNob2xkICovCisJCQkJdGMgKz0gNjQ7CisJCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUoaW9hZGRyLCB0YywKKwkJCQkJICAgICAgU0ZfRE1BX01PREUpOworCQkJCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKKwkJCX0KKwkJCXN0bW1hY190eF9lcnIocHJpdik7CisJCQlwcml2LT54c3RhdHMudHhfdW5kZWZsb3dfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19USlQpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInRyYW5zbWl0IGphYmJlclxuIik7CisJCQlwcml2LT54c3RhdHMudHhfamFiYmVyX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfT1ZGKSkgeworCQkJREJHKGludHIsIElORk8sICJyZWN2IG92ZXJmbG93XG4iKTsKKwkJCXByaXYtPnhzdGF0cy5yeF9vdmVyZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JVKSkgeworCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CisJCQlwcml2LT54c3RhdHMucnhfYnVmX3VuYXZfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SUFMpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInJlY2VpdmUgcHJvY2VzcyBzdG9wcGVkXG4iKTsKKwkJCXByaXYtPnhzdGF0cy5yeF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SV1QpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInJlY2VpdmUgd2F0Y2hkb2dcbiIpOworCQkJcHJpdi0+eHN0YXRzLnJ4X3dhdGNoZG9nX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRVRJKSkgeworCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOworCQkJcHJpdi0+eHN0YXRzLnR4X2Vhcmx5X2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVFBTKSkgeworCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJcHJpdi0+eHN0YXRzLnR4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKKwkJCXN0bW1hY190eF9lcnIocHJpdik7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19GQkkpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgImZhdGFsIGJ1cyBlcnJvclxuIik7CisJCQlwcml2LT54c3RhdHMuZmF0YWxfYnVzX2Vycm9yX2lycSsrOworCQkJc3RtbWFjX3R4X2Vycihwcml2KTsKKwkJfQorCX0KKworCS8qIFRYL1JYIE5PUk1BTCBpbnRlcnJ1cHRzICovCisJaWYgKGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19OSVMpIHsKKwkJcHJpdi0+eHN0YXRzLm5vcm1hbF9pcnFfbisrOworCQlpZiAobGlrZWx5KChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUkkpIHx8CisJCQkgKGludHJfc3RhdHVzICYgKERNQV9TVEFUVVNfVEkpKSkpCisJCQkJX3N0bW1hY19zY2hlZHVsZShwcml2KTsKKwl9CisKKwkvKiBPcHRpb25hbCBoYXJkd2FyZSBibG9ja3MsIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYKKwkJICAgICAoRE1BX1NUQVRVU19HUEkgfCBETUFfU1RBVFVTX0dNSSB8IERNQV9TVEFUVVNfR0xJKSkpCisJCXByX2luZm8oIiVzOiB1bmV4cGVjdGVkIHN0YXR1cyAlMDh4XG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGEgbG9naWMgMSB0byB0aGUgQ1NSNVsxNS0wXSAqLworCXdyaXRlbCgoaW50cl9zdGF0dXMgJiAweDFmZmZmKSwgaW9hZGRyICsgRE1BX1NUQVRVUyk7CisKKwlEQkcoaW50ciwgSU5GTywgIlxuXG4iKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiAgc3RtbWFjX29wZW4gLSBvcGVuIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIKKyAqICBAZGV2IDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvcGVuIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuCisgKiAgUmV0dXJuIHZhbHVlOgorICogIDAgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcyBkZWZpbmVkIGluIGVycm5vLmgKKyAqICBmaWxlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHJldDsKKworCS8qIENoZWNrIHRoYXQgdGhlIE1BQyBhZGRyZXNzIGlzIHZhbGlkLiAgSWYgaXRzIG5vdCwgcmVmdXNlCisJICogdG8gYnJpbmcgdGhlIGRldmljZSB1cC4gVGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGFuCisJICogYWRkcmVzcyB1c2luZyB0aGUgZm9sbG93aW5nIGxpbnV4IGNvbW1hbmQ6CisJICogICAgICBpZmNvbmZpZyBldGgwIGh3IGV0aGVyIHh4Onh4Onh4Onh4Onh4Onh4ICAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgeworCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJcHJfd2FybmluZygiJXM6IGdlbmVyYXRlZCByYW5kb20gTUFDIGFkZHJlc3MgJXBNXG4iLCBkZXYtPm5hbWUsCisJCQlkZXYtPmRldl9hZGRyKTsKKwl9CisKKwlzdG1tYWNfdmVyaWZ5X2FyZ3MoKTsKKworCXJldCA9IHN0bW1hY19pbml0X3BoeShkZXYpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByX2VycigiJXM6IENhbm5vdCBhdHRhY2ggdG8gUEhZIChlcnJvcjogJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZXF1ZXN0IHRoZSBJUlEgbGluZXMgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnN0bW1hY19pbnRlcnJ1cHQsCisJCQkgIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBhbGxvY2F0aW5nIHRoZSBJUlEgJWQgKGVycm9yOiAlZClcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5pcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXByaXYtPnRtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bW1hY190aW1lciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHByaXYtPnRtID09IE5VTEwpKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiB0aW1lciBtZW1vcnkgYWxsb2MgZmFpbGVkIFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcHJpdi0+dG0tPmZyZXEgPSB0bXJhdGU7CisKKwkvKiBUZXN0IGlmIHRoZSBleHRlcm5hbCB0aW1lciBjYW4gYmUgYWN0dWFsbHkgdXNlZC4KKwkgKiBJbiBjYXNlIG9mIGZhaWx1cmUgY29udGludWUgd2l0aG91dCB0aW1lci4gKi8KKwlpZiAodW5saWtlbHkoKHN0bW1hY19vcGVuX2V4dF90aW1lcihkZXYsIHByaXYtPnRtKSkgPCAwKSkgeworCQlwcl93YXJuaW5nKCJzdG1tYWNldGg6IGNhbm5vdCBhdHRhY2ggdGhlIGV4dGVybmFsIHRpbWVyLlxuIik7CisJCXRtcmF0ZSA9IDA7CisJCXByaXYtPnRtLT5mcmVxID0gMDsKKwkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0ID0gc3RtbWFjX25vX3RpbWVyX3N0YXJ0ZWQ7CisJCXByaXYtPnRtLT50aW1lcl9zdG9wID0gc3RtbWFjX25vX3RpbWVyX3N0b3BwZWQ7CisJfSBlbHNlCisJCXByaXYtPnRtLT5lbmFibGUgPSAxOworI2VuZGlmCisKKwkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFRYL1JYIGRlc2NyaXB0b3JzIGNoYWlucy4gKi8KKwlwcml2LT5kbWFfdHhfc2l6ZSA9IFNUTU1BQ19BTElHTihkbWFfdHhzaXplKTsKKwlwcml2LT5kbWFfcnhfc2l6ZSA9IFNUTU1BQ19BTElHTihkbWFfcnhzaXplKTsKKwlwcml2LT5kbWFfYnVmX3N6ID0gU1RNTUFDX0FMSUdOKGJ1Zl9zeik7CisJaW5pdF9kbWFfZGVzY19yaW5ncyhkZXYpOworCisJLyogRE1BIGluaXRpYWxpemF0aW9uIGFuZCBTVyByZXNldCAqLworCWlmICh1bmxpa2VseShwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfaW5pdChpb2FkZHIsCisJCXByaXYtPnBibCwgcHJpdi0+ZG1hX3R4X3BoeSwgcHJpdi0+ZG1hX3J4X3BoeSkgPCAwKSkgeworCisJCXByX2VycigiJXM6IERNQSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENvcHkgdGhlIE1BQyBhZGRyIGludG8gdGhlIEhXICAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF91bWFjX2FkZHIoaW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKwkvKiBJbml0aWFsaXplIHRoZSBNQUMgQ29yZSAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmNvcmVfaW5pdChpb2FkZHIpOworCisJcHJpdi0+c2h1dGRvd24gPSAwOworCisJLyogSW5pdGlhbGlzZSB0aGUgTU1DIChpZiBwcmVzZW50KSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLworCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spOworCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSyk7CisKKwkvKiBFbmFibGUgdGhlIE1BQyBSeC9UeCAqLworCXN0bW1hY19tYWNfZW5hYmxlX3J4KGlvYWRkcik7CisJc3RtbWFjX21hY19lbmFibGVfdHgoaW9hZGRyKTsKKworCS8qIFNldCB0aGUgSFcgRE1BIG1vZGUgYW5kIHRoZSBDT0UgKi8KKwlzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHByaXYpOworCisJLyogRXh0cmEgc3RhdGlzdGljcyAqLworCW1lbXNldCgmcHJpdi0+eHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cykpOworCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKKworCS8qIFN0YXJ0IHRoZSBiYWxsIHJvbGxpbmcuLi4gKi8KKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IERNQSBSWC9UWCBwcm9jZXNzZXMgc3RhcnRlZC4uLlxuIiwgZGV2LT5uYW1lKTsKKwlzdG1tYWNfZG1hX3N0YXJ0X3R4KGlvYWRkcik7CisJc3RtbWFjX2RtYV9zdGFydF9yeChpb2FkZHIpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworI2VuZGlmCisJLyogRHVtcCBETUEvTUFDIHJlZ2lzdGVycyAqLworCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9tYWNfcmVncyhpb2FkZHIpOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kdW1wX2RtYV9yZWdzKGlvYWRkcik7CisJfQorCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7CisKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcmVjeWNsZSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgc3RtbWFjX3JlbGVhc2UgLSBjbG9zZSBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyCisgKiAgQGRldiA6IGRldmljZSBwb2ludGVyLgorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgaXMgdGhlIHN0b3AgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGludCBzdG1tYWNfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBTdG9wIGFuZCBkaXNjb25uZWN0IHRoZSBQSFkgKi8KKwlpZiAocHJpdi0+cGh5ZGV2KSB7CisJCXBoeV9zdG9wKHByaXYtPnBoeWRldik7CisJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeWRldik7CisJCXByaXYtPnBoeWRldiA9IE5VTEw7CisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCS8qIFN0b3AgYW5kIHJlbGVhc2UgdGhlIHRpbWVyICovCisJc3RtbWFjX2Nsb3NlX2V4dF90aW1lcigpOworCWlmIChwcml2LT50bSAhPSBOVUxMKQorCQlrZnJlZShwcml2LT50bSk7CisjZW5kaWYKKwluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+cnhfcmVjeWNsZSk7CisKKwkvKiBGcmVlIHRoZSBJUlEgbGluZXMgKi8KKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCS8qIFN0b3AgVFgvUlggRE1BIGFuZCBjbGVhciB0aGUgZGVzY3JpcHRvcnMgKi8KKwlzdG1tYWNfZG1hX3N0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisKKwkvKiBSZWxlYXNlIGFuZCBmcmVlIHRoZSBSeC9UeCByZXNvdXJjZXMgKi8KKwlmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhwcml2KTsKKworCS8qIERpc2FibGUgdGhlIE1BQyBjb3JlICovCisJc3RtbWFjX21hY19kaXNhYmxlX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVG8gcGVyZm9ybSBlbXVsYXRlZCBoYXJkd2FyZSBzZWdtZW50YXRpb24gb24gc2tiLgorICovCitzdGF0aWMgaW50IHN0bW1hY19zd190c28oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpzZWdzLCAqY3Vycl9za2I7CisJaW50IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKKworCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSB3b3JzdCBjYXNlICovCisJaWYgKHVubGlrZWx5KHN0bW1hY190eF9hdmFpbChwcml2KSA8IGdzb19zZWdzKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CisJCVRYX0RCRyhLRVJOX0VSUiAiJXM6IFRTTyBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlpZiAoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDwgZ3NvX3NlZ3MpCisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCX0KKwlUWF9EQkcoIlx0c3RtbWFjX3N3X3Rzbzogc2VnbWVudGluZzogc2tiICVwIChsZW4gJWQpXG4iLAorCSAgICAgICBza2IsIHNrYi0+bGVuKTsKKworCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBwcml2LT5kZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKKwkJZ290byBzd190c29fZW5kOworCisJZG8geworCQljdXJyX3NrYiA9IHNlZ3M7CisJCXNlZ3MgPSBzZWdzLT5uZXh0OworCQlUWF9EQkcoIlx0XHRjdXJyZW50IHNrYi0+bGVuOiAlZCwgKmN1cnIgJXAsIgorCQkgICAgICAgIipuZXh0ICVwXG4iLCBjdXJyX3NrYi0+bGVuLCBjdXJyX3NrYiwgc2Vncyk7CisJCWN1cnJfc2tiLT5uZXh0ID0gTlVMTDsKKwkJc3RtbWFjX3htaXQoY3Vycl9za2IsIHByaXYtPmRldik7CisJfSB3aGlsZSAoc2Vncyk7CisKK3N3X3Rzb19lbmQ6CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzdG1tYWNfaGFuZGxlX2p1bWJvX2ZyYW1lcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIGludCBjc3VtX2luc2VydGlvbikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IHR4c2l6ZSA9IHByaXYtPmRtYV90eF9zaXplOworCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmN1cl90eCAlIHR4c2l6ZTsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKKworCWlmIChub3BhZ2VkX2xlbiA+IEJVRl9TSVpFXzhLaUIpIHsKKworCQlpbnQgYnVmMl9zaXplID0gbm9wYWdlZF9sZW4gLSBCVUZfU0laRV84S2lCOworCisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKKwkJCQkJICAgIEJVRl9TSVpFXzhLaUIsIERNQV9UT19ERVZJQ0UpOworCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBCVUZfU0laRV84S2lCLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisKKwkJZW50cnkgPSAoKytwcml2LT5jdXJfdHgpICUgdHhzaXplOworCQlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwKKwkJCQkJc2tiLT5kYXRhICsgQlVGX1NJWkVfOEtpQiwKKwkJCQkJYnVmMl9zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJZGVzYy0+ZGVzMyA9IGRlc2MtPmRlczIgKyBCVUZfU0laRV80S2lCOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwKKwkJCQkJCSAgICAgYnVmMl9zaXplLCBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihkZXNjKTsKKwkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIG5vcGFnZWRfbGVuLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJfQorCXJldHVybiBlbnRyeTsKK30KKworLyoqCisgKiAgc3RtbWFjX3htaXQ6CisgKiAgQHNrYiA6IHRoZSBzb2NrZXQgYnVmZmVyCisgKiAgQGRldiA6IGRldmljZSBwb2ludGVyCisgKiAgRGVzY3JpcHRpb24gOiBUeCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RtbWFjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZW50cnk7CisJaW50IGksIGNzdW1faW5zZXJ0aW9uID0gMDsKKwlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRlc2MsICpmaXJzdDsKKworCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPCBuZnJhZ3MgKyAxKSkgeworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdC4gKi8KKwkJCXByX2VycigiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2VcbiIsCisJCQkJX19mdW5jX18pOworCQl9CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwllbnRyeSA9IHByaXYtPmN1cl90eCAlIHR4c2l6ZTsKKworI2lmZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisJaWYgKChza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHx8IG5mcmFncykKKwkJcHJfaW5mbygic3RtbWFjIHhtaXQ6XG4iCisJCSAgICAgICAiXHRza2IgYWRkciAlcCAtIGxlbjogJWQgLSBub3BhZ2VkX2xlbjogJWRcbiIKKwkJICAgICAgICJcdG5fZnJhZ3M6ICVkIC0gaXBfc3VtbWVkOiAlZCAtICVzIGdzb1xuIiwKKwkJICAgICAgIHNrYiwgc2tiLT5sZW4sIHNrYl9oZWFkbGVuKHNrYiksIG5mcmFncywgc2tiLT5pcF9zdW1tZWQsCisJCSAgICAgICAhc2tiX2lzX2dzbyhza2IpID8gImlzbid0IiA6ICJpcyIpOworI2VuZGlmCisKKwlpZiAodW5saWtlbHkoc2tiX2lzX2dzbyhza2IpKSkKKwkJcmV0dXJuIHN0bW1hY19zd190c28ocHJpdiwgc2tiKTsKKworCWlmIChsaWtlbHkoKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSkgeworCQlpZiAobGlrZWx5KHByaXYtPnR4X2NvZSA9PSBOT19IV19DU1VNKSkKKwkJCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisJCWVsc2UKKwkJCWNzdW1faW5zZXJ0aW9uID0gMTsKKwl9CisKKwlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisJZmlyc3QgPSBkZXNjOworCisjaWZkZWYgU1RNTUFDX1hNSVRfREVCVUcKKwlpZiAoKG5mcmFncyA+IDApIHx8IChza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pKQorCQlwcl9kZWJ1Zygic3RtbWFjIHhtaXQ6IHNrYiBsZW46ICVkLCBub3BhZ2VkX2xlbjogJWQsXG4iCisJCSAgICAgICAiXHRcdG5fZnJhZ3M6ICVkLCBpcF9zdW1tZWQ6ICVkXG4iLAorCQkgICAgICAgc2tiLT5sZW4sIHNrYl9oZWFkbGVuKHNrYiksIG5mcmFncywgc2tiLT5pcF9zdW1tZWQpOworI2VuZGlmCisJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPj0gQlVGX1NJWkVfNEtpQikpIHsKKwkJZW50cnkgPSBzdG1tYWNfaGFuZGxlX2p1bWJvX2ZyYW1lcyhza2IsIGRldiwgY3N1bV9pbnNlcnRpb24pOworCQlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IG5vcGFnZWRfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZnJhZ3M7IGkrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCWludCBsZW4gPSBmcmFnLT5zaXplOworCisJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKKwkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCisJCVRYX0RCRygiXHRbZW50cnkgJWRdIHNlZ21lbnQgbGVuOiAlZFxuIiwgZW50cnksIGxlbik7CisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3BhZ2UocHJpdi0+ZGV2aWNlLCBmcmFnLT5wYWdlLAorCQkJCQkgIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQkgIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwgbGVuLAorCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihkZXNjKTsKKwl9CisKKwkvKiBJbnRlcnJ1cHQgb24gY29tcGxldGl0aW9uIG9ubHkgZm9yIHRoZSBsYXRlc3Qgc2VnbWVudCAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmNsb3NlX3R4X2Rlc2MoZGVzYyk7CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJLyogQ2xlYW4gSUMgd2hpbGUgdXNpbmcgdGltZXIgKi8KKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbGVhcl90eF9pYyhkZXNjKTsKKyNlbmRpZgorCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CisKKwlwcml2LT5jdXJfdHgrKzsKKworI2lmZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisJaWYgKG5ldGlmX21zZ19wa3RkYXRhKHByaXYpKSB7CisJCXByX2luZm8oInN0bW1hYyB4bWl0OiBjdXJyZW50PSVkLCBkaXJ0eT0lZCwgZW50cnk9JWQsICIKKwkJICAgICAgICJmaXJzdD0lcCwgbmZyYWdzPSVkXG4iLAorCQkgICAgICAgKHByaXYtPmN1cl90eCAlIHR4c2l6ZSksIChwcml2LT5kaXJ0eV90eCAlIHR4c2l6ZSksCisJCSAgICAgICBlbnRyeSwgZmlyc3QsIG5mcmFncyk7CisJCWRpc3BsYXlfcmluZyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CisJCXByX2luZm8oIj4+PiBmcmFtZSB0byBiZSB0cmFuc21pdHRlZDogIik7CisJCXByaW50X3BrdChza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl9CisjZW5kaWYKKwlpZiAodW5saWtlbHkoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJCVRYX0RCRygiJXM6IHN0b3AgdHJhbnNtaXR0ZWQgcGFja2V0c1xuIiwgX19mdW5jX18pOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfQorCisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCS8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLworCXdyaXRlbCgxLCBkZXYtPmJhc2VfYWRkciArIERNQV9YTVRfUE9MTF9ERU1BTkQpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19yeF9yZWZpbGwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKKwlpbnQgYmZzaXplID0gcHJpdi0+ZG1hX2J1Zl9zejsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfcng7CisKKwlmb3IgKDsgcHJpdi0+Y3VyX3J4IC0gcHJpdi0+ZGlydHlfcnggPiAwOyBwcml2LT5kaXJ0eV9yeCsrKSB7CisJCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmRpcnR5X3J4ICUgcnhzaXplOworCQlpZiAobGlrZWx5KHByaXYtPnJ4X3NrYnVmZltlbnRyeV0gPT0gTlVMTCkpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnByaXYtPnJ4X3JlY3ljbGUpOworCQkJaWYgKHNrYiA9PSBOVUxMKQorCQkJCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24ocHJpdi0+ZGV2LAorCQkJCQkJCQliZnNpemUpOworCisJCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQorCQkJCWJyZWFrOworCisJCQlwcml2LT5yeF9za2J1ZmZbZW50cnldID0gc2tiOworCQkJcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV0gPQorCQkJICAgIGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLCBiZnNpemUsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCShwICsgZW50cnkpLT5kZXMyID0gcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV07CisJCQlpZiAodW5saWtlbHkocHJpdi0+aXNfZ21hYykpIHsKKwkJCQlpZiAoYmZzaXplID49IEJVRl9TSVpFXzhLaUIpCisJCQkJCShwICsgZW50cnkpLT5kZXMzID0KKwkJCQkJICAgIChwICsgZW50cnkpLT5kZXMyICsgQlVGX1NJWkVfOEtpQjsKKwkJCX0KKwkJCVJYX0RCRyhLRVJOX0lORk8gIlx0cmVmaWxsIGVudHJ5ICMlZFxuIiwgZW50cnkpOworCQl9CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF9yeF9vd25lcihwICsgZW50cnkpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgaW50IGxpbWl0KQoreworCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5jdXJfcnggJSByeHNpemU7CisJdW5zaWduZWQgaW50IG5leHRfZW50cnk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfcnggKyBlbnRyeTsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnBfbmV4dDsKKworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKKwkJcHJfZGVidWcoIj4+PiBzdG1tYWNfcng6IGRlc2NyaXB0b3IgcmluZzpcbiIpOworCQlkaXNwbGF5X3JpbmcocHJpdi0+ZG1hX3J4LCByeHNpemUpOworCX0KKyNlbmRpZgorCWNvdW50ID0gMDsKKwl3aGlsZSAoIXByaXYtPm1hY190eXBlLT5vcHMtPmdldF9yeF9vd25lcihwKSkgeworCQlpbnQgc3RhdHVzOworCisJCWlmIChjb3VudCA+PSBsaW1pdCkKKwkJCWJyZWFrOworCisJCWNvdW50Kys7CisKKwkJbmV4dF9lbnRyeSA9ICgrK3ByaXYtPmN1cl9yeCkgJSByeHNpemU7CisJCXBfbmV4dCA9IHByaXYtPmRtYV9yeCArIG5leHRfZW50cnk7CisJCXByZWZldGNoKHBfbmV4dCk7CisKKwkJLyogcmVhZCB0aGUgc3RhdHVzIG9mIHRoZSBpbmNvbWluZyBmcmFtZSAqLworCQlzdGF0dXMgPSAocHJpdi0+bWFjX3R5cGUtPm9wcy0+cnhfc3RhdHVzKCZwcml2LT5kZXYtPnN0YXRzLAorCQkJCQkJCSAmcHJpdi0+eHN0YXRzLCBwKSk7CisJCWlmICh1bmxpa2VseShzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkpCisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQllbHNlIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLworCQkJaW50IGZyYW1lX2xlbiA9CisJCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisKKyNpZmRlZiBTVE1NQUNfUlhfREVCVUcKKwkJCWlmIChmcmFtZV9sZW4gPiBFVEhfRlJBTUVfTEVOKQorCQkJCXByX2RlYnVnKCJcdFJYIGZyYW1lIHNpemUgJWQsIENPRSBzdGF0dXM6ICVkXG4iLAorCQkJCQlmcmFtZV9sZW4sIHN0YXR1cyk7CisKKwkJCWlmIChuZXRpZl9tc2dfaHcocHJpdikpCisJCQkJcHJfZGVidWcoIlx0ZGVzYzogJXAgW2VudHJ5ICVkXSBidWZmPTB4JXhcbiIsCisJCQkJCXAsIGVudHJ5LCBwLT5kZXMyKTsKKyNlbmRpZgorCQkJc2tiID0gcHJpdi0+cnhfc2tidWZmW2VudHJ5XTsKKwkJCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkJCXByX2VycigiJXM6IEluY29uc2lzdGVudCBSeCBkZXNjcmlwdG9yIGNoYWluXG4iLAorCQkJCQlwcml2LT5kZXYtPm5hbWUpOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKKwkJCXByaXYtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCisJCQlza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLAorCQkJCQkgcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV0sCisJCQkJCSBwcml2LT5kbWFfYnVmX3N6LCBETUFfRlJPTV9ERVZJQ0UpOworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworCQkJaWYgKG5ldGlmX21zZ19wa3RkYXRhKHByaXYpKSB7CisJCQkJcHJfaW5mbygiIGZyYW1lIHJlY2VpdmVkICglZGJ5dGVzKSIsIGZyYW1lX2xlbik7CisJCQkJcHJpbnRfcGt0KHNrYi0+ZGF0YSwgZnJhbWVfbGVuKTsKKwkJCX0KKyNlbmRpZgorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKKworCQkJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBjc3VtX25vbmUpKSB7CisJCQkJLyogYWx3YXlzIGZvciB0aGUgb2xkIG1hYyAxMC8xMDAgKi8KKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCX0gZWxzZSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQluYXBpX2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOworCQkJfQorCisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gZnJhbWVfbGVuOworCQkJcHJpdi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJfQorCQllbnRyeSA9IG5leHRfZW50cnk7CisJCXAgPSBwX25leHQ7CS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLworCX0KKworCXN0bW1hY19yeF9yZWZpbGwocHJpdik7CisKKwlwcml2LT54c3RhdHMucnhfcGt0X24gKz0gY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogIHN0bW1hY19wb2xsIC0gc3RtbWFjIHBvbGwgbWV0aG9kIChOQVBJKQorICogIEBuYXBpIDogcG9pbnRlciB0byB0aGUgbmFwaSBzdHJ1Y3R1cmUuCisgKiAgQGJ1ZGdldCA6IG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB0aGUgY3VycmVudCBDUFUgY2FuIHJlY2VpdmUgZnJvbQorICoJICAgICAgYWxsIGludGVyZmFjZXMuCisgKiAgRGVzY3JpcHRpb24gOgorICogICBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4KKyAqICAgQWxzbyBpdCBydW5zIHRoZSBUWCBjb21wbGV0aW9uIHRocmVhZAorICovCitzdGF0aWMgaW50IHN0bW1hY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHN0bW1hY19wcml2LCBuYXBpKTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXByaXYtPnhzdGF0cy5wb2xsX24rKzsKKwlzdG1tYWNfdHgocHJpdik7CisJd29ya19kb25lID0gc3RtbWFjX3J4KHByaXYsIGJ1ZGdldCk7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXN0bW1hY19lbmFibGVfaXJxKHByaXYpOworCX0KKwlyZXR1cm4gd29ya19kb25lOworfQorCisvKioKKyAqICBzdG1tYWNfdHhfdGltZW91dAorICogIEBkZXYgOiBQb2ludGVyIHRvIG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiAgRGVzY3JpcHRpb246IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgdHJhbnNtaXNzaW9uIGZhaWxzIHRvCisgKiAgIGNvbXBsZXRlIHdpdGhpbiBhIHJlYXNvbmFibGUgdG1yYXRlLiBUaGUgZHJpdmVyIHdpbGwgbWFyayB0aGUgZXJyb3IgaW4gdGhlCisgKiAgIG5ldGRldiBzdHJ1Y3R1cmUgYW5kIGFycmFuZ2UgZm9yIHRoZSBkZXZpY2UgdG8gYmUgcmVzZXQgdG8gYSBzYW5lIHN0YXRlCisgKiAgIGluIG9yZGVyIHRvIHRyYW5zbWl0IGEgbmV3IHBhY2tldC4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogQ2xlYXIgVHggcmVzb3VyY2VzIGFuZCByZXN0YXJ0IHRyYW5zbWl0dGluZyBhZ2FpbiAqLworCXN0bW1hY190eF9lcnIocHJpdik7CisJcmV0dXJuOworfQorCisvKiBDb25maWd1cmF0aW9uIGNoYW5nZXMgKHBhc3NlZCBvbiBieSBpZmNvbmZpZykgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKK3sKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkJLyogY2FuJ3QgYWN0IG9uIGEgcnVubmluZyBpbnRlcmZhY2UgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIERvbid0IGFsbG93IGNoYW5naW5nIHRoZSBJL08gYWRkcmVzcyAqLworCWlmIChtYXAtPmJhc2VfYWRkciAhPSBkZXYtPmJhc2VfYWRkcikgeworCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgY2hhbmdlIEkvTyBhZGRyZXNzXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogRG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIElSUSAqLworCWlmIChtYXAtPmlycSAhPSBkZXYtPmlycSkgeworCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgY2hhbmdlIElSUSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIGlnbm9yZSBvdGhlciBmaWVsZHMgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgc3RtbWFjX211bHRpY2FzdF9saXN0IC0gZW50cnkgcG9pbnQgZm9yIG11bHRpY2FzdCBhZGRyZXNzaW5nCisgKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgZHJpdmVyIGVudHJ5IHBvaW50IHdoaWNoIGdldHMgY2FsbGVkIGJ5IHRoZSBrZXJuZWwKKyAqICB3aGVuZXZlciBtdWx0aWNhc3QgYWRkcmVzc2VzIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZC4KKyAqICBSZXR1cm4gdmFsdWU6CisgKiAgdm9pZC4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X2ZpbHRlcihkZXYpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIHN0bW1hY19jaGFuZ2VfbXR1IC0gZW50cnkgcG9pbnQgdG8gY2hhbmdlIE1UVSBzaXplIGZvciB0aGUgZGV2aWNlLgorICogIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqICBAbmV3X210dSA6IHRoZSBuZXcgTVRVIHNpemUgZm9yIHRoZSBkZXZpY2UuCisgKiAgRGVzY3JpcHRpb246IHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQgKE1UVSkgaXMgdXNlZCBieSB0aGUgbmV0d29yayBsYXllcgorICogIHRvIGRyaXZlIHBhY2tldCB0cmFuc21pc3Npb24uIEV0aGVybmV0IGhhcyBhbiBNVFUgb2YgMTUwMCBvY3RldHMKKyAqICAoRVRIX0RBVEFfTEVOKS4gVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCB3aXRoIGlmY29uZmlnLgorICogIFJldHVybiB2YWx1ZToKKyAqICAwIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlICgtKXZlIGludGVnZXIgYXMgZGVmaW5lZCBpbiBlcnJuby5oCisgKiAgZmlsZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IG1heF9tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByX2VycigiJXM6IG11c3QgYmUgc3RvcHBlZCB0byBjaGFuZ2UgaXRzIE1UVVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAocHJpdi0+aXNfZ21hYykKKwkJbWF4X210dSA9IEpVTUJPX0xFTjsKKwllbHNlCisJCW1heF9tdHUgPSBFVEhfREFUQV9MRU47CisKKwlpZiAoKG5ld19tdHUgPCA0NikgfHwgKG5ld19tdHUgPiBtYXhfbXR1KSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIE1UVSwgbWF4IE1UVSBpczogJWRcbiIsIGRldi0+bmFtZSwgbWF4X210dSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+bXR1ID0gbmV3X210dTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHVubGlrZWx5KCFkZXYpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgZGV2IHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChwcml2LT5pc19nbWFjKSB7CisJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCS8qIFRvIGhhbmRsZSBHTUFDIG93biBpbnRlcnJ1cHRzICovCisJCXByaXYtPm1hY190eXBlLT5vcHMtPmhvc3RfaXJxX3N0YXR1cyhpb2FkZHIpOworCX0KKwlzdG1tYWNfZG1hX2ludGVycnVwdChkZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKy8qIFBvbGxpbmcgcmVjZWl2ZSAtIHVzZWQgYnkgTkVUQ09OU09MRSBhbmQgb3RoZXIgZGlhZ25vc3RpYyB0b29scworICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAqLworc3RhdGljIHZvaWQgc3RtbWFjX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlzdG1tYWNfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworfQorI2VuZGlmCisKKy8qKgorICogIHN0bW1hY19pb2N0bCAtIEVudHJ5IHBvaW50IGZvciB0aGUgSW9jdGwKKyAqICBAZGV2OiBEZXZpY2UgcG9pbnRlci4KKyAqICBAcnE6IEFuIElPQ1RMIHNwZWNlZmljIHN0cnVjdHVyZSwgdGhhdCBjYW4gY29udGFpbiBhIHBvaW50ZXIgdG8KKyAqICBhIHByb3ByaWV0YXJ5IHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIGRyaXZlci4KKyAqICBAY21kOiBJT0NUTCBjb21tYW5kCisgKiAgRGVzY3JpcHRpb246CisgKiAgQ3VycmVudGx5IHRoZXJlIGFyZSBubyBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydGVkIGluIElPQ1RMLCBqdXN0IHRoZQorICogIHBoeV9taWlfaW9jdGwoLi4uKSBjYW4gYmUgaW52b2tlZC4KKyAqLworc3RhdGljIGludCBzdG1tYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwljYXNlIFNJT0NHTUlJUkVHOgorCWNhc2UgU0lPQ1NNSUlSRUc6CisJCWlmICghcHJpdi0+cGh5ZGV2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwkJcmV0ID0gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECitzdGF0aWMgdm9pZCBzdG1tYWNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlEQkcocHJvYmUsIElORk8sICIlczogU2V0dGluZyB2bGdycCB0byAlcFxuIiwgZGV2LT5uYW1lLCBncnApOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlwcml2LT52bGdycCA9IGdycDsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdG1tYWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzdG1tYWNfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQgPSBzdG1tYWNfeG1pdCwKKwkubmRvX3N0b3AgPSBzdG1tYWNfcmVsZWFzZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBzdG1tYWNfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHN0bW1hY19tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgPSBzdG1tYWNfdHhfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsID0gc3RtbWFjX2lvY3RsLAorCS5uZG9fc2V0X2NvbmZpZyA9IHN0bW1hY19jb25maWcsCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBzdG1tYWNfdmxhbl9yeF9yZWdpc3RlciwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBzdG1tYWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCit9OworCisvKioKKyAqIHN0bW1hY19wcm9iZSAtIEluaXRpYWxpemF0aW9uIG9mIHRoZSBhZGFwdGVyIC4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IFRoZSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvcgorICogdGhlIFNUTU1BQyBkcml2ZXIuIEl0IGFsc28gY2FsbHMgdGhlIGxvdyBsZXZlbCByb3V0aW5lcworICogaW4gb3JkZXIgdG8gaW5pdCB0aGUgSFcgKGkuZS4gdGhlIERNQSBlbmdpbmUpCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RtbWFjX25ldGRldl9vcHM7CisJc3RtbWFjX3NldF9ldGh0b29sX29wcyhkZXYpOworCisJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSElHSERNQSk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJLyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqLworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYOworI2VuZGlmCisJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBkZWZhdWx0X21zZ19sZXZlbCk7CisKKwlpZiAocHJpdi0+aXNfZ21hYykKKwkJcHJpdi0+cnhfY3N1bSA9IDE7CisKKwlpZiAoZmxvd19jdHJsKQorCQlwcml2LT5mbG93X2N0cmwgPSBGTE9XX0FVVE87CS8qIFJYL1RYIHBhdXNlIG9uICovCisKKwlwcml2LT5wYXVzZSA9IHBhdXNlOworCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIHN0bW1hY19wb2xsLCA2NCk7CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCisJCXByX3dhcm5pbmcoIlx0bm8gdmFsaWQgTUFDIGFkZHJlc3M7IgorCQkJInBsZWFzZSwgdXNlIGlmY29uZmlnIG9yIG53aHdjb25maWchXG4iKTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IFNjYXR0ZXIvR2F0aGVyOiAlcyAtIEhXIGNoZWNrc3VtczogJXNcbiIsCisJICAgIGRldi0+bmFtZSwgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSA/ICJvbiIgOiAib2ZmIiwKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pID8gIm9uIiA6ICJvZmYiKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3RtbWFjX21hY19kZXZpY2Vfc2V0dXAKKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IHNlbGVjdCBhbmQgaW5pdGlhbGlzZSB0aGUgbWFjIGRldmljZSAobWFjMTAwIG9yIEdtYWMpLgorICovCitzdGF0aWMgaW50IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZGV2aWNlOworCisJaWYgKHByaXYtPmlzX2dtYWMpCisJCWRldmljZSA9IGdtYWNfc2V0dXAoaW9hZGRyKTsKKwllbHNlCisJCWRldmljZSA9IG1hYzEwMF9zZXR1cChpb2FkZHIpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+bWFjX3R5cGUgPSBkZXZpY2U7CisKKwlwcml2LT53b2xlbmFibGVkID0gcHJpdi0+bWFjX3R5cGUtPmh3LnBtdDsJLyogUE1UIHN1cHBvcnRlZCAqLworCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9TVVBQT1JURUQpCisJCXByaXYtPndvbG9wdHMgPSBXQUtFX01BR0lDOwkJLyogTWFnaWMgRnJhbWUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bW1hY3BoeV9kdnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQ7CisJcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoKHBkZXYtPmRldikucGxhdGZvcm1fZGF0YSk7CisKKwlwcl9kZWJ1Zygic3RtbWFjcGh5X2R2cl9wcm9iZTogYWRkZWQgcGh5IGZvciBidXMgJWRcbiIsCisJICAgICAgIHBsYXRfZGF0LT5idXNfaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RtbWFjcGh5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IFBIWV9SRVNPVVJDRV9OQU1FLAorCQkgICB9LAorCS5wcm9iZSA9IHN0bW1hY3BoeV9kdnJfcHJvYmUsCisJLnJlbW92ZSA9IHN0bW1hY3BoeV9kdnJfcmVtb3ZlLAorfTsKKworLyoqCisgKiBzdG1tYWNfYXNzb2NpYXRlX3BoeQorICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZGF0YTogcG9pbnRzIHRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIERlc2NyaXB0aW9uOiBTY2FucyB0aHJvdWdoIGFsbCB0aGUgUEhZcyB3ZSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGNoZWNrcyBpZgorICogYW55IGFyZSBhc3NvY2lhdGVkIHdpdGggb3VyIE1BQy4gIElmIHNvLCB0aGVuIGp1c3QgZmlsbCBpbgorICogdGhlIGJsYW5rcyBpbiBvdXIgbG9jYWwgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBzdG1tYWNfYXNzb2NpYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gKHN0cnVjdCBzdG1tYWNfcHJpdiAqKWRhdGE7CisJc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKnBsYXRfZGF0OworCisJcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKworCURCRyhwcm9iZSwgREVCVUcsICIlczogY2hlY2tpbmcgcGh5IGZvciBidXMgJWRcbiIsIF9fZnVuY19fLAorCQlwbGF0X2RhdC0+YnVzX2lkKTsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBwaHkgaXMgZm9yIHRoZSBNQUMgYmVpbmcgaW5pdGlhbGlzZWQgKi8KKwlpZiAocHJpdi0+YnVzX2lkICE9IHBsYXRfZGF0LT5idXNfaWQpCisJCXJldHVybiAwOworCisJLyogT0ssIHRoaXMgUEhZIGlzIGNvbm5lY3RlZCB0byB0aGUgTUFDLgorCSAgIEdvIGFoZWFkIGFuZCBnZXQgdGhlIHBhcmFtZXRlcnMgKi8KKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IE9LLiBGb3VuZCBQSFkgY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcHJpdi0+cGh5X2lycSA9CisJICAgIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCAicGh5aXJxIik7CisJREJHKHByb2JlLCBERUJVRywgIiVzOiBQSFkgaXJxIG9uIGJ1cyAlZCBpcyAlZFxuIiwgX19mdW5jX18sCisJICAgIHBsYXRfZGF0LT5idXNfaWQsIHByaXYtPnBoeV9pcnEpOworCisJLyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWAorCSAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgKi8KKwlpZiAoKHBoeWFkZHIgPj0gMCkgJiYgKHBoeWFkZHIgPD0gMzEpKQorCQlwbGF0X2RhdC0+cGh5X2FkZHIgPSBwaHlhZGRyOworCisJcHJpdi0+cGh5X2FkZHIgPSBwbGF0X2RhdC0+cGh5X2FkZHI7CisJcHJpdi0+cGh5X21hc2sgPSBwbGF0X2RhdC0+cGh5X21hc2s7CisJcHJpdi0+cGh5X2ludGVyZmFjZSA9IHBsYXRfZGF0LT5pbnRlcmZhY2U7CisJcHJpdi0+cGh5X3Jlc2V0ID0gcGxhdF9kYXQtPnBoeV9yZXNldDsKKworCURCRyhwcm9iZSwgREVCVUcsICIlczogZXhpdGluZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAxOwkvKiBmb3JjZXMgZXhpdCBvZiBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCkgKi8KK30KKworLyoqCisgKiBzdG1tYWNfZHZyX3Byb2JlCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqIERlc2NyaXB0aW9uOiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIHRocm91Z2ggcGxhdGZvcm1fZGV2aWNlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXY7CisJc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdDsKKworCXByX2luZm8oIlNUTU1BQyBkcml2ZXI6XG5cdHBsYXRmb3JtIHJlZ2lzdHJhdGlvbi4uLiAiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlwcl9pbmZvKCJkb25lIVxuIik7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSwKKwkJCQlwZGV2LT5uYW1lKSkgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorCQkgICAgICAgImNhbm5vdCBnZXQgdGhlIEkvTyBhZGRyIDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClyZXMtPnN0YXJ0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlhZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSk7CisJaWYgKCFhZGRyKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBtZW1vcnkgbWFwcGluZyBmYWlsZWQgXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSk7CisJaWYgKCFuZGV2KSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBhbGxvY2F0aW5nIHRoZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CisKKwkvKiBHZXQgdGhlIE1BQyBpbmZvcm1hdGlvbiAqLworCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJtYWNpcnEiKTsKKwlpZiAobmRldi0+aXJxID09IC1FTlhJTykgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogTUFDIElSUSBjb25maWd1cmF0aW9uICIKKwkJICAgICAgICJpbmZvcm1hdGlvbiBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXByaXYtPmRldmljZSA9ICYocGRldi0+ZGV2KTsKKwlwcml2LT5kZXYgPSBuZGV2OworCXBsYXRfZGF0ID0gKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKwlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOworCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLworCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJLyogU2V0IHRoZSBJL08gYmFzZSBhZGRyICovCisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworCS8qIE1BQyBIVyByZXZpY2UgZGV0ZWN0aW9uICovCisJcmV0ID0gc3RtbWFjX21hY19kZXZpY2Vfc2V0dXAobmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogTmV0d29yayBEZXZpY2UgUmVnaXN0cmF0aW9uICovCisJcmV0ID0gc3RtbWFjX3Byb2JlKG5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIGFzc29jaWF0ZSBhIFBIWSAtIGl0IGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgcGxhdGZvcm0gYnVzICovCisJaWYgKCFkcml2ZXJfZm9yX2VhY2hfZGV2aWNlCisJICAgICgmKHN0bW1hY3BoeV9kcml2ZXIuZHJpdmVyKSwgTlVMTCwgKHZvaWQgKilwcml2LAorCSAgICAgc3RtbWFjX2Fzc29jaWF0ZV9waHkpKSB7CisJCXByX2VycigiTm8gUEhZIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBNQUMhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+Zml4X21hY19zcGVlZCA9IHBsYXRfZGF0LT5maXhfbWFjX3NwZWVkOworCXByaXYtPmJzcF9wcml2ID0gcGxhdF9kYXQtPmJzcF9wcml2OworCisJcHJfaW5mbygiXHQlcyAtIChkZXYuIG5hbWU6ICVzIC0gaWQ6ICVkLCBJUlEgIyVkXG4iCisJICAgICAgICJcdElPIGJhc2UgYWRkcjogMHglMDh4KVxuIiwgbmRldi0+bmFtZSwgcGRldi0+bmFtZSwKKwkgICAgICAgcGRldi0+aWQsIG5kZXYtPmlycSwgKHVuc2lnbmVkIGludClhZGRyKTsKKworCS8qIE1ESU8gYnVzIFJlZ2lzdHJhdGlvbiAqLworCXByX2RlYnVnKCJcdE1ESU8gYnVzIChpZDogJWQpLi4uIiwgcHJpdi0+YnVzX2lkKTsKKwlyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoInJlZ2lzdGVyZWQhXG4iKTsKKworb3V0OgorCWlmIChyZXQgPCAwKSB7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkpOworCQlpZiAoYWRkciAhPSBOVUxMKQorCQkJaW91bm1hcChhZGRyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHN0bW1hY19kdnJfcmVtb3ZlCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqIERlc2NyaXB0aW9uOiB0aGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgVFgvUlggcHJvY2Vzc2VzLCBkaXNhYmxlcyB0aGUgTUFDIFJYL1RYCisgKiBjaGFuZ2VzIHRoZSBsaW5rIHN0YXR1cywgcmVsZWFzZXMgdGhlIERNQSBkZXNjcmlwdG9yIHJpbmdzLAorICogdW5yZWdpc3RlcnMgdGhlIE1ESU8gYnVzIGFuZCB1bm1hcHMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcHJfaW5mbygiJXM6XG5cdHJlbW92aW5nIGRyaXZlciIsIF9fZnVuY19fKTsKKworCXN0bW1hY19kbWFfc3RvcF9yeChuZGV2LT5iYXNlX2FkZHIpOworCXN0bW1hY19kbWFfc3RvcF90eChuZGV2LT5iYXNlX2FkZHIpOworCisJc3RtbWFjX21hY19kaXNhYmxlX3J4KG5kZXYtPmJhc2VfYWRkcik7CisJc3RtbWFjX21hY19kaXNhYmxlX3R4KG5kZXYtPmJhc2VfYWRkcik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKworCXN0bW1hY19tZGlvX3VucmVnaXN0ZXIobmRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKworCWlvdW5tYXAoKHZvaWQgKiluZGV2LT5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKTsKKworCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBkaXNfaWMgPSAwOworCisJaWYgKCFkZXYgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWlmIChwcml2LT5waHlkZXYpCisJCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworCQlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQkJZGlzX2ljID0gMTsKKyNlbmRpZgorCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOworCisJCS8qIFN0b3AgVFgvUlggRE1BICovCisJCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7CisJCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisJCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LAorCQkJCQkJICBwcml2LT5kbWFfcnhfc2l6ZSwgZGlzX2ljKTsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aW5pdF90eF9kZXNjKHByaXYtPmRtYV90eCwKKwkJCQkJCSAgcHJpdi0+ZG1hX3R4X3NpemUpOworCisJCXN0bW1hY19tYWNfZGlzYWJsZV90eChkZXYtPmJhc2VfYWRkcik7CisKKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCYocGRldi0+ZGV2KSkpIHsKKwkJCS8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovCisJCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQorCQkJCXByaXYtPm1hY190eXBlLT5vcHMtPnBtdChkZXYtPmJhc2VfYWRkciwKKwkJCQkJCQkgcHJpdi0+d29sb3B0cyk7CisJCX0gZWxzZSB7CisJCQlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpdi0+c2h1dGRvd24gPSAxOworCQkvKiBBbHRob3VnaCB0aGlzIGNhbiBhcHBlYXIgc2xpZ2h0bHkgcmVkdW5kYW50IGl0IGFjdHVhbGx5CisJCSAqIG1ha2VzIGZhc3QgdGhlIHN0YW5kYnkgb3BlcmF0aW9uIGFuZCBndWFyYW50ZWVzIHRoZSBkcml2ZXIKKwkJICogd29ya2luZyBpZiBoaWJlcm5hdGlvbiBpcyBvbiBtZWRpYS4gKi8KKwkJc3RtbWFjX3JlbGVhc2UoZGV2KTsKKwl9CisKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJaWYgKHByaXYtPnNodXRkb3duKSB7CisJCS8qIFJlLW9wZW4gdGhlIGludGVyZmFjZSBhbmQgcmUtaW5pdCB0aGUgTUFDL0RNQQorCQkgICBhbmQgdGhlIHJpbmdzLiAqLworCQlzdG1tYWNfb3BlbihkZXYpOworCQlnb3RvIG91dF9yZXN1bWU7CisJfQorCisJLyogUG93ZXIgRG93biBiaXQsIGludG8gdGhlIFBNIHJlZ2lzdGVyLCBpcyBjbGVhcmVkCisJICogYXV0b21hdGljYWxseSBhcyBzb29uIGFzIGEgbWFnaWMgcGFja2V0IG9yIGEgV2FrZS11cCBmcmFtZQorCSAqIGlzIHJlY2VpdmVkLiBBbnl3YXksIGl0J3MgYmV0dGVyIHRvIG1hbnVhbGx5IGNsZWFyCisJICogdGhpcyBiaXQgYmVjYXVzZSBpdCBjYW4gZ2VuZXJhdGUgcHJvYmxlbXMgd2hpbGUgcmVzdW1pbmcKKwkgKiBmcm9tIGFub3RoZXIgZGV2aWNlcyAoZS5nLiBzZXJpYWwgY29uc29sZSkuICovCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCYocGRldi0+ZGV2KSkpCisJCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9TVVBQT1JURUQpCisJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wbXQoZGV2LT5iYXNlX2FkZHIsIDApOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJLyogRW5hYmxlIHRoZSBNQUMgYW5kIERNQSAqLworCXN0bW1hY19tYWNfZW5hYmxlX3J4KGlvYWRkcik7CisJc3RtbWFjX21hY19lbmFibGVfdHgoaW9hZGRyKTsKKwlzdG1tYWNfZG1hX3N0YXJ0X3R4KGlvYWRkcik7CisJc3RtbWFjX2RtYV9zdGFydF9yeChpb2FkZHIpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworI2VuZGlmCisJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOworCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCitvdXRfcmVzdW1lOgorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1tYWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsCisJCSAgIH0sCisJLnByb2JlID0gc3RtbWFjX2R2cl9wcm9iZSwKKwkucmVtb3ZlID0gc3RtbWFjX2R2cl9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBzdG1tYWNfc3VzcGVuZCwKKwkucmVzdW1lID0gc3RtbWFjX3Jlc3VtZSwKKyNlbmRpZgorCit9OworCisvKioKKyAqIHN0bW1hY19pbml0X21vZHVsZSAtIEVudHJ5IHBvaW50IGZvciB0aGUgZHJpdmVyCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHN0bW1hY19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzdG1tYWNwaHlfZHJpdmVyKSkgeworCQlwcl9lcnIoIk5vIFBIWSBkZXZpY2VzIHJlZ2lzdGVyZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzdG1tYWNfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHN0bW1hY19jbGVhbnVwX21vZHVsZSAtIENsZWFudXAgcm91dGluZSBmb3IgdGhlIGRyaXZlcgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNsZWFudXAgcm91dGluZSBmb3IgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHN0bW1hY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzdG1tYWNwaHlfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3RtbWFjX2RyaXZlcik7Cit9CisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgaW50IF9faW5pdCBzdG1tYWNfY21kbGluZV9vcHQoY2hhciAqc3RyKQoreworCWNoYXIgKm9wdDsKKworCWlmICghc3RyIHx8ICEqc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAoKG9wdCA9IHN0cnNlcCgmc3RyLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghc3RybmNtcChvcHQsICJkZWJ1ZzoiLCA2KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDYsIDAsICh1bnNpZ25lZCBsb25nICopJmRlYnVnKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAicGh5YWRkcjoiLCA4KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDgsIDAsICh1bnNpZ25lZCBsb25nICopJnBoeWFkZHIpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJkbWFfdHhzaXplOiIsIDExKSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDExLCAwLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZkbWFfdHhzaXplKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAiZG1hX3J4c2l6ZToiLCAxMSkpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyAxMSwgMCwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgKikmZG1hX3J4c2l6ZSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImJ1Zl9zejoiLCA3KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDcsIDAsICh1bnNpZ25lZCBsb25nICopJmJ1Zl9zeik7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInRjOiIsIDMpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgMywgMCwgKHVuc2lnbmVkIGxvbmcgKikmdGMpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ0eF9jb2U6IiwgNykpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyA3LCAwLCAodW5zaWduZWQgbG9uZyAqKSZ0eF9jb2UpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ3YXRjaGRvZzoiLCA5KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDksIDAsICh1bnNpZ25lZCBsb25nICopJndhdGNoZG9nKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAiZmxvd19jdHJsOiIsIDEwKSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDEwLCAwLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZmbG93X2N0cmwpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwYXVzZToiLCA2KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDYsIDAsICh1bnNpZ25lZCBsb25nICopJnBhdXNlKTsKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInRtcmF0ZToiLCA3KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDcsIDAsICh1bnNpZ25lZCBsb25nICopJnRtcmF0ZSk7CisjZW5kaWYKKwl9CisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoInN0bW1hY2V0aD0iLCBzdG1tYWNfY21kbGluZV9vcHQpOworI2VuZGlmCisKK21vZHVsZV9pbml0KHN0bW1hY19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChzdG1tYWNfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNUTU1BQyAxMC8xMDAvMTAwMCBFdGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ODU1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWRpby5jCkBAIC0wLDAgKzEsMjE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBTVE1NQUMgRXRoZXJuZXQgRHJpdmVyIC0tIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uCisgIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSSByZWdpc3RlcnMKKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogQ2FybCBTaGF3IDxjYXJsLnNoYXdAc3QuY29tPgorICBNYWludGFpbmVyOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJzdG1tYWMuaCIKKworI2RlZmluZSBNSUlfQlVTWSAweDAwMDAwMDAxCisjZGVmaW5lIE1JSV9XUklURSAweDAwMDAwMDAyCisKKy8qKgorICogc3RtbWFjX21kaW9fcmVhZAorICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZQorICogQHBoeWFkZHI6IE1JSSBhZGRyIHJlZyBiaXRzIDE1LTExCisgKiBAcGh5cmVnOiBNSUkgYWRkciByZWcgYml0cyAxMC02CisgKiBEZXNjcmlwdGlvbjogaXQgcmVhZHMgZGF0YSBmcm9tIHRoZSBNSUkgcmVnaXN0ZXIgZnJvbSB3aXRoaW4gdGhlIHBoeSBkZXZpY2UuCisgKiBGb3IgdGhlIDcxMTEgR01BQywgd2UgbXVzdCBzZXQgdGhlIGJpdCAwIGluIHRoZSBNSUkgYWRkcmVzcyByZWdpc3RlciB3aGlsZQorICogYWNjZXNzaW5nIHRoZSBQSFkgcmVnaXN0ZXJzLgorICogRm9ydHVuYXRlbHksIGl0IHNlZW1zIHRoaXMgaGFzIG5vIGRyYXdiYWNrIGZvciB0aGUgNzEwOSBNQUMuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7CisJdW5zaWduZWQgaW50IG1paV9kYXRhID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5kYXRhOworCisJaW50IGRhdGE7CisJdTE2IHJlZ1ZhbHVlID0gKCgocGh5YWRkciA8PCAxMSkgJiAoMHgwMDAwRjgwMCkpIHwKKwkJCSgocGh5cmVnIDw8IDYpICYgKDB4MDAwMDA3QzApKSk7CisJcmVnVmFsdWUgfD0gTUlJX0JVU1k7CS8qIGluIGNhc2Ugb2YgR01BQyAqLworCisJZG8ge30gd2hpbGUgKCgocmVhZGwoaW9hZGRyICsgbWlpX2FkZHJlc3MpKSAmIE1JSV9CVVNZKSA9PSAxKTsKKwl3cml0ZWwocmVnVmFsdWUsIGlvYWRkciArIG1paV9hZGRyZXNzKTsKKwlkbyB7fSB3aGlsZSAoKChyZWFkbChpb2FkZHIgKyBtaWlfYWRkcmVzcykpICYgTUlJX0JVU1kpID09IDEpOworCisJLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBNSUkgZGF0YSByZWdpc3RlciAqLworCWRhdGEgPSAoaW50KXJlYWRsKGlvYWRkciArIG1paV9kYXRhKTsKKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqIHN0bW1hY19tZGlvX3dyaXRlCisgKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlCisgKiBAcGh5YWRkcjogTUlJIGFkZHIgcmVnIGJpdHMgMTUtMTEKKyAqIEBwaHlyZWc6IE1JSSBhZGRyIHJlZyBiaXRzIDEwLTYKKyAqIEBwaHlkYXRhOiBwaHkgZGF0YQorICogRGVzY3JpcHRpb246IGl0IHdyaXRlcyB0aGUgZGF0YSBpbnRvIHRoZSBNSUkgcmVnaXN0ZXIgZnJvbSB3aXRoaW4gdGhlIGRldmljZS4KKyAqLworc3RhdGljIGludCBzdG1tYWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZywKKwkJCSAgICAgdTE2IHBoeWRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBidXMtPnByaXY7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5hZGRyOworCXVuc2lnbmVkIGludCBtaWlfZGF0YSA9IHByaXYtPm1hY190eXBlLT5ody5taWkuZGF0YTsKKworCXUxNiB2YWx1ZSA9CisJICAgICgoKHBoeWFkZHIgPDwgMTEpICYgKDB4MDAwMEY4MDApKSB8ICgocGh5cmVnIDw8IDYpICYgKDB4MDAwMDA3QzApKSkKKwkgICAgfCBNSUlfV1JJVEU7CisKKwl2YWx1ZSB8PSBNSUlfQlVTWTsKKworCS8qIFdhaXQgdW50aWwgYW55IGV4aXN0aW5nIE1JSSBvcGVyYXRpb24gaXMgY29tcGxldGUgKi8KKwlkbyB7fSB3aGlsZSAoKChyZWFkbChpb2FkZHIgKyBtaWlfYWRkcmVzcykpICYgTUlJX0JVU1kpID09IDEpOworCisJLyogU2V0IHRoZSBNSUkgYWRkcmVzcyByZWdpc3RlciB0byB3cml0ZSAqLworCXdyaXRlbChwaHlkYXRhLCBpb2FkZHIgKyBtaWlfZGF0YSk7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBtaWlfYWRkcmVzcyk7CisKKwkvKiBXYWl0IHVudGlsIGFueSBleGlzdGluZyBNSUkgb3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCisJZG8ge30gd2hpbGUgKCgocmVhZGwoaW9hZGRyICsgbWlpX2FkZHJlc3MpKSAmIE1JSV9CVVNZKSA9PSAxKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHN0bW1hY19tZGlvX3Jlc2V0CisgKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogcmVzZXQgdGhlIE1JSSBidXMKKyAqLworc3RhdGljIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKworCWlmIChwcml2LT5waHlfcmVzZXQpIHsKKwkJcHJfZGVidWcoInN0bW1hY19tZGlvX3Jlc2V0OiBjYWxsaW5nIHBoeV9yZXNldFxuIik7CisJCXByaXYtPnBoeV9yZXNldChwcml2LT5ic3BfcHJpdik7CisJfQorCisJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHByb2JsZW1zIHdpdGggdGhlIFNURTEwMVAgUEhZLgorCSAqIEl0IGRvZXNuJ3QgY29tcGxldGUgaXRzIHJlc2V0IHVudGlsIGF0IGxlYXN0IG9uZSBjbG9jayBjeWNsZQorCSAqIG9uIE1EQywgc28gcGVyZm9ybSBhIGR1bW15IG1kaW8gcmVhZC4KKwkgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgbWlpX2FkZHJlc3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3RtbWFjX21kaW9fcmVnaXN0ZXIKKyAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IHJlZ2lzdGVycyB0aGUgTUlJIGJ1cworICovCitpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG1paV9idXMgKm5ld19idXM7CisJaW50ICppcnFsaXN0OworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBhZGRyLCBmb3VuZDsKKworCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKG5ld19idXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnFsaXN0ID0ga3phbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKGlycWxpc3QgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGlycWxpc3RfYWxsb2NfZmFpbDsKKwl9CisKKwkvKiBBc3NpZ24gSVJRIHRvIHBoeSBhdCBhZGRyZXNzIHBoeV9hZGRyICovCisJaWYgKHByaXYtPnBoeV9hZGRyICE9IC0xKQorCQlpcnFsaXN0W3ByaXYtPnBoeV9hZGRyXSA9IHByaXYtPnBoeV9pcnE7CisKKwluZXdfYnVzLT5uYW1lID0gIlNUTU1BQyBNSUkgQnVzIjsKKwluZXdfYnVzLT5yZWFkID0gJnN0bW1hY19tZGlvX3JlYWQ7CisJbmV3X2J1cy0+d3JpdGUgPSAmc3RtbWFjX21kaW9fd3JpdGU7CisJbmV3X2J1cy0+cmVzZXQgPSAmc3RtbWFjX21kaW9fcmVzZXQ7CisJc25wcmludGYobmV3X2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKKwluZXdfYnVzLT5wcml2ID0gbmRldjsKKwluZXdfYnVzLT5pcnEgPSBpcnFsaXN0OworCW5ld19idXMtPnBoeV9tYXNrID0gcHJpdi0+cGh5X21hc2s7CisJbmV3X2J1cy0+cGFyZW50ID0gcHJpdi0+ZGV2aWNlOworCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByX2VycigiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwgbmV3X2J1cy0+bmFtZSk7CisJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7CisJfQorCisJcHJpdi0+bWlpID0gbmV3X2J1czsKKworCWZvdW5kID0gMDsKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykgeworCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gbmV3X2J1cy0+cGh5X21hcFthZGRyXTsKKwkJaWYgKHBoeWRldikgeworCQkJaWYgKHByaXYtPnBoeV9hZGRyID09IC0xKSB7CisJCQkJcHJpdi0+cGh5X2FkZHIgPSBhZGRyOworCQkJCXBoeWRldi0+aXJxID0gcHJpdi0+cGh5X2lycTsKKwkJCQlpcnFsaXN0W2FkZHJdID0gcHJpdi0+cGh5X2lycTsKKwkJCX0KKwkJCXByX2luZm8oIiVzOiBQSFkgSUQgJTA4eCBhdCAlZCBJUlEgJWQgKCVzKSVzXG4iLAorCQkJICAgICAgIG5kZXYtPm5hbWUsIHBoeWRldi0+cGh5X2lkLCBhZGRyLAorCQkJICAgICAgIHBoeWRldi0+aXJxLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAorCQkJICAgICAgIChhZGRyID09IHByaXYtPnBoeV9hZGRyKSA/ICIgYWN0aXZlIiA6ICIiKTsKKwkJCWZvdW5kID0gMTsKKwkJfQorCX0KKworCWlmICghZm91bmQpCisJCXByX3dhcm5pbmcoIiVzOiBObyBQSFkgZm91bmRcbiIsIG5kZXYtPm5hbWUpOworCisJcmV0dXJuIDA7CitidXNfcmVnaXN0ZXJfZmFpbDoKKwlrZnJlZShpcnFsaXN0KTsKK2lycWxpc3RfYWxsb2NfZmFpbDoKKwlrZnJlZShuZXdfYnVzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHN0bW1hY19tZGlvX3VucmVnaXN0ZXIKKyAqIEBuZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IHVucmVnaXN0ZXJzIHRoZSBNSUkgYnVzCisgKi8KK2ludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJbWRpb2J1c191bnJlZ2lzdGVyKHByaXYtPm1paSk7CisJcHJpdi0+bWlpLT5wcml2ID0gTlVMTDsKKwlrZnJlZShwcml2LT5taWkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5ZjYxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgU1RNTUFDIGV4dGVybmFsIHRpbWVyIHN1cHBvcnQuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgInN0bW1hY190aW1lci5oIgorCitzdGF0aWMgdm9pZCBzdG1tYWNfdGltZXJfaGFuZGxlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOworCisJc3RtbWFjX3NjaGVkdWxlKGRldik7CisKKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgU1RNTUFDX1RJTUVSX01TRyh0aW1lciwgZnJlcSkgXAorcHJpbnRrKEtFUk5fSU5GTyAic3RtbWFjX3RpbWVyOiAlcyBUaW1lciBPTiAoZnJlcSAlZEh6KVxuIiwgdGltZXIsIGZyZXEpOworCisjaWYgZGVmaW5lZChDT05GSUdfU1RNTUFDX1JUQ19USU1FUikKKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KK3N0YXRpYyBzdHJ1Y3QgcnRjX2RldmljZSAqc3RtbWFjX3J0YzsKK3N0YXRpYyBydGNfdGFza190IHN0bW1hY190YXNrOworCitzdGF0aWMgdm9pZCBzdG1tYWNfcnRjX3N0YXJ0KHVuc2lnbmVkIGludCBuZXdfZnJlcSkKK3sKKwlydGNfaXJxX3NldF9mcmVxKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgbmV3X2ZyZXEpOworCXJ0Y19pcnFfc2V0X3N0YXRlKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgMSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfcnRjX3N0b3Aodm9pZCkKK3sKKwlydGNfaXJxX3NldF9zdGF0ZShzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2ssIDApOworCXJldHVybjsKK30KKworaW50IHN0bW1hY19vcGVuX2V4dF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bSkKK3sKKwlzdG1tYWNfdGFzay5wcml2YXRlX2RhdGEgPSBkZXY7CisJc3RtbWFjX3Rhc2suZnVuYyA9IHN0bW1hY190aW1lcl9oYW5kbGVyOworCisJc3RtbWFjX3J0YyA9IHJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOworCWlmIChzdG1tYWNfcnRjID09IE5VTEwpIHsKKwkJcHJfZXJyKCJvcGVuIHJ0YyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcnRjX2lycV9yZWdpc3RlcihzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2spOworCisJLyogUGVyaW9kaWMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKChydGNfaXJxX3NldF9mcmVxKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgdG0tPmZyZXEpIDwgMCkpIHsKKwkJcHJfZXJyKCJzZXQgcGVyaW9kaWMgZmFpbGVkXG4iKTsKKwkJcnRjX2lycV91bnJlZ2lzdGVyKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzayk7CisJCXJ0Y19jbGFzc19jbG9zZShzdG1tYWNfcnRjKTsKKwkJcmV0dXJuIC0xOworCX0KKworCVNUTU1BQ19USU1FUl9NU0coQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSwgdG0tPmZyZXEpOworCisJdG0tPnRpbWVyX3N0YXJ0ID0gc3RtbWFjX3J0Y19zdGFydDsKKwl0bS0+dGltZXJfc3RvcCA9IHN0bW1hY19ydGNfc3RvcDsKKworCXJldHVybiAwOworfQorCitpbnQgc3RtbWFjX2Nsb3NlX2V4dF90aW1lcih2b2lkKQoreworCXJ0Y19pcnFfc2V0X3N0YXRlKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgMCk7CisJcnRjX2lycV91bnJlZ2lzdGVyKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzayk7CisJcnRjX2NsYXNzX2Nsb3NlKHN0bW1hY19ydGMpOworCXJldHVybiAwOworfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TVE1NQUNfVE1VX1RJTUVSKQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2RlZmluZSBUTVVfQ0hBTk5FTCAidG11Ml9jbGsiCitzdGF0aWMgc3RydWN0IGNsayAqdGltZXJfY2xvY2s7CisKK3N0YXRpYyB2b2lkIHN0bW1hY190bXVfc3RhcnQodW5zaWduZWQgaW50IG5ld19mcmVxKQoreworCWNsa19zZXRfcmF0ZSh0aW1lcl9jbG9jaywgbmV3X2ZyZXEpOworCWNsa19lbmFibGUodGltZXJfY2xvY2spOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX3RtdV9zdG9wKHZvaWQpCit7CisJY2xrX2Rpc2FibGUodGltZXJfY2xvY2spOworCXJldHVybjsKK30KKworaW50IHN0bW1hY19vcGVuX2V4dF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bSkKK3sKKwl0aW1lcl9jbG9jayA9IGNsa19nZXQoTlVMTCwgVE1VX0NIQU5ORUwpOworCisJaWYgKHRpbWVyX2Nsb2NrID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmICh0bXUyX3JlZ2lzdGVyX3VzZXIoc3RtbWFjX3RpbWVyX2hhbmRsZXIsICh2b2lkICopZGV2KSA8IDApIHsKKwkJdGltZXJfY2xvY2sgPSBOVUxMOworCQlyZXR1cm4gLTE7CisJfQorCisJU1RNTUFDX1RJTUVSX01TRygiVE1VMiIsIHRtLT5mcmVxKTsKKwl0bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfdG11X3N0YXJ0OworCXRtLT50aW1lcl9zdG9wID0gc3RtbWFjX3RtdV9zdG9wOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdG1tYWNfY2xvc2VfZXh0X3RpbWVyKHZvaWQpCit7CisJY2xrX2Rpc2FibGUodGltZXJfY2xvY2spOworCXRtdTJfdW5yZWdpc3Rlcl91c2VyKCk7CisJY2xrX3B1dCh0aW1lcl9jbG9jayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODYzNTkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBleHRlcm5hbCB0aW1lciBIZWFkZXIgRmlsZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHN0bW1hY190aW1lciB7CisJdm9pZCAoKnRpbWVyX3N0YXJ0KSAodW5zaWduZWQgaW50IG5ld19mcmVxKTsKKwl2b2lkICgqdGltZXJfc3RvcCkgKHZvaWQpOworCXVuc2lnbmVkIGludCBmcmVxOworCXVuc2lnbmVkIGludCBlbmFibGU7Cit9OworCisvKiBPcGVuIHRoZSBIVyB0aW1lciBkZXZpY2UgYW5kIHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcyAqLworaW50IHN0bW1hY19vcGVuX2V4dF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bSk7CisvKiBTdG9wIHRoZSB0aW1lciBhbmQgcmVsZWFzZSBpdCAqLworaW50IHN0bW1hY19jbG9zZV9leHRfdGltZXIodm9pZCk7CisvKiBGdW5jdGlvbiB1c2VkIGZvciBzY2hlZHVsaW5nIHRhc2sgd2l0aGluIHRoZSBzdG1tYWMgKi8KK3ZvaWQgc3RtbWFjX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjaWYgZGVmaW5lZChDT05GSUdfU1RNTUFDX1RNVV9USU1FUikKK2V4dGVybiBpbnQgdG11Ml9yZWdpc3Rlcl91c2VyKHZvaWQgKmZudCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCB0bXUyX3VucmVnaXN0ZXJfdXNlcih2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCA3MDE5YTBkLi42MTY0MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMjA2Myw3ICsyMDYzLDE1IEBACiAJCW1pZl9jZmcgJj0gfk1JRl9DRkdfUFNFTEVDVDsKIAkJd3JpdGVsKG1pZl9jZmcsIGdwLT5yZWdzICsgTUlGX0NGRyk7CiAJfSBlbHNlIHsKLQkJZ3AtPnBoeV90eXBlID0gcGh5X3NlcmlhbGluazsKKyNpZmRlZiBDT05GSUdfU1BBUkMKKwkJY29uc3QgY2hhciAqcDsKKworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGdwLT5vZl9ub2RlLCAic2hhcmVkLXBpbnMiLCBOVUxMKTsKKwkJaWYgKHAgJiYgIXN0cmNtcChwLCAic2VyZGVzIikpCisJCQlncC0+cGh5X3R5cGUgPSBwaHlfc2VyZGVzOworCQllbHNlCisjZW5kaWYKKwkJCWdwLT5waHlfdHlwZSA9IHBoeV9zZXJpYWxpbms7CiAJfQogCWlmIChncC0+cGh5X3R5cGUgPT0gcGh5X21paV9tZGlvMSB8fAogCSAgICBncC0+cGh5X3R5cGUgPT0gcGh5X21paV9tZGlvMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCAzNmNiMjQyLi43NWZhMzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMTE0NCw5ICsxMTQ0LDE2IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAkJCWNoYXIgKipwcnBoYXNlID0gcHJpbnRwaGFzZTsKIAkJCWNoYXIgKipwcmVycm9yID0gcHJpbnRlcnJvcjsKKwkJCWludCBwbnIgPSBlcnIgLyAxNiAtIDE7CisJCQlpbnQgZW5yID0gZXJyICUgMTYgLSAxOwogCQkJRFBSSU5USygiVFIgQWRhcHRlciBtaXNjIG9wZW4gZmFpbHVyZSwgZXJyb3IgY29kZSA9ICIpOwotCQkJcHJpbnRrKCIweCV4LCBQaGFzZTogJXMsIEVycm9yOiAlc1xuIiwKLQkJCQllcnIsIHBycGhhc2VbZXJyLzE2IC0xXSwgcHJlcnJvcltlcnIlMTYgLTFdKTsKKwkJCWlmIChwbnIgPCAwIHx8IHBuciA+PSBBUlJBWV9TSVpFKHByaW50cGhhc2UpIHx8CisJCQkJCWVuciA8IDAgfHwKKwkJCQkJZW5yID49IEFSUkFZX1NJWkUocHJpbnRlcnJvcikpCisJCQkJcHJpbnRrKCIweCV4LCBpbnZhbGlkIFBoYXNlL0Vycm9yLiIsIGVycik7CisJCQllbHNlCisJCQkJcHJpbnRrKCIweCV4LCBQaGFzZTogJXMsIEVycm9yOiAlc1xuIiwgZXJyLAorCQkJCQkJcHJwaGFzZVtwbnJdLCBwcmVycm9yW2Vucl0pOwogCQkJcHJpbnRrKCIgcmV0cnlpbmcgYWZ0ZXIgJWRzIGRlbGF5Li4uXG4iLAogCQkJCQlUUl9SRVRSWV9JTlRFUlZBTC9IWik7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwppbmRleCBjNDcyMzdjLi4zMmQ5MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJICAgICogRXJpY3Nzb24gTW9iaWxlIEJyb2FkYmFuZCBNb2R1bGUgKGFsbCB2YXJpYW50cykKICAJICAgICogTW90b3JvbGEgKERNMTAwIGFuZCBTQjQxMDApCiAgCSAgICAqIEJyb2FkY29tIENhYmxlIE1vZGVtIChyZWZlcmVuY2UgZGVzaWduKQotCSAgICAqIFRvc2hpYmEgKFBDWDExMDBVIGFuZCBGMzUwN2cpCisJICAgICogVG9zaGliYSAoUENYMTEwMFUgYW5kIEYzNTA3Zy9GMzYwN2d3KQogCSAgICAqIC4uLgogCiAJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCAiZXRoWCIsIHdoZXJlIFggZGVwZW5kcyBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDRhNmFmZjUuLjIxZTFiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTU0NCwyMCArNTQ0LDYwIEBACiAJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKIH0sIHsKLQkvKiBFcmljc3NvbiBGMzMwNyAqLworCS8qIEVyaWNzc29uIEYzNjA3Z3cgdmVyIDIgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIDB4MTkwNSwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBFcmljc3NvbiBGMzYwN2d3IHZlciAzICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwYmRiLCAweDE5MDYsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCiB9LCB7CisJLyogRXJpY3Nzb24gRjMzMDcgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIDB4MTkwYSwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBFcmljc3NvbiBGMzMwNyB2ZXIgMiAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGJkYiwgMHgxOTA5LCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLAorfSwgeworCS8qIEVyaWNzc29uIEMzNjA3dyAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGJkYiwgMHgxMDQ5LCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfTURMTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLAorfSwgewogCS8qIFRvc2hpYmEgRjM1MDdnICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMGIsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCiB9LCB7CisJLyogVG9zaGliYSBGMzYwN2d3ICovCisJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMGMsIFVTQl9DTEFTU19DT01NLAorCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCit9LCB7CisJLyogVG9zaGliYSBGMzYwN2d3IHZlciAyICovCisJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwOTMwLCAweDEzMTEsIFVTQl9DTEFTU19DT01NLAorCQkJVVNCX0NEQ19TVUJDTEFTU19NRExNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmY2RjX2luZm8sCit9LCB7CiAJLyogRGVsbCBGMzUwN2cgKi8KIAlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE0NywgVVNCX0NMQVNTX0NPTU0sCiAJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBEZWxsIEYzNjA3Z3cgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE4MywgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sIHsKKwkvKiBEZWxsIEYzNjA3Z3cgdmVyIDIgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODE4NCwgVVNCX0NMQVNTX0NPTU0sCisJCQlVU0JfQ0RDX1NVQkNMQVNTX01ETE0sIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDcyNDcwZjcuLmEyYjMwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTY0OSw2ICs2NDksMTAgQEAKIAlVU0JfREVWSUNFKDB4MGZlNiwgMHg4MTAxKSwJLyogRE05NjAxIFVTQiB0byBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgKi8KIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCisJeworCSBVU0JfREVWSUNFKDB4MGE0NiwgMHg5MDAwKSwJLyogRE05MDAwRSAqLworCSAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCisJIH0sCiAJe30sCQkJLy8gRU5ECiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZmE0ZTU4MS4uNDNiYzNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMzc4LDcgKzM3OCw3IEBACiB9CiAKICNkZWZpbmUgRFVNUChidWZfLCBsZW5fKQlcCi0JZGJnX2R1bXAoX19MSU5FX18sIF9fZnVuY19fLCBidWZfLCBsZW5fKQorCWRiZ19kdW1wKF9fTElORV9fLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGNoYXIgKilidWZfLCBsZW5fKQogCiAjZGVmaW5lIERVTVAxKGJ1Zl8sIGxlbl8pCQkJXAogCWRvIHsJCQkJCVwKQEAgLTEzNjMsNyArMTM2Myw3IEBACiAJLyogcmVzZXQgdGhlIHJ0cyBhbmQgZHRyICovCiAJLyogZG8gdGhlIGFjdHVhbCBjbG9zZSAqLwogCXNlcmlhbC0+b3Blbl9jb3VudC0tOwotCWtyZWZfcHV0KCZzZXJpYWwtPnBhcmVudC0+cmVmLCBoc29fc2VyaWFsX3JlZl9mcmVlKTsKKwogCWlmIChzZXJpYWwtPm9wZW5fY291bnQgPD0gMCkgewogCQlzZXJpYWwtPm9wZW5fY291bnQgPSAwOwogCQlzcGluX2xvY2tfaXJxKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKQEAgLTEzODMsNiArMTM4Myw4IEBACiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPnBhcmVudC0+aW50ZXJmYWNlKTsKIAogCW11dGV4X3VubG9jaygmc2VyaWFsLT5wYXJlbnQtPm11dGV4KTsKKworCWtyZWZfcHV0KCZzZXJpYWwtPnBhcmVudC0+cmVmLCBoc29fc2VyaWFsX3JlZl9mcmVlKTsKIH0KIAogLyogY2xvc2UgdGhlIHJlcXVlc3RlZCBzZXJpYWwgcG9ydCAqLwpAQCAtMTUyNyw3ICsxNTI5LDcgQEAKIAkJZGV2X3dhcm4oJnVzYi0+ZGV2LAogCQkJICJoc28gcmVjZWl2ZWQgaW52YWxpZCBzZXJpYWwgc3RhdGUgbm90aWZpY2F0aW9uXG4iKTsKIAkJRFVNUChzZXJpYWxfc3RhdGVfbm90aWZpY2F0aW9uLAotCQkgICAgIHNpemVvZihoc29fc2VyaWFsX3N0YXRlX25vdGlmYXRpb24pKQorCQkgICAgIHNpemVvZihzdHJ1Y3QgaHNvX3NlcmlhbF9zdGF0ZV9ub3RpZmljYXRpb24pKTsKIAl9IGVsc2UgewogCiAJCVVBUlRfc3RhdGVfYml0bWFwID0gbGUxNl90b19jcHUoc2VyaWFsX3N0YXRlX25vdGlmaWNhdGlvbi0+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwppbmRleCA2ZmRhYmE4Li5lZDRhNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTYyLDggKzYyLDExIEBACiBzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IHVzYl9kZXZfaWRbXSA9IHsKICNkZWZpbmUJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykJXAogCXsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSwKKyNkZWZpbmUgUEVHQVNVU19ERVZfQ0xBU1MocG4sIHZpZCwgcGlkLCBkY2xhc3MsIGZsYWdzKSBcCisJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykKICNpbmNsdWRlICJwZWdhc3VzLmgiCiAjdW5kZWYJUEVHQVNVU19ERVYKKyN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwogCXtOVUxMLCAwLCAwLCAwfSwKIAl7TlVMTCwgMCwgMCwgMH0KIH07CkBAIC03MSw4ICs3NCwxOCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBlZ2FzdXNfaWRzW10gPSB7CiAjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpIFwKIAl7Lm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIC5pZFZlbmRvciA9IHZpZCwgLmlkUHJvZHVjdCA9IHBpZH0sCisvKgorICogVGhlIEJlbGtpbiBGOFQwMTJ4eDEgYmx1ZXRvb3RoIGFkYXB0b3IgaGFzIHRoZSBzYW1lIHZlbmRvciBhbmQgcHJvZHVjdAorICogSURzIGFzIHRoZSBCZWxraW4gRjVENTA1MCwgc28gd2UgbmVlZCB0byB0ZWFjaCB0aGUgcGVnYXN1cyBkcml2ZXIgdG8KKyAqIGlnbm9yZSBhZGFwdG9ycyBiZWxvbmdpbmcgdG8gdGhlICJXaXJlbGVzcyIgY2xhc3MgMHhFMC4gRm9yIHRoaXMgb25lCisgKiBjYXNlIGFueXdheSwgc2VlaW5nIGFzIHRoZSBwZWdhc3VzIGlzIGZvciAiV2lyZWQiIGFkYXB0b3JzLgorICovCisjZGVmaW5lIFBFR0FTVVNfREVWX0NMQVNTKHBuLCB2aWQsIHBpZCwgZGNsYXNzLCBmbGFncykgXAorCXsubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyksIFwKKwkuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWQsIC5iRGV2aWNlQ2xhc3MgPSBkY2xhc3N9LAogI2luY2x1ZGUgInBlZ2FzdXMuaCIKICN1bmRlZglQRUdBU1VTX0RFVgorI3VuZGVmCVBFR0FTVVNfREVWX0NMQVNTCiAJe30sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAppbmRleCBmOTY4YzgzLi41ZDAyZjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKQEAgLTIwMiw3ICsyMDIsMTEgQEAKIAkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIkFsbGllZCBUZWxlc3luIEludC4gQVQtVVNCMTAwIiwgVkVORE9SX0FMTElFRFRFTCwgMHhiMTAwLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKLVBFR0FTVVNfREVWKCAiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLAorLyoKKyAqIERpc3Rpbmd1aXNoIGJldHdlZW4gdGhpcyBCZWxraW4gYWRhcHRvciBhbmQgdGhlIEJlbGtpbiBibHVldG9vdGggYWRhcHRvcnMKKyAqIHdpdGggdGhlIHNhbWUgcHJvZHVjdCBJRHMgYnkgY2hlY2tpbmcgdGhlIGRldmljZSBjbGFzcyB0b28uCisgKi8KK1BFR0FTVVNfREVWX0NMQVNTKCAiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLCAweDAwLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKIFBFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0ItMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4NiwKIAkJREVGQVVMVF9HUElPX1JFU0VUICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IDBjYWE4MDAuLmY1NmRlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMzYyLDEyICszNjIsMTIgQEAKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIGhhbHRfZmFpbF9hbmRfcmVsZWFzZTsKIAkJfQotCQlkZXYtPmhhcmRfbXR1ID0gdG1wOwotCQluZXQtPm10dSA9IGRldi0+aGFyZF9tdHUgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKIAkJZGV2X3dhcm4oJmludGYtPmRldiwKIAkJCSAiZGV2IGNhbid0IHRha2UgJXUgYnl0ZSBwYWNrZXRzIChtYXggJXUpLCAiCiAJCQkgImFkanVzdGluZyBNVFUgdG8gJXVcbiIsCi0JCQkgZGV2LT5oYXJkX210dSwgdG1wLCBuZXQtPm10dSk7CisJCQkgZGV2LT5oYXJkX210dSwgdG1wLCB0bXAgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbik7CisJCWRldi0+aGFyZF9tdHUgPSB0bXA7CisJCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCX0KIAogCS8qIFJFVklTSVQ6ICBwZXJpcGhlcmFsICJhbGlnbm1lbnQiIHJlcXVlc3QgaXMgaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCBhZGU1YjM0Li41MmFmNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC0yMTAsMzIgKzIxMCwyOSBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp2ZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9zdGF0czsKIAlpbnQgY3B1OwotCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHM7CisJc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0cywgdG90YWwgPSB7MH07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlkZXZfc3RhdHMgPSAmZGV2LT5zdGF0czsKIAotCWRldl9zdGF0cy0+cnhfcGFja2V0cyA9IDA7Ci0JZGV2X3N0YXRzLT50eF9wYWNrZXRzID0gMDsKLQlkZXZfc3RhdHMtPnJ4X2J5dGVzID0gMDsKLQlkZXZfc3RhdHMtPnR4X2J5dGVzID0gMDsKLQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwotCWRldl9zdGF0cy0+cnhfZHJvcHBlZCA9IDA7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKIAotCQlkZXZfc3RhdHMtPnJ4X3BhY2tldHMgKz0gc3RhdHMtPnJ4X3BhY2tldHM7Ci0JCWRldl9zdGF0cy0+dHhfcGFja2V0cyArPSBzdGF0cy0+dHhfcGFja2V0czsKLQkJZGV2X3N0YXRzLT5yeF9ieXRlcyArPSBzdGF0cy0+cnhfYnl0ZXM7Ci0JCWRldl9zdGF0cy0+dHhfYnl0ZXMgKz0gc3RhdHMtPnR4X2J5dGVzOwotCQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7Ci0JCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPSBzdGF0cy0+cnhfZHJvcHBlZDsKKwkJdG90YWwucnhfcGFja2V0cyArPSBzdGF0cy0+cnhfcGFja2V0czsKKwkJdG90YWwudHhfcGFja2V0cyArPSBzdGF0cy0+dHhfcGFja2V0czsKKwkJdG90YWwucnhfYnl0ZXMgICArPSBzdGF0cy0+cnhfYnl0ZXM7CisJCXRvdGFsLnR4X2J5dGVzICAgKz0gc3RhdHMtPnR4X2J5dGVzOworCQl0b3RhbC50eF9kcm9wcGVkICs9IHN0YXRzLT50eF9kcm9wcGVkOworCQl0b3RhbC5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSB0b3RhbC5yeF9wYWNrZXRzOworCWRldi0+c3RhdHMudHhfcGFja2V0cyA9IHRvdGFsLnR4X3BhY2tldHM7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyAgID0gdG90YWwucnhfYnl0ZXM7CisJZGV2LT5zdGF0cy50eF9ieXRlcyAgID0gdG90YWwudHhfYnl0ZXM7CisJZGV2LT5zdGF0cy50eF9kcm9wcGVkID0gdG90YWwudHhfZHJvcHBlZDsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgPSB0b3RhbC5yeF9kcm9wcGVkOwogCi0JcmV0dXJuIGRldl9zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyBpbnQgdmV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOGQwMDk3Ni4uYjllMDAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtNDU0LDcgKzQ1Myw3IEBACiAJCXZpLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl2aS0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCXRvdF9zZ3MgKz0gc2tiX3ZuZXRfaGRyKHNrYiktPm51bV9zZzsKLQkJa2ZyZWVfc2tiKHNrYik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQogCXJldHVybiB0b3Rfc2dzOwogfQpAQCAtNTE3LDggKzUxNiw3IEBACiAJLyogRnJlZSB1cCBhbnkgcGVuZGluZyBvbGQgYnVmZmVycyBiZWZvcmUgcXVldWVpbmcgbmV3IG9uZXMuICovCiAJZnJlZV9vbGRfeG1pdF9za2JzKHZpKTsKIAotCS8qIFB1dCBuZXcgb25lIGluIHNlbmQgcXVldWUgYW5kIGRvIHRyYW5zbWl0ICovCi0JX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7CisJLyogVHJ5IHRvIHRyYW5zbWl0ICovCiAJY2FwYWNpdHkgPSB4bWl0X3NrYih2aSwgc2tiKTsKIAogCS8qIFRoaXMgY2FuIGhhcHBlbiB3aXRoIE9PTSBhbmQgaW5kaXJlY3QgYnVmZmVycy4gKi8KQEAgLTUzMiw4ICs1MzAsMTcgQEAKIAkJfQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCiAJdmktPnN2cS0+dnFfb3BzLT5raWNrKHZpLT5zdnEpOworCisJLyoKKwkgKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlLiAgWW91J2QgZXhwZWN0IHdlJ2QgbmVlZCB0aGlzIGJlZm9yZQorCSAqIHhtaXRfc2tiIGNhbGxzIGFkZF9idWYoKSwgc2luY2UgdGhlIGNhbGxiYWNrIGNhbiBiZSB0cmlnZ2VyZWQKKwkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGF0LiAgQnV0IHNpbmNlIHRoZSBjYWxsYmFjayBqdXN0IHRyaWdnZXJzCisJICogYW5vdGhlciBjYWxsIGJhY2sgaGVyZSwgbm9ybWFsIG5ldHdvcmsgeG1pdCBsb2NraW5nIHByZXZlbnRzIHRoZQorCSAqIHJhY2UuCisJICovCisJX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7CisKIAkvKiBEb24ndCB3YWl0IHVwIGZvciB0cmFuc21pdHRlZCBza2JzIHRvIGJlIGZyZWVkLiAqLwogCXNrYl9vcnBoYW4oc2tiKTsKIAluZl9yZXNldChza2IpOwpAQCAtOTkxLDcgKzk5OCw3IEBACiAJVklSVElPX05FVF9GX0NUUkxfUlgsIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4sCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX25ldCA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fbmV0X2RyaXZlciA9IHsKIAkuZmVhdHVyZV90YWJsZSA9IGZlYXR1cmVzLAogCS5mZWF0dXJlX3RhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGZlYXR1cmVzKSwKIAkuZHJpdmVyLm5hbWUgPQlLQlVJTERfTU9ETkFNRSwKQEAgLTEwMDQsMTIgKzEwMTEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fbmV0KTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmlydGlvX2RyaXZlcigmdmlydGlvX25ldF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXVucmVnaXN0ZXJfdmlydGlvX2RyaXZlcigmdmlydGlvX25ldCk7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fbmV0X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwZjUwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvTWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyMgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyMgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorIyB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorIworIyBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorIworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBNYWtlZmlsZSBmb3IgdGhlIFZNd2FyZSB2bXhuZXQzIGV0aGVybmV0IE5JQyBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX1ZNWE5FVDMpICs9IHZteG5ldDMubworCit2bXhuZXQzLW9ianMgOj0gdm14bmV0M19kcnYubyB2bXhuZXQzX2V0aHRvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My91cHQxX2RlZnMuaCBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdXB0MV9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMDhmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdXB0MV9kZWZzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVVBUMV9ERUZTX0gKKyNkZWZpbmUgX1VQVDFfREVGU19ICisKK3N0cnVjdCBVUFQxX1R4U3RhdHMgeworCXU2NAkJCVRTT1BrdHNUeE9LOyAgLyogVFNPIHBrdHMgcG9zdC1zZWdtZW50YXRpb24gKi8KKwl1NjQJCQlUU09CeXRlc1R4T0s7CisJdTY0CQkJdWNhc3RQa3RzVHhPSzsKKwl1NjQJCQl1Y2FzdEJ5dGVzVHhPSzsKKwl1NjQJCQltY2FzdFBrdHNUeE9LOworCXU2NAkJCW1jYXN0Qnl0ZXNUeE9LOworCXU2NAkJCWJjYXN0UGt0c1R4T0s7CisJdTY0CQkJYmNhc3RCeXRlc1R4T0s7CisJdTY0CQkJcGt0c1R4RXJyb3I7CisJdTY0CQkJcGt0c1R4RGlzY2FyZDsKK307CisKK3N0cnVjdCBVUFQxX1J4U3RhdHMgeworCXU2NAkJCUxST1BrdHNSeE9LOyAgICAvKiBMUk8gcGt0cyAqLworCXU2NAkJCUxST0J5dGVzUnhPSzsgICAvKiBieXRlcyBmcm9tIExSTyBwa3RzICovCisJLyogdGhlIGZvbGxvd2luZyBjb3VudGVycyBhcmUgZm9yIHBrdHMgZnJvbSB0aGUgd2lyZSwgaS5lLiwgcHJlLUxSTyAqLworCXU2NAkJCXVjYXN0UGt0c1J4T0s7CisJdTY0CQkJdWNhc3RCeXRlc1J4T0s7CisJdTY0CQkJbWNhc3RQa3RzUnhPSzsKKwl1NjQJCQltY2FzdEJ5dGVzUnhPSzsKKwl1NjQJCQliY2FzdFBrdHNSeE9LOworCXU2NAkJCWJjYXN0Qnl0ZXNSeE9LOworCXU2NAkJCXBrdHNSeE91dE9mQnVmOworCXU2NAkJCXBrdHNSeEVycm9yOworfTsKKworLyogaW50ZXJydXB0IG1vZGVyYXRpb24gbGV2ZWwgKi8KK2VudW0geworCVVQVDFfSU1MX05PTkUJCT0gMCwgLyogbm8gaW50ZXJydXB0IG1vZGVyYXRpb24gKi8KKwlVUFQxX0lNTF9ISUdIRVNUCT0gNywgLyogbGVhc3QgaW50ciBnZW5lcmF0ZWQgKi8KKwlVUFQxX0lNTF9BREFQVElWRQk9IDgsIC8qIGFkcGF0aXZlIGludHIgbW9kZXJhdGlvbiAqLworfTsKKy8qIHZhbHVlcyBmb3IgVVBUMV9SU1NDb25mLmhhc2hGdW5jICovCitlbnVtIHsKKwlVUFQxX1JTU19IQVNIX1RZUEVfTk9ORSAgICAgID0gMHgwLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9JUFY0ICAgICAgPSAweDAxLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNCAgPSAweDAyLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9JUFY2ICAgICAgPSAweDA0LAorCVVQVDFfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNiAgPSAweDA4LAorfTsKKworZW51bSB7CisJVVBUMV9SU1NfSEFTSF9GVU5DX05PTkUgICAgICA9IDB4MCwKKwlVUFQxX1JTU19IQVNIX0ZVTkNfVE9FUExJVFogID0gMHgwMSwKK307CisKKyNkZWZpbmUgVVBUMV9SU1NfTUFYX0tFWV9TSVpFICAgICAgICA0MAorI2RlZmluZSBVUFQxX1JTU19NQVhfSU5EX1RBQkxFX1NJWkUgIDEyOAorCitzdHJ1Y3QgVVBUMV9SU1NDb25mIHsKKwl1MTYJCQloYXNoVHlwZTsKKwl1MTYJCQloYXNoRnVuYzsKKwl1MTYJCQloYXNoS2V5U2l6ZTsKKwl1MTYJCQlpbmRUYWJsZVNpemU7CisJdTgJCQloYXNoS2V5W1VQVDFfUlNTX01BWF9LRVlfU0laRV07CisJdTgJCQlpbmRUYWJsZVtVUFQxX1JTU19NQVhfSU5EX1RBQkxFX1NJWkVdOworfTsKKworLyogZmVhdHVyZXMgKi8KK2VudW0geworCVVQVDFfRl9SWENTVU0JCT0gMHgwMDAxLCAgIC8qIHJ4IGNzdW0gdmVyaWZpY2F0aW9uICovCisJVVBUMV9GX1JTUwkJPSAweDAwMDIsCisJVVBUMV9GX1JYVkxBTgkJPSAweDAwMDQsICAgLyogVkxBTiB0YWcgc3RyaXBwaW5nICovCisJVVBUMV9GX0xSTwkJPSAweDAwMDgsCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzhlZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaApAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVk1YTkVUM19ERUZTX0hfCisjZGVmaW5lIF9WTVhORVQzX0RFRlNfSF8KKworI2luY2x1ZGUgInVwdDFfZGVmcy5oIgorCisvKiBhbGwgcmVnaXN0ZXJzIGFyZSAzMiBiaXQgd2lkZSAqLworLyogQkFSIDEgKi8KK2VudW0geworCVZNWE5FVDNfUkVHX1ZSUlMJPSAweDAsCS8qIFZteG5ldDMgUmV2aXNpb24gUmVwb3J0IFNlbGVjdGlvbiAqLworCVZNWE5FVDNfUkVHX1VWUlMJPSAweDgsCS8qIFVQVCBWZXJzaW9uIFJlcG9ydCBTZWxlY3Rpb24gKi8KKwlWTVhORVQzX1JFR19EU0FMCT0gMHgxMCwJLyogRHJpdmVyIFNoYXJlZCBBZGRyZXNzIExvdyAqLworCVZNWE5FVDNfUkVHX0RTQUgJPSAweDE4LAkvKiBEcml2ZXIgU2hhcmVkIEFkZHJlc3MgSGlnaCAqLworCVZNWE5FVDNfUkVHX0NNRAkJPSAweDIwLAkvKiBDb21tYW5kICovCisJVk1YTkVUM19SRUdfTUFDTAk9IDB4MjgsCS8qIE1BQyBBZGRyZXNzIExvdyAqLworCVZNWE5FVDNfUkVHX01BQ0gJPSAweDMwLAkvKiBNQUMgQWRkcmVzcyBIaWdoICovCisJVk1YTkVUM19SRUdfSUNSCQk9IDB4MzgsCS8qIEludGVycnVwdCBDYXVzZSBSZWdpc3RlciAqLworCVZNWE5FVDNfUkVHX0VDUgkJPSAweDQwCS8qIEV2ZW50IENhdXNlIFJlZ2lzdGVyICovCit9OworCisvKiBCQVIgMCAqLworZW51bSB7CisJVk1YTkVUM19SRUdfSU1SCQk9IDB4MCwJIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisJVk1YTkVUM19SRUdfVFhQUk9ECT0gMHg2MDAsIC8qIFR4IFByb2R1Y2VyIEluZGV4ICovCisJVk1YTkVUM19SRUdfUlhQUk9ECT0gMHg4MDAsIC8qIFJ4IFByb2R1Y2VyIEluZGV4IGZvciByaW5nIDEgKi8KKwlWTVhORVQzX1JFR19SWFBST0QyCT0gMHhBMDAJIC8qIFJ4IFByb2R1Y2VyIEluZGV4IGZvciByaW5nIDIgKi8KK307CisKKyNkZWZpbmUgVk1YTkVUM19QVF9SRUdfU0laRSAgICAgNDA5NgkvKiBCQVIgMCAqLworI2RlZmluZSBWTVhORVQzX1ZEX1JFR19TSVpFICAgICA0MDk2CS8qIEJBUiAxICovCisKKyNkZWZpbmUgVk1YTkVUM19SRUdfQUxJR04gICAgICAgOAkvKiBBbGwgcmVnaXN0ZXJzIGFyZSA4LWJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgVk1YTkVUM19SRUdfQUxJR05fTUFTSyAgMHg3CisKKy8qIEkvTyBNYXBwZWQgYWNjZXNzIHRvIHJlZ2lzdGVycyAqLworI2RlZmluZSBWTVhORVQzX0lPX1RZUEVfUFQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVk1YTkVUM19JT19UWVBFX1ZEICAgICAgICAgICAgICAxCisjZGVmaW5lIFZNWE5FVDNfSU9fQUREUih0eXBlLCByZWcpICAgICAgKCgodHlwZSkgPDwgMjQpIHwgKChyZWcpICYgMHhGRkZGRkYpKQorI2RlZmluZSBWTVhORVQzX0lPX1RZUEUoYWRkcikgICAgICAgICAgICgoYWRkcikgPj4gMjQpCisjZGVmaW5lIFZNWE5FVDNfSU9fUkVHKGFkZHIpICAgICAgICAgICAgKChhZGRyKSAmIDB4RkZGRkZGKQorCitlbnVtIHsKKwlWTVhORVQzX0NNRF9GSVJTVF9TRVQgPSAweENBRkUwMDAwLAorCVZNWE5FVDNfQ01EX0FDVElWQVRFX0RFViA9IFZNWE5FVDNfQ01EX0ZJUlNUX1NFVCwKKwlWTVhORVQzX0NNRF9RVUlFU0NFX0RFViwKKwlWTVhORVQzX0NNRF9SRVNFVF9ERVYsCisJVk1YTkVUM19DTURfVVBEQVRFX1JYX01PREUsCisJVk1YTkVUM19DTURfVVBEQVRFX01BQ19GSUxURVJTLAorCVZNWE5FVDNfQ01EX1VQREFURV9WTEFOX0ZJTFRFUlMsCisJVk1YTkVUM19DTURfVVBEQVRFX1JTU0lEVCwKKwlWTVhORVQzX0NNRF9VUERBVEVfSU1MLAorCVZNWE5FVDNfQ01EX1VQREFURV9QTUNGRywKKwlWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSwKKwlWTVhORVQzX0NNRF9MT0FEX1BMVUdJTiwKKworCVZNWE5FVDNfQ01EX0ZJUlNUX0dFVCA9IDB4RjAwRDAwMDAsCisJVk1YTkVUM19DTURfR0VUX1FVRVVFX1NUQVRVUyA9IFZNWE5FVDNfQ01EX0ZJUlNUX0dFVCwKKwlWTVhORVQzX0NNRF9HRVRfU1RBVFMsCisJVk1YTkVUM19DTURfR0VUX0xJTkssCisJVk1YTkVUM19DTURfR0VUX1BFUk1fTUFDX0xPLAorCVZNWE5FVDNfQ01EX0dFVF9QRVJNX01BQ19ISSwKKwlWTVhORVQzX0NNRF9HRVRfRElEX0xPLAorCVZNWE5FVDNfQ01EX0dFVF9ESURfSEksCisJVk1YTkVUM19DTURfR0VUX0RFVl9FWFRSQV9JTkZPLAorCVZNWE5FVDNfQ01EX0dFVF9DT05GX0lOVFIKK307CisKK3N0cnVjdCBWbXhuZXQzX1R4RGVzYyB7CisJdTY0CQlhZGRyOworCisJdTMyCQlsZW46MTQ7CisJdTMyCQlnZW46MTsgICAgICAvKiBnZW5lcmF0aW9uIGJpdCAqLworCXUzMgkJcnN2ZDoxOworCXUzMgkJZHR5cGU6MTsgICAgLyogZGVzY3JpcHRvciB0eXBlICovCisJdTMyCQlleHQxOjE7CisJdTMyCQltc3Njb2Y6MTQ7ICAvKiBNU1MsIGNoZWNrc3VtIG9mZnNldCwgZmxhZ3MgKi8KKworCXUzMgkJaGxlbjoxMDsgICAgLyogaGVhZGVyIGxlbiAqLworCXUzMgkJb206MjsgICAgICAgLyogb2ZmbG9hZCBtb2RlICovCisJdTMyCQllb3A6MTsgICAgICAvKiBFbmQgT2YgUGFja2V0ICovCisJdTMyCQljcToxOyAgICAgICAvKiBjb21wbGV0aW9uIHJlcXVlc3QgKi8KKwl1MzIJCWV4dDI6MTsKKwl1MzIJCXRpOjE7ICAgICAgIC8qIFZMQU4gVGFnIEluc2VydGlvbiAqLworCXUzMgkJdGNpOjE2OyAgICAgLyogVGFnIHRvIEluc2VydCAqLworfTsKKworLyogVHhEZXNjLk9NIHZhbHVlcyAqLworI2RlZmluZSBWTVhORVQzX09NX05PTkUJCTAKKyNkZWZpbmUgVk1YTkVUM19PTV9DU1VNCQkyCisjZGVmaW5lIFZNWE5FVDNfT01fVFNPCQkzCisKKy8qIGZpZWxkcyBpbiBUeERlc2Mgd2UgYWNjZXNzIHcvbyB1c2luZyBiaXQgZmllbGRzICovCisjZGVmaW5lIFZNWE5FVDNfVFhEX0VPUF9TSElGVAkxMgorI2RlZmluZSBWTVhORVQzX1RYRF9DUV9TSElGVAkxMworI2RlZmluZSBWTVhORVQzX1RYRF9HRU5fU0hJRlQJMTQKKworI2RlZmluZSBWTVhORVQzX1RYRF9DUQkJKDEgPDwgVk1YTkVUM19UWERfQ1FfU0hJRlQpCisjZGVmaW5lIFZNWE5FVDNfVFhEX0VPUAkJKDEgPDwgVk1YTkVUM19UWERfRU9QX1NISUZUKQorI2RlZmluZSBWTVhORVQzX1RYRF9HRU4JCSgxIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVCkKKworI2RlZmluZSBWTVhORVQzX0hEUl9DT1BZX1NJWkUgICAxMjgKKworCitzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjIHsKKwl1OAkJZGF0YVtWTVhORVQzX0hEUl9DT1BZX1NJWkVdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeENvbXBEZXNjIHsKKwl1MzIJCXR4ZElkeDoxMjsgICAgLyogSW5kZXggb2YgdGhlIEVPUCBUeERlc2MgKi8KKwl1MzIJCWV4dDE6MjA7CisKKwl1MzIJCWV4dDI7CisJdTMyCQlleHQzOworCisJdTMyCQlyc3ZkOjI0OworCXUzMgkJdHlwZTo3OyAgICAgICAvKiBjb21wbGV0aW9uIHR5cGUgKi8KKwl1MzIJCWdlbjoxOyAgICAgICAgLyogZ2VuZXJhdGlvbiBiaXQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfUnhEZXNjIHsKKwl1NjQJCWFkZHI7CisKKwl1MzIJCWxlbjoxNDsKKwl1MzIJCWJ0eXBlOjE7ICAgICAgLyogQnVmZmVyIFR5cGUgKi8KKwl1MzIJCWR0eXBlOjE7ICAgICAgLyogRGVzY3JpcHRvciB0eXBlICovCisJdTMyCQlyc3ZkOjE1OworCXUzMgkJZ2VuOjE7ICAgICAgICAvKiBHZW5lcmF0aW9uIGJpdCAqLworCisJdTMyCQlleHQxOworfTsKKworLyogdmFsdWVzIG9mIFJYRC5CVFlQRSAqLworI2RlZmluZSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEICAgMCAgICAvKiBoZWFkIG9ubHkgKi8KKyNkZWZpbmUgVk1YTkVUM19SWERfQlRZUEVfQk9EWSAgIDEgICAgLyogYm9keSBvbmx5ICovCisKKy8qIGZpZWxkcyBpbiBSeERlc2Mgd2UgYWNjZXNzIHcvbyB1c2luZyBiaXQgZmllbGRzICovCisjZGVmaW5lIFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUICAxNAorI2RlZmluZSBWTVhORVQzX1JYRF9HRU5fU0hJRlQgICAgMzEKKworCitzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjIHsKKwl1MzIJCXJ4ZElkeDoxMjsgICAgLyogSW5kZXggb2YgdGhlIFJ4RGVzYyAqLworCXUzMgkJZXh0MToyOworCXUzMgkJZW9wOjE7ICAgICAgICAvKiBFbmQgb2YgUGFja2V0ICovCisJdTMyCQlzb3A6MTsgICAgICAgIC8qIFN0YXJ0IG9mIFBhY2tldCAqLworCXUzMgkJcnFJRDoxMDsgICAgICAvKiByeCBxdWV1ZS9yaW5nIElEICovCisJdTMyCQlyc3NUeXBlOjQ7ICAgIC8qIFJTUyBoYXNoIHR5cGUgdXNlZCAqLworCXUzMgkJY25jOjE7ICAgICAgICAvKiBDaGVja3N1bSBOb3QgQ2FsY3VsYXRlZCAqLworCXUzMgkJZXh0MjoxOworCisJdTMyCQlyc3NIYXNoOyAgICAgIC8qIFJTUyBoYXNoIHZhbHVlICovCisKKwl1MzIJCWxlbjoxNDsgICAgICAgLyogZGF0YSBsZW5ndGggKi8KKwl1MzIJCWVycjoxOyAgICAgICAgLyogRXJyb3IgKi8KKwl1MzIJCXRzOjE7ICAgICAgICAgLyogVGFnIGlzIHN0cmlwcGVkICovCisJdTMyCQl0Y2k6MTY7ICAgICAgIC8qIFRhZyBzdHJpcHBlZCAqLworCisJdTMyCQljc3VtOjE2OworCXUzMgkJdHVjOjE7ICAgICAgICAvKiBUQ1AvVURQIENoZWNrc3VtIENvcnJlY3QgKi8KKwl1MzIJCXVkcDoxOyAgICAgICAgLyogVURQIHBhY2tldCAqLworCXUzMgkJdGNwOjE7ICAgICAgICAvKiBUQ1AgcGFja2V0ICovCisJdTMyCQlpcGM6MTsgICAgICAgIC8qIElQIENoZWNrc3VtIENvcnJlY3QgKi8KKwl1MzIJCXY2OjE7ICAgICAgICAgLyogSVB2NiAqLworCXUzMgkJdjQ6MTsgICAgICAgICAvKiBJUHY0ICovCisJdTMyCQlmcmc6MTsgICAgICAgIC8qIElQIEZyYWdtZW50ICovCisJdTMyCQlmY3M6MTsgICAgICAgIC8qIEZyYW1lIENSQyBjb3JyZWN0ICovCisJdTMyCQl0eXBlOjc7ICAgICAgIC8qIGNvbXBsZXRpb24gdHlwZSAqLworCXUzMgkJZ2VuOjE7ICAgICAgICAvKiBnZW5lcmF0aW9uIGJpdCAqLworfTsKKworLyogZmllbGRzIGluIFJ4Q29tcERlc2Mgd2UgYWNjZXNzIHZpYSBWbXhuZXQzX0dlbmVyaWNEZXNjLmR3b3JkWzNdICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX1RVQ19TSElGVAkxNgorI2RlZmluZSBWTVhORVQzX1JDRF9JUENfU0hJRlQJMTkKKworLyogZmllbGRzIGluIFJ4Q29tcERlc2Mgd2UgYWNjZXNzIHZpYSBWbXhuZXQzX0dlbmVyaWNEZXNjLnF3b3JkWzFdICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX1RZUEVfU0hJRlQJNTYKKyNkZWZpbmUgVk1YTkVUM19SQ0RfR0VOX1NISUZUCTYzCisKKy8qIGNzdW0gT0sgZm9yIFRDUC9VRFAgcGt0cyBvdmVyIElQICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX0NTVU1fT0sgKDEgPDwgVk1YTkVUM19SQ0RfVFVDX1NISUZUIHwgXAorCQkJICAgICAxIDw8IFZNWE5FVDNfUkNEX0lQQ19TSElGVCkKKworLyogdmFsdWUgb2YgUnhDb21wRGVzYy5yc3NUeXBlICovCitlbnVtIHsKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9OT05FICAgICA9IDAsCisJVk1YTkVUM19SQ0RfUlNTX1RZUEVfSVBWNCAgICAgPSAxLAorCVZNWE5FVDNfUkNEX1JTU19UWVBFX1RDUElQVjQgID0gMiwKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9JUFY2ICAgICA9IDMsCisJVk1YTkVUM19SQ0RfUlNTX1RZUEVfVENQSVBWNiAgPSA0LAorfTsKKworCisvKiBhIHVuaW9uIGZvciBhY2Nlc3NpbmcgYWxsIGNtZC9jb21wbGV0aW9uIGRlc2NyaXB0b3JzICovCit1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjIHsKKwl1NjQJCQkJcXdvcmRbMl07CisJdTMyCQkJCWR3b3JkWzRdOworCXUxNgkJCQl3b3JkWzhdOworCXN0cnVjdCBWbXhuZXQzX1R4RGVzYwkJdHhkOworCXN0cnVjdCBWbXhuZXQzX1J4RGVzYwkJcnhkOworCXN0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MJdGNkOworCXN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MJcmNkOworfTsKKworI2RlZmluZSBWTVhORVQzX0lOSVRfR0VOICAgICAgIDEKKworLyogTWF4IHNpemUgb2YgYSBzaW5nbGUgdHggYnVmZmVyICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX1RYX0JVRl9TSVpFICAoMSA8PCAxNCkKKworLyogIyBvZiB0eCBkZXNjIG5lZWRlZCBmb3IgYSB0eCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBWTVhORVQzX1RYRF9ORUVERUQoc2l6ZSkgKCgoc2l6ZSkgKyBWTVhORVQzX01BWF9UWF9CVUZfU0laRSAtIDEpIC8gXAorCQkJCSAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUpCisKKy8qIG1heCAjIG9mIHR4IGRlc2NzIGZvciBhIG5vbi10c28gcGt0ICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX1RYRF9QRVJfUEtUIDE2CisKKy8qIE1heCBzaXplIG9mIGEgc2luZ2xlIHJ4IGJ1ZmZlciAqLworI2RlZmluZSBWTVhORVQzX01BWF9SWF9CVUZfU0laRSAgKCgxIDw8IDE0KSAtIDEpCisvKiBNaW5pbXVtIHNpemUgb2YgYSB0eXBlIDAgYnVmZmVyICovCisjZGVmaW5lIFZNWE5FVDNfTUlOX1QwX0JVRl9TSVpFICAxMjgKKyNkZWZpbmUgVk1YTkVUM19NQVhfQ1NVTV9PRkZTRVQgIDEwMjQKKworLyogUmluZyBiYXNlIGFkZHJlc3MgYWxpZ25tZW50ICovCisjZGVmaW5lIFZNWE5FVDNfUklOR19CQV9BTElHTiAgIDUxMgorI2RlZmluZSBWTVhORVQzX1JJTkdfQkFfTUFTSyAgICAoVk1YTkVUM19SSU5HX0JBX0FMSUdOIC0gMSkKKworLyogUmluZyBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiAqLworI2RlZmluZSBWTVhORVQzX1JJTkdfU0laRV9BTElHTiAzMgorI2RlZmluZSBWTVhORVQzX1JJTkdfU0laRV9NQVNLICAoVk1YTkVUM19SSU5HX1NJWkVfQUxJR04gLSAxKQorCisvKiBNYXggcmluZyBzaXplICovCisjZGVmaW5lIFZNWE5FVDNfVFhfUklOR19NQVhfU0laRSAgIDQwOTYKKyNkZWZpbmUgVk1YTkVUM19UQ19SSU5HX01BWF9TSVpFICAgNDA5NgorI2RlZmluZSBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgICA0MDk2CisjZGVmaW5lIFZNWE5FVDNfUkNfUklOR19NQVhfU0laRSAgIDgxOTIKKworLyogYSBsaXN0IG9mIHJlYXNvbnMgZm9yIHF1ZXVlIHN0b3AgKi8KKworZW51bSB7CisgVk1YTkVUM19FUlJfTk9FT1AgICAgICAgID0gMHg4MDAwMDAwMCwgIC8qIGNhbm5vdCBmaW5kIHRoZSBFT1AgZGVzYyBvZiBhIHBrdCAqLworIFZNWE5FVDNfRVJSX1RYRF9SRVVTRSAgICA9IDB4ODAwMDAwMDEsICAvKiByZXVzZSBUeERlc2MgYmVmb3JlIHR4IGNvbXBsZXRpb24gKi8KKyBWTVhORVQzX0VSUl9CSUdfUEtUICAgICAgPSAweDgwMDAwMDAyLCAgLyogdG9vIG1hbnkgVHhEZXNjIGZvciBhIHBrdCAqLworIFZNWE5FVDNfRVJSX0RFU0NfTk9UX1NQVCA9IDB4ODAwMDAwMDMsICAvKiBkZXNjcmlwdG9yIHR5cGUgbm90IHN1cHBvcnRlZCAqLworIFZNWE5FVDNfRVJSX1NNQUxMX0JVRiAgICA9IDB4ODAwMDAwMDQsICAvKiB0eXBlIDAgYnVmZmVyIHRvbyBzbWFsbCAqLworIFZNWE5FVDNfRVJSX1NUUkVTUyAgICAgICA9IDB4ODAwMDAwMDUsICAvKiBzdHJlc3Mgb3B0aW9uIGZpcmluZyBpbiB2bWtlcm5lbCAqLworIFZNWE5FVDNfRVJSX1NXSVRDSCAgICAgICA9IDB4ODAwMDAwMDYsICAvKiBtb2RlIHN3aXRjaCBmYWlsdXJlICovCisgVk1YTkVUM19FUlJfVFhEX0lOVkFMSUQgID0gMHg4MDAwMDAwNywgIC8qIGludmFsaWQgVHhEZXNjICovCit9OworCisvKiBjb21wbGV0aW9uIGRlc2NyaXB0b3IgdHlwZXMgKi8KKyNkZWZpbmUgVk1YTkVUM19DRFRZUEVfVFhDT01QICAgICAgMCAgICAvKiBUeCBDb21wbGV0aW9uIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgVk1YTkVUM19DRFRZUEVfUlhDT01QICAgICAgMyAgICAvKiBSeCBDb21wbGV0aW9uIERlc2NyaXB0b3IgKi8KKworZW51bSB7CisJVk1YTkVUM19HT1NfQklUU19VTksgICAgPSAwLCAgIC8qIHVua25vd24gKi8KKwlWTVhORVQzX0dPU19CSVRTXzMyICAgICA9IDEsCisJVk1YTkVUM19HT1NfQklUU182NCAgICAgPSAyLAorfTsKKworI2RlZmluZSBWTVhORVQzX0dPU19UWVBFX0xJTlVYCTEKKworCitzdHJ1Y3QgVm14bmV0M19HT1NJbmZvIHsKKwl1MzIJCQkJZ29zQml0czoyOwkvKiAzMi1iaXQgb3IgNjQtYml0PyAqLworCXUzMgkJCQlnb3NUeXBlOjQ7ICAgLyogd2hpY2ggZ3Vlc3QgKi8KKwl1MzIJCQkJZ29zVmVyOjE2OyAgIC8qIGdvcyB2ZXJzaW9uICovCisJdTMyCQkJCWdvc01pc2M6MTA7ICAvKiBvdGhlciBpbmZvIGFib3V0IGdvcyAqLworfTsKKworCitzdHJ1Y3QgVm14bmV0M19Ecml2ZXJJbmZvIHsKKwl1MzIJCQkJdmVyc2lvbjsKKwlzdHJ1Y3QgVm14bmV0M19HT1NJbmZvCQlnb3M7CisJdTMyCQkJCXZteG5ldDNSZXZTcHQ7CisJdTMyCQkJCXVwdFZlclNwdDsKK307CisKKworI2RlZmluZSBWTVhORVQzX1JFVjFfTUFHSUMgIDB4YmFiZWZlZTEKKworLyoKKyAqIFF1ZXVlRGVzY1BBIG11c3QgYmUgMTI4IGJ5dGVzIGFsaWduZWQuIEl0IHBvaW50cyB0byBhbiBhcnJheSBvZgorICogVm14bmV0M19UeFF1ZXVlRGVzYyBmb2xsb3dlZCBieSBhbiBhcnJheSBvZiBWbXhuZXQzX1J4UXVldWVEZXNjLgorICogVGhlIG51bWJlciBvZiBWbXhuZXQzX1R4UXVldWVEZXNjL1ZteG5ldDNfUnhRdWV1ZURlc2MgYXJlIHNwZWNpZmllZCBieQorICogVm14bmV0M19NaXNjQ29uZi5udW1UeFF1ZXVlcy9udW1SeFF1ZXVlcywgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFZNWE5FVDNfUVVFVUVfREVTQ19BTElHTiAgMTI4CisKKworc3RydWN0IFZteG5ldDNfTWlzY0NvbmYgeworCXN0cnVjdCBWbXhuZXQzX0RyaXZlckluZm8gZHJpdmVySW5mbzsKKwl1NjQJCXVwdEZlYXR1cmVzOworCXU2NAkJZGRQQTsgICAgICAgICAvKiBkcml2ZXIgZGF0YSBQQSAqLworCXU2NAkJcXVldWVEZXNjUEE7ICAvKiBxdWV1ZSBkZXNjcmlwdG9yIHRhYmxlIFBBICovCisJdTMyCQlkZExlbjsgICAgICAgIC8qIGRyaXZlciBkYXRhIGxlbiAqLworCXUzMgkJcXVldWVEZXNjTGVuOyAvKiBxdWV1ZSBkZXNjLiB0YWJsZSBsZW4gaW4gYnl0ZXMgKi8KKwl1MzIJCW10dTsKKwl1MTYJCW1heE51bVJ4U0c7CisJdTgJCW51bVR4UXVldWVzOworCXU4CQludW1SeFF1ZXVlczsKKwl1MzIJCXJlc2VydmVkWzRdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ29uZiB7CisJdTY0CQl0eFJpbmdCYXNlUEE7CisJdTY0CQlkYXRhUmluZ0Jhc2VQQTsKKwl1NjQJCWNvbXBSaW5nQmFzZVBBOworCXU2NAkJZGRQQTsgICAgICAgICAvKiBkcml2ZXIgZGF0YSAqLworCXU2NAkJcmVzZXJ2ZWQ7CisJdTMyCQl0eFJpbmdTaXplOyAgIC8qICMgb2YgdHggZGVzYyAqLworCXUzMgkJZGF0YVJpbmdTaXplOyAvKiAjIG9mIGRhdGEgZGVzYyAqLworCXUzMgkJY29tcFJpbmdTaXplOyAvKiAjIG9mIGNvbXAgZGVzYyAqLworCXUzMgkJZGRMZW47ICAgICAgICAvKiBzaXplIG9mIGRyaXZlciBkYXRhICovCisJdTgJCWludHJJZHg7CisJdTgJCV9wYWRbN107Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mIHsKKwl1NjQJCXJ4UmluZ0Jhc2VQQVsyXTsKKwl1NjQJCWNvbXBSaW5nQmFzZVBBOworCXU2NAkJZGRQQTsgICAgICAgICAgICAvKiBkcml2ZXIgZGF0YSAqLworCXU2NAkJcmVzZXJ2ZWQ7CisJdTMyCQlyeFJpbmdTaXplWzJdOyAgIC8qICMgb2YgcnggZGVzYyAqLworCXUzMgkJY29tcFJpbmdTaXplOyAgICAvKiAjIG9mIHJ4IGNvbXAgZGVzYyAqLworCXUzMgkJZGRMZW47ICAgICAgICAgICAvKiBzaXplIG9mIGRyaXZlciBkYXRhICovCisJdTgJCWludHJJZHg7CisJdTgJCV9wYWRbN107Cit9OworCisKK2VudW0gdm14bmV0M19pbnRyX21hc2tfbW9kZSB7CisJVk1YTkVUM19JTU1fQVVUTyAgID0gMCwKKwlWTVhORVQzX0lNTV9BQ1RJVkUgPSAxLAorCVZNWE5FVDNfSU1NX0xBWlkgICA9IDIKK307CisKK2VudW0gdm14bmV0M19pbnRyX3R5cGUgeworCVZNWE5FVDNfSVRfQVVUTyA9IDAsCisJVk1YTkVUM19JVF9JTlRYID0gMSwKKwlWTVhORVQzX0lUX01TSSAgPSAyLAorCVZNWE5FVDNfSVRfTVNJWCA9IDMKK307CisKKyNkZWZpbmUgVk1YTkVUM19NQVhfVFhfUVVFVUVTICA4CisjZGVmaW5lIFZNWE5FVDNfTUFYX1JYX1FVRVVFUyAgMTYKKy8qIGFkZGl0aW9uIDEgZm9yIGV2ZW50cyAqLworI2RlZmluZSBWTVhORVQzX01BWF9JTlRSUyAgICAgIDI1CisKKworc3RydWN0IFZteG5ldDNfSW50ckNvbmYgeworCWJvb2wJCWF1dG9NYXNrOworCXU4CQludW1JbnRyczsgICAgICAvKiAjIG9mIGludGVycnVwdHMgKi8KKwl1OAkJZXZlbnRJbnRySWR4OworCXU4CQltb2RMZXZlbHNbVk1YTkVUM19NQVhfSU5UUlNdOwkvKiBtb2RlcmF0aW9uIGxldmVsIGZvcgorCQkJCQkJCSAqIGVhY2ggaW50ciAqLworCXUzMgkJcmVzZXJ2ZWRbM107Cit9OworCisvKiBvbmUgYml0IHBlciBWTEFOIElELCB0aGUgc2l6ZSBpcyBpbiB0aGUgdW5pdHMgb2YgdTMyCSovCisjZGVmaW5lIFZNWE5FVDNfVkZUX1NJWkUgICg0MDk2IC8gKHNpemVvZih1MzIpICogOCkpCisKKworc3RydWN0IFZteG5ldDNfUXVldWVTdGF0dXMgeworCWJvb2wJCXN0b3BwZWQ7CisJdTgJCV9wYWRbM107CisJdTMyCQllcnJvcjsKK307CisKKworc3RydWN0IFZteG5ldDNfVHhRdWV1ZUN0cmwgeworCXUzMgkJdHhOdW1EZWZlcnJlZDsKKwl1MzIJCXR4VGhyZXNob2xkOworCXU2NAkJcmVzZXJ2ZWQ7Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1J4UXVldWVDdHJsIHsKKwlib29sCQl1cGRhdGVSeFByb2Q7CisJdTgJCV9wYWRbN107CisJdTY0CQlyZXNlcnZlZDsKK307CisKK2VudW0geworCVZNWE5FVDNfUlhNX1VDQVNUICAgICA9IDB4MDEsICAvKiB1bmljYXN0IG9ubHkgKi8KKwlWTVhORVQzX1JYTV9NQ0FTVCAgICAgPSAweDAyLCAgLyogbXVsdGljYXN0IHBhc3NpbmcgdGhlIGZpbHRlcnMgKi8KKwlWTVhORVQzX1JYTV9CQ0FTVCAgICAgPSAweDA0LCAgLyogYnJvYWRjYXN0IG9ubHkgKi8KKwlWTVhORVQzX1JYTV9BTExfTVVMVEkgPSAweDA4LCAgLyogYWxsIG11bHRpY2FzdCAqLworCVZNWE5FVDNfUlhNX1BST01JU0MgICA9IDB4MTAgIC8qIHByb21pc2N1b3VzICovCit9OworCitzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYgeworCXUzMgkJcnhNb2RlOyAgICAgICAvKiBWTVhORVQzX1JYTV94eHggKi8KKwl1MTYJCW1mVGFibGVMZW47ICAgLyogc2l6ZSBvZiB0aGUgbXVsdGljYXN0IGZpbHRlciB0YWJsZSAqLworCXUxNgkJX3BhZDE7CisJdTY0CQltZlRhYmxlUEE7ICAgIC8qIFBBIG9mIHRoZSBtdWx0aWNhc3QgZmlsdGVycyB0YWJsZSAqLworCXUzMgkJdmZUYWJsZVtWTVhORVQzX1ZGVF9TSVpFXTsgLyogdmxhbiBmaWx0ZXIgKi8KK307CisKKworI2RlZmluZSBWTVhORVQzX1BNX01BWF9GSUxURVJTICAgICAgICA2CisjZGVmaW5lIFZNWE5FVDNfUE1fTUFYX1BBVFRFUk5fU0laRSAgIDEyOAorI2RlZmluZSBWTVhORVQzX1BNX01BWF9NQVNLX1NJWkUgICAgICAoVk1YTkVUM19QTV9NQVhfUEFUVEVSTl9TSVpFIC8gOCkKKworI2RlZmluZSBWTVhORVQzX1BNX1dBS0VVUF9NQUdJQyAgICAgICAweDAxICAvKiB3YWtlIHVwIG9uIG1hZ2ljIHBrdHMgKi8KKyNkZWZpbmUgVk1YTkVUM19QTV9XQUtFVVBfRklMVEVSICAgICAgMHgwMiAgLyogd2FrZSB1cCBvbiBwa3RzIG1hdGNoaW5nCisJCQkJCSAgICAgKiBmaWx0ZXJzICovCisKKworc3RydWN0IFZteG5ldDNfUE1fUGt0RmlsdGVyIHsKKwl1OAkJbWFza1NpemU7CisJdTgJCXBhdHRlcm5TaXplOworCXU4CQltYXNrW1ZNWE5FVDNfUE1fTUFYX01BU0tfU0laRV07CisJdTgJCXBhdHRlcm5bVk1YTkVUM19QTV9NQVhfUEFUVEVSTl9TSVpFXTsKKwl1OAkJcGFkWzZdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19QTUNvbmYgeworCXUxNgkJd2FrZVVwRXZlbnRzOyAgLyogVk1YTkVUM19QTV9XQUtFVVBfeHh4ICovCisJdTgJCW51bUZpbHRlcnM7CisJdTgJCXBhZFs1XTsKKwlzdHJ1Y3QgVm14bmV0M19QTV9Qa3RGaWx0ZXIgZmlsdGVyc1tWTVhORVQzX1BNX01BWF9GSUxURVJTXTsKK307CisKKworc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYyB7CisJdTMyCQljb25mVmVyOworCXUzMgkJY29uZkxlbjsKKwl1NjQJCWNvbmZQQTsKK307CisKKworc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MgeworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDdHJsCQljdHJsOworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDb25mCQljb25mOworCisJLyogRHJpdmVyIHJlYWQgYWZ0ZXIgYSBHRVQgY29tbWFuZCAqLworCXN0cnVjdCBWbXhuZXQzX1F1ZXVlU3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IFVQVDFfVHhTdGF0cwkJCXN0YXRzOworCXU4CQkJCQlfcGFkWzg4XTsgLyogMTI4IGFsaWduZWQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgeworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDdHJsCQljdHJsOworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mCQljb25mOworCS8qIERyaXZlciByZWFkIGFmdGVyIGEgR0VUIGNvbW1hZCAqLworCXN0cnVjdCBWbXhuZXQzX1F1ZXVlU3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IFVQVDFfUnhTdGF0cwkJCXN0YXRzOworCXU4CQkJCSAgICAgIF9fcGFkWzg4XTsgLyogMTI4IGFsaWduZWQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkIHsKKwkvKiByZWFkLW9ubHkgcmVnaW9uIGZvciBkZXZpY2UsIHJlYWQgYnkgZGV2IGluIHJlc3BvbnNlIHRvIGEgU0VUIGNtZCAqLworCXN0cnVjdCBWbXhuZXQzX01pc2NDb25mCQkJbWlzYzsKKwlzdHJ1Y3QgVm14bmV0M19JbnRyQ29uZgkJCWludHJDb25mOworCXN0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZgkJcnhGaWx0ZXJDb25mOworCXN0cnVjdCBWbXhuZXQzX1ZhcmlhYmxlTGVuQ29uZkRlc2MJcnNzQ29uZkRlc2M7CisJc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYwlwbUNvbmZEZXNjOworCXN0cnVjdCBWbXhuZXQzX1ZhcmlhYmxlTGVuQ29uZkRlc2MJcGx1Z2luQ29uZkRlc2M7Cit9OworCisvKiBBbGwgc3RydWN0dXJlcyBpbiBEcml2ZXJTaGFyZWQgYXJlIHBhZGRlZCB0byBtdWx0aXBsZXMgb2YgOCBieXRlcyAqLworc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkIHsKKwl1MzIJCQkJbWFnaWM7CisJLyogbWFrZSBkZXZSZWFkIHN0YXJ0IGF0IDY0Yml0IGJvdW5kYXJpZXMgKi8KKwl1MzIJCQkJCXBhZDsKKwlzdHJ1Y3QgVm14bmV0M19EU0RldlJlYWQJCWRldlJlYWQ7CisJdTMyCQkJCQllY3I7CisJdTMyCQkJCQlyZXNlcnZlZFs1XTsKK307CisKKworI2RlZmluZSBWTVhORVQzX0VDUl9SUUVSUiAgICAgICAoMSA8PCAwKQorI2RlZmluZSBWTVhORVQzX0VDUl9UUUVSUiAgICAgICAoMSA8PCAxKQorI2RlZmluZSBWTVhORVQzX0VDUl9MSU5LICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBWTVhORVQzX0VDUl9ESUMgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBWTVhORVQzX0VDUl9ERUJVRyAgICAgICAoMSA8PCA0KQorCisvKiBmbGlwIHRoZSBnZW4gYml0IG9mIGEgcmluZyAqLworI2RlZmluZSBWTVhORVQzX0ZMSVBfUklOR19HRU4oZ2VuKSAoKGdlbikgPSAoZ2VuKSBeIDB4MSkKKworLyogb25seSB1c2UgdGhpcyBpZiBtb3ZpbmcgdGhlIGlkeCB3b24ndCBhZmZlY3QgdGhlIGdlbiBiaXQgKi8KKyNkZWZpbmUgVk1YTkVUM19JTkNfUklOR19JRFhfT05MWShpZHgsIHJpbmdfc2l6ZSkgXAorCWRvIHtcCisJCShpZHgpKys7XAorCQlpZiAodW5saWtlbHkoKGlkeCkgPT0gKHJpbmdfc2l6ZSkpKSB7XAorCQkJKGlkeCkgPSAwO1wKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCkgXAorCSh2ZlRhYmxlW3ZpZCA+PiA1XSB8PSAoMSA8PCAodmlkICYgMzEpKSkKKyNkZWZpbmUgVk1YTkVUM19DTEVBUl9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCkgXAorCSh2ZlRhYmxlW3ZpZCA+PiA1XSAmPSB+KDEgPDwgKHZpZCAmIDMxKSkpCisKKyNkZWZpbmUgVk1YTkVUM19WRlRBQkxFX0VOVFJZX0lTX1NFVCh2ZlRhYmxlLCB2aWQpIFwKKwkoKHZmVGFibGVbdmlkID4+IDVdICYgKDEgPDwgKHZpZCAmIDMxKSkpICE9IDApCisKKyNkZWZpbmUgVk1YTkVUM19NQVhfTVRVICAgICA5MDAwCisjZGVmaW5lIFZNWE5FVDNfTUlOX01UVSAgICAgNjAKKworI2RlZmluZSBWTVhORVQzX0xJTktfVVAgICAgICAgICAoMTAwMDAgPDwgMTYgfCAxKSAgICAvKiAxMCBHYnBzLCB1cCAqLworI2RlZmluZSBWTVhORVQzX0xJTktfRE9XTiAgICAgICAwCisKKyNlbmRpZiAvKiBfVk1YTkVUM19ERUZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0MzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtMCwwICsxLDI1NzQgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIFZNd2FyZSdzIHZteG5ldDMgZXRoZXJuZXQgTklDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSBhbmQgbm8gbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgInZteG5ldDNfaW50LmgiCisKK2NoYXIgdm14bmV0M19kcml2ZXJfbmFtZVtdID0gInZteG5ldDMiOworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9ERVNDICJWTXdhcmUgdm14bmV0MyB2aXJ0dWFsIE5JQyBkcml2ZXIiCisKKworLyoKKyAqIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqIExhc3QgZW50cnkgbXVzdCBiZSBhbGwgMHMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZteG5ldDNfcGNpaWRfdGFibGVbXSA9IHsKKwl7UENJX1ZERVZJQ0UoVk1XQVJFLCBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9WTVhORVQzKX0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdm14bmV0M19wY2lpZF90YWJsZSk7CisKK3N0YXRpYyBhdG9taWNfdCBkZXZpY2VzX2ZvdW5kOworCisKKy8qCisgKiAgICBFbmFibGUvRGlzYWJsZSB0aGUgZ2l2ZW4gaW50cgorICovCitzdGF0aWMgdm9pZAordm14bmV0M19lbmFibGVfaW50cihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnRyX2lkeCkKK3sKKwlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0lNUiArIGludHJfaWR4ICogOCwgMCk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZGlzYWJsZV9pbnRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludHJfaWR4KQoreworCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfSU1SICsgaW50cl9pZHggKiA4LCAxKTsKK30KKworCisvKgorICogICAgRW5hYmxlL0Rpc2FibGUgYWxsIGludHJzIHVzZWQgYnkgdGhlIGRldmljZQorICovCitzdGF0aWMgdm9pZAordm14bmV0M19lbmFibGVfYWxsX2ludHJzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJdm14bmV0M19lbmFibGVfaW50cihhZGFwdGVyLCBpKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19kaXNhYmxlX2FsbF9pbnRycyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCisJCXZteG5ldDNfZGlzYWJsZV9pbnRyKGFkYXB0ZXIsIGkpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2Fja19ldmVudHMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGV2ZW50cykKK3sKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0VDUiwgZXZlbnRzKTsKK30KKworCitzdGF0aWMgYm9vbAordm14bmV0M190cV9zdG9wcGVkKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gbmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3RxX3N0YXJ0KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl0cS0+c3RvcHBlZCA9IGZhbHNlOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfd2FrZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdHEtPnN0b3BwZWQgPSBmYWxzZTsKKwluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfc3RvcChzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdHEtPnN0b3BwZWQgPSB0cnVlOworCXRxLT5udW1fc3RvcCsrOworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCisvKgorICogQ2hlY2sgdGhlIGxpbmsgc3RhdGUuIFRoaXMgbWF5IHN0YXJ0IG9yIHN0b3AgdGhlIHR4IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAordm14bmV0M19jaGVja19saW5rKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHJldDsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELCBWTVhORVQzX0NNRF9HRVRfTElOSyk7CisJcmV0ID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCk7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IHJldCA+PiAxNjsKKwlpZiAocmV0ICYgMSkgeyAvKiBMaW5rIGlzIHVwLiAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgVXAgJWQgTWJwc1xuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bGlua19zcGVlZCk7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihhZGFwdGVyLT5uZXRkZXYpOworCisJCXZteG5ldDNfdHFfc3RhcnQoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgRG93blxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCisJCQluZXRpZl9jYXJyaWVyX29mZihhZGFwdGVyLT5uZXRkZXYpOworCisJCXZteG5ldDNfdHFfc3RvcCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBldmVudHMgPSBhZGFwdGVyLT5zaGFyZWQtPmVjcjsKKwlpZiAoIWV2ZW50cykKKwkJcmV0dXJuOworCisJdm14bmV0M19hY2tfZXZlbnRzKGFkYXB0ZXIsIGV2ZW50cyk7CisKKwkvKiBDaGVjayBpZiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkICovCisJaWYgKGV2ZW50cyAmIFZNWE5FVDNfRUNSX0xJTkspCisJCXZteG5ldDNfY2hlY2tfbGluayhhZGFwdGVyKTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9uIHhtaXQvcmVjdiBxdWV1ZXMgKi8KKwlpZiAoZXZlbnRzICYgKFZNWE5FVDNfRUNSX1RRRVJSIHwgVk1YTkVUM19FQ1JfUlFFUlIpKSB7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKKworCQlpZiAoYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0dXMuc3RvcHBlZCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHEgZXJyb3IgMHgleFxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0dXMuZXJyb3IpOworCQl9CisJCWlmIChhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5zdG9wcGVkKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBycSBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCSAgICAgICBhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5lcnJvcik7CisJCX0KKworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53b3JrKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdW5tYXBfdHhfYnVmKHN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvICp0YmksCisJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKHRiaS0+bWFwX3R5cGUgPT0gVk1YTkVUM19NQVBfU0lOR0xFKQorCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHRiaS0+ZG1hX2FkZHIsIHRiaS0+bGVuLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwllbHNlIGlmICh0YmktPm1hcF90eXBlID09IFZNWE5FVDNfTUFQX1BBR0UpCisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHRiaS0+ZG1hX2FkZHIsIHRiaS0+bGVuLAorCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCWVsc2UKKwkJQlVHX09OKHRiaS0+bWFwX3R5cGUgIT0gVk1YTkVUM19NQVBfTk9ORSk7CisKKwl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfTk9ORTsgLyogdG8gaGVscCBkZWJ1Z2dpbmcgKi8KK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3VubWFwX3BrdCh1MzIgZW9wX2lkeCwgc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVudHJpZXMgPSAwOworCisJLyogbm8gb3V0IG9mIG9yZGVyIGNvbXBsZXRpb24gKi8KKwlCVUdfT04odHEtPmJ1Zl9pbmZvW2VvcF9pZHhdLnNvcF9pZHggIT0gdHEtPnR4X3JpbmcubmV4dDJjb21wKTsKKwlCVUdfT04odHEtPnR4X3JpbmcuYmFzZVtlb3BfaWR4XS50eGQuZW9wICE9IDEpOworCisJc2tiID0gdHEtPmJ1Zl9pbmZvW2VvcF9pZHhdLnNrYjsKKwlCVUdfT04oc2tiID09IE5VTEwpOworCXRxLT5idWZfaW5mb1tlb3BfaWR4XS5za2IgPSBOVUxMOworCisJVk1YTkVUM19JTkNfUklOR19JRFhfT05MWShlb3BfaWR4LCB0cS0+dHhfcmluZy5zaXplKTsKKworCXdoaWxlICh0cS0+dHhfcmluZy5uZXh0MmNvbXAgIT0gZW9wX2lkeCkgeworCQl2bXhuZXQzX3VubWFwX3R4X2J1Zih0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmNvbXAsCisJCQkJICAgICBwZGV2KTsKKworCQkvKiB1cGRhdGUgbmV4dDJjb21wIHcvbyB0eF9sb2NrLiBTaW5jZSB3ZSBhcmUgbWFya2luZyBtb3JlLAorCQkgKiBpbnN0ZWFkIG9mIGxlc3MsIHR4IHJpbmcgZW50cmllcyBhdmFpbCwgdGhlIHdvcnN0IGNhc2UgaXMKKwkJICogdGhhdCB0aGUgdHggcm91dGluZSBpbmNvcnJlY3RseSByZS1xdWV1ZXMgYSBwa3QgZHVlIHRvCisJCSAqIGluc3VmZmljaWVudCB0eCByaW5nIGVudHJpZXMuCisJCSAqLworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmNvbXAoJnRxLT50eF9yaW5nKTsKKwkJZW50cmllcysrOworCX0KKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIGVudHJpZXM7Cit9CisKKworc3RhdGljIGludAordm14bmV0M190cV90eF9jb21wbGV0ZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjb21wbGV0ZWQgPSAwOworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjOworCisJZ2Rlc2MgPSB0cS0+Y29tcF9yaW5nLmJhc2UgKyB0cS0+Y29tcF9yaW5nLm5leHQycHJvYzsKKwl3aGlsZSAoZ2Rlc2MtPnRjZC5nZW4gPT0gdHEtPmNvbXBfcmluZy5nZW4pIHsKKwkJY29tcGxldGVkICs9IHZteG5ldDNfdW5tYXBfcGt0KGdkZXNjLT50Y2QudHhkSWR4LCB0cSwKKwkJCQkJICAgICAgIGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXIpOworCisJCXZteG5ldDNfY29tcF9yaW5nX2Fkdl9uZXh0MnByb2MoJnRxLT5jb21wX3JpbmcpOworCQlnZGVzYyA9IHRxLT5jb21wX3JpbmcuYmFzZSArIHRxLT5jb21wX3JpbmcubmV4dDJwcm9jOworCX0KKworCWlmIChjb21wbGV0ZWQpIHsKKwkJc3Bpbl9sb2NrKCZ0cS0+dHhfbG9jayk7CisJCWlmICh1bmxpa2VseSh2bXhuZXQzX3RxX3N0b3BwZWQodHEsIGFkYXB0ZXIpICYmCisJCQkgICAgIHZteG5ldDNfY21kX3JpbmdfZGVzY19hdmFpbCgmdHEtPnR4X3JpbmcpID4KKwkJCSAgICAgVk1YTkVUM19XQUtFX1FVRVVFX1RIUkVTSE9MRCh0cSkgJiYKKwkJCSAgICAgbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSkgeworCQkJdm14bmV0M190cV93YWtlKHRxLCBhZGFwdGVyKTsKKwkJfQorCQlzcGluX3VubG9jaygmdHEtPnR4X2xvY2spOworCX0KKwlyZXR1cm4gY29tcGxldGVkOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3RxX2NsZWFudXAoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJd2hpbGUgKHRxLT50eF9yaW5nLm5leHQyY29tcCAhPSB0cS0+dHhfcmluZy5uZXh0MmZpbGwpIHsKKwkJc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gKnRiaTsKKwkJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJjb21wOworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmNvbXA7CisKKwkJdm14bmV0M191bm1hcF90eF9idWYodGJpLCBhZGFwdGVyLT5wZGV2KTsKKwkJaWYgKHRiaS0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueSh0YmktPnNrYik7CisJCQl0YmktPnNrYiA9IE5VTEw7CisJCX0KKwkJdm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJjb21wKCZ0cS0+dHhfcmluZyk7CisJfQorCisJLyogc2FuaXR5IGNoZWNrLCB2ZXJpZnkgYWxsIGJ1ZmZlcnMgYXJlIGluZGVlZCB1bm1hcHBlZCBhbmQgZnJlZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHEtPnR4X3Jpbmcuc2l6ZTsgaSsrKSB7CisJCUJVR19PTih0cS0+YnVmX2luZm9baV0uc2tiICE9IE5VTEwgfHwKKwkJICAgICAgIHRxLT5idWZfaW5mb1tpXS5tYXBfdHlwZSAhPSBWTVhORVQzX01BUF9OT05FKTsKKwl9CisKKwl0cS0+dHhfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCXRxLT50eF9yaW5nLm5leHQyZmlsbCA9IHRxLT50eF9yaW5nLm5leHQyY29tcCA9IDA7CisKKwl0cS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJdHEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworfQorCisKK3ZvaWQKK3ZteG5ldDNfdHFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHRxLT50eF9yaW5nLmJhc2UpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCB0cS0+dHhfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGVzYyksCisJCQkJICAgIHRxLT50eF9yaW5nLmJhc2UsIHRxLT50eF9yaW5nLmJhc2VQQSk7CisJCXRxLT50eF9yaW5nLmJhc2UgPSBOVUxMOworCX0KKwlpZiAodHEtPmRhdGFfcmluZy5iYXNlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgdHEtPmRhdGFfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpLAorCQkJCSAgICB0cS0+ZGF0YV9yaW5nLmJhc2UsIHRxLT5kYXRhX3JpbmcuYmFzZVBBKTsKKwkJdHEtPmRhdGFfcmluZy5iYXNlID0gTlVMTDsKKwl9CisJaWYgKHRxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHRxLT5jb21wX3Jpbmcuc2l6ZSAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeENvbXBEZXNjKSwKKwkJCQkgICAgdHEtPmNvbXBfcmluZy5iYXNlLCB0cS0+Y29tcF9yaW5nLmJhc2VQQSk7CisJCXRxLT5jb21wX3JpbmcuYmFzZSA9IE5VTEw7CisJfQorCWtmcmVlKHRxLT5idWZfaW5mbyk7CisJdHEtPmJ1Zl9pbmZvID0gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M190cV9pbml0KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCS8qIHJlc2V0IHRoZSB0eCByaW5nIGNvbnRlbnRzIHRvIDAgYW5kIHJlc2V0IHRoZSB0eCByaW5nIHN0YXRlcyAqLworCW1lbXNldCh0cS0+dHhfcmluZy5iYXNlLCAwLCB0cS0+dHhfcmluZy5zaXplICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGVzYykpOworCXRxLT50eF9yaW5nLm5leHQyZmlsbCA9IHRxLT50eF9yaW5nLm5leHQyY29tcCA9IDA7CisJdHEtPnR4X3JpbmcuZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKworCW1lbXNldCh0cS0+ZGF0YV9yaW5nLmJhc2UsIDAsIHRxLT5kYXRhX3Jpbmcuc2l6ZSAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjKSk7CisKKwkvKiByZXNldCB0aGUgdHggY29tcCByaW5nIGNvbnRlbnRzIHRvIDAgYW5kIHJlc2V0IGNvbXAgcmluZyBzdGF0ZXMgKi8KKwltZW1zZXQodHEtPmNvbXBfcmluZy5iYXNlLCAwLCB0cS0+Y29tcF9yaW5nLnNpemUgKgorCSAgICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhDb21wRGVzYykpOworCXRxLT5jb21wX3JpbmcubmV4dDJwcm9jID0gMDsKKwl0cS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisKKwkvKiByZXNldCB0aGUgYm9va2tlZXBpbmcgZGF0YSAqLworCW1lbXNldCh0cS0+YnVmX2luZm8sIDAsIHNpemVvZih0cS0+YnVmX2luZm9bMF0pICogdHEtPnR4X3Jpbmcuc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHRxLT50eF9yaW5nLnNpemU7IGkrKykKKwkJdHEtPmJ1Zl9pbmZvW2ldLm1hcF90eXBlID0gVk1YTkVUM19NQVBfTk9ORTsKKworCS8qIHN0YXRzIGFyZSBub3QgcmVzZXQgKi8KK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3RxX2NyZWF0ZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlCVUdfT04odHEtPnR4X3JpbmcuYmFzZSB8fCB0cS0+ZGF0YV9yaW5nLmJhc2UgfHwKKwkgICAgICAgdHEtPmNvbXBfcmluZy5iYXNlIHx8IHRxLT5idWZfaW5mbyk7CisKKwl0cS0+dHhfcmluZy5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgdHEtPnR4X3Jpbmcuc2l6ZQorCQkJICAgKiBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEZXNjKSwKKwkJCSAgICZ0cS0+dHhfcmluZy5iYXNlUEEpOworCWlmICghdHEtPnR4X3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgdHggcmluZ1xuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCXRxLT5kYXRhX3JpbmcuYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkgICAgIHRxLT5kYXRhX3Jpbmcuc2l6ZSAqCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjKSwKKwkJCSAgICAgJnRxLT5kYXRhX3JpbmcuYmFzZVBBKTsKKwlpZiAoIXRxLT5kYXRhX3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgZGF0YSByaW5nXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJdHEtPmNvbXBfcmluZy5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCSAgICAgdHEtPmNvbXBfcmluZy5zaXplICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MpLAorCQkJICAgICAmdHEtPmNvbXBfcmluZy5iYXNlUEEpOworCWlmICghdHEtPmNvbXBfcmluZy5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBjb21wIHJpbmdcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwl0cS0+YnVmX2luZm8gPSBrY2FsbG9jKHRxLT50eF9yaW5nLnNpemUsIHNpemVvZih0cS0+YnVmX2luZm9bMF0pLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghdHEtPmJ1Zl9pbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBidWZpbmZvXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl2bXhuZXQzX3RxX2Rlc3Ryb3kodHEsIGFkYXB0ZXIpOworCXJldHVybiAtRU5PTUVNOworfQorCisKKy8qCisgKiAgICBzdGFydGluZyBmcm9tIHJpbmctPm5leHQyZmlsbCwgYWxsb2NhdGUgcnggYnVmZmVycyBmb3IgdGhlIGdpdmVuIHJpbmcKKyAqICAgIG9mIHRoZSByeCBxdWV1ZSBhbmQgdXBkYXRlIHRoZSByeCBkZXNjLiBzdG9wIGFmdGVyIEBudW1fdG9fYWxsb2MgYnVmZmVycworICogICAgYXJlIGFsbG9jYXRlZCBvciBhbGxvY2F0aW9uIGZhaWxzCisgKi8KKworc3RhdGljIGludAordm14bmV0M19ycV9hbGxvY19yeF9idWYoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCB1MzIgcmluZ19pZHgsCisJCQlpbnQgbnVtX3RvX2FsbG9jLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBudW1fYWxsb2NhdGVkID0gMDsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpX2Jhc2UgPSBycS0+YnVmX2luZm9bcmluZ19pZHhdOworCXN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICpyaW5nID0gJnJxLT5yeF9yaW5nW3JpbmdfaWR4XTsKKwl1MzIgdmFsOworCisJd2hpbGUgKG51bV9hbGxvY2F0ZWQgPCBudW1fdG9fYWxsb2MpIHsKKwkJc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8gKnJiaTsKKwkJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Q7CisKKwkJcmJpID0gcmJpX2Jhc2UgKyByaW5nLT5uZXh0MmZpbGw7CisJCWdkID0gcmluZy0+YmFzZSArIHJpbmctPm5leHQyZmlsbDsKKworCQlpZiAocmJpLT5idWZfdHlwZSA9PSBWTVhORVQzX1JYX0JVRl9TS0IpIHsKKwkJCWlmIChyYmktPnNrYiA9PSBOVUxMKSB7CisJCQkJcmJpLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHJiaS0+bGVuICsKKwkJCQkJCQkgTkVUX0lQX0FMSUdOKTsKKwkJCQlpZiAodW5saWtlbHkocmJpLT5za2IgPT0gTlVMTCkpIHsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyYmktPnNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJCQkJc2tiX3Jlc2VydmUocmJpLT5za2IsIE5FVF9JUF9BTElHTik7CisJCQkJcmJpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQlyYmktPnNrYi0+ZGF0YSwgcmJpLT5sZW4sCisJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJfSBlbHNlIHsKKwkJCQkvKiByeCBidWZmZXIgc2tpcHBlZCBieSB0aGUgZGV2aWNlICovCisJCQl9CisJCQl2YWwgPSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEIDw8IFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUOworCQl9IGVsc2UgeworCQkJQlVHX09OKHJiaS0+YnVmX3R5cGUgIT0gVk1YTkVUM19SWF9CVUZfUEFHRSB8fAorCQkJICAgICAgIHJiaS0+bGVuICAhPSBQQUdFX1NJWkUpOworCisJCQlpZiAocmJpLT5wYWdlID09IE5VTEwpIHsKKwkJCQlyYmktPnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOworCQkJCWlmICh1bmxpa2VseShyYmktPnBhZ2UgPT0gTlVMTCkpIHsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyYmktPmRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQlyYmktPnBhZ2UsIDAsIFBBR0VfU0laRSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHJ4IGJ1ZmZlcnMgc2tpcHBlZCBieSB0aGUgZGV2aWNlICovCisJCQl9CisJCQl2YWwgPSBWTVhORVQzX1JYRF9CVFlQRV9CT0RZIDw8IFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUOworCQl9CisKKwkJQlVHX09OKHJiaS0+ZG1hX2FkZHIgPT0gMCk7CisJCWdkLT5yeGQuYWRkciA9IHJiaS0+ZG1hX2FkZHI7CisJCWdkLT5kd29yZFsyXSA9IChyaW5nLT5nZW4gPDwgVk1YTkVUM19SWERfR0VOX1NISUZUKSB8IHZhbCB8CisJCQkJcmJpLT5sZW47CisKKwkJbnVtX2FsbG9jYXRlZCsrOworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmZpbGwocmluZyk7CisJfQorCXJxLT51bmNvbW1pdHRlZFtyaW5nX2lkeF0gKz0gbnVtX2FsbG9jYXRlZDsKKworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkiYWxsb2NfcnhfYnVmOiAlZCBhbGxvY2F0ZWQsIG5leHQyZmlsbCAldSwgbmV4dDJjb21wICIKKwkJIiV1LCB1bmNvbW1pdGVkICV1XG4iLCBudW1fYWxsb2NhdGVkLCByaW5nLT5uZXh0MmZpbGwsCisJCXJpbmctPm5leHQyY29tcCwgcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSk7CisKKwkvKiBzbyB0aGF0IHRoZSBkZXZpY2UgY2FuIGRpc3Rpbmd1aXNoIGEgZnVsbCByaW5nIGFuZCBhbiBlbXB0eSByaW5nICovCisJQlVHX09OKG51bV9hbGxvY2F0ZWQgIT0gMCAmJiByaW5nLT5uZXh0MmZpbGwgPT0gcmluZy0+bmV4dDJjb21wKTsKKworCXJldHVybiBudW1fYWxsb2NhdGVkOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2FwcGVuZF9mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MgKnJjZCwKKwkJICAgIHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICpyYmkpCit7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJQlVHX09OKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPj0gTUFYX1NLQl9GUkFHUyk7CisKKwlmcmFnLT5wYWdlID0gcmJpLT5wYWdlOworCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gMDsKKwlmcmFnLT5zaXplID0gcmNkLT5sZW47CisJc2tiLT5kYXRhX2xlbiArPSBmcmFnLT5zaXplOworCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19tYXBfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X2N0eCAqY3R4LAorCQlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBkdzIsIGxlbjsKKwl1bnNpZ25lZCBsb25nIGJ1Zl9vZmZzZXQ7CisJaW50IGk7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisJc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gKnRiaSA9IE5VTEw7CisKKwlCVUdfT04oY3R4LT5jb3B5X3NpemUgPiBza2JfaGVhZGxlbihza2IpKTsKKworCS8qIHVzZSB0aGUgcHJldmlvdXMgZ2VuIGJpdCBmb3IgdGhlIFNPUCBkZXNjICovCisJZHcyID0gKHRxLT50eF9yaW5nLmdlbiBeIDB4MSkgPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCisJY3R4LT5zb3BfdHhkID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwlnZGVzYyA9IGN0eC0+c29wX3R4ZDsgLyogYm90aCBsb29wcyBiZWxvdyBjYW4gYmUgc2tpcHBlZCAqLworCisJLyogbm8gbmVlZCB0byBtYXAgdGhlIGJ1ZmZlciBpZiBoZWFkZXJzIGFyZSBjb3BpZWQgKi8KKwlpZiAoY3R4LT5jb3B5X3NpemUpIHsKKwkJY3R4LT5zb3BfdHhkLT50eGQuYWRkciA9IHRxLT5kYXRhX3JpbmcuYmFzZVBBICsKKwkJCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpOworCQljdHgtPnNvcF90eGQtPmR3b3JkWzJdID0gZHcyIHwgY3R4LT5jb3B5X3NpemU7CisJCWN0eC0+c29wX3R4ZC0+ZHdvcmRbM10gPSAwOworCisJCXRiaSA9IHRxLT5idWZfaW5mbyArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwkJdGJpLT5tYXBfdHlwZSA9IFZNWE5FVDNfTUFQX05PTkU7CisKKwkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkidHhkWyV1XTogMHglTHggMHgleCAweCV4XG4iLAorCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsLCBjdHgtPnNvcF90eGQtPnR4ZC5hZGRyLAorCQkJY3R4LT5zb3BfdHhkLT5kd29yZFsyXSwgY3R4LT5zb3BfdHhkLT5kd29yZFszXSk7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbCgmdHEtPnR4X3JpbmcpOworCisJCS8qIHVzZSB0aGUgcmlnaHQgZ2VuIGZvciBub24tU09QIGRlc2MgKi8KKwkJZHcyID0gdHEtPnR4X3JpbmcuZ2VuIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVDsKKwl9CisKKwkvKiBsaW5lYXIgcGFydCBjYW4gdXNlIG11bHRpcGxlIHR4IGRlc2MgaWYgaXQncyBiaWcgKi8KKwlsZW4gPSBza2JfaGVhZGxlbihza2IpIC0gY3R4LT5jb3B5X3NpemU7CisJYnVmX29mZnNldCA9IGN0eC0+Y29weV9zaXplOworCXdoaWxlIChsZW4pIHsKKwkJdTMyIGJ1Zl9zaXplOworCisJCWJ1Zl9zaXplID0gbGVuID4gVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUgPworCQkJICAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUgOiBsZW47CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCQl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfU0lOR0xFOworCQl0YmktPmRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQlza2ItPmRhdGEgKyBidWZfb2Zmc2V0LCBidWZfc2l6ZSwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCQl0YmktPmxlbiA9IGJ1Zl9zaXplOyAvKiB0aGlzIGF1dG9tYXRpY2FsbHkgY29udmVydCAyXjE0IHRvIDAgKi8KKworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCUJVR19PTihnZGVzYy0+dHhkLmdlbiA9PSB0cS0+dHhfcmluZy5nZW4pOworCisJCWdkZXNjLT50eGQuYWRkciA9IHRiaS0+ZG1hX2FkZHI7CisJCWdkZXNjLT5kd29yZFsyXSA9IGR3MiB8IGJ1Zl9zaXplOworCQlnZGVzYy0+ZHdvcmRbM10gPSAwOworCisJCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJInR4ZFsldV06IDB4JUx4IDB4JXggMHgleFxuIiwKKwkJCXRxLT50eF9yaW5nLm5leHQyZmlsbCwgZ2Rlc2MtPnR4ZC5hZGRyLAorCQkJZ2Rlc2MtPmR3b3JkWzJdLCBnZGVzYy0+ZHdvcmRbM10pOworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmZpbGwoJnRxLT50eF9yaW5nKTsKKwkJZHcyID0gdHEtPnR4X3JpbmcuZ2VuIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVDsKKworCQlsZW4gLT0gYnVmX3NpemU7CisJCWJ1Zl9vZmZzZXQgKz0gYnVmX3NpemU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCQl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfUEFHRTsKKwkJdGJpLT5kbWFfYWRkciA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBmcmFnLT5wYWdlLAorCQkJCQkgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAorCQkJCQkgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXRiaS0+bGVuID0gZnJhZy0+c2l6ZTsKKworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCUJVR19PTihnZGVzYy0+dHhkLmdlbiA9PSB0cS0+dHhfcmluZy5nZW4pOworCisJCWdkZXNjLT50eGQuYWRkciA9IHRiaS0+ZG1hX2FkZHI7CisJCWdkZXNjLT5kd29yZFsyXSA9IGR3MiB8IGZyYWctPnNpemU7CisJCWdkZXNjLT5kd29yZFszXSA9IDA7CisKKwkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkidHhkWyV1XTogMHglbGx1ICV1ICV1XG4iLAorCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsLCBnZGVzYy0+dHhkLmFkZHIsCisJCQlnZGVzYy0+ZHdvcmRbMl0sIGdkZXNjLT5kd29yZFszXSk7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbCgmdHEtPnR4X3JpbmcpOworCQlkdzIgPSB0cS0+dHhfcmluZy5nZW4gPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCX0KKworCWN0eC0+ZW9wX3R4ZCA9IGdkZXNjOworCisJLyogc2V0IHRoZSBsYXN0IGJ1Zl9pbmZvIGZvciB0aGUgcGt0ICovCisJdGJpLT5za2IgPSBza2I7CisJdGJpLT5zb3BfaWR4ID0gY3R4LT5zb3BfdHhkIC0gdHEtPnR4X3JpbmcuYmFzZTsKK30KKworCisvKgorICogICAgcGFyc2UgYW5kIGNvcHkgcmVsZXZhbnQgcHJvdG9jb2wgaGVhZGVyczoKKyAqICAgICAgRm9yIGEgdHNvIHBrdCwgcmVsZXZhbnQgaGVhZGVycyBhcmUgTDIvMy80IGluY2x1ZGluZyBvcHRpb25zCisgKiAgICAgIEZvciBhIHBrdCByZXF1ZXN0aW5nIGNzdW0gb2ZmbG9hZGluZywgdGhleSBhcmUgTDIvMyBhbmQgbWF5IGluY2x1ZGUgTDQKKyAqICAgICAgaWYgaXQncyBhIFRDUC9VRFAgcGt0CisgKgorICogUmV0dXJuczoKKyAqICAgIC0xOiAgZXJyb3IgaGFwcGVucyBkdXJpbmcgcGFyc2luZworICogICAgIDA6ICBwcm90b2NvbCBoZWFkZXJzIHBhcnNlZCwgYnV0IHRvbyBiaWcgdG8gYmUgY29waWVkCisgKiAgICAgMTogIHByb3RvY29sIGhlYWRlcnMgcGFyc2VkIGFuZCBjb3BpZWQKKyAqCisgKiBPdGhlciBlZmZlY3RzOgorICogICAgMS4gcmVsYXRlZCAqY3R4IGZpZWxkcyBhcmUgdXBkYXRlZC4KKyAqICAgIDIuIGN0eC0+Y29weV9zaXplIGlzICMgb2YgYnl0ZXMgY29waWVkCisgKiAgICAzLiB0aGUgcG9ydGlvbiBjb3BpZWQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgbGluZWFyIHBhcnQKKyAqCisgKi8KK3N0YXRpYyBpbnQKK3ZteG5ldDNfcGFyc2VfYW5kX2NvcHlfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJCSAgIHN0cnVjdCB2bXhuZXQzX3R4X2N0eCAqY3R4LAorCQkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjICp0ZGQ7CisKKwlpZiAoY3R4LT5tc3MpIHsKKwkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQljdHgtPmw0X2hkcl9zaXplID0gKChzdHJ1Y3QgdGNwaGRyICopCisJCQkJICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPmRvZmYgKiA0OworCQljdHgtPmNvcHlfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsgY3R4LT5sNF9oZHJfc2l6ZTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgcHVsbF9zaXplOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisKKwkJCWlmIChjdHgtPmlwdjQpIHsKKwkJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikKKwkJCQkJCSAgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJCQlpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgeworCQkJCQlwdWxsX3NpemUgPSBjdHgtPmV0aF9pcF9oZHJfc2l6ZSArCisJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJCQkJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsCisJCQkJCQkJCXB1bGxfc2l6ZSkpKSB7CisJCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCQljdHgtPmw0X2hkcl9zaXplID0gKChzdHJ1Y3QgdGNwaGRyICopCisJCQkJCSAgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikpLT5kb2ZmICogNDsKKwkJCQl9IGVsc2UgaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKwkJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9CisJCQkJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCX0gZWxzZSB7CisJCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogZm9yIHNpbXBsaWNpdHksIGRvbid0IGNvcHkgTDQgaGVhZGVycyAqLworCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAwOworCQkJfQorCQkJY3R4LT5jb3B5X3NpemUgPSBjdHgtPmV0aF9pcF9oZHJfc2l6ZSArCisJCQkJCSBjdHgtPmw0X2hkcl9zaXplOworCQl9IGVsc2UgeworCQkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSAwOworCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7CisJCQkvKiBjb3B5IGFzIG11Y2ggYXMgYWxsb3dlZCAqLworCQkJY3R4LT5jb3B5X3NpemUgPSBtaW4oKHVuc2lnbmVkIGludClWTVhORVQzX0hEUl9DT1BZX1NJWkUKKwkJCQkJICAgICAsIHNrYl9oZWFkbGVuKHNrYikpOworCQl9CisKKwkJLyogbWFrZSBzdXJlIGhlYWRlcnMgYXJlIGFjY2Vzc2libGUgZGlyZWN0bHkgKi8KKwkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgY3R4LT5jb3B5X3NpemUpKSkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmICh1bmxpa2VseShjdHgtPmNvcHlfc2l6ZSA+IFZNWE5FVDNfSERSX0NPUFlfU0laRSkpIHsKKwkJdHEtPnN0YXRzLm92ZXJzaXplZF9oZHIrKzsKKwkJY3R4LT5jb3B5X3NpemUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl0ZGQgPSB0cS0+ZGF0YV9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisKKwltZW1jcHkodGRkLT5kYXRhLCBza2ItPmRhdGEsIGN0eC0+Y29weV9zaXplKTsKKwlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJImNvcHkgJXUgYnl0ZXMgdG8gZGF0YVJpbmdbJXVdXG4iLAorCQljdHgtPmNvcHlfc2l6ZSwgdHEtPnR4X3JpbmcubmV4dDJmaWxsKTsKKwlyZXR1cm4gMTsKKworZXJyOgorCXJldHVybiAtMTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19wcmVwYXJlX3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgc3RydWN0IHZteG5ldDNfdHhfY3R4ICpjdHgpCit7CisJc3RydWN0IHRjcGhkciAqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlpZiAoY3R4LT5pcHY0KSB7CisJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOworCQlpcGgtPmNoZWNrID0gMDsKKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgMCwKKwkJCQkJCSBJUFBST1RPX1RDUCwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGlwdjZoZHIgKmlwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCAwLAorCQkJCQkgICAgICAgSVBQUk9UT19UQ1AsIDApOworCX0KK30KKworCisvKgorICogVHJhbnNtaXRzIGEgcGt0IHRocnUgYSBnaXZlbiB0cQorICogUmV0dXJuczoKKyAqICAgIE5FVERFVl9UWF9PSzogICAgICBkZXNjcmlwdG9ycyBhcmUgc2V0dXAgc3VjY2Vzc2Z1bGx5CisgKiAgICBORVRERVZfVFhfT0s6ICAgICAgZXJyb3Igb2NjdXJlZCwgdGhlIHBrdCBpcyBkcm9wcGVkCisgKiAgICBORVRERVZfVFhfQlVTWTogICAgdHggcmluZyBpcyBmdWxsLCBxdWV1ZSBpcyBzdG9wcGVkCisgKgorICogU2lkZS1lZmZlY3RzOgorICogICAgMS4gdHggcmluZyBtYXkgYmUgY2hhbmdlZAorICogICAgMi4gdHEgc3RhdHMgbWF5IGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkKKyAqICAgIDMuIHNoYXJlZC0+dHhOdW1EZWZlcnJlZCBtYXkgYmUgdXBkYXRlZAorICovCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfdHFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJldDsKKwl1MzIgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgdm14bmV0M190eF9jdHggY3R4OworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjOworCisJLyogY29uc2VydmF0aXZlbHkgZXN0aW1hdGUgIyBvZiBkZXNjcmlwdG9ycyB0byB1c2UgKi8KKwljb3VudCA9IFZNWE5FVDNfVFhEX05FRURFRChza2JfaGVhZGxlbihza2IpKSArCisJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCisJY3R4LmlwdjQgPSAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X250b2hzKEVUSF9QX0lQKSk7CisKKwljdHgubXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpZiAoY3R4Lm1zcykgeworCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkgeworCQkJaWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLAorCQkJCQkJICAgICAgR0ZQX0FUT01JQykgIT0gMCkpIHsKKwkJCQl0cS0+c3RhdHMuZHJvcF90c28rKzsKKwkJCQlnb3RvIGRyb3BfcGt0OworCQkJfQorCQkJdHEtPnN0YXRzLmNvcHlfc2tiX2hlYWRlcisrOworCQl9CisJCXZteG5ldDNfcHJlcGFyZV90c28oc2tiLCAmY3R4KTsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoY291bnQgPiBWTVhORVQzX01BWF9UWERfUEVSX1BLVCkpIHsKKworCQkJLyogbm9uLXRzbyBwa3RzIG11c3Qgbm90IHVzZSBtb3JlIHRoYW4KKwkJCSAqIFZNWE5FVDNfTUFYX1RYRF9QRVJfUEtUIGVudHJpZXMKKwkJCSAqLworCQkJaWYgKHNrYl9saW5lYXJpemUoc2tiKSAhPSAwKSB7CisJCQkJdHEtPnN0YXRzLmRyb3BfdG9vX21hbnlfZnJhZ3MrKzsKKwkJCQlnb3RvIGRyb3BfcGt0OworCQkJfQorCQkJdHEtPnN0YXRzLmxpbmVhcml6ZWQrKzsKKworCQkJLyogcmVjYWxjdWxhdGUgdGhlICMgb2YgZGVzY3JpcHRvcnMgdG8gdXNlICovCisJCQljb3VudCA9IFZNWE5FVDNfVFhEX05FRURFRChza2JfaGVhZGxlbihza2IpKSArIDE7CisJCX0KKwl9CisKKwlyZXQgPSB2bXhuZXQzX3BhcnNlX2FuZF9jb3B5X2hkcihza2IsIHRxLCAmY3R4LCBhZGFwdGVyKTsKKwlpZiAocmV0ID49IDApIHsKKwkJQlVHX09OKHJldCA8PSAwICYmIGN0eC5jb3B5X3NpemUgIT0gMCk7CisJCS8qIGhkcnMgcGFyc2VkLCBjaGVjayBhZ2FpbnN0IG90aGVyIGxpbWl0cyAqLworCQlpZiAoY3R4Lm1zcykgeworCQkJaWYgKHVubGlrZWx5KGN0eC5ldGhfaXBfaGRyX3NpemUgKyBjdHgubDRfaGRyX3NpemUgPgorCQkJCSAgICAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUpKSB7CisJCQkJZ290byBoZHJfdG9vX2JpZzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQkJaWYgKHVubGlrZWx5KGN0eC5ldGhfaXBfaGRyX3NpemUgKworCQkJCQkgICAgIHNrYi0+Y3N1bV9vZmZzZXQgPgorCQkJCQkgICAgIFZNWE5FVDNfTUFYX0NTVU1fT0ZGU0VUKSkgeworCQkJCQlnb3RvIGhkcl90b29fYmlnOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXRxLT5zdGF0cy5kcm9wX2hkcl9pbnNwZWN0X2VycisrOworCQlnb3RvIGRyb3BfcGt0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKGNvdW50ID4gdm14bmV0M19jbWRfcmluZ19kZXNjX2F2YWlsKCZ0cS0+dHhfcmluZykpIHsKKwkJdHEtPnN0YXRzLnR4X3JpbmdfZnVsbCsrOworCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJ0eCBxdWV1ZSBzdG9wcGVkIG9uICVzLCBuZXh0MmNvbXAgJXUiCisJCQkiIG5leHQyZmlsbCAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJdHEtPnR4X3JpbmcubmV4dDJjb21wLCB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCisJCXZteG5ldDNfdHFfc3RvcCh0cSwgYWRhcHRlcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRxLT50eF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwkvKiBmaWxsIHR4IGRlc2NzIHJlbGF0ZWQgdG8gYWRkciAmIGxlbiAqLworCXZteG5ldDNfbWFwX3BrdChza2IsICZjdHgsIHRxLCBhZGFwdGVyLT5wZGV2LCBhZGFwdGVyKTsKKworCS8qIHNldHVwIHRoZSBFT1AgZGVzYyAqLworCWN0eC5lb3BfdHhkLT5kd29yZFszXSA9IFZNWE5FVDNfVFhEX0NRIHwgVk1YTkVUM19UWERfRU9QOworCisJLyogc2V0dXAgdGhlIFNPUCBkZXNjICovCisJZ2Rlc2MgPSBjdHguc29wX3R4ZDsKKwlpZiAoY3R4Lm1zcykgeworCQlnZGVzYy0+dHhkLmhsZW4gPSBjdHguZXRoX2lwX2hkcl9zaXplICsgY3R4Lmw0X2hkcl9zaXplOworCQlnZGVzYy0+dHhkLm9tID0gVk1YTkVUM19PTV9UU087CisJCWdkZXNjLT50eGQubXNzY29mID0gY3R4Lm1zczsKKwkJdHEtPnNoYXJlZC0+dHhOdW1EZWZlcnJlZCArPSAoc2tiLT5sZW4gLSBnZGVzYy0+dHhkLmhsZW4gKworCQkJCQkgICAgIGN0eC5tc3MgLSAxKSAvIGN0eC5tc3M7CisJfSBlbHNlIHsKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCWdkZXNjLT50eGQuaGxlbiA9IGN0eC5ldGhfaXBfaGRyX3NpemU7CisJCQlnZGVzYy0+dHhkLm9tID0gVk1YTkVUM19PTV9DU1VNOworCQkJZ2Rlc2MtPnR4ZC5tc3Njb2YgPSBjdHguZXRoX2lwX2hkcl9zaXplICsKKwkJCQkJICAgIHNrYi0+Y3N1bV9vZmZzZXQ7CisJCX0gZWxzZSB7CisJCQlnZGVzYy0+dHhkLm9tID0gMDsKKwkJCWdkZXNjLT50eGQubXNzY29mID0gMDsKKwkJfQorCQl0cS0+c2hhcmVkLT50eE51bURlZmVycmVkKys7CisJfQorCisJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlnZGVzYy0+dHhkLnRpID0gMTsKKwkJZ2Rlc2MtPnR4ZC50Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwl9CisKKwl3bWIoKTsKKworCS8qIGZpbmFsbHkgZmxpcHMgdGhlIEdFTiBiaXQgb2YgdGhlIFNPUCBkZXNjICovCisJZ2Rlc2MtPmR3b3JkWzJdIF49IFZNWE5FVDNfVFhEX0dFTjsKKwlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJInR4ZFsldV06IFNPUCAweCVMeCAweCV4IDB4JXhcbiIsCisJCSh1MzIpKCh1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICopY3R4LnNvcF90eGQgLQorCQl0cS0+dHhfcmluZy5iYXNlKSwgZ2Rlc2MtPnR4ZC5hZGRyLCBnZGVzYy0+ZHdvcmRbMl0sCisJCWdkZXNjLT5kd29yZFszXSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKHRxLT5zaGFyZWQtPnR4TnVtRGVmZXJyZWQgPj0gdHEtPnNoYXJlZC0+dHhUaHJlc2hvbGQpIHsKKwkJdHEtPnNoYXJlZC0+dHhOdW1EZWZlcnJlZCA9IDA7CisJCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfVFhQUk9ELAorCQkJCSAgICAgICB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCX0KKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXJldHVybiBORVRERVZfVFhfT0s7CisKK2hkcl90b29fYmlnOgorCXRxLT5zdGF0cy5kcm9wX292ZXJzaXplZF9oZHIrKzsKK2Ryb3BfcGt0OgorCXRxLT5zdGF0cy5kcm9wX3RvdGFsKys7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKworc3RhdGljIG5ldGRldl90eF90Cit2bXhuZXQzX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEgPSAmYWRhcHRlci0+dHhfcXVldWU7CisKKwlyZXR1cm4gdm14bmV0M190cV94bWl0KHNrYiwgdHEsIGFkYXB0ZXIsIG5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfcnhfY3N1bShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZGVzYykKK3sKKwlpZiAoIWdkZXNjLT5yY2QuY25jICYmIGFkYXB0ZXItPnJ4Y3N1bSkgeworCQkvKiB0eXBpY2FsIGNhc2U6IFRDUC9VRFAgb3ZlciBJUCBhbmQgYm90aCBjc3VtcyBhcmUgY29ycmVjdCAqLworCQlpZiAoKGdkZXNjLT5kd29yZFszXSAmIFZNWE5FVDNfUkNEX0NTVU1fT0spID09CisJCQkJCQkJVk1YTkVUM19SQ0RfQ1NVTV9PSykgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCUJVR19PTighKGdkZXNjLT5yY2QudGNwIHx8IGdkZXNjLT5yY2QudWRwKSk7CisJCQlCVUdfT04oIShnZGVzYy0+cmNkLnY0ICB8fCBnZGVzYy0+cmNkLnY2KSk7CisJCQlCVUdfT04oZ2Rlc2MtPnJjZC5mcmcpOworCQl9IGVsc2UgeworCQkJaWYgKGdkZXNjLT5yY2QuY3N1bSkgeworCQkJCXNrYi0+Y3N1bSA9IGh0b25zKGdkZXNjLT5yY2QuY3N1bSk7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCQkJfSBlbHNlIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3J4X2Vycm9yKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwgc3RydWN0IFZteG5ldDNfUnhDb21wRGVzYyAqcmNkLAorCQkgc3RydWN0IHZteG5ldDNfcnhfY3R4ICpjdHgsICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXJxLT5zdGF0cy5kcm9wX2VycisrOworCWlmICghcmNkLT5mY3MpCisJCXJxLT5zdGF0cy5kcm9wX2ZjcysrOworCisJcnEtPnN0YXRzLmRyb3BfdG90YWwrKzsKKworCS8qCisJICogV2UgZG8gbm90IHVubWFwIGFuZCBjaGFpbiB0aGUgcnggYnVmZmVyIHRvIHRoZSBza2IuCisJICogV2UgYmFzaWNhbGx5IHByZXRlbmQgdGhpcyBidWZmZXIgaXMgbm90IHVzZWQgYW5kIHdpbGwgYmUgcmVjeWNsZWQKKwkgKiBieSB2bXhuZXQzX3JxX2FsbG9jX3J4X2J1ZigpCisJICovCisKKwkvKgorCSAqIGN0eC0+c2tiIG1heSBiZSBOVUxMIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCB0aGUgb25seSBvbmUKKwkgKiBkZXNjIGZvciB0aGUgcGt0CisJICovCisJaWYgKGN0eC0+c2tiKQorCQlkZXZfa2ZyZWVfc2tiX2lycShjdHgtPnNrYik7CisKKwljdHgtPnNrYiA9IE5VTEw7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19ycV9yeF9jb21wbGV0ZShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCSAgICAgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBpbnQgcXVvdGEpCit7CisJc3RhdGljIHUzMiByeHByb2RfcmVnWzJdID0ge1ZNWE5FVDNfUkVHX1JYUFJPRCwgVk1YTkVUM19SRUdfUlhQUk9EMn07CisJdTMyIG51bV9yeGQgPSAwOworCXN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MgKnJjZDsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9jdHggKmN0eCA9ICZycS0+cnhfY3R4OworCisJcmNkID0gJnJxLT5jb21wX3JpbmcuYmFzZVtycS0+Y29tcF9yaW5nLm5leHQycHJvY10ucmNkOworCXdoaWxlIChyY2QtPmdlbiA9PSBycS0+Y29tcF9yaW5nLmdlbikgeworCQlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlpbnQgbnVtX3RvX2FsbG9jOworCQlzdHJ1Y3QgVm14bmV0M19SeERlc2MgKnJ4ZDsKKwkJdTMyIGlkeCwgcmluZ19pZHg7CisKKwkJaWYgKG51bV9yeGQgPj0gcXVvdGEpIHsKKwkJCS8qIHdlIG1heSBzdG9wIGV2ZW4gYmVmb3JlIHdlIHNlZSB0aGUgRU9QIGRlc2Mgb2YKKwkJCSAqIHRoZSBjdXJyZW50IHBrdAorCQkJICovCisJCQlicmVhazsKKwkJfQorCQludW1fcnhkKys7CisKKwkJaWR4ID0gcmNkLT5yeGRJZHg7CisJCXJpbmdfaWR4ID0gcmNkLT5ycUlEID09IHJxLT5xaWQgPyAwIDogMTsKKworCQlyeGQgPSAmcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmJhc2VbaWR4XS5yeGQ7CisJCXJiaSA9IHJxLT5idWZfaW5mb1tyaW5nX2lkeF0gKyBpZHg7CisKKwkJQlVHX09OKHJ4ZC0+YWRkciAhPSByYmktPmRtYV9hZGRyIHx8IHJ4ZC0+bGVuICE9IHJiaS0+bGVuKTsKKworCQlpZiAodW5saWtlbHkocmNkLT5lb3AgJiYgcmNkLT5lcnIpKSB7CisJCQl2bXhuZXQzX3J4X2Vycm9yKHJxLCByY2QsIGN0eCwgYWRhcHRlcik7CisJCQlnb3RvIHJjZF9kb25lOworCQl9CisKKwkJaWYgKHJjZC0+c29wKSB7IC8qIGZpcnN0IGJ1ZiBvZiB0aGUgcGt0ICovCisJCQlCVUdfT04ocnhkLT5idHlwZSAhPSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEIHx8CisJCQkgICAgICAgcmNkLT5ycUlEICE9IHJxLT5xaWQpOworCisJCQlCVUdfT04ocmJpLT5idWZfdHlwZSAhPSBWTVhORVQzX1JYX0JVRl9TS0IpOworCQkJQlVHX09OKGN0eC0+c2tiICE9IE5VTEwgfHwgcmJpLT5za2IgPT0gTlVMTCk7CisKKwkJCWlmICh1bmxpa2VseShyY2QtPmxlbiA9PSAwKSkgeworCQkJCS8qIFByZXRlbmQgdGhlIHJ4IGJ1ZmZlciBpcyBza2lwcGVkLiAqLworCQkJCUJVR19PTighKHJjZC0+c29wICYmIHJjZC0+ZW9wKSk7CisJCQkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSJyeFJpbmdbJXVdWyV1XSAwIGxlbmd0aFxuIiwKKwkJCQkJcmluZ19pZHgsIGlkeCk7CisJCQkJZ290byByY2RfZG9uZTsKKwkJCX0KKworCQkJY3R4LT5za2IgPSByYmktPnNrYjsKKwkJCXJiaS0+c2tiID0gTlVMTDsKKworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCByYmktPmRtYV9hZGRyLCByYmktPmxlbiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCXNrYl9wdXQoY3R4LT5za2IsIHJjZC0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCUJVR19PTihjdHgtPnNrYiA9PSBOVUxMKTsKKwkJCS8qIG5vbiBTT1AgYnVmZmVyIG11c3QgYmUgdHlwZSAxIGluIG1vc3QgY2FzZXMgKi8KKwkJCWlmIChyYmktPmJ1Zl90eXBlID09IFZNWE5FVDNfUlhfQlVGX1BBR0UpIHsKKwkJCQlCVUdfT04ocnhkLT5idHlwZSAhPSBWTVhORVQzX1JYRF9CVFlQRV9CT0RZKTsKKworCQkJCWlmIChyY2QtPmxlbikgeworCQkJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgICAgIHJiaS0+ZG1hX2FkZHIsIHJiaS0+bGVuLAorCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCQkJdm14bmV0M19hcHBlbmRfZnJhZyhjdHgtPnNrYiwgcmNkLCByYmkpOworCQkJCQlyYmktPnBhZ2UgPSBOVUxMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgb25seSB0aW1lIGEgbm9uLVNPUCBidWZmZXIgaXMgdHlwZSAwIGlzCisJCQkJICogd2hlbiBpdCdzIEVPUCBhbmQgZXJyb3IgZmxhZyBpcyByYWlzZWQsIHdoaWNoCisJCQkJICogaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgorCQkJCSAqLworCQkJCUJVR19PTih0cnVlKTsKKwkJCX0KKwkJfQorCisJCXNrYiA9IGN0eC0+c2tiOworCQlpZiAocmNkLT5lb3ApIHsKKwkJCXNrYi0+bGVuICs9IHNrYi0+ZGF0YV9sZW47CisJCQlza2ItPnRydWVzaXplICs9IHNrYi0+ZGF0YV9sZW47CisKKwkJCXZteG5ldDNfcnhfY3N1bShhZGFwdGVyLCBza2IsCisJCQkJCSh1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICopcmNkKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPm5ldGRldik7CisKKwkJCWlmICh1bmxpa2VseShhZGFwdGVyLT52bGFuX2dycCAmJiByY2QtPnRzKSkgeworCQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsCisJCQkJCQlhZGFwdGVyLT52bGFuX2dycCwgcmNkLT50Y2kpOworCQkJfSBlbHNlIHsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfQorCisJCQlhZGFwdGVyLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJY3R4LT5za2IgPSBOVUxMOworCQl9CisKK3JjZF9kb25lOgorCQkvKiBkZXZpY2UgbWF5IHNraXAgc29tZSByeCBkZXNjcyAqLworCQlycS0+cnhfcmluZ1tyaW5nX2lkeF0ubmV4dDJjb21wID0gaWR4OworCQlWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKHJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmNvbXAsCisJCQkJCSAgcnEtPnJ4X3JpbmdbcmluZ19pZHhdLnNpemUpOworCisJCS8qIHJlZmlsbCByeCBidWZmZXJzIGZyZXF1ZW50bHkgdG8gYXZvaWQgc3RhcnZpbmcgdGhlIGgvdyAqLworCQludW1fdG9fYWxsb2MgPSB2bXhuZXQzX2NtZF9yaW5nX2Rlc2NfYXZhaWwocnEtPnJ4X3JpbmcgKworCQkJCQkJCSAgIHJpbmdfaWR4KTsKKwkJaWYgKHVubGlrZWx5KG51bV90b19hbGxvYyA+IFZNWE5FVDNfUlhfQUxMT0NfVEhSRVNIT0xEKHJxLAorCQkJCQkJCXJpbmdfaWR4LCBhZGFwdGVyKSkpIHsKKwkJCXZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKHJxLCByaW5nX2lkeCwgbnVtX3RvX2FsbG9jLAorCQkJCQkJYWRhcHRlcik7CisKKwkJCS8qIGlmIG5lZWRlZCwgdXBkYXRlIHRoZSByZWdpc3RlciAqLworCQkJaWYgKHVubGlrZWx5KHJxLT5zaGFyZWQtPnVwZGF0ZVJ4UHJvZCkpIHsKKwkJCQlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsCisJCQkJCXJ4cHJvZF9yZWdbcmluZ19pZHhdICsgcnEtPnFpZCAqIDgsCisJCQkJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmZpbGwpOworCQkJCXJxLT51bmNvbW1pdHRlZFtyaW5nX2lkeF0gPSAwOworCQkJfQorCQl9CisKKwkJdm14bmV0M19jb21wX3JpbmdfYWR2X25leHQycHJvYygmcnEtPmNvbXBfcmluZyk7CisJCXJjZCA9ICZycS0+Y29tcF9yaW5nLmJhc2VbcnEtPmNvbXBfcmluZy5uZXh0MnByb2NdLnJjZDsKKwl9CisKKwlyZXR1cm4gbnVtX3J4ZDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19ycV9jbGVhbnVwKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgaSwgcmluZ19pZHg7CisJc3RydWN0IFZteG5ldDNfUnhEZXNjICpyeGQ7CisKKwlmb3IgKHJpbmdfaWR4ID0gMDsgcmluZ19pZHggPCAyOyByaW5nX2lkeCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1tyaW5nX2lkeF0uc2l6ZTsgaSsrKSB7CisJCQlyeGQgPSAmcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmJhc2VbaV0ucnhkOworCisJCQlpZiAocnhkLT5idHlwZSA9PSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEICYmCisJCQkJCXJxLT5idWZfaW5mb1tyaW5nX2lkeF1baV0uc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCByeGQtPmFkZHIsCisJCQkJCQkgcnhkLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnNrYik7CisJCQkJcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5za2IgPSBOVUxMOworCQkJfSBlbHNlIGlmIChyeGQtPmJ0eXBlID09IFZNWE5FVDNfUlhEX0JUWVBFX0JPRFkgJiYKKwkJCQkJcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5wYWdlKSB7CisJCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcnhkLT5hZGRyLAorCQkJCQkgICAgICAgcnhkLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcHV0X3BhZ2UocnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5wYWdlKTsKKwkJCQlycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnBhZ2UgPSBOVUxMOworCQkJfQorCQl9CisKKwkJcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmZpbGwgPQorCQkJCQlycS0+cnhfcmluZ1tyaW5nX2lkeF0ubmV4dDJjb21wID0gMDsKKwkJcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSA9IDA7CisJfQorCisJcnEtPmNvbXBfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCXJxLT5jb21wX3JpbmcubmV4dDJwcm9jID0gMDsKK30KKworCit2b2lkIHZteG5ldDNfcnFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWludCBqOworCisJLyogYWxsIHJ4IGJ1ZmZlcnMgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBmcmVlZCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKHJxLT5idWZfaW5mb1tpXSkgeworCQkJZm9yIChqID0gMDsgaiA8IHJxLT5yeF9yaW5nW2ldLnNpemU7IGorKykKKwkJCQlCVUdfT04ocnEtPmJ1Zl9pbmZvW2ldW2pdLnBhZ2UgIT0gTlVMTCk7CisJCX0KKwl9CisKKworCWtmcmVlKHJxLT5idWZfaW5mb1swXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChycS0+cnhfcmluZ1tpXS5iYXNlKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxLT5yeF9yaW5nW2ldLnNpemUKKwkJCQkJICAgICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4RGVzYyksCisJCQkJCSAgICBycS0+cnhfcmluZ1tpXS5iYXNlLAorCQkJCQkgICAgcnEtPnJ4X3JpbmdbaV0uYmFzZVBBKTsKKwkJCXJxLT5yeF9yaW5nW2ldLmJhc2UgPSBOVUxMOworCQl9CisJCXJxLT5idWZfaW5mb1tpXSA9IE5VTEw7CisJfQorCisJaWYgKHJxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxLT5jb21wX3Jpbmcuc2l6ZSAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKSwKKwkJCQkgICAgcnEtPmNvbXBfcmluZy5iYXNlLCBycS0+Y29tcF9yaW5nLmJhc2VQQSk7CisJCXJxLT5jb21wX3JpbmcuYmFzZSA9IE5VTEw7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcnFfaW5pdChzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgICphZGFwdGVyKQoreworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBidWZfaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1swXS5zaXplOyBpKyspIHsKKworCQkvKiAxc3QgYnVmIGZvciBhIHBrdCBpcyBza2J1ZmYgKi8KKwkJaWYgKGkgJSBhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCA9PSAwKSB7CisJCQlycS0+YnVmX2luZm9bMF1baV0uYnVmX3R5cGUgPSBWTVhORVQzX1JYX0JVRl9TS0I7CisJCQlycS0+YnVmX2luZm9bMF1baV0ubGVuID0gYWRhcHRlci0+c2tiX2J1Zl9zaXplOworCQl9IGVsc2UgeyAvKiBzdWJzZXF1ZW50IGJ1ZnMgZm9yIGEgcGt0IGlzIGZyYWcgKi8KKwkJCXJxLT5idWZfaW5mb1swXVtpXS5idWZfdHlwZSA9IFZNWE5FVDNfUlhfQlVGX1BBR0U7CisJCQlycS0+YnVmX2luZm9bMF1baV0ubGVuID0gUEFHRV9TSVpFOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1sxXS5zaXplOyBpKyspIHsKKwkJcnEtPmJ1Zl9pbmZvWzFdW2ldLmJ1Zl90eXBlID0gVk1YTkVUM19SWF9CVUZfUEFHRTsKKwkJcnEtPmJ1Zl9pbmZvWzFdW2ldLmxlbiA9IFBBR0VfU0laRTsKKwl9CisKKwkvKiByZXNldCBpbnRlcm5hbCBzdGF0ZSBhbmQgYWxsb2NhdGUgYnVmZmVycyBmb3IgYm90aCByaW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcnEtPnJ4X3JpbmdbaV0ubmV4dDJmaWxsID0gcnEtPnJ4X3JpbmdbaV0ubmV4dDJjb21wID0gMDsKKwkJcnEtPnVuY29tbWl0dGVkW2ldID0gMDsKKworCQltZW1zZXQocnEtPnJ4X3JpbmdbaV0uYmFzZSwgMCwgcnEtPnJ4X3JpbmdbaV0uc2l6ZSAqCisJCSAgICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhEZXNjKSk7CisJCXJxLT5yeF9yaW5nW2ldLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJfQorCWlmICh2bXhuZXQzX3JxX2FsbG9jX3J4X2J1ZihycSwgMCwgcnEtPnJ4X3JpbmdbMF0uc2l6ZSAtIDEsCisJCQkJICAgIGFkYXB0ZXIpID09IDApIHsKKwkJLyogYXQgbGVhc3QgaGFzIDEgcnggYnVmZmVyIGZvciB0aGUgMXN0IHJpbmcgKi8KKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKHJxLCAxLCBycS0+cnhfcmluZ1sxXS5zaXplIC0gMSwgYWRhcHRlcik7CisKKwkvKiByZXNldCB0aGUgY29tcCByaW5nICovCisJcnEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworCW1lbXNldChycS0+Y29tcF9yaW5nLmJhc2UsIDAsIHJxLT5jb21wX3Jpbmcuc2l6ZSAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKSk7CisJcnEtPmNvbXBfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCisJLyogcmVzZXQgcnhjdHggKi8KKwlycS0+cnhfY3R4LnNrYiA9IE5VTEw7CisKKwkvKiBzdGF0cyBhcmUgbm90IHJlc2V0ICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19ycV9jcmVhdGUoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXNpemVfdCBzejsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqYmk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisKKwkJc3ogPSBycS0+cnhfcmluZ1tpXS5zaXplICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4RGVzYyk7CisJCXJxLT5yeF9yaW5nW2ldLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzeiwKKwkJCQkJCQkmcnEtPnJ4X3JpbmdbaV0uYmFzZVBBKTsKKwkJaWYgKCFycS0+cnhfcmluZ1tpXS5iYXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcnggcmluZyAlZFxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGkpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlzeiA9IHJxLT5jb21wX3Jpbmcuc2l6ZSAqIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKTsKKwlycS0+Y29tcF9yaW5nLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzeiwKKwkJCQkJCSAgJnJxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwlpZiAoIXJxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcnggY29tcCByaW5nXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJc3ogPSBzaXplb2Yoc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8pICogKHJxLT5yeF9yaW5nWzBdLnNpemUgKworCQkJCQkJICAgcnEtPnJ4X3JpbmdbMV0uc2l6ZSk7CisJYmkgPSBrbWFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByeCBidWZpbmZvXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCW1lbXNldChiaSwgMCwgc3opOworCXJxLT5idWZfaW5mb1swXSA9IGJpOworCXJxLT5idWZfaW5mb1sxXSA9IGJpICsgcnEtPnJ4X3JpbmdbMF0uc2l6ZTsKKworCXJldHVybiAwOworCitlcnI6CisJdm14bmV0M19ycV9kZXN0cm95KHJxLCBhZGFwdGVyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX2RvX3BvbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgaW50IGJ1ZGdldCkKK3sKKwlpZiAodW5saWtlbHkoYWRhcHRlci0+c2hhcmVkLT5lY3IpKQorCQl2bXhuZXQzX3Byb2Nlc3NfZXZlbnRzKGFkYXB0ZXIpOworCisJdm14bmV0M190cV90eF9jb21wbGV0ZSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCXJldHVybiB2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlciwgYnVkZ2V0KTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2YobmFwaSwKKwkJCQkJICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyLCBuYXBpKTsKKwlpbnQgcnhkX2RvbmU7CisKKwlyeGRfZG9uZSA9IHZteG5ldDNfZG9fcG9sbChhZGFwdGVyLCBidWRnZXQpOworCisJaWYgKHJ4ZF9kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgMCk7CisJfQorCXJldHVybiByeGRfZG9uZTsKK30KKworCisvKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3Igdm14bmV0MyAgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAordm14bmV0M19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHVubGlrZWx5KGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0lOVFgpKSB7CisJCXUzMiBpY3IgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfSUNSKTsKKwkJaWYgKHVubGlrZWx5KGljciA9PSAwKSkKKwkJCS8qIG5vdCBvdXJzICovCisJCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisKKwkvKiBkaXNhYmxlIGludHIgaWYgbmVlZGVkICovCisJaWYgKGFkYXB0ZXItPmludHIubWFza19tb2RlID09IFZNWE5FVDNfSU1NX0FDVElWRSkKKwkJdm14bmV0M19kaXNhYmxlX2ludHIoYWRhcHRlciwgMCk7CisKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisKKworLyogbmV0cG9sbCBjYWxsYmFjay4gKi8KK3N0YXRpYyB2b2lkCit2bXhuZXQzX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaXJxOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkKKwkJaXJxID0gYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0udmVjdG9yOworCWVsc2UKKyNlbmRpZgorCQlpcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CisKKwlkaXNhYmxlX2lycShpcnEpOworCXZteG5ldDNfaW50cihpcnEsIG5ldGRldik7CisJZW5hYmxlX2lycShpcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcmVxdWVzdF9pcnFzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSVgpIHsKKwkJLyogd2Ugb25seSB1c2UgMSBNU0ktWCB2ZWN0b3IgKi8KKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0udmVjdG9yLAorCQkJCSAgdm14bmV0M19pbnRyLCAwLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYpOworCX0gZWxzZQorI2VuZGlmCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSSkgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIHZteG5ldDNfaW50ciwgMCwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKwl9IGVsc2UgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIHZteG5ldDNfaW50ciwKKwkJCQkgIElSUUZfU0hBUkVELCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYpOworCX0KKworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVzIChpbnRyIHR5cGU6JWQpLCBlcnJvciIKKwkJICAgICAgICI6JWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+aW50ci50eXBlLCBlcnIpOworCisKKwlpZiAoIWVycikgeworCQlpbnQgaTsKKwkJLyogaW5pdCBvdXIgaW50ciBzZXR0aW5ncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJCWFkYXB0ZXItPmludHIubW9kX2xldmVsc1tpXSA9IFVQVDFfSU1MX0FEQVBUSVZFOworCisJCS8qIG5leHQgc2V0dXAgaW50ciBpbmRleCBmb3IgYWxsIGludHIgc291cmNlcyAqLworCQlhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHggPSAwOworCQlhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHggPSAwOworCQlhZGFwdGVyLT5pbnRyLmV2ZW50X2ludHJfaWR4ID0gMDsKKworCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ciB0eXBlICV1LCBtb2RlICV1LCAldSB2ZWN0b3JzICIKKwkJICAgICAgICJhbGxvY2F0ZWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+aW50ci50eXBlLAorCQkgICAgICAgYWRhcHRlci0+aW50ci5tYXNrX21vZGUsIGFkYXB0ZXItPmludHIubnVtX2ludHJzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2ZyZWVfaXJxcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCUJVR19PTihhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9BVVRPIHx8CisJICAgICAgIGFkYXB0ZXItPmludHIubnVtX2ludHJzIDw9IDApOworCisJc3dpdGNoIChhZGFwdGVyLT5pbnRyLnR5cGUpIHsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWNhc2UgVk1YTkVUM19JVF9NU0lYOgorCXsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCisJCQlmcmVlX2lycShhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJIGFkYXB0ZXItPm5ldGRldik7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWNhc2UgVk1YTkVUM19JVF9NU0k6CisJCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBWTVhORVQzX0lUX0lOVFg6CisJCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKHRydWUpOworCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICpzaGFyZWQgPSBhZGFwdGVyLT5zaGFyZWQ7CisJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCisJaWYgKGdycCkgeworCQkvKiBhZGQgdmxhbiByeCBzdHJpcHBpbmcuICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSB7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBWbXhuZXQzX0RTRGV2UmVhZCAqZGV2UmVhZCA9ICZzaGFyZWQtPmRldlJlYWQ7CisJCQlhZGFwdGVyLT52bGFuX2dycCA9IGdycDsKKworCQkJLyogdXBkYXRlIEZFQVRVUkVTIHRvIGRldmljZSAqLworCQkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhWTEFOOworCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJCQkvKgorCQkJICogIENsZWFyIGVudGlyZSB2ZlRhYmxlOyB0aGVuIGVuYWJsZSB1bnRhZ2dlZCBwa3RzLgorCQkJICogIE5vdGU6IHNldHRpbmcgb25lIGVudHJ5IGluIHZmVGFibGUgdG8gbm9uLXplcm8gdHVybnMKKwkJCSAqICBvbiBWTEFOIHJ4IGZpbHRlcmluZy4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IFZNWE5FVDNfVkZUX1NJWkU7IGkrKykKKwkJCQl2ZlRhYmxlW2ldID0gMDsKKworCQkJVk1YTkVUM19TRVRfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCAwKTsKKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB2bGFuX3J4X3JlZ2lzdGVyIHdoZW4gZGV2aWNlIGhhcyAiCisJCQkgICAgICAgIm5vIE5FVElGX0ZfSFdfVkxBTl9SWFxuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlbW92ZSB2bGFuIHJ4IHN0cmlwcGluZy4gKi8KKwkJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKKwkJYWRhcHRlci0+dmxhbl9ncnAgPSBOVUxMOworCisJCWlmIChkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzICYgVVBUMV9GX1JYVkxBTikgeworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBWTVhORVQzX1ZGVF9TSVpFOyBpKyspIHsKKwkJCQkvKiBjbGVhciBlbnRpcmUgdmZUYWJsZTsgdGhpcyBhbHNvIGRpc2FibGVzCisJCQkJICogVkxBTiByeCBmaWx0ZXJpbmcKKwkJCQkgKi8KKwkJCQl2ZlRhYmxlW2ldID0gMDsKKwkJCX0KKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisKKwkJCS8qIHVwZGF0ZSBGRUFUVVJFUyB0byBkZXZpY2UgKi8KKwkJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgJj0gflVQVDFfRl9SWFZMQU47CisJCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19yZXN0b3JlX3ZsYW4oc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+dmxhbl9ncnApIHsKKwkJdTE2IHZpZDsKKwkJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCQlib29sIGFjdGl2ZVZsYW4gPSBmYWxzZTsKKworCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKHZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGFuX2dycCwgdmlkKSkgeworCQkJCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwkJCQlhY3RpdmVWbGFuID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZiAoYWN0aXZlVmxhbikgeworCQkJLyogY29udGludWUgdG8gYWxsb3cgdW50YWdnZWQgcGt0cyAqLworCQkJVk1YTkVUM19TRVRfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCAwKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgKnZmVGFibGUgPSBhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mLnZmVGFibGU7CisKKwlWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCk7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiAqdmZUYWJsZSA9IGFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmYudmZUYWJsZTsKKworCVZNWE5FVDNfQ0xFQVJfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCB2aWQpOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9WTEFOX0ZJTFRFUlMpOworfQorCisKK3N0YXRpYyB1OCAqCit2bXhuZXQzX2NvcHlfbWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1OCAqYnVmID0gTlVMTDsKKwl1MzIgc3ogPSBuZXRkZXYtPm1jX2NvdW50ICogRVRIX0FMRU47CisKKwkvKiBzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYubWZUYWJsZUxlbiBpcyB1MTYuICovCisJaWYgKHN6IDw9IDB4ZmZmZikgeworCQkvKiBXZSBtYXkgYmUgY2FsbGVkIHdpdGggQkggZGlzYWJsZWQgKi8KKwkJYnVmID0ga21hbGxvYyhzeiwgR0ZQX0FUT01JQyk7CisJCWlmIChidWYpIHsKKwkJCWludCBpOworCQkJc3RydWN0IGRldl9tY19saXN0ICptYyA9IG5ldGRldi0+bWNfbGlzdDsKKworCQkJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJCUJVR19PTighbWMpOworCQkJCW1lbWNweShidWYgKyBpICogRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwKKwkJCQkgICAgICAgRVRIX0FMRU4pOworCQkJCW1jID0gbWMtPm5leHQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGJ1ZjsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19zZXRfbWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYgKnJ4Q29uZiA9CisJCQkJCSZhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mOworCXU4ICpuZXdfdGFibGUgPSBOVUxMOworCXUzMiBuZXdfbW9kZSA9IFZNWE5FVDNfUlhNX1VDQVNUOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fUFJPTUlTQzsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQkNBU1Q7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQUxMX01VTFRJOworCWVsc2UKKwkJaWYgKG5ldGRldi0+bWNfY291bnQgPiAwKSB7CisJCQluZXdfdGFibGUgPSB2bXhuZXQzX2NvcHlfbWMobmV0ZGV2KTsKKwkJCWlmIChuZXdfdGFibGUpIHsKKwkJCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9NQ0FTVDsKKwkJCQlyeENvbmYtPm1mVGFibGVMZW4gPSBuZXRkZXYtPm1jX2NvdW50ICoKKwkJCQkJCSAgICAgRVRIX0FMRU47CisJCQkJcnhDb25mLT5tZlRhYmxlUEEgPSB2aXJ0X3RvX3BoeXMobmV3X3RhYmxlKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZhaWxlZCB0byBjb3B5IG1jYXN0IGxpc3QiCisJCQkJICAgICAgICIsIHNldHRpbmcgQUxMX01VTFRJXG4iLCBuZXRkZXYtPm5hbWUpOworCQkJCW5ld19tb2RlIHw9IFZNWE5FVDNfUlhNX0FMTF9NVUxUSTsKKwkJCX0KKwkJfQorCisKKwlpZiAoIShuZXdfbW9kZSAmIFZNWE5FVDNfUlhNX01DQVNUKSkgeworCQlyeENvbmYtPm1mVGFibGVMZW4gPSAwOworCQlyeENvbmYtPm1mVGFibGVQQSA9IDA7CisJfQorCisJaWYgKG5ld19tb2RlICE9IHJ4Q29uZi0+cnhNb2RlKSB7CisJCXJ4Q29uZi0+cnhNb2RlID0gbmV3X21vZGU7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfUlhfTU9ERSk7CisJfQorCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX01BQ19GSUxURVJTKTsKKworCWtmcmVlKG5ld190YWJsZSk7Cit9CisKKworLyoKKyAqICAgU2V0IHVwIGRyaXZlcl9zaGFyZWQgYmFzZWQgb24gc2V0dGluZ3MgaW4gYWRhcHRlci4KKyAqLworCitzdGF0aWMgdm9pZAordm14bmV0M19zZXR1cF9kcml2ZXJfc2hhcmVkKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICpzaGFyZWQgPSBhZGFwdGVyLT5zaGFyZWQ7CisJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKKwlzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ29uZiAqdHFjOworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mICpycWM7CisJaW50IGk7CisKKwltZW1zZXQoc2hhcmVkLCAwLCBzaXplb2YoKnNoYXJlZCkpOworCisJLyogZHJpdmVyIHNldHRpbmdzICovCisJc2hhcmVkLT5tYWdpYyA9IFZNWE5FVDNfUkVWMV9NQUdJQzsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8udmVyc2lvbiA9IFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNOworCWRldlJlYWQtPm1pc2MuZHJpdmVySW5mby5nb3MuZ29zQml0cyA9IChzaXplb2Yodm9pZCAqKSA9PSA0ID8KKwkJCQlWTVhORVQzX0dPU19CSVRTXzMyIDogVk1YTkVUM19HT1NfQklUU182NCk7CisJZGV2UmVhZC0+bWlzYy5kcml2ZXJJbmZvLmdvcy5nb3NUeXBlID0gVk1YTkVUM19HT1NfVFlQRV9MSU5VWDsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8udm14bmV0M1JldlNwdCA9IDE7CisJZGV2UmVhZC0+bWlzYy5kcml2ZXJJbmZvLnVwdFZlclNwdCA9IDE7CisKKwlkZXZSZWFkLT5taXNjLmRkUEEgPSB2aXJ0X3RvX3BoeXMoYWRhcHRlcik7CisJZGV2UmVhZC0+bWlzYy5kZExlbiA9IHNpemVvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyKTsKKworCS8qIHNldCB1cCBmZWF0dXJlIGZsYWdzICovCisJaWYgKGFkYXB0ZXItPnJ4Y3N1bSkKKwkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhDU1VNOworCisJaWYgKGFkYXB0ZXItPmxybykgeworCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9MUk87CisJCWRldlJlYWQtPm1pc2MubWF4TnVtUnhTRyA9IDEgKyBNQVhfU0tCX0ZSQUdTOworCX0KKwlpZiAoKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJCQkmJiBhZGFwdGVyLT52bGFuX2dycCkgeworCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9SWFZMQU47CisJfQorCisJZGV2UmVhZC0+bWlzYy5tdHUgPSBhZGFwdGVyLT5uZXRkZXYtPm10dTsKKwlkZXZSZWFkLT5taXNjLnF1ZXVlRGVzY1BBID0gYWRhcHRlci0+cXVldWVfZGVzY19wYTsKKwlkZXZSZWFkLT5taXNjLnF1ZXVlRGVzY0xlbiA9IHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKTsKKworCS8qIHR4IHF1ZXVlIHNldHRpbmdzICovCisJQlVHX09OKGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuYmFzZSA9PSBOVUxMKTsKKworCWRldlJlYWQtPm1pc2MubnVtVHhRdWV1ZXMgPSAxOworCXRxYyA9ICZhZGFwdGVyLT50cWRfc3RhcnQtPmNvbmY7CisJdHFjLT50eFJpbmdCYXNlUEEgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuYmFzZVBBOworCXRxYy0+ZGF0YVJpbmdCYXNlUEEgPSBhZGFwdGVyLT50eF9xdWV1ZS5kYXRhX3JpbmcuYmFzZVBBOworCXRxYy0+Y29tcFJpbmdCYXNlUEEgPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcuYmFzZVBBOworCXRxYy0+ZGRQQSAgICAgICAgICAgPSB2aXJ0X3RvX3BoeXMoYWRhcHRlci0+dHhfcXVldWUuYnVmX2luZm8pOworCXRxYy0+dHhSaW5nU2l6ZSAgICAgPSBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemU7CisJdHFjLT5kYXRhUmluZ1NpemUgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLmRhdGFfcmluZy5zaXplOworCXRxYy0+Y29tcFJpbmdTaXplICAgPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZTsKKwl0cWMtPmRkTGVuICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvKSAqCisJCQkgICAgICB0cWMtPnR4UmluZ1NpemU7CisJdHFjLT5pbnRySWR4ICAgICAgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5pbnRyX2lkeDsKKworCS8qIHJ4IHF1ZXVlIHNldHRpbmdzICovCisJZGV2UmVhZC0+bWlzYy5udW1SeFF1ZXVlcyA9IDE7CisJcnFjID0gJmFkYXB0ZXItPnJxZF9zdGFydC0+Y29uZjsKKwlycWMtPnJ4UmluZ0Jhc2VQQVswXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uYmFzZVBBOworCXJxYy0+cnhSaW5nQmFzZVBBWzFdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5iYXNlUEE7CisJcnFjLT5jb21wUmluZ0Jhc2VQQSAgPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuYmFzZVBBOworCXJxYy0+ZGRQQSAgICAgICAgICAgID0gdmlydF90b19waHlzKGFkYXB0ZXItPnJ4X3F1ZXVlLmJ1Zl9pbmZvKTsKKwlycWMtPnJ4UmluZ1NpemVbMF0gICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZTsKKwlycWMtPnJ4UmluZ1NpemVbMV0gICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZTsKKwlycWMtPmNvbXBSaW5nU2l6ZSAgICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5zaXplOworCXJxYy0+ZGRMZW4gICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvKSAqCisJCQkgICAgICAgKHJxYy0+cnhSaW5nU2l6ZVswXSArIHJxYy0+cnhSaW5nU2l6ZVsxXSk7CisJcnFjLT5pbnRySWR4ICAgICAgICAgPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHg7CisKKwkvKiBpbnRyIHNldHRpbmdzICovCisJZGV2UmVhZC0+aW50ckNvbmYuYXV0b01hc2sgPSBhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9PQorCQkJCSAgICAgVk1YTkVUM19JTU1fQVVUTzsKKwlkZXZSZWFkLT5pbnRyQ29uZi5udW1JbnRycyA9IGFkYXB0ZXItPmludHIubnVtX2ludHJzOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5pbnRyLm51bV9pbnRyczsgaSsrKQorCQlkZXZSZWFkLT5pbnRyQ29uZi5tb2RMZXZlbHNbaV0gPSBhZGFwdGVyLT5pbnRyLm1vZF9sZXZlbHNbaV07CisKKwlkZXZSZWFkLT5pbnRyQ29uZi5ldmVudEludHJJZHggPSBhZGFwdGVyLT5pbnRyLmV2ZW50X2ludHJfaWR4OworCisJLyogcnggZmlsdGVyIHNldHRpbmdzICovCisJZGV2UmVhZC0+cnhGaWx0ZXJDb25mLnJ4TW9kZSA9IDA7CisJdm14bmV0M19yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CisJLyogdGhlIHJlc3QgYXJlIGFscmVhZHkgemVyb2VkICovCit9CisKKworaW50Cit2bXhuZXQzX2FjdGl2YXRlX2RldihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnI7CisJdTMyIHJldDsKKworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkiJXM6IHNrYl9idWZfc2l6ZSAlZCwgcnhfYnVmX3Blcl9wa3QgJWQsIHJpbmcgc2l6ZXMiCisJCSIgJXUgJXUgJXVcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c2tiX2J1Zl9zaXplLAorCQlhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCwgYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplLAorCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUsCisJCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZSk7CisKKwl2bXhuZXQzX3RxX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwllcnIgPSB2bXhuZXQzX3JxX2luaXQoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgcnggcXVldWUgZm9yICVzOiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBycV9lcnI7CisJfQorCisJZXJyID0gdm14bmV0M19yZXF1ZXN0X2lycXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXR1cCBpcnEgZm9yICVzOiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBpcnFfZXJyOworCX0KKworCXZteG5ldDNfc2V0dXBfZHJpdmVyX3NoYXJlZChhZGFwdGVyKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBTCwKKwkJCSAgICAgICBWTVhORVQzX0dFVF9BRERSX0xPKGFkYXB0ZXItPnNoYXJlZF9wYSkpOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBSCwKKwkJCSAgICAgICBWTVhORVQzX0dFVF9BRERSX0hJKGFkYXB0ZXItPnNoYXJlZF9wYSkpOworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfQUNUSVZBVEVfREVWKTsKKwlyZXQgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhY3RpdmF0ZSBkZXYgJXM6IGVycm9yICV1XG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGFjdGl2YXRlX2VycjsKKwl9CisJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19SWFBST0QsCisJCQkgICAgICAgYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmZpbGwpOworCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfUlhQUk9EMiwKKwkJCSAgICAgICBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLm5leHQyZmlsbCk7CisKKwkvKiBBcHBseSB0aGUgcnggZmlsdGVyIHNldHRpbnMgbGFzdC4gKi8KKwl2bXhuZXQzX3NldF9tYyhhZGFwdGVyLT5uZXRkZXYpOworCisJLyoKKwkgKiBDaGVjayBsaW5rIHN0YXRlIHdoZW4gZmlyc3QgYWN0aXZhdGluZyBkZXZpY2UuIEl0IHdpbGwgc3RhcnQgdGhlCisJICogdHggcXVldWUgaWYgdGhlIGxpbmsgaXMgdXAuCisJICovCisJdm14bmV0M19jaGVja19saW5rKGFkYXB0ZXIpOworCisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworCXZteG5ldDNfZW5hYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKKwljbGVhcl9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJuIDA7CisKK2FjdGl2YXRlX2VycjoKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0RTQUwsIDApOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBSCwgMCk7CisJdm14bmV0M19mcmVlX2lycXMoYWRhcHRlcik7CitpcnFfZXJyOgorcnFfZXJyOgorCS8qIGZyZWUgdXAgYnVmZmVycyB3ZSBhbGxvY2F0ZWQgKi8KKwl2bXhuZXQzX3JxX2NsZWFudXAoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3ZvaWQKK3ZteG5ldDNfcmVzZXRfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX1JFU0VUX0RFVik7Cit9CisKKworaW50Cit2bXhuZXQzX3F1aWVzY2VfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9RVUlFU0NFX0RFVik7CisJdm14bmV0M19kaXNhYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKKworCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJbmV0aWZfdHhfZGlzYWJsZShhZGFwdGVyLT5uZXRkZXYpOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPm5ldGRldik7CisKKwl2bXhuZXQzX3RxX2NsZWFudXAoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3JxX2NsZWFudXAoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX2ZyZWVfaXJxcyhhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M193cml0ZV9tYWNfYWRkcihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSAqKHUzMiAqKW1hYzsKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX01BQ0wsIHRtcCk7CisKKwl0bXAgPSAobWFjWzVdIDw8IDgpIHwgbWFjWzRdOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfTUFDSCwgdG1wKTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJdm14bmV0M193cml0ZV9tYWNfYWRkcihhZGFwdGVyLCBhZGRyLT5zYV9kYXRhKTsKKworCXJldHVybiAwOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09IGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIHJvdXRpbmVzID09PT09PT09PT09PSAqLworCitzdGF0aWMgaW50Cit2bXhuZXQzX2FsbG9jX3BjaV9yZXNvdXJjZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgYm9vbCAqZG1hNjQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQsIG1taW9fbGVuOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZW5hYmxlIGFkYXB0ZXIgJXM6IGVycm9yICVkXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldiksIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgPT0gMCkgeworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrIGZhaWxlZCAiCisJCQkgICAgICAgImZvciBhZGFwdGVyICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJfc2V0X21hc2s7CisJCX0KKwkJKmRtYTY0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInBjaV9zZXRfZG1hX21hc2sgZmFpbGVkIGZvciBhZGFwdGVyICIKKwkJCSAgICAgICAiJXNcbiIsCXBjaV9uYW1lKHBkZXYpKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycl9zZXRfbWFzazsKKwkJfQorCQkqZG1hNjQgPSBmYWxzZTsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsICgxIDw8IDIpIC0gMSwKKwkJCQkJICAgdm14bmV0M19kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbiBmb3IgYWRhcHRlciAlczogIgorCQkgICAgICAgImVycm9yICVkXG4iLCBwY2lfbmFtZShwZGV2KSwgZXJyKTsKKwkJZ290byBlcnJfc2V0X21hc2s7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlhZGFwdGVyLT5od19hZGRyMCA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghYWRhcHRlci0+aHdfYWRkcjApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIGJhcjAgZm9yIGFkYXB0ZXIgJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJYWRhcHRlci0+aHdfYWRkcjEgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlpZiAoIWFkYXB0ZXItPmh3X2FkZHIxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBiYXIxIGZvciBhZGFwdGVyICVzXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9iYXIxOworCX0KKwlyZXR1cm4gMDsKKworZXJyX2JhcjE6CisJaW91bm1hcChhZGFwdGVyLT5od19hZGRyMCk7CitlcnJfaW9yZW1hcDoKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsICgxIDw8IDIpIC0gMSk7CitlcnJfc2V0X21hc2s6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZnJlZV9wY2lfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKCFhZGFwdGVyLT5wZGV2KTsKKworCWlvdW5tYXAoYWRhcHRlci0+aHdfYWRkcjApOworCWlvdW5tYXAoYWRhcHRlci0+aHdfYWRkcjEpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoYWRhcHRlci0+cGRldiwgKDEgPDwgMikgLSAxKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoYWRhcHRlci0+cGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXNpemVfdCBzejsKKworCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA8PSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkUgLQorCQkJCSAgICBWTVhORVQzX01BWF9FVEhfSERSX1NJWkUpIHsKKwkJYWRhcHRlci0+c2tiX2J1Zl9zaXplID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgKworCQkJCQlWTVhORVQzX01BWF9FVEhfSERSX1NJWkU7CisJCWlmIChhZGFwdGVyLT5za2JfYnVmX3NpemUgPCBWTVhORVQzX01JTl9UMF9CVUZfU0laRSkKKwkJCWFkYXB0ZXItPnNrYl9idWZfc2l6ZSA9IFZNWE5FVDNfTUlOX1QwX0JVRl9TSVpFOworCisJCWFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ID0gMTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5za2JfYnVmX3NpemUgPSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkU7CisJCXN6ID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgLSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkUgKworCQkJCQkgICAgVk1YTkVUM19NQVhfRVRIX0hEUl9TSVpFOworCQlhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCA9IDEgKyAoc3ogKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwl9CisKKwkvKgorCSAqIGZvciBzaW1wbGljaXR5LCBmb3JjZSB0aGUgcmluZzAgc2l6ZSB0byBiZSBhIG11bHRpcGxlIG9mCisJICogcnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTgorCSAqLworCXN6ID0gYWRhcHRlci0+cnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTjsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSAoYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJICAgICBzeiAtIDEpIC8gc3ogKiBzejsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSBtaW5fdCh1MzIsCisJCQkJCSAgICBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUsCisJCQkJCSAgICBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgLyBzeiAqIHN6KTsKK30KKworCitpbnQKK3ZteG5ldDNfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1MzIgdHhfcmluZ19zaXplLAorCQkgICAgICB1MzIgcnhfcmluZ19zaXplLCB1MzIgcnhfcmluZzJfc2l6ZSkKK3sKKwlpbnQgZXJyOworCisJYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplICAgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuZGF0YV9yaW5nLnNpemUgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLnNpemUgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuc2hhcmVkID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+Y3RybDsKKwlhZGFwdGVyLT50eF9xdWV1ZS5zdG9wcGVkID0gdHJ1ZTsKKwllcnIgPSB2bXhuZXQzX3RxX2NyZWF0ZSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSByeF9yaW5nX3NpemU7CisJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplID0gcnhfcmluZzJfc2l6ZTsKKwl2bXhuZXQzX2FkanVzdF9yeF9yaW5nX3NpemUoYWRhcHRlcik7CisJYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUgID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQgID0gMDsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQyID0gMTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5zaGFyZWQgPSAmYWRhcHRlci0+cnFkX3N0YXJ0LT5jdHJsOworCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJaWYgKGVycikKKwkJdm14bmV0M190cV9kZXN0cm95KCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Cit2bXhuZXQzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyOworCWludCBlcnI7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZS50eF9sb2NrKTsKKworCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLCBWTVhORVQzX0RFRl9UWF9SSU5HX1NJWkUsCisJCQkJICAgIFZNWE5FVDNfREVGX1JYX1JJTkdfU0laRSwKKwkJCQkgICAgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwlpZiAoZXJyKQorCQlnb3RvIHF1ZXVlX2VycjsKKworCWVyciA9IHZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gYWN0aXZhdGVfZXJyOworCisJcmV0dXJuIDA7CisKK2FjdGl2YXRlX2VycjoKKwl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKK3F1ZXVlX2VycjoKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qCisJICogUmVzZXRfd29yayBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgdGhlIGRldmljZSwgd2FpdCBmb3IgaXRzCisJICogY29tcGxldGlvbi4KKwkgKi8KKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCXZteG5ldDNfcXVpZXNjZV9kZXYoYWRhcHRlcik7CisKKwl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKworCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisKKworCXJldHVybiAwOworfQorCisKK3ZvaWQKK3ZteG5ldDNfZm9yY2VfY2xvc2Uoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKgorCSAqIHdlIG11c3QgY2xlYXIgVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCBvdGhlcndpc2UKKwkgKiB2bXhuZXQzX2Nsb3NlKCkgd2lsbCBkZWFkbG9jay4KKwkgKi8KKwlCVUdfT04odGVzdF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKTsKKworCS8qIHdlIG5lZWQgdG8gZW5hYmxlIE5BUEksIG90aGVyd2lzZSBkZXZfY2xvc2Ugd2lsbCBkZWFkbG9jayAqLworCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKKwlkZXZfY2xvc2UoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAobmV3X210dSA8IFZNWE5FVDNfTUlOX01UVSB8fCBuZXdfbXR1ID4gVk1YTkVUM19NQVhfTVRVKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXdfbXR1ID4gMTUwMCAmJiAhYWRhcHRlci0+anVtYm9fZnJhbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJLyoKKwkgKiBSZXNldF93b3JrIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIHJlc2V0dGluZyB0aGUgZGV2aWNlLCB3YWl0IGZvciBpdHMKKwkgKiBjb21wbGV0aW9uLgorCSAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQl2bXhuZXQzX3F1aWVzY2VfZGV2KGFkYXB0ZXIpOworCQl2bXhuZXQzX3Jlc2V0X2RldihhZGFwdGVyKTsKKworCQkvKiB3ZSBuZWVkIHRvIHJlLWNyZWF0ZSB0aGUgcnggcXVldWUgYmFzZWQgb24gdGhlIG5ldyBtdHUgKi8KKwkJdm14bmV0M19ycV9kZXN0cm95KCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJCXZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShhZGFwdGVyKTsKKwkJYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUgID0KKwkJCQkJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplOworCQllcnIgPSB2bXhuZXQzX3JxX2NyZWF0ZSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmUtY3JlYXRlIHJ4IHF1ZXVlLCIKKwkJCQkiIGVycm9yICVkLiBDbG9zaW5nIGl0LlxuIiwgbmV0ZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSB2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlLWFjdGl2YXRlLCBlcnJvciAlZC4gIgorCQkJCSJDbG9zaW5nIGl0XG4iLCBuZXRkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGVycikKKwkJdm14bmV0M19mb3JjZV9jbG9zZShhZGFwdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZGVjbGFyZV9mZWF0dXJlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBib29sIGRtYTY0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfSFdfQ1NVTSB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8CisJCU5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfAorCQlORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfVFNPNiB8CisJCU5FVElGX0ZfTFJPOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZmVhdHVyZXM6IHNnIGNzdW0gdmxhbiBqZiB0c28gdHNvSVB2NiBscm8iKTsKKworCWFkYXB0ZXItPnJ4Y3N1bSA9IHRydWU7CisJYWRhcHRlci0+anVtYm9fZnJhbWUgPSB0cnVlOworCWFkYXB0ZXItPmxybyA9IHRydWU7CisKKwlpZiAoZG1hNjQpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJCXByaW50aygiIGhpZ2hETUEiKTsKKwl9CisKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmZlYXR1cmVzOworCXByaW50aygiXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19yZWFkX21hY19hZGRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19NQUNMKTsKKwkqKHUzMiAqKW1hYyA9IHRtcDsKKworCXRtcCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19NQUNIKTsKKwltYWNbNF0gPSB0bXAgJiAweGZmOworCW1hY1s1XSA9ICh0bXAgPj4gOCkgJiAweGZmOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNmZzsKKworCS8qIGludHIgc2V0dGluZ3MgKi8KKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfQ09ORl9JTlRSKTsKKwljZmcgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKwlhZGFwdGVyLT5pbnRyLnR5cGUgPSBjZmcgJiAweDM7CisJYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPSAoY2ZnID4+IDIpICYgMHgzOworCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0FVVE8pIHsKKwkJaW50IGVycjsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJCWFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzWzBdLmVudHJ5ID0gMDsKKwkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzLAorCQkJCSAgICAgIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCk7CisJCWlmICghZXJyKSB7CisJCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7CisJCQlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX01TSVg7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCisJCWVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCQlpZiAoIWVycikgeworCQkJYWRhcHRlci0+aW50ci5udW1faW50cnMgPSAxOworCQkJYWRhcHRlci0+aW50ci50eXBlID0gVk1YTkVUM19JVF9NU0k7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX0lOVFg7CisKKwkvKiBJTlQtWCByZWxhdGVkIHNldHRpbmcgKi8KKwlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9NU0lYKQorCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWVsc2UgaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSSkKKwkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCWVsc2UKKwkJQlVHX09OKGFkYXB0ZXItPmludHIudHlwZSAhPSBWTVhORVQzX0lUX0lOVFgpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiB0eCBoYW5nXG4iLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlhZGFwdGVyID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsIHdvcmspOworCisJLyogaWYgYW5vdGhlciB0aHJlYWQgaXMgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIG5vIG5lZWQgdG8gcHJvY2VlZCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCisJLyogaWYgdGhlIGRldmljZSBpcyBjbG9zZWQsIHdlIG11c3QgbGVhdmUgaXQgYWxvbmUgKi8KKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldHRpbmdcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCXZteG5ldDNfcXVpZXNjZV9kZXYoYWRhcHRlcik7CisJCXZteG5ldDNfcmVzZXRfZGV2KGFkYXB0ZXIpOworCQl2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogYWxyZWFkeSBjbG9zZWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCisJY2xlYXJfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdAordm14bmV0M19wcm9iZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm14bmV0M19uZXRkZXZfb3BzID0geworCQkubmRvX29wZW4gPSB2bXhuZXQzX29wZW4sCisJCS5uZG9fc3RvcCA9IHZteG5ldDNfY2xvc2UsCisJCS5uZG9fc3RhcnRfeG1pdCA9IHZteG5ldDNfeG1pdF9mcmFtZSwKKwkJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2bXhuZXQzX3NldF9tYWNfYWRkciwKKwkJLm5kb19jaGFuZ2VfbXR1ID0gdm14bmV0M19jaGFuZ2VfbXR1LAorCQkubmRvX2dldF9zdGF0cyA9IHZteG5ldDNfZ2V0X3N0YXRzLAorCQkubmRvX3R4X3RpbWVvdXQgPSB2bXhuZXQzX3R4X3RpbWVvdXQsCisJCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdm14bmV0M19zZXRfbWMsCisJCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IHZteG5ldDNfdmxhbl9yeF9yZWdpc3RlciwKKwkJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2bXhuZXQzX3ZsYW5fcnhfYWRkX3ZpZCwKKwkJLm5kb192bGFuX3J4X2tpbGxfdmlkID0gdm14bmV0M192bGFuX3J4X2tpbGxfdmlkLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJCS5uZG9fcG9sbF9jb250cm9sbGVyID0gdm14bmV0M19uZXRwb2xsLAorI2VuZGlmCisJfTsKKwlpbnQgZXJyOworCWJvb2wgZG1hNjQgPSBmYWxzZTsgLyogc3R1cGlkIGdjYyAqLworCXUzMiB2ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyOworCXU4IG1hY1tFVEhfQUxFTl07CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHZteG5ldDNfYWRhcHRlcikpOworCWlmICghbmV0ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jIGV0aGVybmV0IGRldmljZSBmb3IgYWRhcHRlciAiCisJCQkiJXNcbiIsCXBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCisJYWRhcHRlci0+c2hhcmVkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZCksCisJCQkgICZhZGFwdGVyLT5zaGFyZWRfcGEpOworCWlmICghYWRhcHRlci0+c2hhcmVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJXNcbiIsCisJCQlwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX3NoYXJlZDsKKwl9CisKKwlhZGFwdGVyLT50cWRfc3RhcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MpICsKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICAgJmFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworCisJaWYgKCFhZGFwdGVyLT50cWRfc3RhcnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfcXVldWVfZGVzYzsKKwl9CisJYWRhcHRlci0+cnFkX3N0YXJ0ID0gKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjICopKGFkYXB0ZXItPnRxZF9zdGFydAorCQkJCQkJCSAgICArIDEpOworCisJYWRhcHRlci0+cG1fY29uZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1BNQ29uZiksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT5wbV9jb25mID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfcG07CisJfQorCisJZXJyID0gdm14bmV0M19hbGxvY19wY2lfcmVzb3VyY2VzKGFkYXB0ZXIsICZkbWE2NCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2FsbG9jX3BjaTsKKworCXZlciA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19WUlJTKTsKKwlpZiAodmVyICYgMSkgeworCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1ZSUlMsIDEpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW5jb21wYXRpYmxlIGgvdyB2ZXJzaW9uICgweCV4KSBmb3IgYWRhcHRlciIKKwkJICAgICAgICIgJXNcbiIsCXZlciwgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3ZlcjsKKwl9CisKKwl2ZXIgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfVVZSUyk7CisJaWYgKHZlciAmIDEpIHsKKwkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19VVlJTLCAxKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkluY29tcGF0aWJsZSB1cHQgdmVyc2lvbiAoMHgleCkgZm9yICIKKwkJICAgICAgICJhZGFwdGVyICVzXG4iLCB2ZXIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl92ZXI7CisJfQorCisJdm14bmV0M19kZWNsYXJlX2ZlYXR1cmVzKGFkYXB0ZXIsIGRtYTY0KTsKKworCWFkYXB0ZXItPmRldl9udW1iZXIgPSBhdG9taWNfcmVhZCgmZGV2aWNlc19mb3VuZCk7CisJdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKworCXZteG5ldDNfcmVhZF9tYWNfYWRkcihhZGFwdGVyLCBtYWMpOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCAgbWFjLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZ2bXhuZXQzX25ldGRldl9vcHM7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKKwl2bXhuZXQzX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT53b3JrLCB2bXhuZXQzX3Jlc2V0X3dvcmspOworCisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgdm14bmV0M19wb2xsLCA2NCk7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgYWRhcHRlciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisJfQorCisJc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKwlhdG9taWNfaW5jKCZkZXZpY2VzX2ZvdW5kKTsKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl92ZXI6CisJdm14bmV0M19mcmVlX3BjaV9yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfYWxsb2NfcGNpOgorCWtmcmVlKGFkYXB0ZXItPnBtX2NvbmYpOworZXJyX2FsbG9jX3BtOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICBhZGFwdGVyLT50cWRfc3RhcnQsIGFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworZXJyX2FsbG9jX3F1ZXVlX2Rlc2M6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkKSwKKwkJCSAgICBhZGFwdGVyLT5zaGFyZWQsIGFkYXB0ZXItPnNoYXJlZF9wYSk7CitlcnJfYWxsb2Nfc2hhcmVkOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0Cit2bXhuZXQzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCisJdm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9wY2lfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWtmcmVlKGFkYXB0ZXItPnBtX2NvbmYpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICBhZGFwdGVyLT50cWRfc3RhcnQsIGFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZCksCisJCQkgICAgYWRhcHRlci0+c2hhcmVkLCBhZGFwdGVyLT5zaGFyZWRfcGEpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50Cit2bXhuZXQzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IFZteG5ldDNfUE1Db25mICpwbUNvbmY7CisJc3RydWN0IGV0aGhkciAqZWhkcjsKKwlzdHJ1Y3QgYXJwaGRyICphaGRyOworCXU4ICphcnByZXE7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKKwlpbnQgaSA9IDA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIDA7CisKKwl2bXhuZXQzX2Rpc2FibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9pcnFzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBDcmVhdGUgd2FrZS11cCBmaWx0ZXJzLiAqLworCXBtQ29uZiA9IGFkYXB0ZXItPnBtX2NvbmY7CisJbWVtc2V0KHBtQ29uZiwgMCwgc2l6ZW9mKCpwbUNvbmYpKTsKKworCWlmIChhZGFwdGVyLT53b2wgJiBXQUtFX1VDQVNUKSB7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5wYXR0ZXJuU2l6ZSA9IEVUSF9BTEVOOworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1NpemUgPSAxOworCQltZW1jcHkocG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm4sIG5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbMF0gPSAweDNGOyAvKiBMU0IgRVRIX0FMRU4gYml0cyAqLworCisJCXBtQ29uZi0+d2FrZVVwRXZlbnRzIHw9IFZNWE5FVDNfUE1fV0FLRVVQX0ZJTFRFUjsKKwkJaSsrOworCX0KKworCWlmIChhZGFwdGVyLT53b2wgJiBXQUtFX0FSUCkgeworCQlpbl9kZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7CisJCWlmICghaW5fZGV2KQorCQkJZ290byBza2lwX2FycDsKKworCQlpZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKWluX2Rldi0+aWZhX2xpc3Q7CisJCWlmICghaWZhKQorCQkJZ290byBza2lwX2FycDsKKworCQlwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVyblNpemUgPSBFVEhfSExFTiArIC8qIEV0aGVybmV0IGhlYWRlciovCisJCQlzaXplb2Yoc3RydWN0IGFycGhkcikgKwkJLyogQVJQIGhlYWRlciAqLworCQkJMiAqIEVUSF9BTEVOICsJCS8qIDIgRXRoZXJuZXQgYWRkcmVzc2VzKi8KKwkJCTIgKiBzaXplb2YodTMyKTsJLyoyIElQdjQgYWRkcmVzc2VzICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrU2l6ZSA9CisJCQkocG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm5TaXplIC0gMSkgLyA4ICsgMTsKKworCQkvKiBFVEhfUF9BUlAgaW4gRXRoZXJuZXQgaGVhZGVyLiAqLworCQllaGRyID0gKHN0cnVjdCBldGhoZHIgKilwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVybjsKKwkJZWhkci0+aF9wcm90byA9IGh0b25zKEVUSF9QX0FSUCk7CisKKwkJLyogQVJQT1BfUkVRVUVTVCBpbiBBUlAgaGVhZGVyLiAqLworCQlhaGRyID0gKHN0cnVjdCBhcnBoZHIgKikmcG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm5bRVRIX0hMRU5dOworCQlhaGRyLT5hcl9vcCA9IGh0b25zKEFSUE9QX1JFUVVFU1QpOworCQlhcnByZXEgPSAodTggKikoYWhkciArIDEpOworCisJCS8qIFRoZSBVbmljYXN0IElQdjQgYWRkcmVzcyBpbiAndGlwJyBmaWVsZC4gKi8KKwkJYXJwcmVxICs9IDIgKiBFVEhfQUxFTiArIHNpemVvZih1MzIpOworCQkqKHUzMiAqKWFycHJlcSA9IGlmYS0+aWZhX2FkZHJlc3M7CisKKwkJLyogVGhlIG1hc2sgZm9yIHRoZSByZWxldmFudCBiaXRzLiAqLworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1swXSA9IDB4MDA7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzFdID0gMHgzMDsgLyogRVRIX1BfQVJQICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzJdID0gMHgzMDsgLyogQVJQT1BfUkVRVUVTVCAqLworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1szXSA9IDB4MDA7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzRdID0gMHhDMDsgLyogSVB2NCBUSVAgKi8KKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbNV0gPSAweDAzOyAvKiBJUHY0IFRJUCAqLworCQlpbl9kZXZfcHV0KGluX2Rldik7CisKKwkJcG1Db25mLT53YWtlVXBFdmVudHMgfD0gVk1YTkVUM19QTV9XQUtFVVBfRklMVEVSOworCQlpKys7CisJfQorCitza2lwX2FycDoKKwlpZiAoYWRhcHRlci0+d29sICYgV0FLRV9NQUdJQykKKwkJcG1Db25mLT53YWtlVXBFdmVudHMgfD0gVk1YTkVUM19QTV9XQUtFVVBfTUFHSUM7CisKKwlwbUNvbmYtPm51bUZpbHRlcnMgPSBpOworCisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlZlciA9IDE7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZkxlbiA9IHNpemVvZigqcG1Db25mKTsKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucG1Db25mRGVzYy5jb25mUEEgPSB2aXJ0X3RvX3BoeXMocG1Db25mKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBQTVNHX1NVU1BFTkQpLAorCQkJYWRhcHRlci0+d29sKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIFBNU0dfU1VTUEVORCkpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWludCBlcnI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19QTUNvbmYgKnBtQ29uZjsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gMDsKKworCS8qIERlc3Ryb3kgd2FrZS11cCBmaWx0ZXJzLiAqLworCXBtQ29uZiA9IGFkYXB0ZXItPnBtX2NvbmY7CisJbWVtc2V0KHBtQ29uZiwgMCwgc2l6ZW9mKCpwbUNvbmYpKTsKKworCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZWZXIgPSAxOworCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZMZW4gPSBzaXplb2YoKnBtQ29uZik7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlBBID0gdmlydF90b19waHlzKHBtQ29uZik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisJdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKwl2bXhuZXQzX3JlcXVlc3RfaXJxcyhhZGFwdGVyKTsKKwl2bXhuZXQzX2VuYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZteG5ldDNfcG1fb3BzID0geworCS5zdXNwZW5kID0gdm14bmV0M19zdXNwZW5kLAorCS5yZXN1bWUgPSB2bXhuZXQzX3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZteG5ldDNfZHJpdmVyID0geworCS5uYW1lCQk9IHZteG5ldDNfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlCT0gdm14bmV0M19wY2lpZF90YWJsZSwKKwkucHJvYmUJCT0gdm14bmV0M19wcm9iZV9kZXZpY2UsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2bXhuZXQzX3JlbW92ZV9kZXZpY2UpLAorI2lmZGVmIENPTkZJR19QTQorCS5kcml2ZXIucG0JPSAmdm14bmV0M19wbV9vcHMsCisjZW5kaWYKK307CisKKworc3RhdGljIGludCBfX2luaXQKK3ZteG5ldDNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlcyAtIHZlcnNpb24gJXNcbiIsIFZNWE5FVDNfRFJJVkVSX0RFU0MsCisJCVZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JUKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdm14bmV0M19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2bXhuZXQzX2luaXRfbW9kdWxlKTsKKworCitzdGF0aWMgdm9pZAordm14bmV0M19leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdm14bmV0M19kcml2ZXIpOworfQorCittb2R1bGVfZXhpdCh2bXhuZXQzX2V4aXRfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiVk13YXJlLCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oVk1YTkVUM19EUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMxNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtMCwwICsxLDU2NiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworCisjaW5jbHVkZSAidm14bmV0M19pbnQuaCIKKworc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjIHsKKwljaGFyIGRlc2NbRVRIX0dTVFJJTkdfTEVOXTsKKwlpbnQgIG9mZnNldDsKK307CisKKworc3RhdGljIHUzMgordm14bmV0M19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBhZGFwdGVyLT5yeGNzdW07Cit9CisKKworc3RhdGljIGludAordm14bmV0M19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPnJ4Y3N1bSAhPSB2YWwpIHsKKwkJYWRhcHRlci0+cnhjc3VtID0gdmFsOworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQlpZiAodmFsKQorCQkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CisJCQkJCQkJCVVQVDFfRl9SWENTVU07CisJCQllbHNlCisJCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KKwkJCQkJCQkJflVQVDFfRl9SWENTVU07CisKKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qIHBlciB0cSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKK3ZteG5ldDNfdHFfZGV2X3N0YXRzW10gPSB7CisJLyogZGVzY3JpcHRpb24sICAgICAgICAgb2Zmc2V0ICovCisJeyAiVFNPIHBrdHMgdHgiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgVFNPUGt0c1R4T0spIH0sCisJeyAiVFNPIGJ5dGVzIHR4IiwgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgVFNPQnl0ZXNUeE9LKSB9LAorCXsgInVjYXN0IHBrdHMgdHgiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHVjYXN0UGt0c1R4T0spIH0sCisJeyAidWNhc3QgYnl0ZXMgdHgiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgdWNhc3RCeXRlc1R4T0spIH0sCisJeyAibWNhc3QgcGt0cyB0eCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgbWNhc3RQa3RzVHhPSykgfSwKKwl7ICJtY2FzdCBieXRlcyB0eCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBtY2FzdEJ5dGVzVHhPSykgfSwKKwl7ICJiY2FzdCBwa3RzIHR4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBiY2FzdFBrdHNUeE9LKSB9LAorCXsgImJjYXN0IGJ5dGVzIHR4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIGJjYXN0Qnl0ZXNUeE9LKSB9LAorCXsgInBrdHMgdHggZXJyIiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHBrdHNUeEVycm9yKSB9LAorCXsgInBrdHMgdHggZGlzY2FyZCIsICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHBrdHNUeERpc2NhcmQpIH0sCit9OworCisvKiBwZXIgdHEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tdID0geworCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLworCXsiZHJ2IGRyb3BwZWQgdHggdG90YWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWRyb3BfdG90YWwpIH0sCisJeyAiICAgdG9vIG1hbnkgZnJhZ3MiLCAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX3Rvb19tYW55X2ZyYWdzKSB9LAorCXsgIiAgIGdpYW50IGhkciIsICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9vdmVyc2l6ZWRfaGRyKSB9LAorCXsgIiAgIGhkciBlcnIiLCAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9oZHJfaW5zcGVjdF9lcnIpIH0sCisJeyAiICAgdHNvIiwgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX3RzbykgfSwKKwl7ICJyaW5nIGZ1bGwiLCAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCXR4X3JpbmdfZnVsbCkgfSwKKwl7ICJwa3RzIGxpbmVhcml6ZWQiLCAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWxpbmVhcml6ZWQpIH0sCisJeyAiaGRyIGNsb25lZCIsICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQljb3B5X3NrYl9oZWFkZXIpIH0sCisJeyAiZ2lhbnQgaGRyIiwgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlvdmVyc2l6ZWRfaGRyKSB9LAorfTsKKworLyogcGVyIHJxIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRldmljZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwordm14bmV0M19ycV9kZXZfc3RhdHNbXSA9IHsKKwl7ICJMUk8gcGt0cyByeCIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBMUk9Qa3RzUnhPSykgfSwKKwl7ICJMUk8gYnl0ZSByeCIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBMUk9CeXRlc1J4T0spIH0sCisJeyAidWNhc3QgcGt0cyByeCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgdWNhc3RQa3RzUnhPSykgfSwKKwl7ICJ1Y2FzdCBieXRlcyByeCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCB1Y2FzdEJ5dGVzUnhPSykgfSwKKwl7ICJtY2FzdCBwa3RzIHJ4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBtY2FzdFBrdHNSeE9LKSB9LAorCXsgIm1jYXN0IGJ5dGVzIHJ4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIG1jYXN0Qnl0ZXNSeE9LKSB9LAorCXsgImJjYXN0IHBrdHMgcngiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIGJjYXN0UGt0c1J4T0spIH0sCisJeyAiYmNhc3QgYnl0ZXMgcngiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgYmNhc3RCeXRlc1J4T0spIH0sCisJeyAicGt0cyByeCBvdXQgb2YgYnVmIiwgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgcGt0c1J4T3V0T2ZCdWYpIH0sCisJeyAicGt0cyByeCBlcnIiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgcGt0c1J4RXJyb3IpIH0sCit9OworCisvKiBwZXIgcnEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX3JxX2RyaXZlcl9zdGF0c1tdID0geworCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLworCXsgImRydiBkcm9wcGVkIHJ4IHRvdGFsIiwgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAorCQkJCQkgICBkcm9wX3RvdGFsKSB9LAorCXsgIiAgIGVyciIsICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX2VycikgfSwKKwl7ICIgICBmY3MiLCAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9mY3MpIH0sCisJeyAicnggYnVmIGFsbG9jIGZhaWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCisJCQkJCXJ4X2J1Zl9hbGxvY19mYWlsdXJlKSB9LAorfTsKKworLyogZ2xvYWJsIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwordm14bmV0M19nbG9iYWxfc3RhdHNbXSA9IHsKKwkvKiBkZXNjcmlwdGlvbiwgICAgICAgICBvZmZzZXQgKi8KKwl7ICJ0eCB0aW1lb3V0IGNvdW50IiwgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyLAorCQkJCQkgdHhfdGltZW91dF9jb3VudCkgfQorfTsKKworCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCit2bXhuZXQzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzICpkcnZUeFN0YXRzOworCXN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyAqZHJ2UnhTdGF0czsKKwlzdHJ1Y3QgVVBUMV9UeFN0YXRzICpkZXZUeFN0YXRzOworCXN0cnVjdCBVUFQxX1J4U3RhdHMgKmRldlJ4U3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9ICZuZXRkZXYtPnN0YXRzOworCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBDb2xsZWN0IHRoZSBkZXYgc3RhdHMgaW50byB0aGUgc2hhcmVkIGFyZWEgKi8KKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKKworCS8qIEFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBxdWV1ZSBkZXZpY2UgKi8KKwlkZXZUeFN0YXRzID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7CisJZGV2UnhTdGF0cyA9ICZhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXRzOworCisJLyogR2V0IGFjY2VzcyB0byB0aGUgZHJpdmVyIHN0YXRzIHBlciBxdWV1ZSAqLworCWRydlR4U3RhdHMgPSAmYWRhcHRlci0+dHhfcXVldWUuc3RhdHM7CisJZHJ2UnhTdGF0cyA9ICZhZGFwdGVyLT5yeF9xdWV1ZS5zdGF0czsKKworCW1lbXNldChuZXRfc3RhdHMsIDAsIHNpemVvZigqbmV0X3N0YXRzKSk7CisKKwluZXRfc3RhdHMtPnJ4X3BhY2tldHMgPSBkZXZSeFN0YXRzLT51Y2FzdFBrdHNSeE9LICsKKwkJCQlkZXZSeFN0YXRzLT5tY2FzdFBrdHNSeE9LICsKKwkJCQlkZXZSeFN0YXRzLT5iY2FzdFBrdHNSeE9LOworCisJbmV0X3N0YXRzLT50eF9wYWNrZXRzID0gZGV2VHhTdGF0cy0+dWNhc3RQa3RzVHhPSyArCisJCQkJZGV2VHhTdGF0cy0+bWNhc3RQa3RzVHhPSyArCisJCQkJZGV2VHhTdGF0cy0+YmNhc3RQa3RzVHhPSzsKKworCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBkZXZSeFN0YXRzLT51Y2FzdEJ5dGVzUnhPSyArCisJCQkgICAgICBkZXZSeFN0YXRzLT5tY2FzdEJ5dGVzUnhPSyArCisJCQkgICAgICBkZXZSeFN0YXRzLT5iY2FzdEJ5dGVzUnhPSzsKKworCW5ldF9zdGF0cy0+dHhfYnl0ZXMgPSBkZXZUeFN0YXRzLT51Y2FzdEJ5dGVzVHhPSyArCisJCQkgICAgICBkZXZUeFN0YXRzLT5tY2FzdEJ5dGVzVHhPSyArCisJCQkgICAgICBkZXZUeFN0YXRzLT5iY2FzdEJ5dGVzVHhPSzsKKworCW5ldF9zdGF0cy0+cnhfZXJyb3JzID0gZGV2UnhTdGF0cy0+cGt0c1J4RXJyb3I7CisJbmV0X3N0YXRzLT50eF9lcnJvcnMgPSBkZXZUeFN0YXRzLT5wa3RzVHhFcnJvcjsKKwluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgPSBkcnZSeFN0YXRzLT5kcm9wX3RvdGFsOworCW5ldF9zdGF0cy0+dHhfZHJvcHBlZCA9IGRydlR4U3RhdHMtPmRyb3BfdG90YWw7CisJbmV0X3N0YXRzLT5tdWx0aWNhc3QgPSAgZGV2UnhTdGF0cy0+bWNhc3RQa3RzUnhPSzsKKworCXJldHVybiBuZXRfc3RhdHM7Cit9CisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZGV2X3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfZ2xvYmFsX3N0YXRzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIDIwICogc2l6ZW9mKHUzMik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cmxjcHkoZHJ2aW5mby0+ZHJpdmVyLCB2bXhuZXQzX2RyaXZlcl9uYW1lLCBzaXplb2YoZHJ2aW5mby0+ZHJpdmVyKSk7CisJZHJ2aW5mby0+ZHJpdmVyW3NpemVvZihkcnZpbmZvLT5kcml2ZXIpIC0gMV0gPSAnXDAnOworCisJc3RybGNweShkcnZpbmZvLT52ZXJzaW9uLCBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1JFUE9SVCwKKwkJc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKKwlkcnZpbmZvLT5kcml2ZXJbc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pIC0gMV0gPSAnXDAnOworCisJc3RybGNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGRydmluZm8tPmZ3X3ZlcnNpb24pKTsKKwlkcnZpbmZvLT5md192ZXJzaW9uW3NpemVvZihkcnZpbmZvLT5md192ZXJzaW9uKSAtIDFdID0gJ1wwJzsKKworCXN0cmxjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLAorCQlFVEhUT09MX0JVU0lORk9fTEVOKTsKKwlkcnZpbmZvLT5uX3N0YXRzID0gdm14bmV0M19nZXRfc3NldF9jb3VudChuZXRkZXYsIEVUSF9TU19TVEFUUyk7CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gMDsKKwlkcnZpbmZvLT5lZWR1bXBfbGVuICAgPSAwOworCWRydmluZm8tPnJlZ2R1bXBfbGVuICA9IHZteG5ldDNfZ2V0X3JlZ3NfbGVuKG5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKK3sKKwlpZiAoc3RyaW5nc2V0ID09IEVUSF9TU19TVEFUUykgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2Rldl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M190cV9kZXZfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M190cV9kcml2ZXJfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19ycV9kZXZfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19ycV9kcml2ZXJfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX2dsb2JhbF9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19nbG9iYWxfc3RhdHNbaV0uZGVzYywKKwkJCQlFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCX0KK30KKworc3RhdGljIHUzMgordm14bmV0M19nZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikgeworCXJldHVybiBuZXRkZXYtPmZlYXR1cmVzOworfQorCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkgeworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXU4IGxyb19yZXF1ZXN0ZWQgPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gMCA/IDAgOiAxOworCXU4IGxyb19wcmVzZW50ID0gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgPT0gMCA/IDAgOiAxOworCisJaWYgKGxyb19yZXF1ZXN0ZWQgXiBscm9fcHJlc2VudCkgeworCQkvKiB0b2dnbGUgdGhlIExSTyBmZWF0dXJlKi8KKwkJbmV0ZGV2LT5mZWF0dXJlcyBePSBORVRJRl9GX0xSTzsKKworCQkvKiB1cGRhdGUgaGFyd2FyZSBMUk8gY2FwYWJpbGl0eSBhY2NvcmRpbmdseSAqLworCQlpZiAobHJvX3JlcXVlc3RlZCkKKwkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzICY9IFVQVDFfRl9MUk87CisJCWVsc2UKKwkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzICY9CisJCQkJCQkJCX5VUFQxX0ZfTFJPOworCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgICpidWYpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggKmJhc2U7CisJaW50IGk7CisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKKworCS8qIHRoaXMgZG9lcyBhc3N1bWUgZWFjaCBjb3VudGVyIGlzIDY0LWJpdCB3aWRlICovCisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspCisJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOworCisJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50eF9xdWV1ZS5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJxZF9zdGFydC0+c3RhdHM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpOyBpKyspCisJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOworCisJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT5yeF9xdWV1ZS5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopYWRhcHRlcjsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX2dsb2JhbF9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfZ2xvYmFsX3N0YXRzW2ldLm9mZnNldCk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgKmJ1ZiA9IHA7CisKKwltZW1zZXQocCwgMCwgdm14bmV0M19nZXRfcmVnc19sZW4obmV0ZGV2KSk7CisKKwlyZWdzLT52ZXJzaW9uID0gMTsKKworCS8qIFVwZGF0ZSB2bXhuZXQzX2dldF9yZWdzX2xlbiBpZiB3ZSB3YW50IHRvIGR1bXAgbW9yZSByZWdpc3RlcnMgKi8KKworCS8qIG1ha2UgZWFjaCByaW5nIHVzZSBtdWx0aXBsZSBvZiAxNiBieXRlcyAqLworCWJ1ZlswXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJmaWxsOworCWJ1ZlsxXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJjb21wOworCWJ1ZlsyXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuZ2VuOworCWJ1ZlszXSA9IDA7CisKKwlidWZbNF0gPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcubmV4dDJwcm9jOworCWJ1Zls1XSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5nZW47CisJYnVmWzZdID0gYWRhcHRlci0+dHhfcXVldWUuc3RvcHBlZDsKKwlidWZbN10gPSAwOworCisJYnVmWzhdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmZpbGw7CisJYnVmWzldID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmNvbXA7CisJYnVmWzEwXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uZ2VuOworCWJ1ZlsxMV0gPSAwOworCisJYnVmWzEyXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0ubmV4dDJmaWxsOworCWJ1ZlsxM10gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLm5leHQyY29tcDsKKwlidWZbMTRdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5nZW47CisJYnVmWzE1XSA9IDA7CisKKwlidWZbMTZdID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLm5leHQycHJvYzsKKwlidWZbMTddID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLmdlbjsKKwlidWZbMThdID0gMDsKKwlidWZbMTldID0gMDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQzsKKwl3b2wtPndvbG9wdHMgPSBhZGFwdGVyLT53b2w7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX01DQVNUIHwgV0FLRV9CQ0FTVCB8CisJCQkgICAgV0FLRV9NQUdJQ1NFQ1VSRSkpIHsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWFkYXB0ZXItPndvbCA9IHdvbC0+d29sb3B0czsKKworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgIFNVUFBPUlRFRF9UUDsKKwllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCisJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQpIHsKKwkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9IGVsc2UgeworCQllY21kLT5zcGVlZCA9IC0xOworCQllY21kLT5kdXBsZXggPSAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcGFyYW0tPnJ4X21heF9wZW5kaW5nID0gVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFOworCXBhcmFtLT50eF9tYXhfcGVuZGluZyA9IFZNWE5FVDNfVFhfUklOR19NQVhfU0laRTsKKwlwYXJhbS0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJcGFyYW0tPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKworCXBhcmFtLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplOworCXBhcmFtLT50eF9wZW5kaW5nID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplOworCXBhcmFtLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCXBhcmFtLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgbmV3X3R4X3Jpbmdfc2l6ZSwgbmV3X3J4X3Jpbmdfc2l6ZTsKKwl1MzIgc3o7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGFyYW0tPnR4X3BlbmRpbmcgPT0gMCB8fCBwYXJhbS0+dHhfcGVuZGluZyA+CisJCQkJCQlWTVhORVQzX1RYX1JJTkdfTUFYX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBhcmFtLT5yeF9wZW5kaW5nID09IDAgfHwgcGFyYW0tPnJ4X3BlbmRpbmcgPgorCQkJCQkJVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCisJLyogcm91bmQgaXQgdXAgdG8gYSBtdWx0aXBsZSBvZiBWTVhORVQzX1JJTkdfU0laRV9BTElHTiAqLworCW5ld190eF9yaW5nX3NpemUgPSAocGFyYW0tPnR4X3BlbmRpbmcgKyBWTVhORVQzX1JJTkdfU0laRV9NQVNLKSAmCisJCQkJCQkJflZNWE5FVDNfUklOR19TSVpFX01BU0s7CisJbmV3X3R4X3Jpbmdfc2l6ZSA9IG1pbl90KHUzMiwgbmV3X3R4X3Jpbmdfc2l6ZSwKKwkJCQkgVk1YTkVUM19UWF9SSU5HX01BWF9TSVpFKTsKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA+IFZNWE5FVDNfVFhfUklOR19NQVhfU0laRSB8fCAobmV3X3R4X3Jpbmdfc2l6ZSAlCisJCQkJCQlWTVhORVQzX1JJTkdfU0laRV9BTElHTikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByaW5nMCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZgorCSAqIHJ4X2J1Zl9wZXJfcGt0ICogVk1YTkVUM19SSU5HX1NJWkVfQUxJR04KKwkgKi8KKwlzeiA9IGFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ICogVk1YTkVUM19SSU5HX1NJWkVfQUxJR047CisJbmV3X3J4X3Jpbmdfc2l6ZSA9IChwYXJhbS0+cnhfcGVuZGluZyArIHN6IC0gMSkgLyBzeiAqIHN6OworCW5ld19yeF9yaW5nX3NpemUgPSBtaW5fdCh1MzIsIG5ld19yeF9yaW5nX3NpemUsCisJCQkJIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvIHN6ICogc3opOworCWlmIChuZXdfcnhfcmluZ19zaXplID4gVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFIHx8IChuZXdfcnhfcmluZ19zaXplICUKKwkJCQkJCQkgICBzeikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemUgJiYKKwkJCW5ld19yeF9yaW5nX3NpemUgPT0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplKSB7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogUmVzZXRfd29yayBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgdGhlIGRldmljZSwgd2FpdCBmb3IgaXRzCisJICogY29tcGxldGlvbi4KKwkgKi8KKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJdm14bmV0M19xdWllc2NlX2RldihhZGFwdGVyKTsKKwkJdm14bmV0M19yZXNldF9kZXYoYWRhcHRlcik7CisKKwkJLyogcmVjcmVhdGUgdGhlIHJ4IHF1ZXVlIGFuZCB0aGUgdHggcXVldWUgYmFzZWQgb24gdGhlCisJCSAqIG5ldyBzaXplcyAqLworCQl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwkJdm14bmV0M19ycV9kZXN0cm95KCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisKKwkJZXJyID0gdm14bmV0M19jcmVhdGVfcXVldWVzKGFkYXB0ZXIsIG5ld190eF9yaW5nX3NpemUsCisJCQluZXdfcnhfcmluZ19zaXplLCBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCQlpZiAoZXJyKSB7CisJCQkvKiBmYWlsZWQsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugb2YgT09NLCB0cnkgZGVmYXVsdAorCQkJICogc2l6ZSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5IG5ldyBzaXplcywgdHJ5IHRoZSIKKwkJCQkiIGRlZmF1bHQgb25lc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLAorCQkJCQkJICAgIFZNWE5FVDNfREVGX1RYX1JJTkdfU0laRSwKKwkJCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUsCisJCQkJCQkgICAgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHF1ZXVlcyAiCisJCQkJCSJ3aXRoIGRlZmF1bHQgc2l6ZXMuIENsb3NpbmcgaXRcbiIsCisJCQkJCW5ldGRldi0+bmFtZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQllcnIgPSB2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZS1hY3RpdmF0ZSwgZXJyb3IgJWQuIgorCQkJCSIgQ2xvc2luZyBpdFxuIiwgbmV0ZGV2LT5uYW1lLCBlcnIpOworCX0KKworb3V0OgorCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGVycikKKwkJdm14bmV0M19mb3JjZV9jbG9zZShhZGFwdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2bXhuZXQzX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgICAgICA9IHZteG5ldDNfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyAgICAgICA9IHZteG5ldDNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiAgICAgID0gdm14bmV0M19nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzICAgICAgICAgID0gdm14bmV0M19nZXRfcmVncywKKwkuZ2V0X3dvbCAgICAgICAgICAgPSB2bXhuZXQzX2dldF93b2wsCisJLnNldF93b2wgICAgICAgICAgID0gdm14bmV0M19zZXRfd29sLAorCS5nZXRfbGluayAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yeF9jc3VtICAgICAgID0gdm14bmV0M19nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gICAgICAgPSB2bXhuZXQzX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bSAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbyAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHNvLAorCS5nZXRfc3RyaW5ncyAgICAgICA9IHZteG5ldDNfZ2V0X3N0cmluZ3MsCisJLmdldF9mbGFncwkgICA9IHZteG5ldDNfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJICAgPSB2bXhuZXQzX3NldF9mbGFncywKKwkuZ2V0X3NzZXRfY291bnQJICAgPSB2bXhuZXQzX2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtICAgICA9IHZteG5ldDNfc2V0X3JpbmdwYXJhbSwKK307CisKK3ZvaWQgdm14bmV0M19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmdm14bmV0M19ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwZDcwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVk1YTkVUM19JTlRfSAorI2RlZmluZSBfVk1YTkVUM19JTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgInZteG5ldDNfZGVmcy5oIgorCisjaWZkZWYgREVCVUcKKyMgZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JUIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HIi1OQVBJKGRlYnVnKSIKKyNlbHNlCisjIGRlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1JFUE9SVCBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyItTkFQSSIKKyNlbmRpZgorCisKKy8qCisgKiBWZXJzaW9uIG51bWJlcnMKKyAqLworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyAgICIxLjAuNS4wLWsiCisKKy8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMDA1MDAKKworCisvKgorICogQ2FwYWJpbGl0aWVzCisgKi8KKworZW51bSB7CisJVk1ORVRfQ0FQX1NHCSAgICAgICAgPSAweDAwMDEsIC8qIENhbiBkbyBzY2F0dGVyLWdhdGhlciB0cmFuc21pdHMuICovCisJVk1ORVRfQ0FQX0lQNF9DU1VNICAgICAgPSAweDAwMDIsIC8qIENhbiBjaGVja3N1bSBvbmx5IFRDUC9VRFAgb3ZlcgorCQkJCQkgICAqIElQdjQgKi8KKwlWTU5FVF9DQVBfSFdfQ1NVTSAgICAgICA9IDB4MDAwNCwgLyogQ2FuIGNoZWNrc3VtIGFsbCBwYWNrZXRzLiAqLworCVZNTkVUX0NBUF9ISUdIX0RNQSAgICAgID0gMHgwMDA4LCAvKiBDYW4gRE1BIHRvIGhpZ2ggbWVtb3J5LiAqLworCVZNTkVUX0NBUF9UT0UJICAgICAgICA9IDB4MDAxMCwgLyogU3VwcG9ydHMgVENQL0lQIG9mZmxvYWQuICovCisJVk1ORVRfQ0FQX1RTTwkgICAgICAgID0gMHgwMDIwLCAvKiBTdXBwb3J0cyBUQ1AgU2VnbWVudGF0aW9uCisJCQkJCSAgICogb2ZmbG9hZCAqLworCVZNTkVUX0NBUF9TV19UU08gICAgICAgID0gMHgwMDQwLCAvKiBTdXBwb3J0cyBTVyBUQ1AgU2VnbWVudGF0aW9uICovCisJVk1ORVRfQ0FQX1ZNWE5FVF9BUFJPTSAgPSAweDAwODAsIC8qIFZteG5ldCBBUFJPTSBzdXBwb3J0ICovCisJVk1ORVRfQ0FQX0hXX1RYX1ZMQU4gICAgPSAweDAxMDAsIC8qIENhbiB3ZSBkbyBWTEFOIHRhZ2dpbmcgaW4gSFcgKi8KKwlWTU5FVF9DQVBfSFdfUlhfVkxBTiAgICA9IDB4MDIwMCwgLyogQ2FuIHdlIGRvIFZMQU4gdW50YWdnaW5nIGluIEhXICovCisJVk1ORVRfQ0FQX1NXX1ZMQU4gICAgICAgPSAweDA0MDAsIC8qIFZMQU4gdGFnZ2luZy91bnRhZ2dpbmcgaW4gU1cgKi8KKwlWTU5FVF9DQVBfV0FLRV9QQ0tUX1JDViA9IDB4MDgwMCwgLyogQ2FuIHdha2Ugb24gbmV0d29yayBwYWNrZXQgcmVjdj8gKi8KKwlWTU5FVF9DQVBfRU5BQkxFX0lOVF9JTkxJTkUgPSAweDEwMDAsICAvKiBFbmFibGUgSW50ZXJydXB0IElubGluZSAqLworCVZNTkVUX0NBUF9FTkFCTEVfSEVBREVSX0NPUFkgPSAweDIwMDAsICAvKiBjb3B5IGhlYWRlciBmb3Igdm1rZXJuZWwgKi8KKwlWTU5FVF9DQVBfVFhfQ0hBSU4gICAgICA9IDB4NDAwMCwgLyogR3Vlc3QgY2FuIHVzZSBtdWx0aXBsZSB0eCBlbnRyaWVzCisJCQkJCSAgKiBmb3IgYSBwa3QgKi8KKwlWTU5FVF9DQVBfUlhfQ0hBSU4gICAgICA9IDB4ODAwMCwgLyogcGt0IGNhbiBzcGFuIG11bHRpcGxlIHJ4IGVudHJpZXMgKi8KKwlWTU5FVF9DQVBfTFBEICAgICAgICAgICA9IDB4MTAwMDAsIC8qIGxhcmdlIHBrdCBkZWxpdmVyeSAqLworCVZNTkVUX0NBUF9CUEYgICAgICAgICAgID0gMHgyMDAwMCwgLyogQlBGIFN1cHBvcnQgaW4gVk1YTkVUIFZpcnR1YWwgSFcqLworCVZNTkVUX0NBUF9TR19TUEFOX1BBR0VTID0gMHg0MDAwMCwgLyogU2NhdHRlci1nYXRoZXIgY2FuIHNwYW4gbXVsdGlwbGUqLworCQkJCQkgICAvKiBwYWdlcyB0cmFuc21pdHMgKi8KKwlWTU5FVF9DQVBfSVA2X0NTVU0gICAgICA9IDB4ODAwMDAsIC8qIENhbiBkbyBJUHY2IGNzdW0gb2ZmbG9hZC4gKi8KKwlWTU5FVF9DQVBfVFNPNiAgICAgICAgID0gMHgxMDAwMDAsIC8qIFRTTyBzZWcuIG9mZmxvYWQgZm9yIElQdjYgcGt0cy4gKi8KKwlWTU5FVF9DQVBfVFNPMjU2ayAgICAgID0gMHgyMDAwMDAsIC8qIENhbiBkbyBUU08gc2VnIG9mZmxvYWQgZm9yICovCisJCQkJCSAgIC8qIHBrdHMgdXAgdG8gMjU2a0IuICovCisJVk1ORVRfQ0FQX1VQVCAgICAgICAgICA9IDB4NDAwMDAwICAvKiBTdXBwb3J0IFVQVCAqLworfTsKKworLyoKKyAqIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuCisgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTVdBUkUgICAgICAgICAgICAweDE1QUQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVfVk1YTkVUMyAgICAweDA3QjAKKyNkZWZpbmUgTUFYX0VUSEVSTkVUX0NBUkRTCQkxMAorI2RlZmluZSBNQVhfUENJX1BBU1NUSFJVX0RFVklDRQkJNgorCitzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyB7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqYmFzZTsKKwl1MzIJCXNpemU7CisJdTMyCQluZXh0MmZpbGw7CisJdTMyCQluZXh0MmNvbXA7CisJdTgJCWdlbjsKKwlkbWFfYWRkcl90CWJhc2VQQTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJmaWxsKHN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICpyaW5nKQoreworCXJpbmctPm5leHQyZmlsbCsrOworCWlmICh1bmxpa2VseShyaW5nLT5uZXh0MmZpbGwgPT0gcmluZy0+c2l6ZSkpIHsKKwkJcmluZy0+bmV4dDJmaWxsID0gMDsKKwkJVk1YTkVUM19GTElQX1JJTkdfR0VOKHJpbmctPmdlbik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3ZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyY29tcChzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAqcmluZykKK3sKKwlWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKHJpbmctPm5leHQyY29tcCwgcmluZy0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit2bXhuZXQzX2NtZF9yaW5nX2Rlc2NfYXZhaWwoc3RydWN0IHZteG5ldDNfY21kX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIChyaW5nLT5uZXh0MmNvbXAgPiByaW5nLT5uZXh0MmZpbGwgPyAwIDogcmluZy0+c2l6ZSkgKworCQlyaW5nLT5uZXh0MmNvbXAgLSByaW5nLT5uZXh0MmZpbGwgLSAxOworfQorCitzdHJ1Y3Qgdm14bmV0M19jb21wX3JpbmcgeworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmJhc2U7CisJdTMyICAgICAgICAgICAgICAgc2l6ZTsKKwl1MzIgICAgICAgICAgICAgICBuZXh0MnByb2M7CisJdTggICAgICAgICAgICAgICAgZ2VuOworCXU4ICAgICAgICAgICAgICAgIGludHJfaWR4OworCWRtYV9hZGRyX3QgICAgICAgICAgIGJhc2VQQTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordm14bmV0M19jb21wX3JpbmdfYWR2X25leHQycHJvYyhzdHJ1Y3Qgdm14bmV0M19jb21wX3JpbmcgKnJpbmcpCit7CisJcmluZy0+bmV4dDJwcm9jKys7CisJaWYgKHVubGlrZWx5KHJpbmctPm5leHQycHJvYyA9PSByaW5nLT5zaXplKSkgeworCQlyaW5nLT5uZXh0MnByb2MgPSAwOworCQlWTVhORVQzX0ZMSVBfUklOR19HRU4ocmluZy0+Z2VuKTsKKwl9Cit9CisKK3N0cnVjdCB2bXhuZXQzX3R4X2RhdGFfcmluZyB7CisJc3RydWN0IFZteG5ldDNfVHhEYXRhRGVzYyAqYmFzZTsKKwl1MzIgICAgICAgICAgICAgIHNpemU7CisJZG1hX2FkZHJfdCAgICAgICAgICBiYXNlUEE7Cit9OworCitlbnVtIHZteG5ldDNfYnVmX21hcF90eXBlIHsKKwlWTVhORVQzX01BUF9JTlZBTElEID0gMCwKKwlWTVhORVQzX01BUF9OT05FLAorCVZNWE5FVDNfTUFQX1NJTkdMRSwKKwlWTVhORVQzX01BUF9QQUdFLAorfTsKKworc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8geworCXUzMiAgICAgIG1hcF90eXBlOworCXUxNiAgICAgIGxlbjsKKwl1MTYgICAgICBzb3BfaWR4OworCWRtYV9hZGRyX3QgIGRtYV9hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7Cit9OworCitzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMgeworCXU2NCBkcm9wX3RvdGFsOyAgICAgLyogIyBvZiBwa3RzIGRyb3BwZWQgYnkgdGhlIGRyaXZlciwgdGhlCisJCQkJKiBjb3VudGVycyBiZWxvdyB0cmFjayBkcm9wcGluZ3MgZHVlIHRvCisJCQkJKiBkaWZmZXJlbnQgcmVhc29ucworCQkJCSovCisJdTY0IGRyb3BfdG9vX21hbnlfZnJhZ3M7CisJdTY0IGRyb3Bfb3ZlcnNpemVkX2hkcjsKKwl1NjQgZHJvcF9oZHJfaW5zcGVjdF9lcnI7CisJdTY0IGRyb3BfdHNvOworCisJdTY0IHR4X3JpbmdfZnVsbDsKKwl1NjQgbGluZWFyaXplZDsgICAgICAgICAvKiAjIG9mIHBrdHMgbGluZWFyaXplZCAqLworCXU2NCBjb3B5X3NrYl9oZWFkZXI7ICAgIC8qICMgb2YgdGltZXMgd2UgaGF2ZSB0byBjb3B5IHNrYiBoZWFkZXIgKi8KKwl1NjQgb3ZlcnNpemVkX2hkcjsKK307CisKK3N0cnVjdCB2bXhuZXQzX3R4X2N0eCB7CisJYm9vbCAgIGlwdjQ7CisJdTE2IG1zczsKKwl1MzIgZXRoX2lwX2hkcl9zaXplOyAvKiBvbmx5IHZhbGlkIGZvciBwa3RzIHJlcXVlc3RpbmcgdHNvIG9yIGNzdW0KKwkJCQkgKiBvZmZsb2FkaW5nCisJCQkJICovCisJdTMyIGw0X2hkcl9zaXplOyAgICAgLyogb25seSB2YWxpZCBpZiBtc3MgIT0gMCAqLworCXUzMiBjb3B5X3NpemU7ICAgICAgIC8qICMgb2YgYnl0ZXMgY29waWVkIGludG8gdGhlIGRhdGEgcmluZyAqLworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKnNvcF90eGQ7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZW9wX3R4ZDsKK307CisKK3N0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlIHsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICAgIHR4X2xvY2s7CisJc3RydWN0IHZteG5ldDNfY21kX3JpbmcgICAgICAgICB0eF9yaW5nOworCXN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvICAgICAqYnVmX2luZm87CisJc3RydWN0IHZteG5ldDNfdHhfZGF0YV9yaW5nICAgICBkYXRhX3Jpbmc7CisJc3RydWN0IHZteG5ldDNfY29tcF9yaW5nICAgICAgICBjb21wX3Jpbmc7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZUN0cmwgICAgICAgICAgICAqc2hhcmVkOworCXN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyAgc3RhdHM7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGVkOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3N0b3A7ICAvKiAjIG9mIHRpbWVzIHRoZSBxdWV1ZSBpcworCQkJCQkJICAgICogc3RvcHBlZCAqLworfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7CisKK2VudW0gdm14bmV0M19yeF9idWZfdHlwZSB7CisJVk1YTkVUM19SWF9CVUZfTk9ORSA9IDAsCisJVk1YTkVUM19SWF9CVUZfU0tCID0gMSwKKwlWTVhORVQzX1JYX0JVRl9QQUdFID0gMgorfTsKKworc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8geworCWVudW0gdm14bmV0M19yeF9idWZfdHlwZSBidWZfdHlwZTsKKwl1MTYgICAgIGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBwYWdlICAgICpwYWdlOworCX07CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKK307CisKK3N0cnVjdCB2bXhuZXQzX3J4X2N0eCB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgc29wX2lkeDsKK307CisKK3N0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyB7CisJdTY0IGRyb3BfdG90YWw7CisJdTY0IGRyb3BfZXJyOworCXU2NCBkcm9wX2ZjczsKKwl1NjQgcnhfYnVmX2FsbG9jX2ZhaWx1cmU7Cit9OworCitzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSB7CisJc3RydWN0IHZteG5ldDNfY21kX3JpbmcgICByeF9yaW5nWzJdOworCXN0cnVjdCB2bXhuZXQzX2NvbXBfcmluZyAgY29tcF9yaW5nOworCXN0cnVjdCB2bXhuZXQzX3J4X2N0eCAgICAgcnhfY3R4OworCXUzMiBxaWQ7ICAgICAgICAgICAgLyogcnFJRCBpbiBSQ0QgZm9yIGJ1ZmZlciBmcm9tIDFzdCByaW5nICovCisJdTMyIHFpZDI7ICAgICAgICAgICAvKiBycUlEIGluIFJDRCBmb3IgYnVmZmVyIGZyb20gMm5kIHJpbmcgKi8KKwl1MzIgdW5jb21taXR0ZWRbMl07IC8qICMgb2YgYnVmZmVycyBhbGxvY2F0ZWQgc2luY2UgbGFzdCBSWFBST0QKKwkJCQkqIHVwZGF0ZSAqLworCXN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICAgICAqYnVmX2luZm9bMl07CisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZUN0cmwgICAgICAgICAgICAqc2hhcmVkOworCXN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyAgc3RhdHM7Cit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTsKKworI2RlZmluZSBWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1QgICAgIDEKKworc3RydWN0IHZteG5ldDNfaW50ciB7CisJZW51bSB2bXhuZXQzX2ludHJfbWFza19tb2RlICBtYXNrX21vZGU7CisJZW51bSB2bXhuZXQzX2ludHJfdHlwZSAgICAgICB0eXBlOwkvKiBNU0ktWCwgTVNJLCBvciBJTlR4PyAqLworCXU4ICBudW1faW50cnM7CQkJLyogIyBvZiBpbnRyIHZlY3RvcnMgKi8KKwl1OCAgZXZlbnRfaW50cl9pZHg7CQkvKiBpZHggb2YgdGhlIGludHIgdmVjdG9yIGZvciBldmVudCAqLworCXU4ICBtb2RfbGV2ZWxzW1ZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVF07IC8qIG1vZGVyYXRpb24gbGV2ZWwgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1RdOworI2VuZGlmCit9OworCisjZGVmaW5lIFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORyAgIDAKKyNkZWZpbmUgVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQgICAgMQorc3RydWN0IHZteG5ldDNfYWRhcHRlciB7CisJc3RydWN0IHZteG5ldDNfdHhfcXVldWUgICAgICAgICB0eF9xdWV1ZTsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAgICAgICAgIHJ4X3F1ZXVlOworCXN0cnVjdCBuYXBpX3N0cnVjdCAgICAgICAgICAgICAgbmFwaTsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAgICAgICAgICAgICAgKnZsYW5fZ3JwOworCisJc3RydWN0IHZteG5ldDNfaW50ciAgICAgICAgICAgICBpbnRyOworCisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICAgICpzaGFyZWQ7CisJc3RydWN0IFZteG5ldDNfUE1Db25mICAgICAgICAgICpwbV9jb25mOworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjICAgICAqdHFkX3N0YXJ0OyAgICAgLyogZmlyc3QgdHggcXVldWUgZGVzYyAqLworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjICAgICAqcnFkX3N0YXJ0OyAgICAgLyogZmlyc3QgcnggcXVldWUgZGVzYyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICAgICAgICAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICAgICAqcGRldjsKKworCXU4CQkJCSpod19hZGRyMDsgLyogZm9yIEJBUiAwICovCisJdTgJCQkJKmh3X2FkZHIxOyAvKiBmb3IgQkFSIDEgKi8KKworCS8qIGZlYXR1cmUgY29udHJvbCAqLworCWJvb2wJCQkJcnhjc3VtOworCWJvb2wJCQkJbHJvOworCWJvb2wJCQkJanVtYm9fZnJhbWU7CisKKwkvKiByeCBidWZmZXIgcmVsYXRlZCAqLworCXVuc2lnbmVkCQkJc2tiX2J1Zl9zaXplOworCWludAkJcnhfYnVmX3Blcl9wa3Q7ICAvKiBvbmx5IGFwcGx5IHRvIHRoZSAxc3QgcmluZyAqLworCWRtYV9hZGRyX3QJCQlzaGFyZWRfcGE7CisJZG1hX2FkZHJfdCBxdWV1ZV9kZXNjX3BhOworCisJLyogV2FrZS1vbi1MQU4gKi8KKwl1MzIgICAgIHdvbDsKKworCS8qIExpbmsgc3BlZWQgKi8KKwl1MzIgICAgIGxpbmtfc3BlZWQ7IC8qIGluIG1icHMgKi8KKworCXU2NCAgICAgdHhfdGltZW91dF9jb3VudDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXVuc2lnbmVkIGxvbmcgIHN0YXRlOyAgICAvKiBWTVhORVQzX1NUQVRFX0JJVF94eHggKi8KKworCWludCBkZXZfbnVtYmVyOworfTsKKworI2RlZmluZSBWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIHJlZywgdmFsKSAgXAorCXdyaXRlbCgodmFsKSwgKGFkYXB0ZXIpLT5od19hZGRyMCArIChyZWcpKQorI2RlZmluZSBWTVhORVQzX1JFQURfQkFSMF9SRUcoYWRhcHRlciwgcmVnKSAgICAgICAgXAorCXJlYWRsKChhZGFwdGVyKS0+aHdfYWRkcjAgKyAocmVnKSkKKworI2RlZmluZSBWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIHJlZywgdmFsKSAgXAorCXdyaXRlbCgodmFsKSwgKGFkYXB0ZXIpLT5od19hZGRyMSArIChyZWcpKQorI2RlZmluZSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgcmVnKSAgICAgICAgXAorCXJlYWRsKChhZGFwdGVyKS0+aHdfYWRkcjEgKyAocmVnKSkKKworI2RlZmluZSBWTVhORVQzX1dBS0VfUVVFVUVfVEhSRVNIT0xEKHRxKSAgKDUpCisjZGVmaW5lIFZNWE5FVDNfUlhfQUxMT0NfVEhSRVNIT0xEKHJxLCByaW5nX2lkeCwgYWRhcHRlcikgXAorCSgocnEpLT5yeF9yaW5nW3JpbmdfaWR4XS5zaXplID4+IDMpCisKKyNkZWZpbmUgVk1YTkVUM19HRVRfQUREUl9MTyhkbWEpICAgKCh1MzIpKGRtYSkpCisjZGVmaW5lIFZNWE5FVDNfR0VUX0FERFJfSEkoZG1hKSAgICgodTMyKSgoKHU2NCkoZG1hKSkgPj4gMzIpKQorCisvKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVk1YTkVUM19SSU5HX1NJWkVfQUxJR04gKi8KKyNkZWZpbmUgVk1YTkVUM19ERUZfVFhfUklOR19TSVpFICAgIDUxMgorI2RlZmluZSBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUgICAgMjU2CisKKyNkZWZpbmUgVk1YTkVUM19NQVhfRVRIX0hEUl9TSVpFICAgIDIyCisjZGVmaW5lIFZNWE5FVDNfTUFYX1NLQl9CVUZfU0laRSAgICAoMyoxMDI0KQorCitpbnQKK3ZteG5ldDNfcXVpZXNjZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludAordm14bmV0M19hY3RpdmF0ZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQKK3ZteG5ldDNfZm9yY2VfY2xvc2Uoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQKK3ZteG5ldDNfcmVzZXRfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkCit2bXhuZXQzX3RxX2Rlc3Ryb3koc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZAordm14bmV0M19ycV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludAordm14bmV0M19jcmVhdGVfcXVldWVzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgIHUzMiB0eF9yaW5nX3NpemUsIHUzMiByeF9yaW5nX3NpemUsIHUzMiByeF9yaW5nMl9zaXplKTsKKworZXh0ZXJuIHZvaWQgdm14bmV0M19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZteG5ldDNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4gY2hhciB2bXhuZXQzX2RyaXZlcl9uYW1lW107CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IGUyYzMzYzAuLjhlMjVjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtOTA3LDYgKzkwNyw3IEBACiAJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAkJCWNoYW4tPnR4X3N0YXR1cyA9IDE7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3NhLT5sb2NrLCBmbGFncyk7CisJCQl1cCgmY2hhbi0+d3NlbSk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggY2Y1ZmQxNy4uZjFiZmY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC01OCw4ICs1OCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOwogCWludCB1cDsKLQlpbnQgcmVxdWVzdF9zZW50OwotCXUzMiB0eHNlcTsgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIHR4c2VxOyAvKiBUWCBzZXF1ZW5jZSBudW1iZXIsIDAgPSBub25lICovCiAJdTMyIHJ4c2VxOyAvKiBSWCBzZXF1ZW5jZSBudW1iZXIgKi8KIH07CiAKQEAgLTE2Myw2ICsxNjIsNyBAQAogCXN0cnVjdCBjaXNjb19wYWNrZXQgKmNpc2NvX2RhdGE7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCV9fYmUzMiBhZGRyLCBtYXNrOworCXUzMiBhY2s7CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSkKIAkJZ290byByeF9lcnJvcjsKQEAgLTIyMyw4ICsyMjMsMTAgQEAKIAkJY2FzZSBDSVNDT19LRUVQQUxJVkVfUkVROgogCQkJc3Bpbl9sb2NrKCZzdC0+bG9jayk7CiAJCQlzdC0+cnhzZXEgPSBudG9obChjaXNjb19kYXRhLT5wYXIxKTsKLQkJCWlmIChzdC0+cmVxdWVzdF9zZW50ICYmCi0JCQkgICAgbnRvaGwoY2lzY29fZGF0YS0+cGFyMikgPT0gc3QtPnR4c2VxKSB7CisJCQlhY2sgPSBudG9obChjaXNjb19kYXRhLT5wYXIyKTsKKwkJCWlmIChhY2sgJiYgKGFjayA9PSBzdC0+dHhzZXEgfHwKKwkJCQkgICAgLyogb3VyIGN1cnJlbnQgUkVRIG1heSBiZSBpbiB0cmFuc2l0ICovCisJCQkJICAgIGFjayA9PSBzdC0+dHhzZXEgLSAxKSkgewogCQkJCXN0LT5sYXN0X3BvbGwgPSBqaWZmaWVzOwogCQkJCWlmICghc3QtPnVwKSB7CiAJCQkJCXUzMiBzZWMsIG1pbiwgaHJzLCBkYXlzOwpAQCAtMjc1LDcgKzI3Nyw2IEBACiAKIAljaXNjb19rZWVwYWxpdmVfc2VuZChkZXYsIENJU0NPX0tFRVBBTElWRV9SRVEsIGh0b25sKCsrc3QtPnR4c2VxKSwKIAkJCSAgICAgaHRvbmwoc3QtPnJ4c2VxKSk7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDE7CiAJc3Bpbl91bmxvY2soJnN0LT5sb2NrKTsKIAogCXN0LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHN0LT5zZXR0aW5ncy5pbnRlcnZhbCAqIEhaOwpAQCAtMjkzLDkgKzI5NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+bG9jaywgZmxhZ3MpOwotCXN0LT51cCA9IDA7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDA7Ci0Jc3QtPnR4c2VxID0gc3QtPnJ4c2VxID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSBzdC0+cnhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiAKIAlpbml0X3RpbWVyKCZzdC0+dGltZXIpOwpAQCAtMzE3LDggKzMxNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPmxvY2ssIGZsYWdzKTsKIAluZXRpZl9kb3JtYW50X29uKGRldik7Ci0Jc3QtPnVwID0gMDsKLQlzdC0+cmVxdWVzdF9zZW50ID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaAppbmRleCA0ZjZhYjEzLi5iMDdlNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCkBAIC0yNjYsNyArMjY2LDcgQEAKICNkZWZpbmUgQURNODIxMV9TWU5DVExfQ1MxCSgxIDw8IDI4KQogI2RlZmluZSBBRE04MjExX1NZTkNUTF9DQUwJKDEgPDwgMjcpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX1NFTENBTAkoMSA8PCAyNikKLSNkZWZpbmUgQURNODIxMV9TWU5DVExfUkZ0eXBlCSgoMSA8PCAyNCkgfHwgKDEgPDwgMjMpIHx8ICgxIDw8IDIyKSkKKyNkZWZpbmUgQURNODIxMV9TWU5DVExfUkZ0eXBlCSgoMSA8PCAyNCkgfCAoMSA8PCAyMykgfCAoMSA8PCAyMikpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX1JGTUQJKDEgPDwgMjIpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX0dFTkVSQUwJKDB4NyA8PCAyMikKIC8qIFNZTkNUTCAyMTowIERhdGEgKFNpNDEyNjogMTgtYml0IGRhdGEsIDQtYml0IGFkZHJlc3MpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNzExNmExYS4uYWJmODk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDc5MCw5ICs0NzkwLDggQEAKIHN0YXRpYyBpbnQgZ2V0X2RlY191MTYoIGNoYXIgKmJ1ZmZlciwgaW50ICpzdGFydCwgaW50IGxpbWl0ICkgewogCXUxNiB2YWx1ZTsKIAlpbnQgdmFsaWQgPSAwOwotCWZvciggdmFsdWUgPSAwOyBidWZmZXJbKnN0YXJ0XSA+PSAnMCcgJiYKLQkJICAgICBidWZmZXJbKnN0YXJ0XSA8PSAnOScgJiYKLQkJICAgICAqc3RhcnQgPCBsaW1pdDsgKCpzdGFydCkrKyApIHsKKwlmb3IgKHZhbHVlID0gMDsgKnN0YXJ0IDwgbGltaXQgJiYgYnVmZmVyWypzdGFydF0gPj0gJzAnICYmCisJCQlidWZmZXJbKnN0YXJ0XSA8PSAnOSc7ICgqc3RhcnQpKyspIHsKIAkJdmFsaWQgPSAxOwogCQl2YWx1ZSAqPSAxMDsKIAkJdmFsdWUgKz0gYnVmZmVyWypzdGFydF0gLSAnMCc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggZDA1OTNlZC4uZjYwMzZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtNDMsMjEgKzQzLDYgQEAKIAogI2luY2x1ZGUgImFpcm8uaCIKIAotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1ZyA+IChuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xNDUsMTEgKzEzMCwxMCBAQAogewogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAKLQlERUJVRygwLCAiYWlyb19hdHRhY2goKVxuIik7CisJZGV2X2RiZygmcF9kZXYtPmRldiwgImFpcm9fYXR0YWNoKClcbiIpOwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwotCXBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJcF9kZXYtPmlycS5IYW5kbGVyID0gTlVMTDsKIAogCS8qCkBAIC0xODQsNyArMTY4LDcgQEAKIAogc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImFpcm9fZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJhaXJvX2RldGFjaFxuIik7CiAKIAlhaXJvX3JlbGVhc2UobGluayk7CiAKQEAgLTIwNCw5ICsxODgsNiBAQAogCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgYWlyb19jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKIAkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LApAQCAtMjc1LDExICsyNTYsMTEgQEAKIAkJcmVxLT5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwogCQlyZXEtPlNpemUgPSBtZW0tPndpblswXS5sZW47CiAJCXJlcS0+QWNjZXNzU3BlZWQgPSAwOwotCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZwX2RldiwgcmVxLCAmcF9kZXYtPndpbikgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikgIT0gMCkKIAkJCXJldHVybiAtRU5PREVWOwogCQltYXAuUGFnZSA9IDA7CiAJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2Rldi0+d2luLCAmbWFwKSAhPSAwKQorCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCkBAIC0yOTEsMTEgKzI3MiwxMSBAQAogewogCWxvY2FsX2luZm9fdCAqZGV2OwogCXdpbl9yZXFfdCAqcmVxOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJZGV2ID0gbGluay0+cHJpdjsKIAotCURFQlVHKDAsICJhaXJvX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiYWlyb19jb25maWdcbiIpOwogCiAJcmVxID0ga3phbGxvYyhzaXplb2Yod2luX3JlcV90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXEpCkBAIC0zMTUsOCArMjk2LDggQEAKIAkgKiBhbmQgbW9zdCBjbGllbnQgZHJpdmVycyB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbgogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KLQlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhaXJvX2NzX2NvbmZpZ19jaGVjaywgcmVxKTsKLQlpZiAobGFzdF9yZXQpCisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGFpcm9fY3NfY29uZmlnX2NoZWNrLCByZXEpOworCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCiAJLyoKQEAgLTMyNCwyMSArMzA1LDI1IEBACiAJICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKIAkgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJKi8KLQlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CisJfQogCiAJLyoKIAkgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CiAJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKLQkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZsaW5rLT5kZXYpOwogCWlmICghKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikKLQkJZ290byBjc19mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCkBAIC0zNjgsOCArMzUzLDYgQEAKIAlrZnJlZShyZXEpOwogCXJldHVybiAwOwogCi0gY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKICBmYWlsZWQ6CiAJYWlyb19yZWxlYXNlKGxpbmspOwogCWtmcmVlKHJlcSk7CkBAIC0zODYsNyArMzY5LDcgQEAKIAogc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJhaXJvX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImFpcm9fcmVsZWFzZVxuIik7CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCA5YzZhYjUzLi45NWE4ZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTExMjUsNyArMTEyNSw2IEBACiAJLyogY29uZmlndXJlIG9wZXJhdGlvbmFsIG1vZGUgKi8KIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKIAotCWF0aDVrX2h3X3NldF9tY2FzdF9maWx0ZXIoYWgsIDAsIDApOwogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfTU9ERSwgIlJYIGZpbHRlciAweCV4XG4iLCByZmlsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYwppbmRleCBiNzY3YzNiLi5iNTQ4YzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCkBAIC02MywxMiArNjMsMTYgQEAKIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQU1CSVQsIDB4MDQyMiksIEFUSF9MRUQoMSwgMSkgfSwKIAkvKiBFLW1hY2hpbmVzIEU1MTAgKHR1bGlvbUBnbWFpbC5jb20pICovCiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FNQklULCAweDA0MjgpLCBBVEhfTEVEKDMsIDApIH0sCisJLyogQmVuUSBKb3lib29rIFI1NXYgKG5vd3ltYXJsdWtAd3AucGwpICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX1FNSSwgMHgwMTAwKSwgQVRIX0xFRCgxLCAwKSB9LAogCS8qIEFjZXIgRXh0ZW5zYSA1NjIweiAobmVrb3JlZXZlQGdtYWlsLmNvbSkgKi8KIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfUU1JLCAweDAxMDUpLCBBVEhfTEVEKDMsIDApIH0sCiAJLyogRnVrYXRvIERhdGFjYXNrIEp1cGl0ZXIgMTAxNGEgKG1yYjc0QGdteC5hdCkgKi8KIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQVpXQVZFLCAweDEwMjYpLCBBVEhfTEVEKDMsIDApIH0sCiAJLyogSUJNIFRoaW5rUGFkIEFSNUJYQjYgKGxlZ292aW5pQHNwaXJvLmZpc2ljYS51bmlwZC5pdCkgKi8KIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfSUJNLCAweDA1OGEpLCBBVEhfTEVEKDEsIDApIH0sCisJLyogSFAgQ29tcGFxIENRNjAtMjA2VVMgKGRkcmVnZ29yc0BqdW1wdHYuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9IUCwgMHgwMTM3YSksIEFUSF9MRUQoMywgMSkgfSwKIAkvKiBIUCBDb21wYXEgQzcwMCAobml0cm91c25yZ0BnbWFpbC5jb20pICovCiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0hQLCAweDAxMzdiKSwgQVRIX0xFRCgzLCAxKSB9LAogCS8qIElCTS1zcGVjaWZpYyBBUjUyMTIgKGFsbCBvdGhlcnMpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCA1MmJlZDg5Li40M2QyYmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTE1NTUsNiArMTU1NSw4IEBACiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAogCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAKKwlody0+d2lwaHktPnBzX2RlZmF1bHQgPSBmYWxzZTsKKwogCWh3LT5xdWV1ZXMgPSA0OwogCWh3LT5tYXhfcmF0ZXMgPSA0OwogCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNTAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggMTZhMjcxNy4uMTg5NWQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCQlyZXR1cm4gcmF0ZTsKIAogCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkX3NpbmdsZV9zdHJlYW0gJiYKLQkgICAgIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSk7CisJICAgICEoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykpCiAJCXJldHVybiByYXRlOwogCiAJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggZGRhYTg1OS4uMzI0MDc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC01NSwyMiArNTUsNiBAQAogCiAjaW5jbHVkZSAiYXRtZWwuaCIKIAotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0KLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7Ci1zdGF0aWMgY2hhciAqdmVyc2lvbiA9ICIkUmV2aXNpb246IDEuMiAkIjsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0xNTUsMTEgKzEzOSwxMCBAQAogewogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAKLQlERUJVRygwLCAiYXRtZWxfYXR0YWNoKClcbiIpOworCWRldl9kYmcoJnBfZGV2LT5kZXYsICJhdG1lbF9hdHRhY2goKVxuIik7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KIAlwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0JcF9kZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAJLyoKQEAgLTE5NCw3ICsxNzcsNyBAQAogCiBzdGF0aWMgdm9pZCBhdG1lbF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImF0bWVsX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiYXRtZWxfZGV0YWNoXG4iKTsKIAogCWF0bWVsX3JlbGVhc2UobGluayk7CiAKQEAgLTIwOSw5ICsxOTIsNiBAQAogCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIC8qIENhbGwtYmFjayBmdW5jdGlvbiB0byBpbnRlcnJvZ2F0ZSBQQ01DSUEtc3BlY2lmaWMgaW5mb3JtYXRpb24KICAgIGFib3V0IHRoZSBjdXJyZW50IGV4aXN0YW5jZSBvZiB0aGUgY2FyZCAqLwogc3RhdGljIGludCBjYXJkX3ByZXNlbnQodm9pZCAqYXJnKQpAQCAtMjc1LDEzICsyNTUsMTMgQEAKIHN0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWxvY2FsX2luZm9fdCAqZGV2OwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAKIAlkZXYgPSBsaW5rLT5wcml2OwotCWRpZCA9IGRldl9nZXRfZHJ2ZGF0YSgmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJZGlkID0gZGV2X2dldF9kcnZkYXRhKCZsaW5rLT5kZXYpOwogCi0JREVCVUcoMCwgImF0bWVsX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiYXRtZWxfY29uZmlnXG4iKTsKIAogCS8qCiAJICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLApAQCAtMzAzLDMxICsyODMsMzYgQEAKIAkgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQogCSAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KIAkqLwotCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKwl9CiAKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUCiAJCSAgICAgICAiYXRtZWw6IGNhbm5vdCBhc3NpZ24gSVJROiBjaGVjayB0aGF0IENPTkZJR19JU0EgaXMgc2V0IGluIGtlcm5lbCBjb25maWcuIik7Ci0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPQogCQlpbml0X2F0bWVsX2NhcmQobGluay0+aXJxLkFzc2lnbmVkSVJRLAogCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwKIAkJCQlkaWQgPyBkaWQtPmRyaXZlcl9pbmZvIDogQVRNRUxfRldfVFlQRV9OT05FLAotCQkJCSZoYW5kbGVfdG9fZGV2KGxpbmspLAorCQkJCSZsaW5rLT5kZXYsCiAJCQkJY2FyZF9wcmVzZW50LAogCQkJCWxpbmspOwogCWlmICghKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2KQotCQkJZ290byBjc19mYWlsZWQ7CisJCQlnb3RvIGZhaWxlZDsKIAogCiAJLyoKQEAgLTM0MCw4ICszMjUsNiBAQAogCiAJcmV0dXJuIDA7CiAKLSBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogIGZhaWxlZDoKIAlhdG1lbF9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpAQCAtMzU5LDcgKzM0Miw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9ICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldjsKIAotCURFQlVHKDAsICJhdG1lbF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJhdG1lbF9yZWxlYXNlXG4iKTsKIAogCWlmIChkZXYpCiAJCXN0b3BfYXRtZWxfY2FyZChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGZhMTU0OWEuLjY2MDcxNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTYwNyw4MiArNjA3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBwOwogfTsKIAotc3RydWN0IGI0M193bGRldjsKLQotLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBXTEFOIHBhcnRzICg4MDIuMTEgY29yZXMpIG9mIHRoZSBiNDMgY2hpcC4gKi8KLXN0cnVjdCBiNDNfd2wgewotCS8qIFBvaW50ZXIgdG8gdGhlIGFjdGl2ZSB3aXJlbGVzcyBkZXZpY2Ugb24gdGhpcyBjaGlwICovCi0Jc3RydWN0IGI0M193bGRldiAqY3VycmVudF9kZXY7Ci0JLyogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExIGhhcmR3YXJlIGRhdGEgc3RydWN0dXJlICovCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0KLQkvKiBHbG9iYWwgZHJpdmVyIG11dGV4LiBFdmVyeSBvcGVyYXRpb24gbXVzdCBydW4gd2l0aCB0aGlzIG11dGV4IGxvY2tlZC4gKi8KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0JLyogSGFyZC1JUlEgc3BpbmxvY2suIFRoaXMgbG9jayBwcm90ZWN0cyB0aGluZ3MgdXNlZCBpbiB0aGUgaGFyZC1JUlEKLQkgKiBoYW5kbGVyLCBvbmx5LiBUaGlzIGJhc2ljYWxseSBpcyBqdXN0IHRoZSBJUlEgbWFzayByZWdpc3Rlci4gKi8KLQlzcGlubG9ja190IGhhcmRpcnFfbG9jazsKLQotCS8qIFRoZSBudW1iZXIgb2YgcXVldWVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIHdpdGggdGhlIG1hYzgwMjExIHN1YnN5c3RlbQotCSAqIGluaXRpYWxseS4gVGhpcyBpcyBhIGJhY2t1cCBjb3B5IG9mIGh3LT5xdWV1ZXMgaW4gY2FzZSBody0+cXVldWVzIGhhcwotCSAqIHRvIGJlIGR5bmFtaWNhbGx5IGxvd2VyZWQgYXQgcnVudGltZSAoRmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBRb1MpLgotCSAqIGh3LT5xdWV1ZXMgaGFzIHRvIGJlIHJlc3RvcmVkIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBiZWZvcmUgdW5yZWdpc3RlcmluZwotCSAqIGZyb20gdGhlIG1hYzgwMjExIHN1YnN5c3RlbS4gKi8KLQl1MTYgbWFjODAyMTFfaW5pdGlhbGx5X3JlZ2lzdGVyZWRfcXVldWVzOwotCi0JLyogV2UgY2FuIG9ubHkgaGF2ZSBvbmUgb3BlcmF0aW5nIGludGVyZmFjZSAoODAyLjExIGNvcmUpCi0JICogYXQgYSB0aW1lLiBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaW50ZXJmYWNlIGZvbGxvd3MuCi0JICovCi0KLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCS8qIFRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgb3BlcmF0aW5nIGludGVyZmFjZS4gKi8KLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JLyogQ3VycmVudCBCU1NJRCAqLwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQkvKiBJbnRlcmZhY2UgdHlwZS4gKE5MODAyMTFfSUZUWVBFX1hYWCkgKi8KLQlpbnQgaWZfdHlwZTsKLQkvKiBJcyB0aGUgY2FyZCBvcGVyYXRpbmcgaW4gQVAsIFNUQSBvciBJQlNTIG1vZGU/ICovCi0JYm9vbCBvcGVyYXRpbmc7Ci0JLyogZmlsdGVyIGZsYWdzICovCi0JdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsKLQkvKiBTdGF0cyBhYm91dCB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlICovCi0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgaWVlZV9zdGF0czsKLQotI2lmZGVmIENPTkZJR19CNDNfSFdSTkcKLQlzdHJ1Y3QgaHdybmcgcm5nOwotCWJvb2wgcm5nX2luaXRpYWxpemVkOwotCWNoYXIgcm5nX25hbWVbMzAgKyAxXTsKLSNlbmRpZiAvKiBDT05GSUdfQjQzX0hXUk5HICovCi0KLQkvKiBMaXN0IG9mIGFsbCB3aXJlbGVzcyBkZXZpY2VzIG9uIHRoaXMgY2hpcCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZGV2bGlzdDsKLQl1OCBucl9kZXZzOwotCi0JYm9vbCByYWRpb3RhcF9lbmFibGVkOwotCWJvb2wgcmFkaW9fZW5hYmxlZDsKLQotCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9iZWFjb247Ci0JYm9vbCBiZWFjb24wX3VwbG9hZGVkOwotCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKLQlib29sIGJlYWNvbl90ZW1wbGF0ZXNfdmlyZ2luOyAvKiBOZXZlciB3cm90ZSB0aGUgdGVtcGxhdGVzPyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fdXBkYXRlX3RyaWdnZXI7Ci0KLQkvKiBUaGUgY3VycmVudCBRT1MgcGFyYW1ldGVycyBmb3IgdGhlIDQgcXVldWVzLiAqLwotCXN0cnVjdCBiNDNfcW9zX3BhcmFtcyBxb3NfcGFyYW1zWzRdOwotCi0JLyogV29yayBmb3IgYWRqdXN0bWVudCBvZiB0aGUgdHJhbnNtaXNzaW9uIHBvd2VyLgotCSAqIFRoaXMgaXMgc2NoZWR1bGVkIHdoZW4gd2UgZGV0ZXJtaW5lIHRoYXQgdGhlIGFjdHVhbCBUWCBvdXRwdXQKLQkgKiBwb3dlciBkb2Vzbid0IG1hdGNoIHdoYXQgd2Ugd2FudC4gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl9hZGp1c3Rfd29yazsKLQotCS8qIFBhY2tldCB0cmFuc21pdCB3b3JrICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7Ci0JLyogUXVldWUgb2YgcGFja2V0cyB0byBiZSB0cmFuc21pdHRlZC4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwotCi0JLyogVGhlIGRldmljZSBMRURzLiAqLwotCXN0cnVjdCBiNDNfbGVkcyBsZWRzOwotfTsKK3N0cnVjdCBiNDNfd2w7CiAKIC8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLwogZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHsKQEAgLTgyNCw2ICs3NDksOTcgQEAKICNlbmRpZgogfTsKIAorLyoKKyAqIEluY2x1ZGUgZ29lcyBoZXJlIHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBwcm9ibGVtLgorICogQSBiZXR0ZXIgZml4IHdvdWxkIGJlIHRvIGludGVncmF0ZSB4bWl0LmggaW50byBiNDMuaC4KKyAqLworI2luY2x1ZGUgInhtaXQuaCIKKworLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBXTEFOIHBhcnRzICg4MDIuMTEgY29yZXMpIG9mIHRoZSBiNDMgY2hpcC4gKi8KK3N0cnVjdCBiNDNfd2wgeworCS8qIFBvaW50ZXIgdG8gdGhlIGFjdGl2ZSB3aXJlbGVzcyBkZXZpY2Ugb24gdGhpcyBjaGlwICovCisJc3RydWN0IGI0M193bGRldiAqY3VycmVudF9kZXY7CisJLyogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExIGhhcmR3YXJlIGRhdGEgc3RydWN0dXJlICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwkvKiBHbG9iYWwgZHJpdmVyIG11dGV4LiBFdmVyeSBvcGVyYXRpb24gbXVzdCBydW4gd2l0aCB0aGlzIG11dGV4IGxvY2tlZC4gKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJLyogSGFyZC1JUlEgc3BpbmxvY2suIFRoaXMgbG9jayBwcm90ZWN0cyB0aGluZ3MgdXNlZCBpbiB0aGUgaGFyZC1JUlEKKwkgKiBoYW5kbGVyLCBvbmx5LiBUaGlzIGJhc2ljYWxseSBpcyBqdXN0IHRoZSBJUlEgbWFzayByZWdpc3Rlci4gKi8KKwlzcGlubG9ja190IGhhcmRpcnFfbG9jazsKKworCS8qIFRoZSBudW1iZXIgb2YgcXVldWVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIHdpdGggdGhlIG1hYzgwMjExIHN1YnN5c3RlbQorCSAqIGluaXRpYWxseS4gVGhpcyBpcyBhIGJhY2t1cCBjb3B5IG9mIGh3LT5xdWV1ZXMgaW4gY2FzZSBody0+cXVldWVzIGhhcworCSAqIHRvIGJlIGR5bmFtaWNhbGx5IGxvd2VyZWQgYXQgcnVudGltZSAoRmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBRb1MpLgorCSAqIGh3LT5xdWV1ZXMgaGFzIHRvIGJlIHJlc3RvcmVkIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBiZWZvcmUgdW5yZWdpc3RlcmluZworCSAqIGZyb20gdGhlIG1hYzgwMjExIHN1YnN5c3RlbS4gKi8KKwl1MTYgbWFjODAyMTFfaW5pdGlhbGx5X3JlZ2lzdGVyZWRfcXVldWVzOworCisJLyogV2UgY2FuIG9ubHkgaGF2ZSBvbmUgb3BlcmF0aW5nIGludGVyZmFjZSAoODAyLjExIGNvcmUpCisJICogYXQgYSB0aW1lLiBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaW50ZXJmYWNlIGZvbGxvd3MuCisJICovCisKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCS8qIFRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgb3BlcmF0aW5nIGludGVyZmFjZS4gKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJLyogQ3VycmVudCBCU1NJRCAqLworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkvKiBJbnRlcmZhY2UgdHlwZS4gKE5MODAyMTFfSUZUWVBFX1hYWCkgKi8KKwlpbnQgaWZfdHlwZTsKKwkvKiBJcyB0aGUgY2FyZCBvcGVyYXRpbmcgaW4gQVAsIFNUQSBvciBJQlNTIG1vZGU/ICovCisJYm9vbCBvcGVyYXRpbmc7CisJLyogZmlsdGVyIGZsYWdzICovCisJdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsKKwkvKiBTdGF0cyBhYm91dCB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlICovCisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgaWVlZV9zdGF0czsKKworI2lmZGVmIENPTkZJR19CNDNfSFdSTkcKKwlzdHJ1Y3QgaHdybmcgcm5nOworCWJvb2wgcm5nX2luaXRpYWxpemVkOworCWNoYXIgcm5nX25hbWVbMzAgKyAxXTsKKyNlbmRpZiAvKiBDT05GSUdfQjQzX0hXUk5HICovCisKKwkvKiBMaXN0IG9mIGFsbCB3aXJlbGVzcyBkZXZpY2VzIG9uIHRoaXMgY2hpcCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGV2bGlzdDsKKwl1OCBucl9kZXZzOworCisJYm9vbCByYWRpb3RhcF9lbmFibGVkOworCWJvb2wgcmFkaW9fZW5hYmxlZDsKKworCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9iZWFjb247CisJYm9vbCBiZWFjb24wX3VwbG9hZGVkOworCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKKwlib29sIGJlYWNvbl90ZW1wbGF0ZXNfdmlyZ2luOyAvKiBOZXZlciB3cm90ZSB0aGUgdGVtcGxhdGVzPyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fdXBkYXRlX3RyaWdnZXI7CisKKwkvKiBUaGUgY3VycmVudCBRT1MgcGFyYW1ldGVycyBmb3IgdGhlIDQgcXVldWVzLiAqLworCXN0cnVjdCBiNDNfcW9zX3BhcmFtcyBxb3NfcGFyYW1zWzRdOworCisJLyogV29yayBmb3IgYWRqdXN0bWVudCBvZiB0aGUgdHJhbnNtaXNzaW9uIHBvd2VyLgorCSAqIFRoaXMgaXMgc2NoZWR1bGVkIHdoZW4gd2UgZGV0ZXJtaW5lIHRoYXQgdGhlIGFjdHVhbCBUWCBvdXRwdXQKKwkgKiBwb3dlciBkb2Vzbid0IG1hdGNoIHdoYXQgd2Ugd2FudC4gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl9hZGp1c3Rfd29yazsKKworCS8qIFBhY2tldCB0cmFuc21pdCB3b3JrICovCisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CisJLyogUXVldWUgb2YgcGFja2V0cyB0byBiZSB0cmFuc21pdHRlZC4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOworCisJLyogVGhlIGRldmljZSBMRURzLiAqLworCXN0cnVjdCBiNDNfbGVkcyBsZWRzOworCisjaWZkZWYgQ09ORklHX0I0M19QSU8KKwkvKgorCSAqIFJYL1RYIGhlYWRlci90YWlsIGJ1ZmZlcnMgdXNlZCBieSB0aGUgZnJhbWUgdHJhbnNtaXQgZnVuY3Rpb25zLgorCSAqLworCXN0cnVjdCBiNDNfcnhoZHJfZnc0IHJ4aGRyOworCXN0cnVjdCBiNDNfdHhoZHIgdHhoZHI7CisJdTggcnhfdGFpbFs0XTsKKwl1OCB0eF90YWlsWzRdOworI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCit9OworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBiNDNfd2wgKmh3X3RvX2I0M193bChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlyZXR1cm4gaHctPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggODcwMTAzNC4uZGU0ZTgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMTE1Nyw4ICsxMTU3LDkgQEAKIH0KIAogc3RhdGljIGludCBkbWFfdHhfZnJhZ21lbnQoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLAotCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKKwkJCSAgIHN0cnVjdCBza19idWZmICoqaW5fc2tiKQogeworCXN0cnVjdCBza19idWZmICpza2IgPSAqaW5fc2tiOwogCWNvbnN0IHN0cnVjdCBiNDNfZG1hX29wcyAqb3BzID0gcmluZy0+b3BzOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAl1OCAqaGVhZGVyOwpAQCAtMTIyNCw4ICsxMjI1LDE0IEBACiAJCX0KIAogCQltZW1jcHkoc2tiX3B1dChib3VuY2Vfc2tiLCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQltZW1jcHkoYm91bmNlX3NrYi0+Y2IsIHNrYi0+Y2IsIHNpemVvZihza2ItPmNiKSk7CisJCWJvdW5jZV9za2ItPmRldiA9IHNrYi0+ZGV2OworCQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoYm91bmNlX3NrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihib3VuY2Vfc2tiKTsKKwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlza2IgPSBib3VuY2Vfc2tiOworCQkqaW5fc2tiID0gYm91bmNlX3NrYjsKIAkJbWV0YS0+c2tiID0gc2tiOwogCQltZXRhLT5kbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCBza2ItPmxlbiwgMSk7CiAJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgbWV0YS0+ZG1hYWRkciwgc2tiLT5sZW4sIDEpKSB7CkBAIC0xMzU1LDcgKzEzNjIsMTEgQEAKIAkgKiBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgaXQgcGVyIGZyYW1lLiAqLwogCXJpbmctPnF1ZXVlX3ByaW8gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAotCWVyciA9IGRtYV90eF9mcmFnbWVudChyaW5nLCBza2IpOworCS8qIGRtYV90eF9mcmFnbWVudCBtaWdodCByZWFsbG9jYXRlIHRoZSBza2IsIHNvIGludmFsaWRhdGUgcG9pbnRlcnMgcG9pbnRpbmcKKwkgKiBpbnRvIHRoZSBza2IgZGF0YSBvciBjYiBub3cuICovCisJaGRyID0gTlVMTDsKKwlpbmZvID0gTlVMTDsKKwllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgJnNrYik7CiAJaWYgKHVubGlrZWx5KGVyciA9PSAtRU5PS0VZKSkgewogCQkvKiBEcm9wIHRoaXMgcGFja2V0LCBhcyB3ZSBkb24ndCBoYXZlIHRoZSBlbmNyeXB0aW9uIGtleQogCQkgKiBhbnltb3JlIGFuZCBtdXN0IG5vdCB0cmFuc21pdCBpdCB1bmVuY3J5cHRlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5jCmluZGV4IGZiZTNkNGYuLjFlOGRiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYwpAQCAtMzQ4LDkgKzM0OCw5IEBACiAJfQogfQogCi12b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQordm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2wgKndsKQogewotCXN0cnVjdCBiNDNfbGVkcyAqbGVkcyA9ICZkZXYtPndsLT5sZWRzOworCXN0cnVjdCBiNDNfbGVkcyAqbGVkcyA9ICZ3bC0+bGVkczsKIAogCWI0M191bnJlZ2lzdGVyX2xlZCgmbGVkcy0+bGVkX3R4KTsKIAliNDNfdW5yZWdpc3Rlcl9sZWQoJmxlZHMtPmxlZF9yeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuaAppbmRleCA5NTkyZTRjLi4zMmI2NmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIEI0M19MRURTX0hfCiAjZGVmaW5lIEI0M19MRURTX0hfCiAKK3N0cnVjdCBiNDNfd2w7CiBzdHJ1Y3QgYjQzX3dsZGV2OwogCiAjaWZkZWYgQ09ORklHX0I0M19MRURTCkBAIC02MCw3ICs2MSw3IEBACiB9OwogCiB2b2lkIGI0M19sZWRzX3JlZ2lzdGVyKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Ci12b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KTsKK3ZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsICp3bCk7CiB2b2lkIGI0M19sZWRzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX2xlZHNfZXhpdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfbGVkc19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CkBAIC03Niw3ICs3Nyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYjQzX2xlZHNfcmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bCAqd2wpCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYjQzX2xlZHNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA5YjkwN2EzLi4wOThkZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTM4NzQsNiArMzg3NCw3IEBACiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwogCXN0cnVjdCBiNDNfd2xkZXYgKm9yaWdfZGV2OworCXUzMiBtYXNrOwogCiByZWRvOgogCWlmICghZGV2IHx8IGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpCkBAIC0zOTIwLDcgKzM5MjEsOCBAQAogCQkJZ290byByZWRvOwogCQlyZXR1cm4gZGV2OwogCX0KLQlCNDNfV0FSTl9PTihiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9NQVNLKSk7CisJbWFzayA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOworCUI0M19XQVJOX09OKG1hc2sgIT0gMHhGRkZGRkZGRiAmJiBtYXNrKTsKIAogCS8qIERyYWluIHRoZSBUWCBxdWV1ZSAqLwogCXdoaWxlIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpKQpAQCAtNDUxOSw5ICs0NTIxLDggQEAKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CiAKLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCS8qIEZJWE1FOiBhZGQgbG9ja2luZyAqLwogCWI0M191cGRhdGVfdGVtcGxhdGVzKHdsKTsKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OTcsNyArNDk5OCw3IEBACiAKIAlpZiAobGlzdF9lbXB0eSgmd2wtPmRldmxpc3QpKSB7CiAJCWI0M19ybmdfZXhpdCh3bCk7Ci0JCWI0M19sZWRzX3VucmVnaXN0ZXIod2xkZXYpOworCQliNDNfbGVkc191bnJlZ2lzdGVyKHdsKTsKIAkJLyogTGFzdCBjb3JlIG9uIHRoZSBjaGlwIHVucmVnaXN0ZXJlZC4KIAkJICogV2UgY2FuIGRlc3Ryb3kgY29tbW9uIHN0cnVjdCBiNDNfd2wuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCmluZGV4IDZjM2E3NDkuLjk4NDE3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKQEAgLTY1LDM1ICs2NSwxNSBAQAogCXN0cnVjdCBzc2JfYnVzICpzc2I7CiAJd2luX3JlcV90IHdpbjsKIAltZW1yZXFfdCBtZW07Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwogCWludCBlcnIgPSAtRU5PTUVNOwogCWludCByZXMgPSAwOwotCXVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKIAogCXNzYiA9IGt6YWxsb2Moc2l6ZW9mKCpzc2IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNzYikKIAkJZ290byBvdXRfZXJyb3I7CiAKIAllcnIgPSAtRU5PREVWOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAotCXJlcyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoZGV2LCAmdHVwbGUpOwotCWlmIChyZXMgIT0gMCkKLQkJZ290byBlcnJfa2ZyZWVfc3NiOwotCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShkZXYsICZ0dXBsZSk7Ci0JaWYgKHJlcyAhPSAwKQotCQlnb3RvIGVycl9rZnJlZV9zc2I7Ci0JcmVzID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKLQlpZiAocmVzICE9IDApCi0JCWdvdG8gZXJyX2tmcmVlX3NzYjsKLQotCWRldi0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JZGV2LT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CiAJZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMTA3LDIwICs4NywxOCBAQAogCXdpbi5CYXNlID0gMDsKIAl3aW4uU2l6ZSA9IFNTQl9DT1JFX1NJWkU7CiAJd2luLkFjY2Vzc1NwZWVkID0gMjUwOwotCXJlcyA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmZGV2LCAmd2luLCAmZGV2LT53aW4pOworCXJlcyA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhkZXYsICZ3aW4sICZkZXYtPndpbik7CiAJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7CiAKIAltZW0uQ2FyZE9mZnNldCA9IDA7CiAJbWVtLlBhZ2UgPSAwOwotCXJlcyA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT53aW4sICZtZW0pOworCXJlcyA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LCBkZXYtPndpbiwgJm1lbSk7CiAJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9kaXNhYmxlOwogCiAJZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLQlkZXYtPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlkZXYtPmlycS5IYW5kbGVyID0gTlVMTDsgLyogVGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBsYXRlci4gKi8KLQlkZXYtPmlycS5JbnN0YW5jZSA9IE5VTEw7CiAJcmVzID0gcGNtY2lhX3JlcXVlc3RfaXJxKGRldiwgJmRldi0+aXJxKTsKIAlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2Rpc2FibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggNWU4NzY1MC4uOWI5MDQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpAQCAtMzMyLDYgKzMzMiw3IEBACiAJCQkJdW5zaWduZWQgaW50IGRhdGFfbGVuKQogewogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHEtPmRldjsKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJY29uc3QgdTggKmRhdGEgPSBfZGF0YTsKIAogCWN0bCB8PSBCNDNfUElPX1RYQ1RMX1dSSVRFTE8gfCBCNDNfUElPX1RYQ1RMX1dSSVRFSEk7CkBAIC0zNDEsMTMgKzM0MiwxMiBAQAogCQkJcS0+bW1pb19iYXNlICsgQjQzX1BJT19UWERBVEEsCiAJCQlzaXplb2YodTE2KSk7CiAJaWYgKGRhdGFfbGVuICYgMSkgewotCQl1OCB0YWlsWzJdID0geyAwLCB9OwotCiAJCS8qIFdyaXRlIHRoZSBsYXN0IGJ5dGUuICovCiAJCWN0bCAmPSB+QjQzX1BJT19UWENUTF9XUklURUhJOwogCQliNDNfcGlvdHhfd3JpdGUxNihxLCBCNDNfUElPX1RYQ1RMLCBjdGwpOwotCQl0YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDFdOwotCQlzc2JfYmxvY2tfd3JpdGUoZGV2LT5kZXYsIHRhaWwsIDIsCisJCXdsLT50eF90YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQl3bC0+dHhfdGFpbFsxXSA9IDA7CisJCXNzYl9ibG9ja193cml0ZShkZXYtPmRldiwgd2wtPnR4X3RhaWwsIDIsCiAJCQkJcS0+bW1pb19iYXNlICsgQjQzX1BJT19UWERBVEEsCiAJCQkJc2l6ZW9mKHUxNikpOwogCX0KQEAgLTM4Miw2ICszODIsNyBAQAogCQkJCXVuc2lnbmVkIGludCBkYXRhX2xlbikKIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwogCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CiAKIAljdGwgfD0gQjQzX1BJTzhfVFhDVExfMF83IHwgQjQzX1BJTzhfVFhDVExfOF8xNSB8CkBAIC0zOTIsMjkgKzM5MywzMSBAQAogCQkJcS0+bW1pb19iYXNlICsgQjQzX1BJTzhfVFhEQVRBLAogCQkJc2l6ZW9mKHUzMikpOwogCWlmIChkYXRhX2xlbiAmIDMpIHsKLQkJdTggdGFpbFs0XSA9IHsgMCwgfTsKLQorCQl3bC0+dHhfdGFpbFszXSA9IDA7CiAJCS8qIFdyaXRlIHRoZSBsYXN0IGZldyBieXRlcy4gKi8KIAkJY3RsICY9IH4oQjQzX1BJTzhfVFhDVExfOF8xNSB8IEI0M19QSU84X1RYQ1RMXzE2XzIzIHwKIAkJCSBCNDNfUElPOF9UWENUTF8yNF8zMSk7CiAJCXN3aXRjaCAoZGF0YV9sZW4gJiAzKSB7CiAJCWNhc2UgMzoKIAkJCWN0bCB8PSBCNDNfUElPOF9UWENUTF8xNl8yMyB8IEI0M19QSU84X1RYQ1RMXzhfMTU7Ci0JCQl0YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDNdOwotCQkJdGFpbFsxXSA9IGRhdGFbZGF0YV9sZW4gLSAyXTsKLQkJCXRhaWxbMl0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCQl3bC0+dHhfdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAzXTsKKwkJCXdsLT50eF90YWlsWzFdID0gZGF0YVtkYXRhX2xlbiAtIDJdOworCQkJd2wtPnR4X3RhaWxbMl0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJY3RsIHw9IEI0M19QSU84X1RYQ1RMXzhfMTU7Ci0JCQl0YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDJdOwotCQkJdGFpbFsxXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJCXdsLT50eF90YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDJdOworCQkJd2wtPnR4X3RhaWxbMV0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCQl3bC0+dHhfdGFpbFsyXSA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJdGFpbFswXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJCXdsLT50eF90YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQkJd2wtPnR4X3RhaWxbMV0gPSAwOworCQkJd2wtPnR4X3RhaWxbMl0gPSAwOwogCQkJYnJlYWs7CiAJCX0KIAkJYjQzX3Bpb3R4X3dyaXRlMzIocSwgQjQzX1BJTzhfVFhDVEwsIGN0bCk7Ci0JCXNzYl9ibG9ja193cml0ZShkZXYtPmRldiwgdGFpbCwgNCwKKwkJc3NiX2Jsb2NrX3dyaXRlKGRldi0+ZGV2LCB3bC0+dHhfdGFpbCwgNCwKIAkJCQlxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9UWERBVEEsCiAJCQkJc2l6ZW9mKHUzMikpOwogCX0KQEAgLTQ0Niw4ICs0NDksOSBAQAogc3RhdGljIGludCBwaW9fdHhfZnJhbWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKIAkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGI0M193bGRldiAqZGV2ID0gcS0+ZGV2OworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAlzdHJ1Y3QgYjQzX3Bpb190eHBhY2tldCAqcGFjazsKLQlzdHJ1Y3QgYjQzX3R4aGRyIHR4aGRyOwogCXUxNiBjb29raWU7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgaGRybGVuOwpAQCAtNDU4LDggKzQ2Miw4IEBACiAJCQkgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0LCBsaXN0KTsKIAogCWNvb2tpZSA9IGdlbmVyYXRlX2Nvb2tpZShxLCBwYWNrKTsKLQloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShxLT5kZXYpOwotCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihxLT5kZXYsICh1OCAqKSZ0eGhkciwgc2tiLAorCWhkcmxlbiA9IGI0M190eGhkcl9zaXplKGRldik7CisJZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKGRldiwgKHU4ICopJndsLT50eGhkciwgc2tiLAogCQkJCSBpbmZvLCBjb29raWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC00NjcsMTUgKzQ3MSwxNSBAQAogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCS8qIFRlbGwgdGhlIGZpcm13YXJlIGFib3V0IHRoZSBjb29raWUgb2YgdGhlIGxhc3QKIAkJICogbWNhc3QgZnJhbWUsIHNvIGl0IGNhbiBjbGVhciB0aGUgbW9yZS1kYXRhIGJpdCBpbiBpdC4gKi8KLQkJYjQzX3NobV93cml0ZTE2KHEtPmRldiwgQjQzX1NITV9TSEFSRUQsCisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAogCQkJCUI0M19TSE1fU0hfTUNBU1RDT09LSUUsIGNvb2tpZSk7CiAJfQogCiAJcGFjay0+c2tiID0gc2tiOwogCWlmIChxLT5yZXYgPj0gOCkKLQkJcGlvX3R4X2ZyYW1lXzRieXRlX3F1ZXVlKHBhY2ssIChjb25zdCB1OCAqKSZ0eGhkciwgaGRybGVuKTsKKwkJcGlvX3R4X2ZyYW1lXzRieXRlX3F1ZXVlKHBhY2ssIChjb25zdCB1OCAqKSZ3bC0+dHhoZHIsIGhkcmxlbik7CiAJZWxzZQotCQlwaW9fdHhfZnJhbWVfMmJ5dGVfcXVldWUocGFjaywgKGNvbnN0IHU4ICopJnR4aGRyLCBoZHJsZW4pOworCQlwaW9fdHhfZnJhbWVfMmJ5dGVfcXVldWUocGFjaywgKGNvbnN0IHU4ICopJndsLT50eGhkciwgaGRybGVuKTsKIAogCS8qIFJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwYWNrZXQgc2xvdHMuCiAJICogSXQgd2lsbCBiZSBwdXQgYmFjayB3aGVuIHdlIHJlY2VpdmUgdGhlIHN0YXR1cyByZXBvcnQuICovCkBAIC02MTUsMTQgKzYxOSwxNCBAQAogc3RhdGljIGJvb2wgcGlvX3J4X2ZyYW1lKHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpCiB7CiAJc3RydWN0IGI0M193bGRldiAqZGV2ID0gcS0+ZGV2OwotCXN0cnVjdCBiNDNfcnhoZHJfZnc0IHJ4aGRyOworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAl1MTYgbGVuOwogCXUzMiBtYWNzdGF0OwogCXVuc2lnbmVkIGludCBpLCBwYWRkaW5nOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJY29uc3QgY2hhciAqZXJyX21zZyA9IE5VTEw7CiAKLQltZW1zZXQoJnJ4aGRyLCAwLCBzaXplb2YocnhoZHIpKTsKKwltZW1zZXQoJndsLT5yeGhkciwgMCwgc2l6ZW9mKHdsLT5yeGhkcikpOwogCiAJLyogQ2hlY2sgaWYgd2UgaGF2ZSBkYXRhIGFuZCB3YWl0IGZvciBpdCB0byBnZXQgcmVhZHkuICovCiAJaWYgKHEtPnJldiA+PSA4KSB7CkBAIC02NjAsMTYgKzY2NCwxNiBAQAogCiAJLyogR2V0IHRoZSBwcmVhbWJsZSAoUlggaGVhZGVyKSAqLwogCWlmIChxLT5yZXYgPj0gOCkgewotCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgJnJ4aGRyLCBzaXplb2YocnhoZHIpLAorCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgJndsLT5yeGhkciwgc2l6ZW9mKHdsLT5yeGhkciksCiAJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJTzhfUlhEQVRBLAogCQkJICAgICAgIHNpemVvZih1MzIpKTsKIAl9IGVsc2UgewotCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgJnJ4aGRyLCBzaXplb2YocnhoZHIpLAorCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgJndsLT5yeGhkciwgc2l6ZW9mKHdsLT5yeGhkciksCiAJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJT19SWERBVEEsCiAJCQkgICAgICAgc2l6ZW9mKHUxNikpOwogCX0KIAkvKiBTYW5pdHkgY2hlY2tzLiAqLwotCWxlbiA9IGxlMTZfdG9fY3B1KHJ4aGRyLmZyYW1lX2xlbik7CisJbGVuID0gbGUxNl90b19jcHUod2wtPnJ4aGRyLmZyYW1lX2xlbik7CiAJaWYgKHVubGlrZWx5KGxlbiA+IDB4NzAwKSkgewogCQllcnJfbXNnID0gImxlbiA+IDB4NzAwIjsKIAkJZ290byByeF9lcnJvcjsKQEAgLTY3OSw3ICs2ODMsNyBAQAogCQlnb3RvIHJ4X2Vycm9yOwogCX0KIAotCW1hY3N0YXQgPSBsZTMyX3RvX2NwdShyeGhkci5tYWNfc3RhdHVzKTsKKwltYWNzdGF0ID0gbGUzMl90b19jcHUod2wtPnJ4aGRyLm1hY19zdGF0dXMpOwogCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19GQ1NFUlIpIHsKIAkJaWYgKCEocS0+ZGV2LT53bC0+ZmlsdGVyX2ZsYWdzICYgRklGX0ZDU0ZBSUwpKSB7CiAJCQkvKiBEcm9wIGZyYW1lcyB3aXRoIGZhaWxlZCBGQ1MuICovCkBAIC03MDQsMjQgKzcwOCwyMiBAQAogCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU84X1JYREFUQSwKIAkJCSAgICAgICBzaXplb2YodTMyKSk7CiAJCWlmIChsZW4gJiAzKSB7Ci0JCQl1OCB0YWlsWzRdID0geyAwLCB9OwotCiAJCQkvKiBSZWFkIHRoZSBsYXN0IGZldyBieXRlcy4gKi8KLQkJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCB0YWlsLCA0LAorCQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsIHdsLT5yeF90YWlsLCA0LAogCQkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9SWERBVEEsCiAJCQkJICAgICAgIHNpemVvZih1MzIpKTsKIAkJCXN3aXRjaCAobGVuICYgMykgewogCQkJY2FzZSAzOgotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gM10gPSB0YWlsWzBdOwotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMl0gPSB0YWlsWzFdOwotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB0YWlsWzJdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gM10gPSB3bC0+cnhfdGFpbFswXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDJdID0gd2wtPnJ4X3RhaWxbMV07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHdsLT5yeF90YWlsWzJdOwogCQkJCWJyZWFrOwogCQkJY2FzZSAyOgotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMl0gPSB0YWlsWzBdOwotCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB0YWlsWzFdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMl0gPSB3bC0+cnhfdGFpbFswXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gd2wtPnJ4X3RhaWxbMV07CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHRhaWxbMF07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHdsLT5yeF90YWlsWzBdOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC03MzAsMTcgKzczMiwxNSBAQAogCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU9fUlhEQVRBLAogCQkJICAgICAgIHNpemVvZih1MTYpKTsKIAkJaWYgKGxlbiAmIDEpIHsKLQkJCXU4IHRhaWxbMl0gPSB7IDAsIH07Ci0KIAkJCS8qIFJlYWQgdGhlIGxhc3QgYnl0ZS4gKi8KLQkJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCB0YWlsLCAyLAorCQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsIHdsLT5yeF90YWlsLCAyLAogCQkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1JYREFUQSwKIAkJCQkgICAgICAgc2l6ZW9mKHUxNikpOwotCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHRhaWxbMF07CisJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gd2wtPnJ4X3RhaWxbMF07CiAJCX0KIAl9CiAKLQliNDNfcngocS0+ZGV2LCBza2IsICZyeGhkcik7CisJYjQzX3J4KHEtPmRldiwgc2tiLCAmd2wtPnJ4aGRyKTsKIAogCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKaW5kZXggN2EzMjE4Yy4uZmZkY2U2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYwpAQCAtMzMsNyArMzMsOCBAQAogCQkgICAgICAmIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9ISV9NQVNLKSkKIAkJCXJldHVybiAxOwogCX0gZWxzZSB7Ci0JCWlmIChiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0xPKQorCQlpZiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQgJiYKKwkJICAgIGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfTE8pCiAJCSAgICAmIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9MT19NQVNLKQogCQkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKaW5kZXggYWM5ZjYwMC4uZjRlOTY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCkBAIC0yNyw3ICsyNyw3IEBACiAKICovCiAKLSNpbmNsdWRlICJ4bWl0LmgiCisjaW5jbHVkZSAiYjQzLmgiCiAjaW5jbHVkZSAicGh5X2NvbW1vbi5oIgogI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInBpby5oIgpAQCAtNjkwLDcgKzY5MCwxMCBAQAogCX0KIAogCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWllZWU4MDIxMV9yeChkZXYtPndsLT5odywgc2tiKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIAogI2lmIEI0M19ERUJVRwogCWRldi0+cnhfY291bnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCBhZDhlYWI0Li5jOTY0MGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC0yNzQsOSArMjc0LDYgQEAKIAljb25mX3JlZ190IHJlZzsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBpZmFjZS0+bG9jYWw7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90ICpwYXJzZSA9IE5VTEw7Ci0JdV9jaGFyIGJ1Zls2NF07CiAJc3RydWN0IGhvc3RhcF9jc19wcml2ICpod19wcml2ID0gbG9jYWwtPmh3X3ByaXY7CiAKIAlpZiAoaHdfcHJpdi0+bGluay0+aW8uTnVtUG9ydHMxIDwgMHg0MikgewpAQCAtMjg1LDI4ICsyODIsMTMgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXBhcnNlID0ga21hbGxvYyhzaXplb2YoY2lzcGFyc2VfdCksIEdGUF9LRVJORUwpOwotCWlmIChwYXJzZSA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCiAJaWYgKGh3X3ByaXYtPmxpbmstPm1hbmZfaWQgIT0gMHhkNjAxIHx8IGh3X3ByaXYtPmxpbmstPmNhcmRfaWQgIT0gMHgwMTAxKSB7CiAJCS8qIE5vIFNhbkRpc2sgbWFuZmlkIGZvdW5kICovCiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgcGFyc2UpIHx8Ci0JCXBhcnNlLT5sb25nbGlua19tZmMubmZuIDwgMikgeworCWlmIChod19wcml2LT5saW5rLT5zb2NrZXQtPmZ1bmN0aW9ucyA8IDIpIHsKIAkJLyogTm8gbXVsdGktZnVuY3Rpb24gbGlua3MgZm91bmQgKi8KIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwpAQCAtMzU0LDcgKzMzNiw2IEBACiAJdWRlbGF5KDEwKTsKIAogZG9uZToKLQlrZnJlZShwYXJzZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTI5LDEwICs1MTAsNiBAQAogfQogCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQotCiAvKiBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudCBpcyByZWNlaXZlZCB0byBjb25maWd1cmUgdGhlIFBDTUNJQQogICogc29ja2V0IGFuZCBtYWtlIHRoZSBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0gKi8KIApAQCAtNjI0LDcgKzYwMSw2IEBACiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAJaW50IHJldCA9IDE7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OwogCXN0cnVjdCBob3N0YXBfY3NfcHJpdiAqaHdfcHJpdjsKIAogCVBERUJVRyhERUJVR19GTE9XLCAicHJpc20yX2NvbmZpZygpXG4iKTsKQEAgLTYzNiwxOSArNjEyLDE4IEBACiAJfQogCiAJLyogTG9vayBmb3IgYW4gYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeSBpbiB0aGUgQ0lTICovCi0JbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcHJpc20yX2NvbmZpZ19jaGVjaywgTlVMTCk7Ci0JaWYgKGxhc3RfcmV0KSB7CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHByaXNtMl9jb25maWdfY2hlY2ssIE5VTEwpOworCWlmIChyZXQpIHsKIAkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKIAkJCXByaW50ayhLRVJOX0VSUiAiR2V0TmV4dFR1cGxlKCk6IE5vIG1hdGNoaW5nICIKIAkJCSAgICAgICAiQ0lTIGNvbmZpZ3VyYXRpb24uICBNYXliZSB5b3UgbmVlZCB0aGUgIgogCQkJICAgICAgICJpZ25vcmVfY2lzX3ZjYz0xIHBhcmFtZXRlci5cbiIpOwotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogTmVlZCB0byBhbGxvY2F0ZSBuZXRfZGV2aWNlIGJlZm9yZSByZXF1ZXN0aW5nIElSUSBoYW5kbGVyICovCiAJZGV2ID0gcHJpc20yX2luaXRfbG9jYWxfZGF0YSgmcHJpc20yX3BjY2FyZF9mdW5jcywgMCwKLQkJCQkgICAgICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwkJCQkgICAgICZsaW5rLT5kZXYpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJZ290byBmYWlsZWQ7CiAJbGluay0+cHJpdiA9IGRldjsKQEAgLTY2NiwxMyArNjQxLDExIEBACiAJICogaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KIAkgKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7Ci0JCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwKLQkJCQkgICAgICAgSVJRX0hBTkRMRV9QUkVTRU5UOwotCQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCQlsaW5rLT5pcnEuSGFuZGxlciA9IHByaXNtMl9pbnRlcnJ1cHQ7Ci0JCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKLQkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwKLQkJCSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKgpAQCAtNjgwLDggKzY1Myw5IEBACiAJICogdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAqIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKQEAgLTcxNCw5ICs2ODgsNiBAQAogCX0KIAlyZXR1cm4gcmV0OwogCi0gY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKLQogIGZhaWxlZDoKIAlrZnJlZShod19wcml2KTsKIAlwcmlzbTJfcmVsZWFzZSgodV9sb25nKWxpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYwppbmRleCAyNDBjZmYxLi42ZTJmYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYwpAQCAtNjAyOSw3ICs2MDI5LDcgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpLCAwKTsKKwlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAJcHJpdiA9IGxpYmlwd19wcml2KGRldik7CkBAIC02MzQyLDcgKzYzNDIsNyBAQAogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLAogCQkJCSAgICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CiAKLQkJZnJlZV9pZWVlODAyMTEoZGV2LCAwKTsKKwkJZnJlZV9pZWVlODAyMTEoZGV2KTsKIAkJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwogCX0KIApAQCAtNjQwMCw3ICs2NDAwLDcgQEAKIAkJaWYgKGRldi0+YmFzZV9hZGRyKQogCQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIpOwogCi0JCWZyZWVfaWVlZTgwMjExKGRldiwgMCk7CisJCWZyZWVfaWVlZTgwMjExKGRldik7CiAJfQogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggODI3ODI0ZC4uYTZjYTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTEwNCwyNSArMTA0LDYgQEAKIHN0YXRpYyBpbnQgcnRhcF9pZmFjZSA9IDA7ICAgICAvKiBkZWY6IDAgLS0gZG8gbm90IGNyZWF0ZSBydGFwIGludGVyZmFjZSAqLwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgaXB3MjIwMF9yYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSAxMCB9LAotCXsgLmJpdHJhdGUgPSAyMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gNTUsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDExMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gNjAgfSwKLQl7IC5iaXRyYXRlID0gOTAgfSwKLQl7IC5iaXRyYXRlID0gMTIwIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCB9LAotCXsgLmJpdHJhdGUgPSAyNDAgfSwKLQl7IC5iaXRyYXRlID0gMzYwIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCB9LAotCXsgLmJpdHJhdGUgPSA1NDAgfQotfTsKLQotI2RlZmluZSBpcHcyMjAwX2FfcmF0ZXMJCShpcHcyMjAwX3JhdGVzICsgNCkKLSNkZWZpbmUgaXB3MjIwMF9udW1fYV9yYXRlcwk4Ci0jZGVmaW5lIGlwdzIyMDBfYmdfcmF0ZXMJKGlwdzIyMDBfcmF0ZXMgKyAwKQotI2RlZmluZSBpcHcyMjAwX251bV9iZ19yYXRlcwkxMgogCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiBzdGF0aWMgaW50IHFvc19lbmFibGUgPSAwOwpAQCAtODY3NCw2ICs4NjU1LDI0IEBACiAgKgogICovCiAKK3N0YXRpYyBpbnQgaXB3X3d4X2dldF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spCisJCXN0cmNweSh3cnF1LT5uYW1lLCAicmFkaW8gb2ZmIik7CisJZWxzZSBpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCisJCXN0cmNweSh3cnF1LT5uYW1lLCAidW5hc3NvY2lhdGVkIik7CisJZWxzZQorCQlzbnByaW50Zih3cnF1LT5uYW1lLCBJRk5BTVNJWiwgIklFRUUgODAyLjExJWMiLAorCQkJIGlwd19tb2Rlc1twcml2LT5hc3NvY19yZXF1ZXN0LmllZWVfbW9kZV0pOworCUlQV19ERUJVR19XWCgiTmFtZTogJXNcbiIsIHdycXUtPm5hbWUpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlwd19zZXRfY2hhbm5lbChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4IGNoYW5uZWwpCiB7CiAJaWYgKGNoYW5uZWwgPT0gMCkgewpAQCAtOTk3Myw3ICs5OTcyLDcgQEAKIC8qIFJlYmFzZSB0aGUgV0UgSU9DVExzIHRvIHplcm8gZm9yIHRoZSBoYW5kbGVyIGFycmF5ICovCiAjZGVmaW5lIElXX0lPQ1RMKHgpIFsoeCktU0lPQ1NJV0NPTU1JVF0KIHN0YXRpYyBpd19oYW5kbGVyIGlwd193eF9oYW5kbGVyc1tdID0gewotCUlXX0lPQ1RMKFNJT0NHSVdOQU1FKSA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd25hbWUsCisJSVdfSU9DVEwoU0lPQ0dJV05BTUUpID0gaXB3X3d4X2dldF9uYW1lLAogCUlXX0lPQ1RMKFNJT0NTSVdGUkVRKSA9IGlwd193eF9zZXRfZnJlcSwKIAlJV19JT0NUTChTSU9DR0lXRlJFUSkgPSBpcHdfd3hfZ2V0X2ZyZXEsCiAJSVdfSU9DVEwoU0lPQ1NJV01PREUpID0gaXB3X3d4X3NldF9tb2RlLApAQCAtMTE0MTcsMTAwICsxMTQxNiwxNiBAQAogLyogQ2FsbGVkIGJ5IHJlZ2lzdGVyX25ldGRldigpICovCiBzdGF0aWMgaW50IGlwd19uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBpLCByYyA9IDA7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKLQljb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyAqZ2VvID0gbGliaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7Ci0Jc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9ICZwcml2LT5pZWVlLT53ZGV2OwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChpcHdfdXAocHJpdikpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJCXJldHVybiAtRUlPOwogCX0KIAotCW1lbWNweSh3ZGV2LT53aXBoeS0+cGVybV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JLyogZmlsbC1vdXQgcHJpdi0+aWVlZS0+YmdfYmFuZCAqLwotCWlmIChnZW8tPmJnX2NoYW5uZWxzKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJnX2JhbmQgPSAmcHJpdi0+aWVlZS0+YmdfYmFuZDsKLQotCQliZ19iYW5kLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJYmdfYmFuZC0+bl9jaGFubmVscyA9IGdlby0+YmdfY2hhbm5lbHM7Ci0JCWJnX2JhbmQtPmNoYW5uZWxzID0KLQkJCWt6YWxsb2MoZ2VvLT5iZ19jaGFubmVscyAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCksIEdGUF9LRVJORUwpOwotCQkvKiB0cmFuc2xhdGUgZ2VvLT5iZyB0byBiZ19iYW5kLmNoYW5uZWxzICovCi0JCWZvciAoaSA9IDA7IGkgPCBnZW8tPmJnX2NoYW5uZWxzOyBpKyspIHsKLQkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEgPSBnZW8tPmJnW2ldLmZyZXE7Ci0JCQliZ19iYW5kLT5jaGFubmVsc1tpXS5od192YWx1ZSA9IGdlby0+YmdbaV0uY2hhbm5lbDsKLQkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLm1heF9wb3dlciA9IGdlby0+YmdbaV0ubWF4X3Bvd2VyOwotCQkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKQotCQkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmZsYWdzIHw9Ci0JCQkJCUlFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQkJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX05PX0lCU1MpCi0JCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KLQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX1JBREFSX0RFVEVDVCkKLQkJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQkJCS8qIE5vIGVxdWl2YWxlbnQgZm9yIExJQklQV19DSF84MDIxMUhfUlVMRVMsCi0JCQkgICBMSUJJUFdfQ0hfVU5JRk9STV9TUFJFQURJTkcsIG9yCi0JCQkgICBMSUJJUFdfQ0hfQl9PTkxZLi4uICovCi0JCX0KLQkJLyogcG9pbnQgYXQgYml0cmF0ZSBpbmZvICovCi0JCWJnX2JhbmQtPmJpdHJhdGVzID0gaXB3MjIwMF9iZ19yYXRlczsKLQkJYmdfYmFuZC0+bl9iaXRyYXRlcyA9IGlwdzIyMDBfbnVtX2JnX3JhdGVzOwotCi0JCXdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IGJnX2JhbmQ7Ci0JfQotCi0JLyogZmlsbC1vdXQgcHJpdi0+aWVlZS0+YV9iYW5kICovCi0JaWYgKGdlby0+YV9jaGFubmVscykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICphX2JhbmQgPSAmcHJpdi0+aWVlZS0+YV9iYW5kOwotCi0JCWFfYmFuZC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JCWFfYmFuZC0+bl9jaGFubmVscyA9IGdlby0+YV9jaGFubmVsczsKLQkJYV9iYW5kLT5jaGFubmVscyA9Ci0JCQlremFsbG9jKGdlby0+YV9jaGFubmVscyAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCksIEdGUF9LRVJORUwpOwotCQkvKiB0cmFuc2xhdGUgZ2VvLT5iZyB0byBhX2JhbmQuY2hhbm5lbHMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGdlby0+YV9jaGFubmVsczsgaSsrKSB7Ci0JCQlhX2JhbmQtPmNoYW5uZWxzW2ldLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSA9IGdlby0+YVtpXS5mcmVxOwotCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5od192YWx1ZSA9IGdlby0+YVtpXS5jaGFubmVsOwotCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5tYXhfcG93ZXIgPSBnZW8tPmFbaV0ubWF4X3Bvd2VyOwotCQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkpCi0JCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47Ci0JCQlpZiAoZ2VvLT5hW2ldLmZsYWdzICYgTElCSVBXX0NIX05PX0lCU1MpCi0JCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwotCQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9SQURBUl9ERVRFQ1QpCi0JCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQkJCS8qIE5vIGVxdWl2YWxlbnQgZm9yIExJQklQV19DSF84MDIxMUhfUlVMRVMsCi0JCQkgICBMSUJJUFdfQ0hfVU5JRk9STV9TUFJFQURJTkcsIG9yCi0JCQkgICBMSUJJUFdfQ0hfQl9PTkxZLi4uICovCi0JCX0KLQkJLyogcG9pbnQgYXQgYml0cmF0ZSBpbmZvICovCi0JCWFfYmFuZC0+Yml0cmF0ZXMgPSBpcHcyMjAwX2FfcmF0ZXM7Ci0JCWFfYmFuZC0+bl9iaXRyYXRlcyA9IGlwdzIyMDBfbnVtX2FfcmF0ZXM7Ci0KLQkJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gYV9iYW5kOwotCX0KLQotCXNldF93aXBoeV9kZXYod2Rldi0+d2lwaHksICZwcml2LT5wY2lfZGV2LT5kZXYpOwotCi0JLyogV2l0aCB0aGF0IGluZm9ybWF0aW9uIGluIHBsYWNlLCB3ZSBjYW4gbm93IHJlZ2lzdGVyIHRoZSB3aXBoeS4uLiAqLwotCWlmICh3aXBoeV9yZWdpc3Rlcih3ZGV2LT53aXBoeSkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFBDSSBkcml2ZXIgc3R1ZmYgKi8KQEAgLTExNjQxLDcgKzExNTU2LDcgQEAKIAlpZiAocHJpdi0+cHJvbV9uZXRfZGV2KQogCQlyZXR1cm4gLUVQRVJNOwogCi0JcHJpdi0+cHJvbV9uZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3Byb21fcHJpdiksIDEpOworCXByaXYtPnByb21fbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcm9tX3ByaXYpKTsKIAlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTY2MCw3ICsxMTU3NSw3IEBACiAKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihwcml2LT5wcm9tX25ldF9kZXYpOwogCWlmIChyYykgewotCQlmcmVlX2llZWU4MDIxMShwcml2LT5wcm9tX25ldF9kZXYsIDEpOworCQlmcmVlX2llZWU4MDIxMShwcml2LT5wcm9tX25ldF9kZXYpOwogCQlwcml2LT5wcm9tX25ldF9kZXYgPSBOVUxMOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMTE2NzQsNyArMTE1ODksNyBAQAogCQlyZXR1cm47CiAKIAl1bnJlZ2lzdGVyX25ldGRldihwcml2LT5wcm9tX25ldF9kZXYpOwotCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2RldiwgMSk7CisJZnJlZV9pZWVlODAyMTEocHJpdi0+cHJvbV9uZXRfZGV2KTsKIAogCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7CiB9CkBAIC0xMTcwMiw3ICsxMTYxNyw3IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2OwogCWludCBpOwogCi0JbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcml2KSwgMCk7CisJbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcml2KSk7CiAJaWYgKG5ldF9kZXYgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTExODUwLDcgKzExNzY1LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogICAgICAgb3V0X2ZyZWVfaWVlZTgwMjExOgotCWZyZWVfaWVlZTgwMjExKHByaXYtPm5ldF9kZXYsIDApOworCWZyZWVfaWVlZTgwMjExKHByaXYtPm5ldF9kZXYpOwogICAgICAgb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0xMTkxNyw3ICsxMTgzMiw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfaWVlZTgwMjExKHByaXYtPm5ldF9kZXYsIDApOworCWZyZWVfaWVlZTgwMjExKHByaXYtPm5ldF9kZXYpOwogCWZyZWVfZmlybXdhcmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3LmgKaW5kZXggYmY0NTM5MS4uMWUzMzRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAogI2RlZmluZSBMSUJJUFdfVkVSU0lPTiAiZ2l0LTEuMS4xMyIKIApAQCAtNzg0LDE1ICs3ODMsMTIgQEAKIAogc3RydWN0IGxpYmlwd19kZXZpY2UgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHdpcmVsZXNzX2RldiB3ZGV2OwogCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjOwogCiAJLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwogCXN0cnVjdCBsaWJpcHdfc3RhdHMgaWVlZV9zdGF0czsKIAogCXN0cnVjdCBsaWJpcHdfZ2VvIGdlbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJnX2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhX2JhbmQ7CiAKIAkvKiBQcm9iZSAvIEJlYWNvbiBtYW5hZ2VtZW50ICovCiAJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2ZyZWVfbGlzdDsKQEAgLTEwMTgsOCArMTAxNCw4IEBACiB9CiAKIC8qIGllZWU4MDIxMS5jICovCi1leHRlcm4gdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbW9uaXRvcik7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYsIGludCBtb25pdG9yKTsKK2V4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KTsKIGV4dGVybiBpbnQgbGliaXB3X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwogCiBleHRlcm4gdm9pZCBsaWJpcHdfbmV0d29ya3NfYWdlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfbW9kdWxlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwppbmRleCBhMGU5ZjZhLi5lYjJiNjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYwpAQCAtNjIsOSArNjIsNiBAQAogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RydWN0IGNmZzgwMjExX29wcyBsaWJpcHdfY29uZmlnX29wcyA9IHsgfTsKLXZvaWQgKmxpYmlwd193aXBoeV9wcml2aWQgPSAmbGliaXB3X3dpcGh5X3ByaXZpZDsKLQogc3RhdGljIGludCBsaWJpcHdfbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUpCiB7CiAJaWYgKGllZWUtPm5ldHdvcmtzKQpAQCAtMTQzLDcgKzE0MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGxpYmlwd19jaGFuZ2VfbXR1KTsKIAotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYsIGludCBtb25pdG9yKQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpCiB7CiAJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE2MCwzMSArMTU3LDEwIEBACiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKLQlpZiAoIW1vbml0b3IpIHsKLQkJaWVlZS0+d2Rldi53aXBoeSA9IHdpcGh5X25ldygmbGliaXB3X2NvbmZpZ19vcHMsIDApOwotCQlpZiAoIWllZWUtPndkZXYud2lwaHkpIHsKLQkJCUxJQklQV19FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIHdpcGh5LlxuIik7Ci0JCQlnb3RvIGZhaWxlZF9mcmVlX25ldGRldjsKLQkJfQotCi0JCWllZWUtPmRldi0+aWVlZTgwMjExX3B0ciA9ICZpZWVlLT53ZGV2OwotCQlpZWVlLT53ZGV2LmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047Ci0KLQkJLyogRmlsbC1vdXQgd2lwaHkgc3RydWN0dXJlIGJpdHMgd2Uga25vdy4uLiAgTm90IGVub3VnaCBpbmZvCi0JCSAgIGhlcmUgdG8gY2FsbCBzZXRfd2lwaHlfZGV2IG9yIHNldCBNQUMgYWRkcmVzcyBvciBjaGFubmVsIGluZm8KLQkJICAgLS0gaGF2ZSB0byBkbyB0aGF0IGluIC0+bmRvX2luaXQuLi4gKi8KLQkJaWVlZS0+d2Rldi53aXBoeS0+cHJpdmlkID0gbGliaXB3X3dpcGh5X3ByaXZpZDsKLQotCQlpZWVlLT53ZGV2LndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7Ci0JCWllZWUtPndkZXYud2lwaHktPm1heF9zY2FuX2llX2xlbiA9IDA7Ci0JCWllZWUtPndkZXYud2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCQkJfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCX0KLQogCWVyciA9IGxpYmlwd19uZXR3b3Jrc19hbGxvY2F0ZShpZWVlKTsKIAlpZiAoZXJyKSB7CiAJCUxJQklQV19FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIGJlYWNvbiBzdG9yYWdlOiAlZFxuIiwgZXJyKTsKLQkJZ290byBmYWlsZWRfZnJlZV93aXBoeTsKKwkJZ290byBmYWlsZWRfZnJlZV9uZXRkZXY7CiAJfQogCWxpYmlwd19uZXR3b3Jrc19pbml0aWFsaXplKGllZWUpOwogCkBAIC0yMTcsMzEgKzE5MywxOSBAQAogCiAJcmV0dXJuIGRldjsKIAotZmFpbGVkX2ZyZWVfd2lwaHk6Ci0JaWYgKCFtb25pdG9yKQotCQl3aXBoeV9mcmVlKGllZWUtPndkZXYud2lwaHkpOwogZmFpbGVkX2ZyZWVfbmV0ZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CiBmYWlsZWQ6CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgZnJlZV9pZWVlODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1vbml0b3IpCit2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbGliODAyMTFfY3J5cHRfaW5mb19mcmVlKCZpZWVlLT5jcnlwdF9pbmZvKTsKIAogCWxpYmlwd19uZXR3b3Jrc19mcmVlKGllZWUpOwotCi0JLyogZnJlZSBjZmc4MDIxMSByZXNvdXJjZXMgKi8KLQlpZiAoIW1vbml0b3IpIHsKLQkJd2lwaHlfdW5yZWdpc3RlcihpZWVlLT53ZGV2LndpcGh5KTsKLQkJa2ZyZWUoaWVlZS0+YV9iYW5kLmNoYW5uZWxzKTsKLQkJa2ZyZWUoaWVlZS0+YmdfYmFuZC5jaGFubmVscyk7Ci0JCXdpcGh5X2ZyZWUoaWVlZS0+d2Rldi53aXBoeSk7Ci0JfQotCiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCmluZGV4IDI3MTZiOTEuLjk1MDI2N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKQEAgLTE2MSw1ICsxNjEsNiBAQAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzEwMDAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IGZhbHNlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwppbmRleCBhMTZiZDQxLi5jYmIwNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCkBAIC03MDIsNyArNzAyLDcgQEAKIAkJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBtXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEsIGZhbHNlLAogCQkJCUNNRF9BU1lOQywgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggNjgxMzYxNy4uZjA1OWI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtNjExLDcgKzYxMSw3IEBACiAJaWYgKHJ4X3N0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJ4X3N0YXR1cy5yYXRlX2lkeCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCi0Jcnhfc3RhdHVzLmFudGVubmEgPSBsZTE2X3RvX2NwdShyeF9oZHItPnBoeV9mbGFncyAmCisJcnhfc3RhdHVzLmFudGVubmEgPSAobGUxNl90b19jcHUocnhfaGRyLT5waHlfZmxhZ3MpICYKIAkJCQkJUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykgPj4gNDsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IGQ2YmMwZTAuLjZlNmY1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJKHMzMilhdmVyYWdlX25vaXNlW2ldKSkgLyAxNTAwOwogCQkvKiBib3VuZCBnYWluIGJ5IDIgYml0cyB2YWx1ZSBtYXgsIDNyZCBiaXQgaXMgc2lnbiAqLwogCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPQotCQkJbWluKGFicyhkZWx0YV9nKSwgQ0hBSU5fTk9JU0VfTUFYX0RFTFRBX0dBSU5fQ09ERSk7CisJCQltaW4oYWJzKGRlbHRhX2cpLCAobG9uZykgQ0hBSU5fTk9JU0VfTUFYX0RFTFRBX0dBSU5fQ09ERSk7CiAKIAkJaWYgKGRlbHRhX2cgPCAwKQogCQkJLyogc2V0IG5lZ2F0aXZlIHNpZ24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBjMjk1YjhlLi4xNDczNDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0xNzUsNiArMTc1LDcgQEAKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKIC8qCkBAIC0xOTgsNiArMTk5LDcgQEAKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmcgPSB7CkBAIC0yMTgsNiArMjIwLDcgQEAKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CkBAIC0yMzgsNiArMjQxLDcgQEAKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfM2Fnbl9jZmcgPSB7CkBAIC0yNTgsNiArMjYyLDcgQEAKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggMzQ2ZGMwNi4uODE3MjZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTQxOCw2ICs0MTgsMTUgQEAKIAllbHNlIGlmICh0aWQgPT0gSVdMX0FHR19BTExfVElEKQogCQlmb3IgKHRpZCA9IDA7IHRpZCA8IFRJRF9NQVhfTE9BRF9DT1VOVDsgdGlkKyspCiAJCQlyc190bF90dXJuX29uX2FnZ19mb3JfdGlkKHByaXYsIGxxX2RhdGEsIHRpZCwgc3RhKTsKKwlpZiAocHJpdi0+Y2ZnLT51c2VfcnRzX2Zvcl9odCkgeworCQkvKgorCQkgKiBzd2l0Y2ggdG8gUlRTL0NUUyBpZiBpdCBpcyB0aGUgcHJlZmVyIHByb3RlY3Rpb24gbWV0aG9kCisJCSAqIGZvciBIVCB0cmFmZmljCisJCSAqLworCQlJV0xfREVCVUdfSFQocHJpdiwgInVzZSBSVFMvQ1RTIHByb3RlY3Rpb24gZm9yIEhUXG4iKTsKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TRUxGX0NUU19FTjsKKwkJaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9udW1fb2ZfYW50X2Zyb21fcmF0ZSh1MzIgcmF0ZV9uX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzMTNkM2U1Li45MjFkYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMTE2LDkgKzExNiw2IEBACiAKIAkvKiBhbHdheXMgZ2V0IHRpbWVzdGFtcCB3aXRoIFJ4IGZyYW1lICovCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1RTRjJIT1NUX01TSzsKLQkvKiBhbGxvdyBDVFMtdG8tc2VsZiBpZiBwb3NzaWJsZS4gdGhpcyBpcyByZWxldmFudCBvbmx5IGZvcgotCSAqIDUwMDAsIGJ1dCB3aWxsIG5vdCBkYW1hZ2UgNDk2NSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TRUxGX0NUU19FTjsKIAogCXJldCA9IGl3bF9jaGVja19yeG9uX2NtZChwcml2KTsKIAlpZiAocmV0KSB7CkBAIC0yMTgsNiArMjE1LDEzIEBACiAJCQkJCSJDb3VsZCBub3Qgc2VuZCBXRVAgc3RhdGljIGtleS5cbiIpOwogCQl9CiAKKwkJLyoKKwkJICogYWxsb3cgQ1RTLXRvLXNlbGYgaWYgcG9zc2libGUgZm9yIG5ldyBhc3NvY2lhdGlvbi4KKwkJICogdGhpcyBpcyByZWxldmFudCBvbmx5IGZvciA1MDAwIHNlcmllcyBhbmQgdXAsCisJCSAqIGJ1dCB3aWxsIG5vdCBkYW1hZ2UgNDk2NQorCQkgKi8KKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NFTEZfQ1RTX0VOOworCiAJCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgogCQkgKiBSWE9OIGFzc29jIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCiAJCSAqLwpAQCAtMzEwNiw4ICszMTEwLDggQEAKICBvdXRfcGNpX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKICBvdXRfaWVlZTgwMjExX2ZyZWVfaHc6Ci0JaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOwogCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOworCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCmluZGV4IDJjNWM4OGYuLjRhZmFmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApAQCAtMTE1NCw3ICsxMTU0LDcgQEAKICNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJY3B1X3RvX2xlMTYoMSA8PCAxKQogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJMHhmMAogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfUE9TCQk0CiAKICNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0sJKDB4NyA8PCA4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IGU1MDEwM2EuLjc3NTQ1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogICogQHBhX3R5cGU6IHVzZWQgYnkgNjAwMCBzZXJpZXMgb25seSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBQb3dlciBBbXBsaWZpZXIKICAqIEBtYXhfbGxfaXRlbXM6IG1heCBudW1iZXIgb2YgT1RQIGJsb2NrcwogICogQHNoYWRvd19yYW1fc3VwcG9ydDogc2hhZG93IHN1cHBvcnQgZm9yIE9UUCBtZW1vcnkKKyAqIEB1c2VfcnRzX2Zvcl9odDogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiBmb3IgSFQgdHJhZmZpYwogICoKICAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0IEFQSSB2ZXJzaW9uLiBUaGUKICAqIGRyaXZlciBzcGVjaWZpZXMgd2hpY2ggQVBJcyBpdCBzdXBwb3J0cyAod2l0aCBAdWNvZGVfYXBpX21heCBiZWluZyB0aGUKQEAgLTI1NSw2ICsyNTYsNyBAQAogCWNvbnN0IGJvb2wgc2hhZG93X3JhbV9zdXBwb3J0OwogCWNvbnN0IGJvb2wgaHRfZ3JlZW5maWVsZF9zdXBwb3J0OwogCWNvbnN0IGJvb2wgYnJva2VuX3Bvd2Vyc2F2ZTsKKwlib29sIHVzZV9ydHNfZm9yX2h0OwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwppbmRleCAzZDJiOTNhLi5lMTRjOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwpAQCAtNDEwLDcgKzQxMCw2IEBACiAJCQkJCXUxNiAqdmFsaWRibG9ja2FkZHIpCiB7CiAJdTE2IG5leHRfbGlua19hZGRyID0gMCwgbGlua192YWx1ZSA9IDAsIHZhbGlkX2FkZHI7Ci0JaW50IHJldCA9IDA7CiAJaW50IHVzZWRibG9ja3MgPSAwOwogCiAJLyogc2V0IGFkZHJlc3NpbmcgbW9kZSB0byBhYnNvbHV0ZSB0byB0cmF2ZXJzZSB0aGUgbGluayBsaXN0ICovCkBAIC00MzAsMjkgKzQyOSwyOSBAQAogCQkgKiBjaGVjayBmb3IgbW9yZSBibG9jayBvbiB0aGUgbGluayBsaXN0CiAJCSAqLwogCQl2YWxpZF9hZGRyID0gbmV4dF9saW5rX2FkZHI7Ci0JCW5leHRfbGlua19hZGRyID0gbGlua192YWx1ZTsKKwkJbmV4dF9saW5rX2FkZHIgPSBsaW5rX3ZhbHVlICogc2l6ZW9mKHUxNik7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgYmxvY2tzICVkIGFkZHIgMHgleFxuIiwKIAkJCSAgICAgICB1c2VkYmxvY2tzLCBuZXh0X2xpbmtfYWRkcik7CiAJCWlmIChpd2xfcmVhZF9vdHBfd29yZChwcml2LCBuZXh0X2xpbmtfYWRkciwgJmxpbmtfdmFsdWUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghbGlua192YWx1ZSkgewogCQkJLyoKLQkJCSAqIHJlYWNoIHRoZSBlbmQgb2YgbGluayBsaXN0LAorCQkJICogcmVhY2ggdGhlIGVuZCBvZiBsaW5rIGxpc3QsIHJldHVybiBzdWNjZXNzIGFuZAogCQkJICogc2V0IGFkZHJlc3MgcG9pbnQgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MKIAkJCSAqIG9mIHRoZSBpbWFnZQogCQkJICovCi0JCQlnb3RvIGRvbmU7CisJCQkqdmFsaWRibG9ja2FkZHIgPSB2YWxpZF9hZGRyOworCQkJLyogc2tpcCBmaXJzdCAyIGJ5dGVzIChsaW5rIGxpc3QgcG9pbnRlcikgKi8KKwkJCSp2YWxpZGJsb2NrYWRkciArPSAyOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogbW9yZSBpbiB0aGUgbGluayBsaXN0LCBjb250aW51ZSAqLwogCQl1c2VkYmxvY2tzKys7Ci0JfSB3aGlsZSAodXNlZGJsb2NrcyA8IHByaXYtPmNmZy0+bWF4X2xsX2l0ZW1zKTsKLQkvKiBPVFAgZnVsbCwgdXNlIGxhc3QgYmxvY2sgKi8KLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiT1RQIGlzIGZ1bGwsIHVzZSBsYXN0IGJsb2NrXG4iKTsKLWRvbmU6Ci0JKnZhbGlkYmxvY2thZGRyID0gdmFsaWRfYWRkcjsKLQkvKiBza2lwIGZpcnN0IDIgYnl0ZXMgKGxpbmsgbGlzdCBwb2ludGVyKSAqLwotCSp2YWxpZGJsb2NrYWRkciArPSAyOwotCXJldHVybiByZXQ7CisJfSB3aGlsZSAodXNlZGJsb2NrcyA8PSBwcml2LT5jZmctPm1heF9sbF9pdGVtcyk7CisKKwkvKiBPVFAgaGFzIG5vIHZhbGlkIGJsb2NrcyAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgaGFzIG5vIHZhbGlkIGJsb2Nrc1xuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA2YjY4ZGI3Li44MGI5ZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMjIwLDM1ICsyMjAsMzUgQEAKICAqIFNlY3Rpb24gMTA6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6IDEzMiwgNDQgKF9hYm92ZV8pCiAgKi8KIC8qIDIuNCBHSHogYmFuZDogQ0NLICovCi0jZGVmaW5lIEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OICAgICAgICgoMHhBQSlcCisjZGVmaW5lIEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OICAgICAgICgoMHhBOClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogOCBieXRlcyAqLwogLyogMi40IEdIeiBiYW5kOiAyME1Iei1MZWdhY3ksIDIwTUh6LUhULCA0ME1Iei1IVCAqLwotI2RlZmluZSBFRVBST01fTEJfT0ZETV9DT01NT04gICAgICAgKCgweEIyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fQ09NTU9OICAgICAgICgoMHhCMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KIC8qIDUuMiBHSHogYmFuZDogMjBNSHotTGVnYWN5LCAyME1Iei1IVCwgNDBNSHotSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fQ09NTU9OICAgICAgICgoMHhDQSlcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4QzgpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCiAvKiAyLjRHSHogYmFuZCBjaGFubmVsczoKICAqCTFMZWdhY3ksIDFIVCwgMkxlZ2FjeSwgMkhULCAxMExlZ2FjeSwgMTBIVCwgMTFMZWdhY3ksIDExSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQkFORCAgICAgICAoKDB4RTIpXAorI2RlZmluZSBFRVBST01fTEJfT0ZETV8yMF9CQU5EICAgICAgICgoMHhFMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNjQgYnl0ZXMgKi8KIC8qIDIuNCBHSHogYmFuZCBIVDQwIGNoYW5uZWxzOiAoMSwrMSkgKDIsKzEpICg2LCsxKSAoNywrMSkgKDksKzEpICovCi0jZGVmaW5lIEVFUFJPTV9MQl9PRkRNX0hUNDBfQkFORCAgICAgICAoKDB4MTIyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxMjApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDQwIGJ5dGVzICovCiAvKiA1LjJHSHogYmFuZCBjaGFubmVsczogMzZMZWdhY3ksIDM2SFQsIDY0TGVnYWN5LCA2NEhULCAxMDBMZWdhY3ksIDEwMEhUICovCi0jZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweDE0QSlcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweDE0OClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDggYnl0ZXMgKi8KIC8qIDUuMiBHSHogYmFuZCBIVDQwIGNoYW5uZWxzOiAoMzYsKzEpICg2MCwrMSkgKDEwMCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxN0EpXAorI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDE3OClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KIC8qIDIuNCBHSHogYmFuZCwgY2hhbm5uZWwgMTM6IExlZ2FjeSwgSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkwKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLwogLyogNS4yIEdIeiBiYW5kLCBjaGFubm5lbCAxNDA6IExlZ2FjeSwgSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAgICAgICAgKCgweDFBMilcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0NIQU5ORUxfMTQwICAgICAgICgoMHgxQTApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCiAvKiA1LjIgR0h6IGJhbmQsIEhUNDAgY2hhbm5uZWxzICgxMzIsKzEpICg0NCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EXzEgICAgICAgKCgweDFCMilcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0hUNDBfQkFORF8xICAgICAgICgoMHgxQjApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggOGUxYmI1My4uNDkzNjI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCSAqIGFzIGEgYml0bWFzay4KIAkgKi8KIAlyeF9zdGF0dXMuYW50ZW5uYSA9Ci0JCWxlMTZfdG9fY3B1KHBoeV9yZXMtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0spCisJCShsZTE2X3RvX2NwdShwaHlfcmVzLT5waHlfZmxhZ3MpICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykKIAkJPj4gUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUzsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggZmI5YmNmYS4uYjdlMTk2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC0xMjc3LDggKzEyNzcsMTYgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPT0KKwkJCQlJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkEpIHsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJBR0cgc3RvcCBiZWZvcmUgc2V0dXAgZG9uZVxuIik7CisJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUocHJpdi0+aHcsIHJhLCB0aWQpOworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PTikKLQkJSVdMX1dBUk4ocHJpdiwgIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJTdG9wcGluZyBBR0cgd2hpbGUgc3RhdGUgbm90IE9OIG9yIHN0YXJ0aW5nXG4iKTsKIAogCXRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07CiAJc3NuID0gKHRpZF9kYXRhLT5zZXFfbnVtYmVyICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggYWE0OTIzMC4uZDAwYTgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC00MDk3LDggKzQwOTcsOCBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgotCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKIAlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAgb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKaW5kZXggYzQyZDNmYS4uMjNmNjg0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwpAQCAtMyw2ICszLDcgQEAKICAgKiByZXNwb25zZXMgYXMgd2VsbCBhcyBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLgogICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKaW5kZXggMDM5YjU1NS4uNTNkNTZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwpAQCAtMTY5LDE2ICsxNjksMTkgQEAKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJdWludDMyX3QgY3JpdGVyaWEgPSAwOwogCi0JaWYgKHByaXYtPndvbF9jcml0ZXJpYSA9PSAweGZmZmZmZmZmICYmIHdvbC0+d29sb3B0cykKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJaWYgKHdvbC0+d29sb3B0cyAmIH4oV0FLRV9VQ0FTVHxXQUtFX01DQVNUfFdBS0VfQkNBU1R8V0FLRV9QSFkpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkgY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fVU5JQ0FTVF9EQVRBOwotCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKSBjcml0ZXJpYSB8PSBFSFNfV0FLRV9PTl9NVUxUSUNBU1RfREFUQTsKLQlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkgY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fQlJPQURDQVNUX0RBVEE7Ci0JaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZKSAgIGNyaXRlcmlhIHw9IEVIU19XQUtFX09OX01BQ19FVkVOVDsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkKKwkJY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fVU5JQ0FTVF9EQVRBOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQljcml0ZXJpYSB8PSBFSFNfV0FLRV9PTl9NVUxUSUNBU1RfREFUQTsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJY3JpdGVyaWEgfD0gRUhTX1dBS0VfT05fQlJPQURDQVNUX0RBVEE7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZKQorCQljcml0ZXJpYSB8PSBFSFNfV0FLRV9PTl9NQUNfRVZFTlQ7CisJaWYgKHdvbC0+d29sb3B0cyA9PSAwKQorCQljcml0ZXJpYSB8PSBFSFNfUkVNT1ZFX1dBS0VVUDsKIAogCXJldHVybiBsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgY3JpdGVyaWEsIChzdHJ1Y3Qgd29sX2NvbmZpZyAqKU5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKaW5kZXggNjIzODE3Ni4uYjFkODQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCkBAIC01OTAsNyArNTkwLDcgQEAKIAogCS8qIFRPRE86IG1ha2UgZmlybXdhcmUgZmlsZSBjb25maWd1cmFibGUgKi8KIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgImxpYmVydGFzX2NzX2hlbHBlci5mdyIsCi0JCSZoYW5kbGVfdG9fZGV2KGNhcmQtPnBfZGV2KSk7CisJCSZjYXJkLT5wX2Rldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWxic19wcl9lcnIoImNhbid0IGxvYWQgaGVscGVyIGZpcm13YXJlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCiAJLyogVE9ETzogbWFrZSBmaXJtd2FyZSBmaWxlIGNvbmZpZ3VyYWJsZSAqLwogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAibGliZXJ0YXNfY3MuZnciLAotCQkmaGFuZGxlX3RvX2RldihjYXJkLT5wX2RldikpOworCQkmY2FyZC0+cF9kZXYtPmRldik7CiAJaWYgKHJldCkgewogCQlsYnNfcHJfZXJyKCJjYW4ndCBsb2FkIGZpcm13YXJlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTc5MywxOCArNzkzLDM3IEBACiAgKiBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYSBjYXJkCiAgKiBpbnNlcnRpb24gZXZlbnQuCiAgKi8KKworc3RhdGljIGludCBpZl9jc19pb3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSB1bnNpZ25lZCBpbnQgdmNjLAorCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCisJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJaWYgKGNmZy0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCWlmIChjZmctPmlvLm53aW4gIT0gMSkgeworCQlsYnNfcHJfZXJyKCJ3cm9uZyBDSVMgKGNoZWNrIG51bWJlciBvZiBJTyB3aW5kb3dzKVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKK30KKwogc3RhdGljIGludCBpZl9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJdW5zaWduZWQgaW50IHByb2RfaWQ7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2OwogCXN0cnVjdCBpZl9jc19jYXJkICpjYXJkOwotCS8qIENJUyBwYXJzaW5nICovCi0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwotCWNpc3RwbF9pb190ICppbyA9ICZjZmctPmlvOwotCXVfY2hhciBidWZbNjRdOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NTKTsKIApAQCAtODE4LDQ4ICs4MzcsMTUgQEAKIAogCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLkhhbmRsZXIgPSBOVUxMOwotCXBfZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfSU5GTzJfVkFMSUQgfCBJUlFfTEVWRUxfSUQ7CiAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKIAlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JaWYgKChyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCAmdHVwbGUpKSAhPSAwIHx8Ci0JICAgIChyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocF9kZXYsICZ0dXBsZSkpICE9IDAgfHwKLQkgICAgKHJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpICE9IDApCi0JewotCQlsYnNfcHJfZXJyKCJlcnJvciBpbiBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlIGV0Y1xuIik7CisJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhwX2RldiwgaWZfY3NfaW9wcm9iZSwgTlVMTCkpIHsKKwkJbGJzX3ByX2VycigiZXJyb3IgaW4gcGNtY2lhX2xvb3BfY29uZmlnXG4iKTsKIAkJZ290byBvdXQxOwogCX0KIAotCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQotCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCWlmIChjZmctPmlycS5JUlFJbmZvMSkgewotCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQl9Ci0KLQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlpZiAoY2ZnLT5pby5ud2luICE9IDEpIHsKLQkJbGJzX3ByX2Vycigid3JvbmcgQ0lTIChjaGVjayBudW1iZXIgb2YgSU8gd2luZG93cylcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDE7Ci0JfQotCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCi0JLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Ci0JaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJlcnJvciBpbiBwY21jaWFfcmVxdWVzdF9pb1xuIik7Ci0JCWdvdG8gb3V0MTsKLQl9CiAKIAkvKgogCSAqIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IGNiOGJlOGQuLjViMzY3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyBpbnQgc3B1X3dyaXRlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgZXJyID0gMDsKLQl1MTYgcmVnX291dCA9IGNwdV90b19sZTE2KHJlZyB8IElGX1NQSV9XUklURV9PUEVSQVRJT05fTUFTSyk7CisJX19sZTE2IHJlZ19vdXQgPSBjcHVfdG9fbGUxNihyZWcgfCBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0spOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgcmVnX3RyYW5zOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZGF0YV90cmFuczsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzcHVfd3JpdGVfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2IHZhbCkKIHsKLQl1MTYgYnVmZjsKKwlfX2xlMTYgYnVmZjsKIAogCWJ1ZmYgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmYnVmZiwgc2l6ZW9mKHUxNikpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiB7CiAJdW5zaWduZWQgaW50IGRlbGF5OwogCWludCBlcnIgPSAwOwotCXUxNiByZWdfb3V0ID0gY3B1X3RvX2xlMTYocmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0spOworCV9fbGUxNiByZWdfb3V0ID0gY3B1X3RvX2xlMTYocmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0spOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgcmVnX3RyYW5zOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZHVtbXlfdHJhbnM7CkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciAqLwogc3RhdGljIGlubGluZSBpbnQgc3B1X3JlYWRfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2ICp2YWwpCiB7Ci0JdTE2IGJ1ZjsKKwlfX2xlMTYgYnVmOwogCWludCByZXQ7CiAKIAlyZXQgPSBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKSZidWYsIHNpemVvZihidWYpKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogICogVGhlIGxvdyAxNiBiaXRzIGFyZSByZWFkIGZpcnN0LiAqLwogc3RhdGljIGludCBzcHVfcmVhZF91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgKnZhbCkKIHsKLQl1MzIgYnVmOworCV9fbGUzMiBidWY7CiAJaW50IGVycjsKIAogCWVyciA9IHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCA5MmJjOGM1Li4zZmFjNGVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCS8qIEZpbGwgdGhlIHJlY2VpdmUgY29uZmlndXJhdGlvbiBVUkIgYW5kIGluaXRpYWxpc2UgdGhlIFJ4IGNhbGwgYmFjayAqLwogCXVzYl9maWxsX2J1bGtfdXJiKGNhcmRwLT5yeF91cmIsIGNhcmRwLT51ZGV2LAogCQkJICB1c2JfcmN2YnVsa3BpcGUoY2FyZHAtPnVkZXYsIGNhcmRwLT5lcF9pbiksCi0JCQkgICh2b2lkICopIChza2ItPnRhaWwgKyAoc2l6ZV90KSBJUEZJRUxEX0FMSUdOX09GRlNFVCksCisJCQkgIHNrYi0+ZGF0YSArIElQRklFTERfQUxJR05fT0ZGU0VULAogCQkJICBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSwgY2FsbGJhY2tmbiwKIAkJCSAgY2FyZHApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggOTQ5OGI0Ni4uZTYxZTZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtMTQ1LDIzICsxNDUsNiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0eENvbmZLZXkgICAgPSAweDAyOyAvKiBTY3JhbWJsZSBkYXRhIHBhY2tldHMgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHhDb25mTG9vcCAgID0gMHgwMTsgLyogTG9vcGJhY2sgbW9kZSAqLwogCi0vKgotICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKLSAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCi0gICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKLSAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYwotICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgotKi8KLQotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLSJuZXR3YXZlX2NzLmMgMC4zLjAgVGh1IEp1bCAxNyAxNDozNjowMiAxOTk3IChKb2huIE1hcmt1cyBCasO4cm5kYWxlbilcbiI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0zODMsNyArMzY2LDcgQEAKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdjsKIAotICAgIERFQlVHKDAsICJuZXR3YXZlX2F0dGFjaCgpXG4iKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJuZXR3YXZlX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAqLwogICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihuZXR3YXZlX3ByaXZhdGUpKTsKQEAgLTQwMSw4ICszODQsNyBAQAogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gNTsKICAgICAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLSAgICBsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgICAgbGluay0+aXJxLkhhbmRsZXIgPSAmbmV0d2F2ZV9pbnRlcnJ1cHQ7CiAgICAgCiAgICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwpAQCAtNDIxLDggKzQwMyw2IEBACiAKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotICAgIGxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKLQogICAgIHJldHVybiBuZXR3YXZlX3BjbWNpYV9jb25maWcoIGxpbmspOwogfSAvKiBuZXR3YXZlX2F0dGFjaCAqLwogCkBAIC00MzgsNyArNDE4LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAotCURFQlVHKDAsICJuZXR3YXZlX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAibmV0d2F2ZV9kZXRhY2hcbiIpOwogCiAJbmV0d2F2ZV9yZWxlYXNlKGxpbmspOwogCkBAIC03MjUsMTggKzcwNSwxNSBAQAogICoKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgbmV0d2F2ZV9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKSB7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBpbnQgaSwgaiwgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IGksIGosIHJldDsKICAgICB3aW5fcmVxX3QgcmVxOwogICAgIG1lbXJlcV90IG1lbTsKICAgICB1X2NoYXIgX19pb21lbSAqcmFtQmFzZSA9IE5VTEw7CiAKLSAgICBERUJVRygwLCAibmV0d2F2ZV9wY21jaWFfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJuZXR3YXZlX3BjbWNpYV9jb25maWdcbiIpOwogCiAgICAgLyoKICAgICAgKiAgVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4KQEAgLTc0OSwyMiArNzI2LDI0IEBACiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQotICAgIGlmIChpICE9IDApIHsKLQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworICAgIGlmIChpICE9IDApCiAJZ290byBmYWlsZWQ7Ci0gICAgfQogCiAgICAgLyoKICAgICAgKiAgTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKICAgICAgKiAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogICAgICAqLwotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgLyoKICAgICAgKiAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKICAgICAgKiAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCiAgICAgICovCi0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKyAgICBpZiAocmV0KQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qCiAgICAgICogIEFsbG9jYXRlIGEgMzJLIG1lbW9yeSB3aW5kb3cuICBOb3RlIHRoYXQgdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlCkBAIC03NzIsMTQgKzc1MSwxOCBAQAogICAgICAqICBkZXZpY2UgbmVlZHMgc2V2ZXJhbCB3aW5kb3dzLCB5b3UnbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mCiAgICAgICogIHRoZSBoYW5kbGVzIGluIHlvdXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgZGV2LT5wcml2LgogICAgICAqLwotICAgIERFQlVHKDEsICJTZXR0aW5nIG1lbSBzcGVlZCBvZiAlZFxuIiwgbWVtX3NwZWVkKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJTZXR0aW5nIG1lbSBzcGVlZCBvZiAlZFxuIiwgbWVtX3NwZWVkKTsKIAogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQ018V0lOX0VOQUJMRTsKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMHg4MDAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IG1lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxpbmstPndpbik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgbWVtLkNhcmRPZmZzZXQgPSAweDIwMDAwOyBtZW0uUGFnZSA9IDA7IAotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKSk7CisgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgLyogU3RvcmUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb21tb24gd2luZG93IGZyYW1lICovCiAgICAgcmFtQmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIDB4ODAwMCk7CkBAIC03ODcsNyArNzcwLDcgQEAKIAogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwotICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOworICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7CiAKICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewogCXByaW50ayhLRVJOX0RFQlVHICJuZXR3YXZlX2NzOiByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtODE4LDggKzgwMSw2IEBACiAJICAgZ2V0X3VpbnQxNihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX0FSVysyKSk7CiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgbmV0d2F2ZV9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwpAQCAtODM3LDcgKzgxOCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCURFQlVHKDAsICJuZXR3YXZlX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgIm5ldHdhdmVfcmVsZWFzZVxuIik7CiAKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJaWYgKGxpbmstPndpbikKQEAgLTg5Miw3ICs4NzMsNyBAQAogICAgIHVfY2hhciBfX2lvbWVtICpyYW1CYXNlID0gcHJpdi0+cmFtQmFzZTsKICAgICB1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAKLSAgICBERUJVRygwLCAibmV0d2F2ZV9yZXNldDogRG9uZSB3aXRoIGhhcmR3YXJlIHJlc2V0XG4iKTsKKyAgICBwcl9kZWJ1ZygibmV0d2F2ZV9yZXNldDogRG9uZSB3aXRoIGhhcmR3YXJlIHJlc2V0XG4iKTsKIAogICAgIHByaXYtPnRpbWVvdXRDb3VudGVyID0gMDsKIApAQCAtOTg4LDcgKzk2OSw3IEBACiAKICAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAotICAgIERFQlVHKDMsICJUcmFuc21pdHRpbmcgd2l0aCBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXhcbiIsCisgICAgcHJfZGVidWcoIlRyYW5zbWl0dGluZyB3aXRoIFNQQ1EgJXggU1BVICV4IExJRiAleCBJU1BMUSAleFxuIiwKIAkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfU1BDUSksCiAJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQVSksCiAJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX0xJRiksCkBAIC0xMDAwLDcgKzk4MSw3IEBACiAgICAgTWF4RGF0YSAgICA9IGdldF91aW50MTYocmFtQmFzZSArIE5FVFdBVkVfRVJFR19URFArMik7CiAgICAgRGF0YU9mZnNldCA9IGdldF91aW50MTYocmFtQmFzZSArIE5FVFdBVkVfRVJFR19URFArNCk7CiAJCi0gICAgREVCVUcoMywgIlR4RnJlZUxpc3QgJXgsIE1heERhdGEgJXgsIERhdGFPZmZzZXQgJXhcbiIsCisgICAgcHJfZGVidWcoIlR4RnJlZUxpc3QgJXgsIE1heERhdGEgJXgsIERhdGFPZmZzZXQgJXhcbiIsCiAJICBUeEZyZWVMaXN0LCBNYXhEYXRhLCBEYXRhT2Zmc2V0KTsKIAogICAgIC8qIENvcHkgcGFja2V0IHRvIHRoZSBhZGFwdGVyIGZyYWdtZW50IGJ1ZmZlcnMgKi8KQEAgLTEwODgsNyArMTA2OSw3IEBACiAgICAgICAgIHN0YXR1cyA9IGluYihpb2Jhc2UgKyBORVRXQVZFX1JFR19BU1IpOwogCQkKIAlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotCSAgICBERUJVRygxLCAibmV0d2F2ZV9pbnRlcnJ1cHQ6IEludGVycnVwdCB3aXRoIHN0YXR1cyAweCV4ICIKKwkgICAgcHJfZGVidWcoIm5ldHdhdmVfaW50ZXJydXB0OiBJbnRlcnJ1cHQgd2l0aCBzdGF0dXMgMHgleCAiCiAJCSAgImZyb20gcmVtb3ZlZCBvciBzdXNwZW5kZWQgY2FyZCFcbiIsIHN0YXR1cyk7CiAJICAgIGJyZWFrOwogCX0KQEAgLTExMzIsNyArMTExMyw3IEBACiAJICAgIGludCB0eFN0YXR1czsKIAogCSAgICB0eFN0YXR1cyA9IHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfVFNFUik7Ci0JICAgIERFQlVHKDMsICJUcmFuc21pdCBkb25lLiBUU0VSID0gJXggaWQgJXhcbiIsIAorCSAgICBwcl9kZWJ1ZygiVHJhbnNtaXQgZG9uZS4gVFNFUiA9ICV4IGlkICV4XG4iLAogCQkgIHR4U3RhdHVzLCByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1RTRVIgKyAxKSk7CiAJICAgIAogCSAgICBpZiAodHhTdGF0dXMgJiAweDIwKSB7CkBAIC0xMTU2LDcgKzExMzcsNyBAQAogCQkgKiAgICAgIFR4R1UgYW5kIFR4Tk9BUCBpcyBzZXQuIChUaG9zZSBhcmUgdGhlIG9ubHkgb25lcwogCQkgKiAgICAgIHRvIHNldCBUeEVycikuCiAJCSAqLwotCQlERUJVRygzLCAibmV0d2F2ZV9pbnRlcnJ1cHQ6IFR4RE4gd2l0aCBlcnJvciBzdGF0dXMgJXhcbiIsIAorCQlwcl9kZWJ1ZygibmV0d2F2ZV9pbnRlcnJ1cHQ6IFR4RE4gd2l0aCBlcnJvciBzdGF0dXMgJXhcbiIsCiAJCSAgICAgIHR4U3RhdHVzKTsKIAkJCiAJCS8qIENsZWFyIG91dCBUeEdVLCBUeE5PQVAsIFR4RXJyIGFuZCBUeFRyeXMgKi8KQEAgLTExNjQsNyArMTE0NSw3IEBACiAJCXdyaXRlYigweGRmICYgdHhTdGF0dXMsIHJhbUJhc2UrTkVUV0FWRV9FUkVHX1RTRVIrNCk7CiAJCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAJICAgIH0KLQkgICAgREVCVUcoMywgIk5ldyBzdGF0dXMgaXMgVFNFUiAleCBBU1IgJXhcbiIsCisJICAgIHByX2RlYnVnKCJOZXcgc3RhdHVzIGlzIFRTRVIgJXggQVNSICV4XG4iLAogCQkgIHJlYWRiKHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfVFNFUiksCiAJCSAgaW5iKGlvYmFzZSArIE5FVFdBVkVfUkVHX0FTUikpOwogCkBAIC0xMTcyLDcgKzExNTMsNyBAQAogCX0KIAkvKiBUeEJBLCB0aGlzIHdvdWxkIHRyaWdnZXIgb24gYWxsIGVycm9yIHBhY2tldHMgcmVjZWl2ZWQgKi8KIAkvKiBpZiAoc3RhdHVzICYgMHgwMSkgewotCSAgIERFQlVHKDQsICJUcmFuc21pdCBidWZmZXJzIGF2YWlsYWJsZSwgJXhcbiIsIHN0YXR1cyk7CisJICAgcHJfZGVidWcoIlRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlLCAleFxuIiwgc3RhdHVzKTsKIAkgICB9CiAJICAgKi8KICAgICB9CkBAIC0xMTkwLDcgKzExNzEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBuZXR3YXZlX3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKIAotICAgIERFQlVHKDEsICIlczogbmV0d2F2ZV93YXRjaGRvZzogd2F0Y2hkb2cgdGltZXIgZXhwaXJlZFxuIiwgZGV2LT5uYW1lKTsKKyAgICBwcl9kZWJ1ZygiJXM6IG5ldHdhdmVfd2F0Y2hkb2c6IHdhdGNoZG9nIHRpbWVyIGV4cGlyZWRcbiIsIGRldi0+bmFtZSk7CiAgICAgbmV0d2F2ZV9yZXNldChkZXYpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTEyMTEsNyArMTE5Miw3IEBACiAgICAgaW50IGk7CiAgICAgdV9jaGFyICpwdHI7CiAJCi0gICAgREVCVUcoMywgInhpbndfcng6IFJlY2VpdmluZyAuLi4gXG4iKTsKKyAgICBwcl9kZWJ1ZygieGlud19yeDogUmVjZWl2aW5nIC4uLiBcbiIpOwogCiAgICAgLyogUmVjZWl2ZSBtYXggMTAgcGFja2V0cyBmb3Igbm93LiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CkBAIC0xMjM3LDcgKzEyMTgsNyBAQAogCQkKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHJjdkxlbis1KTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkgICAgREVCVUcoMSwgIm5ldHdhdmVfcng6IENvdWxkIG5vdCBhbGxvY2F0ZSBhbiBza19idWZmIG9mICIKKwkgICAgcHJfZGVidWcoIm5ldHdhdmVfcng6IENvdWxkIG5vdCBhbGxvY2F0ZSBhbiBza19idWZmIG9mICIKIAkJICAibGVuZ3RoICVkXG4iLCByY3ZMZW4pOwogCSAgICArK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKIAkgICAgLyogVGVsbCB0aGUgYWRhcHRlciB0byBza2lwIHRoZSBwYWNrZXQgKi8KQEAgLTEyNzksNyArMTI2MCw3IEBACiAJd2FpdF9XT0MoaW9iYXNlKTsKIAl3cml0ZWIoTkVUV0FWRV9DTURfU1JQLCByYW1CYXNlICsgTkVUV0FWRV9FUkVHX0NCICsgMCk7CiAJd3JpdGViKE5FVFdBVkVfQ01EX0VPQywgcmFtQmFzZSArIE5FVFdBVkVfRVJFR19DQiArIDEpOwotCURFQlVHKDMsICJQYWNrZXQgcmVjZXB0aW9uIG9rXG4iKTsKKwlwcl9kZWJ1ZygiUGFja2V0IHJlY2VwdGlvbiBva1xuIik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTI4OCw3ICsxMjY5LDcgQEAKICAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gcHJpdi0+cF9kZXY7CiAKLSAgICBERUJVRygxLCAibmV0d2F2ZV9vcGVuOiBzdGFydGluZy5cbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgIm5ldHdhdmVfb3Blbjogc3RhcnRpbmcuXG4iKTsKICAgICAKICAgICBpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTEzMDUsNyArMTI4Niw3IEBACiAgICAgbmV0d2F2ZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IHByaXYtPnBfZGV2OwogCi0gICAgREVCVUcoMSwgIm5ldHdhdmVfY2xvc2U6IGZpbmlzaGluZy5cbiIpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgIm5ldHdhdmVfY2xvc2U6IGZpbmlzaGluZy5cbiIpOwogCiAgICAgbGluay0+b3Blbi0tOwogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTEzNTgsMTEgKzEzMzksMTEgQEAKICAgICB1X2NoYXIgIHJjdk1vZGUgPSAwOwogICAgCiAjaWZkZWYgUENNQ0lBX0RFQlVHCi0gICAgaWYgKHBjX2RlYnVnID4gMikgewotCXN0YXRpYyBpbnQgb2xkOworICAgIHsKKwl4c3RhdGljIGludCBvbGQ7CiAJaWYgKG9sZCAhPSBkZXYtPm1jX2NvdW50KSB7CiAJICAgIG9sZCA9IGRldi0+bWNfY291bnQ7Ci0JICAgIERFQlVHKDAsICIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCisJICAgIHByX2RlYnVnKCIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCiAJCSAgZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKIAl9CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwppbmRleCAzOGMxYzlkLi5mMjdiYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQ7CiAKLQlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmbGluay0+ZGV2LAogCQkJCW9yaW5vY29fY3NfaGFyZF9yZXNldCwgTlVMTCk7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyMCwxMCArMTIwLDggQEAKIAlsaW5rLT5wcml2ID0gcHJpdjsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IG9yaW5vY29faW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IHByaXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMTYwLDEyICsxNTgsNiBAQAogICogZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgZG8geyBcCi0JbGFzdF9mbiA9IChmbik7IFwKLQlpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIFwKLQkJZ290byBjc19mYWlsZWQ7IFwKLX0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgb3Jpbm9jb19jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKIAkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LApAQCAtMjQwLDcgKzIzMiw3IEBACiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKIAkvKgpAQCAtMjU3LDEzICsyNDksMTIgQEAKIAkgKiBhbmQgbW9zdCBjbGllbnQgZHJpdmVycyB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbgogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KLQlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBvcmlub2NvX2NzX2NvbmZpZ19jaGVjaywgTlVMTCk7Ci0JaWYgKGxhc3RfcmV0KSB7CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG9yaW5vY29fY3NfY29uZmlnX2NoZWNrLCBOVUxMKTsKKwlpZiAocmV0KSB7CiAJCWlmICghaWdub3JlX2Npc192Y2MpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCiAJCQkgICAgICAgImlnbm9yZV9jaXNfdmNjPTEgcGFyYW1ldGVyLlxuIik7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTI3MiwxNCArMjYzLDE2IEBACiAJICogYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZgogCSAqIHRoZSBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGVybWVzIHN0cnVjdHVyZSBiZWZvcmUgY29tcGxldGluZyBQQ01DSUEKIAkgKiBjb25maWd1cmF0aW9uIGp1c3QgaW4gY2FzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cwogCSAqIGNhbGxlZC4gKi8KIAltZW0gPSBpb3BvcnRfbWFwKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxKTsKIAlpZiAoIW1lbSkKLQkJZ290byBjc19mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCiAJaGVybWVzX3N0cnVjdF9pbml0KGh3LCBtZW0sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIApAQCAtMjg4LDggKzI4MSw5IEBACiAJICogdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAqIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKiBPaywgd2UgaGF2ZSB0aGUgY29uZmlndXJhdGlvbiwgcHJlcGFyZSB0byByZWdpc3RlciB0aGUgbmV0ZGV2ICovCiAJY2FyZC0+bm9kZS5tYWpvciA9IGNhcmQtPm5vZGUubWlub3IgPSAwOwpAQCAtMzE1LDkgKzMwOSw2IEBACiAJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAJcmV0dXJuIDA7CiAKLSBjc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwotCiAgZmFpbGVkOgogCW9yaW5vY29fY3NfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwppbmRleCBjMzYxMzEwLi41OWJkYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCkBAIC03Myw5ICs3Myw2IEBACiAjZGVmaW5lIEhDUl9NRU0xNgkweDEwCS8qIG1lbW9yeSB3aWR0aCBiaXQsIHNob3VsZCBiZSBwcmVzZXJ2ZWQgKi8KIAogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLSAgZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogLyoKICAqIFJlc2V0IHRoZSBjYXJkIHVzaW5nIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIENPUiBhbmQgQ0NTUi4KICAqIElmIElETEUgaXMgMSwgc3RvcCB0aGUgZmlybXdhcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHNhZmVseSByZXdyaXR0ZW4uCkBAIC04Myw3ICs4MCw3IEBACiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9yZXNldChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IGlkbGUpCiB7Ci0JaW50IGxhc3RfcmV0LCBsYXN0X2ZuOworCWludCByZXQ7CiAJY29uZl9yZWdfdCByZWc7CiAJdV9pbnQgc2F2ZV9jb3I7CiAKQEAgLTk1LDIzICs5MiwyNiBAQAogCXJlZy5GdW5jdGlvbiA9IDA7CiAJcmVnLkFjdGlvbiA9IENTX1JFQUQ7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0JQ1NfQ0hFQ0soQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLAotCQkgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpKTsKKwlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAJc2F2ZV9jb3IgPSByZWcuVmFsdWU7CiAKIAkvKiBTb2Z0LVJlc2V0IGNhcmQgKi8KIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gKHNhdmVfY29yIHwgQ09SX1NPRlRfUkVTRVQpOwotCUNTX0NIRUNLKEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwKLQkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSk7CisJcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCXVkZWxheSgxMDAwKTsKIAogCS8qIFJlYWQgQ0NTUiAqLwogCXJlZy5BY3Rpb24gPSBDU19SRUFEOwogCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKLQlDU19DSEVDSyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsCi0JCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpOworCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCS8qCiAJICogU3RhcnQgb3Igc3RvcCB0aGUgZmlybXdhcmUuICBNZW1vcnkgd2lkdGggYml0IHNob3VsZCBiZQpAQCAtMTIwLDIxICsxMjAsMjIgQEAKIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DQ1NSOwogCXJlZy5WYWx1ZSA9IChpZGxlID8gSENSX0lETEUgOiBIQ1JfUlVOKSB8IChyZWcuVmFsdWUgJiBIQ1JfTUVNMTYpOwotCUNTX0NIRUNLKEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwKLQkJIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSk7CisJcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCXVkZWxheSgxMDAwKTsKIAogCS8qIFJlc3RvcmUgb3JpZ2luYWwgQ09SIGNvbmZpZ3VyYXRpb24gaW5kZXggKi8KIAlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAJcmVnLk9mZnNldCA9IENJU1JFR19DT1I7CiAJcmVnLlZhbHVlID0gKHNhdmVfY29yICYgfkNPUl9TT0ZUX1JFU0VUKTsKLQlDU19DSEVDSyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsCi0JCSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpOworCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAl1ZGVsYXkoMTAwMCk7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CitmYWlsZWQ6CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTE4MSw3ICsxODIsNyBAQAogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkOwogCi0JcHJpdiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCisJcHJpdiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmxpbmstPmRldiwKIAkJCQlzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0LAogCQkJCXNwZWN0cnVtX2NzX3N0b3BfZmlybXdhcmUpOwogCWlmICghcHJpdikKQEAgLTE5MywxMCArMTk0LDggQEAKIAlsaW5rLT5wcml2ID0gcHJpdjsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IG9yaW5vY29faW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IHByaXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMzA3LDcgKzMwNiw3IEBACiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKIAkvKgpAQCAtMzI0LDEzICszMjMsMTIgQEAKIAkgKiBhbmQgbW9zdCBjbGllbnQgZHJpdmVycyB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbgogCSAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkgKi8KLQlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBzcGVjdHJ1bV9jc19jb25maWdfY2hlY2ssIE5VTEwpOwotCWlmIChsYXN0X3JldCkgeworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBzcGVjdHJ1bV9jc19jb25maWdfY2hlY2ssIE5VTEwpOworCWlmIChyZXQpIHsKIAkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIkdldE5leHRUdXBsZSgpOiBObyBtYXRjaGluZyAiCiAJCQkgICAgICAgIkNJUyBjb25maWd1cmF0aW9uLiAgTWF5YmUgeW91IG5lZWQgdGhlICIKIAkJCSAgICAgICAiaWdub3JlX2Npc192Y2M9MSBwYXJhbWV0ZXIuXG4iKTsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtMzM5LDE0ICszMzcsMTYgQEAKIAkgKiBhIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mCiAJICogdGhlIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJICovCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKiBXZSBpbml0aWFsaXplIHRoZSBoZXJtZXMgc3RydWN0dXJlIGJlZm9yZSBjb21wbGV0aW5nIFBDTUNJQQogCSAqIGNvbmZpZ3VyYXRpb24ganVzdCBpbiBjYXNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBnZXRzCiAJICogY2FsbGVkLiAqLwogCW1lbSA9IGlvcG9ydF9tYXAobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOwogCWlmICghbWVtKQotCQlnb3RvIGNzX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAKIAloZXJtZXNfc3RydWN0X2luaXQoaHcsIG1lbSwgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCkBAIC0zNTUsOCArMzU1LDkgQEAKIAkgKiB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCS8qIE9rLCB3ZSBoYXZlIHRoZSBjb25maWd1cmF0aW9uLCBwcmVwYXJlIHRvIHJlZ2lzdGVyIHRoZSBuZXRkZXYgKi8KIAljYXJkLT5ub2RlLm1ham9yID0gY2FyZC0+bm9kZS5taW5vciA9IDA7CkBAIC0zODYsOSArMzg3LDYgQEAKIAkJCQkgICAgICAgKiBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KIAlyZXR1cm4gMDsKIAotIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7Ci0KICBmYWlsZWQ6CiAJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCAxN2UxOTk1Li45MmFmOWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC00MjYsMTIgKzQyNiwxNiBAQAogc3RhdGljIGludCBwNTR1X2Zpcm13YXJlX3Jlc2V0XzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTggYnVmWzRdOworCXU4ICpidWY7CiAJaW50IHJldDsKIAotCW1lbWNweSgmYnVmLCBwNTR1X3JvbWJvb3RfMzg4Nywgc2l6ZW9mKGJ1ZikpOworCWJ1ZiA9IGttYWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShidWYsIHA1NHVfcm9tYm9vdF8zODg3LCA0KTsKIAlyZXQgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLAotCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJICAgIGJ1ZiwgNCk7CisJa2ZyZWUoYnVmKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICIocDU0dXNiKSB1bmFibGUgdG8ganVtcCB0byAiCiAJCQkiYm9vdCBST00gKCVkKSFcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDg4Y2Q1OGUuLjViOGUzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC03MSwyNSArNzEsNyBAQAogI2luY2x1ZGUgInJheWN0bC5oIgogI2luY2x1ZGUgInJheV9jcy5oIgogCi0vKiBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwogCi0jaWZkZWYgUkFZTElOS19ERUJVRwotI2RlZmluZSBQQ01DSUFfREVCVUcgUkFZTElOS19ERUJVRwotI2VuZGlmCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHJheV9kZWJ1ZzsKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7Ci0vKiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyAqLwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhhcmdzKTsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIC8qKiBQcm90b3R5cGVzIGJhc2VkIG9uIFBDTUNJQSBza2VsZXRvbiBkcml2ZXIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcmF5X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCByYXlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CkBAIC0zMjUsNyArMzA3LDcgQEAKIAlyYXlfZGV2X3QgKmxvY2FsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlERUJVRygxLCAicmF5X2F0dGFjaCgpXG4iKTsKKwlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAicmF5X2F0dGFjaCgpXG4iKTsKIAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJheV9kZXZfdCkpOwpAQCAtMzQxLDggKzMyMyw3IEBACiAJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKIAogCS8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLwotCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLQlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLkhhbmRsZXIgPSAmcmF5X2ludGVycnVwdDsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KQEAgLTM1MSwxMyArMzMyLDEyIEBACiAJcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCiAJcF9kZXYtPnByaXYgPSBkZXY7Ci0JcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKIAogCWxvY2FsLT5maW5kZXIgPSBwX2RldjsKIAlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOU0VSVEVEOwogCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKIAlsb2NhbC0+bnVtX211bHRpID0gMDsKLQlERUJVRygyLCAicmF5X2F0dGFjaCBwX2RldiA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCisJZGV2X2RiZygmcF9kZXYtPmRldiwgInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAogCSAgICAgIHBfZGV2LCBkZXYsIGxvY2FsLCAmcmF5X2ludGVycnVwdCk7CiAKIAkvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KQEAgLTM3MCw3ICszNTAsNyBAQAogI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCiAKLQlERUJVRygyLCAicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKKwlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlpbml0X3RpbWVyKCZsb2NhbC0+dGltZXIpOwpAQCAtMzkzLDcgKzM3Myw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlyYXlfZGV2X3QgKmxvY2FsOwogCi0JREVCVUcoMSwgInJheV9kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9kZXRhY2hcbiIpOwogCiAJdGhpc19kZXZpY2UgPSBOVUxMOwogCWRldiA9IGxpbmstPnByaXY7CkBAIC00MDgsNyArMzg4LDcgQEAKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJfQotCURFQlVHKDIsICJyYXlfY3MgcmF5X2RldGFjaCBlbmRpbmdcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CiB9IC8qIHJheV9kZXRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDE2LDE5ICszOTYsMTcgQEAKICAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKICAgICBldGhlcm5ldCBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAjZGVmaW5lIE1BWF9UVVBMRV9TSVpFIDEyOAogc3RhdGljIGludCByYXlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOworCWludCByZXQgPSAwOwogCWludCBpOwogCXdpbl9yZXFfdCByZXE7CiAJbWVtcmVxX3QgbWVtOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JREVCVUcoMSwgInJheV9jb25maWcoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jb25maWdcbiIpOwogCiAJLyogRGV0ZXJtaW5lIGNhcmQgdHlwZSBhbmQgZmlybXdhcmUgdmVyc2lvbiAqLwogCXByaW50ayhLRVJOX0lORk8gInJheV9jcyBEZXRlY3RlZDogJXMlcyVzJXNcbiIsCkBAIC00NDAsMTQgKzQxOCwxNyBAQAogCS8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CiAJICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgogCSAqLwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCiAJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZy4KIAkgKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwKLQkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogLyoqKiBTZXQgdXAgMzJrIHdpbmRvdyBmb3Igc2hhcmVkIG1lbW9yeSAodHJhbnNtaXQgYW5kIGNvbnRyb2wpICoqKioqKioqKioqKi8KIAlyZXEuQXR0cmlidXRlcyA9CkBAIC00NTUsMTAgKzQzNiwxNCBAQAogCXJlcS5CYXNlID0gMDsKIAlyZXEuU2l6ZSA9IDB4ODAwMDsKIAlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKIAltZW0uUGFnZSA9IDA7Ci0JQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKKwlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAJbG9jYWwtPnNyYW0gPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CiAKIC8qKiogU2V0IHVwIDE2ayB3aW5kb3cgZm9yIHNoYXJlZCBtZW1vcnkgKHJlY2VpdmUgYnVmZmVyKSAqKioqKioqKioqKioqKiovCkBAIC00NjcsMTEgKzQ1MiwxNCBAQAogCXJlcS5CYXNlID0gMDsKIAlyZXEuU2l6ZSA9IDB4NDAwMDsKIAlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCi0JCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+cm1lbV9oYW5kbGUpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxvY2FsLT5ybWVtX2hhbmRsZSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAJbWVtLkNhcmRPZmZzZXQgPSAweDgwMDA7CiAJbWVtLlBhZ2UgPSAwOwotCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPnJtZW1faGFuZGxlLCAmbWVtKSk7CisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCWxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCiAvKioqIFNldCB1cCB3aW5kb3cgZm9yIGF0dHJpYnV0ZSBtZW1vcnkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00ODAsMjIgKzQ2OCwyNSBAQAogCXJlcS5CYXNlID0gMDsKIAlyZXEuU2l6ZSA9IDB4MTAwMDsKIAlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCi0JCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxvY2FsLT5hbWVtX2hhbmRsZSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAJbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7CiAJbWVtLlBhZ2UgPSAwOwotCUNTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKSk7CisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCWxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCi0JREVCVUcoMywgInJheV9jb25maWcgc3JhbT0lcFxuIiwgbG9jYWwtPnNyYW0pOwotCURFQlVHKDMsICJyYXlfY29uZmlnIHJtZW09JXBcbiIsIGxvY2FsLT5ybWVtKTsKLQlERUJVRygzLCAicmF5X2NvbmZpZyBhbWVtPSVwXG4iLCBsb2NhbC0+YW1lbSk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NvbmZpZyBzcmFtPSVwXG4iLCBsb2NhbC0+c3JhbSk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NvbmZpZyBybWVtPSVwXG4iLCBsb2NhbC0+cm1lbSk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NvbmZpZyBhbWVtPSVwXG4iLCBsb2NhbC0+YW1lbSk7CiAJaWYgKHJheV9pbml0KGRldikgPCAwKSB7CiAJCXJheV9yZWxlYXNlKGxpbmspOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwogCWkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoaSAhPSAwKSB7CiAJCXByaW50aygicmF5X2NvbmZpZyByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOwpAQCAtNTExLDkgKzUwMiw3IEBACiAKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKLQorZmFpbGVkOgogCXJheV9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogfSAvKiByYXlfY29uZmlnICovCkBAIC01NDMsOSArNTMyLDkgQEAKIAlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotCURFQlVHKDEsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfaW5pdCgweCVwKVxuIiwgZGV2KTsKIAlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0JCURFQlVHKDAsICJyYXlfaW5pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTY3LDEzICs1NTYsMTMgQEAKIAlsb2NhbC0+ZndfdmVyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMF07CiAJbG9jYWwtPmZ3X2JsZCA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzFdOwogCWxvY2FsLT5md192YXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsyXTsKLQlERUJVRygxLCAicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsIGxvY2FsLT5md192ZXIsCisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsIGxvY2FsLT5md192ZXIsCiAJICAgICAgbG9jYWwtPmZ3X2JsZCk7CiAKIAlsb2NhbC0+dGliX2xlbmd0aCA9IDB4MjA7CiAJaWYgKChsb2NhbC0+ZndfdmVyID09IDUpICYmIChsb2NhbC0+ZndfYmxkID49IDMwKSkKIAkJbG9jYWwtPnRpYl9sZW5ndGggPSBsb2NhbC0+c3RhcnR1cF9yZXMudGliX2xlbmd0aDsKLQlERUJVRygyLCAicmF5X2luaXQgdGliX2xlbmd0aCA9IDB4JTAyeFxuIiwgbG9jYWwtPnRpYl9sZW5ndGgpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9pbml0IHRpYl9sZW5ndGggPSAweCUwMnhcbiIsIGxvY2FsLT50aWJfbGVuZ3RoKTsKIAkvKiBJbml0aWFsaXplIENDUydzIHRvIGJ1ZmZlciBmcmVlIHN0YXRlICovCiAJcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7CkBAIC01OTIsNyArNTgxLDcgQEAKIAogCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgZnJvbSB0aGUgY2FyZCAqLwogCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVdBSVRJTkdfUEFSQU07Ci0JREVCVUcoMiwgInJheV9pbml0IGVuZGluZ1xuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2luaXQgZW5kaW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0gLyogcmF5X2luaXQgKi8KIApAQCAtNjA1LDkgKzU5NCw5IEBACiAJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotCURFQlVHKDEsICJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKIAlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0JCURFQlVHKDIsICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC02MjUsNyArNjE0LDcgQEAKIAlsb2NhbC0+ZGxfcGFyYW1fY2NzID0gY2NzaW5kZXg7CiAJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwogCXdyaXRlYihDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVMsICZwY2NzLT5jbWQpOwotCURFQlVHKDIsICJkbF9zdGFydHVwX3BhcmFtcyBzdGFydCBjY3NpbmRleCA9ICVkXG4iLAorCWRldl9kYmcoJmxpbmstPmRldiwgImRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0IGNjc2luZGV4ID0gJWRcbiIsCiAJICAgICAgbG9jYWwtPmRsX3BhcmFtX2Njcyk7CiAJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCiAJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewpAQCAtNjQxLDcgKzYzMCw3IEBACiAJbG9jYWwtPnRpbWVyLmRhdGEgPSAobG9uZylsb2NhbDsKIAlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmdmVyaWZ5X2RsX3N0YXJ0dXA7CiAJYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotCURFQlVHKDIsCisJZGV2X2RiZygmbGluay0+ZGV2LAogCSAgICAgICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgc3RhcnRlZCB0aW1lciBmb3IgdmVyaWZ5X2RsX3N0YXJ0dXBcbiIpOwogCXJldHVybiAwOwogfSAvKiBkbF9zdGFydHVwX3BhcmFtcyAqLwpAQCAtNzE3LDExICs3MDYsMTEgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKIAlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0JCURFQlVHKDIsICJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogCQlyZXR1cm47CiAJfQotI2lmZGVmIFBDTUNJQV9ERUJVRwotCWlmIChwY19kZWJ1ZyA+IDIpIHsKKyNpZiAwCisJewogCQlpbnQgaTsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICJ2ZXJpZnlfZGxfc3RhcnR1cCBwYXJhbWV0ZXJzIHNlbnQgdmlhIGNjcyAlZDpcbiIsCkBAIC03NjAsNyArNzQ5LDcgQEAKIAlpbnQgY2NzaW5kZXg7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3Mgc3RhcnRfbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCkBAIC03NzEsNyArNzYwLDcgQEAKIAl3cml0ZWIoMCwgJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLnVwZGF0ZV9wYXJhbSk7CiAJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCiAJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotCQlERUJVRygxLCAicmF5IHN0YXJ0IG5ldCBmYWlsZWQgLSBjYXJkIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheSBzdGFydCBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOwogCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQpAQCAtNzkwLDcgKzc3OSw3IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGpvaW5fbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCkBAIC04MDIsNyArNzkxLDcgQEAKIAl3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsubmV0X2luaXRpYXRlZCk7CiAJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCiAJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotCQlERUJVRygxLCAicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5IGpvaW4gbmV0IGZhaWxlZCAtIGNhcmQgbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIAkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgyMSw3ICs4MTAsNyBAQAogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCi0JREVCVUcoMSwgInJheV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfcmVsZWFzZVxuIik7CiAKIAlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKQEAgLTgyOSwxNSArODE4LDE1IEBACiAJaW91bm1hcChsb2NhbC0+cm1lbSk7CiAJaW91bm1hcChsb2NhbC0+YW1lbSk7CiAJLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotCWkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxvY2FsLT5hbWVtX2hhbmRsZSk7CiAJaWYgKGkgIT0gMCkKLQkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLCBpKTsKLQlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7CisJCWRldl9kYmcoJmxpbmstPmRldiwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxvY2FsLT5ybWVtX2hhbmRsZSk7CiAJaWYgKGkgIT0gMCkKLQkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsIGkpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAotCURFQlVHKDIsICJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CiB9CiAKIHN0YXRpYyBpbnQgcmF5X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC04NzEsOSArODYwLDkgQEAKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLQlERUJVRygxLCAicmF5X2Rldl9pbml0KGRldj0lcClcbiIsIGRldik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2Rldl9pbml0KGRldj0lcClcbiIsIGRldik7CiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2Rldl9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KICNpZmRlZiBSQVlfSU1NRURJQVRFX0lOSVQKQEAgLTg4Nyw3ICs4NzYsNyBAQAogCS8qIFBvc3Rwb25lIHRoZSBjYXJkIGluaXQgc28gdGhhdCB3ZSBjYW4gc3RpbGwgY29uZmlndXJlIHRoZSBjYXJkLAogCSAqIGZvciBleGFtcGxlIHVzaW5nIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLiBUaGUgaW5pdCB3aWxsIGhhcHBlbgogCSAqIGluIHJheV9vcGVuKCkgLSBKZWFuIElJICovCi0JREVCVUcoMSwKKwlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJICAgICAgInJheV9kZXZfaW5pdDogcG9zdHBvbmluZyBjYXJkIGluaXQgdG8gcmF5X29wZW4oKSA7IFN0YXR1cyA9ICVkXG4iLAogCSAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyk7CiAjZW5kaWYgLyogUkFZX0lNTUVESUFURV9JTklUICovCkBAIC04OTYsNyArODg1LDcgQEAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKIAltZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKIAotCURFQlVHKDIsICJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTA2LDkgKzg5NSw5IEBACiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCS8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCi0JREVCVUcoMSwgInJheV9kZXZfY29uZmlnKGRldj0lcCxpZm1hcD0lcClcbiIsIGRldiwgbWFwKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfZGV2X2NvbmZpZyhkZXY9JXAsaWZtYXA9JXApXG4iLCBkZXYsIG1hcCk7CiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X2Rldl9jb25maWcgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfZGV2X2NvbmZpZyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTkyNCwxNCArOTEzLDE0IEBACiAJc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAKIAlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotCQlERUJVRygyLCAicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCURFQlVHKDMsICJyYXlfZGV2X3N0YXJ0X3htaXQoc2tiPSVwLCBkZXY9JXApXG4iLCBza2IsIGRldik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIiwgc2tiLCBkZXYpOwogCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7Ci0JCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4iKTsKIAkJaWYgKCFidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YXV0aF9pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7CiAJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtOTcxLDcgKzk2MCw3IEBACiAJc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7CS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gUEMgc3BhY2UgKi8KIAlzaG9ydCBpbnQgYWRkcjsJCS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gY2FyZCBzcGFjZSAqLwogCi0JREVCVUcoMywgInJheV9od194bWl0KGRhdGE9JXAsIGxlbj0lZCwgZGV2PSVwKVxuIiwgZGF0YSwgbGVuLCBkZXYpOworCXByX2RlYnVnKCJyYXlfaHdfeG1pdChkYXRhPSVwLCBsZW49JWQsIGRldj0lcClcbiIsIGRhdGEsIGxlbiwgZGV2KTsKIAlpZiAobGVuICsgVFhfSEVBREVSX0xFTkdUSCA+IFRYX0JVRl9TSVpFKSB7CiAJCXByaW50ayhLRVJOX0lORk8gInJheV9od194bWl0IHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzXG4iLAogCQkgICAgICAgbGVuKTsKQEAgLTk3OSw5ICs5NjgsOSBAQAogCX0KIAlzd2l0Y2ggKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgewogCWNhc2UgRUNDU0JVU1k6Ci0JCURFQlVHKDIsICJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CisJCXByX2RlYnVnKCJyYXlfaHdfeG1pdCB0eF9jY3MgdGFibGUgYnVzeVxuIik7CiAJY2FzZSBFQ0NTRlVMTDoKLQkJREVCVUcoMiwgInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJcHJfZGVidWcoInJheV9od194bWl0IE5vIGZyZWUgdHggY2NzXG4iKTsKIAljYXNlIEVDQVJER09ORToKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlyZXR1cm4gWE1JVF9OT19DQ1M7CkBAIC0xMDE4LDEyICsxMDA3LDEyIEBACiAJd3JpdGViKFBTTV9DQU0sICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOwogCXdyaXRlYihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X3JhdGUpOwogCXdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QuYW50ZW5uYSk7Ci0JREVCVUcoMywgInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsCisJcHJfZGVidWcoInJheV9od194bWl0IGRlZmF1bHRfdHhfcmF0ZSA9IDB4JXhcbiIsCiAJICAgICAgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUpOwogCiAJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCiAJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotCQlERUJVRygyLCAicmF5X2h3X3htaXQgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXByX2RlYnVnKCJyYXlfaHdfeG1pdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIC8qIFRCRCB2ZXJ5IGluZWZmaWNpZW50IHRvIGNvcHkgcGFja2V0IHRvIGJ1ZmZlciwgYW5kIHRoZW4gbm90CiAgICBzZW5kIGl0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRvIHF1ZXVlIHRoZSBtZXNzYWdlcyBhbmQgdGhhdAogICAgd29uJ3QgYmUgZG9uZSBmb3IgYSB3aGlsZS4gIE1heWJlIHNldCB0YnVzeSB1bnRpbCBhIENDUyBpcyBmcmVlPwpAQCAtMTA0MCw3ICsxMDI5LDcgQEAKIHsKIAlfX2JlMTYgcHJvdG8gPSAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9wcm90bzsKIAlpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsgLyogRElYIElJIGV0aGVybmV0IGZyYW1lICovCi0JCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7CisJCXByX2RlYnVnKCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7CiAJCS8qIENvcHkgTExDIGhlYWRlciB0byBjYXJkIGJ1ZmZlciAqLwogCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGV0aDJfbGxjLCBzaXplb2YoZXRoMl9sbGMpKTsKIAkJbWVtY3B5X3RvaW8oKCh2b2lkIF9faW9tZW0gKikmcHR4LT52YXIpICsgc2l6ZW9mKGV0aDJfbGxjKSwKQEAgLTEwNTYsOSArMTA0NSw5IEBACiAJCQkgICAgbGVuIC0gRVRIX0hMRU4pOwogCQlyZXR1cm4gKGludClzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKIAl9IGVsc2UgeyAvKiBhbHJlYWR5ICA4MDIgdHlwZSwgYW5kIHByb3RvIGlzIGxlbmd0aCAqLwotCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOworCQlwcl9kZWJ1ZygicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSA4MDJcbiIpOwogCQlpZiAocHJvdG8gPT0gaHRvbnMoMHhmZmZmKSkgeyAvKiBldmlsIG5ldHdhcmUgSVBYIDgwMi4zIHdpdGhvdXQgTExDICovCi0JCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7CisJCQlwcl9kZWJ1ZygicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBldmlsIElQWFxuIik7CiAJCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgbGVuIC0gRVRIX0hMRU4pOwogCQkJcmV0dXJuIDAgLSBFVEhfSExFTjsKIAkJfQpAQCAtMTYwMyw3ICsxNTkyLDcgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotCURFQlVHKDEsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKIAogCWlmIChsaW5rLT5vcGVuID09IDApCiAJCWxvY2FsLT5udW1fbXVsdGkgPSAwOwpAQCAtMTYxMyw3ICsxNjAyLDcgQEAKIAlpZiAobG9jYWwtPmNhcmRfc3RhdHVzID09IENBUkRfQVdBSVRJTkdfUEFSQU0pIHsKIAkJaW50IGk7CiAKLQkJREVCVUcoMSwgInJheV9vcGVuOiBkb2luZyBpbml0IG5vdyAhXG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X29wZW46IGRvaW5nIGluaXQgbm93ICFcbiIpOwogCiAJCS8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwogCQlpZiAoKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApIHsKQEAgLTE2MjksNyArMTYxOCw3IEBACiAJZWxzZQogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0JREVCVUcoMiwgInJheV9vcGVuIGVuZGluZ1xuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X29wZW4gZW5kaW5nXG4iKTsKIAlyZXR1cm4gMDsKIH0gLyogZW5kIHJheV9vcGVuICovCiAKQEAgLTE2NDAsNyArMTYyOSw3IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLQlERUJVRygxLCAicmF5X2Rldl9jbG9zZSgnJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfZGV2X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCiAJbGluay0+b3Blbi0tOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTE2NTYsNyArMTY0NSw3IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlERUJVRygxLCAicmF5X3Jlc2V0IGVudGVyZWRcbiIpOworCXByX2RlYnVnKCJyYXlfcmVzZXQgZW50ZXJlZFxuIik7CiAJcmV0dXJuOwogfQogCkBAIC0xNjY5LDE3ICsxNjU4LDE3IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JREVCVUcoMiwgImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsIGxvY2FsLCBjY3MpOworCWRldl9kYmcoJmxpbmstPmRldiwgImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsIGxvY2FsLCBjY3MpOwogCiAJd2hpbGUgKGkgJiYKIAkgICAgICAgKHJlYWRiKGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCkgJgogCQlFQ0ZfSU5UUl9TRVQpKQogCQlpLS07CiAJaWYgKGkgPT0gMCkgewotCQlERUJVRygyLCAicmF5X2NzIGludGVycnVwdF9lY2YgY2FyZCBub3QgcmVhZHkgZm9yIGludGVycnVwdFxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBpbnRlcnJ1cHRfZWNmIGNhcmQgbm90IHJlYWR5IGZvciBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIEZpbGwgdGhlIG1haWxib3gsIHRoZW4ga2ljayB0aGUgY2FyZCAqLwpAQCAtMTY5OCwxMiArMTY4NywxMiBAQAogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgZ2V0X2ZyZWVfdHhfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIEVDQVJER09ORTsKIAl9CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPnR4X2Njc19sb2NrKSkgewotCQlERUJVRygxLCAicmF5X2NzIHR4X2Njc19sb2NrIGJ1c3lcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgdHhfY2NzX2xvY2sgYnVzeVxuIik7CiAJCXJldHVybiBFQ0NTQlVTWTsKIAl9CiAKQEAgLTE3MTYsNyArMTcwNSw3IEBACiAJCX0KIAl9CiAJbG9jYWwtPnR4X2Njc19sb2NrID0gMDsKLQlERUJVRygyLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgdHggQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBFUlJPUiBubyBmcmVlIHR4IENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKIAlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX3R4X2NjcyAqLwogCkBAIC0xNzMwLDExICsxNzE5LDExIEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X2NzIGdldF9mcmVlX2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogCQlyZXR1cm4gRUNBUkRHT05FOwogCX0KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbG9jYWwtPmNjc19sb2NrKSkgewotCQlERUJVRygxLCAicmF5X2NzIGNjc19sb2NrIGJ1c3lcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgY2NzX2xvY2sgYnVzeVxuIik7CiAJCXJldHVybiBFQ0NTQlVTWTsKIAl9CiAKQEAgLTE3NDcsNyArMTczNiw3IEBACiAJCX0KIAl9CiAJbG9jYWwtPmNjc19sb2NrID0gMDsKLQlERUJVRygxLCAicmF5X2NzIEVSUk9SIG5vIGZyZWUgQ0NTIGZvciByYXlsaW5rIGNhcmRcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBFUlJPUiBubyBmcmVlIENDUyBmb3IgcmF5bGluayBjYXJkXG4iKTsKIAlyZXR1cm4gRUNDU0ZVTEw7CiB9IC8qIGdldF9mcmVlX2NjcyAqLwogCkBAIC0xODIzLDcgKzE4MTIsNyBAQAogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAlzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOwogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIG5ldF9kZXZpY2Vfc3RhdHMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogCQlyZXR1cm4gJmxvY2FsLT5zdGF0czsKIAl9CiAJaWYgKHJlYWRiKCZwLT5tcnhfb3ZlcmZsb3dfZm9yX2hvc3QpKSB7CkBAIC0xODU2LDEyICsxODQ1LDEyIEBACiAJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogCiAJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotCQlERUJVRygyLCAicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X3VwZGF0ZV9wYXJtIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKLQkJREVCVUcoMCwgInJheV91cGRhdGVfcGFybSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X3VwZGF0ZV9wYXJtIC0gTm8gZnJlZSBjY3NcbiIpOwogCQlyZXR1cm47CiAJfQogCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKQEAgLTE4NzQsNyArMTg2Myw3IEBACiAJfQogCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwogCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBhc3NvY2lhdGUgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CiAJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CiAJfQogfQpAQCAtMTg5MSwxMiArMTg4MCwxMiBAQAogCXZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKIAogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CiAJCXJldHVybjsKIAl9IGVsc2UKLQkJREVCVUcoMiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsIGRldik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV91cGRhdGVfbXVsdGlfbGlzdCglcClcbiIsIGRldik7CiAJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgewotCQlERUJVRygxLCAicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X3VwZGF0ZV9tdWx0aSAtIE5vIGZyZWUgY2NzXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CkBAIC0xOTEwLDcgKzE4OTksNyBAQAogCQlmb3IgKGRtaXAgPSAmZGV2LT5tY19saXN0OyAoZG1pID0gKmRtaXApICE9IE5VTEw7CiAJCSAgICAgZG1pcCA9ICZkbWktPm5leHQpIHsKIAkJCW1lbWNweV90b2lvKHAsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJCURFQlVHKDEsCisJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkgICAgICAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCiAJCQkgICAgICBkbWktPmRtaV9hZGRyWzBdLCBkbWktPmRtaV9hZGRyWzFdLAogCQkJICAgICAgZG1pLT5kbWlfYWRkclsyXSwgZG1pLT5kbWlfYWRkclszXSwKQEAgLTE5MjEsMTIgKzE5MTAsMTIgQEAKIAkJaWYgKGkgPiAyNTYgLyBBRERSTEVOKQogCQkJaSA9IDI1NiAvIEFERFJMRU47CiAJCXdyaXRlYigoVUNIQVIpIGksICZwY2NzLT52YXIpOwotCQlERUJVRygxLCAicmF5X2NzIHVwZGF0ZV9tdWx0aSAlZCBhZGRyZXNzZXMgaW4gbGlzdFxuIiwgaSk7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyB1cGRhdGVfbXVsdGkgJWQgYWRkcmVzc2VzIGluIGxpc3RcbiIsIGkpOwogCQkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KIAkJbG9jYWwtPm51bV9tdWx0aSA9IGk7CiAJfQogCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLQkJREVCVUcoMSwKKwkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkgICAgICAicmF5X2NzIHVwZGF0ZV9tdWx0aSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIAkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKIAl9CkBAIC0xOTM4LDExICsxOTI3LDExIEBACiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJVUNIQVIgcHJvbWlzYzsKIAotCURFQlVHKDIsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0KCVwKVxuIiwgZGV2KTsKKwlwcl9kZWJ1ZygicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCglcClcbiIsIGRldik7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDApIHsKLQkJCURFQlVHKDEsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb25cbiIpOworCQkJcHJfZGVidWcoInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvblxuIik7CiAJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMTsKIAkJCXByb21pc2MgPSAxOwogCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKQEAgLTE5NTAsNyArMTkzOSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAobG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9PSAxKSB7Ci0JCQlERUJVRygxLCAicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7CisJCQlwcl9kZWJ1ZygicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7CiAJCQlsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMDsKIAkJCXByb21pc2MgPSAwOwogCQkJcmF5X3VwZGF0ZV9wYXJtKGRldiwgT0JKSURfcHJvbWlzY3VvdXNfbW9kZSwKQEAgLTE5ODQsMTkgKzE5NzMsMTkgQEAKIAlpZiAoZGV2ID09IE5VTEwpCS8qIE5vdGUgdGhhdCB3ZSB3YW50IGludGVycnVwdHMgd2l0aCBkZXYtPnN0YXJ0ID09IDAgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCi0JREVCVUcoNCwgInJheV9jczogaW50ZXJydXB0IGZvciAqZGV2PSVwXG4iLCBkZXYpOworCXByX2RlYnVnKCJyYXlfY3M6IGludGVycnVwdCBmb3IgKmRldj0lcFxuIiwgZGV2KTsKIAogCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopbG9jYWwtPmZpbmRlcjsKIAlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotCQlERUJVRygyLAotCQkgICAgICAicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKKwkJcHJfZGVidWcoCisJCQkicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAlyY3NpbmRleCA9IHJlYWRiKCYoKHN0cnVjdCBzY2IgX19pb21lbSAqKShsb2NhbC0+c3JhbSkpLT5yY3NfaW5kZXgpOwogCiAJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKLQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIiwgcmNzaW5kZXgpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsIHJjc2luZGV4KTsKIAkJY2xlYXJfaW50ZXJydXB0KGxvY2FsKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KQEAgLTIwMDgsMzMgKzE5OTcsMzMgQEAKIAkJY2FzZSBDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVM6CS8qIEhhcHBlbnMgaW4gZmlybXdhcmUgc29tZWRheSAqLwogCQkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotCQkJCURFQlVHKDEsCisJCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBPS1xuIik7CiAJCQl9IGVsc2UgewotCQkJCURFQlVHKDEsCisJCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IGRvd25sb2FkX3N0YXJ0dXBfcGFyYW1ldGVycyBmYWlsXG4iKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIENDU19VUERBVEVfUEFSQU1TOgotCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKKwkJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBpbnRlcnJ1cHQgdXBkYXRlIHBhcmFtcyBkb25lXG4iKTsKIAkJCWlmIChzdGF0dXMgIT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKIAkJCQl0bXAgPQogCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS4KIAkJCQkJICBmYWlsdXJlX2NhdXNlKTsKLQkJCQlERUJVRygwLAorCQkJCWRldl9kYmcoJmxpbmstPmRldiwKIAkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGZhaWxlZCAtIHJlYXNvbiAlZFxuIiwKIAkJCQkgICAgICB0bXApOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQ0NTX1JFUE9SVF9QQVJBTVM6Ci0JCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVDoJLyogTm90ZSB0aGF0IHRoaXMgQ0NTIGlzbid0IHJldHVybmVkICovCi0JCQlERUJVRygxLAorCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgQ0NTIFVwZGF0ZSBNdWx0aWNhc3QgTGlzdCBkb25lXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIENDU19VUERBVEVfUE9XRVJfU0FWSU5HU19NT0RFOgotCQkJREVCVUcoMSwKKwkJCWRldl9kYmcoJmxpbmstPmRldiwKIAkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwb3dlciBzYXZlIG1vZGUgZG9uZVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBDQ1NfU1RBUlRfTkVUV09SSzoKQEAgLTIwNDMsMTEgKzIwMzIsMTEgQEAKIAkJCQlpZiAocmVhZGIKIAkJCQkgICAgKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfaW5pdGlhdGVkKSA9PQogCQkJCSAgICAxKSB7Ci0JCQkJCURFQlVHKDAsCisJCQkJCWRldl9kYmcoJmxpbmstPmRldiwKIAkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnRlZFxuIiwKIAkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCURFQlVHKDAsCisJCQkJCWRldl9kYmcoJmxpbmstPmRldiwKIAkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgam9pbmVkXG4iLAogCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CiAJCQkJfQpAQCAtMjA3NSwxMiArMjA2NCwxMiBAQAogCQkJCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogNTsKIAkJCQlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwogCQkJCWlmIChzdGF0dXMgPT0gQ0NTX1NUQVJUX05FVFdPUkspIHsKLQkJCQkJREVCVUcoMCwKKwkJCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydCBmYWlsZWRcbiIsCiAJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKIAkJCQkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnN0YXJ0X25ldDsKIAkJCQl9IGVsc2UgewotCQkJCQlERUJVRygwLAorCQkJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW4gZmFpbGVkXG4iLAogCQkJCQkgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7CiAJCQkJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKQEAgLTIwOTEsMTkgKzIwODAsMTkgQEAKIAkJY2FzZSBDQ1NfU1RBUlRfQVNTT0NJQVRJT046CiAJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CiAJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19DT01QTEVURTsKLQkJCQlERUJVRygwLCAicmF5X2NzIGFzc29jaWF0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBhc3NvY2lhdGlvbiBzdWNjZXNzZnVsXG4iKTsKIAkJCX0gZWxzZSB7Ci0JCQkJREVCVUcoMCwgInJheV9jcyBhc3NvY2lhdGlvbiBmYWlsZWQsXG4iKTsKKwkJCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgYXNzb2NpYXRpb24gZmFpbGVkLFxuIik7CiAJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7CiAJCQkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQ0NTX1RYX1JFUVVFU1Q6CiAJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCQkJREVCVUcoMywKKwkJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgdHggcmVxdWVzdCBjb21wbGV0ZVxuIik7CiAJCQl9IGVsc2UgewotCQkJCURFQlVHKDEsCisJCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgZmFpbGVkXG4iKTsKIAkJCX0KIAkJCWlmICghc25pZmZlcikKQEAgLTIxMTEsMjEgKzIxMDAsMjEgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIENDU19URVNUX01FTU9SWToKLQkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IG1lbSB0ZXN0IGRvbmVcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCBtZW0gdGVzdCBkb25lXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIENDU19TSFVURE9XTjoKLQkJCURFQlVHKDEsCisJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyByZXR1cm5lZCAtIFNodXRkb3duXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIENDU19EVU1QX01FTU9SWToKLQkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGR1bXAgbWVtb3J5IGRvbmVcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCBkdW1wIG1lbW9yeSBkb25lXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIENDU19TVEFSVF9USU1FUjoKLQkJCURFQlVHKDIsCisJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCiAJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBESU5HIC0gcmF5bGluayB0aW1lciBleHBpcmVkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVCVUcoMSwKKwkJCWRldl9kYmcoJmxpbmstPmRldiwKIAkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIDB4JXggcmV0dXJuZWQgMHgleFxuIiwKIAkJCSAgICAgIHJjc2luZGV4LCBjbWQpOwogCQl9CkBAIC0yMTM5LDcgKzIxMjgsNyBAQAogCQkJcmF5X3J4KGRldiwgbG9jYWwsIHByY3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVKT0lOX05FVF9DT01QTEVURToKLQkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJlam9pbiBuZXQgY29tcGxldGVcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCByZWpvaW4gbmV0IGNvbXBsZXRlXG4iKTsKIAkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOwogCQkJLyogZG8gd2UgbmVlZCB0byBjbGVhciB0eCBidWZmZXJzIENDUydzPyAqLwogCQkJaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgewpAQCAtMjE0OSw3ICsyMTM4LDcgQEAKIAkJCQltZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLAogCQkJCQkgICAgICBwcmNzLT52YXIucmVqb2luX25ldF9jb21wbGV0ZS4KIAkJCQkJICAgICAgYnNzaWQsIEFERFJMRU4pOwotCQkJCURFQlVHKDEsCisJCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJCSAgICAgICJyYXlfY3MgbmV3IEJTU0lEID0gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAogCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbMF0sIGxvY2FsLT5ic3NfaWRbMV0sCiAJCQkJICAgICAgbG9jYWwtPmJzc19pZFsyXSwgbG9jYWwtPmJzc19pZFszXSwKQEAgLTIxNTksMTUgKzIxNDgsMTUgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFJPQU1JTkdfSU5JVElBVEVEOgotCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcm9hbWluZyBpbml0aWF0ZWRcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCByb2FtaW5nIGluaXRpYXRlZFxuIik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKIAkJCWJyZWFrOwogCQljYXNlIEpBUEFOX0NBTExfU0lHTl9SWEQ6Ci0JCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGludGVycnVwdCBqYXBhbiBjYWxsIHNpZ24gcnhcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERUJVRygxLAorCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJICAgICAgInJheV9jcyBVbmV4cGVjdGVkIGludGVycnVwdCBmb3IgUkNTIDB4JXggY21kID0gMHgleFxuIiwKIAkJCSAgICAgIHJjc2luZGV4LAogCQkJICAgICAgKHVuc2lnbmVkIGludClyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSk7CkBAIC0yMTg2LDcgKzIxNzUsNyBAQAogCWludCByeF9sZW47CiAJdW5zaWduZWQgaW50IHBrdF9hZGRyOwogCXZvaWQgX19pb21lbSAqcG1zZzsKLQlERUJVRyg0LCAicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKKwlwcl9kZWJ1ZygicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKIAogCS8qIENhbGN1bGF0ZSBhZGRyZXNzIG9mIHBhY2tldCB3aXRoaW4gUnggYnVmZmVyICovCiAJcGt0X2FkZHIgPSAoKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQpAQCAtMjE5OSwyOCArMjE4OCwyOCBAQAogCXBtc2cgPSBsb2NhbC0+cm1lbSArIHBrdF9hZGRyOwogCXN3aXRjaCAocmVhZGIocG1zZykpIHsKIAljYXNlIERBVEFfVFlQRToKLQkJREVCVUcoNCwgInJheV9yeCBkYXRhIHR5cGVcbiIpOworCQlwcl9kZWJ1ZygicmF5X3J4IGRhdGEgdHlwZVxuIik7CiAJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBBVVRIRU5USUNfVFlQRToKLQkJREVCVUcoNCwgInJheV9yeCBhdXRoZW50aWMgdHlwZVxuIik7CisJCXByX2RlYnVnKCJyYXlfcnggYXV0aGVudGljIHR5cGVcbiIpOwogCQlpZiAoc25pZmZlcikKIAkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKIAkJZWxzZQogCQkJcnhfYXV0aGVudGljYXRlKGxvY2FsLCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBERUFVVEhFTlRJQ19UWVBFOgotCQlERUJVRyg0LCAicmF5X3J4IGRlYXV0aCB0eXBlXG4iKTsKKwkJcHJfZGVidWcoInJheV9yeCBkZWF1dGggdHlwZVxuIik7CiAJCWlmIChzbmlmZmVyKQogCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwogCQllbHNlCiAJCQlyeF9kZWF1dGhlbnRpY2F0ZShsb2NhbCwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CiAJCWJyZWFrOwogCWNhc2UgTlVMTF9NU0dfVFlQRToKLQkJREVCVUcoMywgInJheV9jcyByeCBOVUxMIG1zZ1xuIik7CisJCXByX2RlYnVnKCJyYXlfY3MgcnggTlVMTCBtc2dcbiIpOwogCQlicmVhazsKIAljYXNlIEJFQUNPTl9UWVBFOgotCQlERUJVRyg0LCAicmF5X3J4IGJlYWNvbiB0eXBlXG4iKTsKKwkJcHJfZGVidWcoInJheV9yeCBiZWFjb24gdHlwZVxuIik7CiAJCWlmIChzbmlmZmVyKQogCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwogCkBAIC0yMjMzLDcgKzIyMjIsNyBAQAogCQlyYXlfZ2V0X3N0YXRzKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFQlVHKDAsICJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsCisJCXByX2RlYnVnKCJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsCiAJCSAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIocG1zZykpOwogCQlicmVhazsKIAl9CkBAIC0yMjYyLDcgKzIyNTEsNyBAQAogCQkJICAgIHJ4X2xlbiA+CiAJCQkgICAgKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArCiAJCQkgICAgIEZDU19MRU4pKSB7Ci0JCQkJREVCVUcoMCwKKwkJCQlwcl9kZWJ1ZygKIAkJCQkgICAgICAicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIsCiAJCQkJICAgICAgcnhfbGVuKTsKIAkJCQlyZXR1cm47CkBAIC0yMjczLDE3ICsyMjYyLDE3IEBACiAJCQkgICAgcnhfbGVuID4KIAkJCSAgICAoZGV2LT5tdHUgKyBSWF9NQUNfSEVBREVSX0xFTkdUSCArIEVUSF9ITEVOICsKIAkJCSAgICAgRkNTX0xFTikpIHsKLQkJCQlERUJVRygwLAorCQkJCXByX2RlYnVnKAogCQkJCSAgICAgICJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIiwKIAkJCQkgICAgICByeF9sZW4pOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQogCX0KLQlERUJVRyg0LCAicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKKwlwcl9kZWJ1ZygicmF5X2NzIHJ4X2RhdGEgcGFja2V0XG4iKTsKIAkvKiBJZiBmcmFnbWVudGVkIHBhY2tldCwgdmVyaWZ5IHNpemVzIG9mIGZyYWdtZW50cyBhZGQgdXAgKi8KIAlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgewotCQlERUJVRygxLCAicmF5X2NzIHJ4J2VkIGZyYWdtZW50XG4iKTsKKwkJcHJfZGVidWcoInJheV9jcyByeCdlZCBmcmFnbWVudFxuIik7CiAJCXRtcCA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFswXSkgPDwgOCkKIAkJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMV0pOwogCQl0b3RhbF9sZW4gPSB0bXA7CkBAIC0yMzAxLDcgKzIyOTAsNyBAQAogCQl9IHdoaWxlICgxKTsKIAogCQlpZiAodG1wIDwgMCkgewotCQkJREVCVUcoMCwKKwkJCXByX2RlYnVnKAogCQkJICAgICAgInJheV9jcyByeF9kYXRhIGZyYWdtZW50IGxlbmd0aHMgZG9uJ3QgYWRkIHVwXG4iKTsKIAkJCWxvY2FsLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwpAQCAtMjMxMyw3ICsyMzAyLDcgQEAKIAogCXNrYiA9IGRldl9hbGxvY19za2IodG90YWxfbGVuICsgNSk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCURFQlVHKDAsICJyYXlfY3MgcnhfZGF0YSBjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKKwkJcHJfZGVidWcoInJheV9jcyByeF9kYXRhIGNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOwogCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikKIAkJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CkBAIC0yMzIxLDcgKzIzMTAsNyBAQAogCX0KIAlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiBBbGlnbiBJUCBvbiAxNiBieXRlIChUQkQgY2hlY2sgdGhpcykgKi8KIAotCURFQlVHKDQsICJyYXlfY3MgcnhfZGF0YSB0b3RhbF9sZW4gPSAleCwgcnhfbGVuID0gJXhcbiIsIHRvdGFsX2xlbiwKKwlwcl9kZWJ1ZygicmF5X2NzIHJ4X2RhdGEgdG90YWxfbGVuID0gJXgsIHJ4X2xlbiA9ICV4XG4iLCB0b3RhbF9sZW4sCiAJICAgICAgcnhfbGVuKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNTQsNyArMjM0Myw3IEBACiAJdG1wID0gMTc7CiAJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKIAkJcHJjc2xpbmsgPSBwcmNzOwotCQlERUJVRygxLCAicmF5X2NzIHJ4X2RhdGEgaW4gZnJhZ21lbnQgbG9vcFxuIik7CisJCXByX2RlYnVnKCJyYXlfY3MgcnhfZGF0YSBpbiBmcmFnbWVudCBsb29wXG4iKTsKIAkJZG8gewogCQkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKIAkJCSAgICArCkBAIC0yNDI2LDggKzI0MTUsOCBAQAogCW1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7CiAJbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi0JaWYgKHBjX2RlYnVnID4gMykgeworI2lmIDAKKwlpZiB7CiAJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJza2ItPmRhdGEgYmVmb3JlIHVudHJhbnNsYXRlOiAiLAogCQkJICAgICAgIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAogCQkJICAgICAgIHNrYi0+ZGF0YSwgNjQsIHRydWUpOwpAQCAtMjQ0MSw3ICsyNDMwLDcgQEAKIAogCWlmIChwc25hcC0+ZHNhcCAhPSAweGFhIHx8IHBzbmFwLT5zc2FwICE9IDB4YWEgfHwgcHNuYXAtPmN0cmwgIT0gMykgewogCQkvKiBub3QgYSBzbmFwIHR5cGUgc28gbGVhdmUgaXQgYWxvbmUgKi8KLQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJcHJfZGVidWcoInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJICAgICAgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCk7CiAKIAkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwpAQCAtMjQ1MCw3ICsyNDM5LDcgQEAKIAl9IGVsc2UgeyAvKiBJdHMgYSBTTkFQICovCiAJCWlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnX2JyaWRnZSwgMykgPT0gMCkgewogCQkvKiBFdGhlcklJIGFuZCBudWtlIHRoZSBMTEMgKi8KLQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKKwkJCXByX2RlYnVnKCJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKIAkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEgKIAkJCSAgICArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwogCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKQEAgLTI0NTksMTQgKzI0NDgsMTQgQEAKIAkJCXN3aXRjaCAobnRvaHModHlwZSkpIHsKIAkJCWNhc2UgRVRIX1BfSVBYOgogCQkJY2FzZSBFVEhfUF9BQVJQOgotCQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIElQWC9BQVJQXG4iKTsKKwkJCQlwcl9kZWJ1ZygicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBJUFgvQUFSUFxuIik7CiAJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwogCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CiAJCQkJcGV0aC0+aF9wcm90byA9CiAJCQkJICAgIGh0b25zKGxlbiAtIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7CisJCQkJcHJfZGVidWcoInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7CiAJCQkJZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCArCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwogCQkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CkBAIC0yNDgyLDEyICsyNDcxLDEyIEBACiAJfQogLyogVEJEIHJlc2VydmUgIHNrYl9yZXNlcnZlKHNrYiwgZGVsdGEpOyAqLwogCXNrYl9wdWxsKHNrYiwgZGVsdGEpOwotCURFQlVHKDMsICJ1bnRyYW5zbGF0ZSBhZnRlciBza2JfcHVsbCglZCksIHNrYi0+ZGF0YSA9ICVwXG4iLCBkZWx0YSwKKwlwcl9kZWJ1ZygidW50cmFuc2xhdGUgYWZ0ZXIgc2tiX3B1bGwoJWQpLCBza2ItPmRhdGEgPSAlcFxuIiwgZGVsdGEsCiAJICAgICAgc2tiLT5kYXRhKTsKIAltZW1jcHkocGV0aC0+aF9kZXN0LCBkZXN0YWRkciwgQUREUkxFTik7CiAJbWVtY3B5KHBldGgtPmhfc291cmNlLCBzcmNhZGRyLCBBRERSTEVOKTsKLSNpZmRlZiBQQ01DSUFfREVCVUcKLQlpZiAocGNfZGVidWcgPiAzKSB7CisjaWYgMAorCXsKIAkJaW50IGk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJza2ItPmRhdGEgYWZ0ZXIgdW50cmFuc2xhdGU6Iik7CiAJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQpAQCAtMjUyOSw3ICsyNTE4LDcgQEAKIAl3aGlsZSAodG1wLS0pIHsKIAkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3NsaW5rLT5idWZmZXJfc3RhdHVzKTsKIAkJaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpIHsKLQkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIsCisJCQlwcl9kZWJ1ZygicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLAogCQkJICAgICAgcmNzaW5kZXgpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1NDMsOSArMjUzMiw5IEBACiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0JREVCVUcoMCwgInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOwogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjU3MywxMSArMjU2MiwxMSBAQAogCWNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CiAJLyogaWYgd2UgYXJlIHRyeWluZyB0byBnZXQgYXV0aGVudGljYXRlZCAqLwogCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKLQkJREVCVUcoMSwgInJheV9jcyByeF9hdXRoIHZhcj0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCXByX2RlYnVnKCJyYXlfY3MgcnhfYXV0aCB2YXI9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkgICAgICBtc2ctPnZhclswXSwgbXNnLT52YXJbMV0sIG1zZy0+dmFyWzJdLCBtc2ctPnZhclszXSwKIAkJICAgICAgbXNnLT52YXJbNF0sIG1zZy0+dmFyWzVdKTsKIAkJaWYgKG1zZy0+dmFyWzJdID09IDEpIHsKLQkJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXNwb25zZS5cbiIpOworCQkJcHJfZGVidWcoInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLlxuIik7CiAJCQlpZiAoIWJ1aWxkX2F1dGhfZnJhbWUKIAkJCSAgICAobG9jYWwsIG1zZy0+bWFjLmFkZHJfMiwgT1BFTl9BVVRIX1JFU1BPTlNFKSkgewogCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IE5FRURfVE9fQVVUSDsKQEAgLTI1OTEsMTMgKzI1ODAsMTMgQEAKIAkJCS8qIFZlcmlmeSBhdXRoZW50aWNhdGlvbiBzZXF1ZW5jZSAjMiBhbmQgc3VjY2VzcyAqLwogCQkJaWYgKG1zZy0+dmFyWzJdID09IDIpIHsKIAkJCQlpZiAoKG1zZy0+dmFyWzNdIHwgbXNnLT52YXJbNF0pID09IDApIHsKLQkJCQkJREVCVUcoMSwgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworCQkJCQlwcl9kZWJ1ZygiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bFxuIik7CiAJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9DT01QTEVURTsKIAkJCQkJYXNzb2NpYXRlKGxvY2FsKTsKIAkJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0KIAkJCQkJICAgIEFVVEhFTlRJQ0FURUQ7CiAJCQkJfSBlbHNlIHsKLQkJCQkJREVCVUcoMCwgIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWRcbiIpOworCQkJCQlwcl9kZWJ1ZygiQXV0aGVudGljYXRpb24gcmVmdXNlZFxuIik7CiAJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9SRUZVU0VEOwogCQkJCQlqb2luX25ldCgodV9sb25nKSBsb2NhbCk7CiAJCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9CkBAIC0yNjE3LDIyICsyNjA2LDIyIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJaW50IGNjc2luZGV4OwogCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLQkJREVCVUcoMiwgInJheV9jcyBhc3NvY2lhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfY3MgYXNzb2NpYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBJZiBubyB0eCBidWZmZXJzIGF2YWlsYWJsZSwgcmV0dXJuICovCiAJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgewogLyogVEJEIHNob3VsZCBuZXZlciBiZSBoZXJlIGJ1dC4uLiB3aGF0IGlmIHdlIGFyZT8gKi8KLQkJREVCVUcoMSwgInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7CisJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7CiAJCXJldHVybjsKIAl9Ci0JREVCVUcoMSwgInJheV9jcyBTdGFydGluZyBhc3NvY2lhdGlvbiB3aXRoIGFjY2VzcyBwb2ludFxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIFN0YXJ0aW5nIGFzc29jaWF0aW9uIHdpdGggYWNjZXNzIHBvaW50XG4iKTsKIAlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CiAJLyogZmlsbCBpbiB0aGUgQ0NTICovCiAJd3JpdGViKENDU19TVEFSVF9BU1NPQ0lBVElPTiwgJnBjY3MtPmNtZCk7CiAJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCiAJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotCQlERUJVRygxLCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKIAkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKIAogCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CkBAIC0yNjU1LDcgKzI2NDQsNyBAQAogLyogIFVDSEFSIGJ1ZmZbMjU2XTsKICAgICBzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7CiAqLwotCURFQlVHKDAsICJEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIHJlY2VpdmVkXG4iKTsKKwlwcl9kZWJ1ZygiRGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZFxuIik7CiAJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOwogCS8qIE5lZWQgdG8gcmVhdXRoZW50aWNhdGUgb3IgcmVqb2luIGRlcGVuZGluZyBvbiByZWFzb24gY29kZSAqLwogLyogIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CkBAIC0yODIzLDcgKzI4MTIsNyBAQAogCiAJLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLwogCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSA8IDApIHsKLQkJREVCVUcoMSwgInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJcHJfZGVidWcoInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjg1NSw3ICsyODQ0LDcgQEAKIAogCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwogCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLQkJREVCVUcoMSwKKwkJcHJfZGVidWcoCiAJCSAgICAgICJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwogCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwogCQlyZXR1cm4gLTE7CkBAIC0yODc5LDcgKzI4NjgsNyBAQAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX2Vzc2lkWzMzXTsKLQlpbnQgbGVuID0gY291bnQ7CisJdW5zaWduZWQgaW50IGxlbiA9IGNvdW50OwogCiAJaWYgKGxlbiA+IDMyKQogCQlsZW4gPSAzMjsKQEAgLTI5NDIsOSArMjkzMSw5IEBACiB7CiAJaW50IHJjOwogCi0JREVCVUcoMSwgIiVzXG4iLCByY3NpZCk7CisJcHJfZGVidWcoIiVzXG4iLCByY3NpZCk7CiAJcmMgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZyYXlfZHJpdmVyKTsKLQlERUJVRygxLCAicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIiwKKwlwcl9kZWJ1ZygicmF5bGluayBpbml0X21vZHVsZSByZWdpc3Rlcl9wY21jaWFfZHJpdmVyIHJldHVybnMgMHgleFxuIiwKIAkgICAgICByYyk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMjk2NCw3ICsyOTUzLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmF5X2NzKHZvaWQpCiB7Ci0JREVCVUcoMCwgInJheV9jczogY2xlYW51cF9tb2R1bGVcbiIpOworCXByX2RlYnVnKCJyYXlfY3M6IGNsZWFudXBfbW9kdWxlXG4iKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYTA4NDA3Ny4uOWZlNzcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtMTk5NCw3ICsxOTk0LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfQldfV0lOX1NJWkUsIHR4ZGVzYy0+YmFfc2l6ZSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1dJUkVMRVNTX0NMSV9JRCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncykgPwotCQkJICAgICAgIChza2JkZXNjLT5lbnRyeS0+ZW50cnlfaWR4ICsgMSkgOiAweGZmKTsKKwkJCSAgIHR4ZGVzYy0+a2V5X2lkeCA6IDB4ZmYpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9NUERVX1RPVEFMX0JZVEVfQ09VTlQsCiAJCQkgICBza2ItPmxlbiAtIHR4ZGVzYy0+bDJwYWQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9QQUNLRVRJRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA3MTc2MWIzLi43M2JiZWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC04MTUsNiArODE1LDggQEAKIAogCW11dGV4X2luaXQoJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAorCXNldF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwogCS8qCiAJICogTWFrZSByb29tIGZvciBydDJ4MDBfaW50ZiBpbnNpZGUgdGhlIHBlci1pbnRlcmZhY2UKIAkgKiBzdHJ1Y3R1cmUgaWVlZTgwMjExX3ZpZi4KQEAgLTg3MSw4ICs4NzMsNiBAQAogCXJ0MngwMGxlZHNfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwogCi0Jc2V0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwppbmRleCBjNjRkYjBiLi5jNzA4ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTM2Miw4ICszNjIsOSBAQAogCiAJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAotCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5odywKLQkJCQkgICAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC00NjksOCArNDcwLDEwIEBACiAJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCiAJICovCiAJbGluay0+Y291bnQrKzsKLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCi0JCQkJICAgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKKworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IDUwMTU0NDguLmYwMmI0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTQ3LDYgKzQ3LDggQEAKIAkgICAgKHJlcXVlc3R0eXBlID09IFVTQl9WRU5ET1JfUkVRVUVTVF9JTikgPwogCSAgICB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUodXNiX2RldiwgMCk7CiAKKwlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJldHVybiAtRU5PREVWOwogCiAJZm9yIChpID0gMDsgaSA8IFJFR0lTVEVSX0JVU1lfQ09VTlQ7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsCkBAIC02MCw4ICs2MiwxMCBAQAogCQkgKiAtRU5PREVWOiBEZXZpY2UgaGFzIGRpc2FwcGVhcmVkLCBubyBwb2ludCBjb250aW51aW5nLgogCQkgKiBBbGwgb3RoZXIgZXJyb3JzOiBUcnkgYWdhaW4uCiAJCSAqLwotCQllbHNlIGlmIChzdGF0dXMgPT0gLUVOT0RFVikKKwkJZWxzZSBpZiAoc3RhdHVzID09IC1FTk9ERVYpIHsKKwkJCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlFUlJPUihydDJ4MDBkZXYsCkBAIC0xNjEsNiArMTY1LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CiAJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2xvY2socnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAJCWlmICghcnQyeDAwX2dldF9maWVsZDMyKCpyZWcsIGZpZWxkKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGI4ZjVlZTMuLjE0ZTdiYjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTIzODksMTAgKzIzODksMTMgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogTVNJICovCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg0NjAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NzcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg3NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHhhODYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NzQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIE92aXNsaW5rICovCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHg3MzE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBSYWxpbmsgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCkBAIC0yNDIwLDYgKzI0MjMsOCBAQAogCS8qIFBsYW5leCAqLwogCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwkvKiBXaWRlVGVsbCAqLworCXsgVVNCX0RFVklDRSgweDcxNjcsIDB4Mzg0MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogWmNvbSAqLwogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAxYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogWnlYRUwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmluZGV4IGExYzY3MGYuLmNmOGE0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwpAQCAtMjEwLDEwICsyMTAsMTAgQEAKIAogCS8qIHR1cm4gdGhlIExFRCBvZmYgYmVmb3JlIGV4aXRpbmcgKi8KIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGRldiwgJnByaXYtPmxlZF9vZmYsIDApOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwogCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF9yeCk7CiAJcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3R4KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF9vZmYpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29uKTsKIH0KICNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuYwppbmRleCA5ZmFiMTNlLi5jYWQ4MDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJydGw4MTg3LmgiCisjaW5jbHVkZSAicnRsODE4N19yZmtpbGwuaCIKIAogc3RhdGljIGJvb2wgcnRsODE4N19pc19yYWRpb19lbmFibGVkKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKaW5kZXggNDMxYTIwZS4uMzM5MThmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwpAQCAtMzY1NiwxMCArMzY1Niw3IEBACiAKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgaWYgKGkgIT0gMCkKLSAgICB7Ci0gICAgICBjc19lcnJvcihsaW5rLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGkpOwogICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KICAgICAgIAogI2lmZGVmIERFQlVHX0NPTkZJR19JTkZPCiAgIHByaW50ayhLRVJOX0RFQlVHICIlczogd2F2ZWxhbl9wY21jaWFfcmVzZXQoKTogQ29uZmlnIHJlZyBpcyAweCV4XG4iLApAQCAtMzY3MCwxOSArMzY2NywxMyBAQAogICByZWcuVmFsdWUgPSByZWcuVmFsdWUgfCBDT1JfU1dfUkVTRVQ7CiAgIGkgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CiAgIGlmIChpICE9IDApCi0gICAgewotICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9CiAgICAgICAKICAgcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogICByZWcuVmFsdWUgPSBDT1JfTEVWRUxfSVJRIHwgQ09SX0NPTkZJRzsKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKICAgaWYgKGkgIT0gMCkKLSAgICB7Ci0gICAgICBjc19lcnJvcihsaW5rLCBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGkpOwogICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KIAogI2lmZGVmIERFQlVHX0NPTkZJR19UUkFDRQogICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtd3ZfcGNtY2lhX3Jlc2V0KClcbiIsIGRldi0+bmFtZSk7CkBAIC0zODU3LDEwICszODQ4LDcgQEAKICAgICB7CiAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAgIGlmIChpICE9IDApCi0JewotCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkgIGJyZWFrOwotCX0KIAogICAgICAgLyoKICAgICAgICAqIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CkBAIC0zODY4LDEwICszODU2LDcgQEAKICAgICAgICAqLwogICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKICAgICAgIGlmIChpICE9IDApCi0JewotCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJICBicmVhazsKLQl9CiAKICAgICAgIC8qCiAgICAgICAgKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cApAQCAtMzg4MCwxMCArMzg2NSw3IEBACiAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKICAgICAgIGlmIChpICE9IDApCi0JewotCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCSAgYnJlYWs7Ci0JfQogCiAgICAgICAvKgogICAgICAgICogQWxsb2NhdGUgYSBzbWFsbCBtZW1vcnkgd2luZG93LiAgTm90ZSB0aGF0IHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZQpAQCAtMzg5NCwyNCArMzg3NiwxOCBAQAogICAgICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84fFdJTl9NRU1PUllfVFlQRV9BTXxXSU5fRU5BQkxFOwogICAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7Ci0gICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKKyAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3cobGluaywgJnJlcSwgJmxpbmstPndpbik7CiAgICAgICBpZiAoaSAhPSAwKQotCXsKLQkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGkpOwogCSAgYnJlYWs7Ci0JfQogCiAgICAgICBscC0+bWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgICAgZGV2LT5tZW1fc3RhcnQgPSAodV9sb25nKWxwLT5tZW07CiAgICAgICBkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIHJlcS5TaXplOwogCiAgICAgICBtZW0uQ2FyZE9mZnNldCA9IDA7IG1lbS5QYWdlID0gMDsKLSAgICAgIGkgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSk7CisgICAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwogICAgICAgaWYgKGkgIT0gMCkKLQl7Ci0JICBjc19lcnJvcihsaW5rLCBNYXBNZW1QYWdlLCBpKTsKIAkgIGJyZWFrOwotCX0KIAogICAgICAgLyogRmVlZCBkZXZpY2Ugd2l0aCB0aGlzIGluZm8uLi4gKi8KICAgICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwpAQCAtMzkyMyw3ICszODk5LDcgQEAKIAkgICAgIGxwLT5tZW0sIGRldi0+aXJxLCAodV9pbnQpIGRldi0+YmFzZV9hZGRyKTsKICNlbmRpZgogCi0gICAgICBTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKyAgICAgIFNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7CiAgICAgICBpID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgICAgICBpZihpICE9IDApCiAJewpAQCAtNDQ2Miw4ICs0NDM4LDcgQEAKICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gMzsKIAogICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgcF9kZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworICBwX2Rldi0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgIHBfZGV2LT5pcnEuSGFuZGxlciA9IHdhdmVsYW5faW50ZXJydXB0OwogCiAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KQEAgLTQ0NzUsNyArNDQ1MCw3IEBACiAgIGlmICghZGV2KQogICAgICAgcmV0dXJuIC1FTk9NRU07CiAKLSAgcF9kZXYtPnByaXYgPSBwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OworICBwX2Rldi0+cHJpdiA9IGRldjsKIAogICBscCA9IG5ldGRldl9wcml2KGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggNGYxZTBjZi4uNWYwNDAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTY3LDIzICs2Nyw3IEBACiAvKiBGb3Igcm91Z2ggY29uc3RhbnQgZGVsYXkgKi8KICNkZWZpbmUgV0wzNTAxX05PUExPT1AobikgeyBpbnQgeCA9IDA7IHdoaWxlICh4KysgPCBuKSBzbG93X2Rvd25faW8oKTsgfQogCi0vKgotICogQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYgeW91IGRvIG5vdAotICogZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlIGxlZnQgb3V0LiAgSWYgeW91Ci0gKiBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0KLSAqIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYyBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEKLSAqICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgotICovCi0jZGVmaW5lIFBDTUNJQV9ERUJVRyAwCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotI2RlZmluZSBkcHJpbnRrKG4sIGZvcm1hdCwgYXJncy4uLikgXAotCXsgaWYgKHBjX2RlYnVnID4gKG4pKSBcCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCAiXG4iLCBfX2Z1bmNfXyAsICMjYXJncyk7IH0KLSNlbHNlCi0jZGVmaW5lIGRwcmludGsobiwgZm9ybWF0LCBhcmdzLi4uKQotI2VuZGlmCisKIAogI2RlZmluZSB3bDM1MDFfb3V0YihhLCBiKSB7IG91dGIoYSwgYik7IHNsb3dfZG93bl9pbygpOyB9CiAjZGVmaW5lIHdsMzUwMV9vdXRiX3AoYSwgYikgeyBvdXRiX3AoYSwgYik7IHNsb3dfZG93bl9pbygpOyB9CkBAIC02ODQsMTAgKzY2OCwxMCBAQAogCWludCBtYXRjaGZsYWcgPSAwOwogCXN0cnVjdCB3bDM1MDFfc2Nhbl9jb25maXJtIHNpZzsKIAotCWRwcmludGsoMywgImVudHJ5Iik7CisJcHJfZGVidWcoImVudHJ5Iik7CiAJd2wzNTAxX2dldF9mcm9tX3dsYSh0aGlzLCBhZGRyLCAmc2lnLCBzaXplb2Yoc2lnKSk7CiAJaWYgKHNpZy5zdGF0dXMgPT0gV0wzNTAxX1NUQVRVU19TVUNDRVNTKSB7Ci0JCWRwcmludGsoMywgInN1Y2Nlc3MiKTsKKwkJcHJfZGVidWcoInN1Y2Nlc3MiKTsKIAkJaWYgKCh0aGlzLT5uZXRfdHlwZSA9PSBJV19NT0RFX0lORlJBICYmCiAJCSAgICAgKHNpZy5jYXBfaW5mbyAmIFdMMzUwMV9NR01UX0NBUEFCSUxJVFlfRVNTKSkgfHwKIAkJICAgICh0aGlzLT5uZXRfdHlwZSA9PSBJV19NT0RFX0FESE9DICYmCkBAIC03MjIsNyArNzA2LDcgQEAKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAoc2lnLnN0YXR1cyA9PSBXTDM1MDFfU1RBVFVTX1RJTUVPVVQpIHsKLQkJZHByaW50aygzLCAidGltZW91dCIpOworCQlwcl9kZWJ1ZygidGltZW91dCIpOwogCQl0aGlzLT5qb2luX3N0YV9ic3MgPSAwOwogCQlmb3IgKGkgPSB0aGlzLT5qb2luX3N0YV9ic3M7IGkgPCB0aGlzLT5ic3NfY250OyBpKyspCiAJCQlpZiAoIXdsMzUwMV9tZ210X2pvaW4odGhpcywgaSkpCkBAIC04NzksNyArODYzLDcgQEAKIAkJLnRpbWVvdXQgPSAxMDAwLAogCX07CiAKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCW1lbWNweShzaWcubWFjX2FkZHIsIHRoaXMtPmJzc2lkLCBFVEhfQUxFTik7CiAJcmV0dXJuIHdsMzUwMV9lc2JxX2V4ZWModGhpcywgJnNpZywgc2l6ZW9mKHNpZykpOwogfQpAQCAtODkzLDcgKzg3Nyw3IEBACiAJCS5jYXBfaW5mbwkgPSB0aGlzLT5jYXBfaW5mbywKIAl9OwogCi0JZHByaW50aygzLCAiZW50cnkiKTsKKwlwcl9kZWJ1ZygiZW50cnkiKTsKIAltZW1jcHkoc2lnLm1hY19hZGRyLCB0aGlzLT5ic3NpZCwgRVRIX0FMRU4pOwogCXJldHVybiB3bDM1MDFfZXNicV9leGVjKHRoaXMsICZzaWcsIHNpemVvZihzaWcpKTsKIH0KQEAgLTkwMyw3ICs4ODcsNyBAQAogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHdsMzUwMV9qb2luX2NvbmZpcm0gc2lnOwogCi0JZHByaW50aygzLCAiZW50cnkiKTsKKwlwcl9kZWJ1ZygiZW50cnkiKTsKIAl3bDM1MDFfZ2V0X2Zyb21fd2xhKHRoaXMsIGFkZHIsICZzaWcsIHNpemVvZihzaWcpKTsKIAlpZiAoc2lnLnN0YXR1cyA9PSBXTDM1MDFfU1RBVFVTX1NVQ0NFU1MpIHsKIAkJaWYgKHRoaXMtPm5ldF90eXBlID09IElXX01PREVfSU5GUkEpIHsKQEAgLTk2Miw3ICs5NDYsNyBAQAogewogCXN0cnVjdCB3bDM1MDFfbWRfY29uZmlybSBzaWc7CiAKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwogCXdsMzUwMV9mcmVlX3R4X2J1ZmZlcih0aGlzLCBzaWcuZGF0YSk7CiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKQEAgLTEwMTcsNyArMTAwMSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgd2wzNTAxX2dldF9jb25maXJtX2ludGVycnVwdChzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMsCiAJCQkJCQl1MTYgYWRkciwgdm9pZCAqc2lnLCBpbnQgc2l6ZSkKIHsKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnRoaXMtPnNpZ19nZXRfY29uZmlybSwKIAkJCSAgICBzaXplb2YodGhpcy0+c2lnX2dldF9jb25maXJtKSk7CiAJd2FrZV91cCgmdGhpcy0+d2FpdCk7CkBAIC0xMDI5LDcgKzEwMTMsNyBAQAogewogCXN0cnVjdCB3bDM1MDFfc3RhcnRfY29uZmlybSBzaWc7CiAKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwogCWlmIChzaWcuc3RhdHVzID09IFdMMzUwMV9TVEFUVVNfU1VDQ0VTUykKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMTA0MSw3ICsxMDI1LDcgQEAKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB3bDM1MDFfYXNzb2NfY29uZmlybSBzaWc7CiAKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwogCiAJaWYgKHNpZy5zdGF0dXMgPT0gV0wzNTAxX1NUQVRVU19TVUNDRVNTKQpAQCAtMTA1Myw3ICsxMDM3LDcgQEAKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2F1dGhfY29uZmlybSBzaWc7CiAKLQlkcHJpbnRrKDMsICJlbnRyeSIpOworCXByX2RlYnVnKCJlbnRyeSIpOwogCXdsMzUwMV9nZXRfZnJvbV93bGEodGhpcywgYWRkciwgJnNpZywgc2l6ZW9mKHNpZykpOwogCiAJaWYgKHNpZy5zdGF0dXMgPT0gV0wzNTAxX1NUQVRVU19TVUNDRVNTKQpAQCAtMTA2OSw3ICsxMDUzLDcgQEAKIAl1OCBzaWdfaWQ7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWRwcmludGsoMywgImVudHJ5Iik7CisJcHJfZGVidWcoImVudHJ5Iik7CiBsb29wOgogCW1vcmVwa3RzID0gMDsKIAlpZiAoIXdsMzUwMV9lc2JxX2NvbmZpcm0odGhpcykpCkBAIC0xMzAyLDcgKzEyODYsNyBAQAogCXdsMzUwMV9hY2tfaW50ZXJydXB0KHRoaXMpOwogCXdsMzUwMV91bmJsb2NrX2ludGVycnVwdCh0aGlzKTsKIAl3bDM1MDFfbWdtdF9zY2FuKHRoaXMsIDEwMCk7Ci0JZHByaW50aygxLCAiJXM6IGRldmljZSByZXNldCIsIGRldi0+bmFtZSk7CisJcHJfZGVidWcoIiVzOiBkZXZpY2UgcmVzZXQiLCBkZXYtPm5hbWUpOwogCXJjID0gMDsKIG91dDoKIAlyZXR1cm4gcmM7CkBAIC0xMzc2LDcgKzEzNjAsNyBAQAogCWxpbmstPm9wZW4rKzsKIAogCS8qIEluaXRpYWwgV0wzNTAxIGZpcm13YXJlICovCi0JZHByaW50aygxLCAiJXM6IEluaXRpYWxpemUgV0wzNTAxIGZpcm13YXJlLi4uIiwgZGV2LT5uYW1lKTsKKwlwcl9kZWJ1ZygiJXM6IEluaXRpYWxpemUgV0wzNTAxIGZpcm13YXJlLi4uIiwgZGV2LT5uYW1lKTsKIAlpZiAod2wzNTAxX2luaXRfZmlybXdhcmUodGhpcykpCiAJCWdvdG8gZmFpbDsKIAkvKiBJbml0aWFsIGRldmljZSB2YXJpYWJsZXMgKi8KQEAgLTEzODgsNyArMTM3Miw3IEBACiAJd2wzNTAxX3VuYmxvY2tfaW50ZXJydXB0KHRoaXMpOwogCXdsMzUwMV9tZ210X3NjYW4odGhpcywgMTAwKTsKIAlyYyA9IDA7Ci0JZHByaW50aygxLCAiJXM6IFdMMzUwMSBvcGVuZWQiLCBkZXYtPm5hbWUpOworCXByX2RlYnVnKCIlczogV0wzNTAxIG9wZW5lZCIsIGRldi0+bmFtZSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhcmQgTmFtZTogJXNcbiIKIAkJCSAiJXM6IEZpcm13YXJlIERhdGU6ICVzXG4iLAogCQkJIGRldi0+bmFtZSwgdGhpcy0+Y2FyZF9uYW1lLApAQCAtMTkxNCw4ICsxODk4LDcgQEAKIAlwX2Rldi0+aW8uSU9BZGRyTGluZXMJPSA1OwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JcF9kZXYtPmlycS5BdHRyaWJ1dGVzCT0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwotCXBfZGV2LT5pcnEuSVJRSW5mbzEJPSBJUlFfTEVWRUxfSUQ7CisJcF9kZXYtPmlycS5BdHRyaWJ1dGVzCT0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCXBfZGV2LT5pcnEuSGFuZGxlciA9IHdsMzUwMV9pbnRlcnJ1cHQ7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCkBAIC0xOTM4LDE2ICsxOTIxLDEzIEBACiAJZGV2LT53aXJlbGVzc19oYW5kbGVycwk9ICZ3bDM1MDFfaGFuZGxlcl9kZWY7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXBfZGV2LT5wcml2ID0gcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKKwlwX2Rldi0+cHJpdiA9IGRldjsKIAogCXJldHVybiB3bDM1MDFfY29uZmlnKHBfZGV2KTsKIG91dF9saW5rOgogCXJldHVybiAtRU5PTUVNOwogfQogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIC8qKgogICogd2wzNTAxX2NvbmZpZyAtIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCBhbmQgbWFrZSBldGggZGV2aWNlIGF2YWlsYWJsZQogICogQGxpbmsgLSBGSUxMX0lOCkBAIC0xOTU5LDcgKzE5MzksNyBAQAogc3RhdGljIGludCB3bDM1MDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCWludCBpID0gMCwgaiwgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IGkgPSAwLCBqLCByZXQ7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzOwogCiAJLyogVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4gIElmIHlvdQpAQCAtMTk3NSwyNCArMTk1NSwyNiBAQAogCQlpZiAoaSA9PSAwKQogCQkJYnJlYWs7CiAJfQotCWlmIChpICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAkvKiBOb3cgYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5CiAJICogYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LiAqLwogCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cCB0aGUgSS9PCiAJICogd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLiAgKi8KIAotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIndsMzUwMV9jczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0yMDQxLDggKzIwMjMsNiBAQAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJd2wzNTAxX3JlbGVhc2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggYTAzODRiNi4uYjQyMzQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtMTY5LDcgKzE2OSw2IEBACiBzdGF0aWMgaW50IHpuZXRfcmVxdWVzdF9yZXNvdXJjZXMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpuZXRfcHJpdmF0ZSAqem5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChyZXF1ZXN0X2lycSAoZGV2LT5pcnEsICZ6bmV0X2ludGVycnVwdCwgMCwgIlpOZXQiLCBkZXYpKQogCQlnb3RvIGZhaWxlZDsKQEAgLTE4NywxMyArMTg2LDkgQEAKICBmcmVlX3NpYToKIAlyZWxlYXNlX3JlZ2lvbiAoem5ldC0+c2lhX2Jhc2UsIHpuZXQtPnNpYV9zaXplKTsKICBmcmVlX3R4X2RtYToKLQlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CiAJZnJlZV9kbWEgKHpuZXQtPnR4X2RtYSk7Ci0JcmVsZWFzZV9kbWFfbG9jayAoZmxhZ3MpOwogIGZyZWVfcnhfZG1hOgotCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKIAlmcmVlX2RtYSAoem5ldC0+cnhfZG1hKTsKLQlyZWxlYXNlX2RtYV9sb2NrIChmbGFncyk7CiAgZnJlZV9pcnE6CiAJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwogIGZhaWxlZDoKQEAgLTIwMywxNCArMTk4LDExIEBACiBzdGF0aWMgdm9pZCB6bmV0X3JlbGVhc2VfcmVzb3VyY2VzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB6bmV0X3ByaXZhdGUgKnpuZXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyZWxlYXNlX3JlZ2lvbiAoem5ldC0+c2lhX2Jhc2UsIHpuZXQtPnNpYV9zaXplKTsKIAlyZWxlYXNlX3JlZ2lvbiAoZGV2LT5iYXNlX2FkZHIsIHpuZXQtPmlvX3NpemUpOwotCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKIAlmcmVlX2RtYSAoem5ldC0+dHhfZG1hKTsKIAlmcmVlX2RtYSAoem5ldC0+cnhfZG1hKTsKLQlyZWxlYXNlX2RtYV9sb2NrIChmbGFncyk7CiAJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21kaW8uYyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCmluZGV4IGJhY2FhNTMuLjRiMjJiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCkBAIC05Nyw2ICs5NywxMiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3JlZ2lzdGVyKTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIGZvciBvZl9waHlfZmluZF9kZXZpY2UgKi8KK3N0YXRpYyBpbnQgb2ZfcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQoreworCXJldHVybiBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpID09IHBoeV9ucDsKK30KKwogLyoqCiAgKiBvZl9waHlfZmluZF9kZXZpY2UgLSBHaXZlIGEgUEhZIG5vZGUsIGZpbmQgdGhlIHBoeV9kZXZpY2UKICAqIEBwaHlfbnA6IFBvaW50ZXIgdG8gdGhlIHBoeSdzIGRldmljZSB0cmVlIG5vZGUKQEAgLTEwNiwxNSArMTEyLDEwIEBACiBzdHJ1Y3QgcGh5X2RldmljZSAqb2ZfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25wKQogewogCXN0cnVjdCBkZXZpY2UgKmQ7Ci0JaW50IG1hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcGh5X25wKQotCXsKLQkJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOwotCX0KLQogCWlmICghcGh5X25wKQogCQlyZXR1cm4gTlVMTDsKIAotCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgbWF0Y2gpOworCWQgPSBidXNfZmluZF9kZXZpY2UoJm1kaW9fYnVzX3R5cGUsIE5VTEwsIHBoeV9ucCwgb2ZfcGh5X21hdGNoKTsKIAlyZXR1cm4gZCA/IHRvX3BoeV9kZXZpY2UoZCkgOiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChvZl9waHlfZmluZF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKaW5kZXggMmI3YWUzNi4uNWRmNjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCkBAIC0zNSwxMiArMzUsMjMgQEAKIC8qIGF0b21pY190IGJlY2F1c2Ugd2FpdF9ldmVudCBjaGVja3MgaXQgb3V0c2lkZSBvZiBidWZmZXJfbXV0ZXggKi8KIHN0YXRpYyBhdG9taWNfdCBidWZmZXJfcmVhZHkgPSBBVE9NSUNfSU5JVCgwKTsKIAotLyogQWRkIGFuIGVudHJ5IHRvIHRoZSBldmVudCBidWZmZXIuIFdoZW4gd2UKLSAqIGdldCBuZWFyIHRvIHRoZSBlbmQgd2Ugd2FrZSB1cCB0aGUgcHJvY2VzcwotICogc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4KKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZSBnZXQgbmVhciB0byB0aGUgZW5kIHdlCisgKiB3YWtlIHVwIHRoZSBwcm9jZXNzIHNsZWVwaW5nIG9uIHRoZSByZWFkKCkgb2YgdGhlIGZpbGUuIFRvIHByb3RlY3QKKyAqIHRoZSBldmVudF9idWZmZXIgdGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hlbiBidWZmZXJfbXV0ZXgKKyAqIGlzIHNldC4KICAqLwogdm9pZCBhZGRfZXZlbnRfZW50cnkodW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSBhbGwgd29ya3F1ZXVlcyBvciBoYW5kbGVycyBhcmUKKwkgKiBjYW5jZWxlZCBvciBmbHVzaGVkIGJlZm9yZSB0aGUgZXZlbnQgYnVmZmVyIGlzIGZyZWVkLgorCSAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChidWZmZXJfcG9zID09IGJ1ZmZlcl9zaXplKSB7CiAJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmV2ZW50X2xvc3Rfb3ZlcmZsb3cpOwogCQlyZXR1cm47CkBAIC02OSw3ICs4MCw2IEBACiAKIGludCBhbGxvY19ldmVudF9idWZmZXIodm9pZCkKIHsKLQlpbnQgZXJyID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wcm9maWxlZnNfbG9jaywgZmxhZ3MpOwpAQCAtODAsMjEgKzkwLDIyIEBACiAJaWYgKGJ1ZmZlcl93YXRlcnNoZWQgPj0gYnVmZmVyX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gdm1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBidWZmZXJfc2l6ZSk7CiAJaWYgKCFldmVudF9idWZmZXIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogCiB2b2lkIGZyZWVfZXZlbnRfYnVmZmVyKHZvaWQpCiB7CisJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAl2ZnJlZShldmVudF9idWZmZXIpOwotCisJYnVmZmVyX3BvcyA9IDA7CiAJZXZlbnRfYnVmZmVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxMiBAQAogCiAJbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAorCS8qIE1heSBoYXBwZW4gaWYgdGhlIGJ1ZmZlciBpcyBmcmVlZCBkdXJpbmcgcGVuZGluZyByZWFkcy4gKi8KKwlpZiAoIWV2ZW50X2J1ZmZlcikgeworCQlyZXR2YWwgPSAtRUlOVFI7CisJCWdvdG8gb3V0OworCX0KKwogCWF0b21pY19zZXQoJmJ1ZmZlcl9yZWFkeSwgMCk7CiAKIAlyZXR2YWwgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKaW5kZXggOGZkZmE0Zi4uN2RkMzcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCkBAIC02NywxNCArNjcsNiBAQAogCiBJTlRfTU9EVUxFX1BBUk0oZXBwX21vZGUsIDEpOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1JTlRfTU9EVUxFX1BBUk0ocGNfZGVidWcsIFBDTUNJQV9ERUJVRyk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0icGFycG9ydF9jcy5jIDEuMjkgMjAwMi8xMC8xMSAwNjo1Nzo0MSAoRGF2aWQgSGluZHMpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEwMyw3ICs5NSw3IEBACiB7CiAgICAgcGFycG9ydF9pbmZvX3QgKmluZm87CiAKLSAgICBERUJVRygwLCAicGFycG9ydF9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAicGFycG9ydF9hdHRhY2goKVxuIik7CiAKICAgICAvKiBDcmVhdGUgbmV3IHBhcnBvcnQgZGV2aWNlICovCiAgICAgaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTQsNyArMTA2LDYgQEAKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMTMyLDcgKzEyMyw3IEBACiAKIHN0YXRpYyB2b2lkIHBhcnBvcnRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIERFQlVHKDAsICJwYXJwb3J0X2RldGFjaCgweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAicGFycG9ydF9kZXRhY2hcbiIpOwogCiAgICAgcGFycG9ydF9jc19yZWxlYXNlKGxpbmspOwogCkBAIC0xNDcsOSArMTM4LDYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCBwYXJwb3J0X2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAogCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCkBAIC0xNzgsMTggKzE2NiwyMCBAQAogewogICAgIHBhcnBvcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3QgcGFycG9ydCAqcDsKLSAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IHJldDsKIAotICAgIERFQlVHKDAsICJwYXJwb3J0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAicGFycG9ydF9jb25maWdcbiIpOwogCi0gICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcGFycG9ydF9jb25maWdfY2hlY2ssIE5VTEwpOwotICAgIGlmIChsYXN0X3JldCkgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKyAgICByZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcGFycG9ydF9jb25maWdfY2hlY2ssIE5VTEwpOworICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwotICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICBwID0gcGFycG9ydF9wY19wcm9iZV9wb3J0KGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQyLAogCQkJICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBQQVJQT1JUX0RNQV9OT05FLApAQCAtMjEzLDggKzIwMyw2IEBACiAKICAgICByZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBwYXJwb3J0X2NzX3JlbGVhc2UobGluayk7CiAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC0yMzIsNyArMjIwLDcgQEAKIHsKIAlwYXJwb3J0X2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAicGFycG9ydF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJwYXJwb3J0X3JlbGVhc2VcbiIpOwogCiAJaWYgKGluZm8tPm5kZXYpIHsKIAkJc3RydWN0IHBhcnBvcnQgKnAgPSBpbmZvLT5wb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDIyYjAyYzYuLjQxNmY2YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTE3NSwxNSArMTc1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWRyaGQgPSAoc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICopaGVhZGVyOwotCWlmICghZHJoZC0+YWRkcmVzcykgewotCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLwotCQlXQVJOKDEsICJZb3VyIEJJT1MgaXMgYnJva2VuOyBETUFSIHJlcG9ydGVkIGF0IGFkZHJlc3MgemVybyFcbiIKLQkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAotCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJZG1hcnUgPSBremFsbG9jKHNpemVvZigqZG1hcnUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYXJ1KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU5MSwxMiArNTgyLDUzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2luaXQgY2hlY2tfemVyb19hZGRyZXNzKHZvaWQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfZG1hciAqZG1hcjsKKwlzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqZW50cnlfaGVhZGVyOworCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKKworCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOworCWVudHJ5X2hlYWRlciA9IChzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqKShkbWFyICsgMSk7CisKKwl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWVudHJ5X2hlYWRlcikgPAorCQkJKCgodW5zaWduZWQgbG9uZylkbWFyKSArIGRtYXJfdGJsLT5sZW5ndGgpKSB7CisJCS8qIEF2b2lkIGxvb3BpbmcgZm9yZXZlciBvbiBiYWQgQUNQSSB0YWJsZXMgKi8KKwkJaWYgKGVudHJ5X2hlYWRlci0+bGVuZ3RoID09IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkJIkludmFsaWQgMC1sZW5ndGggc3RydWN0dXJlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGVudHJ5X2hlYWRlci0+dHlwZSA9PSBBQ1BJX0RNQVJfVFlQRV9IQVJEV0FSRV9VTklUKSB7CisJCQlkcmhkID0gKHZvaWQgKillbnRyeV9oZWFkZXI7CisJCQlpZiAoIWRyaGQtPmFkZHJlc3MpIHsKKwkJCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLworCQkJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQVIgcmVwb3J0ZWQgYXQgYWRkcmVzcyB6ZXJvIVxuIgorCQkJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKyNpZmRlZiBDT05GSUdfRE1BUgorCQkJCWRtYXJfZGlzYWJsZWQgPSAxOworI2VuZGlmCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWVudHJ5X2hlYWRlciA9ICgodm9pZCAqKWVudHJ5X2hlYWRlciArIGVudHJ5X2hlYWRlci0+bGVuZ3RoKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKIHZvaWQgX19pbml0IGRldGVjdF9pbnRlbF9pb21tdSh2b2lkKQogewogCWludCByZXQ7CiAKIAlyZXQgPSBkbWFyX3RhYmxlX2RldGVjdCgpOwotCisJaWYgKHJldCkKKwkJcmV0ID0gY2hlY2tfemVyb19hZGRyZXNzKCk7CiAJewogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCXN0cnVjdCBhY3BpX3RhYmxlX2RtYXIgKmRtYXI7CkBAIC02MTMsMTAgKzY0NSwxMyBAQAogCQkJICAgICAgICJ4MmFwaWMgYW5kIEludHItcmVtYXBwaW5nLlxuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRE1BUgotCQlpZiAocmV0ICYmICFub19pb21tdSAmJiAhaW9tbXVfZGV0ZWN0ZWQgJiYgIXN3aW90bGIgJiYKLQkJICAgICFkbWFyX2Rpc2FibGVkKQorCQlpZiAocmV0ICYmICFub19pb21tdSAmJiAhaW9tbXVfZGV0ZWN0ZWQgJiYgIWRtYXJfZGlzYWJsZWQpCiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2CisJCWlmIChyZXQpCisJCQl4ODZfaW5pdC5pb21tdS5pb21tdV9pbml0ID0gaW50ZWxfaW9tbXVfaW5pdDsKKyNlbmRpZgogCX0KIAllYXJseV9hY3BpX29zX3VubWFwX21lbW9yeShkbWFyX3RibCwgZG1hcl90Ymxfc2l6ZSk7CiAJZG1hcl90YmwgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggYjFlOTdlNi4uOTI2MTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0yNzY3LDcgKzI3NjcsMTUgQEAKIAogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwotCWZsYWdzICY9IH4oR0ZQX0RNQSB8IEdGUF9ETUEzMik7CisKKwlpZiAoIWlvbW11X25vX21hcHBpbmcoaHdkZXYpKQorCQlmbGFncyAmPSB+KEdGUF9ETUEgfCBHRlBfRE1BMzIpOworCWVsc2UgaWYgKGh3ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IGRtYV9nZXRfcmVxdWlyZWRfbWFzayhod2RldikpIHsKKwkJaWYgKGh3ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IERNQV9CSVRfTUFTSygzMikpCisJCQlmbGFncyB8PSBHRlBfRE1BOworCQllbHNlCisJCQlmbGFncyB8PSBHRlBfRE1BMzI7CisJfQogCiAJdmFkZHIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZ3MsIG9yZGVyKTsKIAlpZiAoIXZhZGRyKQpAQCAtMzIwNyw2ICszMjE1LDMzIEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKKy8qCisgKiBIZXJlIHdlIG9ubHkgcmVzcG9uZCB0byBhY3Rpb24gb2YgdW5ib3VuZCBkZXZpY2UgZnJvbSBkcml2ZXIuCisgKgorICogQWRkZWQgZGV2aWNlIGlzIG5vdCBhdHRhY2hlZCB0byBpdHMgRE1BUiBkb21haW4gaGVyZSB5ZXQuIFRoYXQgd2lsbCBoYXBwZW4KKyAqIHdoZW4gbWFwcGluZyB0aGUgZGV2aWNlIHRvIGlvdmEuCisgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gZmluZF9kb21haW4ocGRldik7CisJaWYgKCFkb21haW4pCisJCXJldHVybiAwOworCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJCWRvbWFpbl9yZW1vdmVfb25lX2Rldl9pbmZvKGRvbWFpbiwgcGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkZXZpY2VfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkZXZpY2Vfbm90aWZpZXIsCit9OworCiBpbnQgX19pbml0IGludGVsX2lvbW11X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTMyMzEsNyArMzI2Niw3IEBACiAJICogQ2hlY2sgdGhlIG5lZWQgZm9yIERNQS1yZW1hcHBpbmcgaW5pdGlhbGl6YXRpb24gbm93LgogCSAqIEFib3ZlIGluaXRpYWxpemF0aW9uIHdpbGwgYWxzbyBiZSB1c2VkIGJ5IEludGVycnVwdC1yZW1hcHBpbmcuCiAJICovCi0JaWYgKG5vX2lvbW11IHx8IHN3aW90bGIgfHwgZG1hcl9kaXNhYmxlZCkKKwlpZiAobm9faW9tbXUgfHwgZG1hcl9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpb21tdV9pbml0X21lbXBvb2woKTsKQEAgLTMyNTIsMTMgKzMyODcsMTcgQEAKIAkiUENJLURNQTogSW50ZWwoUikgVmlydHVhbGl6YXRpb24gVGVjaG5vbG9neSBmb3IgRGlyZWN0ZWQgSS9PXG4iKTsKIAogCWluaXRfdGltZXIoJnVubWFwX3RpbWVyKTsKLQlmb3JjZV9pb21tdSA9IDE7CisjaWZkZWYgQ09ORklHX1NXSU9UTEIKKwlzd2lvdGxiID0gMDsKKyNlbmRpZgogCWRtYV9vcHMgPSAmaW50ZWxfZG1hX29wczsKIAogCWluaXRfaW9tbXVfc3lzZnMoKTsKIAogCXJlZ2lzdGVyX2lvbW11KCZpbnRlbF9pb21tdV9vcHMpOwogCisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwY2lfYnVzX3R5cGUsICZkZXZpY2VfbmIpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggNzQ1NDAyZS4uNWI3MDU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTY1Niw4ICs2NTYsMTAgQEAKIAlmcmVlX2xpbmtfc3RhdGUobGluayk7CiAKIAkvKiBSZWNoZWNrIGxhdGVuY2llcyBhbmQgY29uZmlndXJlIHVwc3RyZWFtIGxpbmtzICovCi0JcGNpZV91cGRhdGVfYXNwbV9jYXBhYmxlKHJvb3QpOwotCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJaWYgKHBhcmVudF9saW5rKSB7CisJCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKKwkJcGNpZV9jb25maWdfYXNwbV9wYXRoKHBhcmVudF9saW5rKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOwogCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggYTc5MGIxNy4uMjQ1ZDJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19hbWRfaWRlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogc2V0IFNCWDAwIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCisJLyogc2V0IFNCWDAwL0h1ZHNvbi0yIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCiAJdTggdG1wOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX0RFVklDRSwgJnRtcCk7CkBAIC0xMDI4LDggKzEwMjgsOCBAQAogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDA5NTk0MzAuLmNiMWEwMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yOTksMTcgKzI5OSw4IEBACiAJCXIgPSBidXMtPnJlc291cmNlW2ldOwogCQlpZiAociA9PSAmaW9wb3J0X3Jlc291cmNlIHx8IHIgPT0gJmlvbWVtX3Jlc291cmNlKQogCQkJY29udGludWU7Ci0JCWlmIChyICYmIChyLT5mbGFncyAmIHR5cGVfbWFzaykgPT0gdHlwZSkgewotCQkJaWYgKCFyLT5wYXJlbnQpCi0JCQkJcmV0dXJuIHI7Ci0JCQkvKgotCQkJICogaWYgdGhlcmUgaXMgbm8gY2hpbGQgdW5kZXIgdGhhdCwgd2Ugc2hvdWxkIHJlbGVhc2UKLQkJCSAqIGFuZCB1c2UgaXQuIGRvbid0IG5lZWQgdG8gcmVzZXQgaXQsIHBidXNfc2l6ZV8qIHdpbGwKLQkJCSAqIHNldCBpdCBhZ2FpbgotCQkJICovCi0JCQlpZiAoIXItPmNoaWxkICYmICFyZWxlYXNlX3Jlc291cmNlKHIpKQotCQkJCXJldHVybiByOwotCQl9CisJCWlmIChyICYmIChyLT5mbGFncyAmIHR5cGVfbWFzaykgPT0gdHlwZSAmJiAhci0+cGFyZW50KQorCQkJcmV0dXJuIHI7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggMTdmMzhhNy4uZjNjY2JjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC0xNywyNCArMTcsNiBAQAogCiBpZiBQQ0NBUkQKIAotY29uZmlnIFBDTUNJQV9ERUJVRwotCWJvb2wgIkVuYWJsZSBQQ0NBUkQgZGVidWdnaW5nIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIFBDTUNJQSBzdWJzeXN0ZW0gZGVidWdnaW5nLiAgWW91Ci0JICB3aWxsIG5lZWQgdG8gY2hvb3NlIHRoZSBkZWJ1Z2dpbmcgbGV2ZWwgZWl0aGVyIHZpYSB0aGUKLQkgIGtlcm5lbCBjb21tYW5kIGxpbmUsIG9yIG1vZHVsZSBvcHRpb25zIGRlcGVuZGluZyB3aGV0aGVyCi0JICB5b3UgYnVpbGQgdGhlIFBDTUNJQSBhcyBtb2R1bGVzLgotCi0JICBUaGUga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKLQkgICAgcGNtY2lhX2NvcmUucGNfZGVidWc9TgotCSAgICBwY21jaWEucGNfZGVidWc9TgotCSAgICBzYTExeHhfY29yZS5wY19kZWJ1Zz1OCi0KLQkgIFRoZSBtb2R1bGUgb3B0aW9uIGlzIGNhbGxlZCBwY19kZWJ1Zz1OCi0KLQkgIEluIGFsbCB0aGUgYWJvdmUgZXhhbXBsZXMsIE4gaXMgdGhlIGRlYnVnZ2luZyB2ZXJib3NpdHkKLQkgIGxldmVsLgotCiBjb25maWcgUENNQ0lBCiAJdHJpc3RhdGUgIjE2LWJpdCBQQ01DSUEgc3VwcG9ydCIKIAlzZWxlY3QgQ1JDMzIKQEAgLTE5Niw5ICsxNzgsMTMgQEAKIAl0cmlzdGF0ZSAiYmNtNjN4eCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJDTTYzWFggJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfU09DX0NPTU1PTgorCWJvb2wKKwogY29uZmlnIFBDTUNJQV9TQTExMDAKIAl0cmlzdGF0ZSAiU0ExMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9TQTExMDAgJiYgUENNQ0lBCisJc2VsZWN0IFBDTUNJQV9TT0NfQ09NTU9OCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFNBMTF4MC1iYXNlZCBQQ01DSUEgb3IgQ0YKIAkgIHNvY2tldHMsIGZvdW5kIG9uIEhQIGlQQVFzLCBZb3B5LCBhbmQgb3RoZXIgU3Ryb25nQVJNKFIpLwpAQCAtMjA5LDYgKzE5NSw3IEBACiBjb25maWcgUENNQ0lBX1NBMTExMQogCXRyaXN0YXRlICJTQTExMTEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX1NBMTEwMCAmJiBTQTExMTEgJiYgUENNQ0lBCisJc2VsZWN0IFBDTUNJQV9TT0NfQ09NTU9OCiAJaGVscAogCSAgU2F5IFkgIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBTQTExMTEtYmFzZWQgUENNQ0lBIG9yIENGCiAJICBzb2NrZXRzLCBmb3VuZCBvbiB0aGUgSm9ybmFkYSA3MjAsIEdyYXBoaWNzbWFzdGVyIGFuZCBvdGhlcgpAQCAtMjIyLDkgKzIwOSwyOCBAQAogCWRlcGVuZHMgb24gKEFSQ0hfTFVCQk9DSyB8fCBNQUNIX01BSU5TVE9ORSB8fCBQWEFfU0hBUlBTTCBcCiAJCSAgICB8fCBNQUNIX0FSTUNPUkUgfHwgQVJDSF9QWEFfUEFMTSB8fCBUUklaRVBTX1BDTUNJQSBcCiAJCSAgICB8fCBBUkNIX1ZJUEVSIHx8IEFSQ0hfUFhBX0VTRVJJRVMgfHwgTUFDSF9TVEFSR0FURTIpCisJc2VsZWN0IFBDTUNJQV9TT0NfQ09NTU9OCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQWEEyeHggUENNQ0lBIGNvbnRyb2xsZXIKIAorY29uZmlnIFBDTUNJQV9ERUJVRworCWJvb2wgIkVuYWJsZSBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiAoUENNQ0lBX1NBMTExMSB8fCBQQ01DSUFfU0ExMTAwIHx8IFBDTUNJQV9QWEEyWFgpCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgZGVidWdnaW5nIGZvciB0aGUgU29DIFBDTUNJQSBsYXllci4KKwkgIFlvdSB3aWxsIG5lZWQgdG8gY2hvb3NlIHRoZSBkZWJ1Z2dpbmcgbGV2ZWwgZWl0aGVyIHZpYSB0aGUKKwkgIGtlcm5lbCBjb21tYW5kIGxpbmUsIG9yIG1vZHVsZSBvcHRpb25zIGRlcGVuZGluZyB3aGV0aGVyCisJICB5b3UgYnVpbGQgdGhlIGRyaXZlcnMgYXMgbW9kdWxlcy4KKworCSAgVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmU6CisJICAgIHNhMTF4eF9jb3JlLnBjX2RlYnVnPU4KKwkgICAgcHhhMnh4X2NvcmUucGNfZGVidWc9TgorCisJICBUaGUgbW9kdWxlIG9wdGlvbiBpcyBjYWxsZWQgcGNfZGVidWc9TgorCisJICBJbiBhbGwgdGhlIGFib3ZlIGV4YW1wbGVzLCBOIGlzIHRoZSBkZWJ1Z2dpbmcgdmVyYm9zaXR5CisJICBsZXZlbC4KKwogY29uZmlnIFBDTUNJQV9QUk9CRQogCWJvb2wKIAlkZWZhdWx0IHkgaWYgSVNBICYmICFBUkNIX1NBMTEwMCAmJiAhQVJDSF9DTFBTNzExWCAmJiAhUEFSSVNDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IGEwM2EzOGEuLjM4MjkzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yMiw4ICsyMiw5IEBACiBvYmotJChDT05GSUdfSTgyMDkyKQkJCQkrPSBpODIwOTIubwogb2JqLSQoQ09ORklHX1RDSUMpCQkJCSs9IHRjaWMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9NOFhYKQkJCSs9IG04eHhfcGNtY2lhLm8KLW9iai0kKENPTkZJR19QQ01DSUFfU0ExMTAwKQkJCSs9IHNhMTF4eF9jb3JlLm8gc2ExMTAwX2NzLm8KLW9iai0kKENPTkZJR19QQ01DSUFfU0ExMTExKQkJCSs9IHNhMTF4eF9jb3JlLm8gc2ExMTExX2NzLm8KK29iai0kKENPTkZJR19QQ01DSUFfU09DX0NPTU1PTikJCQkrPSBzb2NfY29tbW9uLm8KK29iai0kKENPTkZJR19QQ01DSUFfU0ExMTAwKQkJCSs9IHNhMTF4eF9iYXNlLm8gc2ExMTAwX2NzLm8KK29iai0kKENPTkZJR19QQ01DSUFfU0ExMTExKQkJCSs9IHNhMTF4eF9iYXNlLm8gc2ExMTExX2NzLm8KIG9iai0kKENPTkZJR19NMzJSX1BDQykJCQkJKz0gbTMycl9wY2Mubwogb2JqLSQoQ09ORklHX00zMlJfQ0ZDKQkJCQkrPSBtMzJyX2NmYy5vCiBvYmotJChDT05GSUdfUENNQ0lBX0FVMVgwMCkJCQkrPSBhdTF4MDBfc3MubwpAQCAtMzUsOSArMzYsNiBAQAogb2JqLSQoQ09ORklHX0FUOTFfQ0YpCQkJCSs9IGF0OTFfY2Yubwogb2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpCQkJKz0gZWxlY3RyYV9jZi5vCiAKLXNhMTF4eF9jb3JlLXkJCQkJCSs9IHNvY19jb21tb24ubyBzYTExeHhfYmFzZS5vCi1weGEyeHhfY29yZS15CQkJCQkrPSBzb2NfY29tbW9uLm8gcHhhMnh4X2Jhc2UubwotCiBhdTF4MDBfc3MteQkJCQkJKz0gYXUxMDAwX2dlbmVyaWMubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMDAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwpAQCAtNzcsNCArNzUsNCBAQAogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0U3NDApCQkJKz0gcHhhMnh4X2U3NDAubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJCSs9IHB4YTJ4eF9zdGFyZ2F0ZTIubwogCi1vYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWCkJCQkrPSBweGEyeHhfY29yZS5vICQocHhhMnh4LW9iai15KQorb2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpCQkJKz0gcHhhMnh4X2Jhc2UubyAkKHB4YTJ4eC1vYmoteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCBkYjc3ZTFmLi40Y2Q3MGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC05MSw3ICs5MSw3IEBACiBzdGF0aWMgdm9pZCBjYl9yZWxlYXNlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBzKQogewogCWlmIChzLT5jYl9jaXNfdmlydCkgewotCQljc19kYmcocywgMSwgImNiX3JlbGVhc2VfY2lzX21lbSgpXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiY2JfcmVsZWFzZV9jaXNfbWVtKClcbiIpOwogCQlpb3VubWFwKHMtPmNiX2Npc192aXJ0KTsKIAkJcy0+Y2JfY2lzX3ZpcnQgPSBOVUxMOwogCQlzLT5jYl9jaXNfcmVzID0gTlVMTDsKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQljc19kYmcocywgMywgInJlYWRfY2JfbWVtKCVkLCAlI3gsICV1KVxuIiwgc3BhY2UsIGFkZHIsIGxlbik7CisJZGV2X2RiZygmcy0+ZGV2LCAicmVhZF9jYl9tZW0oJWQsICUjeCwgJXUpXG4iLCBzcGFjZSwgYWRkciwgbGVuKTsKIAogCWRldiA9IHBjaV9nZXRfc2xvdChzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLCAwKTsKIAlpZiAoIWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NpcnJ1cy5oIGIvZHJpdmVycy9wY21jaWEvY2lycnVzLmgKaW5kZXggZWNkNGZjNy4uNDQ2YTQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2lycnVzLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY2lycnVzLmgKQEAgLTMwLDE2ICszMCw2IEBACiAjaWZuZGVmIF9MSU5VWF9DSVJSVVNfSAogI2RlZmluZSBfTElOVVhfQ0lSUlVTX0gKIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0NJUlJVUwotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NJUlJVUwkJMHgxMDEzCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9DSVJSVVNfNjcyOQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU182NzI5CTB4MTEwMAotI2VuZGlmCi0jaWZuZGVmIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzY4MzIKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNjgzMgkweDExMTAKLSNlbmRpZgotCiAjZGVmaW5lIFBENjdfTUlTQ19DVExfMQkJMHgxNgkvKiBNaXNjIGNvbnRyb2wgMSAqLwogI2RlZmluZSBQRDY3X0ZJRk9fQ1RMCQkweDE3CS8qIEZJRk8gY29udHJvbCAqLwogI2RlZmluZSBQRDY3X01JU0NfQ1RMXzIJCTB4MUUJLyogTWlzYyBjb250cm9sIDIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKaW5kZXggNGExMTBiNy4uOGMxYjczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgIHZvaWQgX19pb21lbSAqc3lzLCAqZW5kOwogICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHB0cjsKICAgICAKLSAgICBjc19kYmcocywgMywgInBjbWNpYV9yZWFkX2Npc19tZW0oJWQsICUjeCwgJXUpXG4iLCBhdHRyLCBhZGRyLCBsZW4pOworICAgIGRldl9kYmcoJnMtPmRldiwgInBjbWNpYV9yZWFkX2Npc19tZW0oJWQsICUjeCwgJXUpXG4iLCBhdHRyLCBhZGRyLCBsZW4pOwogCiAgICAgaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgewogCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkgICAgYWRkciA9IDA7CiAJfQogICAgIH0KLSAgICBjc19kYmcocywgMywgIiAgJSMyLjJ4ICUjMi4yeCAlIzIuMnggJSMyLjJ4IC4uLlxuIiwKKyAgICBkZXZfZGJnKCZzLT5kZXYsICIgICUjMi4yeCAlIzIuMnggJSMyLjJ4ICUjMi4yeCAuLi5cbiIsCiAJICAqKHVfY2hhciAqKShwdHIrMCksICoodV9jaGFyICopKHB0cisxKSwKIAkgICoodV9jaGFyICopKHB0cisyKSwgKih1X2NoYXIgKikocHRyKzMpKTsKICAgICByZXR1cm4gMDsKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgIHZvaWQgX19pb21lbSAqc3lzLCAqZW5kOwogICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHB0cjsKICAgICAKLSAgICBjc19kYmcocywgMywgInBjbWNpYV93cml0ZV9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKKyAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfd3JpdGVfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKICAgICBpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7CiAJLyogSW5kaXJlY3QgYWNjZXNzZXMgdXNlIGEgYnVuY2ggb2Ygc3BlY2lhbCByZWdpc3RlcnMgYXQgZml4ZWQKQEAgLTU4NCw3ICs1ODQsNyBAQAogCW9mcyArPSBsaW5rWzFdICsgMjsKICAgICB9CiAgICAgaWYgKGkgPT0gTUFYX1RVUExFUykgewotCWNzX2RiZyhzLCAxLCAiY3M6IG92ZXJydW4gaW4gcGNtY2lhX2dldF9uZXh0X3R1cGxlXG4iKTsKKwlkZXZfZGJnKCZzLT5kZXYsICJjczogb3ZlcnJ1biBpbiBwY21jaWFfZ2V0X25leHRfdHVwbGVcbiIpOwogCXJldHVybiAtRU5PU1BDOwogICAgIH0KICAgICAKQEAgLTE0NDAsNyArMTQ0MCw3IEBACiAJYnJlYWs7CiAgICAgfQogICAgIGlmIChyZXQpCi0JICAgIF9fY3NfZGJnKDAsICJwYXJzZV90dXBsZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJICAgIHByX2RlYnVnKCJwYXJzZV90dXBsZSBmYWlsZWQgJWRcbiIsIHJldCk7CiAgICAgcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3R1cGxlKTsKQEAgLTE0NjMsNyArMTQ2Myw5IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBjb2RlOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOworICAgIGlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkKKwkgICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CiAgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKICAgICBpZiAocmV0ICE9IDApCiAJICAgIGdvdG8gZG9uZTsKQEAgLTE0ODAsNiArMTQ4Miw2NyBAQAogfQogRVhQT1JUX1NZTUJPTChwY2NhcmRfcmVhZF90dXBsZSk7CiAKKworLyoqCisgKiBwY2NhcmRfbG9vcF90dXBsZSgpIC0gbG9vcCBvdmVyIHR1cGxlcyBpbiB0aGUgQ0lTCisgKiBAczoJCXRoZSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCB3aGVyZSB0aGUgY2FyZCBpcyBpbnNlcnRlZAorICogQGZ1bmN0aW9uOgl0aGUgZGV2aWNlIGZ1bmN0aW9uIHdlIGxvb3AgZm9yCisgKiBAY29kZToJd2hpY2ggQ0lTIGNvZGUgc2hhbGwgd2UgbG9vayBmb3I/CisgKiBAcGFyc2U6CWJ1ZmZlciB3aGVyZSB0aGUgdHVwbGUgc2hhbGwgYmUgcGFyc2VkIChvciBOVUxMLCBpZiBubyBwYXJzZSkKKyAqIEBwcml2X2RhdGE6CXByaXZhdGUgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGxvb3BfdHVwbGUgZnVuY3Rpb24uCisgKiBAbG9vcF90dXBsZToJZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBDSVMgZW50cnkgb2YgdHlwZSBAZnVuY3Rpb24uIElUCisgKgkJZ2V0cyBwYXNzZWQgdGhlIHJhdyB0dXBsZSwgdGhlIHBhcmVzZWQgdHVwbGUgKGlmIEBwYXJzZSBpcworICoJCXNldCkgYW5kIEBwcml2X2RhdGEuCisgKgorICogcGNjYXJkX2xvb3BfdHVwbGUoKSBsb29wcyBvdmVyIGFsbCBDSVMgZW50cmllcyBvZiB0eXBlIEBmdW5jdGlvbiwgYW5kCisgKiBjYWxscyB0aGUgQGxvb3BfdHVwbGUgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkuIElmIHRoZSBjYWxsIHRvIEBsb29wX3R1cGxlCisgKiByZXR1cm5zIDAsIHRoZSBsb29wIGV4aXRzLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBlcnJvcmNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgcGNjYXJkX2xvb3BfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJICAgICAgY2lzZGF0YV90IGNvZGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2X2RhdGEsCisJCSAgICAgIGludCAoKmxvb3BfdHVwbGUpICh0dXBsZV90ICp0dXBsZSwKKwkJCQkJIGNpc3BhcnNlX3QgKnBhcnNlLAorCQkJCQkgdm9pZCAqcHJpdl9kYXRhKSkKK3sKKwl0dXBsZV90IHR1cGxlOworCWNpc2RhdGFfdCAqYnVmOworCWludCByZXQ7CisKKwlidWYgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlYWQgdHVwbGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBjb2RlOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCisJcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKKwl3aGlsZSAoIXJldCkgeworCQlpZiAocGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKHBhcnNlKQorCQkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsIHBhcnNlKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJcmV0ID0gbG9vcF90dXBsZSgmdHVwbGUsIHBhcnNlLCBwcml2X2RhdGEpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCituZXh0X2VudHJ5OgorCQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CisJfQorCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwY2NhcmRfbG9vcF90dXBsZSk7CisKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBUaGlzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGNhcmQgaGFzIGEgc2Vuc2libGUgQ0lTLiAgSXQgcmV0dXJucwpAQCAtMTQ5MCw3ICsxNTUzLDcgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1pbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgKmluZm8pCitpbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppbmZvKQogewogICAgIHR1cGxlX3QgKnR1cGxlOwogICAgIGNpc3BhcnNlX3QgKnA7CkBAIC0xNTE1LDMwICsxNTc4LDMwIEBACiAgICAgY291bnQgPSByZXNlcnZlZCA9IDA7CiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKICAgICB0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0gICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKICAgICBpZiAocmV0ICE9IDApCiAJZ290byBkb25lOwogCiAgICAgLyogRmlyc3QgdHVwbGUgc2hvdWxkIGJlIERFVklDRTsgd2Ugc2hvdWxkIHJlYWxseSBoYXZlIGVpdGhlciB0aGF0CiAgICAgICAgb3IgYSBDRlRBQkxFX0VOVFJZIG9mIHNvbWUgc29ydCAqLwogICAgIGlmICgodHVwbGUtPlR1cGxlQ29kZSA9PSBDSVNUUExfREVWSUNFKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gMCkpCisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKIAlkZXZfb2srKzsKIAogICAgIC8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgogICAgICAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cwogICAgICAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLwotICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCisgICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKIAlpZGVudF9vaysrOwogCiAgICAgaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQogCWdvdG8gZG9uZTsKIAogICAgIGZvciAoY291bnQgPSAxOyBjb3VudCA8IE1BWF9UVVBMRVM7IGNvdW50KyspIHsKLQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKKwlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKIAlpZiAocmV0ICE9IDApCiAJCWJyZWFrOwogCWlmICgoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDIzKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4NDApKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggOTM0ZDRiZS4uNzkwYWY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC02MSwxNyArNjEsNiBAQAogLyogQWNjZXNzIHNwZWVkIGZvciBhdHRyaWJ1dGUgbWVtb3J5IHdpbmRvd3MgKi8KIElOVF9NT0RVTEVfUEFSTShjaXNfc3BlZWQsCTMwMCk7CQkvKiBucyAqLwogCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZzsKLQotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwotCi1pbnQgY3NfZGVidWdfbGV2ZWwoaW50IGxldmVsKQotewotCXJldHVybiBwY19kZWJ1ZyA+IGxldmVsOwotfQotI2VuZGlmCi0KIAogc29ja2V0X3N0YXRlX3QgZGVhZF9zb2NrZXQgPSB7CiAJLmNzY19tYXNrCT0gU1NfREVURUNULApAQCAtOTgsMTAgKzg3LDEzIEBACiAgKiBUaGVzZSBmdW5jdGlvbnMgY2hlY2sgZm9yIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3QgcGNtY2lhX3Nva2V0IGFycmF5cywKICAqIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcGNtY2lhX3tzdXNwZW5kLHJlc3VtZX1fc29ja2V0CiAgKi8KK3N0YXRpYyBpbnQgc29ja2V0X2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3N0YXRpYyBpbnQgc29ja2V0X2xhdGVfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogc3RhdGljIGludCBzb2NrZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAotaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfcnVuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIGludCAoKmNiKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqKSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCkBAIC0xMTAsMjkgKzEwMiwzNCBAQAogCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKIAkJCWNvbnRpbnVlOwogCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9zdXNwZW5kKHNvY2tldCk7CisJCWNiKHNvY2tldCk7CiAJCW11dGV4X3VubG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwogCX0KIAl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOworfQogCitpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X3N1c3BlbmQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKTsKIAordm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9lYXJseV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUpOworCit2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfbGF0ZV9yZXN1bWUpOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZSk7CisKIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0KLQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzb2NrZXQsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0JCWlmIChzb2NrZXQtPmRldi5wYXJlbnQgIT0gZGV2KQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQkJc29ja2V0X3Jlc3VtZShzb2NrZXQpOwotCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKLQl9Ci0JdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQorCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9yZXN1bWUpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUpOwpAQCAtMTgyLDcgKzE3OSw3IEBACiAJaWYgKCFzb2NrZXQgfHwgIXNvY2tldC0+b3BzIHx8ICFzb2NrZXQtPmRldi5wYXJlbnQgfHwgIXNvY2tldC0+cmVzb3VyY2Vfb3BzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNzX2RiZyhzb2NrZXQsIDAsICJwY21jaWFfcmVnaXN0ZXJfc29ja2V0KDB4JXApXG4iLCBzb2NrZXQtPm9wcyk7CisJZGV2X2RiZygmc29ja2V0LT5kZXYsICJwY21jaWFfcmVnaXN0ZXJfc29ja2V0KDB4JXApXG4iLCBzb2NrZXQtPm9wcyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT5sb2NrKTsKIApAQCAtMjU0LDYgKzI1MSwxMyBAQAogCiAJcGNtY2lhX3BhcnNlX2V2ZW50cyhzb2NrZXQsIFNTX0RFVEVDVCk7CiAKKwkvKgorCSAqIExldCdzIHRyeSB0byBnZXQgdGhlIFBDTUNJQSBtb2R1bGUgZm9yIDE2LWJpdCBQQ01DSUEgc3VwcG9ydC4KKwkgKiBJZiBpdCBmYWlscywgaXQgZG9lc24ndCBtYXR0ZXIgLS0gd2Ugc3RpbGwgaGF2ZSAzMi1iaXQgQ2FyZEJ1cworCSAqIHN1cHBvcnQgdG8gb2ZmZXIsIHNvIHRoaXMgaXMgbm90IGEgZmFpbHVyZSBtb2RlLgorCSAqLworCXJlcXVlc3RfbW9kdWxlX25vd2FpdCgicGNtY2lhIik7CisKIAlyZXR1cm4gMDsKIAogIGVycjoKQEAgLTI3NCw3ICsyNzgsNyBAQAogCWlmICghc29ja2V0KQogCQlyZXR1cm47CiAKLQljc19kYmcoc29ja2V0LCAwLCAicGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KDB4JXApXG4iLCBzb2NrZXQtPm9wcyk7CisJZGV2X2RiZygmc29ja2V0LT5kZXYsICJwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoMHglcClcbiIsIHNvY2tldC0+b3BzKTsKIAogCWlmIChzb2NrZXQtPnRocmVhZCkKIAkJa3RocmVhZF9zdG9wKHNvY2tldC0+dGhyZWFkKTsKQEAgLTMyNyw3ICszMzEsNyBAQAogCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKQogCQlyZXR1cm4gMDsKIAotCWNzX2RiZyhzLCAxLCAic2VuZF9ldmVudChldmVudCAlZCwgcHJpICVkLCBjYWxsYmFjayAweCVwKVxuIiwKKwlkZXZfZGJnKCZzLT5kZXYsICJzZW5kX2V2ZW50KGV2ZW50ICVkLCBwcmkgJWQsIGNhbGxiYWNrIDB4JXApXG4iLAogCSAgIGV2ZW50LCBwcmlvcml0eSwgcy0+Y2FsbGJhY2spOwogCiAJaWYgKCFzLT5jYWxsYmFjaykKQEAgLTM0NCw3ICszNDgsNyBAQAogCiBzdGF0aWMgdm9pZCBzb2NrZXRfcmVtb3ZlX2RyaXZlcnMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQljc19kYmcoc2t0LCA0LCAicmVtb3ZlX2RyaXZlcnNcbiIpOworCWRldl9kYmcoJnNrdC0+ZGV2LCAicmVtb3ZlX2RyaXZlcnNcbiIpOwogCiAJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOwogfQpAQCAtMzUzLDcgKzM1Nyw3IEBACiB7CiAJaW50IHN0YXR1cywgaTsKIAotCWNzX2RiZyhza3QsIDQsICJyZXNldFxuIik7CisJZGV2X2RiZygmc2t0LT5kZXYsICJyZXNldFxuIik7CiAKIAlza3QtPnNvY2tldC5mbGFncyB8PSBTU19PVVRQVVRfRU5BIHwgU1NfUkVTRVQ7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwpAQCAtMzc1LDcgKzM3OSw3IEBACiAJCW1zbGVlcCh1bnJlc2V0X2NoZWNrICogMTApOwogCX0KIAotCWNzX2Vycihza3QsICJ0aW1lIG91dCBhZnRlciByZXNldC5cbiIpOworCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwgInRpbWUgb3V0IGFmdGVyIHJlc2V0LlxuIik7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTM4OSw3ICszOTMsNyBAQAogewogCWludCBzdGF0dXM7CiAKLQljc19kYmcocywgNCwgInNodXRkb3duXG4iKTsKKwlkZXZfZGJnKCZzLT5kZXYsICJzaHV0ZG93blxuIik7CiAKIAlzb2NrZXRfcmVtb3ZlX2RyaXZlcnMocyk7CiAJcy0+c3RhdGUgJj0gU09DS0VUX0lOVVNFIHwgU09DS0VUX1BSRVNFTlQ7CkBAIC00MjQsNyArNDI4LDcgQEAKIHsKIAlpbnQgc3RhdHVzLCBpOwogCi0JY3NfZGJnKHNrdCwgNCwgInNldHVwXG4iKTsKKwlkZXZfZGJnKCZza3QtPmRldiwgInNldHVwXG4iKTsKIAogCXNrdC0+b3BzLT5nZXRfc3RhdHVzKHNrdCwgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgU1NfREVURUNUKSkKQEAgLTQ0NCwxMyArNDQ4LDE1IEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIFNTX1BFTkRJTkcpIHsKLQkJY3NfZXJyKHNrdCwgInZvbHRhZ2UgaW50ZXJyb2dhdGlvbiB0aW1lZCBvdXQuXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnNrdC0+ZGV2LAorCQkJICAgInZvbHRhZ2UgaW50ZXJyb2dhdGlvbiB0aW1lZCBvdXQuXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJaWYgKHN0YXR1cyAmIFNTX0NBUkRCVVMpIHsKIAkJaWYgKCEoc2t0LT5mZWF0dXJlcyAmIFNTX0NBUF9DQVJEQlVTKSkgewotCQkJY3NfZXJyKHNrdCwgImNhcmRidXMgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwKKwkJCQkiY2FyZGJ1cyBjYXJkcyBhcmUgbm90IHN1cHBvcnRlZC5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfQ0FSREJVUzsKQEAgLTQ2NCw3ICs0NzAsNyBAQAogCWVsc2UgaWYgKCEoc3RhdHVzICYgU1NfWFZDQVJEKSkKIAkJc2t0LT5zb2NrZXQuVmNjID0gc2t0LT5zb2NrZXQuVnBwID0gNTA7CiAJZWxzZSB7Ci0JCWNzX2Vycihza3QsICJ1bnN1cHBvcnRlZCB2b2x0YWdlIGtleS5cbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmc2t0LT5kZXYsICJ1bnN1cHBvcnRlZCB2b2x0YWdlIGtleS5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTQ4MSw3ICs0ODcsNyBAQAogCiAJc2t0LT5vcHMtPmdldF9zdGF0dXMoc2t0LCAmc3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBTU19QT1dFUk9OKSkgewotCQljc19lcnIoc2t0LCAidW5hYmxlIHRvIGFwcGx5IHBvd2VyLlxuIik7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwgInVuYWJsZSB0byBhcHBseSBwb3dlci5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTUwMSw3ICs1MDcsNyBAQAogewogCWludCByZXQ7CiAKLQljc19kYmcoc2t0LCA0LCAiaW5zZXJ0XG4iKTsKKwlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydFxuIik7CiAKIAlpZiAoIWNzX3NvY2tldF9nZXQoc2t0KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01MjEsNyArNTI3LDcgQEAKIAkJCXNrdC0+c3RhdGUgfD0gU09DS0VUX0NBUkRCVVNfQ09ORklHOwogCQl9CiAjZW5kaWYKLQkJY3NfZGJnKHNrdCwgNCwgImluc2VydCBkb25lXG4iKTsKKwkJZGV2X2RiZygmc2t0LT5kZXYsICJpbnNlcnQgZG9uZVxuIik7CiAKIAkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKIAl9IGVsc2UgewpAQCAtNTQ2LDM0ICs1NTIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0Ci0gKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCi0gKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KLSAqLwotc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKIAlza3QtPm9wcy0+c2V0X3NvY2tldChza3QsICZza3QtPnNvY2tldCk7CisJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkKKwkJc2t0LT5yZXN1bWVfc3RhdHVzID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwogCQlpZiAodmVyaWZ5X2Npc19jYWNoZShza3QpICE9IDApIHsKLQkJCWNzX2RiZyhza3QsIDQsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7CisJCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKIAkJCXNvY2tldF9yZW1vdmVfZHJpdmVycyhza3QpOwogCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKIAkJCS8qCkBAIC01ODQsNyArNTg1LDcgQEAKIAkJCW1zbGVlcCgyMDApOwogCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKIAkJfSBlbHNlIHsKLQkJCWNzX2RiZyhza3QsIDQsICJjaXMgbWF0Y2hlcyBjYWNoZVxuIik7CisJCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtYXRjaGVzIGNhY2hlXG4iKTsKIAkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9SRVNVTUUsIENTX0VWRU5UX1BSSV9MT1cpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTU5Niw2ICs1OTcsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0CisgKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCisgKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KKyAqLworc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNvY2tldF9lYXJseV9yZXN1bWUoc2t0KTsKKwlyZXR1cm4gc29ja2V0X2xhdGVfcmVzdW1lKHNrdCk7Cit9CisKIHN0YXRpYyB2b2lkIHNvY2tldF9yZW1vdmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmc2t0LT5kZXYsCkBAIC03MDYsNyArNzIxLDcgQEAKIHZvaWQgcGNtY2lhX3BhcnNlX2V2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9pbnQgZXZlbnRzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY3NfZGJnKHMsIDQsICJwYXJzZV9ldmVudHM6IGV2ZW50cyAlMDh4XG4iLCBldmVudHMpOworCWRldl9kYmcoJnMtPmRldiwgInBhcnNlX2V2ZW50czogZXZlbnRzICUwOHhcbiIsIGV2ZW50cyk7CiAJaWYgKHMtPnRocmVhZCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKIAkJcy0+dGhyZWFkX2V2ZW50cyB8PSBldmVudHM7CkBAIC03NTYsMTkgKzc3MSwyMiBAQAogewogCWludCByZXQ7CiAKLQljc19kYmcoc2t0LCAxLCAicmVzZXR0aW5nIHNvY2tldFxuIik7CisJZGV2X2RiZygmc2t0LT5kZXYsICJyZXNldHRpbmcgc29ja2V0XG4iKTsKIAogCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKKwkJCWRldl9kYmcoJnNrdC0+ZGV2LCAiY2FuJ3QgcmVzZXQsIG5vdCBwcmVzZW50XG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSB7CisJCQlkZXZfZGJnKCZza3QtPmRldiwgImNhbid0IHJlc2V0LCBzdXNwZW5kZWRcbiIpOwogCQkJcmV0ID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgeworCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjYW4ndCByZXNldCwgaXMgY2FyZGJ1c1xuIik7CiAJCQlyZXQgPSAtRVBFUk07CiAJCQlicmVhazsKIAkJfQpAQCAtODAxLDcgKzgxOSw3IEBACiB7CiAJaW50IHJldDsKIAotCWNzX2RiZyhza3QsIDEsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7CisJZGV2X2RiZygmc2t0LT5kZXYsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7CiAKIAltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewpAQCAtODMxLDcgKzg0OSw3IEBACiB7CiAJaW50IHJldDsKICAgICAKLQljc19kYmcoc2t0LCAxLCAid2FraW5nIHVwIHNvY2tldFxuIik7CisJZGV2X2RiZygmc2t0LT5kZXYsICJ3YWtpbmcgdXAgc29ja2V0XG4iKTsKIAogCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CkBAIC04NTksNyArODc3LDcgQEAKIHsKIAlpbnQgcmV0OwogICAgIAotCWNzX2RiZyhza3QsIDEsICJ1c2VyIGVqZWN0IHJlcXVlc3RcbiIpOworCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBlamVjdCByZXF1ZXN0XG4iKTsKIAogCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CkBAIC04ODgsNyArOTA2LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JY3NfZGJnKHNrdCwgMSwgInVzZXIgaW5zZXJ0IHJlcXVlc3RcbiIpOworCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBpbnNlcnQgcmVxdWVzdFxuIik7CiAKIAltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKaW5kZXggNzk2MTVlNi4uM2JjMDJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCkBAIC0xMDcsMjggKzEwNyw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwotZXh0ZXJuIGludCBjc19kZWJ1Z19sZXZlbChpbnQpOwotCi0jZGVmaW5lIGNzX2RiZyhza3QsIGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCVwKLQlpZiAoY3NfZGVidWdfbGV2ZWwobHZsKSkJCQlcCi0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnNrdC0+ZGV2LAlcCi0JCSAiY3M6ICIgZm10LCAjIyBhcmcpOwkJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIF9fY3NfZGJnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCQlcCi0JaWYgKGNzX2RlYnVnX2xldmVsKGx2bCkpCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAJCQlcCi0JCSAiY3M6ICIgZm10LCAjIyBhcmcpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbHNlCi0jZGVmaW5lIGNzX2RiZyhza3QsIGx2bCwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19jc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgY3NfZXJyKHNrdCwgZm10LCBhcmcuLi4pIFwKLQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmc2t0LT5kZXYsICJjczogIiBmbXQsICMjIGFyZykKLQogCiAvKgogICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWFfY29yZSI6CkBAIC0xNzAsMTAgKzE0OCw2IEBACiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY21jaWFfc29ja2V0X2xpc3Q7CiBleHRlcm4gc3RydWN0IGNsYXNzIHBjbWNpYV9zb2NrZXRfY2xhc3M7CiAKLWludCBwY21jaWFfZ2V0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJICAgICAgd2luZG93X2hhbmRsZV90ICpoYW5kbGUsCi0JCSAgICAgIGludCBpZHgsCi0JCSAgICAgIHdpbl9yZXFfdCAqcmVxKTsKIGludCBwY2NhcmRfcmVnaXN0ZXJfcGNtY2lhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjKTsKIHN0cnVjdCBwY21jaWFfc29ja2V0ICpwY21jaWFfZ2V0X3NvY2tldF9ieV9ucih1bnNpZ25lZCBpbnQgbnIpOwogCkBAIC0xOTcsOCArMTcxLDIzIEBACiAJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCXVuc2lnbmVkIGludCAqY291bnQpOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOworCisvKiBsb29wIG92ZXIgQ0lTIGVudHJpZXMgKi8KK2ludCBwY2NhcmRfbG9vcF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkgICAgICBjaXNkYXRhX3QgY29kZSwgY2lzcGFyc2VfdCAqcGFyc2UsIHZvaWQgKnByaXZfZGF0YSwKKwkJICAgICAgaW50ICgqbG9vcF90dXBsZSkgKHR1cGxlX3QgKnR1cGxlLAorCQkJCQkgY2lzcGFyc2VfdCAqcGFyc2UsCisJCQkJCSB2b2lkICpwcml2X2RhdGEpKTsKKworaW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCXR1cGxlX3QgKnR1cGxlKTsKKworaW50IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkJdHVwbGVfdCAqdHVwbGUpOworCitpbnQgcGNjYXJkX2dldF90dXBsZV9kYXRhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSk7CisKIAogLyogcnNyY19tZ3IuYyAqLwogaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggOWYzMDBkMy4uMDU4OTNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC00MSwxMjkgKzQxLDExIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBEcml2ZXIgU2VydmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKLWludCBkc19wY19kZWJ1ZzsKLQotbW9kdWxlX3BhcmFtX25hbWVkKHBjX2RlYnVnLCBkc19wY19kZWJ1ZywgaW50LCAwNjQ0KTsKLQotI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCi0JaWYgKGRzX3BjX2RlYnVnID4gKGx2bCkpCQkJCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgImRzOiAiIGZtdCAsICMjIGFyZyk7CQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBkc19kZXZfZGJnKGx2bCwgZGV2LCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCi0JaWYgKGRzX3BjX2RlYnVnID4gKGx2bCkpCQkJCQlcCi0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiZHM6ICIgZm10ICwgIyMgYXJnKTsJXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRzX2Rldl9kYmcobHZsLCBkZXYsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKIAogc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLS8qIGNvZGUgd2hpY2ggd2FzIGluIGNzLmMgYmVmb3JlICovCi0KLS8qIFN0cmluZyB0YWJsZXMgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0KLXR5cGVkZWYgc3RydWN0IGxvb2t1cF90IHsKLSAgICBjb25zdCBpbnQga2V5OwotICAgIGNvbnN0IGNoYXIgKm1zZzsKLX0gbG9va3VwX3Q7Ci0KLXN0YXRpYyBjb25zdCBsb29rdXBfdCBlcnJvcl90YWJsZVtdID0gewotICAgIHsgMCwJCQkiT3BlcmF0aW9uIHN1Y2NlZWRlZCIgfSwKLSAgICB7IC1FSU8sCQkJIklucHV0L091dHB1dCBlcnJvciIgfSwKLSAgICB7IC1FTk9ERVYsCQkJIk5vIGNhcmQgcHJlc2VudCIgfSwKLSAgICB7IC1FSU5WQUwsCQkJIkJhZCBwYXJhbWV0ZXIiIH0sCi0gICAgeyAtRUFDQ0VTLAkJCSJDb25maWd1cmF0aW9uIGxvY2tlZCIgfSwKLSAgICB7IC1FQlVTWSwJCQkiUmVzb3VyY2UgaW4gdXNlIiB9LAotICAgIHsgLUVOT1NQQywJCQkiTm8gbW9yZSBpdGVtcyIgfSwKLSAgICB7IC1FTk9NRU0sCQkJIk91dCBvZiByZXNvdXJjZSIgfSwKLX07Ci0KLQotc3RhdGljIGNvbnN0IGxvb2t1cF90IHNlcnZpY2VfdGFibGVbXSA9IHsKLSAgICB7IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwJIkFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciIgfSwKLSAgICB7IEFkZFNvY2tldFNlcnZpY2VzLAkJIkFkZFNvY2tldFNlcnZpY2VzIiB9LAotICAgIHsgQWRqdXN0UmVzb3VyY2VJbmZvLAkJIkFkanVzdFJlc291cmNlSW5mbyIgfSwKLSAgICB7IENoZWNrRXJhc2VRdWV1ZSwJCQkiQ2hlY2tFcmFzZVF1ZXVlIiB9LAotICAgIHsgQ2xvc2VNZW1vcnksCQkJIkNsb3NlTWVtb3J5IiB9LAotICAgIHsgRGVyZWdpc3RlckNsaWVudCwJCQkiRGVyZWdpc3RlckNsaWVudCIgfSwKLSAgICB7IERlcmVnaXN0ZXJFcmFzZVF1ZXVlLAkJIkRlcmVnaXN0ZXJFcmFzZVF1ZXVlIiB9LAotICAgIHsgR2V0Q2FyZFNlcnZpY2VzSW5mbywJCSJHZXRDYXJkU2VydmljZXNJbmZvIiB9LAotICAgIHsgR2V0Q2xpZW50SW5mbywJCQkiR2V0Q2xpZW50SW5mbyIgfSwKLSAgICB7IEdldENvbmZpZ3VyYXRpb25JbmZvLAkJIkdldENvbmZpZ3VyYXRpb25JbmZvIiB9LAotICAgIHsgR2V0RXZlbnRNYXNrLAkJCSJHZXRFdmVudE1hc2siIH0sCi0gICAgeyBHZXRGaXJzdENsaWVudCwJCQkiR2V0Rmlyc3RDbGllbnQiIH0sCi0gICAgeyBHZXRGaXJzdFJlZ2lvbiwJCQkiR2V0Rmlyc3RSZWdpb24iIH0sCi0gICAgeyBHZXRGaXJzdFR1cGxlLAkJCSJHZXRGaXJzdFR1cGxlIiB9LAotICAgIHsgR2V0TmV4dENsaWVudCwJCQkiR2V0TmV4dENsaWVudCIgfSwKLSAgICB7IEdldE5leHRSZWdpb24sCQkJIkdldE5leHRSZWdpb24iIH0sCi0gICAgeyBHZXROZXh0VHVwbGUsCQkJIkdldE5leHRUdXBsZSIgfSwKLSAgICB7IEdldFN0YXR1cywJCQkiR2V0U3RhdHVzIiB9LAotICAgIHsgR2V0VHVwbGVEYXRhLAkJCSJHZXRUdXBsZURhdGEiIH0sCi0gICAgeyBNYXBNZW1QYWdlLAkJCSJNYXBNZW1QYWdlIiB9LAotICAgIHsgTW9kaWZ5Q29uZmlndXJhdGlvbiwJCSJNb2RpZnlDb25maWd1cmF0aW9uIiB9LAotICAgIHsgTW9kaWZ5V2luZG93LAkJCSJNb2RpZnlXaW5kb3ciIH0sCi0gICAgeyBPcGVuTWVtb3J5LAkJCSJPcGVuTWVtb3J5IiB9LAotICAgIHsgUGFyc2VUdXBsZSwJCQkiUGFyc2VUdXBsZSIgfSwKLSAgICB7IFJlYWRNZW1vcnksCQkJIlJlYWRNZW1vcnkiIH0sCi0gICAgeyBSZWdpc3RlckNsaWVudCwJCQkiUmVnaXN0ZXJDbGllbnQiIH0sCi0gICAgeyBSZWdpc3RlckVyYXNlUXVldWUsCQkiUmVnaXN0ZXJFcmFzZVF1ZXVlIiB9LAotICAgIHsgUmVnaXN0ZXJNVEQsCQkJIlJlZ2lzdGVyTVREIiB9LAotICAgIHsgUmVsZWFzZUNvbmZpZ3VyYXRpb24sCQkiUmVsZWFzZUNvbmZpZ3VyYXRpb24iIH0sCi0gICAgeyBSZWxlYXNlSU8sCQkJIlJlbGVhc2VJTyIgfSwKLSAgICB7IFJlbGVhc2VJUlEsCQkJIlJlbGVhc2VJUlEiIH0sCi0gICAgeyBSZWxlYXNlV2luZG93LAkJCSJSZWxlYXNlV2luZG93IiB9LAotICAgIHsgUmVxdWVzdENvbmZpZ3VyYXRpb24sCQkiUmVxdWVzdENvbmZpZ3VyYXRpb24iIH0sCi0gICAgeyBSZXF1ZXN0SU8sCQkJIlJlcXVlc3RJTyIgfSwKLSAgICB7IFJlcXVlc3RJUlEsCQkJIlJlcXVlc3RJUlEiIH0sCi0gICAgeyBSZXF1ZXN0U29ja2V0TWFzaywJCSJSZXF1ZXN0U29ja2V0TWFzayIgfSwKLSAgICB7IFJlcXVlc3RXaW5kb3csCQkJIlJlcXVlc3RXaW5kb3ciIH0sCi0gICAgeyBSZXNldENhcmQsCQkJIlJlc2V0Q2FyZCIgfSwKLSAgICB7IFNldEV2ZW50TWFzaywJCQkiU2V0RXZlbnRNYXNrIiB9LAotICAgIHsgVmFsaWRhdGVDSVMsCQkJIlZhbGlkYXRlQ0lTIiB9LAotICAgIHsgV3JpdGVNZW1vcnksCQkJIldyaXRlTWVtb3J5IiB9LAotICAgIHsgQmluZERldmljZSwJCQkiQmluZERldmljZSIgfSwKLSAgICB7IEJpbmRNVEQsCQkJCSJCaW5kTVREIiB9LAotICAgIHsgUmVwb3J0RXJyb3IsCQkJIlJlcG9ydEVycm9yIiB9LAotICAgIHsgU3VzcGVuZENhcmQsCQkJIlN1c3BlbmRDYXJkIiB9LAotICAgIHsgUmVzdW1lQ2FyZCwJCQkiUmVzdW1lQ2FyZCIgfSwKLSAgICB7IEVqZWN0Q2FyZCwJCQkiRWplY3RDYXJkIiB9LAotICAgIHsgSW5zZXJ0Q2FyZCwJCQkiSW5zZXJ0Q2FyZCIgfSwKLSAgICB7IFJlcGxhY2VDSVMsCQkJIlJlcGxhY2VDSVMiIH0KLX07Ci0KLWNvbnN0IGNoYXIgKnBjbWNpYV9lcnJvcl9mdW5jKGludCBmdW5jKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VydmljZV90YWJsZSk7IGkrKykKLQkJaWYgKHNlcnZpY2VfdGFibGVbaV0ua2V5ID09IGZ1bmMpCi0JCQlyZXR1cm4gc2VydmljZV90YWJsZVtpXS5tc2c7Ci0KLQlyZXR1cm4gIlVua25vd24gc2VydmljZSBudW1iZXIiOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZXJyb3JfZnVuYyk7Ci0KLWNvbnN0IGNoYXIgKnBjbWNpYV9lcnJvcl9yZXQoaW50IHJldCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yX3RhYmxlKTsgaSsrKQotCQlpZiAoZXJyb3JfdGFibGVbaV0ua2V5ID09IHJldCkKLQkJCXJldHVybiBlcnJvcl90YWJsZVtpXS5tc2c7Ci0KLQlyZXR1cm4gInVua25vd24iOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZXJyb3JfcmV0KTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0KIHN0YXRpYyB2b2lkIHBjbWNpYV9jaGVja19kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQgPSBwX2Rydi0+aWRfdGFibGU7CkBAIC0zMDMsNyArMTg1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+ZHluaWRzLmxpc3QpOwogCi0JZHNfZGJnKDMsICJyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIGRyaXZlci0+ZHJ2Lm5hbWUpOworCXByX2RlYnVnKCJyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIGRyaXZlci0+ZHJ2Lm5hbWUpOwogCiAJZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMzIzLDcgKzIwNSw3IEBACiAgKi8KIHZvaWQgcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpCiB7Ci0JZHNfZGJnKDMsICJ1bnJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5kcnYubmFtZSk7CisJcHJfZGVidWcoInVucmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPmRydi5uYW1lKTsKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyLT5kcnYpOwogCXBjbWNpYV9mcmVlX2R5bmlkcyhkcml2ZXIpOwogfQpAQCAtMzUwLDE0ICsyMzIsMTQgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKHN0cnVjdCBrcmVmICpyZWYpCiB7CiAJc3RydWN0IGNvbmZpZ190ICpjID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGNvbmZpZ190LCByZWYpOwotCWRzX2RiZygxLCAicmVsZWFzaW5nIGNvbmZpZ190XG4iKTsKKwlwcl9kZWJ1ZygicmVsZWFzaW5nIGNvbmZpZ190XG4iKTsKIAlrZnJlZShjKTsKIH0KIAogc3RhdGljIHZvaWQgcGNtY2lhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7Ci0JZHNfZGV2X2RiZygxLCBkZXYsICJyZWxlYXNpbmcgZGV2aWNlXG4iKTsKKwlkZXZfZGJnKGRldiwgInJlbGVhc2luZyBkZXZpY2VcbiIpOwogCXBjbWNpYV9wdXRfc29ja2V0KHBfZGV2LT5zb2NrZXQpOwogCWtmcmVlKHBfZGV2LT5kZXZuYW1lKTsKIAlrcmVmX3B1dCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmLCBwY21jaWFfcmVsZWFzZV9mdW5jdGlvbik7CkBAIC0zNjcsNyArMjQ5LDcgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbWZjKQogewogCWlmICghcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZykgewotCQlkc19kZXZfZGJnKDEsICZzLT5kZXYsICJzY2hlZHVsaW5nIHRvIGFkZCAlcyBzZWNvbmRhcnkiCisJCWRldl9kYmcoJnMtPmRldiwgInNjaGVkdWxpbmcgdG8gYWRkICVzIHNlY29uZGFyeSIKIAkJICAgICAgICIgZGV2aWNlIHRvICVkXG4iLCBtZmMgPyAibWZjIiA6ICJwZmMiLCBzLT5zb2NrKTsKIAkJcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZyA9IDE7CiAJCXMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjID0gbWZjOwpAQCAtNDA1LDcgKzI4Nyw3IEBACiAJICovCiAJZGlkID0gZGV2X2dldF9kcnZkYXRhKCZwX2Rldi0+ZGV2KTsKIAotCWRzX2Rldl9kYmcoMSwgZGV2LCAidHJ5aW5nIHRvIGJpbmQgdG8gJXNcbiIsIHBfZHJ2LT5kcnYubmFtZSk7CisJZGV2X2RiZyhkZXYsICJ0cnlpbmcgdG8gYmluZCB0byAlc1xuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAogCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fAogCSAgICAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpKSB7CkBAIC00MjgsNyArMzEwLDcgQEAKIAogCXJldCA9IHBfZHJ2LT5wcm9iZShwX2Rldik7CiAJaWYgKHJldCkgewotCQlkc19kZXZfZGJnKDEsIGRldiwgImJpbmRpbmcgdG8gJXMgZmFpbGVkIHdpdGggJWRcbiIsCisJCWRldl9kYmcoZGV2LCAiYmluZGluZyB0byAlcyBmYWlsZWQgd2l0aCAlZFxuIiwKIAkJCSAgIHBfZHJ2LT5kcnYubmFtZSwgcmV0KTsKIAkJZ290byBwdXRfbW9kdWxlOwogCX0KQEAgLTQ1Niw3ICszMzgsNyBAQAogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSp0bXA7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKLQlkc19kZXZfZGJnKDIsIGxlZnRvdmVyID8gJmxlZnRvdmVyLT5kZXYgOiAmcy0+ZGV2LAorCWRldl9kYmcobGVmdG92ZXIgPyAmbGVmdG92ZXItPmRldiA6ICZzLT5kZXYsCiAJCSAgICJwY21jaWFfY2FyZF9yZW1vdmUoJWQpICVzXG4iLCBzLT5zb2NrLAogCQkgICBsZWZ0b3ZlciA/IGxlZnRvdmVyLT5kZXZuYW1lIDogIiIpOwogCkBAIC00NzUsNyArMzU3LDcgQEAKIAkJcF9kZXYtPl9yZW1vdmVkPTE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQkJZHNfZGV2X2RiZygyLCAmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKKwkJZGV2X2RiZygmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnBfZGV2LT5kZXYpOwogCX0KIApAQCAtNDkyLDcgKzM3NCw3IEBACiAJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAotCWRzX2Rldl9kYmcoMSwgZGV2LCAicmVtb3ZpbmcgZGV2aWNlXG4iKTsKKwlkZXZfZGJnKGRldiwgInJlbW92aW5nIGRldmljZVxuIik7CiAKIAkvKiBJZiB3ZSdyZSByZW1vdmluZyB0aGUgcHJpbWFyeSBtb2R1bGUgZHJpdmluZyBhCiAJICogcHNldWRvIG11bHRpLWZ1bmN0aW9uIGNhcmQsIHdlIG5lZWQgdG8gdW5iaW5kCkBAIC01NDcsNyArNDI5LDcgQEAKIAlpZiAoIXZlcnMxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCisJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwpAQCAtNTcyLDcgKzQ1NCw3IEBACiAJCX0KIAkJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKIAkJCQkgICAgICBDSVNUUExfREVWSUNFX0dFTywgZGV2Z2VvKSkgewotCQkJZHNfZGV2X2RiZygwLCAmcF9kZXYtPmRldiwKKwkJCWRldl9kYmcoJnBfZGV2LT5kZXYsCiAJCQkJICAgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgogCQkJCSAgICJGVU5DSURfTUVNT1JZXG4iKTsKIAkJCXBfZGV2LT5mdW5jX2lkID0gQ0lTVFBMX0ZVTkNJRF9NRU1PUlk7CkBAIC01ODEsOSArNDYzLDkgQEAKIAkJa2ZyZWUoZGV2Z2VvKTsKIAl9CiAKLQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBDSVNUUExfVkVSU18xLAorCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7Ci0JCWZvciAoaT0wOyBpIDwgdmVyczEtPm5zOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgdmVyczEtPm5zKTsgaSsrKSB7CiAJCQljaGFyICp0bXA7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwogCkBAIC02MjgsNyArNTEwLDcgQEAKIAogCW11dGV4X2xvY2soJmRldmljZV9hZGRfbG9jayk7CiAKLQlkc19kYmcoMywgImFkZGluZyBkZXZpY2UgdG8gJWQsIGZ1bmN0aW9uICVkXG4iLCBzLT5zb2NrLCBmdW5jdGlvbik7CisJcHJfZGVidWcoImFkZGluZyBkZXZpY2UgdG8gJWQsIGZ1bmN0aW9uICVkXG4iLCBzLT5zb2NrLCBmdW5jdGlvbik7CiAKIAkvKiBtYXggb2YgNCBkZXZpY2VzIHBlciBjYXJkICovCiAJaWYgKHMtPmRldmljZV9jb3VudCA9PSA0KQpAQCAtNjU0LDcgKzUzNiw3IEBACiAJcF9kZXYtPmRldm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInBjbWNpYSVzIiwgZGV2X25hbWUoJnBfZGV2LT5kZXYpKTsKIAlpZiAoIXBfZGV2LT5kZXZuYW1lKQogCQlnb3RvIGVycl9mcmVlOwotCWRzX2Rldl9kYmcoMywgJnBfZGV2LT5kZXYsICJkZXZuYW1lIGlzICVzXG4iLCBwX2Rldi0+ZGV2bmFtZSk7CisJZGV2X2RiZygmcF9kZXYtPmRldiwgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCkBAIC02NzcsNyArNTU5LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB7Ci0JCWRzX2Rldl9kYmcoMywgJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7CisJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7CiAJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCkBAIC03MjIsMjAgKzYwNCwyMCBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkpIHsKLQkJZHNfZGV2X2RiZygzLCAmcy0+ZGV2LAorCQlkZXZfZGJnKCZzLT5kZXYsCiAJCQkgICAibm8gcmVzb3VyY2VzIGF2YWlsYWJsZSwgZGVsYXlpbmcgY2FyZF9hZGRcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CiAKIAlpZiAocGNtY2lhX3ZhbGlkYXRlX21lbShzKSkgewotCQlkc19kZXZfZGJnKDMsICZzLT5kZXYsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCisJCWRldl9kYmcoJnMtPmRldiwgInZhbGlkYXRpbmcgbWVtIHJlc291cmNlcyBmYWlsZWQsICIKIAkJICAgICAgICJkZWxheWluZyBjYXJkX2FkZFxuIik7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZub19jaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJm5vX2NoYWlucyk7CiAJaWYgKHJldCB8fCAhbm9fY2hhaW5zKSB7Ci0JCWRzX2Rldl9kYmcoMCwgJnMtPmRldiwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTc1Niw3ICs2MzgsNyBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY21jaWFfc29ja2V0LCBkZXZpY2VfYWRkKTsKLQlkc19kZXZfZGJnKDEsICZzLT5kZXYsICJhZGRpbmcgYWRkaXRpb25hbCBkZXZpY2UgdG8gJWRcbiIsIHMtPnNvY2spOworCWRldl9kYmcoJnMtPmRldiwgImFkZGluZyBhZGRpdGlvbmFsIGRldmljZSB0byAlZFxuIiwgcy0+c29jayk7CiAJcGNtY2lhX2RldmljZV9hZGQocywgcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMpOwogCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAwOwogCXMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjID0gMDsKQEAgLTc2Niw3ICs2NDgsNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpZiAoIXBfZGV2LT5kZXYuZHJpdmVyKSB7Ci0JCWRzX2Rldl9kYmcoMSwgZGV2LCAidXBkYXRlIGRldmljZSBpbmZvcm1hdGlvblxuIik7CisJCWRldl9kYmcoZGV2LCAidXBkYXRlIGRldmljZSBpbmZvcm1hdGlvblxuIik7CiAJCXBjbWNpYV9kZXZpY2VfcXVlcnkocF9kZXYpOwogCX0KIApAQCAtNzgwLDcgKzY2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggc2t0X211dGV4IGhlbGQgKi8KLQlkc19kZXZfZGJnKDAsICZza3QtPmRldiwgInJlLXNjYW5uaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKKwlkZXZfZGJnKCZza3QtPmRldiwgInJlLXNjYW5uaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZza3QtPmRldmljZXNfbGlzdCkpCkBAIC04MzUsNyArNzE3LDcgQEAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRzX2Rldl9kYmcoMSwgJmRldi0+ZGV2LCAidHJ5aW5nIHRvIGxvYWQgQ0lTIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgInRyeWluZyB0byBsb2FkIENJUyBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGVuYW1lLCAmZGV2LT5kZXYpID09IDApIHsKIAkJaWYgKGZ3LT5zaXplID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpIHsKQEAgLTk1MywxNCArODM1LDE0IEBACiAJCSAqIGFmdGVyIGl0IGhhcyByZS1jaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gcG9zc2libGUgbW9kdWxlCiAJCSAqIHdpdGggYSBwcm9kX2lkL21hbmZfaWQvY2FyZF9pZCBtYXRjaC4KIAkJICovCi0JCWRzX2Rldl9kYmcoMCwgJmRldi0+ZGV2LAorCQlkZXZfZGJnKCZkZXYtPmRldiwKIAkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBpbnRlcmFjdGlvblxuIik7CiAJCWlmICghZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoKQogCQkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0ZBS0VfQ0lTKSB7Ci0JCWRzX2Rldl9kYmcoMCwgJmRldi0+ZGV2LCAiZGV2aWNlIG5lZWRzIGEgZmFrZSBDSVNcbiIpOworCQlkZXZfZGJnKCZkZXYtPmRldiwgImRldmljZSBuZWVkcyBhIGZha2UgQ0lTXG4iKTsKIAkJaWYgKCFkZXYtPnNvY2tldC0+ZmFrZV9jaXMpCiAJCQlwY21jaWFfbG9hZF9maXJtd2FyZShkZXYsIGRpZC0+Y2lzZmlsZSk7CiAKQEAgLTk5Miw5ICs4NzQsOSBAQAogCS8qIG1hdGNoIGR5bmFtaWMgZGV2aWNlcyBmaXJzdCAqLwogCXNwaW5fbG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCAmcF9kcnYtPmR5bmlkcy5saXN0LCBub2RlKSB7Ci0JCWRzX2Rldl9kYmcoMywgZGV2LCAidHJ5aW5nIHRvIG1hdGNoIHRvICVzXG4iLCBkcnYtPm5hbWUpOworCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgJmR5bmlkLT5pZCkpIHsKLQkJCWRzX2Rldl9kYmcoMCwgZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKKwkJCWRldl9kYmcoZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTEwMDQsMTUgKzg4NiwxNSBAQAogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAkvKiBtYXRjaGluZyBieSBjYXJkbWdyICovCiAJaWYgKHBfZGV2LT5jYXJkbWdyID09IHBfZHJ2KSB7Ci0JCWRzX2Rldl9kYmcoMCwgZGV2LCAiY2FyZG1nciBtYXRjaGVkIHRvICVzXG4iLCBkcnYtPm5hbWUpOworCQlkZXZfZGJnKGRldiwgImNhcmRtZ3IgbWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQogI2VuZGlmCiAKIAl3aGlsZSAoZGlkICYmIGRpZC0+bWF0Y2hfZmxhZ3MpIHsKLQkJZHNfZGV2X2RiZygzLCBkZXYsICJ0cnlpbmcgdG8gbWF0Y2ggdG8gJXNcbiIsIGRydi0+bmFtZSk7CisJCWRldl9kYmcoZGV2LCAidHJ5aW5nIHRvIG1hdGNoIHRvICVzXG4iLCBkcnYtPm5hbWUpOwogCQlpZiAocGNtY2lhX2Rldm1hdGNoKHBfZGV2LCBkaWQpKSB7Ci0JCQlkc19kZXZfZGJnKDAsIGRldiwgIm1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7CisJCQlkZXZfZGJnKGRldiwgIm1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlkaWQrKzsKQEAgLTEyMTgsNyArMTEwMCw3IEBACiAJaWYgKHBfZGV2LT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCi0JZHNfZGV2X2RiZygyLCBkZXYsICJzdXNwZW5kaW5nXG4iKTsKKwlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmdcbiIpOwogCiAJaWYgKGRldi0+ZHJpdmVyKQogCQlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwpAQCAtMTIzOCw3ICsxMTIwLDcgQEAKIAl9CiAKIAlpZiAocF9kZXYtPmRldmljZV9ubyA9PSBwX2Rldi0+ZnVuYykgewotCQlkc19kZXZfZGJnKDIsIGRldiwgInJlbGVhc2luZyBjb25maWd1cmF0aW9uXG4iKTsKKwkJZGV2X2RiZyhkZXYsICJyZWxlYXNpbmcgY29uZmlndXJhdGlvblxuIik7CiAJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOwogCX0KIApAQCAtMTI1OCw3ICsxMTQwLDcgQEAKIAlpZiAoIXBfZGV2LT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCi0JZHNfZGV2X2RiZygyLCBkZXYsICJyZXN1bWluZ1xuIik7CisJZGV2X2RiZyhkZXYsICJyZXN1bWluZ1xuIik7CiAKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihkZXYtPmRyaXZlcik7CkBAIC0xMjY3LDcgKzExNDksNyBAQAogCQlnb3RvIG91dDsKIAogCWlmIChwX2Rldi0+ZGV2aWNlX25vID09IHBfZGV2LT5mdW5jKSB7Ci0JCWRzX2Rldl9kYmcoMiwgZGV2LCAicmVxdWVzdGluZyBjb25maWd1cmF0aW9uXG4iKTsKKwkJZGV2X2RiZyhkZXYsICJyZXF1ZXN0aW5nIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHBfZGV2LCAmcF9kZXYtPmNvbmYpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CkBAIC0xMzA5LDE0ICsxMTkxLDE0IEBACiAKIHN0YXRpYyBpbnQgcGNtY2lhX2J1c19yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlkc19kZXZfZGJnKDIsICZza3QtPmRldiwgInJlc3VtaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKKwlkZXZfZGJnKCZza3QtPmRldiwgInJlc3VtaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKIAlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIHNrdCwgcGNtY2lhX2J1c19yZXN1bWVfY2FsbGJhY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjbWNpYV9idXNfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCWRzX2Rldl9kYmcoMiwgJnNrdC0+ZGV2LCAic3VzcGVuZGluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CisJZGV2X2RiZygmc2t0LT5kZXYsICJzdXNwZW5kaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKIAlpZiAoYnVzX2Zvcl9lYWNoX2RldigmcGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsCiAJCQkgICAgIHBjbWNpYV9idXNfc3VzcGVuZF9jYWxsYmFjaykpIHsKIAkJcGNtY2lhX2J1c19yZXN1bWUoc2t0KTsKQEAgLTEzNDgsNyArMTIzMCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRzX2Rldl9kYmcoMSwgJnNrdC0+ZGV2LCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCisJZGV2X2RiZygmc2t0LT5kZXYsICJkc19ldmVudCgweCUwNngsICVkLCAweCVwKVxuIiwKIAkJICAgZXZlbnQsIHByaW9yaXR5LCBza3QpOwogCiAJc3dpdGNoIChldmVudCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCBiOTA2YWJlLi5jMTNmZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtNjMsMjEgKzYzLDYgQEAKICNpbmNsdWRlICJ2ZzQ2OC5oIgogI2luY2x1ZGUgInJpY29oLmgiCiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCi1zdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQotImk4MjM2NS5jIDEuMjY1IDE5OTkvMTEvMTAgMTg6MzY6MjEgKERhdmlkIEhpbmRzKSI7Ci0KLXN0YXRpYyBpbnQgcGNfZGVidWc7Ci0KLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKLQotI2RlZmluZSBkZWJ1ZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCVwKLQlpZiAocGNfZGVidWcgPiAobHZsKSkJCQkJCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgImk4MjM2NTogIiBmbXQgLCAjIyBhcmcpOwlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpMzY1X2NvdW50X2lycShpbnQsIHZvaWQgKik7CiBzdGF0aWMgaW5saW5lIGludCBfY2hlY2tfaXJxKGludCBpcnEsIGludCBmbGFncykKQEAgLTUwMSwxMyArNDg2LDEzIEBACiB7CiAgICAgaTM2NV9nZXQoaXJxX3NvY2ssIEkzNjVfQ1NDKTsKICAgICBpcnFfaGl0cysrOwotICAgIGRlYnVnKDIsICItPiBoaXQgb24gaXJxICVkXG4iLCBpcnEpOworICAgIHByX2RlYnVnKCJpODIzNjU6IC0+IGhpdCBvbiBpcnEgJWRcbiIsIGlycSk7CiAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgdV9pbnQgX19pbml0IHRlc3RfaXJxKHVfc2hvcnQgc29jaywgaW50IGlycSkKIHsKLSAgICBkZWJ1ZygyLCAiICB0ZXN0aW5nIElTQSBpcnEgJWRcbiIsIGlycSk7CisgICAgcHJfZGVidWcoImk4MjM2NTogIHRlc3RpbmcgSVNBIGlycSAlZFxuIiwgaXJxKTsKICAgICBpZiAocmVxdWVzdF9pcnEoaXJxLCBpMzY1X2NvdW50X2lycSwgSVJRRl9QUk9CRV9TSEFSRUQsICJzY2FuIiwKIAkJCWkzNjVfY291bnRfaXJxKSAhPSAwKQogCXJldHVybiAxOwpAQCAtNTE1LDcgKzUwMCw3IEBACiAgICAgbXNsZWVwKDEwKTsKICAgICBpZiAoaXJxX2hpdHMpIHsKIAlmcmVlX2lycShpcnEsIGkzNjVfY291bnRfaXJxKTsKLQlkZWJ1ZygyLCAiICAgIHNwdXJpb3VzIGhpdCFcbiIpOworCXByX2RlYnVnKCJpODIzNjU6ICAgIHNwdXJpb3VzIGhpdCFcbiIpOwogCXJldHVybiAxOwogICAgIH0KIApAQCAtNTI4LDcgKzUxMyw3IEBACiAKICAgICAvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAgICAgaTM2NV9zZXQoc29jaywgSTM2NV9DU0NJTlQsIDApOwotICAgIGRlYnVnKDIsICIgICAgaGl0cyA9ICVkXG4iLCBpcnFfaGl0cyk7CisgICAgcHJfZGVidWcoImk4MjM2NTogICAgaGl0cyA9ICVkXG4iLCBpcnFfaGl0cyk7CiAgICAgCiAgICAgcmV0dXJuIChpcnFfaGl0cyAhPSAxKTsKIH0KQEAgLTg1NCw3ICs4MzksNyBAQAogICAgIHVfbG9uZyBmbGFncyA9IDA7CiAgICAgaW50IGhhbmRsZWQgPSAwOwogCi0gICAgZGVidWcoNCwgInBjaWNfaW50ZXJydXB0KCVkKVxuIiwgaXJxKTsKKyAgICBwcl9kZWJ1ZygicGNpY19pbnRlcnJ1cHQoJWQpXG4iLCBpcnEpOwogCiAgICAgZm9yIChqID0gMDsgaiA8IDIwOyBqKyspIHsKIAlhY3RpdmUgPSAwOwpAQCAtODc4LDcgKzg2Myw3IEBACiAJCWV2ZW50cyB8PSAoY3NjICYgSTM2NV9DU0NfUkVBRFkpID8gU1NfUkVBRFkgOiAwOwogCSAgICB9CiAJICAgIElTQV9VTkxPQ0soaSwgZmxhZ3MpOwotCSAgICBkZWJ1ZygyLCAic29ja2V0ICVkIGV2ZW50IDB4JTAyeFxuIiwgaSwgZXZlbnRzKTsKKwkgICAgcHJfZGVidWcoInNvY2tldCAlZCBldmVudCAweCUwMnhcbiIsIGksIGV2ZW50cyk7CiAKIAkgICAgaWYgKGV2ZW50cykKIAkJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29ja2V0W2ldLnNvY2tldCwgZXZlbnRzKTsKQEAgLTg5MCw3ICs4NzUsNyBAQAogICAgIGlmIChqID09IDIwKQogCXByaW50ayhLRVJOX05PVElDRSAiaTgyMzY1OiBpbmZpbml0ZSBsb29wIGluIGludGVycnVwdCBoYW5kbGVyXG4iKTsKIAotICAgIGRlYnVnKDQsICJpbnRlcnJ1cHQgZG9uZVxuIik7CisgICAgcHJfZGVidWcoInBjaWNfaW50ZXJydXB0IGRvbmVcbiIpOwogICAgIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfSAvKiBwY2ljX2ludGVycnVwdCAqLwogCkBAIC05MzIsNyArOTE3LDcgQEAKIAl9CiAgICAgfQogICAgIAotICAgIGRlYnVnKDEsICJHZXRTdGF0dXMoJWQpID0gJSM0LjR4XG4iLCBzb2NrLCAqdmFsdWUpOworICAgIHByX2RlYnVnKCJHZXRTdGF0dXMoJWQpID0gJSM0LjR4XG4iLCBzb2NrLCAqdmFsdWUpOwogICAgIHJldHVybiAwOwogfSAvKiBpMzY1X2dldF9zdGF0dXMgKi8KIApAQCAtOTQzLDcgKzkyOCw3IEBACiAgICAgc3RydWN0IGk4MjM2NV9zb2NrZXQgKnQgPSAmc29ja2V0W3NvY2tdOwogICAgIHVfY2hhciByZWc7CiAgICAgCi0gICAgZGVidWcoMSwgIlNldFNvY2tldCglZCwgZmxhZ3MgJSMzLjN4LCBWY2MgJWQsIFZwcCAlZCwgIgorICAgIHByX2RlYnVnKCJTZXRTb2NrZXQoJWQsIGZsYWdzICUjMy4zeCwgVmNjICVkLCBWcHAgJWQsICIKIAkgICJpb19pcnEgJWQsIGNzY19tYXNrICUjMi4yeClcbiIsIHNvY2ssIHN0YXRlLT5mbGFncywKIAkgIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsIHN0YXRlLT5pb19pcnEsIHN0YXRlLT5jc2NfbWFzayk7CiAgICAgCkBAIC0xMDUyLDkgKzEwMzcsOSBAQAogewogICAgIHVfY2hhciBtYXAsIGlvY3RsOwogICAgIAotICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKyAgICBwcl9kZWJ1ZygiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCisJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsIGlvLT5zcGVlZCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKICAgICBtYXAgPSBpby0+bWFwOwogICAgIGlmICgobWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwpAQCAtMTA4Miw3ICsxMDY3LDcgQEAKICAgICB1X3Nob3J0IGJhc2UsIGk7CiAgICAgdV9jaGFyIG1hcDsKICAgICAKLSAgICBkZWJ1ZygxLCAiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgJSNsbHgtJSNsbHgsICIKKyAgICBwcl9kZWJ1ZygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgJSNsbHgtJSNsbHgsICIKIAkgICIlI3gpXG4iLCBzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywgbWVtLT5zcGVlZCwKIAkgICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5yZXMtPnN0YXJ0LAogCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnJlcy0+ZW5kLCBtZW0tPmNhcmRfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggZDFkODljNC4uMjZhNjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC0zOCwxNyArMzgsNiBAQAogCiAjaW5jbHVkZSAibTMycl9jZmMuaCIKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgbTMycl9jZmNfZGVidWc7Ci1tb2R1bGVfcGFyYW0obTMycl9jZmNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIGRlYnVnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCQkJXAotCWlmIChtMzJyX2NmY19kZWJ1ZyA+IChsdmwpKQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJtMzJyX2NmYzogIiBmbXQgLCAjIyBhcmcpOwlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KIC8qIFBvbGwgc3RhdHVzIGludGVydmFsIC0tIDAgbWVhbnMgZGVmYXVsdCB0byBpbnRlcnJ1cHQgKi8KIHN0YXRpYyBpbnQgcG9sbF9pbnRlcnZhbCA9IDA7CiAKQEAgLTEyMyw3ICsxMTIsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX2lvcmVhZF9ieXRlOiBzb2NrPSVkLCBwb3J0PSUjbHgsIGJ1Zj0lcCwgIgorCXByX2RlYnVnKCJtMzJyX2NmYzogcGNjX2lvcmVhZF9ieXRlOiBzb2NrPSVkLCBwb3J0PSUjbHgsIGJ1Zj0lcCwgIgogCQkgInNpemU9JXUsIG5tZW1iPSVkLCBmbGFnPSVkXG4iLAogCQkgIHNvY2ssIHBvcnQsIGJ1Ziwgc2l6ZSwgbm1lbWIsIGZsYWcpOwogCkBAIC0xMzIsNyArMTIxLDcgQEAKIAkJcHJpbnRrKCJtMzJyX2NmYzppb3JlYWRfYnl0ZSBudWxsIHBvcnQgOiUjbHhcbiIscG9ydCk7CiAJCXJldHVybjsKIAl9Ci0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW9yZWFkX2J5dGU6IGFkZHI9JSNseFxuIiwgYWRkcik7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBwY2NfaW9yZWFkX2J5dGU6IGFkZHI9JSNseFxuIiwgYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGNjX2xvY2ssIGZsYWdzKTsKIAkvKiByZWFkIEJ5dGUgKi8KQEAgLTE0OCw3ICsxMzcsNyBAQAogCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW9yZWFkX3dvcmQ6IHNvY2s9JWQsIHBvcnQ9JSNseCwgIgorCXByX2RlYnVnKCJtMzJyX2NmYzogcGNjX2lvcmVhZF93b3JkOiBzb2NrPSVkLCBwb3J0PSUjbHgsICIKIAkJICJidWY9JXAsIHNpemU9JXUsIG5tZW1iPSVkLCBmbGFnPSVkXG4iLAogCQkgc29jaywgcG9ydCwgYnVmLCBzaXplLCBubWVtYiwgZmxhZyk7CiAKQEAgLTE2Myw3ICsxNTIsNyBAQAogCQlwcmludGsoIm0zMnJfY2ZjOmlvcmVhZF93b3JkIG51bGwgcG9ydCA6JSNseFxuIixwb3J0KTsKIAkJcmV0dXJuOwogCX0KLQlkZWJ1ZygzLCAibTMycl9jZmM6IHBjY19pb3JlYWRfd29yZDogYWRkcj0lI2x4XG4iLCBhZGRyKTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IHBjY19pb3JlYWRfd29yZDogYWRkcj0lI2x4XG4iLCBhZGRyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2NfbG9jaywgZmxhZ3MpOwogCS8qIHJlYWQgV29yZCAqLwpAQCAtMTc5LDcgKzE2OCw3IEBACiAJdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW93cml0ZV9ieXRlOiBzb2NrPSVkLCBwb3J0PSUjbHgsICIKKwlwcl9kZWJ1ZygibTMycl9jZmM6IHBjY19pb3dyaXRlX2J5dGU6IHNvY2s9JWQsIHBvcnQ9JSNseCwgIgogCQkgImJ1Zj0lcCwgc2l6ZT0ldSwgbm1lbWI9JWQsIGZsYWc9JWRcbiIsCiAJCSBzb2NrLCBwb3J0LCBidWYsIHNpemUsIG5tZW1iLCBmbGFnKTsKIApAQCAtMTg5LDcgKzE3OCw3IEBACiAJCXByaW50aygibTMycl9jZmM6aW93cml0ZV9ieXRlIG51bGwgcG9ydDolI2x4XG4iLHBvcnQpOwogCQlyZXR1cm47CiAJfQotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX2lvd3JpdGVfYnl0ZTogYWRkcj0lI2x4XG4iLCBhZGRyKTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IHBjY19pb3dyaXRlX2J5dGU6IGFkZHI9JSNseFxuIiwgYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGNjX2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAobm1lbWItLSkKQEAgLTIwNCw3ICsxOTMsNyBAQAogCXVuc2lnbmVkIHNob3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW93cml0ZV93b3JkOiBzb2NrPSVkLCBwb3J0PSUjbHgsICIKKwlwcl9kZWJ1ZygibTMycl9jZmM6IHBjY19pb3dyaXRlX3dvcmQ6IHNvY2s9JWQsIHBvcnQ9JSNseCwgIgogCQkgImJ1Zj0lcCwgc2l6ZT0ldSwgbm1lbWI9JWQsIGZsYWc9JWRcbiIsCiAJCSBzb2NrLCBwb3J0LCBidWYsIHNpemUsIG5tZW1iLCBmbGFnKTsKIApAQCAtMjI2LDcgKzIxNSw3IEBACiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQlkZWJ1ZygzLCAibTMycl9jZmM6IHBjY19pb3dyaXRlX3dvcmQ6IGFkZHI9JSNseFxuIiwgYWRkcik7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBwY2NfaW93cml0ZV93b3JkOiBhZGRyPSUjbHhcbiIsIGFkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjY19sb2NrLCBmbGFncyk7CiAJd2hpbGUgKG5tZW1iLS0pCkBAIC0yNjIsNyArMjUxLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNjX2dldCh1X3Nob3J0IHNvY2ssIHVuc2lnbmVkIGludCByZWcpCiB7CiAJdW5zaWduZWQgaW50IHZhbCA9IGludyhyZWcpOwotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX2dldDogcmVnKDB4JTA4eCk9MHglMDR4XG4iLCByZWcsIHZhbCk7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBwY2NfZ2V0OiByZWcoMHglMDh4KT0weCUwNHhcbiIsIHJlZywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0yNzAsNyArMjU5LDcgQEAKIHN0YXRpYyB2b2lkIHBjY19zZXQodV9zaG9ydCBzb2NrLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKIAlvdXR3KGRhdGEsIHJlZyk7Ci0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2Nfc2V0OiByZWcoMHglMDh4KT0weCUwNHhcbiIsIHJlZywgZGF0YSk7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBwY2Nfc2V0OiByZWcoMHglMDh4KT0weCUwNHhcbiIsIHJlZywgZGF0YSk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjg2LDE0ICsyNzUsMTQgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdDsKIAotCWRlYnVnKDMsICJtMzJyX2NmYzogaXNfYWxpdmU6XG4iKTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IGlzX2FsaXZlOlxuIik7CiAKIAlwcmludGsoIkNGOiAiKTsKIAlzdGF0ID0gcGNjX2dldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRlNUUyk7CiAJaWYgKCFzdGF0KQogCQlwcmludGsoIk5vICIpOwogCXByaW50aygiQ2FyZCBpcyBkZXRlY3RlZCBhdCBzb2NrZXQgJWQgOiBzdGF0ID0gMHglMDh4XG4iLCBzb2NrLCBzdGF0KTsKLQlkZWJ1ZygzLCAibTMycl9jZmM6IGlzX2FsaXZlOiBzb2NrIHN0YXQgaXMgMHglMDR4XG4iLCBzdGF0KTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IGlzX2FsaXZlOiBzb2NrIHN0YXQgaXMgMHglMDR4XG4iLCBzdGF0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDcgKzI5Miw3IEBACiB7CiAJcGNjX3NvY2tldF90ICp0ID0gJnNvY2tldFtwY2Nfc29ja2V0c107CiAKLQlkZWJ1ZygzLCAibTMycl9jZmM6IGFkZF9wY2Nfc29ja2V0OiBiYXNlPSUjbHgsIGlycT0lZCwgIgorCXByX2RlYnVnKCJtMzJyX2NmYzogYWRkX3BjY19zb2NrZXQ6IGJhc2U9JSNseCwgaXJxPSVkLCAiCiAJCSAibWFwYWRkcj0lI2x4LCBpb2FkZHI9JTA4eFxuIiwKIAkJIGJhc2UsIGlycSwgbWFwYWRkciwgaW9hZGRyKTsKIApAQCAtMzU4LDcgKzM0Nyw3IEBACiAJLyogZWplY3QgaW50ZXJydXB0ICovCiAJcmVxdWVzdF9pcnEoaXJxKzEsIHBjY19pbnRlcnJ1cHQsIDAsICJtMzJyX2NmYyIsIHBjY19pbnRlcnJ1cHQpOwogI2VuZGlmCi0JZGVidWcoMywgIm0zMnJfY2ZjOiBlbmFibGUgQ0ZNU0ssIFJEWVNFTFxuIik7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBlbmFibGUgQ0ZNU0ssIFJEWVNFTFxuIik7CiAJcGNjX3NldChwY2Nfc29ja2V0cywgKHVuc2lnbmVkIGludClQTERfQ0ZJTUFTSywgMHgwMSk7CiAjZW5kaWYJLyogQ09ORklHX1BMQVRfVVNSViAqLwogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikgfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCkBAIC0zNzgsMjYgKzM2NywyNiBAQAogCXVfaW50IGV2ZW50cyA9IDA7CiAJaW50IGhhbmRsZWQgPSAwOwogCi0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW50ZXJydXB0OiBpcnE9JWQsIGRldj0lcFxuIiwgaXJxLCBkZXYpOworCXByX2RlYnVnKCJtMzJyX2NmYzogcGNjX2ludGVycnVwdDogaXJxPSVkLCBkZXY9JXBcbiIsIGlycSwgZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgcGNjX3NvY2tldHM7IGkrKykgewogCQlpZiAoc29ja2V0W2ldLmNzX2lycTEgIT0gaXJxICYmIHNvY2tldFtpXS5jc19pcnEyICE9IGlycSkKIAkJCWNvbnRpbnVlOwogCiAJCWhhbmRsZWQgPSAxOwotCQlkZWJ1ZygzLCAibTMycl9jZmM6IHBjY19pbnRlcnJ1cHQ6IHNvY2tldCAlZCBpcnEgMHglMDJ4ICIsCisJCXByX2RlYnVnKCJtMzJyX2NmYzogcGNjX2ludGVycnVwdDogc29ja2V0ICVkIGlycSAweCUwMnggIiwKIAkJCWksIGlycSk7CiAJCWV2ZW50cyB8PSBTU19ERVRFQ1Q7CS8qIGluc2VydCBvciBlamVjdCAqLwogCQlpZiAoZXZlbnRzKQogCQkJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29ja2V0W2ldLnNvY2tldCwgZXZlbnRzKTsKIAl9Ci0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW50ZXJydXB0OiBkb25lXG4iKTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IHBjY19pbnRlcnJ1cHQ6IGRvbmVcbiIpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9IC8qIHBjY19pbnRlcnJ1cHQgKi8KIAogc3RhdGljIHZvaWQgcGNjX2ludGVycnVwdF93cmFwcGVyKHVfbG9uZyBkYXRhKQogewotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX2ludGVycnVwdF93cmFwcGVyOlxuIik7CisJcHJfZGVidWcoIm0zMnJfY2ZjOiBwY2NfaW50ZXJydXB0X3dyYXBwZXI6XG4iKTsKIAlwY2NfaW50ZXJydXB0KDAsIE5VTEwpOwogCWluaXRfdGltZXIoJnBvbGxfdGltZXIpOwogCXBvbGxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBwb2xsX2ludGVydmFsOwpAQCAtNDEwLDE3ICszOTksMTcgQEAKIHsKIAl1X2ludCBzdGF0dXM7CiAKLQlkZWJ1ZygzLCAibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czpcbiIpOworCXByX2RlYnVnKCJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOlxuIik7CiAJc3RhdHVzID0gcGNjX2dldChzb2NrLCAodW5zaWduZWQgaW50KVBMRF9DRlNUUyk7CiAJKnZhbHVlID0gKHN0YXR1cykgPyBTU19ERVRFQ1QgOiAwOwotIAlkZWJ1ZygzLCAibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czogc3RhdHVzPTB4JTA4eFxuIiwgc3RhdHVzKTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czogc3RhdHVzPTB4JTA4eFxuIiwgc3RhdHVzKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikgfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCiAJaWYgKCBzdGF0dXMgKSB7CiAJCS8qIGVuYWJsZSBDRiBwb3dlciAqLwogCQlzdGF0dXMgPSBpbncoKHVuc2lnbmVkIGludClQTERfQ1BDUik7CiAJCWlmICghKHN0YXR1cyAmIFBMRF9DUENSX0NGKSkgewotCQkJZGVidWcoMywgIm0zMnJfY2ZjOiBfcGNjX2dldF9zdGF0dXM6ICIKKwkJCXByX2RlYnVnKCJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOiAiCiAJCQkJICJwb3dlciBvbiAoQ1BDUj0weCUwOHgpXG4iLCBzdGF0dXMpOwogCQkJc3RhdHVzIHw9IFBMRF9DUENSX0NGOwogCQkJb3V0dyhzdGF0dXMsICh1bnNpZ25lZCBpbnQpUExEX0NQQ1IpOwpAQCAtNDM5LDcgKzQyOCw3IEBACiAJCXN0YXR1cyAmPSB+UExEX0NQQ1JfQ0Y7CiAJCW91dHcoc3RhdHVzLCAodW5zaWduZWQgaW50KVBMRF9DUENSKTsKIAkJdWRlbGF5KDEwMCk7Ci0JCWRlYnVnKDMsICJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOiAiCisJCXByX2RlYnVnKCJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOiAiCiAJCQkgInBvd2VyIG9mZiAoQ1BDUj0weCUwOHgpXG4iLCBzdGF0dXMpOwogCX0KICNlbGlmIGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMykKQEAgLTQ2NSwxMyArNDU0LDEzIEBACiAJCS8qIGRpc2FibGUgQ0YgcG93ZXIgKi8KIAkgICAgICAgIHBjY19zZXQoc29jaywgKHVuc2lnbmVkIGludClQTERfQ1BDUiwgMCk7CiAJCXVkZWxheSgxMDApOwotCQlkZWJ1ZygzLCAibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czogIgorCQlwcl9kZWJ1ZygibTMycl9jZmM6IF9wY2NfZ2V0X3N0YXR1czogIgogCQkJICJwb3dlciBvZmYgKENQQ1I9MHglMDh4KVxuIiwgc3RhdHVzKTsKIAl9CiAjZWxzZQogI2Vycm9yIG5vIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24KICNlbmRpZgotCWRlYnVnKDMsICJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOiBHZXRTdGF0dXMoJWQpID0gJSM0LjR4XG4iLAorCXByX2RlYnVnKCJtMzJyX2NmYzogX3BjY19nZXRfc3RhdHVzOiBHZXRTdGF0dXMoJWQpID0gJSM0LjR4XG4iLAogCQkgc29jaywgKnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0gLyogX2dldF9zdGF0dXMgKi8KQEAgLTQ4MCw3ICs0NjksNyBAQAogCiBzdGF0aWMgaW50IF9wY2Nfc2V0X3NvY2tldCh1X3Nob3J0IHNvY2ssIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKLQlkZWJ1ZygzLCAibTMycl9jZmM6IFNldFNvY2tldCglZCwgZmxhZ3MgJSMzLjN4LCBWY2MgJWQsIFZwcCAlZCwgIgorCXByX2RlYnVnKCJtMzJyX2NmYzogU2V0U29ja2V0KCVkLCBmbGFncyAlIzMuM3gsIFZjYyAlZCwgVnBwICVkLCAiCiAJCSAgImlvX2lycSAlZCwgY3NjX21hc2sgJSMyLjJ4KVxuIiwgc29jaywgc3RhdGUtPmZsYWdzLAogCQkgIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsIHN0YXRlLT5pb19pcnEsIHN0YXRlLT5jc2NfbWFzayk7CiAKQEAgLTQ5Miw0MSArNDgxLDM5IEBACiAJfQogI2VuZGlmCiAJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7Ci0JCWRlYnVnKDMsICI6UkVTRVRcbiIpOworCQlwcl9kZWJ1ZygiOlJFU0VUXG4iKTsKIAkJcGNjX3NldChzb2NrLCh1bnNpZ25lZCBpbnQpUExEX0NGUlNUQ1IsMHgxMDEpOwogCX1lbHNlewogCQlwY2Nfc2V0KHNvY2ssKHVuc2lnbmVkIGludClQTERfQ0ZSU1RDUiwweDEwMCk7CiAJfQogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19PVVRQVVRfRU5BKXsKLQkJZGVidWcoMywgIjpPVVRQVVRfRU5BXG4iKTsKKwkJcHJfZGVidWcoIjpPVVRQVVRfRU5BXG4iKTsKIAkJLyogYml0IGNsZWFyICovCiAJCXBjY19zZXQoc29jaywodW5zaWduZWQgaW50KVBMRF9DRkJVRkNSLDApOwogCX0gZWxzZSB7CiAJCXBjY19zZXQoc29jaywodW5zaWduZWQgaW50KVBMRF9DRkJVRkNSLDEpOwogCX0KIAotI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIAlpZihzdGF0ZS0+ZmxhZ3MgJiBTU19JT0NBUkQpewotCQlkZWJ1ZygzLCAiOklPQ0FSRCIpOworCQlwcl9kZWJ1ZygiOklPQ0FSRCIpOwogCX0KIAlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUFdSX0FVVE8pIHsKLQkJZGVidWcoMywgIjpQV1JfQVVUTyIpOworCQlwcl9kZWJ1ZygiOlBXUl9BVVRPIik7CiAJfQogCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19ERVRFQ1QpCi0JCWRlYnVnKDMsICI6Y3NjLVNTX0RFVEVDVCIpOworCQlwcl9kZWJ1ZygiOmNzYy1TU19ERVRFQ1QiKTsKIAlpZiAoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKSB7CiAJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19TVFNDSEcpCi0JCQlkZWJ1ZygzLCAiOlNUU0NIRyIpOworCQkJcHJfZGVidWcoIjpTVFNDSEciKTsKIAl9IGVsc2UgewogCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfQkFUREVBRCkKLQkJCWRlYnVnKDMsICI6QkFUREVBRCIpOworCQkJcHJfZGVidWcoIjpCQVRERUFEIik7CiAJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRXQVJOKQotCQkJZGVidWcoMywgIjpCQVRXQVJOIik7CisJCQlwcl9kZWJ1ZygiOkJBVFdBUk4iKTsKIAkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX1JFQURZKQotCQkJZGVidWcoMywgIjpSRUFEWSIpOworCQkJcHJfZGVidWcoIjpSRUFEWSIpOwogCX0KLQlkZWJ1ZygzLCAiXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJcbiIpOwogCXJldHVybiAwOwogfSAvKiBfc2V0X3NvY2tldCAqLwogCkBAIC01MzYsOSArNTIzLDEwIEBACiB7CiAJdV9jaGFyIG1hcDsKIAotCWRlYnVnKDMsICJtMzJyX2NmYzogU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAgIiUjbHgtJSNseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCXByX2RlYnVnKCJtMzJyX2NmYzogU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTUzLDkgKzU0MSwxMCBAQAogCXVfbG9uZyBhZGRyOwogCXBjY19zb2NrZXRfdCAqdCA9ICZzb2NrZXRbc29ja107CiAKLQlkZWJ1ZygzLCAibTMycl9jZmM6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCi0JCSBtZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwlwcl9kZWJ1ZygibTMycl9jZmM6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKKwkJICIlI2xseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAorCQkgbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJIG1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKgogCSAqIHNhbml0eSBjaGVjawpAQCAtNjM4LDExICs2MjcsMTEgQEAKIAl1bnNpZ25lZCBpbnQgc29jayA9IGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgcGNjX3NvY2tldCwgc29ja2V0KS0+bnVtYmVyOwogCiAJaWYgKHNvY2tldFtzb2NrXS5mbGFncyAmIElTX0FMSVZFKSB7Ci0JCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX2dldF9zdGF0dXM6IHNvY2soJWQpIC1FSU5WQUxcbiIsIHNvY2spOworCQlkZXZfZGJnKCZzLT5kZXYsICJwY2NfZ2V0X3N0YXR1czogc29jayglZCkgLUVJTlZBTFxuIiwgc29jayk7CiAJCSp2YWx1ZSA9IDA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkZWJ1ZygzLCAibTMycl9jZmM6IHBjY19nZXRfc3RhdHVzOiBzb2NrKCVkKVxuIiwgc29jayk7CisJZGV2X2RiZygmcy0+ZGV2LCAicGNjX2dldF9zdGF0dXM6IHNvY2soJWQpXG4iLCBzb2NrKTsKIAlMT0NLRUQoX3BjY19nZXRfc3RhdHVzKHNvY2ssIHZhbHVlKSk7CiB9CiAKQEAgLTY1MSwxMCArNjQwLDEwIEBACiAJdW5zaWduZWQgaW50IHNvY2sgPSBjb250YWluZXJfb2Yocywgc3RydWN0IHBjY19zb2NrZXQsIHNvY2tldCktPm51bWJlcjsKIAogCWlmIChzb2NrZXRbc29ja10uZmxhZ3MgJiBJU19BTElWRSkgewotCQlkZWJ1ZygzLCAibTMycl9jZmM6IHBjY19zZXRfc29ja2V0OiBzb2NrKCVkKSAtRUlOVkFMXG4iLCBzb2NrKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAicGNjX3NldF9zb2NrZXQ6IHNvY2soJWQpIC1FSU5WQUxcbiIsIHNvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2Nfc2V0X3NvY2tldDogc29jayglZClcbiIsIHNvY2spOworCWRldl9kYmcoJnMtPmRldiwgInBjY19zZXRfc29ja2V0OiBzb2NrKCVkKVxuIiwgc29jayk7CiAJTE9DS0VEKF9wY2Nfc2V0X3NvY2tldChzb2NrLCBzdGF0ZSkpOwogfQogCkBAIC02NjMsMTAgKzY1MiwxMCBAQAogCXVuc2lnbmVkIGludCBzb2NrID0gY29udGFpbmVyX29mKHMsIHN0cnVjdCBwY2Nfc29ja2V0LCBzb2NrZXQpLT5udW1iZXI7CiAKIAlpZiAoc29ja2V0W3NvY2tdLmZsYWdzICYgSVNfQUxJVkUpIHsKLQkJZGVidWcoMywgIm0zMnJfY2ZjOiBwY2Nfc2V0X2lvX21hcDogc29jayglZCkgLUVJTlZBTFxuIiwgc29jayk7CisJCWRldl9kYmcoJnMtPmRldiwgInBjY19zZXRfaW9fbWFwOiBzb2NrKCVkKSAtRUlOVkFMXG4iLCBzb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX3NldF9pb19tYXA6IHNvY2soJWQpXG4iLCBzb2NrKTsKKwlkZXZfZGJnKCZzLT5kZXYsICJwY2Nfc2V0X2lvX21hcDogc29jayglZClcbiIsIHNvY2spOwogCUxPQ0tFRChfcGNjX3NldF9pb19tYXAoc29jaywgaW8pKTsKIH0KIApAQCAtNjc1LDE2ICs2NjQsMTYgQEAKIAl1bnNpZ25lZCBpbnQgc29jayA9IGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgcGNjX3NvY2tldCwgc29ja2V0KS0+bnVtYmVyOwogCiAJaWYgKHNvY2tldFtzb2NrXS5mbGFncyAmIElTX0FMSVZFKSB7Ci0JCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX3NldF9tZW1fbWFwOiBzb2NrKCVkKSAtRUlOVkFMXG4iLCBzb2NrKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAicGNjX3NldF9tZW1fbWFwOiBzb2NrKCVkKSAtRUlOVkFMXG4iLCBzb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlYnVnKDMsICJtMzJyX2NmYzogcGNjX3NldF9tZW1fbWFwOiBzb2NrKCVkKVxuIiwgc29jayk7CisJZGV2X2RiZygmcy0+ZGV2LCAicGNjX3NldF9tZW1fbWFwOiBzb2NrKCVkKVxuIiwgc29jayk7CiAJTE9DS0VEKF9wY2Nfc2V0X21lbV9tYXAoc29jaywgbWVtKSk7CiB9CiAKIHN0YXRpYyBpbnQgcGNjX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JZGVidWcoMywgIm0zMnJfY2ZjOiBwY2NfaW5pdCgpXG4iKTsKKwlkZXZfZGJnKCZzLT5kZXYsICJwY2NfaW5pdCgpXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggYTA2NTU4My4uNzI4NDRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC00NSwxNiArNDUsNiBAQAogCiAjZGVmaW5lIFBDQ19ERUJVR19EQkVYCiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IG0zMnJfcGNjX2RlYnVnOwotbW9kdWxlX3BhcmFtKG0zMnJfcGNjX2RlYnVnLCBpbnQsIDA2NDQpOwotI2RlZmluZSBkZWJ1ZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCVwKLQlpZiAobTMycl9wY2NfZGVidWcgPiAobHZsKSkJCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAibTMycl9wY2M6ICIgZm10ICwgIyMgYXJnKTsJXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGRlYnVnKG4sIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgogCiAvKiBQb2xsIHN0YXR1cyBpbnRlcnZhbCAtLSAwIG1lYW5zIGRlZmF1bHQgdG8gaW50ZXJydXB0ICovCiBzdGF0aWMgaW50IHBvbGxfaW50ZXJ2YWwgPSAwOwpAQCAtMzU4LDcgKzM0OCw3IEBACiAJdV9pbnQgZXZlbnRzLCBhY3RpdmU7CiAJaW50IGhhbmRsZWQgPSAwOwogCi0JZGVidWcoNCwgIm0zMnI6IHBjY19pbnRlcnJ1cHQoJWQpXG4iLCBpcnEpOworCXByX2RlYnVnKCJtMzJyX3BjYzogcGNjX2ludGVycnVwdCglZClcbiIsIGlycSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgMjA7IGorKykgewogCQlhY3RpdmUgPSAwOwpAQCAtMzY5LDEzICszNTksMTQgQEAKIAkJCWhhbmRsZWQgPSAxOwogCQkJaXJjID0gcGNjX2dldChpLCBQQ0lSQyk7CiAJCQlpcmMgPj49MTY7Ci0JCQlkZWJ1ZygyLCAibTMyci1wY2M6aW50ZXJydXB0OiBzb2NrZXQgJWQgcGNpcmMgMHglMDJ4ICIsIGksIGlyYyk7CisJCQlwcl9kZWJ1ZygibTMycl9wY2M6IGludGVycnVwdDogc29ja2V0ICVkIHBjaXJjIDB4JTAyeCAiLAorCQkJCWksIGlyYyk7CiAJCQlpZiAoIWlyYykKIAkJCQljb250aW51ZTsKIAogCQkJZXZlbnRzID0gKGlyYykgPyBTU19ERVRFQ1QgOiAwOwogCQkJZXZlbnRzIHw9IChwY2NfZ2V0KGksUENDUikgJiBQQ0NSX1BDRU4pID8gU1NfUkVBRFkgOiAwOwotCQkJZGVidWcoMiwgIiBldmVudCAweCUwMnhcbiIsIGV2ZW50cyk7CisJCQlwcl9kZWJ1ZygibTMycl9wY2M6IGV2ZW50IDB4JTAyeFxuIiwgZXZlbnRzKTsKIAogCQkJaWYgKGV2ZW50cykKIAkJCQlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrZXRbaV0uc29ja2V0LCBldmVudHMpOwpAQCAtMzg4LDcgKzM3OSw3IEBACiAJaWYgKGogPT0gMjApCiAJCXByaW50ayhLRVJOX05PVElDRSAibTMyci1wY2M6IGluZmluaXRlIGxvb3AgaW4gaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCi0JZGVidWcoNCwgIm0zMnItcGNjOiBpbnRlcnJ1cHQgZG9uZVxuIik7CisJcHJfZGVidWcoIm0zMnJfcGNjOiBpbnRlcnJ1cHQgZG9uZVxuIik7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0gLyogcGNjX2ludGVycnVwdCAqLwpAQCAtNDIyLDcgKzQxMyw3IEBACiAJc3RhdHVzID0gcGNjX2dldChzb2NrLFBDQ1NJR0NSKTsKIAkqdmFsdWUgfD0gKHN0YXR1cyAmIFBDQ1NJR0NSX1ZFTikgPyBTU19QT1dFUk9OIDogMDsKIAotCWRlYnVnKDMsICJtMzJyLXBjYzogR2V0U3RhdHVzKCVkKSA9ICUjNC40eFxuIiwgc29jaywgKnZhbHVlKTsKKwlwcl9kZWJ1ZygibTMycl9wY2M6IEdldFN0YXR1cyglZCkgPSAlIzQuNHhcbiIsIHNvY2ssICp2YWx1ZSk7CiAJcmV0dXJuIDA7CiB9IC8qIF9nZXRfc3RhdHVzICovCiAKQEAgLTQzMiw3ICs0MjMsNyBAQAogewogCXVfbG9uZyByZWcgPSAwOwogCi0JZGVidWcoMywgIm0zMnItcGNjOiBTZXRTb2NrZXQoJWQsIGZsYWdzICUjMy4zeCwgVmNjICVkLCBWcHAgJWQsICIKKwlwcl9kZWJ1ZygibTMycl9wY2M6IFNldFNvY2tldCglZCwgZmxhZ3MgJSMzLjN4LCBWY2MgJWQsIFZwcCAlZCwgIgogCQkgICJpb19pcnEgJWQsIGNzY19tYXNrICUjMi4yeCkiLCBzb2NrLCBzdGF0ZS0+ZmxhZ3MsCiAJCSAgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCwgc3RhdGUtPmlvX2lycSwgc3RhdGUtPmNzY19tYXNrKTsKIApAQCAtNDQ4LDExICs0MzksMTEgQEAKIAl9CiAKIAlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpIHsKLQkJZGVidWcoMywgIjpSRVNFVFxuIik7CisJCXByX2RlYnVnKCJtMzJyX3BjYzogOlJFU0VUXG4iKTsKIAkJcmVnIHw9IFBDQ1NJR0NSX0NSU1Q7CiAJfQogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19PVVRQVVRfRU5BKXsKLQkJZGVidWcoMywgIjpPVVRQVVRfRU5BXG4iKTsKKwkJcHJfZGVidWcoIm0zMnJfcGNjOiA6T1VUUFVUX0VOQVxuIik7CiAJCS8qIGJpdCBjbGVhciAqLwogCX0gZWxzZSB7CiAJCXJlZyB8PSBQQ0NTSUdDUl9TRU47CkBAIC00NjAsMjggKzQ1MSwyNiBAQAogCiAJcGNjX3NldChzb2NrLFBDQ1NJR0NSLHJlZyk7CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiAJaWYoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKXsKLQkJZGVidWcoMywgIjpJT0NBUkQiKTsKKwkJcHJfZGVidWcoIm0zMnJfcGNjOiA6SU9DQVJEIik7CiAJfQogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19QV1JfQVVUTykgewotCQlkZWJ1ZygzLCAiOlBXUl9BVVRPIik7CisJCXByX2RlYnVnKCJtMzJyX3BjYzogOlBXUl9BVVRPIik7CiAJfQogCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19ERVRFQ1QpCi0JCWRlYnVnKDMsICI6Y3NjLVNTX0RFVEVDVCIpOworCQlwcl9kZWJ1ZygibTMycl9wY2M6IDpjc2MtU1NfREVURUNUIik7CiAJaWYgKHN0YXRlLT5mbGFncyAmIFNTX0lPQ0FSRCkgewogCQlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfU1RTQ0hHKQotCQkJZGVidWcoMywgIjpTVFNDSEciKTsKKwkJCXByX2RlYnVnKCJtMzJyX3BjYzogOlNUU0NIRyIpOwogCX0gZWxzZSB7CiAJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRERUFEKQotCQkJZGVidWcoMywgIjpCQVRERUFEIik7CisJCQlwcl9kZWJ1ZygibTMycl9wY2M6IDpCQVRERUFEIik7CiAJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRXQVJOKQotCQkJZGVidWcoMywgIjpCQVRXQVJOIik7CisJCQlwcl9kZWJ1ZygibTMycl9wY2M6IDpCQVRXQVJOIik7CiAJCWlmIChzdGF0ZS0+Y3NjX21hc2sgJiBTU19SRUFEWSkKLQkJCWRlYnVnKDMsICI6UkVBRFkiKTsKKwkJCXByX2RlYnVnKCJtMzJyX3BjYzogOlJFQURZIik7CiAJfQotCWRlYnVnKDMsICJcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoIm0zMnJfcGNjOiBcbiIpOwogCXJldHVybiAwOwogfSAvKiBfc2V0X3NvY2tldCAqLwogCkBAIC00OTEsOSArNDgwLDEwIEBACiB7CiAJdV9jaGFyIG1hcDsKIAotCWRlYnVnKDMsICJtMzJyLXBjYzogU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAgIiUjeC0lI3gpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwlwcl9kZWJ1ZygibTMycl9wY2M6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgorCQkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKKwkJICBpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCW1hcCA9IGlvLT5tYXA7CiAKIAlyZXR1cm4gMDsKQEAgLTUxNCw5ICs1MDQsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlkZWJ1ZygzLCAibTMyci1wY2M6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJcHJfZGVidWcoIm0zMnJfcGNjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCisJCSAiJSNsbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCkBAIC02NjAsNyArNjUxLDcgQEAKIAogc3RhdGljIGludCBwY2NfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKLQlkZWJ1Zyg0LCAibTMyci1wY2M6IGluaXQgY2FsbFxuIik7CisJcHJfZGVidWcoIm0zMnJfcGNjOiBpbml0IGNhbGxcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBjNjlmMmM0Li43Zjc5YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTY0LDE0ICs2NCw2IEBACiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJtOHh4X3BjbWNpYTogIiBhcmdzKTsKLSNlbHNlCi0jZGVmaW5lIGRwcmludGsoYXJncy4uLikKLSNlbmRpZgotCiAjZGVmaW5lIHBjbWNpYV9pbmZvKGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gIm04eHhfcGNtY2lhOiAiYXJncykKICNkZWZpbmUgcGNtY2lhX2Vycm9yKGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAibTh4eF9wY21jaWE6ICJhcmdzKQogCkBAIC01NjUsNyArNTU3LDcgQEAKIAl1bnNpZ25lZCBpbnQgaSwgZXZlbnRzLCBwc2NyLCBwaXByLCBwZXI7CiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzb2NrZXRbMF0ucGNtY2lhOwogCi0JZHByaW50aygiSW50ZXJydXB0IVxuIik7CisJcHJfZGVidWcoIm04eHhfcGNtY2lhOiBJbnRlcnJ1cHQhXG4iKTsKIAkvKiBnZXQgaW50ZXJydXB0IHNvdXJjZXMgKi8KIAogCXBzY3IgPSBpbl9iZTMyKCZwY21jaWEtPnBjbWNfcHNjcik7CkBAIC02MTQsNyArNjA2LDcgQEAKIAogCQkvKiBjYWxsIHRoZSBoYW5kbGVyICovCiAKLQkJZHByaW50aygic2xvdCAldTogZXZlbnRzID0gMHglMDJ4LCBwc2NyID0gMHglMDh4LCAiCisJCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogc2xvdCAldTogZXZlbnRzID0gMHglMDJ4LCBwc2NyID0gMHglMDh4LCAiCiAJCQkicGlwciA9IDB4JTA4eFxuIiwgaSwgZXZlbnRzLCBwc2NyLCBwaXByKTsKIAogCQlpZiAoZXZlbnRzKSB7CkBAIC02NDEsNyArNjMzLDcgQEAKIAkvKiBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlvdXRfYmUzMigmcGNtY2lhLT5wY21jX3BzY3IsIHBzY3IpOwogCi0JZHByaW50aygiSW50ZXJydXB0IGRvbmUuXG4iKTsKKwlwcl9kZWJ1ZygibTh4eF9wY21jaWE6IEludGVycnVwdCBkb25lLlxuIik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04MTUsNyArODA3LDcgQEAKIAkJfTsKIAl9CiAKLQlkcHJpbnRrKCJHZXRTdGF0dXMoJWQpID0gJSMyLjJ4XG4iLCBsc29jaywgKnZhbHVlKTsKKwlwcl9kZWJ1ZygibTh4eF9wY21jaWE6IEdldFN0YXR1cyglZCkgPSAlIzIuMnhcbiIsIGxzb2NrLCAqdmFsdWUpOwogCXJldHVybiAwOwogfQogCkBAIC04MjgsNyArODIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXBjbWNvbmY4eHhfdCAqcGNtY2lhID0gc29ja2V0WzBdLnBjbWNpYTsKIAotCWRwcmludGsoIlNldFNvY2tldCglZCwgZmxhZ3MgJSMzLjN4LCBWY2MgJWQsIFZwcCAlZCwgIgorCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogU2V0U29ja2V0KCVkLCBmbGFncyAlIzMuM3gsIFZjYyAlZCwgVnBwICVkLCAiCiAJCSJpb19pcnEgJWQsIGNzY19tYXNrICUjMi4yeClcbiIsIGxzb2NrLCBzdGF0ZS0+ZmxhZ3MsCiAJCXN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsIHN0YXRlLT5pb19pcnEsIHN0YXRlLT5jc2NfbWFzayk7CiAKQEAgLTk3NCw5ICs5NjYsMTAgQEAKICNkZWZpbmUgTThYWF9TSVpFIChpby0+c3RvcCAtIGlvLT5zdGFydCArIDEpCiAjZGVmaW5lIE04WFhfQkFTRSAoUENNQ0lBX0lPX1dJTl9CQVNFICsgaW8tPnN0YXJ0KQogCi0JZHByaW50aygiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzQuNHgtJSM0LjR4KVxuIiwgbHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwlwcl9kZWJ1ZygibTh4eF9wY21jaWE6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgorCQkiJSM0LjRsbHgtJSM0LjRsbHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQlpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAogCWlmICgoaW8tPm1hcCA+PSBQQ01DSUFfSU9fV0lOX05PKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKQogCSAgICB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8IChpby0+c3RvcCA8IGlvLT5zdGFydCkpCkBAIC05ODcsNyArOTgwLDcgQEAKIAogCWlmIChpby0+ZmxhZ3MgJiBNQVBfQUNUSVZFKSB7CiAKLQkJZHByaW50aygiaW8tPmZsYWdzICYgTUFQX0FDVElWRVxuIik7CisJCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogaW8tPmZsYWdzICYgTUFQX0FDVElWRVxuIik7CiAKIAkJd2lubnIgPSAoUENNQ0lBX01FTV9XSU5fTk8gKiBQQ01DSUFfU09DS0VUU19OTykKIAkJICAgICsgKGxzb2NrICogUENNQ0lBX0lPX1dJTl9OTykgKyBpby0+bWFwOwpAQCAtMTAxNyw4ICsxMDEwLDggQEAKIAogCQlvdXRfYmUzMigmdy0+b3IsIHJlZyk7CiAKLQkJZHByaW50aygiU29ja2V0ICV1OiBNYXBwZWQgaW8gd2luZG93ICV1IGF0ICUjOC44eCwgIgotCQkJIk9SID0gJSM4Ljh4LlxuIiwgbHNvY2ssIGlvLT5tYXAsIHctPmJyLCB3LT5vcik7CisJCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogU29ja2V0ICV1OiBNYXBwZWQgaW8gd2luZG93ICV1IGF0ICIKKwkJCSIlIzguOHgsIE9SID0gJSM4Ljh4LlxuIiwgbHNvY2ssIGlvLT5tYXAsIHctPmJyLCB3LT5vcik7CiAJfSBlbHNlIHsKIAkJLyogc2h1dGRvd24gSU8gd2luZG93ICovCiAJCXdpbm5yID0gKFBDTUNJQV9NRU1fV0lOX05PICogUENNQ0lBX1NPQ0tFVFNfTk8pCkBAIC0xMDMyLDE0ICsxMDI1LDE0IEBACiAJCW91dF9iZTMyKCZ3LT5vciwgMCk7CS8qIHR1cm4gb2ZmIHdpbmRvdyAqLwogCQlvdXRfYmUzMigmdy0+YnIsIDApOwkvKiB0dXJuIG9mZiBiYXNlIGFkZHJlc3MgKi8KIAotCQlkcHJpbnRrKCJTb2NrZXQgJXU6IFVubWFwcGVkIGlvIHdpbmRvdyAldSBhdCAlIzguOHgsICIKLQkJCSJPUiA9ICUjOC44eC5cbiIsIGxzb2NrLCBpby0+bWFwLCB3LT5iciwgdy0+b3IpOworCQlwcl9kZWJ1ZygibTh4eF9wY21jaWE6IFNvY2tldCAldTogVW5tYXBwZWQgaW8gd2luZG93ICV1IGF0ICIKKwkJCSIlIzguOHgsIE9SID0gJSM4Ljh4LlxuIiwgbHNvY2ssIGlvLT5tYXAsIHctPmJyLCB3LT5vcik7CiAJfQogCiAJLyogY29weSB0aGUgc3RydWN0IGFuZCBtb2RpZnkgdGhlIGNvcHkgKi8KIAlzLT5pb193aW5baW8tPm1hcF0gPSAqaW87CiAJcy0+aW9fd2luW2lvLT5tYXBdLmZsYWdzICY9IChNQVBfV1JQUk9UIHwgTUFQXzE2QklUIHwgTUFQX0FDVElWRSk7Ci0JZHByaW50aygiU2V0SU9NYXAgZXhpdFxuIik7CisJcHJfZGVidWcoIm04eHhfcGNtY2lhOiBTZXRJT01hcCBleGl0XG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA1NCw5ICsxMDQ3LDEwIEBACiAJdW5zaWduZWQgaW50IHJlZywgd2lubnI7CiAJcGNtY29uZjh4eF90ICpwY21jaWEgPSBzLT5wY21jaWE7CiAKLQlkcHJpbnRrKCJTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSIlIzUuNWx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCi0JCW1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgorCQkiJSM1LjVsbHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKKwkJbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJbWVtLT5jYXJkX3N0YXJ0KTsKIAogCWlmICgobWVtLT5tYXAgPj0gUENNQ0lBX01FTV9XSU5fTk8pCiAvLyAgICAgICAgICB8fCAoKG1lbS0+cykgPj0gUENNQ0lBX01FTV9XSU5fU0laRSkKQEAgLTEwOTYsNyArMTA5MCw3IEBACiAKIAlvdXRfYmUzMigmdy0+b3IsIHJlZyk7CiAKLQlkcHJpbnRrKCJTb2NrZXQgJXU6IE1hcHBlZCBtZW1vcnkgd2luZG93ICV1IGF0ICUjOC44eCwgIgorCXByX2RlYnVnKCJtOHh4X3BjbWNpYTogU29ja2V0ICV1OiBNYXBwZWQgbWVtb3J5IHdpbmRvdyAldSBhdCAlIzguOHgsICIKIAkJIk9SID0gJSM4Ljh4LlxuIiwgbHNvY2ssIG1lbS0+bWFwLCB3LT5iciwgdy0+b3IpOwogCiAJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfQUNUSVZFKSB7CkBAIC0xMTA2LDkgKzExMDAsMTAgQEAKIAkJICAgICsgbWVtLT5jYXJkX3N0YXJ0OwogCX0KIAotCWRwcmludGsoIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNS41bHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKLQkJbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJcHJfZGVidWcoIm04eHhfcGNtY2lhOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCisJCSIlIzUuNWxseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAorCQltZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQltZW0tPmNhcmRfc3RhcnQpOwogCiAJLyogY29weSB0aGUgc3RydWN0IGFuZCBtb2RpZnkgdGhlIGNvcHkgKi8KIApAQCAtMTEyNiw3ICsxMTIxLDcgQEAKIAlwY2NhcmRfaW9fbWFwIGlvID0geyAwLCAwLCAwLCAwLCAxIH07CiAJcGNjYXJkX21lbV9tYXAgbWVtID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CiAKLQlkcHJpbnRrKCJzb2NrX2luaXQoJWQpXG4iLCBzKTsKKwlwcl9kZWJ1ZygibTh4eF9wY21jaWE6IHNvY2tfaW5pdCglZClcbiIsIHMpOwogCiAJbTh4eF9zZXRfc29ja2V0KHNvY2ssICZkZWFkX3NvY2tldCk7CiAJZm9yIChpID0gMDsgaSA8IFBDTUNJQV9JT19XSU5fTk87IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oIGIvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCmluZGV4IDcyMTg4YzQuLjYyNDQ0MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKQEAgLTMwLDI4ICszMCw2IEBACiAjaWZuZGVmIF9MSU5VWF9PMk1JQ1JPX0gKICNkZWZpbmUgX0xJTlVYX08yTUlDUk9fSAogCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfTzIKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PMgkJMHgxMjE3Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82NzI5Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjcyOQkJMHg2NzI5Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82NzMwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjczMAkJMHg2NzNhCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82ODMyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjgzMgkJMHg2ODMyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82ODM2Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjgzNgkJMHg2ODM2Ci0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82ODEyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjgxMgkJMHg2ODcyCi0jZW5kaWYKLSNpZm5kZWYgUENJX0RFVklDRV9JRF9PMl82OTMzCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjkzMyAgICAgICAgICAgMHg2OTMzCi0jZW5kaWYKLQogLyogQWRkaXRpb25hbCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAogI2RlZmluZSBPMl9NVVhfQ09OVFJPTAkJMHg5MAkvKiAzMiBiaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggMzJjNDQwNC4uYzRkNzkwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTU4LDE3ICs1OCw2IEBACiB9IHVzZXJfaW5mb190OwogCiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCi1leHRlcm4gaW50IGRzX3BjX2RlYnVnOwotCi0jZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQlcCi0JaWYgKGRzX3BjX2RlYnVnID49IGx2bCkJCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAiZHM6ICIgZm10ICwgIyMgYXJnKTsJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZ2V0X3BjbWNpYV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCiAJCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CkBAIC0yMjksNiArMjE4LDYxIEBACiAJcmV0dXJuIChyZXQpOwogfQogCisKKy8qKiBwY21jaWFfZ2V0X3dpbmRvdworICovCitzdGF0aWMgaW50IHBjbWNpYV9nZXRfd2luZG93KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB3aW5kb3dfaGFuZGxlX3QgKndoX291dCwKKwkJCXdpbmRvd19oYW5kbGVfdCB3aCwgd2luX3JlcV90ICpyZXEpCit7CisJcGNjYXJkX21lbV9tYXAgKndpbjsKKwl3aW5kb3dfaGFuZGxlX3QgdzsKKworCXdoLS07CisJaWYgKCFzIHx8ICEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICh3aCA+PSBNQVhfV0lOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKHcgPSB3aDsgdyA8IE1BWF9XSU47IHcrKykKKwkJaWYgKHMtPnN0YXRlICYgU09DS0VUX1dJTl9SRVEodykpCisJCQlicmVhazsKKwlpZiAodyA9PSBNQVhfV0lOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aW4gPSAmcy0+d2luW3ddOworCXJlcS0+QmFzZSA9IHdpbi0+cmVzLT5zdGFydDsKKwlyZXEtPlNpemUgPSB3aW4tPnJlcy0+ZW5kIC0gd2luLT5yZXMtPnN0YXJ0ICsgMTsKKwlyZXEtPkFjY2Vzc1NwZWVkID0gd2luLT5zcGVlZDsKKwlyZXEtPkF0dHJpYnV0ZXMgPSAwOworCWlmICh3aW4tPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9NRU1PUllfVFlQRV9BTTsKKwlpZiAod2luLT5mbGFncyAmIE1BUF9BQ1RJVkUpCisJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCWlmICh3aW4tPmZsYWdzICYgTUFQXzE2QklUKQorCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0RBVEFfV0lEVEhfMTY7CisJaWYgKHdpbi0+ZmxhZ3MgJiBNQVBfVVNFX1dBSVQpCisJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fVVNFX1dBSVQ7CisKKwkqd2hfb3V0ID0gdyArIDE7CisJcmV0dXJuIDA7Cit9IC8qIHBjbWNpYV9nZXRfd2luZG93ICovCisKKworLyoqIHBjbWNpYV9nZXRfbWVtX3BhZ2UKKyAqCisgKiBDaGFuZ2UgdGhlIGNhcmQgYWRkcmVzcyBvZiBhbiBhbHJlYWR5IG9wZW4gbWVtb3J5IHdpbmRvdy4KKyAqLworc3RhdGljIGludCBwY21jaWFfZ2V0X21lbV9wYWdlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsIHdpbmRvd19oYW5kbGVfdCB3aCwKKwkJCW1lbXJlcV90ICpyZXEpCit7CisJd2gtLTsKKwlpZiAod2ggPj0gTUFYX1dJTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXEtPlBhZ2UgPSAwOworCXJlcS0+Q2FyZE9mZnNldCA9IHNrdC0+d2luW3doXS5jYXJkX3N0YXJ0OworCXJldHVybiAwOworfSAvKiBwY21jaWFfZ2V0X21lbV9wYWdlICovCisKKwogLyoqIHBjY2FyZF9nZXRfc3RhdHVzCiAgKgogICogR2V0IHRoZSBjdXJyZW50IHNvY2tldCBzdGF0ZSBiaXRzLiAgV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgbGF0Y2hlZApAQCAtNDMxLDcgKzQ3NSw3IEBACiAJaWYgKCFzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRzX2RiZygyLCAiYmluZF9yZXF1ZXN0KCVkLCAnJXMnKVxuIiwgcy0+c29jaywKKwlwcl9kZWJ1ZygiYmluZF9yZXF1ZXN0KCVkLCAnJXMnKVxuIiwgcy0+c29jaywKIAkgICAgICAgKGNoYXIgKiliaW5kX2luZm8tPmRldl9pbmZvKTsKIAogCXBfZHJ2ID0gZ2V0X3BjbWNpYV9kcml2ZXIoJmJpbmRfaW5mby0+ZGV2X2luZm8pOwpAQCAtNjIzLDcgKzY2Nyw3IEBACiAgICAgc3RhdGljIGludCB3YXJuaW5nX3ByaW50ZWQgPSAwOwogICAgIGludCByZXQgPSAwOwogCi0gICAgZHNfZGJnKDAsICJkc19vcGVuKHNvY2tldCAlZClcbiIsIGkpOworICAgIHByX2RlYnVnKCJkc19vcGVuKHNvY2tldCAlZClcbiIsIGkpOwogCiAgICAgbG9ja19rZXJuZWwoKTsKICAgICBzID0gcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIoaSk7CkBAIC02ODUsNyArNzI5LDcgQEAKICAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKICAgICB1c2VyX2luZm9fdCAqdXNlciwgKipsaW5rOwogCi0gICAgZHNfZGJnKDAsICJkc19yZWxlYXNlKHNvY2tldCAlZClcbiIsIGltaW5vcihpbm9kZSkpOworICAgIHByX2RlYnVnKCJkc19yZWxlYXNlKHNvY2tldCAlZClcbiIsIGltaW5vcihpbm9kZSkpOwogCiAgICAgdXNlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKICAgICBpZiAoQ0hFQ0tfVVNFUih1c2VyKSkKQEAgLTcxOSw3ICs3NjMsNyBAQAogICAgIHVzZXJfaW5mb190ICp1c2VyOwogICAgIGludCByZXQ7CiAKLSAgICBkc19kYmcoMiwgImRzX3JlYWQoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKKyAgICBwcl9kZWJ1ZygiZHNfcmVhZChzb2NrZXQgJWQpXG4iLCBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCiAgICAgaWYgKGNvdW50IDwgNCkKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTc0NCw3ICs3ODgsNyBAQAogc3RhdGljIHNzaXplX3QgZHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLSAgICBkc19kYmcoMiwgImRzX3dyaXRlKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CisgICAgcHJfZGVidWcoImRzX3dyaXRlKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CiAKICAgICBpZiAoY291bnQgIT0gNCkKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTc2Miw3ICs4MDYsNyBAQAogICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogICAgIHVzZXJfaW5mb190ICp1c2VyOwogCi0gICAgZHNfZGJnKDIsICJkc19wb2xsKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CisgICAgcHJfZGVidWcoImRzX3BvbGwoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKIAogICAgIHVzZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAgICAgaWYgKENIRUNLX1VTRVIodXNlcikpCkBAIC03OTAsNyArODM0LDcgQEAKICAgICBkc19pb2N0bF9hcmdfdCAqYnVmOwogICAgIHVzZXJfaW5mb190ICp1c2VyOwogCi0gICAgZHNfZGJnKDIsICJkc19pb2N0bChzb2NrZXQgJWQsICUjeCwgJSNseClcbiIsIGltaW5vcihpbm9kZSksIGNtZCwgYXJnKTsKKyAgICBwcl9kZWJ1ZygiZHNfaW9jdGwoc29ja2V0ICVkLCAlI3gsICUjbHgpXG4iLCBpbWlub3IoaW5vZGUpLCBjbWQsIGFyZyk7CiAKICAgICB1c2VyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogICAgIGlmIChDSEVDS19VU0VSKHVzZXIpKQpAQCAtODA5LDEzICs4NTMsMTMgQEAKIAogICAgIGlmIChjbWQgJiBJT0NfSU4pIHsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWFyZywgc2l6ZSkpIHsKLQkgICAgZHNfZGJnKDMsICJkc19pb2N0bCgpOiB2ZXJpZnlfcmVhZCA9ICVkXG4iLCAtRUZBVUxUKTsKKwkgICAgcHJfZGVidWcoImRzX2lvY3RsKCk6IHZlcmlmeV9yZWFkID0gJWRcbiIsIC1FRkFVTFQpOwogCSAgICByZXR1cm4gLUVGQVVMVDsKIAl9CiAgICAgfQogICAgIGlmIChjbWQgJiBJT0NfT1VUKSB7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YXJnLCBzaXplKSkgewotCSAgICBkc19kYmcoMywgImRzX2lvY3RsKCk6IHZlcmlmeV93cml0ZSA9ICVkXG4iLCAtRUZBVUxUKTsKKwkgICAgcHJfZGVidWcoImRzX2lvY3RsKCk6IHZlcmlmeV93cml0ZSA9ICVkXG4iLCAtRUZBVUxUKTsKIAkgICAgcmV0dXJuIC1FRkFVTFQ7CiAJfQogICAgIH0KQEAgLTg4MSw3ICs5MjUsNyBAQAogCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJcGNtY2lhX3ZhbGlkYXRlX21lbShzKTsKIAltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7Ci0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgogCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7CkBAIC05MjcsMTUgKzk3MSwxNSBAQAogCWdvdG8gZnJlZV9vdXQ7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfRklSU1RfV0lORE9XOgotCXJldCA9IHBjbWNpYV9nZXRfd2luZG93KHMsICZidWYtPndpbl9pbmZvLmhhbmRsZSwgMCwKKwlyZXQgPSBwY21jaWFfZ2V0X3dpbmRvdyhzLCAmYnVmLT53aW5faW5mby5oYW5kbGUsIDEsCiAJCQkmYnVmLT53aW5faW5mby53aW5kb3cpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfR0VUX05FWFRfV0lORE9XOgogCXJldCA9IHBjbWNpYV9nZXRfd2luZG93KHMsICZidWYtPndpbl9pbmZvLmhhbmRsZSwKLQkJCWJ1Zi0+d2luX2luZm8uaGFuZGxlLT5pbmRleCArIDEsICZidWYtPndpbl9pbmZvLndpbmRvdyk7CisJCQlidWYtPndpbl9pbmZvLmhhbmRsZSArIDEsICZidWYtPndpbl9pbmZvLndpbmRvdyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfTUVNX1BBR0U6Ci0JcmV0ID0gcGNtY2lhX2dldF9tZW1fcGFnZShidWYtPndpbl9pbmZvLmhhbmRsZSwKKwlyZXQgPSBwY21jaWFfZ2V0X21lbV9wYWdlKHMsIGJ1Zi0+d2luX2luZm8uaGFuZGxlLAogCQkJICAgJmJ1Zi0+d2luX2luZm8ubWFwKTsKIAlicmVhazsKICAgICBjYXNlIERTX1JFUExBQ0VfQ0lTOgpAQCAtOTYyLDcgKzEwMDYsNyBAQAogICAgIH0KIAogICAgIGlmICgoZXJyID09IDApICYmIChyZXQgIT0gMCkpIHsKLQlkc19kYmcoMiwgImRzX2lvY3RsOiByZXQgPSAlZFxuIiwgcmV0KTsKKwlwcl9kZWJ1ZygiZHNfaW9jdGw6IHJldCA9ICVkXG4iLCByZXQpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSAtRU5PREVWOgogCWNhc2UgLUVJTlZBTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggZDkxOWU5Ni4uYThiZjhjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CkBAIC00MywyMSArNDQsNiBAQAogI2VuZGlmCiAKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKLWV4dGVybiBpbnQgZHNfcGNfZGVidWc7Ci0KLSNkZWZpbmUgZHNfZGJnKHNrdCwgbHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCVwKLQlpZiAoZHNfcGNfZGVidWcgPj0gbHZsKQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZza3QtPmRldiwJCVwKLQkJCSAgICJwY21jaWFfcmVzb3VyY2U6ICIgZm10LAkJXAotCQkJICAgIyMgYXJnKTsJCQkJXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGRzX2RiZyhza3QsIGx2bCwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KLQogLyoqIGFsbG9jX2lvX3NwYWNlCiAgKgogICogU3BlY2lhbCBzdHVmZiBmb3IgbWFuYWdpbmcgSU8gd2luZG93cywgYmVjYXVzZSB0aGV5IGFyZSBzY2FyY2UKQEAgLTcyLDE0ICs1OCwxNCBAQAogCWFsaWduID0gKCpiYXNlKSA/IChsaW5lcyA/IDE8PGxpbmVzIDogMCkgOiAxOwogCWlmIChhbGlnbiAmJiAoYWxpZ24gPCBudW0pKSB7CiAJCWlmICgqYmFzZSkgewotCQkJZHNfZGJnKHMsIDAsICJvZGQgSU8gcmVxdWVzdDogbnVtICUjeCBhbGlnbiAlI3hcbiIsCisJCQlkZXZfZGJnKCZzLT5kZXYsICJvZGQgSU8gcmVxdWVzdDogbnVtICUjeCBhbGlnbiAlI3hcbiIsCiAJCQkgICAgICAgbnVtLCBhbGlnbik7CiAJCQlhbGlnbiA9IDA7CiAJCX0gZWxzZQogCQkJd2hpbGUgKGFsaWduICYmIChhbGlnbiA8IG51bSkpIGFsaWduIDw8PSAxOwogCX0KIAlpZiAoKmJhc2UgJiB+KGFsaWduLTEpKSB7Ci0JCWRzX2RiZyhzLCAwLCAib2RkIElPIHJlcXVlc3Q6IGJhc2UgJSN4IGFsaWduICUjeFxuIiwKKwkJZGV2X2RiZygmcy0+ZGV2LCAib2RkIElPIHJlcXVlc3Q6IGJhc2UgJSN4IGFsaWduICUjeFxuIiwKIAkJICAgICAgICpiYXNlLCBhbGlnbik7CiAJCWFsaWduID0gMDsKIAl9CkBAIC0xNzMsOCArMTU5LDEwIEBACiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKLQlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQorCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKIAkJcmV0dXJuIC1FQUNDRVM7CisJfQogCiAJYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CiAKQEAgLTE4OCw2ICsxNzYsNyBAQAogCQlwY21jaWFfd3JpdGVfY2lzX21lbShzLCAxLCBhZGRyLCAxLCAmdmFsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJZGV2X2RiZygmcy0+ZGV2LCAiSW52YWxpZCBjb25mIHJlZ2lzdGVyIHJlcXVlc3RcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQpAQCAtMTk2LDY4ICsxODUsMjEgQEAKIEVYUE9SVF9TWU1CT0wocGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKTsKIAogCi0vKiogcGNtY2lhX2dldF93aW5kb3cKLSAqLwotaW50IHBjbWNpYV9nZXRfd2luZG93KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB3aW5kb3dfaGFuZGxlX3QgKmhhbmRsZSwKLQkJICAgICAgaW50IGlkeCwgd2luX3JlcV90ICpyZXEpCitpbnQgcGNtY2lhX21hcF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbmRvd19oYW5kbGVfdCB3aCwKKwkJCW1lbXJlcV90ICpyZXEpCiB7Ci0Jd2luZG93X3QgKndpbjsKLQlpbnQgdzsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CiAKLQlpZiAoIXMgfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZm9yICh3ID0gaWR4OyB3IDwgTUFYX1dJTjsgdysrKQotCQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfV0lOX1JFUSh3KSkKLQkJCWJyZWFrOwotCWlmICh3ID09IE1BWF9XSU4pCisJd2gtLTsKKwlpZiAod2ggPj0gTUFYX1dJTikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2luID0gJnMtPndpblt3XTsKLQlyZXEtPkJhc2UgPSB3aW4tPmN0bC5yZXMtPnN0YXJ0OwotCXJlcS0+U2l6ZSA9IHdpbi0+Y3RsLnJlcy0+ZW5kIC0gd2luLT5jdGwucmVzLT5zdGFydCArIDE7Ci0JcmVxLT5BY2Nlc3NTcGVlZCA9IHdpbi0+Y3RsLnNwZWVkOwotCXJlcS0+QXR0cmlidXRlcyA9IDA7Ci0JaWYgKHdpbi0+Y3RsLmZsYWdzICYgTUFQX0FUVFJJQikKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9NRU1PUllfVFlQRV9BTTsKLQlpZiAod2luLT5jdGwuZmxhZ3MgJiBNQVBfQUNUSVZFKQotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQlpZiAod2luLT5jdGwuZmxhZ3MgJiBNQVBfMTZCSVQpCi0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fREFUQV9XSURUSF8xNjsKLQlpZiAod2luLT5jdGwuZmxhZ3MgJiBNQVBfVVNFX1dBSVQpCi0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fVVNFX1dBSVQ7Ci0JKmhhbmRsZSA9IHdpbjsKLQlyZXR1cm4gMDsKLX0gLyogcGNtY2lhX2dldF93aW5kb3cgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF93aW5kb3cpOwotCi0KLS8qKiBwY21jaWFfZ2V0X21lbV9wYWdlCi0gKgotICogQ2hhbmdlIHRoZSBjYXJkIGFkZHJlc3Mgb2YgYW4gYWxyZWFkeSBvcGVuIG1lbW9yeSB3aW5kb3cuCi0gKi8KLWludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpCi17Ci0JaWYgKCh3aW4gPT0gTlVMTCkgfHwgKHdpbi0+bWFnaWMgIT0gV0lORE9XX01BR0lDKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmVxLT5QYWdlID0gMDsKLQlyZXEtPkNhcmRPZmZzZXQgPSB3aW4tPmN0bC5jYXJkX3N0YXJ0OwotCXJldHVybiAwOwotfSAvKiBwY21jaWFfZ2V0X21lbV9wYWdlICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfbWVtX3BhZ2UpOwotCi0KLWludCBwY21jaWFfbWFwX21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpCi17Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JaWYgKCh3aW4gPT0gTlVMTCkgfHwgKHdpbi0+bWFnaWMgIT0gV0lORE9XX01BR0lDKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcyA9IHdpbi0+c29jazsKIAlpZiAocmVxLT5QYWdlICE9IDApIHsKLQkJZHNfZGJnKHMsIDAsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbHVyZTogcmVxdWVzdGVkIHBhZ2UgaXMgemVyb1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl3aW4tPmN0bC5jYXJkX3N0YXJ0ID0gcmVxLT5DYXJkT2Zmc2V0OwotCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZ3aW4tPmN0bCkgIT0gMCkgewotCQlkc19kYmcocywgMCwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7CisJcy0+d2luW3doXS5jYXJkX3N0YXJ0ID0gcmVxLT5DYXJkT2Zmc2V0OworCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT53aW5bd2hdKSAhPSAwKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI3OCwxMCArMjIwLDE0IEBACiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgeworCQlkZXZfZGJnKCZzLT5kZXYsICJObyBjYXJkIHByZXNlbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQorCX0KKwlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNudCd0IGxvY2tlZFxuIik7CiAJCXJldHVybiAtRUFDQ0VTOworCX0KIAogCWlmIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX0lSUV9DSEFOR0VfVkFMSUQpIHsKIAkJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewpAQCAtMjk1LDcgKzI0MSw3IEBACiAJfQogCiAJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVkNDX0NIQU5HRV9WQUxJRCkgewotCQlkc19kYmcocywgMCwgImNoYW5naW5nIFZjYyBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWVcbiIpOworCQlkZXZfZGJnKCZzLT5kZXYsICJjaGFuZ2luZyBWY2MgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zMDMsNyArMjQ5LDcgQEAKIAlpZiAoKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQpICYmCiAJICAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlpZiAobW9kLT5WcHAxICE9IG1vZC0+VnBwMikgewotCQkJZHNfZGJnKHMsIDAsICJWcHAxIGFuZCBWcHAyIG11c3QgYmUgdGhlIHNhbWVcbiIpOworCQkJZGV2X2RiZygmcy0+ZGV2LCAiVnBwMSBhbmQgVnBwMiBtdXN0IGJlIHRoZSBzYW1lXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXMtPnNvY2tldC5WcHAgPSBtb2QtPlZwcDE7CkBAIC0zMTQsNyArMjYwLDcgQEAKIAkJfQogCX0gZWxzZSBpZiAoKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQpIHx8CiAJCSAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewotCQlkc19kYmcocywgMCwgImNoYW5naW5nIFZjYyBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWVcbiIpOworCQlkZXZfZGJnKCZzLT5kZXYsICJjaGFuZ2luZyBWY2MgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MjUsMTEgKzM3MSwxMSBAQAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCiAJCXJldHVybiAtRUFDQ0VTOwogCWlmIChjLT5pcnEuQXR0cmlidXRlcyAhPSByZXEtPkF0dHJpYnV0ZXMpIHsKLQkJZHNfZGJnKHMsIDAsICJJUlEgYXR0cmlidXRlcyBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZXNcbiIpOworCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgYXR0cmlidXRlcyBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHMtPmlycS5Bc3NpZ25lZElSUSAhPSByZXEtPkFzc2lnbmVkSVJRKSB7Ci0JCWRzX2RiZyhzLCAwLCAiSVJRIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgtLXMtPmlycS5Db25maWcgPT0gMCkgewpAQCAtNDM3LDggKzM4Myw4IEBACiAJCXMtPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCi0JaWYgKHJlcS0+QXR0cmlidXRlcyAmIElSUV9IQU5ETEVfUFJFU0VOVCkgewotCQlmcmVlX2lycShyZXEtPkFzc2lnbmVkSVJRLCByZXEtPkluc3RhbmNlKTsKKwlpZiAocmVxLT5IYW5kbGVyKSB7CisJCWZyZWVfaXJxKHJlcS0+QXNzaWduZWRJUlEsIHBfZGV2LT5wcml2KTsKIAl9CiAKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCkBAIC00NDksMzAgKzM5NSwzNCBAQAogfSAvKiBwY21jaWFfcmVsZWFzZV9pcnEgKi8KIAogCi1pbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHdpbmRvd19oYW5kbGVfdCB3aW4pCitpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdoKQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwlwY2NhcmRfbWVtX21hcCAqd2luOwogCi0JaWYgKCh3aW4gPT0gTlVMTCkgfHwgKHdpbi0+bWFnaWMgIT0gV0lORE9XX01BR0lDKSkKKwl3aC0tOworCWlmICh3aCA+PSBNQVhfV0lOKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzID0gd2luLT5zb2NrOwotCWlmICghKHdpbi0+aGFuZGxlLT5fd2luICYgQ0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCkpKQorCisJd2luID0gJnMtPndpblt3aF07CisKKwlpZiAoIShwX2Rldi0+X3dpbiAmIENMSUVOVF9XSU5fUkVRKHdoKSkpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAibm90IHJlbGVhc2luZyB1bmtub3duIHdpbmRvd1xuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIFNodXQgZG93biBtZW1vcnkgd2luZG93ICovCi0Jd2luLT5jdGwuZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7Ci0Jcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmd2luLT5jdGwpOwotCXMtPnN0YXRlICY9IH5TT0NLRVRfV0lOX1JFUSh3aW4tPmluZGV4KTsKKwl3aW4tPmZsYWdzICY9IH5NQVBfQUNUSVZFOworCXMtPm9wcy0+c2V0X21lbV9tYXAocywgd2luKTsKKwlzLT5zdGF0ZSAmPSB+U09DS0VUX1dJTl9SRVEod2gpOwogCiAJLyogUmVsZWFzZSBzeXN0ZW0gbWVtb3J5ICovCi0JaWYgKHdpbi0+Y3RsLnJlcykgewotCQlyZWxlYXNlX3Jlc291cmNlKHdpbi0+Y3RsLnJlcyk7Ci0JCWtmcmVlKHdpbi0+Y3RsLnJlcyk7Ci0JCXdpbi0+Y3RsLnJlcyA9IE5VTEw7CisJaWYgKHdpbi0+cmVzKSB7CisJCXJlbGVhc2VfcmVzb3VyY2Uod2luLT5yZXMpOworCQlrZnJlZSh3aW4tPnJlcyk7CisJCXdpbi0+cmVzID0gTlVMTDsKIAl9Ci0Jd2luLT5oYW5kbGUtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHdpbi0+aW5kZXgpOwotCi0Jd2luLT5tYWdpYyA9IDA7CisJcF9kZXYtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHdoKTsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV93aW5kb3cgKi8KQEAgLTQ5MiwxMiArNDQyLDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKHJlcS0+SW50VHlwZSAmIElOVF9DQVJEQlVTKSB7Ci0JCWRzX2RiZyhwX2Rldi0+c29ja2V0LCAwLCAiSW50VHlwZSBtYXkgbm90IGJlIElOVF9DQVJEQlVTXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiSW50VHlwZSBtYXkgbm90IGJlIElOVF9DQVJEQlVTXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwotCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCisJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgeworCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7CiAJCXJldHVybiAtRUFDQ0VTOworCX0KIAogCS8qIERvIHBvd2VyIGNvbnRyb2wuICBXZSBkb24ndCBhbGxvdyBjaGFuZ2VzIGluIFZjYy4gKi8KIAlzLT5zb2NrZXQuVnBwID0gcmVxLT5WcHA7CkBAIC02MDksNDAgKzU2MSw0NCBAQAogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAljb25maWdfdCAqYzsKIAotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCWlmICghcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKLQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQorCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lPX1JFUSkgewotCQlkc19kYmcocywgMCwgIklPIGFscmVhZHkgY29uZmlndXJlZFxuIik7CisJCWRldl9kYmcoJnMtPmRldiwgIklPIGFscmVhZHkgY29uZmlndXJlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmIChyZXEtPkF0dHJpYnV0ZXMxICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpIHsKLQkJZHNfZGJnKHMsIDAsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAxXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoKHJlcS0+TnVtUG9ydHMyID4gMCkgJiYKIAkgICAgKHJlcS0+QXR0cmlidXRlczIgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkpIHsKLQkJZHNfZGJnKHMsIDAsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAyXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRzX2RiZyhzLCAxLCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDFcbiIpOworCWRldl9kYmcoJnMtPmRldiwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAxXG4iKTsKIAlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAogCQkJICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpKSB7Ci0JCWRzX2RiZyhzLCAwLCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAxIGZhaWxlZFxuIik7CisJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChyZXEtPk51bVBvcnRzMikgewotCQlkc19kYmcocywgMSwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAyXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDJcbiIpOwogCQlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAogCQkJCSAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKSkgewotCQkJZHNfZGJnKHMsIDAsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDIgZmFpbGVkXG4iKTsKKwkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMiBmYWlsZWRcbiIpOwogCQkJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MSwgcmVxLT5OdW1Qb3J0czEpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQpAQCAtNjgwLDEzICs2MzYsMTcgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaXJxID0gMDsKIAlpbnQgdHlwZTsKIAotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKLQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQorCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpIHsKLQkJZHNfZGJnKHMsIDAsICJJUlEgYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIGFscmVhZHkgY29uZmlndXJlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03MDQsNyArNjY0LDcgQEAKIAkvKiBpZiB0aGUgdW5kZXJseWluZyBJUlEgaW5mcmFzdHJ1Y3R1cmUgYWxsb3dzIGZvciBpdCwgb25seSBhbGxvY2F0ZQogCSAqIHRoZSBJUlEsIGJ1dCBkbyBub3QgZW5hYmxlIGl0CiAJICovCi0JaWYgKCEocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSkKKwlpZiAoIShyZXEtPkhhbmRsZXIpKQogCQl0eXBlIHw9IElSUV9OT0FVVE9FTjsKICNlbmRpZiAvKiBJUlFfTk9BVVRPRU4gKi8KIApAQCAtNzE0LDcgKzY3NCw3IEBACiAJfSBlbHNlIHsKIAkJaW50IHRyeTsKIAkJdTMyIG1hc2sgPSBzLT5pcnFfbWFzazsKLQkJdm9pZCAqZGF0YSA9ICZwX2Rldi0+ZGV2LmRyaXZlcjsgLyogc29tZXRoaW5nIHVuaXF1ZSB0byB0aGlzIGRldmljZSAqLworCQl2b2lkICpkYXRhID0gcF9kZXY7IC8qIHNvbWV0aGluZyB1bmlxdWUgdG8gdGhpcyBkZXZpY2UgKi8KIAogCQlmb3IgKHRyeSA9IDA7IHRyeSA8IDY0OyB0cnkrKykgewogCQkJaXJxID0gdHJ5ICUgMzI7CkBAIC03MzEsMTIgKzY5MSwxMiBAQAogCQkJICogcmVnaXN0ZXJpbmcgYSBkdW1teSBoYW5kbGUgd29ya3MsIGkuZS4gaWYgdGhlIElSUSBpc24ndAogCQkJICogbWFya2VkIGFzIHVzZWQgYnkgdGhlIGtlcm5lbCByZXNvdXJjZSBtYW5hZ2VtZW50IGNvcmUgKi8KIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwKLQkJCQkJICAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSA/IHJlcS0+SGFuZGxlciA6IHRlc3RfYWN0aW9uLAorCQkJCQkgIChyZXEtPkhhbmRsZXIpID8gcmVxLT5IYW5kbGVyIDogdGVzdF9hY3Rpb24sCiAJCQkJCSAgdHlwZSwKIAkJCQkJICBwX2Rldi0+ZGV2bmFtZSwKLQkJCQkJICAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSA/IHJlcS0+SW5zdGFuY2UgOiBkYXRhKTsKKwkJCQkJICAocmVxLT5IYW5kbGVyKSA/IHBfZGV2LT5wcml2IDogZGF0YSk7CiAJCQlpZiAoIXJldCkgewotCQkJCWlmICghKHJlcS0+QXR0cmlidXRlcyAmIElSUV9IQU5ETEVfUFJFU0VOVCkpCisJCQkJaWYgKCFyZXEtPkhhbmRsZXIpCiAJCQkJCWZyZWVfaXJxKGlycSwgZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC03NDUsMTcgKzcwNSwyMiBAQAogI2VuZGlmCiAJLyogb25seSBhc3NpZ24gUENJIGlycSBpZiBubyBJUlEgYWxyZWFkeSBhc3NpZ25lZCAqLwogCWlmIChyZXQgJiYgIXMtPmlycS5Bc3NpZ25lZElSUSkgewotCQlpZiAoIXMtPnBjaV9pcnEpCisJCWlmICghcy0+cGNpX2lycSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJubyBJUlEgZm91bmRcbiIpOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCQl0eXBlID0gSVJRRl9TSEFSRUQ7CiAJCWlycSA9IHMtPnBjaV9pcnE7CiAJfQogCi0JaWYgKHJldCAmJiAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSkgeworCWlmIChyZXQgJiYgcmVxLT5IYW5kbGVyKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgcmVxLT5IYW5kbGVyLCB0eXBlLAotCQkJCSAgcF9kZXYtPmRldm5hbWUsIHJlcS0+SW5zdGFuY2UpOwotCQlpZiAocmV0KQorCQkJCSAgcF9kZXYtPmRldm5hbWUsIHBfZGV2LT5wcml2KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsCisJCQkJInJlcXVlc3RfaXJxKCkgZmFpbGVkXG4iKTsKIAkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGZhY3QgdGhlIHJlcXVlc3QgdHlwZSB3YXMgb3ZlcnJpZGRlbiBpcyBwYXNzZWQgYmFjayAqLwpAQCAtNzg3LDE3ICs3NTIsMTkgQEAKICAqIFJlcXVlc3Rfd2luZG93KCkgZXN0YWJsaXNoZXMgYSBtYXBwaW5nIGJldHdlZW4gY2FyZCBtZW1vcnkgc3BhY2UKICAqIGFuZCBzeXN0ZW0gbWVtb3J5IHNwYWNlLgogICovCi1pbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICoqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLCB3aW5kb3dfaGFuZGxlX3QgKndoKQoraW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLCB3aW5kb3dfaGFuZGxlX3QgKndoKQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gKCpwX2RldiktPnNvY2tldDsKLQl3aW5kb3dfdCAqd2luOworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwlwY2NhcmRfbWVtX21hcCAqd2luOwogCXVfbG9uZyBhbGlnbjsKIAlpbnQgdzsKIAotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgKFdJTl9QQUdFRCB8IFdJTl9TSEFSRUQpKSB7Ci0JCWRzX2RiZyhzLCAwLCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBpb21lbSByZWdpb25cbiIpOworCQlkZXZfZGJnKCZzLT5kZXYsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIGlvbWVtIHJlZ2lvblxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODA4LDEyICs3NzUsMTIgQEAKIAkJICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1NUUklDVF9BTElHTikpID8KIAkJIHJlcS0+U2l6ZSA6IHMtPm1hcF9zaXplKTsKIAlpZiAocmVxLT5TaXplICYgKHMtPm1hcF9zaXplLTEpKSB7Ci0JCWRzX2RiZyhzLCAwLCAiaW52YWxpZCBtYXAgc2l6ZVxuIik7CisJCWRldl9kYmcoJnMtPmRldiwgImludmFsaWQgbWFwIHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKChyZXEtPkJhc2UgJiYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApKSB8fAogCSAgICAocmVxLT5CYXNlICYgKGFsaWduLTEpKSkgewotCQlkc19kYmcocywgMCwgImludmFsaWQgYmFzZSBhZGRyZXNzXG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiaW52YWxpZCBiYXNlIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHJlcS0+QmFzZSkKQEAgLTgyMyw1MiArNzkwLDQ4IEBACiAJZm9yICh3ID0gMDsgdyA8IE1BWF9XSU47IHcrKykKIAkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfV0lOX1JFUSh3KSkpIGJyZWFrOwogCWlmICh3ID09IE1BWF9XSU4pIHsKLQkJZHNfZGJnKHMsIDAsICJhbGwgd2luZG93cyBhcmUgdXNlZCBhbHJlYWR5XG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsIHdpbmRvd3MgYXJlIHVzZWQgYWxyZWFkeVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXdpbiA9ICZzLT53aW5bd107Ci0Jd2luLT5tYWdpYyA9IFdJTkRPV19NQUdJQzsKLQl3aW4tPmluZGV4ID0gdzsKLQl3aW4tPmhhbmRsZSA9ICpwX2RldjsKLQl3aW4tPnNvY2sgPSBzOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKLQkJd2luLT5jdGwucmVzID0gcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbihyZXEtPkJhc2UsIHJlcS0+U2l6ZSwgYWxpZ24sCisJCXdpbi0+cmVzID0gcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbihyZXEtPkJhc2UsIHJlcS0+U2l6ZSwgYWxpZ24sCiAJCQkJCQkgICAgICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX01BUF9CRUxPV18xTUIpLCBzKTsKLQkJaWYgKCF3aW4tPmN0bC5yZXMpIHsKLQkJCWRzX2RiZyhzLCAwLCAiYWxsb2NhdGluZyBtZW0gcmVnaW9uIGZhaWxlZFxuIik7CisJCWlmICghd2luLT5yZXMpIHsKKwkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JKCpwX2RldiktPl93aW4gfD0gQ0xJRU5UX1dJTl9SRVEodyk7CisJcF9kZXYtPl93aW4gfD0gQ0xJRU5UX1dJTl9SRVEodyk7CiAKIAkvKiBDb25maWd1cmUgdGhlIHNvY2tldCBjb250cm9sbGVyICovCi0Jd2luLT5jdGwubWFwID0gdysxOwotCXdpbi0+Y3RsLmZsYWdzID0gMDsKLQl3aW4tPmN0bC5zcGVlZCA9IHJlcS0+QWNjZXNzU3BlZWQ7CisJd2luLT5tYXAgPSB3KzE7CisJd2luLT5mbGFncyA9IDA7CisJd2luLT5zcGVlZCA9IHJlcS0+QWNjZXNzU3BlZWQ7CiAJaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9NRU1PUllfVFlQRSkKLQkJd2luLT5jdGwuZmxhZ3MgfD0gTUFQX0FUVFJJQjsKKwkJd2luLT5mbGFncyB8PSBNQVBfQVRUUklCOwogCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fRU5BQkxFKQotCQl3aW4tPmN0bC5mbGFncyB8PSBNQVBfQUNUSVZFOworCQl3aW4tPmZsYWdzIHw9IE1BUF9BQ1RJVkU7CiAJaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9EQVRBX1dJRFRIXzE2KQotCQl3aW4tPmN0bC5mbGFncyB8PSBNQVBfMTZCSVQ7CisJCXdpbi0+ZmxhZ3MgfD0gTUFQXzE2QklUOwogCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fVVNFX1dBSVQpCi0JCXdpbi0+Y3RsLmZsYWdzIHw9IE1BUF9VU0VfV0FJVDsKLQl3aW4tPmN0bC5jYXJkX3N0YXJ0ID0gMDsKLQlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCAmd2luLT5jdGwpICE9IDApIHsKLQkJZHNfZGJnKHMsIDAsICJmYWlsZWQgdG8gc2V0IG1lbW9yeSBtYXBwaW5nXG4iKTsKKwkJd2luLT5mbGFncyB8PSBNQVBfVVNFX1dBSVQ7CisJd2luLT5jYXJkX3N0YXJ0ID0gMDsKKwlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCB3aW4pICE9IDApIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBtZW1vcnkgbWFwcGluZ1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlzLT5zdGF0ZSB8PSBTT0NLRVRfV0lOX1JFUSh3KTsKIAogCS8qIFJldHVybiB3aW5kb3cgaGFuZGxlICovCiAJaWYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApIHsKLQkJcmVxLT5CYXNlID0gd2luLT5jdGwuc3RhdGljX3N0YXJ0OworCQlyZXEtPkJhc2UgPSB3aW4tPnN0YXRpY19zdGFydDsKIAl9IGVsc2UgewotCQlyZXEtPkJhc2UgPSB3aW4tPmN0bC5yZXMtPnN0YXJ0OworCQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7CiAJfQotCSp3aCA9IHdpbjsKKwkqd2ggPSB3ICsgMTsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF93aW5kb3cgKi8KQEAgLTg3OSwxOSArODQyLDQ2IEBACiAJcGNtY2lhX3JlbGVhc2VfaW8ocF9kZXYsICZwX2Rldi0+aW8pOwogCXBjbWNpYV9yZWxlYXNlX2lycShwX2RldiwgJnBfZGV2LT5pcnEpOwogCWlmIChwX2Rldi0+d2luKQotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cocF9kZXYtPndpbik7CisJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2RldiwgcF9kZXYtPndpbik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9kaXNhYmxlX2RldmljZSk7CiAKIAogc3RydWN0IHBjbWNpYV9jZmdfbWVtIHsKLQl0dXBsZV90IHR1cGxlOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKKwl2b2lkICpwcml2X2RhdGE7CisJaW50ICgqY29uZl9jaGVjaykgKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgdm9pZCAqcHJpdl9kYXRhKTsKIAljaXNwYXJzZV90IHBhcnNlOwotCXU4IGJ1ZlsyNTZdOwogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdDsKIH07CiAKIC8qKgorICogcGNtY2lhX2RvX2xvb3BfY29uZmlnKCkgLSBpbnRlcm5hbCBoZWxwZXIgZm9yIHBjbWNpYV9sb29wX2NvbmZpZygpCisgKgorICogcGNtY2lhX2RvX2xvb3BfY29uZmlnKCkgaXMgdGhlIGludGVybmFsIGNhbGxiYWNrIGZvciB0aGUgY2FsbCBmcm9tCisgKiBwY21jaWFfbG9vcF9jb25maWcoKSB0byBwY2NhcmRfbG9vcF90dXBsZSgpLiBEYXRhIGlzIHRyYW5zZmVycmVkCisgKiBieSBhIHN0cnVjdCBwY21jaWFfY2ZnX21lbS4KKyAqLworc3RhdGljIGludCBwY21jaWFfZG9fbG9vcF9jb25maWcodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2KQoreworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKKwlzdHJ1Y3QgcGNtY2lhX2NmZ19tZW0gKmNmZ19tZW0gPSBwcml2OworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwljZmdfbWVtLT5wX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQljZmdfbWVtLT5kZmx0ID0gKmNmZzsKKworCXJldHVybiBjZmdfbWVtLT5jb25mX2NoZWNrKGNmZ19tZW0tPnBfZGV2LCBjZmcsICZjZmdfbWVtLT5kZmx0LAorCQkJCSAgIGNmZ19tZW0tPnBfZGV2LT5zb2NrZXQtPnNvY2tldC5WY2MsCisJCQkJICAgY2ZnX21lbS0+cHJpdl9kYXRhKTsKK30KKworLyoqCiAgKiBwY21jaWFfbG9vcF9jb25maWcoKSAtIGxvb3Agb3ZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMKICAqIEBwX2RldjoJdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHdoaWNoIHdlIG5lZWQgdG8gbG9vcCBmb3IuCiAgKiBAY29uZl9jaGVjazoJZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbi4KQEAgLTkxMyw0OCArOTAzLDE3NCBAQAogCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQogewogCXN0cnVjdCBwY21jaWFfY2ZnX21lbSAqY2ZnX21lbTsKLQotCXR1cGxlX3QgKnR1cGxlOwogCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IHZjYzsKIAogCWNmZ19tZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtY2lhX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2ZnX21lbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIGdldCB0aGUgY3VycmVudCBWY2Mgc2V0dGluZyAqLwotCXZjYyA9IHBfZGV2LT5zb2NrZXQtPnNvY2tldC5WY2M7CisJY2ZnX21lbS0+cF9kZXYgPSBwX2RldjsKKwljZmdfbWVtLT5jb25mX2NoZWNrID0gY29uZl9jaGVjazsKKwljZmdfbWVtLT5wcml2X2RhdGEgPSBwcml2X2RhdGE7CiAKLQl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLQl0dXBsZS0+VHVwbGVEYXRhID0gY2ZnX21lbS0+YnVmOwotCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOworCXJldCA9IHBjY2FyZF9sb29wX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLAorCQkJCUNJU1RQTF9DRlRBQkxFX0VOVFJZLCAmY2ZnX21lbS0+cGFyc2UsCisJCQkJY2ZnX21lbSwgcGNtY2lhX2RvX2xvb3BfY29uZmlnKTsKIAotCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUocF9kZXYsIHR1cGxlKTsKLQl3aGlsZSAoIXJldCkgewotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmY2ZnX21lbS0+cGFyc2UuY2Z0YWJsZV9lbnRyeTsKLQotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkpCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgJmNmZ19tZW0tPnBhcnNlKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQkvKiBkZWZhdWx0IHZhbHVlcyAqLwotCQlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKLQkJCWNmZ19tZW0tPmRmbHQgPSAqY2ZnOwotCi0JCXJldCA9IGNvbmZfY2hlY2socF9kZXYsIGNmZywgJmNmZ19tZW0tPmRmbHQsIHZjYywgcHJpdl9kYXRhKTsKLQkJaWYgKCFyZXQpCi0JCQlicmVhazsKLQotbmV4dF9lbnRyeToKLQkJcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBfZGV2LCB0dXBsZSk7Ci0JfQotCisJa2ZyZWUoY2ZnX21lbSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2xvb3BfY29uZmlnKTsKKworCitzdHJ1Y3QgcGNtY2lhX2xvb3BfbWVtIHsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CisJdm9pZCAqcHJpdl9kYXRhOworCWludCAoKmxvb3BfdHVwbGUpIChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICB0dXBsZV90ICp0dXBsZSwKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSk7Cit9OworCisvKioKKyAqIHBjbWNpYV9kb19sb29wX3R1cGxlKCkgLSBpbnRlcm5hbCBoZWxwZXIgZm9yIHBjbWNpYV9sb29wX2NvbmZpZygpCisgKgorICogcGNtY2lhX2RvX2xvb3BfdHVwbGUoKSBpcyB0aGUgaW50ZXJuYWwgY2FsbGJhY2sgZm9yIHRoZSBjYWxsIGZyb20KKyAqIHBjbWNpYV9sb29wX3R1cGxlKCkgdG8gcGNjYXJkX2xvb3BfdHVwbGUoKS4gRGF0YSBpcyB0cmFuc2ZlcnJlZAorICogYnkgYSBzdHJ1Y3QgcGNtY2lhX2NmZ19tZW0uCisgKi8KK3N0YXRpYyBpbnQgcGNtY2lhX2RvX2xvb3BfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBwY21jaWFfbG9vcF9tZW0gKmxvb3AgPSBwcml2OworCisJcmV0dXJuIGxvb3AtPmxvb3BfdHVwbGUobG9vcC0+cF9kZXYsIHR1cGxlLCBsb29wLT5wcml2X2RhdGEpOworfTsKKworLyoqCisgKiBwY21jaWFfbG9vcF90dXBsZSgpIC0gbG9vcCBvdmVyIHR1cGxlcyBpbiB0aGUgQ0lTCisgKiBAcF9kZXY6CXRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSB3aGljaCB3ZSBuZWVkIHRvIGxvb3AgZm9yLgorICogQGNvZGU6CXdoaWNoIENJUyBjb2RlIHNoYWxsIHdlIGxvb2sgZm9yPworICogQHByaXZfZGF0YToJcHJpdmF0ZSBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgbG9vcF90dXBsZSBmdW5jdGlvbi4KKyAqIEBsb29wX3R1cGxlOglmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIENJUyBlbnRyeSBvZiB0eXBlIEBmdW5jdGlvbi4gSVQKKyAqCQlnZXRzIHBhc3NlZCB0aGUgcmF3IHR1cGxlIGFuZCBAcHJpdl9kYXRhLgorICoKKyAqIHBjbWNpYV9sb29wX3R1cGxlKCkgbG9vcHMgb3ZlciBhbGwgQ0lTIGVudHJpZXMgb2YgdHlwZSBAZnVuY3Rpb24sIGFuZAorICogY2FsbHMgdGhlIEBsb29wX3R1cGxlIGZ1bmN0aW9uIGZvciBlYWNoIGVudHJ5LiBJZiB0aGUgY2FsbCB0byBAbG9vcF90dXBsZQorICogcmV0dXJucyAwLCB0aGUgbG9vcCBleGl0cy4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Jjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IHBjbWNpYV9sb29wX3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY2lzZGF0YV90IGNvZGUsCisJCSAgICAgIGludCAoKmxvb3BfdHVwbGUpIChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJCSB0dXBsZV90ICp0dXBsZSwKKwkJCQkJIHZvaWQgKnByaXZfZGF0YSksCisJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcGNtY2lhX2xvb3BfbWVtIGxvb3AgPSB7CisJCS5wX2RldiA9IHBfZGV2LAorCQkubG9vcF90dXBsZSA9IGxvb3BfdHVwbGUsCisJCS5wcml2X2RhdGEgPSBwcml2X2RhdGF9OworCisJcmV0dXJuIHBjY2FyZF9sb29wX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBjb2RlLCBOVUxMLAorCQkJCSAmbG9vcCwgcGNtY2lhX2RvX2xvb3BfdHVwbGUpOworfTsKK0VYUE9SVF9TWU1CT0wocGNtY2lhX2xvb3BfdHVwbGUpOworCisKK3N0cnVjdCBwY21jaWFfbG9vcF9nZXQgeworCXNpemVfdCBsZW47CisJY2lzZGF0YV90ICoqYnVmOworfTsKKworLyoqCisgKiBwY21jaWFfZG9fZ2V0X3R1cGxlKCkgLSBpbnRlcm5hbCBoZWxwZXIgZm9yIHBjbWNpYV9nZXRfdHVwbGUoKQorICoKKyAqIHBjbWNpYV9kb19nZXRfdHVwbGUoKSBpcyB0aGUgaW50ZXJuYWwgY2FsbGJhY2sgZm9yIHRoZSBjYWxsIGZyb20KKyAqIHBjbWNpYV9nZXRfdHVwbGUoKSB0byBwY21jaWFfbG9vcF90dXBsZSgpLiBBcyB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4KKyAqIHRoZSBmaXJzdCB0dXBsZSwgcmV0dXJuIDAgdW5jb25kaXRpb25hbGx5LiBDcmVhdGUgYSBtZW1vcnkgYnVmZmVyIGxhcmdlCisgKiBlbm91Z2ggdG8gaG9sZCB0aGUgY29udGVudCBvZiB0aGUgdHVwbGUsIGFuZCBmaWxsIGl0IHdpdGggdGhlIHR1cGxlIGRhdGEuCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGZyZWUgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIGludCBwY21jaWFfZG9fZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUsCisJCQkgICAgICAgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2xvb3BfZ2V0ICpnZXQgPSBwcml2OworCisJKmdldC0+YnVmID0ga3phbGxvYyh0dXBsZS0+VHVwbGVEYXRhTGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoKmdldC0+YnVmKSB7CisJCWdldC0+bGVuID0gdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwkJbWVtY3B5KCpnZXQtPmJ1ZiwgdHVwbGUtPlR1cGxlRGF0YSwgdHVwbGUtPlR1cGxlRGF0YUxlbik7CisJfSBlbHNlCisJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJkb19nZXRfdHVwbGU6IG91dCBvZiBtZW1vcnlcbiIpOworCXJldHVybiAwOworfTsKKworLyoqCisgKiBwY21jaWFfZ2V0X3R1cGxlKCkgLSBnZXQgZmlyc3QgdHVwbGUgZnJvbSBDSVMKKyAqIEBwX2RldjoJdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHdoaWNoIHdlIG5lZWQgdG8gbG9vcCBmb3IuCisgKiBAY29kZToJd2hpY2ggQ0lTIGNvZGUgc2hhbGwgd2UgbG9vayBmb3I/CisgKiBAYnVmOiAgICAgICAgcG9pbnRlciB0byBzdG9yZSB0aGUgYnVmZmVyIHRvLgorICoKKyAqIHBjbWNpYV9nZXRfdHVwbGUoKSBnZXRzIHRoZSBjb250ZW50IG9mIHRoZSBmaXJzdCBDSVMgZW50cnkgb2YgdHlwZSBAY29kZS4KKyAqIEl0IHJldHVybnMgdGhlIGJ1ZmZlciBsZW5ndGggKG9yIHplcm8pLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGZyZWUKKyAqIHRoZSBidWZmZXIgcGFzc2VkIGluIEBidWYuCisgKi8KK3NpemVfdCBwY21jaWFfZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY2lzZGF0YV90IGNvZGUsCisJCQl1bnNpZ25lZCBjaGFyICoqYnVmKQoreworCXN0cnVjdCBwY21jaWFfbG9vcF9nZXQgZ2V0ID0geworCQkubGVuID0gMCwKKwkJLmJ1ZiA9IGJ1ZiwKKwl9OworCisJKmdldC5idWYgPSBOVUxMOworCXBjbWNpYV9sb29wX3R1cGxlKHBfZGV2LCBjb2RlLCBwY21jaWFfZG9fZ2V0X3R1cGxlLCAmZ2V0KTsKKworCXJldHVybiBnZXQubGVuOworfTsKK0VYUE9SVF9TWU1CT0wocGNtY2lhX2dldF90dXBsZSk7CisKKworLyoqCisgKiBwY21jaWFfZG9fZ2V0X21hYygpIC0gaW50ZXJuYWwgaGVscGVyIGZvciBwY21jaWFfZ2V0X21hY19mcm9tX2NpcygpCisgKgorICogcGNtY2lhX2RvX2dldF9tYWMoKSBpcyB0aGUgaW50ZXJuYWwgY2FsbGJhY2sgZm9yIHRoZSBjYWxsIGZyb20KKyAqIHBjbWNpYV9nZXRfbWFjX2Zyb21fY2lzKCkgdG8gcGNtY2lhX2xvb3BfdHVwbGUoKS4gV2UgY2hlY2sgd2hldGhlciB0aGUKKyAqIHR1cGxlIGNvbnRhaW5zIGEgcHJvcGVyIExBTl9OT0RFX0lEIG9mIGxlbmd0aCA2LCBhbmQgY29weSB0aGUgZGF0YQorICogdG8gc3RydWN0IG5ldF9kZXZpY2UtPmRldl9hZGRyW2ldLgorICovCitzdGF0aWMgaW50IHBjbWNpYV9kb19nZXRfbWFjKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgdHVwbGVfdCAqdHVwbGUsCisJCQkgICAgIHZvaWQgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXY7CisJaW50IGk7CisKKwlpZiAodHVwbGUtPlR1cGxlRGF0YVswXSAhPSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgRVRIX0FMRU4gKyAyKSB7CisJCWRldl93YXJuKCZwX2Rldi0+ZGV2LCAiSW52YWxpZCBDSVMgdHVwbGUgbGVuZ3RoIGZvciAiCisJCQkiTEFOX05PREVfSURcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHVwbGUtPlR1cGxlRGF0YVsxXSAhPSBFVEhfQUxFTikgeworCQlkZXZfd2FybigmcF9kZXYtPmRldiwgIkludmFsaWQgaGVhZGVyIGZvciBMQU5fTk9ERV9JRFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlkZXYtPmRldl9hZGRyW2ldID0gdHVwbGUtPlR1cGxlRGF0YVtpKzJdOworCXJldHVybiAwOworfTsKKworLyoqCisgKiBwY21jaWFfZ2V0X21hY19mcm9tX2NpcygpIC0gcmVhZCBvdXQgTUFDIGFkZHJlc3MgZnJvbSBDSVNUUExfRlVOQ0UKKyAqIEBwX2RldjoJdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIGZvciB3aGljaCB3ZSB3YW50IHRoZSBhZGRyZXNzLgorICogQGRldjoJYSBwcm9wZXJseSBwcmVwYXJlZCBzdHJ1Y3QgbmV0X2RldmljZSB0byBzdG9yZSB0aGUgaW5mbyB0by4KKyAqCisgKiBwY21jaWFfZ2V0X21hY19mcm9tX2NpcygpIHJlYWRzIG91dCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZnJvbQorICogQ0lTVFBMX0ZVTkNFIGFuZCBzdG9yZXMgaXQgaW50byBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LT5kZXZfYWRkciB3aGljaAorICogbXVzdCBiZSBzZXQgdXAgcHJvcGVybHkgYnkgdGhlIGRyaXZlciAoc2VlIGV4YW1wbGVzISkuCisgKi8KK2ludCBwY21jaWFfZ2V0X21hY19mcm9tX2NpcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9sb29wX3R1cGxlKHBfZGV2LCBDSVNUUExfRlVOQ0UsIHBjbWNpYV9kb19nZXRfbWFjLCBkZXYpOworfTsKK0VYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9tYWNfZnJvbV9jaXMpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCmluZGV4IDFjMzlkMzQuLmUxNzQxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCkBAIC0yMTMsNyArMjEzLDggQEAKIAogCQkJaWYgKGNzYyAmIEkzNjVfQ1NDX0RFVEVDVCkgewogCQkJCWV2ZW50cyB8PSBTU19ERVRFQ1Q7Ci0JCQkJZHByaW50aygiQ2FyZCBkZXRlY3RlZCBpbiBzb2NrZXQgJWkhXG4iLCBpKTsKKwkJCQlkZXZfdmRiZygmc29ja2V0W2ldLnNvY2tldC5kZXYsCisJCQkJCSJDYXJkIGRldGVjdGVkIGluIHNvY2tldCAlaSFcbiIsIGkpOwogCQkJfQogCiAJCQlpZiAoaW5kaXJlY3RfcmVhZCgmc29ja2V0W2ldLCBJMzY1X0lOVENUTCkKQEAgLTMzMSwxMSArMzMyLDExIEBACiAJcmVnID0gSTM2NV9QV1JfTk9SRVNFVDsgLyogZGVmYXVsdDogZGlzYWJsZSByZXNldGRydiBvbiByZXN1bWUgKi8KIAogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19QV1JfQVVUTykgewotCQlkcHJpbnRrKCJBdXRvIHBvd2VyXG4iKTsKKwkJZGV2X2RiZygmc29jay0+ZGV2LCAiQXV0byBwb3dlclxuIik7CiAJCXJlZyB8PSBJMzY1X1BXUl9BVVRPOwkvKiBhdXRvbWF0aWMgcG93ZXIgbW5nbW50ICovCiAJfQogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19PVVRQVVRfRU5BKSB7Ci0JCWRwcmludGsoIlBvd2VyIEVuYWJsZWRcbiIpOworCQlkZXZfZGJnKCZzb2NrLT5kZXYsICJQb3dlciBFbmFibGVkXG4iKTsKIAkJcmVnIHw9IEkzNjVfUFdSX09VVDsJLyogZW5hYmxlIHBvd2VyICovCiAJfQogCkBAIC0zNDMsNDAgKzM0NCw0NCBAQAogCWNhc2UgMDoKIAkJYnJlYWs7CiAJY2FzZSAzMzoKLQkJZHByaW50aygic2V0dGluZyB2b2x0YWdlIHRvIFZjYyB0byAzLjNWIG9uIHNvY2tldCAlaVxuIiwKKwkJZGV2X2RiZygmc29jay0+ZGV2LAorCQkJInNldHRpbmcgdm9sdGFnZSB0byBWY2MgdG8gMy4zViBvbiBzb2NrZXQgJWlcbiIsCiAJCQlzb2NrZXQtPm51bWJlcik7CiAJCXJlZyB8PSBJMzY1X1ZDQ181VjsKIAkJaW5kaXJlY3Rfc2V0Yml0KHNvY2tldCwgUEQ2N19NSVNDX0NUTF8xLCBQRDY3X01DMV9WQ0NfM1YpOwogCQlicmVhazsKIAljYXNlIDUwOgotCQlkcHJpbnRrKCJzZXR0aW5nIHZvbHRhZ2UgdG8gVmNjIHRvIDVWIG9uIHNvY2tldCAlaVxuIiwKKwkJZGV2X2RiZygmc29jay0+ZGV2LAorCQkJInNldHRpbmcgdm9sdGFnZSB0byBWY2MgdG8gNVYgb24gc29ja2V0ICVpXG4iLAogCQkJc29ja2V0LT5udW1iZXIpOwogCQlyZWcgfD0gSTM2NV9WQ0NfNVY7CiAJCWluZGlyZWN0X3Jlc2V0Yml0KHNvY2tldCwgUEQ2N19NSVNDX0NUTF8xLCBQRDY3X01DMV9WQ0NfM1YpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcHJpbnRrKCJwZDY3Mjk6IHBkNjcyOV9zZXRfc29ja2V0IGNhbGxlZCB3aXRoICIKLQkJCQkiaW52YWxpZCBWQ0MgcG93ZXIgdmFsdWU6ICVpXG4iLAotCQkJc3RhdGUtPlZjYyk7CisJCWRldl9kYmcoJnNvY2stPmRldiwKKwkJCSJwZDY3Mjlfc2V0X3NvY2tldCBjYWxsZWQgd2l0aCBpbnZhbGlkIFZDQyBwb3dlciAiCisJCQkidmFsdWU6ICVpXG4iLCBzdGF0ZS0+VmNjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3dpdGNoIChzdGF0ZS0+VnBwKSB7CiAJY2FzZSAwOgotCQlkcHJpbnRrKCJub3Qgc2V0dGluZyBWcHAgb24gc29ja2V0ICVpXG4iLCBzb2NrZXQtPm51bWJlcik7CisJCWRldl9kYmcoJnNvY2stPmRldiwgIm5vdCBzZXR0aW5nIFZwcCBvbiBzb2NrZXQgJWlcbiIsCisJCQlzb2NrZXQtPm51bWJlcik7CiAJCWJyZWFrOwogCWNhc2UgMzM6CiAJY2FzZSA1MDoKLQkJZHByaW50aygic2V0dGluZyBWcHAgdG8gVmNjIGZvciBzb2NrZXQgJWlcbiIsIHNvY2tldC0+bnVtYmVyKTsKKwkJZGV2X2RiZygmc29jay0+ZGV2LCAic2V0dGluZyBWcHAgdG8gVmNjIGZvciBzb2NrZXQgJWlcbiIsCisJCQlzb2NrZXQtPm51bWJlcik7CiAJCXJlZyB8PSBJMzY1X1ZQUDFfNVY7CiAJCWJyZWFrOwogCWNhc2UgMTIwOgotCQlkcHJpbnRrKCJzZXR0aW5nIFZwcCB0byAxMi4wXG4iKTsKKwkJZGV2X2RiZygmc29jay0+ZGV2LCAic2V0dGluZyBWcHAgdG8gMTIuMFxuIik7CiAJCXJlZyB8PSBJMzY1X1ZQUDFfMTJWOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcHJpbnRrKCJwZDY3Mjk6IHBkNjcyOV9zZXRfc29ja2V0IGNhbGxlZCB3aXRoIGludmFsaWQgVlBQIHBvd2VyIHZhbHVlOiAlaVxuIiwKLQkJCXN0YXRlLT5WcHApOworCQlkZXZfZGJnKCZzb2NrLT5kZXYsICJwZDY3Mjk6IHBkNjcyOV9zZXRfc29ja2V0IGNhbGxlZCB3aXRoICIKKwkJCSJpbnZhbGlkIFZQUCBwb3dlciB2YWx1ZTogJWlcbiIsIHN0YXRlLT5WcHApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzOCw3ICs0NDMsNyBAQAogCiAJLyogQ2hlY2sgZXJyb3IgY29uZGl0aW9ucyAqLwogCWlmIChtYXAgPiAxKSB7Ci0JCWRwcmludGsoInBkNjcyOV9zZXRfaW9fbWFwIHdpdGggaW52YWxpZCBtYXAiKTsKKwkJZGV2X2RiZygmc29jay0+ZGV2LCAicGQ2NzI5X3NldF9pb19tYXAgd2l0aCBpbnZhbGlkIG1hcFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDQ2LDcgKzQ1MSw3IEBACiAJaWYgKGluZGlyZWN0X3JlYWQoc29ja2V0LCBJMzY1X0FERFJXSU4pICYgSTM2NV9FTkFfSU8obWFwKSkKIAkJaW5kaXJlY3RfcmVzZXRiaXQoc29ja2V0LCBJMzY1X0FERFJXSU4sIEkzNjVfRU5BX0lPKG1hcCkpOwogCi0JLyogZHByaW50aygic2V0X2lvX21hcDogU2V0dGluZyByYW5nZSB0byAleCAtICV4XG4iLAorCS8qIGRldl9kYmcoJnNvY2stPmRldiwgInNldF9pb19tYXA6IFNldHRpbmcgcmFuZ2UgdG8gJXggLSAleFxuIiwKIAkgICBpby0+c3RhcnQsIGlvLT5zdG9wKTsqLwogCiAJLyogd3JpdGUgdGhlIG5ldyB2YWx1ZXMgKi8KQEAgLTQ3OCwxMiArNDgzLDEyIEBACiAKIAltYXAgPSBtZW0tPm1hcDsKIAlpZiAobWFwID4gNCkgewotCQlwcmludGsoInBkNjcyOV9zZXRfbWVtX21hcDogaW52YWxpZCBtYXAiKTsKKwkJZGV2X3dhcm4oJnNvY2stPmRldiwgImludmFsaWQgbWFwIHJlcXVlc3RlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICgobWVtLT5yZXMtPnN0YXJ0ID4gbWVtLT5yZXMtPmVuZCkgfHwgKG1lbS0+c3BlZWQgPiAxMDAwKSkgewotCQlwcmludGsoInBkNjcyOV9zZXRfbWVtX21hcDogaW52YWxpZCBhZGRyZXNzIC8gc3BlZWQiKTsKKwkJZGV2X3dhcm4oJnNvY2stPmRldiwgImludmFsaWQgaW52YWxpZCBhZGRyZXNzIC8gc3BlZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUyOSwxMiArNTM0LDEyIEBACiAJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfV1JQUk9UKQogCQlpIHw9IEkzNjVfTUVNX1dSUFJPVDsKIAlpZiAobWVtLT5mbGFncyAmIE1BUF9BVFRSSUIpIHsKLQkJLyogZHByaW50aygicmVxdWVzdGluZyBhdHRyaWJ1dGUgbWVtb3J5IGZvciBzb2NrZXQgJWlcbiIsCi0JCQlzb2NrZXQtPm51bWJlcik7Ki8KKwkJLyogZGV2X2RiZygmc29jay0+ZGV2LCAicmVxdWVzdGluZyBhdHRyaWJ1dGUgbWVtb3J5IGZvciAiCisJCSAgICJzb2NrZXQgJWlcbiIsIHNvY2tldC0+bnVtYmVyKTsqLwogCQlpIHw9IEkzNjVfTUVNX1JFRzsKIAl9IGVsc2UgewotCQkvKiBkcHJpbnRrKCJyZXF1ZXN0aW5nIG5vcm1hbCBtZW1vcnkgZm9yIHNvY2tldCAlaVxuIiwKLQkJCXNvY2tldC0+bnVtYmVyKTsqLworCQkvKiBkZXZfZGJnKCZzb2NrLT5kZXYsICJyZXF1ZXN0aW5nIG5vcm1hbCBtZW1vcnkgZm9yICIKKwkJICAgInNvY2tldCAlaVxuIiwgc29ja2V0LT5udW1iZXIpOyovCiAJfQogCWluZGlyZWN0X3dyaXRlMTYoc29ja2V0LCBiYXNlICsgSTM2NV9XX09GRiwgaSk7CiAKQEAgLTU3Nyw3ICs1ODIsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcGQ2NzI5X3Rlc3QoaW50IGlycSwgdm9pZCAqZGV2KQogewotCWRwcmludGsoIi0+IGhpdCBvbiBpcnEgJWRcbiIsIGlycSk7CisJcHJfZGV2ZWwoIi0+IGhpdCBvbiBpcnEgJWRcbiIsIGlycSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC02NDEsOCArNjQ2LDE0IEBACiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpKSkKIAkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAicGQ2NzI5OiBDaXJydXMgUEQ2NzI5IFBDSSB0byBQQ01DSUEgQnJpZGdlICIKLQkJImF0IDB4JWxseCBvbiBpcnEgJWRcbiIsCisJaWYgKCFwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSkgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJyZWZ1c2luZyB0byBsb2FkIHRoZSBkcml2ZXIgYXMgdGhlICIKKwkJCSJpb19iYXNlIGlzIE5VTEwuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOworCX0KKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkNpcnJ1cyBQRDY3MjkgUENJIHRvIFBDTUNJQSBCcmlkZ2UgYXQgMHglbGx4ICIKKwkJIm9uIGlycSAlZFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgZGV2LT5pcnEpOwogIAkvKgogCSAqIFNpbmNlIHdlIGhhdmUgbm8gbWVtb3J5IEJBUnMgc29tZSBmaXJtd2FyZSBtYXkgbm90CkBAIC02NTAsMTQgKzY2MSwxNCBAQAogCSAqLwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NPTU1BTkQsICZjb25maWdieXRlKTsKIAlpZiAoIShjb25maWdieXRlICYgUENJX0NPTU1BTkRfTUVNT1JZKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicGQ2NzI5OiBFbmFibGluZyBQQ0lfQ09NTUFORF9NRU1PUlkuXG4iKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJwZDY3Mjk6IEVuYWJsaW5nIFBDSV9DT01NQU5EX01FTU9SWS5cbiIpOwogCQljb25maWdieXRlIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NPTU1BTkQsIGNvbmZpZ2J5dGUpOwogCX0KIAogCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAicGQ2NzI5Iik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IHBjaSByZXF1ZXN0IHJlZ2lvbiBmYWlsZWQuXG4iKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAicGNpIHJlcXVlc3QgcmVnaW9uIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKQEAgLTY2Niw3ICs2NzcsNyBAQAogCiAJbWFzayA9IHBkNjcyOV9pc2Ffc2NhbigpOwogCWlmIChpcnFfbW9kZSA9PSAwICYmIG1hc2sgPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IG5vIElTQSBpbnRlcnJ1cHQgaXMgYXZhaWxhYmxlLlxuIik7CisJCWRldl93YXJuKCZkZXYtPmRldiwgIm5vIElTQSBpbnRlcnJ1cHQgaXMgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9CiAKQEAgLTY5MSw4ICs3MDIsOCBAQAogCQkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAkJaWYgKChyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgcGQ2NzI5X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJCQkJInBkNjcyOSIsIHNvY2tldCkpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBkNjcyOTogRmFpbGVkIHRvIHJlZ2lzdGVyIGlycSAlZCwgIgotCQkJCQkJCSJhYm9ydGluZ1xuIiwgZGV2LT5pcnEpOworCQkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLAorCQkJCWRldi0+aXJxKTsKIAkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAkJfQogCX0gZWxzZSB7CkBAIC03MDcsOCArNzE4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1NPQ0tFVFM7IGkrKykgewogCQlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrZXRbaV0uc29ja2V0KTsKIAkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAicGQ2NzI5OiBwY21jaWFfcmVnaXN0ZXJfc29ja2V0ICIKLQkJCQkJICAgICAgICJmYWlsZWQuXG4iKTsKKwkJCWRldl93YXJuKCZkZXYtPmRldiwgInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkLlxuIik7CiAJCQlmb3IgKGogPSAwOyBqIDwgaSA7IGorKykKIAkJCQlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNvY2tldFtqXS5zb2NrZXQpOwogCQkJZ290byBlcnJfb3V0X2ZyZWVfcmVzMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5oIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmgKaW5kZXggZjM5MmU0NS4uNDE0MThkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmgKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmgKQEAgLTEsMTMgKzEsNiBAQAogI2lmbmRlZiBfSU5DTFVERV9HVUFSRF9QRDY3MjlfSF8KICNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfUEQ2NzI5X0hfCiAKLS8qIERlYnVnaW5nIGRlZmluZXMgKi8KLSNpZmRlZiBOT1RSQUNFCi0jZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKSBwcmludGsoZm10ICwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIGRwcmludGsoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCiAvKiBGbGFncyBmb3IgSTM2NV9HRU5DVEwgKi8KICNkZWZpbmUgSTM2NV9ERl9WUzEJCTB4NDAJLyogREYtc3RlcCBWb2x0YWdlIFNlbnNlICovCiAjZGVmaW5lIEkzNjVfREZfVlMyCQkweDgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCAwZTM1YWNiLi44NGRkZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTIyOCw5ICsyMjgsNDMgQEAKICNkZWZpbmUgU0tUX0RFVl9JTkZPX1NJWkUobikgXAogCShzaXplb2Yoc3RydWN0IHNrdF9kZXZfaW5mbykgKyAobikqc2l6ZW9mKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCkpCiAKK2ludCBweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXNrdC0+cmVzX3NrdC5zdGFydCA9IF9QQ01DSUEoc2t0LT5ucik7CisJc2t0LT5yZXNfc2t0LmVuZCA9IF9QQ01DSUEoc2t0LT5ucikgKyBQQ01DSUFTcCAtIDE7CisJc2t0LT5yZXNfc2t0Lm5hbWUgPSBza3RfbmFtZXNbc2t0LT5ucl07CisJc2t0LT5yZXNfc2t0LmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlza3QtPnJlc19pby5zdGFydCA9IF9QQ01DSUFJTyhza3QtPm5yKTsKKwlza3QtPnJlc19pby5lbmQgPSBfUENNQ0lBSU8oc2t0LT5ucikgKyBQQ01DSUFJT1NwIC0gMTsKKwlza3QtPnJlc19pby5uYW1lID0gImlvIjsKKwlza3QtPnJlc19pby5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJc2t0LT5yZXNfbWVtLnN0YXJ0ID0gX1BDTUNJQU1lbShza3QtPm5yKTsKKwlza3QtPnJlc19tZW0uZW5kID0gX1BDTUNJQU1lbShza3QtPm5yKSArIFBDTUNJQU1lbVNwIC0gMTsKKwlza3QtPnJlc19tZW0ubmFtZSA9ICJtZW1vcnkiOworCXNrdC0+cmVzX21lbS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJc2t0LT5yZXNfYXR0ci5zdGFydCA9IF9QQ01DSUFBdHRyKHNrdC0+bnIpOworCXNrdC0+cmVzX2F0dHIuZW5kID0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCXNrdC0+cmVzX2F0dHIubmFtZSA9ICJhdHRyaWJ1dGUiOworCXNrdC0+cmVzX2F0dHIuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCXJldHVybiBzb2NfcGNtY2lhX2FkZF9vbmUoc2t0KTsKK30KKwordm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcykKK3sKKwkvKiBQcm92aWRlIG91ciBQWEEyeHggc3BlY2lmaWMgdGltaW5nIHJvdXRpbmVzLiAqLworCW9wcy0+c2V0X3RpbWluZyAgPSBweGEyeHhfcGNtY2lhX3NldF90aW1pbmc7CisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisJb3BzLT5mcmVxdWVuY3lfY2hhbmdlID0gcHhhMnh4X3BjbWNpYV9mcmVxdWVuY3lfY2hhbmdlOworI2VuZGlmCit9CisKIGludCBfX3B4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpbnQgaSwgcmV0OworCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CiAJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CkBAIC0yNDAsNiArMjc0LDggQEAKIAogCW9wcyA9IChzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqKWRldi0+cGxhdGZvcm1fZGF0YTsKIAorCXB4YTJ4eF9kcnZfcGNtY2lhX29wcyhvcHMpOworCiAJc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG9wcy0+bnIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI1MCw0MCArMjg2LDI1IEBACiAJZm9yIChpID0gMDsgaSA8IG9wcy0+bnI7IGkrKykgewogCQlza3QgPSAmc2luZm8tPnNrdFtpXTsKIAotCQlza3QtPm5yCQk9IG9wcy0+Zmlyc3QgKyBpOwotCQlza3QtPmlycQk9IE5PX0lSUTsKKwkJc2t0LT5uciA9IG9wcy0+Zmlyc3QgKyBpOworCQlza3QtPm9wcyA9IG9wczsKKwkJc2t0LT5zb2NrZXQub3duZXIgPSBvcHMtPm93bmVyOworCQlza3QtPnNvY2tldC5kZXYucGFyZW50ID0gZGV2OworCQlza3QtPnNvY2tldC5wY2lfaXJxID0gTk9fSVJROwogCi0JCXNrdC0+cmVzX3NrdC5zdGFydAk9IF9QQ01DSUEoc2t0LT5ucik7Ci0JCXNrdC0+cmVzX3NrdC5lbmQJPSBfUENNQ0lBKHNrdC0+bnIpICsgUENNQ0lBU3AgLSAxOwotCQlza3QtPnJlc19za3QubmFtZQk9IHNrdF9uYW1lc1tza3QtPm5yXTsKLQkJc2t0LT5yZXNfc2t0LmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KLQkJc2t0LT5yZXNfaW8uc3RhcnQJPSBfUENNQ0lBSU8oc2t0LT5ucik7Ci0JCXNrdC0+cmVzX2lvLmVuZAkJPSBfUENNQ0lBSU8oc2t0LT5ucikgKyBQQ01DSUFJT1NwIC0gMTsKLQkJc2t0LT5yZXNfaW8ubmFtZQk9ICJpbyI7Ci0JCXNrdC0+cmVzX2lvLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7Ci0KLQkJc2t0LT5yZXNfbWVtLnN0YXJ0CT0gX1BDTUNJQU1lbShza3QtPm5yKTsKLQkJc2t0LT5yZXNfbWVtLmVuZAk9IF9QQ01DSUFNZW0oc2t0LT5ucikgKyBQQ01DSUFNZW1TcCAtIDE7Ci0JCXNrdC0+cmVzX21lbS5uYW1lCT0gIm1lbW9yeSI7Ci0JCXNrdC0+cmVzX21lbS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOwotCi0JCXNrdC0+cmVzX2F0dHIuc3RhcnQJPSBfUENNQ0lBQXR0cihza3QtPm5yKTsKLQkJc2t0LT5yZXNfYXR0ci5lbmQJPSBfUENNQ0lBQXR0cihza3QtPm5yKSArIFBDTUNJQUF0dHJTcCAtIDE7Ci0JCXNrdC0+cmVzX2F0dHIubmFtZQk9ICJhdHRyaWJ1dGUiOwotCQlza3QtPnJlc19hdHRyLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07CisJCXJldCA9IHB4YTJ4eF9kcnZfcGNtY2lhX2FkZF9vbmUoc2t0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCX0KIAotCS8qIFByb3ZpZGUgb3VyIFBYQTJ4eCBzcGVjaWZpYyB0aW1pbmcgcm91dGluZXMuICovCi0Jb3BzLT5zZXRfdGltaW5nICA9IHB4YTJ4eF9wY21jaWFfc2V0X3RpbWluZzsKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLQlvcHMtPmZyZXF1ZW5jeV9jaGFuZ2UgPSBweGEyeHhfcGNtY2lhX2ZyZXF1ZW5jeV9jaGFuZ2U7Ci0jZW5kaWYKLQotCXJldCA9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgc2luZm8pOwotCi0JaWYgKCFyZXQpCisJaWYgKHJldCkgeworCQl3aGlsZSAoLS1pID49IDApCisJCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOworCQlrZnJlZShzaW5mbyk7CisJfSBlbHNlIHsKIAkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKGRldik7CisJCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNpbmZvKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk3LDcgKzMxOCwxNiBAQAogCiBzdGF0aWMgaW50IHB4YTJ4eF9kcnZfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKKwlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IHNpbmZvLT5uc2t0OyBpKyspCisJCXNvY19wY21jaWFfcmVtb3ZlX29uZSgmc2luZm8tPnNrdFtpXSk7CisKKwlrZnJlZShzaW5mbyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaAppbmRleCAyMzVkNjgxLi5jYjVlZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKQEAgLTEsMyArMSw2IEBACiAvKiB0ZW1wb3JhcnkgbWVhc3VyZSAqLwogZXh0ZXJuIGludCBfX3B4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKik7CiAKK2ludCBweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KTsKK3ZvaWQgcHhhMnh4X2Rydl9wY21jaWFfb3BzKHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA1MTQzYTc2Li4wNTkxM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJcmV0dXJuIHJldDsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QQ01DSUFfUkVTRVQsIDApOwogCi0Jc2t0LT5pcnEgPSBza3QtPm5yID09IDAgPyBQQ01DSUFfUzBfUkRZSU5UIDogUENNQ0lBX1MxX1JEWUlOVDsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gc2t0LT5uciA9PSAwID8gUENNQ0lBX1MwX1JEWUlOVCA6IFBDTUNJQV9TMV9SRFlJTlQ7CiAJcmV0ID0gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIAlpZiAoIXJldCkKIAkJZ3Bpb19mcmVlKEdQSU9fUENNQ0lBX1JFU0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCmluZGV4IGE3Yjk0M2QuLjU2NjI2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYwpAQCAtMzgsNyArMzgsNyBAQAogCQlyZXR1cm4gcmV0OwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BDTUNJQV9SRVNFVCwgMCk7CiAKLQlza3QtPmlycSA9IFBDTUNJQV9TMF9SRFlJTlQ7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IFBDTUNJQV9TMF9SRFlJTlQ7CiAJcmV0ID0gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIAlpZiAoIXJldCkKIAkJZ3Bpb19mcmVlKEdQSU9fUENNQ0lBX1JFU0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfZTc0MC5jCmluZGV4IGQwOWMwZGMuLjhiZmJkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2U3NDAuYwpAQCAtMzgsNyArMzgsNyBAQAogCiBzdGF0aWMgaW50IGU3NDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0Jc2t0LT5pcnEgPSBza3QtPm5yID09IDAgPyBJUlFfR1BJTyhHUElPX0U3NDBfUENNQ0lBX1JEWTApIDoKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gc2t0LT5uciA9PSAwID8gSVJRX0dQSU8oR1BJT19FNzQwX1BDTUNJQV9SRFkwKSA6CiAJCQkJSVJRX0dQSU8oR1BJT19FNzQwX1BDTUNJQV9SRFkxKTsKIAogCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsICZjZF9pcnFzW3NrdC0+bnJdLCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCmluZGV4IDZjYmIxYjEuLmI5ZjhjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYwpAQCAtMzIsNiArMzIsNyBAQAogbHViYm9ja19wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKIAkJCQljb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCiB7CisJc3RydWN0IHNhMTExMV9wY21jaWFfc29ja2V0ICpzID0gdG9fc2t0KHNrdCk7CiAJdW5zaWduZWQgaW50IHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0LCBtaXNjX21hc2ssIG1pc2Nfc2V0OwogCWludCByZXQgPSAwOwogCkBAIC0xNDksNyArMTUwLDcgQEAKIAogCWlmIChyZXQgPT0gMCkgewogCQlsdWJib2NrX3NldF9taXNjX3dyKG1pc2NfbWFzaywgbWlzY19zZXQpOwotCQlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CisJCXNhMTExMV9zZXRfaW8ocy0+ZGV2LCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CiAJfQogCiAjaWYgMQpAQCAtMTc1LDcgKzE3Niw3IEBACiAJCQkgKiBTd2l0Y2ggdG8gNVYsICBDb25maWd1cmUgc29ja2V0IHdpdGggNVYgdm9sdGFnZQogCQkJICovCiAJCQlsdWJib2NrX3NldF9taXNjX3dyKG1pc2NfbWFzaywgMCk7Ci0JCQlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwYV9kd3JfbWFzaywgMCk7CisJCQlzYTExMTFfc2V0X2lvKHMtPmRldiwgcGFfZHdyX21hc2ssIDApOwogCiAJCQkvKgogCQkJICogSXQgdGFrZXMgYWJvdXQgMTAwbXMgdG8gdHVybiBvZmYgVmNjLgpAQCAtMjAwLDEyICsyMDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgbHViYm9ja19wY21jaWFfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLmh3X2luaXQJCT0gc2ExMTExX3BjbWNpYV9od19pbml0LAotCS5od19zaHV0ZG93bgkJPSBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duLAotCS5zb2NrZXRfc3RhdGUJCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3RhdGUsCiAJLmNvbmZpZ3VyZV9zb2NrZXQJPSBsdWJib2NrX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAogCS5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogCS5maXJzdAkJCT0gMCwKIAkubnIJCQk9IDIsCiB9OwpAQCAtMjI4LDggKzIyNSw5IEBACiAJCS8qIFNldCBDRiBTb2NrZXQgMSBwb3dlciB0byBzdGFuZGJ5IG1vZGUuICovCiAJCWx1YmJvY2tfc2V0X21pc2Nfd3IoKDEgPDwgMTUpIHwgKDEgPDwgMTQpLCAwKTsKIAotCQlzYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmbHViYm9ja19wY21jaWFfb3BzOwotCQlyZXQgPSBfX3B4YTJ4eF9kcnZfcGNtY2lhX3Byb2JlKCZzYWRldi0+ZGV2KTsKKwkJcHhhMnh4X2Rydl9wY21jaWFfb3BzKCZsdWJib2NrX3BjbWNpYV9vcHMpOworCQlyZXQgPSBzYTExMTFfcGNtY2lhX2FkZChzYWRldiwgJmx1YmJvY2tfcGNtY2lhX29wcywKKwkJCQlweGEyeHhfZHJ2X3BjbWNpYV9hZGRfb25lKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCmluZGV4IDExMzg1NTEuLjkyMDE2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkgKiBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4KIAkgKi8KIAotCXNrdC0+aXJxID0gKHNrdC0+bnIgPT0gMCkgPyBNQUlOU1RPTkVfUzBfSVJRIDogTUFJTlNUT05FX1MxX0lSUTsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gKHNrdC0+bnIgPT0gMCkgPyBNQUlOU1RPTkVfUzBfSVJRIDogTUFJTlNUT05FX1MxX0lSUTsKIAlyZXR1cm4gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jCmluZGV4IDViYTliMzYuLjZmYjZmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbWxkLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjQ7CiAKLQlza3QtPmlycSA9IElSUV9HUElPKEdQSU9fTlJfUEFMTUxEX1BDTUNJQV9SRUFEWSk7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IElSUV9HUElPKEdQSU9fTlJfUEFMTUxEX1BDTUNJQV9SRUFEWSk7CiAJcmV0dXJuIDA7CiAKIGVycjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXR4LmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXR4LmMKaW5kZXggZTA3YjVjNS4uYjA3YjI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10eC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdHguYwpAQCAtNTMsNyArNTMsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyNTsKIAotCXNrdC0+aXJxID0gZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfUENNQ0lBX1JFQURZKTsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfUENNQ0lBX1JFQURZKTsKIAlyZXR1cm4gMDsKIAogZXJyNToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCmluZGV4IGJjNDNmNzguLjBlYTNiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYwpAQCAtNjYsNyArNjYsNyBAQAogCQl9CiAJfQogCi0Jc2t0LT5pcnEgPSBTQ09PUF9ERVZbc2t0LT5ucl0uaXJxOworCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBTQ09PUF9ERVZbc2t0LT5ucl0uaXJxOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdHJpemVwczQuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jCmluZGV4IGUwZTVjYjMuLmI3ZTU5NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jCkBAIC01Myw3ICs1Myw3IEBACiAJCQlncGlvX2ZyZWUoR1BJT19QUkRZKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXNrdC0+aXJxID0gSVJRX0dQSU8oR1BJT19QUkRZKTsKKwkJc2t0LT5zb2NrZXQucGNpX2lycSA9IElSUV9HUElPKEdQSU9fUFJEWSk7CiAJCWJyZWFrOwogCiAjaWZuZGVmIENPTkZJR19NQUNIX1RSSVpFUFNfQ09OWFMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJYnJlYWs7CiAJfQogCS8qIHJlbGVhc2UgdGhlIHJlc2V0IG9mIHRoaXMgY2FyZCAqLwotCXByX2RlYnVnKCIlczogc29jayAlZCBpcnEgJWRcbiIsIF9fZnVuY19fLCBza3QtPm5yLCBza3QtPmlycSk7CisJcHJfZGVidWcoIiVzOiBzb2NrICVkIGlycSAlZFxuIiwgX19mdW5jX18sIHNrdC0+bnIsIHNrdC0+c29ja2V0LnBjaV9pcnEpOwogCiAJLyogc3VwcGxlbWVudG9yeSBpcnFzIGZvciB0aGUgc29ja2V0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxcyk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdmlwZXIuYwppbmRleCAxNzg3MTM2Li4yN2JlMmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdmlwZXIuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdmlwZXIuYwpAQCAtNDAsNyArNDAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlza3QtPmlycSA9IGdwaW9fdG9faXJxKFZJUEVSX0NGX1JEWV9HUElPKTsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gZ3Bpb190b19pcnEoVklQRVJfQ0ZfUkRZX0dQSU8pOwogCiAJaWYgKGdwaW9fcmVxdWVzdChWSVBFUl9DRl9DRF9HUElPLCAiQ0YgZGV0ZWN0IikpCiAJCWdvdG8gZXJyX3JlcXVlc3RfY2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwppbmRleCBlNTkyZTBlLi5kZTBlNzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5Y2EyMmM3Li43MDM5ZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogICAgIC8qIEZpcnN0LCB3aGF0IGRvZXMgYSBmbG9hdGluZyBwb3J0IGxvb2sgbGlrZT8gKi8KICAgICBiID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOwogICAgIGlmICghYikgeworCSAgICBwcmludGsoIlxuIik7CiAJICAgIGRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCiAJCSAgICJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNyArMjc2LDcgQEAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCBjb3VudCk7CisJCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwogCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9hc3NhYmV0LmMKaW5kZXggYWM4YWEwOS4uZmQwMTNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIHN0YXRpYyBpbnQgYXNzYWJldF9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlza3QtPmlycSA9IEFTU0FCRVRfSVJRX0dQSU9fQ0ZfSVJROworCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBBU1NBQkVUX0lSUV9HUElPX0NGX0lSUTsKIAogCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2JhZGdlNC5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2JhZGdlNC5jCmluZGV4IDFjYTk3MzcuLjFjZTUzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9iYWRnZTQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYmFkZ2U0LmMKQEAgLTEyNywxMyArMTI3LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCBiYWRnZTRfcGNtY2lhX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5od19pbml0CQk9IHNhMTExMV9wY21jaWFfaHdfaW5pdCwKLQkuaHdfc2h1dGRvd24JCT0gc2ExMTExX3BjbWNpYV9od19zaHV0ZG93biwKLQkuc29ja2V0X3N0YXRlCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gYmFkZ2U0X3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCiAJLnNvY2tldF9pbml0CQk9IHNhMTExMV9wY21jaWFfc29ja2V0X2luaXQsCi0JLnNvY2tldF9zdXNwZW5kCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N1c3BlbmQsCisJLmZpcnN0CQkJPSAwLAorCS5ucgkJCT0gMiwKIH07CiAKIGludCBwY21jaWFfYmFkZ2U0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTQ2LDcgKzE0Myw5IEBACiAJCSAgICAgICBfX2Z1bmNfXywKIAkJICAgICAgIGJhZGdlNF9wY212Y2MsIGJhZGdlNF9wY212cHAsIGJhZGdlNF9jZnZjYyk7CiAKLQkJcmV0ID0gc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoZGV2LCAmYmFkZ2U0X3BjbWNpYV9vcHMsIDAsIDIpOworCQlzYTExeHhfZHJ2X3BjbWNpYV9vcHMoJmJhZGdlNF9wY21jaWFfb3BzKTsKKwkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoZGV2LCAmYmFkZ2U0X3BjbWNpYV9vcHMsCisJCQkJc2ExMXh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9jZXJmLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfY2VyZi5jCmluZGV4IDYzZTZiYzQuLjliZjA4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9jZXJmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2NlcmYuYwpAQCAtMjcsNyArMjcsNyBAQAogCiBzdGF0aWMgaW50IGNlcmZfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0Jc2t0LT5pcnEgPSBDRVJGX0lSUV9HUElPX0NGX0lSUTsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gQ0VSRl9JUlFfR1BJT19DRl9JUlE7CiAKIAlyZXR1cm4gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCmluZGV4IDJkMGU5OTcuLjExY2MzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwpAQCAtODMsNyArODMsMTYgQEAKIAogc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKQorCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOworCisJa2ZyZWUoc2luZm8pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2gzNjAwLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwppbmRleCAwY2MzNzQ4Li4zYTEyMWFjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9oMzYwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9oMzYwMC5jCkBAIC0yNSw4ICsyNSw4IEBACiAKIHN0YXRpYyBpbnQgaDM2MDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0Jc2t0LT5pcnEgPSBza3QtPm5yID8gSVJRX0dQSU9fSDM2MDBfUENNQ0lBX0lSUTEKLQkJCSAgIDogSVJRX0dQSU9fSDM2MDBfUENNQ0lBX0lSUTA7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IHNrdC0+bnIgPyBJUlFfR1BJT19IMzYwMF9QQ01DSUFfSVJRMQorCQkJCSAgICAgIDogSVJRX0dQSU9fSDM2MDBfUENNQ0lBX0lSUTA7CiAKIAogCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2pvcm5hZGE3MjAuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9qb3JuYWRhNzIwLmMKaW5kZXggN2VlZGI0Mi4uNmJjYWJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2pvcm5hZGE3MjAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfam9ybmFkYTcyMC5jCkBAIC0yMiwyNSArMjIsMTAgQEAKICNkZWZpbmUgU09DS0VUMV9QT1dFUgkoR1BJT19HUElPMSB8IEdQSU9fR1BJTzMpCiAjZGVmaW5lIFNPQ0tFVDFfM1YJR1BJT19HUElPMwogCi1zdGF0aWMgaW50IGpvcm5hZGE3MjBfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCi17Ci0JdW5zaWduZWQgaW50IHBpbiA9IEdQSU9fQTAgfCBHUElPX0ExIHwgR1BJT19BMiB8IEdQSU9fQTM7Ci0KLQkvKgotCSogV2hhdCBpcyBhbGwgdGhpcyBjcmFwIGZvcj8KLQkqLwotCUdSRVIgfD0gMHgwMDAwMDAwMjsKLQkvKiBTZXQgR1BJT19BPDM6MT4gdG8gYmUgb3V0cHV0cyBmb3IgUENNQ0lBL0NGIHBvd2VyIGNvbnRyb2xsZXI6ICovCi0Jc2ExMTExX3NldF9pb19kaXIoU0ExMTExX0RFVihza3QtPmRldiksIHBpbiwgMCwgMCk7Ci0Jc2ExMTExX3NldF9pbyhTQTExMTFfREVWKHNrdC0+ZGV2KSwgcGluLCAwKTsKLQlzYTExMTFfc2V0X3NsZWVwX2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwaW4sIDApOwotCi0JcmV0dXJuIHNhMTExMV9wY21jaWFfaHdfaW5pdChza3QpOwotfQotCiBzdGF0aWMgaW50CiBqb3JuYWRhNzIwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LCBjb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCiB7CisJc3RydWN0IHNhMTExMV9wY21jaWFfc29ja2V0ICpzID0gdG9fc2t0KHNrdCk7CiAJdW5zaWduZWQgaW50IHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0OwogCWludCByZXQ7CiAKQEAgLTk3LDcgKzgyLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXNhMTExMV9zZXRfaW8oU0ExMTExX0RFVihza3QtPmRldiksIHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0KTsKKwkJc2ExMTExX3NldF9pbyhzLT5kZXYsIHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0KTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIApAQCAtMTA2LDIxICs5MSwzMCBAQAogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgam9ybmFkYTcyMF9wY21jaWFfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLmh3X2luaXQJCT0gam9ybmFkYTcyMF9wY21jaWFfaHdfaW5pdCwKLQkuaHdfc2h1dGRvd24JCT0gc2ExMTExX3BjbWNpYV9od19zaHV0ZG93biwKLQkuc29ja2V0X3N0YXRlCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gam9ybmFkYTcyMF9wY21jaWFfY29uZmlndXJlX3NvY2tldCwKLQogCS5zb2NrZXRfaW5pdAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorCS5maXJzdAkJCT0gMCwKKwkubnIJCQk9IDIsCiB9OwogCiBpbnQgX19kZXZpbml0IHBjbWNpYV9qb3JuYWRhNzIwX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAtRU5PREVWOwogCi0JaWYgKG1hY2hpbmVfaXNfam9ybmFkYTcyMCgpKQotCQlyZXQgPSBzYTExeHhfZHJ2X3BjbWNpYV9wcm9iZShkZXYsICZqb3JuYWRhNzIwX3BjbWNpYV9vcHMsIDAsIDIpOworCWlmIChtYWNoaW5lX2lzX2pvcm5hZGE3MjAoKSkgeworCQl1bnNpZ25lZCBpbnQgcGluID0gR1BJT19BMCB8IEdQSU9fQTEgfCBHUElPX0EyIHwgR1BJT19BMzsKKworCQlHUkVSIHw9IDB4MDAwMDAwMDI7CisKKwkJLyogU2V0IEdQSU9fQTwzOjE+IHRvIGJlIG91dHB1dHMgZm9yIFBDTUNJQS9DRiBwb3dlciBjb250cm9sbGVyOiAqLworCQlzYTExMTFfc2V0X2lvX2RpcihkZXYsIHBpbiwgMCwgMCk7CisJCXNhMTExMV9zZXRfaW8oZGV2LCBwaW4sIDApOworCQlzYTExMTFfc2V0X3NsZWVwX2lvKGRldiwgcGluLCAwKTsKKworCQlzYTExeHhfZHJ2X3BjbWNpYV9vcHMoJmpvcm5hZGE3MjBfcGNtY2lhX29wcyk7CisJCXJldCA9IHNhMTExMV9wY21jaWFfYWRkKGRldiwgJmpvcm5hZGE3MjBfcGNtY2lhX29wcywKKwkJCQlzYTExeHhfZHJ2X3BjbWNpYV9hZGRfb25lKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwppbmRleCAwYzc2ZDMzLi5jOTU2MzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwpAQCAtNDMsNiArNDMsNyBAQAogc3RhdGljIGludAogbmVwb25zZXRfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIGNvbnN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKKwlzdHJ1Y3Qgc2ExMTExX3BjbWNpYV9zb2NrZXQgKnMgPSB0b19za3Qoc2t0KTsKIAl1bnNpZ25lZCBpbnQgbmNyX21hc2ssIG5jcl9zZXQsIHBhX2R3cl9tYXNrLCBwYV9kd3Jfc2V0OwogCWludCByZXQ7CiAKQEAgLTk5LDcgKzEwMCw3IEBACiAJCU5DUl8wID0gKE5DUl8wICYgfm5jcl9tYXNrKSB8IG5jcl9zZXQ7CiAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlzYTExMTFfc2V0X2lvKFNBMTExMV9ERVYoc2t0LT5kZXYpLCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CisJCXNhMTExMV9zZXRfaW8ocy0+ZGV2LCBwYV9kd3JfbWFzaywgcGFfZHdyX3NldCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTUsMTIgKzExNiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgbmVwb25zZXRfcGNtY2lhX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5od19pbml0CQk9IHNhMTExMV9wY21jaWFfaHdfaW5pdCwKLQkuaHdfc2h1dGRvd24JCT0gc2ExMTExX3BjbWNpYV9od19zaHV0ZG93biwKLQkuc29ja2V0X3N0YXRlCQk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gbmVwb25zZXRfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCiAJLnNvY2tldF9pbml0CQk9IG5lcG9uc2V0X3BjbWNpYV9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQgCT0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKKwkuZmlyc3QJCQk9IDAsCisJLm5yCQkJPSAyLAogfTsKIAogaW50IHBjbWNpYV9uZXBvbnNldF9pbml0KHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKQEAgLTEzNSw3ICsxMzQsOSBAQAogCQlzYTExMTFfc2V0X2lvX2RpcihzYWRldiwgR1BJT19BMHxHUElPX0ExfEdQSU9fQTJ8R1BJT19BMywgMCwgMCk7CiAJCXNhMTExMV9zZXRfaW8oc2FkZXYsIEdQSU9fQTB8R1BJT19BMXxHUElPX0EyfEdQSU9fQTMsIDApOwogCQlzYTExMTFfc2V0X3NsZWVwX2lvKHNhZGV2LCBHUElPX0EwfEdQSU9fQTF8R1BJT19BMnxHUElPX0EzLCAwKTsKLQkJcmV0ID0gc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoJnNhZGV2LT5kZXYsICZuZXBvbnNldF9wY21jaWFfb3BzLCAwLCAyKTsKKwkJc2ExMXh4X2Rydl9wY21jaWFfb3BzKCZuZXBvbnNldF9wY21jaWFfb3BzKTsKKwkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoc2FkZXYsICZuZXBvbnNldF9wY21jaWFfb3BzLAorCQkJCXNhMTF4eF9kcnZfcGNtY2lhX2FkZF9vbmUpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfc2hhbm5vbi5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX3NoYW5ub24uYwppbmRleCA0NmQ4YzE5Li5jNGQ1MTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfc2hhbm5vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9zaGFubm9uLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAlHQUZSICY9IH4oU0hBTk5PTl9HUElPX0VKRUNUXzAgfCBTSEFOTk9OX0dQSU9fRUpFQ1RfMSB8IAogCQkgIFNIQU5OT05fR1BJT19SRFlfMCB8IFNIQU5OT05fR1BJT19SRFlfMSk7CiAKLQlza3QtPmlycSA9IHNrdC0+bnIgPyBTSEFOTk9OX0lSUV9HUElPX1JEWV8xIDogU0hBTk5PTl9JUlFfR1BJT19SRFlfMDsKKwlza3QtPnNvY2tldC5wY2lfaXJxID0gc2t0LT5uciA/IFNIQU5OT05fSVJRX0dQSU9fUkRZXzEgOiBTSEFOTk9OX0lSUV9HUElPX1JEWV8wOwogCiAJcmV0dXJuIHNvY19wY21jaWFfcmVxdWVzdF9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfc2ltcGFkLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfc2ltcGFkLmMKaW5kZXggMzNhMDhhZS4uMDViZDUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX3NpbXBhZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9zaW1wYWQuYwpAQCAtMjgsNyArMjgsNyBAQAogCiAJY2xlYXJfY3MzX2JpdChWQ0NfM1ZfRU58VkNDXzVWX0VOfEVOMHxFTjEpOwogCi0Jc2t0LT5pcnEgPSBJUlFfR1BJT19DRl9JUlE7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IElSUV9HUElPX0NGX0lSUTsKIAogCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKaW5kZXggNGJlNGUxNy4uZGU2YmMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCkBAIC0yOCwyMyArMjgsMjAgQEAKIAl7IDEsIElSUV9TMV9CVkQxX1NUU0NIRywgIlNBMTExMSBDRiBCVkQxIiAgICAgICAgICAgIH0sCiB9OwogCi1pbnQgc2ExMTExX3BjbWNpYV9od19pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQorc3RhdGljIGludCBzYTExMTFfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JaWYgKHNrdC0+aXJxID09IE5PX0lSUSkKLQkJc2t0LT5pcnEgPSBza3QtPm5yID8gSVJRX1MxX1JFQURZX05JTlQgOiBJUlFfUzBfUkVBRFlfTklOVDsKLQogCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwogfQogCi12b2lkIHNhMTExMV9wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCitzdGF0aWMgdm9pZCBzYTExMTFfcGNtY2lhX2h3X3NodXRkb3duKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQogewogCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiB9CiAKIHZvaWQgc2ExMTExX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIHN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiA9IFNBMTExMV9ERVYoc2t0LT5kZXYpOwotCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gc2ExMTExX3JlYWRsKHNhZGV2LT5tYXBiYXNlICsgU0ExMTExX1BDU1IpOworCXN0cnVjdCBzYTExMTFfcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NrdChza3QpOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gc2ExMTExX3JlYWRsKHMtPmRldi0+bWFwYmFzZSArIFNBMTExMV9QQ1NSKTsKIAogCXN3aXRjaCAoc2t0LT5ucikgewogCWNhc2UgMDoKQEAgLTcxLDcgKzY4LDcgQEAKIAogaW50IHNhMTExMV9wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwgY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQogewotCXN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiA9IFNBMTExMV9ERVYoc2t0LT5kZXYpOworCXN0cnVjdCBzYTExMTFfcGNtY2lhX3NvY2tldCAqcyA9IHRvX3NrdChza3QpOwogCXVuc2lnbmVkIGludCBwY2NyX3NrdF9tYXNrLCBwY2NyX3NldF9tYXNrLCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTAwLDEwICs5NywxMCBAQAogCQlwY2NyX3NldF9tYXNrIHw9IFBDQ1JfUzBfRkxUfFBDQ1JfUzFfRkxUOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZhbCA9IHNhMTExMV9yZWFkbChzYWRldi0+bWFwYmFzZSArIFNBMTExMV9QQ0NSKTsKKwl2YWwgPSBzYTExMTFfcmVhZGwocy0+ZGV2LT5tYXBiYXNlICsgU0ExMTExX1BDQ1IpOwogCXZhbCAmPSB+cGNjcl9za3RfbWFzazsKIAl2YWwgfD0gcGNjcl9zZXRfbWFzayAmIHBjY3Jfc2t0X21hc2s7Ci0Jc2ExMTExX3dyaXRlbCh2YWwsIHNhZGV2LT5tYXBiYXNlICsgU0ExMTExX1BDQ1IpOworCXNhMTExMV93cml0ZWwodmFsLCBzLT5kZXYtPm1hcGJhc2UgKyBTQTExMTFfUENDUik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTQsMTUgKzExMSw1MSBAQAogCXNvY19wY21jaWFfZW5hYmxlX2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKIH0KIAotdm9pZCBzYTExMTFfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQorc3RhdGljIHZvaWQgc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlzb2NfcGNtY2lhX2Rpc2FibGVfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwogfQogCitpbnQgc2ExMTExX3BjbWNpYV9hZGQoc3RydWN0IHNhMTExMV9kZXYgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywKKwlpbnQgKCphZGQpKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqKSkKK3sKKwlzdHJ1Y3Qgc2ExMTExX3BjbWNpYV9zb2NrZXQgKnM7CisJaW50IGksIHJldCA9IDA7CisKKwlvcHMtPmh3X2luaXQgPSBzYTExMTFfcGNtY2lhX2h3X2luaXQ7CisJb3BzLT5od19zaHV0ZG93biA9IHNhMTExMV9wY21jaWFfaHdfc2h1dGRvd247CisJb3BzLT5zb2NrZXRfc3RhdGUgPSBzYTExMTFfcGNtY2lhX3NvY2tldF9zdGF0ZTsKKwlvcHMtPnNvY2tldF9zdXNwZW5kID0gc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZDsKKworCWZvciAoaSA9IDA7IGkgPCBvcHMtPm5yOyBpKyspIHsKKwkJcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXMtPnNvYy5uciA9IG9wcy0+Zmlyc3QgKyBpOworCQlzLT5zb2Mub3BzID0gb3BzOworCQlzLT5zb2Muc29ja2V0Lm93bmVyID0gb3BzLT5vd25lcjsKKwkJcy0+c29jLnNvY2tldC5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworCQlzLT5zb2Muc29ja2V0LnBjaV9pcnEgPSBzLT5zb2MubnIgPyBJUlFfUzFfUkVBRFlfTklOVCA6IElSUV9TMF9SRUFEWV9OSU5UOworCQlzLT5kZXYgPSBkZXY7CisKKwkJcmV0ID0gYWRkKCZzLT5zb2MpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXMtPm5leHQgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwkJCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIHMpOworCQl9IGVsc2UKKwkJCWtmcmVlKHMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgcGNtY2lhX3Byb2JlKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgNTEyLAogCQkJCVNBMTExMV9EUklWRVJfTkFNRShkZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE1Miw3ICsxODUsMTUgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgcGNtY2lhX3JlbW92ZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQogewotCXNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoJmRldi0+ZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExX3BjbWNpYV9zb2NrZXQgKm5leHQsICpzID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKworCWZvciAoOyBuZXh0ID0gcy0+bmV4dCwgczsgcyA9IG5leHQpIHsKKwkJc29jX3BjbWNpYV9yZW1vdmVfb25lKCZzLT5zb2MpOworCQlrZnJlZShzKTsKKwl9CisKIAlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5yZXMuc3RhcnQsIDUxMik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuaAppbmRleCAxMGNlZDRhLi4wMmRjODU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmgKQEAgLTEsMTIgKzEsMjMgQEAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAjaW5jbHVkZSAic2ExMXh4X2Jhc2UuaCIKIAotZXh0ZXJuIGludCBzYTExMTFfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICopOwotZXh0ZXJuIHZvaWQgc2ExMTExX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKik7CitzdHJ1Y3Qgc2ExMTExX3BjbWNpYV9zb2NrZXQgeworCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCBzb2M7CisJc3RydWN0IHNhMTExMV9kZXYgKmRldjsKKwlzdHJ1Y3Qgc2ExMTExX3BjbWNpYV9zb2NrZXQgKm5leHQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYTExMTFfcGNtY2lhX3NvY2tldCAqdG9fc2t0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqcykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHMsIHN0cnVjdCBzYTExMTFfcGNtY2lhX3NvY2tldCwgc29jKTsKK30KKworaW50IHNhMTExMV9wY21jaWFfYWRkKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsCisJaW50ICgqYWRkKShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKikpOworCiBleHRlcm4gdm9pZCBzYTExMTFfcGNtY2lhX3NvY2tldF9zdGF0ZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKiwgc3RydWN0IHBjbWNpYV9zdGF0ZSAqKTsKIGV4dGVybiBpbnQgc2ExMTExX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqLCBjb25zdCBzb2NrZXRfc3RhdGVfdCAqKTsKIGV4dGVybiB2b2lkIHNhMTExMV9wY21jaWFfc29ja2V0X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICopOwotZXh0ZXJuIHZvaWQgc2ExMTExX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKik7CiAKIGV4dGVybiBpbnQgcGNtY2lhX2JhZGdlNF9pbml0KHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gaW50IHBjbWNpYV9qb3JuYWRhNzIwX2luaXQoc3RydWN0IGRldmljZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCmluZGV4IGUxNWQ1OWYuLmZjOWE2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYwpAQCAtMTcxLDQ3ICsxNzEsMzQgQEAKICNkZWZpbmUgU0tUX0RFVl9JTkZPX1NJWkUobikgXAogCShzaXplb2Yoc3RydWN0IHNrdF9kZXZfaW5mbykgKyAobikqc2l6ZW9mKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCkpCiAKLWludCBzYTExeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsCi0JCQkgICAgaW50IGZpcnN0LCBpbnQgbnIpCitpbnQgc2ExMXh4X2Rydl9wY21jaWFfYWRkX29uZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbzsKLQlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKLQlpbnQgaTsKKwlza3QtPnJlc19za3Quc3RhcnQgPSBfUENNQ0lBKHNrdC0+bnIpOworCXNrdC0+cmVzX3NrdC5lbmQgPSBfUENNQ0lBKHNrdC0+bnIpICsgUENNQ0lBU3AgLSAxOworCXNrdC0+cmVzX3NrdC5uYW1lID0gc2t0X25hbWVzW3NrdC0+bnJdOworCXNrdC0+cmVzX3NrdC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCi0Jc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07CisJc2t0LT5yZXNfaW8uc3RhcnQgPSBfUENNQ0lBSU8oc2t0LT5ucik7CisJc2t0LT5yZXNfaW8uZW5kID0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJc2t0LT5yZXNfaW8ubmFtZSA9ICJpbyI7CisJc2t0LT5yZXNfaW8uZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKIAotCXNpbmZvLT5uc2t0ID0gbnI7CisJc2t0LT5yZXNfbWVtLnN0YXJ0ID0gX1BDTUNJQU1lbShza3QtPm5yKTsKKwlza3QtPnJlc19tZW0uZW5kID0gX1BDTUNJQU1lbShza3QtPm5yKSArIFBDTUNJQU1lbVNwIC0gMTsKKwlza3QtPnJlc19tZW0ubmFtZSA9ICJtZW1vcnkiOworCXNrdC0+cmVzX21lbS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCi0JLyogSW5pdGlsaWF6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7Ci0JCXNrdCA9ICZzaW5mby0+c2t0W2ldOworCXNrdC0+cmVzX2F0dHIuc3RhcnQgPSBfUENNQ0lBQXR0cihza3QtPm5yKTsKKwlza3QtPnJlc19hdHRyLmVuZCA9IF9QQ01DSUFBdHRyKHNrdC0+bnIpICsgUENNQ0lBQXR0clNwIC0gMTsKKwlza3QtPnJlc19hdHRyLm5hbWUgPSAiYXR0cmlidXRlIjsKKwlza3QtPnJlc19hdHRyLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CiAKLQkJc2t0LT5ucgkJPSBmaXJzdCArIGk7Ci0JCXNrdC0+aXJxCT0gTk9fSVJROworCXJldHVybiBzb2NfcGNtY2lhX2FkZF9vbmUoc2t0KTsKK30KK0VYUE9SVF9TWU1CT0woc2ExMXh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAKLQkJc2t0LT5yZXNfc2t0LnN0YXJ0CT0gX1BDTUNJQShza3QtPm5yKTsKLQkJc2t0LT5yZXNfc2t0LmVuZAk9IF9QQ01DSUEoc2t0LT5ucikgKyBQQ01DSUFTcCAtIDE7Ci0JCXNrdC0+cmVzX3NrdC5uYW1lCT0gc2t0X25hbWVzW3NrdC0+bnJdOwotCQlza3QtPnJlc19za3QuZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQotCQlza3QtPnJlc19pby5zdGFydAk9IF9QQ01DSUFJTyhza3QtPm5yKTsKLQkJc2t0LT5yZXNfaW8uZW5kCQk9IF9QQ01DSUFJTyhza3QtPm5yKSArIFBDTUNJQUlPU3AgLSAxOwotCQlza3QtPnJlc19pby5uYW1lCT0gImlvIjsKLQkJc2t0LT5yZXNfaW8uZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQotCQlza3QtPnJlc19tZW0uc3RhcnQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpOwotCQlza3QtPnJlc19tZW0uZW5kCT0gX1BDTUNJQU1lbShza3QtPm5yKSArIFBDTUNJQU1lbVNwIC0gMTsKLQkJc2t0LT5yZXNfbWVtLm5hbWUJPSAibWVtb3J5IjsKLQkJc2t0LT5yZXNfbWVtLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KLQkJc2t0LT5yZXNfYXR0ci5zdGFydAk9IF9QQ01DSUFBdHRyKHNrdC0+bnIpOwotCQlza3QtPnJlc19hdHRyLmVuZAk9IF9QQ01DSUFBdHRyKHNrdC0+bnIpICsgUENNQ0lBQXR0clNwIC0gMTsKLQkJc2t0LT5yZXNfYXR0ci5uYW1lCT0gImF0dHJpYnV0ZSI7Ci0JCXNrdC0+cmVzX2F0dHIuZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQl9Ci0KK3ZvaWQgc2ExMXh4X2Rydl9wY21jaWFfb3BzKHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMpCit7CiAJLyoKIAkgKiBzZXQgZGVmYXVsdCBNRUNSIGNhbGN1bGF0aW9uIGlmIHRoZSBib2FyZCBzcGVjaWZpYwogCSAqIGNvZGUgZGlkIG5vdCBzcGVjaWZ5IG9uZS4uLgpAQCAtMjI1LDggKzIxMiw0OCBAQAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCW9wcy0+ZnJlcXVlbmN5X2NoYW5nZSA9IHNhMTEwMF9wY21jaWFfZnJlcXVlbmN5X2NoYW5nZTsKICNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChzYTExeHhfZHJ2X3BjbWNpYV9vcHMpOwogCi0JcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgc2luZm8pOworaW50IHNhMTF4eF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywKKwkJCSAgICBpbnQgZmlyc3QsIGludCBucikKK3sKKwlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbzsKKwlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXNhMTF4eF9kcnZfcGNtY2lhX29wcyhvcHMpOworCisJc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG5yOworCisJLyogSW5pdGlsaWF6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXNrdCA9ICZzaW5mby0+c2t0W2ldOworCisJCXNrdC0+bnIgPSBmaXJzdCArIGk7CisJCXNrdC0+b3BzID0gb3BzOworCQlza3QtPnNvY2tldC5vd25lciA9IG9wcy0+b3duZXI7CisJCXNrdC0+c29ja2V0LmRldi5wYXJlbnQgPSBkZXY7CisJCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBOT19JUlE7CisKKwkJcmV0ID0gc2ExMXh4X2Rydl9wY21jaWFfYWRkX29uZShza3QpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkgeworCQl3aGlsZSAoLS1pID49IDApCisJCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOworCQlrZnJlZShzaW5mbyk7CisJfSBlbHNlIHsKKwkJZGV2X3NldF9kcnZkYXRhKGRldiwgc2luZm8pOworCX0KKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNhMTF4eF9kcnZfcGNtY2lhX3Byb2JlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuaCBiL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmgKaW5kZXggN2JjMjA4Mi4uM2Q3NmQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5oCkBAIC0xMTgsNiArMTE4LDggQEAKIH0KIAogCitpbnQgc2ExMXh4X2Rydl9wY21jaWFfYWRkX29uZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCk7Cit2b2lkIHNhMTF4eF9kcnZfcGNtY2lhX29wcyhzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzKTsKIGV4dGVybiBpbnQgc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLCBpbnQgZmlyc3QsIGludCBucik7CiAKICNlbmRpZiAgLyogIWRlZmluZWQoX1BDTUNJQV9TQTExMDBfSCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCAxNjNjZjk4Li42ZjFhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC0xNDQsMTAgKzE0NCwxMCBAQAogCQkgKi8KIAkJaWYgKHNrdC0+aXJxX3N0YXRlICE9IDEgJiYgc3RhdGUtPmlvX2lycSkgewogCQkJc2t0LT5pcnFfc3RhdGUgPSAxOwotCQkJc2V0X2lycV90eXBlKHNrdC0+aXJxLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCQkJc2V0X2lycV90eXBlKHNrdC0+c29ja2V0LnBjaV9pcnEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7CiAJCX0gZWxzZSBpZiAoc2t0LT5pcnFfc3RhdGUgPT0gMSAmJiBzdGF0ZS0+aW9faXJxID09IDApIHsKIAkJCXNrdC0+aXJxX3N0YXRlID0gMDsKLQkJCXNldF9pcnFfdHlwZShza3QtPmlycSwgSVJRX1RZUEVfTk9ORSk7CisJCQlzZXRfaXJxX3R5cGUoc2t0LT5zb2NrZXQucGNpX2lycSwgSVJRX1RZUEVfTk9ORSk7CiAJCX0KIAogCQlza3QtPmNzX3N0YXRlID0gKnN0YXRlOwpAQCAtMzM2LDggKzMzNiw5IEBACiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBzcGVlZCA9IG1hcC0+c3BlZWQ7CiAKLQlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgIHNwZWVkICV1IHN0YXJ0IDB4JTA4eCBzdG9wIDB4JTA4eFxuIiwKLQkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsIG1hcC0+c3RhcnQsIG1hcC0+c3RvcCk7CisJZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOGxseCBzdG9wIDB4JTA4bGx4XG4iLAorCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RvcCk7CiAJZGVidWcoc2t0LCAyLCAiZmxhZ3M6ICVzJXMlcyVzJXMlcyVzJXNcbiIsCiAJCShtYXAtPmZsYWdzPT0wKT8iPE5PTkU+IjoiIiwKIAkJKG1hcC0+ZmxhZ3MmTUFQX0FDVElWRSk/IkFDVElWRSAiOiIiLApAQCAtNDkxLDcgKzQ5Miw4IEBACiAKIAlwKz1zcHJpbnRmKHAsICJWY2MgICAgICA6ICVkXG4iLCBza3QtPmNzX3N0YXRlLlZjYyk7CiAJcCs9c3ByaW50ZihwLCAiVnBwICAgICAgOiAlZFxuIiwgc2t0LT5jc19zdGF0ZS5WcHApOwotCXArPXNwcmludGYocCwgIklSUSAgICAgIDogJWQgKCVkKVxuIiwgc2t0LT5jc19zdGF0ZS5pb19pcnEsIHNrdC0+aXJxKTsKKwlwKz1zcHJpbnRmKHAsICJJUlEgICAgICA6ICVkICglZClcbiIsIHNrdC0+Y3Nfc3RhdGUuaW9faXJxLAorCQlza3QtPnNvY2tldC5wY2lfaXJxKTsKIAlpZiAoc2t0LT5vcHMtPnNob3dfdGltaW5nKQogCQlwKz1za3QtPm9wcy0+c2hvd190aW1pbmcoc2t0LCBwKTsKIApAQCAtNTczLDcgKzU3NSw3IEBACiBFWFBPUlRfU1lNQk9MKHNvY19wY21jaWFfZW5hYmxlX2lycXMpOwogCiAKLUxJU1RfSEVBRChzb2NfcGNtY2lhX3NvY2tldHMpOworc3RhdGljIExJU1RfSEVBRChzb2NfcGNtY2lhX3NvY2tldHMpOwogc3RhdGljIERFRklORV9NVVRFWChzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKQEAgLTYwOCwxNzcgKzYxMCwxMzcgQEAKIAkJCQkibm90aWZpZXIgZm9yIFBDTUNJQSAoJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9Citmc19pbml0Y2FsbChzb2NfcGNtY2lhX2NwdWZyZXFfcmVnaXN0ZXIpOwogCiBzdGF0aWMgdm9pZCBzb2NfcGNtY2lhX2NwdWZyZXFfdW5yZWdpc3Rlcih2b2lkKQogewogCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmc29jX3BjbWNpYV9ub3RpZmllcl9ibG9jaywgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIH0KK21vZHVsZV9leGl0KHNvY19wY21jaWFfY3B1ZnJlcV91bnJlZ2lzdGVyKTsKIAotI2Vsc2UKLXN0YXRpYyBpbnQgc29jX3BjbWNpYV9jcHVmcmVxX3JlZ2lzdGVyKHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyB2b2lkIHNvY19wY21jaWFfY3B1ZnJlcV91bnJlZ2lzdGVyKHZvaWQpIHt9CiAjZW5kaWYKIAotaW50IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsCi0JCQkJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8pCit2b2lkIHNvY19wY21jaWFfcmVtb3ZlX29uZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKLQlpbnQgcmV0LCBpOworCW11dGV4X2xvY2soJnNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKKwlkZWxfdGltZXJfc3luYygmc2t0LT5wb2xsX3RpbWVyKTsKKworCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc2t0LT5zb2NrZXQpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXNrdC0+b3BzLT5od19zaHV0ZG93bihza3QpOworCisJc29jX2NvbW1vbl9wY21jaWFfY29uZmlnX3NrdChza3QsICZkZWFkX3NvY2tldCk7CisKKwlsaXN0X2RlbCgmc2t0LT5ub2RlKTsKKwltdXRleF91bmxvY2soJnNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKKworCWlvdW5tYXAoc2t0LT52aXJ0X2lvKTsKKwlza3QtPnZpcnRfaW8gPSBOVUxMOworCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX2F0dHIpOworCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX21lbSk7CisJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfaW8pOworCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX3NrdCk7Cit9CitFWFBPUlRfU1lNQk9MKHNvY19wY21jaWFfcmVtb3ZlX29uZSk7CisKK2ludCBzb2NfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJaW50IHJldDsKKworCWluaXRfdGltZXIoJnNrdC0+cG9sbF90aW1lcik7CisJc2t0LT5wb2xsX3RpbWVyLmZ1bmN0aW9uID0gc29jX2NvbW1vbl9wY21jaWFfcG9sbF9ldmVudDsKKwlza3QtPnBvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNrdDsKKwlza3QtPnBvbGxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBTT0NfUENNQ0lBX1BPTExfUEVSSU9EOworCisJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZza3QtPnJlc19za3QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Vycl8xOworCisJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfaW8pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Vycl8yOworCisJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfbWVtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnJfMzsKKworCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJnNrdC0+cmVzX3NrdCwgJnNrdC0+cmVzX2F0dHIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Vycl80OworCisJc2t0LT52aXJ0X2lvID0gaW9yZW1hcChza3QtPnJlc19pby5zdGFydCwgMHgxMDAwMCk7CisJaWYgKHNrdC0+dmlydF9pbyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Vycl81OworCX0KIAogCW11dGV4X2xvY2soJnNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKIAorCWxpc3RfYWRkKCZza3QtPm5vZGUsICZzb2NfcGNtY2lhX3NvY2tldHMpOworCiAJLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBwZXItc29ja2V0IHN0cnVjdHVyZS4KKwkgKiBXZSBpbml0aWFsaXplIGRlZmF1bHQgc29ja2V0IHRpbWluZyBoZXJlLCBiZWNhdXNlCisJICogd2UgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHNlZSBhIFNldElPTWFwIG9wZXJhdGlvbiBhdAorCSAqIHJ1bnRpbWUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IHNpbmZvLT5uc2t0OyBpKyspIHsKLQkJc2t0ID0gJnNpbmZvLT5za3RbaV07CisJc2t0LT5vcHMtPnNldF90aW1pbmcoc2t0KTsKIAotCQlza3QtPnNvY2tldC5vcHMgPSAmc29jX2NvbW1vbl9wY21jaWFfb3BlcmF0aW9uczsKLQkJc2t0LT5zb2NrZXQub3duZXIgPSBvcHMtPm93bmVyOwotCQlza3QtPnNvY2tldC5kZXYucGFyZW50ID0gZGV2OworCXJldCA9IHNrdC0+b3BzLT5od19pbml0KHNrdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZXJyXzY7CiAKLQkJaW5pdF90aW1lcigmc2t0LT5wb2xsX3RpbWVyKTsKLQkJc2t0LT5wb2xsX3RpbWVyLmZ1bmN0aW9uID0gc29jX2NvbW1vbl9wY21jaWFfcG9sbF9ldmVudDsKLQkJc2t0LT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylza3Q7Ci0JCXNrdC0+cG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIFNPQ19QQ01DSUFfUE9MTF9QRVJJT0Q7CisJc2t0LT5zb2NrZXQub3BzID0gJnNvY19jb21tb25fcGNtY2lhX29wZXJhdGlvbnM7CisJc2t0LT5zb2NrZXQuZmVhdHVyZXMgPSBTU19DQVBfU1RBVElDX01BUHxTU19DQVBfUENDQVJEOworCXNrdC0+c29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKwlza3QtPnNvY2tldC5pcnFfbWFzayA9IDA7CisJc2t0LT5zb2NrZXQubWFwX3NpemUgPSBQQUdFX1NJWkU7CisJc2t0LT5zb2NrZXQuaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2t0LT52aXJ0X2lvOwogCi0JCXNrdC0+ZGV2CT0gZGV2OwotCQlza3QtPm9wcwk9IG9wczsKKwlza3QtPnN0YXR1cyA9IHNvY19jb21tb25fcGNtY2lhX3NrdF9zdGF0ZShza3QpOwogCi0JCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmc2t0LT5yZXNfc2t0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X2Vycl8xOworCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNrdC0+c29ja2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnJfNzsKIAotCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZza3QtPnJlc19za3QsICZza3QtPnJlc19pbyk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9lcnJfMjsKKwlhZGRfdGltZXIoJnNrdC0+cG9sbF90aW1lcik7CiAKLQkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfbWVtKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0X2Vycl8zOworCW11dGV4X3VubG9jaygmc29jX3BjbWNpYV9zb2NrZXRzX2xvY2spOwogCi0JCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UoJnNrdC0+cmVzX3NrdCwgJnNrdC0+cmVzX2F0dHIpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfZXJyXzQ7CisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZza3QtPnNvY2tldC5kZXYsICZkZXZfYXR0cl9zdGF0dXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Vycl84OwogCi0JCXNrdC0+dmlydF9pbyA9IGlvcmVtYXAoc2t0LT5yZXNfaW8uc3RhcnQsIDB4MTAwMDApOwotCQlpZiAoc2t0LT52aXJ0X2lvID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9lcnJfNTsKLQkJfQorCXJldHVybiByZXQ7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJnNvY19wY21jaWFfc29ja2V0cykpCi0JCQlzb2NfcGNtY2lhX2NwdWZyZXFfcmVnaXN0ZXIoKTsKLQotCQlsaXN0X2FkZCgmc2t0LT5ub2RlLCAmc29jX3BjbWNpYV9zb2NrZXRzKTsKLQotCQkvKgotCQkgKiBXZSBpbml0aWFsaXplIGRlZmF1bHQgc29ja2V0IHRpbWluZyBoZXJlLCBiZWNhdXNlCi0JCSAqIHdlIGFyZSBub3QgZ3VhcmFudGVlZCB0byBzZWUgYSBTZXRJT01hcCBvcGVyYXRpb24gYXQKLQkJICogcnVudGltZS4KLQkJICovCi0JCW9wcy0+c2V0X3RpbWluZyhza3QpOwotCi0JCXJldCA9IG9wcy0+aHdfaW5pdChza3QpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfZXJyXzY7Ci0KLQkJc2t0LT5zb2NrZXQuZmVhdHVyZXMgPSBTU19DQVBfU1RBVElDX01BUHxTU19DQVBfUENDQVJEOwotCQlza3QtPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7Ci0JCXNrdC0+c29ja2V0LmlycV9tYXNrID0gMDsKLQkJc2t0LT5zb2NrZXQubWFwX3NpemUgPSBQQUdFX1NJWkU7Ci0JCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBza3QtPmlycTsKLQkJc2t0LT5zb2NrZXQuaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc2t0LT52aXJ0X2lvOwotCi0JCXNrdC0+c3RhdHVzID0gc29jX2NvbW1vbl9wY21jaWFfc2t0X3N0YXRlKHNrdCk7Ci0KLQkJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc2t0LT5zb2NrZXQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfZXJyXzc7Ci0KLQkJV0FSTl9PTihza3QtPnNvY2tldC5zb2NrICE9IGkpOwotCi0JCWFkZF90aW1lcigmc2t0LT5wb2xsX3RpbWVyKTsKLQotCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNrdC0+c29ja2V0LmRldiwgJmRldl9hdHRyX3N0YXR1cyk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9lcnJfODsKLQl9Ci0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzaW5mbyk7Ci0JcmV0ID0gMDsKLQlnb3RvIG91dDsKLQotCWRvIHsKLQkJc2t0ID0gJnNpbmZvLT5za3RbaV07Ci0KLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZza3QtPnNvY2tldC5kZXYsICZkZXZfYXR0cl9zdGF0dXMpOwogIG91dF9lcnJfODoKLQkJZGVsX3RpbWVyX3N5bmMoJnNrdC0+cG9sbF90aW1lcik7Ci0JCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc2t0LT5zb2NrZXQpOworCW11dGV4X2xvY2soJnNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKKwlkZWxfdGltZXJfc3luYygmc2t0LT5wb2xsX3RpbWVyKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNrdC0+c29ja2V0KTsKIAogIG91dF9lcnJfNzoKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCW9wcy0+aHdfc2h1dGRvd24oc2t0KTsKKwlza3QtPm9wcy0+aHdfc2h1dGRvd24oc2t0KTsKICBvdXRfZXJyXzY6Ci0gCQlsaXN0X2RlbCgmc2t0LT5ub2RlKTsKLQkJaW91bm1hcChza3QtPnZpcnRfaW8pOwotIG91dF9lcnJfNToKLQkJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfYXR0cik7Ci0gb3V0X2Vycl80OgotCQlyZWxlYXNlX3Jlc291cmNlKCZza3QtPnJlc19tZW0pOwotIG91dF9lcnJfMzoKLQkJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfaW8pOwotIG91dF9lcnJfMjoKLQkJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0KTsKLSBvdXRfZXJyXzE6Ci0JCWktLTsKLQl9IHdoaWxlIChpID4gMCk7Ci0KLQlrZnJlZShzaW5mbyk7Ci0KLSBvdXQ6CisJbGlzdF9kZWwoJnNrdC0+bm9kZSk7CiAJbXV0ZXhfdW5sb2NrKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7CisJaW91bm1hcChza3QtPnZpcnRfaW8pOworIG91dF9lcnJfNToKKwlyZWxlYXNlX3Jlc291cmNlKCZza3QtPnJlc19hdHRyKTsKKyBvdXRfZXJyXzQ6CisJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfbWVtKTsKKyBvdXRfZXJyXzM6CisJcmVsZWFzZV9yZXNvdXJjZSgmc2t0LT5yZXNfaW8pOworIG91dF9lcnJfMjoKKwlyZWxlYXNlX3Jlc291cmNlKCZza3QtPnJlc19za3QpOworIG91dF9lcnJfMToKKwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHNvY19wY21jaWFfYWRkX29uZSk7CiAKLWludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOwotCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0KLQltdXRleF9sb2NrKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IHNpbmZvLT5uc2t0OyBpKyspIHsKLQkJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSAmc2luZm8tPnNrdFtpXTsKLQotCQlkZWxfdGltZXJfc3luYygmc2t0LT5wb2xsX3RpbWVyKTsKLQotCQlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJnNrdC0+c29ja2V0KTsKLQotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCi0JCXNrdC0+b3BzLT5od19zaHV0ZG93bihza3QpOwotCi0JCXNvY19jb21tb25fcGNtY2lhX2NvbmZpZ19za3Qoc2t0LCAmZGVhZF9zb2NrZXQpOwotCi0JCWxpc3RfZGVsKCZza3QtPm5vZGUpOwotCQlpb3VubWFwKHNrdC0+dmlydF9pbyk7Ci0JCXNrdC0+dmlydF9pbyA9IE5VTEw7Ci0JCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX2F0dHIpOwotCQlyZWxlYXNlX3Jlc291cmNlKCZza3QtPnJlc19tZW0pOwotCQlyZWxlYXNlX3Jlc291cmNlKCZza3QtPnJlc19pbyk7Ci0JCXJlbGVhc2VfcmVzb3VyY2UoJnNrdC0+cmVzX3NrdCk7Ci0JfQotCWlmIChsaXN0X2VtcHR5KCZzb2NfcGNtY2lhX3NvY2tldHMpKQotCQlzb2NfcGNtY2lhX2NwdWZyZXFfdW5yZWdpc3RlcigpOwotCi0JbXV0ZXhfdW5sb2NrKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0KLQlrZnJlZShzaW5mbyk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSk7CitNT0RVTEVfQVVUSE9SKCJKb2huIERvcnNleSA8am9obitAY3MuY211LmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggUENNQ0lBIENhcmQgU2VydmljZXM6IENvbW1vbiBTb0Mgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCmluZGV4IDI5MGUxNDMuLmU0MDgyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKQEAgLTMwLDE0ICszMCwxMiBAQAogCS8qCiAJICogSW5mbyBmcm9tIGxvdyBsZXZlbCBoYW5kbGVyCiAJICovCi0Jc3RydWN0IGRldmljZQkJKmRldjsKIAl1bnNpZ25lZCBpbnQJCW5yOwotCXVuc2lnbmVkIGludAkJaXJxOwogCiAJLyoKIAkgKiBDb3JlIFBDTUNJQSBzdGF0ZQogCSAqLwotCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CisJY29uc3Qgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wczsKIAogCXVuc2lnbmVkIGludAkJc3RhdHVzOwogCXNvY2tldF9zdGF0ZV90CQljc19zdGF0ZTsKQEAgLTEzNSwxMCArMTMzLDggQEAKIGV4dGVybiB2b2lkIHNvY19jb21tb25fcGNtY2lhX2dldF90aW1pbmcoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICosIHN0cnVjdCBzb2NfcGNtY2lhX3RpbWluZyAqKTsKIAogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzb2NfcGNtY2lhX3NvY2tldHM7Ci0KLWV4dGVybiBpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8pOwotZXh0ZXJuIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIHNvY19wY21jaWFfcmVtb3ZlX29uZShzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCk7CitpbnQgc29jX3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KTsKIAogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCBmZjlhM2JiLi43OGQ1YWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAKIAkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZjaGFpbnMpKQorCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKIAkJCXJldHVybiAtRUlPOwogCQlpZiAoIWNoYWlucykKIAkJCXJldHVybiAtRU5PREFUQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCA1ODI0MTNmLi4xMmM0OWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC01NSwyMSArNTUsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgInRjaWMuaCIKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWc7Ci0KLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKLXN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9Ci0idGNpYy5jIDEuMTExIDIwMDAvMDIvMTUgMDQ6MTM6MTIgKERhdmlkIEhpbmRzKSI7Ci0KLSNkZWZpbmUgZGVidWcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCi0JaWYgKHBjX2RlYnVnID4gKGx2bCkpCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJ0Y2ljOiAiIGZtdCAsICMjIGFyZyk7CVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBkZWJ1ZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogTU9EVUxFX0FVVEhPUigiRGF2aWQgSGluZHMgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHNvY2tldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKQEAgLTU3NCw3ICs1NTksNyBAQAogICAgIH0gZWxzZQogCWFjdGl2ZSA9IDE7CiAKLSAgICBkZWJ1ZygyLCAidGNpY19pbnRlcnJ1cHQoKVxuIik7CisgICAgcHJfZGVidWcoInRjaWNfaW50ZXJydXB0KClcbiIpOwogICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBzb2NrZXRzOyBpKyspIHsKIAlwc29jayA9IHNvY2tldF90YWJsZVtpXS5wc29jazsKQEAgLTYxMSwxMyArNTk2LDEzIEBACiAgICAgfQogICAgIGFjdGl2ZSA9IDA7CiAgICAgCi0gICAgZGVidWcoMiwgImludGVycnVwdCBkb25lXG4iKTsKKyAgICBwcl9kZWJ1ZygiaW50ZXJydXB0IGRvbmVcbiIpOwogICAgIHJldHVybiBJUlFfSEFORExFRDsKIH0gLyogdGNpY19pbnRlcnJ1cHQgKi8KIAogc3RhdGljIHZvaWQgdGNpY190aW1lcih1X2xvbmcgZGF0YSkKIHsKLSAgICBkZWJ1ZygyLCAidGNpY190aW1lcigpXG4iKTsKKyAgICBwcl9kZWJ1ZygidGNpY190aW1lcigpXG4iKTsKICAgICB0Y2ljX3RpbWVyX3BlbmRpbmcgPSAwOwogICAgIHRjaWNfaW50ZXJydXB0KDAsIE5VTEwpOwogfSAvKiB0Y2ljX3RpbWVyICovCkBAIC02NDQsNyArNjI5LDcgQEAKICAgICByZWcgPSB0Y2ljX2dldGIoVENJQ19QV1IpOwogICAgIGlmIChyZWcgJiAoVENJQ19QV1JfVkNDKHBzb2NrKXxUQ0lDX1BXUl9WUFAocHNvY2spKSkKIAkqdmFsdWUgfD0gU1NfUE9XRVJPTjsKLSAgICBkZWJ1ZygxLCAiR2V0U3RhdHVzKCVkKSA9ICUjMi4yeFxuIiwgcHNvY2ssICp2YWx1ZSk7CisgICAgZGV2X2RiZygmc29jay0+ZGV2LCAiR2V0U3RhdHVzKCVkKSA9ICUjMi4yeFxuIiwgcHNvY2ssICp2YWx1ZSk7CiAgICAgcmV0dXJuIDA7CiB9IC8qIHRjaWNfZ2V0X3N0YXR1cyAqLwogCkBAIC02NTYsNyArNjQxLDcgQEAKICAgICB1X2NoYXIgcmVnOwogICAgIHVfc2hvcnQgc2NmMSwgc2NmMjsKIAotICAgIGRlYnVnKDEsICJTZXRTb2NrZXQoJWQsIGZsYWdzICUjMy4zeCwgVmNjICVkLCBWcHAgJWQsICIKKyAgICBkZXZfZGJnKCZzb2NrLT5kZXYsICJTZXRTb2NrZXQoJWQsIGZsYWdzICUjMy4zeCwgVmNjICVkLCBWcHAgJWQsICIKIAkgICJpb19pcnEgJWQsIGNzY19tYXNrICUjMi4yeClcbiIsIHBzb2NrLCBzdGF0ZS0+ZmxhZ3MsCiAJICBzdGF0ZS0+VmNjLCBzdGF0ZS0+VnBwLCBzdGF0ZS0+aW9faXJxLCBzdGF0ZS0+Y3NjX21hc2spOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgKHBzb2NrIDw8IFRDSUNfU1NfU0hGVCkgfCBUQ0lDX0FEUjJfSU5EUkVHKTsKQEAgLTczMSw5ICs3MTYsOSBAQAogICAgIHVfaW50IGFkZHI7CiAgICAgdV9zaG9ydCBiYXNlLCBsZW4sIGlvY3RsOwogICAgIAotICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisgICAgZGV2X2RiZygmc29jay0+ZGV2LCAiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCisJICAiJSNsbHgtJSNsbHgpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgaWYgKChpby0+bWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgVENJQ19BRFIyX0lORFJFRyB8IChwc29jayA8PCBUQ0lDX1NTX1NIRlQpKTsKQEAgLTc2OCw3ICs3NTMsNyBAQAogICAgIHVfc2hvcnQgYWRkciwgY3RsOwogICAgIHVfbG9uZyBiYXNlLCBsZW4sIG1tYXA7CiAKLSAgICBkZWJ1ZygxLCAiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgorICAgIGRldl9kYmcoJnNvY2stPmRldiwgIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKIAkgICIlI2xseC0lI2xseCwgJSN4KVxuIiwgcHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAogCSAgbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnJlcy0+c3RhcnQsCiAJICAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+cmVzLT5lbmQsIG1lbS0+Y2FyZF9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90b3BpYy5oIGIvZHJpdmVycy9wY21jaWEvdG9waWMuaAppbmRleCBlZGNjZmE1Li42MTVhNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90b3BpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RvcGljLmgKQEAgLTExNCwyMiArMTE0LDE3IEBACiAJCXJlZ196diB8PSBUT1BJQzk3X1pWX0NPTlRST0xfRU5BQkxFOwogCQljb25maWdfd3JpdGViKHNvY2tldCwgVE9QSUM5N19aT09NX1ZJREVPX0NPTlRST0wsIHJlZ196dik7CiAKLQkJcmVnID0gY29uZmlnX3JlYWRiKHNvY2tldCwgVE9QSUM5N19NSVNDMik7Ci0JCXJlZyB8PSBUT1BJQzk3X01JU0MyX1pWX0VOQUJMRTsKLQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIFRPUElDOTdfTUlTQzIsIHJlZyk7Ci0KLQkJLyogbm90IHN1cmUgdGhpcyBpcyBuZWVkZWQsIGRvYyBpcyB1bmNsZWFyICovCi0jaWYgMAogCQlyZWcgPSBjb25maWdfcmVhZGIoc29ja2V0LCBUT1BJQzk3X0FVRElPX1ZJREVPX1NXSVRDSCk7CiAJCXJlZyB8PSBUT1BJQzk3X0FWU19BVURJT19DT05UUk9MIHwgVE9QSUM5N19BVlNfVklERU9fQ09OVFJPTDsKIAkJY29uZmlnX3dyaXRlYihzb2NrZXQsIFRPUElDOTdfQVVESU9fVklERU9fU1dJVENILCByZWcpOwotI2VuZGlmCi0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXJlZ196diAmPSB+VE9QSUM5N19aVl9DT05UUk9MX0VOQUJMRTsKIAkJY29uZmlnX3dyaXRlYihzb2NrZXQsIFRPUElDOTdfWk9PTV9WSURFT19DT05UUk9MLCByZWdfenYpOwotCX0KIAorCQlyZWcgPSBjb25maWdfcmVhZGIoc29ja2V0LCBUT1BJQzk3X0FVRElPX1ZJREVPX1NXSVRDSCk7CisJCXJlZyAmPSB+KFRPUElDOTdfQVZTX0FVRElPX0NPTlRST0wgfCBUT1BJQzk3X0FWU19WSURFT19DT05UUk9MKTsKKwkJY29uZmlnX3dyaXRlYihzb2NrZXQsIFRPUElDOTdfQVVESU9fVklERU9fU1dJVENILCByZWcpOworCX0KIH0KIAogc3RhdGljIGludCB0b3BpYzk3X292ZXJyaWRlKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggYWJlMGU0NC4uOGJlNGNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTEyNzUsMTYgKzEyNzUsMjYgQEAKIAlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKIAkJc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKHNvY2tldCk7CiAKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7CisJcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfbGF0ZV9yZXN1bWUoZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHllbnRhX3BtX29wcyA9IHsKIAkuc3VzcGVuZF9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAogCS5yZXN1bWVfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS5yZXN1bWUgPSB5ZW50YV9kZXZfcmVzdW1lLAogCS5mcmVlemVfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKIAkudGhhd19ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnRoYXcgPSB5ZW50YV9kZXZfcmVzdW1lLAogCS5wb3dlcm9mZl9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAogCS5yZXN0b3JlX25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkucmVzdG9yZSA9IHllbnRhX2Rldl9yZXN1bWUsCiB9OwogCiAjZGVmaW5lIFlFTlRBX1BNX09QUwkoJnllbnRhX3BtX29wcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwppbmRleCAwYThmNzM1Li5hYjY0NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCkBAIC01Miw3ICs1Miw3IEBACiAgKi8KICN1bmRlZiBTVEFSVF9JTl9LRVJORUxfTU9ERQogCi0jZGVmaW5lIERSVl9WRVIgIjAuNS4xNyIKKyNkZWZpbmUgRFJWX1ZFUiAiMC41LjE4IgogCiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBBdG9tIE4yNzAgZGF0YXNoZWV0LApAQCAtNjEsNyArNjEsNyBAQAogICogbWVhc3VyZWQgYnkgdGhlIG9uLWRpZSB0aGVybWFsIG1vbml0b3IgYXJlIHdpdGhpbiAwIDw9IFRqIDw9IDkwLiBTbywKICAqIGFzc3VtZSA4OcKwQyBpcyBjcml0aWNhbCB0ZW1wZXJhdHVyZS4KICAqLwotI2RlZmluZSBBQ0VSSERGX1RFTVBfQ1JJVCA4OQorI2RlZmluZSBBQ0VSSERGX1RFTVBfQ1JJVCA4OTAwMAogI2RlZmluZSBBQ0VSSERGX0ZBTl9PRkYgMAogI2RlZmluZSBBQ0VSSERGX0ZBTl9BVVRPIDEKIApAQCAtNjksNyArNjksNyBAQAogICogTm8gbWF0dGVyIHdoYXQgdmFsdWUgdGhlIHVzZXIgcHV0cyBpbnRvIHRoZSBmYW5vbiB2YXJpYWJsZSwgdHVybiBvbiB0aGUgZmFuCiAgKiBhdCA4MCBkZWdyZWUgQ2Vsc2l1cyB0byBwcmV2ZW50IGhhcmR3YXJlIGRhbWFnZQogICovCi0jZGVmaW5lIEFDRVJIREZfTUFYX0ZBTk9OIDgwCisjZGVmaW5lIEFDRVJIREZfTUFYX0ZBTk9OIDgwMDAwCiAKIC8qCiAgKiBNYXhpbXVtIGludGVydmFsIGJldHdlZW4gdHdvIHRlbXBlcmF0dXJlIGNoZWNrcyBpcyAxNSBzZWNvbmRzLCBhcyB0aGUgZGllCkBAIC04NSw4ICs4NSw4IEBACiAjZW5kaWYKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbnRlcnZhbCA9IDEwOwotc3RhdGljIHVuc2lnbmVkIGludCBmYW5vbiA9IDYzOwotc3RhdGljIHVuc2lnbmVkIGludCBmYW5vZmYgPSA1ODsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmFub24gPSA2MzAwMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmFub2ZmID0gNTgwMDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IHZlcmJvc2U7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZhbnN0YXRlID0gQUNFUkhERl9GQU5fQVVUTzsKIHN0YXRpYyBjaGFyIGZvcmNlX2Jpb3NbMTZdOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJaWYgKGVjX3JlYWQoYmlvc19jZmctPnRlbXByZWcsICZyZWFkX3RlbXApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSp0ZW1wID0gcmVhZF90ZW1wOworCSp0ZW1wID0gcmVhZF90ZW1wICogMTAwMDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCA3NDllMjEwLi40MjI2ZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMzUwLDEzICszNTAsMTQgQEAKIAkuc2V0X2Jsb2NrID0gZWVlcGNfcmZraWxsX3NldCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQogewogCS8qCiAJICogSWYgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHNldF9hY3BpKCkgZmFpbHMsIGl0J3MgYmVjYXVzZSB0aGVyZSdzIG5vCiAJICogY2FtZXJhIHNvIHdlIGNhbiBpZ25vcmUgdGhlIGVycm9yLgogCSAqLwotCXNldF9hY3BpKENNX0FTTF9DQU1FUkEsIDEpOworCWlmIChnZXRfYWNwaShDTV9BU0xfQ0FNRVJBKSA9PSAwKQorCQlzZXRfYWNwaShDTV9BU0xfQ0FNRVJBLCAxKTsKIH0KIAogLyoKQEAgLTExODksNyArMTE5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGYzNWFlZTUuLmJjZDRiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0jaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZDkzMTA4ZC4uYTg0OGM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMTY4MCwzNiArMTY4MCw0OCBAQAogCQkJICB8IChfX2J2MSkgPDwgOCB8IChfX2J2MikgfQogCiAjZGVmaW5lIFRQVl9RX1goX192LCBfX2JpZDEsIF9fYmlkMiwgX19idjEsIF9fYnYyLAlcCi0JCV9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpCQlcCisJCV9fZWlkLCBfX2V2MSwgX19ldjIpCQkJXAogCXsgLnZlbmRvcgk9IChfX3YpLAkJCVwKIAkgIC5iaW9zCQk9IFRQSUQoX19iaWQxLCBfX2JpZDIpLAkJXAotCSAgLmVjCQk9IFRQSUQoX19laWQxLCBfX2VpZDIpLAkJXAorCSAgLmVjCQk9IF9fZWlkLAkJCVwKIAkgIC5xdWlya3MJPSAoX19ldjEpIDw8IDI0IHwgKF9fZXYyKSA8PCAxNiBcCiAJCQkgIHwgKF9fYnYxKSA8PCA4IHwgKF9fYnYyKSB9CiAKICNkZWZpbmUgVFBWX1FJMChfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikgXAogCVRQVl9RKFBDSV9WRU5ET1JfSURfSUJNLCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikKIAorLyogT3V0ZGF0ZWQgSUJNIEJJT1NlcyBvZnRlbiBsYWNrIHRoZSBFQyBpZCBzdHJpbmcgKi8KICNkZWZpbmUgVFBWX1FJMShfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MiwgX19ldjEsIF9fZXYyKSBcCiAJVFBWX1FfWChQQ0lfVkVORE9SX0lEX0lCTSwgX19pZDEsIF9faWQyLCAJXAotCQlfX2J2MSwgX19idjIsIF9faWQxLCBfX2lkMiwgX19ldjEsIF9fZXYyKQorCQlfX2J2MSwgX19idjIsIFRQSUQoX19pZDEsIF9faWQyKSwJXAorCQlfX2V2MSwgX19ldjIpLAkJCQlcCisJVFBWX1FfWChQQ0lfVkVORE9SX0lEX0lCTSwgX19pZDEsIF9faWQyLCAJXAorCQlfX2J2MSwgX19idjIsIFRQQUNQSV9NQVRDSF9VTktOT1dOLAlcCisJCV9fZXYxLCBfX2V2MikKIAorLyogT3V0ZGF0ZWQgSUJNIEJJT1NlcyBvZnRlbiBsYWNrIHRoZSBFQyBpZCBzdHJpbmcgKi8KICNkZWZpbmUgVFBWX1FJMihfX2JpZDEsIF9fYmlkMiwgX19idjEsIF9fYnYyLAkJXAogCQlfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKSAJCVwKIAlUUFZfUV9YKFBDSV9WRU5ET1JfSURfSUJNLCBfX2JpZDEsIF9fYmlkMiwgCVwKLQkJX19idjEsIF9fYnYyLCBfX2VpZDEsIF9fZWlkMiwgX19ldjEsIF9fZXYyKQorCQlfX2J2MSwgX19idjIsIFRQSUQoX19laWQxLCBfX2VpZDIpLAlcCisJCV9fZXYxLCBfX2V2MiksCQkJCVwKKwlUUFZfUV9YKFBDSV9WRU5ET1JfSURfSUJNLCBfX2JpZDEsIF9fYmlkMiwgCVwKKwkJX19idjEsIF9fYnYyLCBUUEFDUElfTUFUQ0hfVU5LTk9XTiwJXAorCQlfX2V2MSwgX19ldjIpCiAKICNkZWZpbmUgVFBWX1FMMChfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikgXAogCVRQVl9RKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIF9fYnYxLCBfX2J2MikKIAogI2RlZmluZSBUUFZfUUwxKF9faWQxLCBfX2lkMiwgX19idjEsIF9fYnYyLCBfX2V2MSwgX19ldjIpIFwKIAlUUFZfUV9YKFBDSV9WRU5ET1JfSURfTEVOT1ZPLCBfX2lkMSwgX19pZDIsIAlcCi0JCV9fYnYxLCBfX2J2MiwgX19pZDEsIF9faWQyLCBfX2V2MSwgX19ldjIpCisJCV9fYnYxLCBfX2J2MiwgVFBJRChfX2lkMSwgX19pZDIpLAlcCisJCV9fZXYxLCBfX2V2MikKIAogI2RlZmluZSBUUFZfUUwyKF9fYmlkMSwgX19iaWQyLCBfX2J2MSwgX19idjIsCQlcCiAJCV9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpIAkJXAogCVRQVl9RX1goUENJX1ZFTkRPUl9JRF9MRU5PVk8sIF9fYmlkMSwgX19iaWQyLCAJXAotCQlfX2J2MSwgX19idjIsIF9fZWlkMSwgX19laWQyLCBfX2V2MSwgX19ldjIpCisJCV9fYnYxLCBfX2J2MiwgVFBJRChfX2VpZDEsIF9fZWlkMiksCVwKKwkJX19ldjEsIF9fZXYyKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRwYWNwaV9xdWlyayB0cGFjcGlfYmlvc192ZXJzaW9uX3F0YWJsZVtdIF9faW5pdGNvbnN0ID0gewogCS8qICBOdW1lcmljIG1vZGVscyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYzMTMsNyArNjMyNSw3IEBACiAJICogRG9pbmcgaXQgdGhpcyB3YXkgbWFrZXMgdGhlIHN5c2NhbGwgcmVzdGFydGFibGUgaW4gY2FzZSBvZiBFSU5UUgogCSAqLwogCXJjID0gYnJpZ2h0bmVzc19zZXQobGV2ZWwpOwotCXJldHVybiAocmMgPT0gLUVJTlRSKT8gRVJFU1RBUlRTWVMgOiByYzsKKwlyZXR1cm4gKHJjID09IC1FSU5UUik/IC1FUkVTVEFSVFNZUyA6IHJjOwogfQogCiBzdGF0aWMgc3RydWN0IGlibV9zdHJ1Y3QgYnJpZ2h0bmVzc19kcml2ZXJfZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2thcGkuYyBiL2RyaXZlcnMvcHBzL2thcGkuYwppbmRleCAzNWEwYjE5Li4yZDQxNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9rYXBpLmMKKysrIGIvZHJpdmVycy9wcHMva2FwaS5jCkBAIC0yNzEsNiArMjcxLDcgQEAKIHsKIAlzdHJ1Y3QgcHBzX2RldmljZSAqcHBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNhcHR1cmVkID0gMDsKIAogCWlmICgoZXZlbnQgJiAoUFBTX0NBUFRVUkVBU1NFUlQgfCBQUFNfQ0FQVFVSRUNMRUFSKSkgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgInBwczogdW5rbm93biBldmVudCAoJXgpIGZvciBzb3VyY2UgJWRcbiIsCkBAIC0yOTMsNyArMjk0LDggQEAKIAogCS8qIENoZWNrIHRoZSBldmVudCAqLwogCXBwcy0+Y3VycmVudF9tb2RlID0gcHBzLT5wYXJhbXMubW9kZTsKLQlpZiAoZXZlbnQgJiBQUFNfQ0FQVFVSRUFTU0VSVCkgeworCWlmICgoZXZlbnQgJiBQUFNfQ0FQVFVSRUFTU0VSVCkgJgorCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUFTU0VSVCkpIHsKIAkJLyogV2UgaGF2ZSB0byBhZGQgYW4gb2Zmc2V0PyAqLwogCQlpZiAocHBzLT5wYXJhbXMubW9kZSAmIFBQU19PRkZTRVRBU1NFUlQpCiAJCQlwcHNfYWRkX29mZnNldCh0cywgJnBwcy0+cGFyYW1zLmFzc2VydF9vZmZfdHUpOwpAQCAtMzAzLDggKzMwNSwxMSBAQAogCQlwcHMtPmFzc2VydF9zZXF1ZW5jZSsrOwogCQlwcl9kZWJ1ZygiY2FwdHVyZSBhc3NlcnQgc2VxICMldSBmb3Igc291cmNlICVkXG4iLAogCQkJcHBzLT5hc3NlcnRfc2VxdWVuY2UsIHNvdXJjZSk7CisKKwkJY2FwdHVyZWQgPSB+MDsKIAl9Ci0JaWYgKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgeworCWlmICgoZXZlbnQgJiBQUFNfQ0FQVFVSRUNMRUFSKSAmCisJCQkocHBzLT5wYXJhbXMubW9kZSAmIFBQU19DQVBUVVJFQ0xFQVIpKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQ0xFQVIpCiAJCQlwcHNfYWRkX29mZnNldCh0cywgJnBwcy0+cGFyYW1zLmNsZWFyX29mZl90dSk7CkBAIC0zMTQsMTIgKzMxOSwxNyBAQAogCQlwcHMtPmNsZWFyX3NlcXVlbmNlKys7CiAJCXByX2RlYnVnKCJjYXB0dXJlIGNsZWFyIHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKIAkJCXBwcy0+Y2xlYXJfc2VxdWVuY2UsIHNvdXJjZSk7CisKKwkJY2FwdHVyZWQgPSB+MDsKIAl9CiAKLQlwcHMtPmdvID0gfjA7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHMtPnF1ZXVlKTsKKwkvKiBXYWtlIHVwIGlpZiBjYXB0dXJlZCBzb210aGluZyAqLworCWlmIChjYXB0dXJlZCkgeworCQlwcHMtPmdvID0gfjA7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CiAKLQlraWxsX2Zhc3luYygmcHBzLT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCQlraWxsX2Zhc3luYygmcHBzLT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBwcy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9wcHMuYyBiL2RyaXZlcnMvcHBzL3Bwcy5jCmluZGV4IGZlYTE3ZTcuLmNhNTE4M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHBzL3Bwcy5jCisrKyBiL2RyaXZlcnMvcHBzL3Bwcy5jCkBAIC03MSw5ICs3MSwxNCBAQAogCWNhc2UgUFBTX0dFVFBBUkFNUzoKIAkJcHJfZGVidWcoIlBQU19HRVRQQVJBTVM6IHNvdXJjZSAlZFxuIiwgcHBzLT5pZCk7CiAKLQkJLyogUmV0dXJuIGN1cnJlbnQgcGFyYW1ldGVycyAqLwotCQllcnIgPSBjb3B5X3RvX3VzZXIodWFyZywgJnBwcy0+cGFyYW1zLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBwcHNfa3BhcmFtcykpOworCQlzcGluX2xvY2tfaXJxKCZwcHMtPmxvY2spOworCisJCS8qIEdldCB0aGUgY3VycmVudCBwYXJhbWV0ZXJzICovCisJCXBhcmFtcyA9IHBwcy0+cGFyYW1zOworCisJCXNwaW5fdW5sb2NrX2lycSgmcHBzLT5sb2NrKTsKKworCQllcnIgPSBjb3B5X3RvX3VzZXIodWFyZywgJnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBwcHNfa3BhcmFtcykpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCA3NDRlYTFkLi5lZmU1NjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC0xMjgzLDcgKzEyODMsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIGFyZSB3ZSB0aGUgbGFzdCB1c2VyIGFuZCBwZXJtaXR0ZWQgdG8gZGlzYWJsZSA/ICovCi0JaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmICFyZGV2LT5jb25zdHJhaW50cy0+YWx3YXlzX29uKSB7CisJaWYgKHJkZXYtPnVzZV9jb3VudCA9PSAxICYmCisJICAgIChyZGV2LT5jb25zdHJhaW50cyAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikpIHsKIAogCQkvKiB3ZSBhcmUgbGFzdCB1c2VyICovCiAJCWlmIChfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBmOGIyOTU3Li5mOWY1MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTE5NiwxMSArMTk2LDEwIEBACiAJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSAqZHJ2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoZHJ2ZGF0YS0+ZGV2KTsKLQlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOwotCWtmcmVlKGRydmRhdGEpOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHJ2ZGF0YS0+Z3BpbykpCiAJCWdwaW9fZnJlZShkcnZkYXRhLT5ncGlvKTsKKwlrZnJlZShkcnZkYXRhLT5kZXNjLm5hbWUpOworCWtmcmVlKGRydmRhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtaXNpbmsuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1pc2luay5jCmluZGV4IDFkOGQ5ODcuLjQ4ODU3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1pc2luay5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1pc2luay5jCkBAIC0xNjcsNiArMTY3LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJaXNpbmstPndtODMxeCA9IHdtODMxeDsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSS9PIHJlc291cmNlXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwppbmRleCBiYjYxYWVkLi45MDJkYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCkBAIC0xNzUsMTggKzE3NSwxOCBAQAogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGxkby0+d204MzF4OwogCWludCBjdHJsX3JlZyA9IGxkby0+YmFzZSArIFdNODMxWF9MRE9fQ09OVFJPTDsKIAlpbnQgb25fcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0xET19PTl9DT05UUk9MOwotCXVuc2lnbmVkIGludCByZXQ7CisJaW50IHJldDsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIG9uX3JlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKCEocmV0ICYgV004MzFYX0xETzFfT05fTU9ERSkpCiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CiAKIAlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBjdHJsX3JlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKHJldCAmIFdNODMxWF9MRE8xX0xQX01PREUpCiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCmluZGV4IDdmZTFmYTIuLjAzZWE1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKQEAgLTU4LDcgKzU4LDE2IEBACiAJY2xrX2VuYWJsZShydGFwLT5jbGspOwogCS8qIEFjayBJUlEgKi8KIAl3cml0ZWwoMSwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX0VWRU5UKTsKKwkvKgorCSAqIERpc2FibGUgdGhlIGludGVycnVwdC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZQorCSAqIHRoZSBSVEMgbGl2ZXMgb24gYSBsb3dlci1jbG9ja2VkIGxpbmUgYW5kIHdpbGwKKwkgKiBub3QgcmVsZWFzZSB0aGUgSVJRIGxpbmUgdW50aWwgYWZ0ZXIgYSBmZXcgKHNsb3dlcikKKwkgKiBjbG9jayBjeWNsZXMuIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSByZS1lbmFibGVkIHdoZW4KKwkgKiBhIG5ldyBhbGFybSBpcyBzZXQgYW55d2F5LgorCSAqLworCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwogCS8qIFNldCBhbGFybSBmbGFnICovCiAJcnRjX3VwZGF0ZV9pcnEocnRhcC0+cnRjLCAxLCBSVENfQUYpOwogCkBAIC0xMjgsNiArMTM3LDggQEAKIAllbHNlCiAJCXdyaXRlbCgwLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfTUFTSyk7CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgY29oOTAxMzMxX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y1MDYzMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKaW5kZXggZjRkZDg3ZS4uNGM1ZDVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlydGMtPnRtX2hvdXIgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9IT1VSXSk7CiAJcnRjLT50bV93ZGF5ID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfV0tEQVldKTsKIAlydGMtPnRtX21kYXkgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9EQVldKTsKLQlydGMtPnRtX21vbiA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSk7CisJcnRjLT50bV9tb24gPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0pIC0gMTsKIAlydGMtPnRtX3llYXIgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9ZRUFSXSkgKyAxMDA7CiB9CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfSE9VUl0gPSBiaW4yYmNkKHJ0Yy0+dG1faG91cik7CiAJcGNmLT50aW1lW1BDRjUwNjMzX1RJX1dLREFZXSA9IGJpbjJiY2QocnRjLT50bV93ZGF5KTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfREFZXSA9IGJpbjJiY2QocnRjLT50bV9tZGF5KTsKLQlwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdID0gYmluMmJjZChydGMtPnRtX21vbik7CisJcGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSA9IGJpbjJiY2QocnRjLT50bV9tb24gKyAxKTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfWUVBUl0gPSBiaW4yYmNkKHJ0Yy0+dG1feWVhciAlIDEwMCk7CiB9CiAKQEAgLTI0NSw4ICsyNDUsOSBAQAogCXJldCA9IHBjZjUwNjMzX3dyaXRlX2Jsb2NrKHJ0Yy0+cGNmLCBQQ0Y1MDYzM19SRUdfUlRDU0NBLAogCQkJCVBDRjUwNjMzX1RJX0VYVEVOVCwgJnBjZl90bS50aW1lWzBdKTsKIAotCWlmICghYWxhcm1fbWFza2VkKQorCWlmICghYWxhcm1fbWFza2VkIHx8IGFscm0tPmVuYWJsZWQpCiAJCXBjZjUwNjMzX2lycV91bm1hc2socnRjLT5wY2YsIFBDRjUwNjMzX0lSUV9BTEFSTSk7CisJcnRjLT5hbGFybV9lbmFibGVkID0gYWxybS0+ZW5hYmxlZDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTEsOCArMjkyLDkgQEAKIAkJCQkmcGNmNTA2MzNfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCiAJaWYgKElTX0VSUihydGMtPnJ0Y19kZXYpKSB7CisJCWludCByZXQgPSAgUFRSX0VSUihydGMtPnJ0Y19kZXYpOwogCQlrZnJlZShydGMpOwotCQlyZXR1cm4gUFRSX0VSUihydGMtPnJ0Y19kZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXBjZjUwNjMzX3JlZ2lzdGVyX2lycShydGMtPnBjZiwgUENGNTA2MzNfSVJRX0FMQVJNLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhZDE2NDA1Li40MjNjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtOTYsNyArOTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKIHsKLQlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7CisJcmV0dXJuICEhKHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2MzAyMF9jaGlwX29wcyB2MzAyMF9tbWlvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCAyYzgzOWQwLi5mYWRkZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yMDksMTkgKzIwOSwxOCBAQAogCiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaXJxX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGZyZXEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1NjQgY291bnQ7CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoZnJlcSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWNvdW50ID0gUlRDX0ZSRVFVRU5DWTsKIAlkb19kaXYoY291bnQsIGZyZXEpOwogCi0JcGVyaW9kaWNfY291bnQgPSBjb3VudDsKLQogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKwlwZXJpb2RpY19jb3VudCA9IGNvdW50OworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBwZXJpb2RpY19jb3VudCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIHBlcmlvZGljX2NvdW50ID4+IDE2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCmluZGV4IDMxMGMxMDcuLjY1ODNjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJLyogeWVhciwgc2luY2UgdGhlIHJ0YyBlcG9jaCovCiAJCWJ1ZltDQ1JfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAkJYnVmW0NDUl9XREFZXSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKLQkJYnVmW0NDUl9ZMktdID0gYmluMmJjZCh0bS0+dG1feWVhciAvIDEwMCk7CisJCWJ1ZltDQ1JfWTJLXSA9IGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOwogCX0KIAogCS8qIElmIHdyaXRpbmcgYWxhcm0gcmVnaXN0ZXJzLCBzZXQgY29tcGFyZSBiaXRzIG9uIHJlZ2lzdGVycyAwLTQgKi8KQEAgLTI4MCw5ICsyODAsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCi0JdG0udG1faG91ciA9IHRtLnRtX21pbiA9IHRtLnRtX3NlYyA9IDA7CisJbWVtc2V0KCZ0bSwgMCwgc2l6ZW9mKHRtKSk7CiAKLQllcnIgPSB4MTIwNV9zZXRfZGF0ZXRpbWUoY2xpZW50LCAmdG0sIDAsIFgxMjA1X0NDUl9CQVNFLCAwKTsKKwllcnIgPSB4MTIwNV9zZXRfZGF0ZXRpbWUoY2xpZW50LCAmdG0sIDEsIFgxMjA1X0NDUl9CQVNFLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmFibGUgdG8gcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDUzYjhjMjUuLmFhY2NjOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjUzMyw2ICsyNTMzLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwl1bnNpZ25lZCBsb25nICppZGF3OwogCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QobWFnaWMsIDEgLyogUkRDICovLCByZGNfYnVmZmVyX3NpemUsIGRldmljZSk7CiAKQEAgLTI1NDYsOSArMjU0NywxNyBAQAogCiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IENDV19DTURfUkRDOwotCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpcmRjX2J1ZmZlcjsKLQljY3ctPmNvdW50ID0gcmRjX2J1ZmZlcl9zaXplOworCWlmIChpZGFsX2lzX25lZWRlZChyZGNfYnVmZmVyLCByZGNfYnVmZmVyX3NpemUpKSB7CisJCWlkYXcgPSAodW5zaWduZWQgbG9uZyAqKSAoY3FyLT5kYXRhKTsKKwkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgaWRhdzsKKwkJY2N3LT5mbGFncyA9IENDV19GTEFHX0lEQTsKKwkJaWRhdyA9IGlkYWxfY3JlYXRlX3dvcmRzKGlkYXcsIHJkY19idWZmZXIsIHJkY19idWZmZXJfc2l6ZSk7CisJfSBlbHNlIHsKKwkJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdCkgcmRjX2J1ZmZlcjsKKwkJY2N3LT5mbGFncyA9IDA7CisJfQogCisJY2N3LT5jb3VudCA9IHJkY19idWZmZXJfc2l6ZTsKIAljcXItPnN0YXJ0ZGV2ID0gZGV2aWNlOwogCWNxci0+bWVtZGV2ID0gZGV2aWNlOwogCWNxci0+ZXhwaXJlcyA9IDEwKkhaOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDBiZTdjMTUuLjQxN2I5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTMyMTYsNiArMzIxNiw3IEBACiAJc3RydWN0IGRhc2RfZWNrZF9jaGFyYWN0ZXJpc3RpY3MgdGVtcF9yZGNfZGF0YTsKIAlpbnQgaXNfa25vd24sIHJjOwogCXN0cnVjdCBkYXNkX3VpZCB0ZW1wX3VpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCkBAIC0zMjI4LDcgKzMyMjksOCBAQAogCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZwcml2YXRlLT51aWQpOwogCWRhc2RfZ2V0X3VpZChkZXZpY2UtPmNkZXYsICZ0ZW1wX3VpZCk7CiAJaWYgKG1lbWNtcCgmcHJpdmF0ZS0+dWlkLCAmdGVtcF91aWQsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKSAhPSAwKQotCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzIGNoYW5nZWRcbiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzICIKKwkJCSJjaGFuZ2VkXG4iKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+dWlkKTsKQEAgLTMyNTYsOSArMzI1OCw5IEBACiAJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCXNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKIAltZW1jcHkoJnByaXZhdGUtPnJkY19kYXRhLCAmdGVtcF9yZGNfZGF0YSwgc2l6ZW9mKHRlbXBfcmRjX2RhdGEpKTsKLQlzcGluX3VubG9jayhnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwogCiAJLyogYWRkIGRldmljZSB0byBhbGlhcyBtYW5hZ2VtZW50ICovCiAJZGFzZF9hbGlhc19hZGRfZGV2aWNlKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDg5ZWNlMWMuLjY2ZTIxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAlhdG9taWNfc2V0KCZtb25wcml2LT5tc2dsaW1fY291bnQsIDApOwogCW1vbnByaXYtPndyaXRlX2luZGV4ICA9IDA7CiAJbW9ucHJpdi0+cmVhZF9pbmRleCAgID0gMDsKKwlkZXZfc2V0X2RydmRhdGEobW9ucmVhZGVyX2RldmljZSwgTlVMTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTU9OX01TR0xJTTsgaSsrKQogCQlrZnJlZShtb25wcml2LT5tc2dfYXJyYXlbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCmluZGV4IGRhYWVjMTguLmI0NDQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKQEAgLTI2LDcgKzI2LDYgQEAKIHN0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmNhbGxob21lX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfYXN5bmNfbG9jayk7Ci1zdGF0aWMgY2hhciBub2RlbmFtZVs2NF07CiAjZGVmaW5lIFNDTFBfTk9STUFMX1dSSVRFCTB4MDAKIAogc3RydWN0IGFzeW5jX2V2YnVmIHsKQEAgLTUyLDkgKzUxLDEwIEBACiBzdGF0aWMgaW50IGNhbGxfaG9tZV9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewotCQlzdHJuY2F0KGRhdGEsIG5vZGVuYW1lLCBzdHJsZW4obm9kZW5hbWUpKTsKLQkJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKKwlzdHJuY2F0KGRhdGEsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwKKwkJc2l6ZW9mKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSkpOworCXNjbHBfYXN5bmNfc2VuZF93YWl0KGRhdGEpOworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYWxsX2hvbWVfcGFuaWNfbmIgPSB7CkBAIC02MiwyMSArNjIsMjAgQEAKIAkucHJpb3JpdHkgPSBJTlRfTUFYLAogfTsKIAotc3RhdGljIGludCBwcm9jX2hhbmRsZXJfY2FsbGhvbWUoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpjb3VudCwKIAkJCQkgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBsZW4sIHJjOwotCWNoYXIgYnVmWzJdOworCWNoYXIgYnVmWzNdOwogCi0JaWYgKCEqY291bnQgfCAoKnBwb3MgJiYgIXdyaXRlKSkgeworCWlmICghKmNvdW50IHx8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CiAJCSpjb3VudCA9IDA7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdyaXRlKSB7Ci0JCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKLQkJYnVmW2xlbl0gPSAnXDAnOworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwogCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAocmMgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwLDcgKzk5LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJjYWxsaG9tZSIsCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19oYW5kbGVyX2NhbGxob21lLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19oYW5kbGVyX2NhbGxob21lLAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CkBAIC0xNzEsMzkgKzE3MCwyOSBAQAogCXJjID0gc2NscF9yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7Ci0JaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKSB7Ci0JCXJjID0gLUVOT01FTTsKKwlyYyA9IC1FT1BOT1RTVVBQOworCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkKIAkJZ290byBvdXRfc2NscDsKLQl9Ci0JaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKSB7Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0X3NjbHA7Ci0JfQogCXJjID0gLUVOT01FTTsKKwljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKKwlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpCisJCWdvdG8gb3V0X3NjbHA7CiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2xwX3JlcSksIEdGUF9LRVJORUwpOwotCWlmICghcmVxdWVzdCkKLQkJZ290byBvdXRfc3lzOwogCXNjY2IgPSAoc3RydWN0IHNjbHBfYXN5bmNfc2NjYiAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghc2NjYikKKwlpZiAoIXJlcXVlc3QgfHwgIXNjY2IpCiAJCWdvdG8gb3V0X21lbTsKLQlyYyA9ICBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCQkJCSAgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9tZW07Ci0KLQlzdHJuY3B5KG5vZGVuYW1lLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsIDY0KTsKLQlyZXR1cm4gMDsKLQorCXJjID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7CisJaWYgKCFyYykKKwkJZ290byBvdXQ7CiBvdXRfbWVtOgogCWtmcmVlKHJlcXVlc3QpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2NjYik7Ci1vdXRfc3lzOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGNhbGxob21lX3N5c2N0bF9oZWFkZXIpOwogb3V0X3NjbHA6CiAJc2NscF91bnJlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKK291dDoKIAlyZXR1cm4gcmM7Ci0KIH0KIG1vZHVsZV9pbml0KHNjbHBfYXN5bmNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKaW5kZXggODRjMTkxYy4uMDU5MDlhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKQEAgLTIwLDkgKzIwLDEyIEBACiAKICNpbmNsdWRlICJzY2xwLmgiCiAKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfcmVzdGFydCkoY2hhciAqKTsKK3N0YXRpYyB2b2lkICgqb2xkX21hY2hpbmVfaGFsdCkodm9pZCk7CitzdGF0aWMgdm9pZCAoKm9sZF9tYWNoaW5lX3Bvd2VyX29mZikodm9pZCk7CisKIC8qIFNodXRkb3duIGhhbmRsZXIuIFNpZ25hbCBjb21wbGV0aW9uIG9mIHNodXRkb3duIGJ5IGxvYWRpbmcgc3BlY2lhbCBQU1cuICovCi1zdGF0aWMgdm9pZAotZG9fbWFjaGluZV9xdWllc2NlKHZvaWQpCitzdGF0aWMgdm9pZCBkb19tYWNoaW5lX3F1aWVzY2Uodm9pZCkKIHsKIAlwc3dfdCBxdWllc2NlX3BzdzsKIApAQCAtMzMsMjMgKzM2LDQ4IEBACiB9CiAKIC8qIEhhbmRsZXIgZm9yIHF1aWVzY2UgZXZlbnQuIFN0YXJ0IHNodXRkb3duIHByb2NlZHVyZS4gKi8KLXN0YXRpYyB2b2lkCi1zY2xwX3F1aWVzY2VfaGFuZGxlcihzdHJ1Y3QgZXZidWZfaGVhZGVyICpldmJ1ZikKK3N0YXRpYyB2b2lkIHNjbHBfcXVpZXNjZV9oYW5kbGVyKHN0cnVjdCBldmJ1Zl9oZWFkZXIgKmV2YnVmKQogewotCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAqKSBkb19tYWNoaW5lX3F1aWVzY2U7Ci0JX21hY2hpbmVfaGFsdCA9IGRvX21hY2hpbmVfcXVpZXNjZTsKLQlfbWFjaGluZV9wb3dlcl9vZmYgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJaWYgKF9tYWNoaW5lX3Jlc3RhcnQgIT0gKHZvaWQgKikgZG9fbWFjaGluZV9xdWllc2NlKSB7CisJCW9sZF9tYWNoaW5lX3Jlc3RhcnQgPSBfbWFjaGluZV9yZXN0YXJ0OworCQlvbGRfbWFjaGluZV9oYWx0ID0gX21hY2hpbmVfaGFsdDsKKwkJb2xkX21hY2hpbmVfcG93ZXJfb2ZmID0gX21hY2hpbmVfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQgKikgZG9fbWFjaGluZV9xdWllc2NlOworCQlfbWFjaGluZV9oYWx0ID0gZG9fbWFjaGluZV9xdWllc2NlOworCQlfbWFjaGluZV9wb3dlcl9vZmYgPSBkb19tYWNoaW5lX3F1aWVzY2U7CisJfQogCWN0cmxfYWx0X2RlbCgpOwogfQogCisvKiBVbmRvIG1hY2hpbmUgcmVzdGFydC9oYWx0L3Bvd2VyX29mZiBtb2RpZmljYXRpb24gb24gcmVzdW1lICovCitzdGF0aWMgdm9pZCBzY2xwX3F1aWVzY2VfcG1fZXZlbnQoc3RydWN0IHNjbHBfcmVnaXN0ZXIgKnJlZywKKwkJCQkgIGVudW0gc2NscF9wbV9ldmVudCBzY2xwX3BtX2V2ZW50KQoreworCXN3aXRjaCAoc2NscF9wbV9ldmVudCkgeworCWNhc2UgU0NMUF9QTV9FVkVOVF9SRVNUT1JFOgorCQlpZiAob2xkX21hY2hpbmVfcmVzdGFydCkgeworCQkJX21hY2hpbmVfcmVzdGFydCA9IG9sZF9tYWNoaW5lX3Jlc3RhcnQ7CisJCQlfbWFjaGluZV9oYWx0ID0gb2xkX21hY2hpbmVfaGFsdDsKKwkJCV9tYWNoaW5lX3Bvd2VyX29mZiA9IG9sZF9tYWNoaW5lX3Bvd2VyX29mZjsKKwkJCW9sZF9tYWNoaW5lX3Jlc3RhcnQgPSBOVUxMOworCQkJb2xkX21hY2hpbmVfaGFsdCA9IE5VTEw7CisJCQlvbGRfbWFjaGluZV9wb3dlcl9vZmYgPSBOVUxMOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NMUF9QTV9FVkVOVF9GUkVFWkU6CisJY2FzZSBTQ0xQX1BNX0VWRU5UX1RIQVc6CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBzY2xwX3JlZ2lzdGVyIHNjbHBfcXVpZXNjZV9ldmVudCA9IHsKIAkucmVjZWl2ZV9tYXNrID0gRVZUWVBfU0lHUVVJRVNDRV9NQVNLLAotCS5yZWNlaXZlcl9mbiA9IHNjbHBfcXVpZXNjZV9oYW5kbGVyCisJLnJlY2VpdmVyX2ZuID0gc2NscF9xdWllc2NlX2hhbmRsZXIsCisJLnBtX2V2ZW50X2ZuID0gc2NscF9xdWllc2NlX3BtX2V2ZW50CiB9OwogCiAvKiBJbml0aWFsaXplIHF1aWVzY2UgZHJpdmVyLiAqLwotc3RhdGljIGludCBfX2luaXQKLXNjbHBfcXVpZXNjZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2xwX3F1aWVzY2VfaW5pdCh2b2lkKQogewogCXJldHVybiBzY2xwX3JlZ2lzdGVyKCZzY2xwX3F1aWVzY2VfZXZlbnQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCmluZGV4IDE3ODcyNGYuLmI5ZDJhMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKQEAgLTcwNSwyMSArNzA1LDYgQEAKIH0KIF9faW5pdGNhbGwoc2NscF92dDIyMF90dHlfaW5pdCk7CiAKLSNpZmRlZiBDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFCi0KLXN0YXRpYyB2b2lkCi1zY2xwX3Z0MjIwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCi1zY2xwX3Z0MjIwX2Nvbl9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpCi17Ci0JKmluZGV4ID0gMDsKLQlyZXR1cm4gc2NscF92dDIyMF9kcml2ZXI7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fc2NscF92dDIyMF9mbHVzaF9idWZmZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzc2LDYgKzc2MSwyMSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEUKKworc3RhdGljIHZvaWQKK3NjbHBfdnQyMjBfY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCV9fc2NscF92dDIyMF93cml0ZSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWYsIGNvdW50LCAxLCAxLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICoKK3NjbHBfdnQyMjBfY29uX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKK3sKKwkqaW5kZXggPSAwOworCXJldHVybiBzY2xwX3Z0MjIwX2RyaXZlcjsKK30KKwogc3RhdGljIGludAogc2NscF92dDIyMF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDY0ZjU3ZWYuLjBjMDcwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTE2Miw5ICsxNjIsMTAgQEAKIAlzcGluX2xvY2tfaXJxKCZkZXZpY2UtPmJsa19kYXRhLnJlcXVlc3RfcXVldWVfbG9jayk7CiAJd2hpbGUgKAogCQkhYmxrX3F1ZXVlX3BsdWdnZWQocXVldWUpICYmCi0JCShyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxdWV1ZSkpICYmCisJCWJsa19wZWVrX3JlcXVlc3QocXVldWUpICYmCiAJCW5yX3F1ZXVlZCA8IFRBUEVCTE9DS19NSU5fUkVRVUVVRQogCSkgeworCQlyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxdWV1ZSk7CiAJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CiAJCQlEQkZfRVZFTlQoMSwgIlRCTE9DSzogUmVqZWN0aW5nIHdyaXRlIHJlcXVlc3RcbiIpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2UtPmJsa19kYXRhLnJlcXVlc3RfcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCAyZWUwOTNlLi4yNDkwYjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTEyNTAsOCArMTI1MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZfaWQ7CiAKLQljZGV2ID0gc2NoX2dldF9jZGV2KHNjaCk7Ci0JaWYgKGNkZXYpIHsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKIAkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNjaC0+ZGV2LmtvYmosCiAJCQkJCSZpb19zdWJjaGFubmVsX2F0dHJfZ3JvdXApOwogCQlpZiAocmMpCkBAIC0xMjYwLDEzICsxMjU5LDEzIEBACiAJCQkJICAgICAgIjAuJXguJTA0eCAocmM9JWQpXG4iLAogCQkJCSAgICAgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sIHJjKTsKIAkJLyoKLQkJICogVGhpcyBzdWJjaGFubmVsIGFscmVhZHkgaGFzIGFuIGFzc29jaWF0ZWQgY2N3X2RldmljZS4KKwkJICogVGhlIGNvbnNvbGUgc3ViY2hhbm5lbCBhbHJlYWR5IGhhcyBhbiBhc3NvY2lhdGVkIGNjd19kZXZpY2UuCiAJCSAqIFRocm93IHRoZSBkZWxheWVkIHVldmVudCBmb3IgdGhlIHN1YmNoYW5uZWwsIHJlZ2lzdGVyCi0JCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LiBUaGlzIGhhcHBlbnMgZm9yIGFsbCBlYXJseQotCQkgKiBkZXZpY2VzLCBlLmcuIHRoZSBjb25zb2xlLgorCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4KIAkJICovCiAJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CisJCWNkZXYgPSBzY2hfZ2V0X2NkZXYoc2NoKTsKIAkJY2Rldi0+ZGV2Lmdyb3VwcyA9IGNjd2Rldl9hdHRyX2dyb3VwczsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmNkZXYtPmRldik7CiAJCWNjd19kZXZpY2VfcmVnaXN0ZXIoY2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggMTAyMDAwZC4uMzAxMjM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtMTU4LDcgKzE1OCwxMiBAQAogCQlzbXNnX3BhdGgtPmZsYWdzID0gMDsKIAkJcmMgPSBpdWN2X3BhdGhfY29ubmVjdChzbXNnX3BhdGgsICZzbXNnX2hhbmRsZXIsICIqTVNHICAgICIsCiAJCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlwcmludGsoS0VSTl9FUlIgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNlbmRpZgorCQljcGNtZCgiU0VUIFNNU0cgSVVDViIsIE5VTEwsIDAsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDBmNzlmM2EuLjI4ODllNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtMTI4LDEyICsxMjgsMTMgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX3NldHVwKGNoYXIgKmRldnN0cikKIHsKIAljaGFyICp0b2tlbjsKLQljaGFyICpzdHI7CisJY2hhciAqc3RyLCAqc3RyX3NhdmVkOwogCWNoYXIgYnVzaWRbWkZDUF9CVVNfSURfU0laRV07CiAJdTY0IHd3cG4sIGx1bjsKIAogCS8qIGR1cGxpY2F0ZSBkZXZzdHIgYW5kIGtlZXAgdGhlIG9yaWdpbmFsIGZvciBzeXNmcyBwcmVzZW50YXRpb24qLwotCXN0ciA9IGttYWxsb2Moc3RybGVuKGRldnN0cikgKyAxLCBHRlBfS0VSTkVMKTsKKwlzdHJfc2F2ZWQgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyID0gc3RyX3NhdmVkOwogCWlmICghc3RyKQogCQlyZXR1cm47CiAKQEAgLTE1MiwxMiArMTUzLDEyIEBACiAJaWYgKCF0b2tlbiB8fCBzdHJpY3Rfc3RydG91bGwodG9rZW4sIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmx1bikpCiAJCWdvdG8gZXJyX291dDsKIAotCWtmcmVlKHN0cik7CisJa2ZyZWUoc3RyX3NhdmVkKTsKIAl6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShidXNpZCwgd3dwbiwgbHVuKTsKIAlyZXR1cm47CiAKLSBlcnJfb3V0OgotCWtmcmVlKHN0cik7CitlcnJfb3V0OgorCWtmcmVlKHN0cl9zYXZlZCk7CiAJcHJfZXJyKCIlcyBpcyBub3QgYSB2YWxpZCBTQ1NJIGRldmljZVxuIiwgZGV2c3RyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggNzNkMzY2Yi4uZjczZTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04NTgsMTAgKzg1OCw3IEBACiAJCWlmIChmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpID09IEZDX1BPUlRUWVBFX1BUUCkKIAkJCXJldHVybiB6ZmNwX2VycF9vcGVuX3B0cF9wb3J0KGFjdCk7CiAJCWlmICghcG9ydC0+ZF9pZCkgewotCQkJemZjcF9wb3J0X2dldChwb3J0KTsKLQkJCWlmICghcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLAotCQkJCQkmcG9ydC0+Z2lkX3BuX3dvcmspKQotCQkJCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwpAQCAtODY5LDEyICs4NjYsMTEgQEAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9PUEVOSU5HOgogCQkvKiBEX0lEIG1pZ2h0IGhhdmUgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikgewotCQkJaWYgKHBvcnQtPmRfaWQpCi0JCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLQkJCWVsc2UgewotCQkJCWFjdC0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOwotCQkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CisJCQlpZiAoIXBvcnQtPmRfaWQpIHsKKwkJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKKwkJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJCX0KKwkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJCX0KIAkJaWYgKHBvcnQtPmRfaWQgJiYgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykpIHsKIAkJCXBvcnQtPmRfaWQgPSAwOwpAQCAtODg5LDE5ICs4ODUsMjEgQEAKIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWludCBwX3N0YXR1cyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCi0JaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKQorCWlmICgocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpICYmCisJICAgICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpCiAJCWdvdG8gY2xvc2VfaW5pdF9kb25lOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6CiAJCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xvc2UoZXJwX2FjdGlvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzoKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggNjI5ZWRlYy4uYjNmMjhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC05Niw2ICs5Niw3IEBACiBleHRlcm4gdm9pZCBfemZjcF9mY19zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggNzIyZjIyZC4uZGYyM2JjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMzYxLDYgKzM2MSwxNyBAQAogfQogCiAvKioKKyAqIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwIC0gdHJpZ2dlciB0aGUgZF9pZCBsb29rdXAgdXNpbmcgYSBHSURfUE4gcmVxdWVzdAorICogQHBvcnQ6IFRoZSB6ZmNwX3BvcnQgdG8gbG9va3VwIHRoZSBkX2lkIGZvci4KKyAqLwordm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5naWRfcG5fd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKKy8qKgogICogemZjcF9mY19wbG9naV9ldmFsdWF0ZSAtIGV2YWx1YXRlIFBMT0dJIHBsYXlsb2FkCiAgKiBAcG9ydDogemZjcF9wb3J0IHN0cnVjdHVyZQogICogQHBsb2dpOiBwbG9naSBwYXlsb2FkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCAzOGE3ZTRhLi40ZTQxYmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAJLyogY29tbW9uIHNldHRpbmdzIGZvciBjdC9ncyBhbmQgZWxzIHJlcXVlc3RzICovCiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC50aW1lb3V0ID0gMiAqIFJfQV9UT1Y7Ci0JemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAyICogUl9BX1RPViArIDEwKTsKKwl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsICgyICogUl9BX1RPViArIDEwKSAqIEhaKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ3NSw5ICsxNDc1LDE2IEBACiAJCXBsb2dpID0gKHN0cnVjdCBmc2ZfcGxvZ2kgKikgcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHM7CiAJCWlmIChyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmVsczFfbGVuZ3RoID49CiAJCSAgICBGU0ZfUExPR0lfTUlOX0xFTikgewotCQkJaWYgKHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4gIT0gcG9ydC0+d3dwbikKKwkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pIHsKIAkJCQlwb3J0LT5kX2lkID0gMDsKLQkJCWVsc2UgeworCQkJCWRldl93YXJuKCZwb3J0LT5hZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkJCSAiQSBwb3J0IG9wZW5lZCB3aXRoIFdXUE4gMHglMDE2THggIgorCQkJCQkgInJldHVybmVkIGRhdGEgdGhhdCBpZGVudGlmaWVzIGl0IGFzICIKKwkJCQkJICJXV1BOIDB4JTAxNkx4XG4iLAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+d3dwbiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgcGxvZ2ktPnNlcnZfcGFyYW0ud3dwbik7CisJCQl9IGVsc2UgewogCQkJCXBvcnQtPnd3bm4gPSBwbG9naS0+c2Vydl9wYXJhbS53d25uOwogCQkJCXpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUocG9ydCwgcGxvZ2kpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCmluZGV4IDA3OWE4Y2YuLmQzMTAwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKQEAgLTIyNCw2ICsyMjQsNyBAQAogCiAJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgInN5dWFzXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOworCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dDoKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYwppbmRleCBiMmY2OTQ5Li5iZDM0YjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYwpAQCAtNDEsNiArNDEsOCBAQAogCiAjZGVmaW5lCUJGQURfRldfRklMRV9DVAkiY3Rmdy5iaW4iCiAjZGVmaW5lCUJGQURfRldfRklMRV9DQgkiY2Jmdy5iaW4iCitNT0RVTEVfRklSTVdBUkUoQkZBRF9GV19GSUxFX0NUKTsKK01PRFVMRV9GSVJNV0FSRShCRkFEX0ZXX0ZJTEVfQ0IpOwogCiB1MzIgKgogYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCmluZGV4IDE1OGM5OTIuLjU1ZDAxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCkBAIC05NDgsNyArOTQ4LDcgQEAKIAlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIChCRkFfUE9SVF9ST0xFX0ZDUF9JTSB8IEJGQV9QT1JUX1JPTEVfRkNQX1RNKSkKIAkJLyogRm9yIEZDUCB0eXBlIDB4MDggKi8KIAkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVsyXSA9IDE7Ci0JaWYgKGJmYWRfc3VwcG9ydGVkX2ZjNHMgfCBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCWlmIChiZmFkX3N1cHBvcnRlZF9mYzRzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykKIAkJLyogRm9yIExMQy9TTkFQIHR5cGUgMHgwNSAqLwogCQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpWzNdID0gMHgyMDsKIAkvKiBGb3IgZmlicmUgY2hhbm5lbCBzZXJ2aWNlcyB0eXBlIDB4MjAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IGI2YWY2M2MuLjQ5Njc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMTkxOCw2ICsxOTE4LDEwIEBACiAJCX0KIAkJc2l6ZSA9IHNpemU+PjE2OwogCQlzaXplICo9IDQ7CisJCWlmIChzaXplID4gTUFYX01FU1NBR0VfU0laRSkgeworCQkJcmNvZGUgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJCS8qIENvcHkgaW4gdGhlIHVzZXIncyBJMk8gY29tbWFuZCAqLwogCQlpZiAoY29weV9mcm9tX3VzZXIgKG1zZywgdXNlcl9tc2csIHNpemUpKSB7CiAJCQlyY29kZSA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCAxODVlNmJjLi45ZThmY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTI5MDAsNyArMjkwMCw3IEBACiAgICAgICAgIGVpbmRleCA9IGhhbmRsZTsKICAgICBlc3RyLT5ldmVudF9zb3VyY2UgPSAwOwogCi0gICAgaWYgKGVpbmRleCA+PSBNQVhfRVZFTlRTKSB7CisgICAgaWYgKGVpbmRleCA8IDAgfHwgZWluZGV4ID49IE1BWF9FVkVOVFMpIHsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgIHJldHVybiBlaW5kZXg7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hvc3RzLmMgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwppbmRleCA1ZmQyZGE0Li5jOTY4Y2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaG9zdHMuYworKysgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwpAQCAtMTY0LDggKzE2NCw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJnNob3N0LT5zY2FuX211dGV4KTsKIAlzY3NpX2ZvcmdldF9ob3N0KHNob3N0KTsKKwltdXRleF91bmxvY2soJnNob3N0LT5zY2FuX211dGV4KTsKIAlzY3NpX3Byb2NfaG9zdF9ybShzaG9zdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggNWYwNDU1MC4uNzZkMjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtNDE4OSw2ICs0MTg5LDI1IEBACiB9CiAKIC8qKgorICogaXByX2lzcl9laCAtIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZXJyb3IgaGFuZGxlcgorICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CisgKiBAbXNnOgltZXNzYWdlIHRvIGxvZworICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKiovCitzdGF0aWMgdm9pZCBpcHJfaXNyX2VoKHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZywgY2hhciAqbXNnKQoreworCWlvYV9jZmctPmVycm9yc19sb2dnZWQrKzsKKwlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICIlc1xuIiwgbXNnKTsKKworCWlmIChXQUlUX0ZPUl9EVU1QID09IGlvYV9jZmctPnNkdF9zdGF0ZSkKKwkJaW9hX2NmZy0+c2R0X3N0YXRlID0gR0VUX0RVTVA7CisKKwlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKK30KKworLyoqCiAgKiBpcHJfaXNyIC0gSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZQogICogQGlycToJaXJxIG51bWJlcgogICogQGRldnA6CXBvaW50ZXIgdG8gaW9hIGNvbmZpZyBzdHJ1Y3QKQEAgLTQyMDMsNiArNDIyMiw3IEBACiAJdm9sYXRpbGUgdTMyIGludF9yZWcsIGludF9tYXNrX3JlZzsKIAl1MzIgaW9hc2M7CiAJdTE2IGNtZF9pbmRleDsKKwlpbnQgbnVtX2hycnEgPSAwOwogCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKIAlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOwogCkBAIC00MjMzLDEzICs0MjUzLDcgQEAKIAkJCQkgICAgIElQUl9IUlJRX1JFUV9SRVNQX0hBTkRMRV9NQVNLKSA+PiBJUFJfSFJSUV9SRVFfUkVTUF9IQU5ETEVfU0hJRlQ7CiAKIAkJCWlmICh1bmxpa2VseShjbWRfaW5kZXggPj0gSVBSX05VTV9DTURfQkxLUykpIHsKLQkJCQlpb2FfY2ZnLT5lcnJvcnNfbG9nZ2VkKys7Ci0JCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiSW52YWxpZCByZXNwb25zZSBoYW5kbGUgZnJvbSBJT0FcbiIpOwotCi0JCQkJaWYgKFdBSVRfRk9SX0RVTVAgPT0gaW9hX2NmZy0+c2R0X3N0YXRlKQotCQkJCQlpb2FfY2ZnLT5zZHRfc3RhdGUgPSBHRVRfRFVNUDsKLQotCQkJCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCQkJCWlwcl9pc3JfZWgoaW9hX2NmZywgIkludmFsaWQgcmVzcG9uc2UgaGFuZGxlIGZyb20gSU9BIik7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KQEAgLTQyNjYsOCArNDI4MCwxOCBAQAogCiAJCWlmIChpcHJfY21kICE9IE5VTEwpIHsKIAkJCS8qIENsZWFyIHRoZSBQQ0kgaW50ZXJydXB0ICovCi0JCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKLQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCWRvIHsKKwkJCQl3cml0ZWwoSVBSX1BDSUlfSFJSUV9VUERBVEVELCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKKwkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7CisJCQl9IHdoaWxlIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEICYmCisJCQkJCW51bV9ocnJxKysgPCBJUFJfTUFYX0hSUlFfUkVUUklFUyk7CisKKwkJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEKSB7CisJCQkJaXByX2lzcl9laChpb2FfY2ZnLCAiRXJyb3IgY2xlYXJpbmcgSFJSUSIpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisKIAkJfSBlbHNlCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggMTYzMjQ1YS4uMTliYmNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAjZGVmaW5lIElQUl9JT0FfTUFYX1NFQ1RPUlMJCQkJMzI3NjcKICNkZWZpbmUgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMJCQkJNTEyCiAjZGVmaW5lIElQUl9NQVhfQ0RCX0xFTgkJCQkJMTYKKyNkZWZpbmUgSVBSX01BWF9IUlJRX1JFVFJJRVMJCQkJMwogCiAjZGVmaW5lIElQUl9ERUZBVUxUX0JVU19XSURUSAkJCQkxNgogI2RlZmluZSBJUFJfODBNQnNfU0NTSV9SQVRFCQkoKDgwICogMTApIC8gKElQUl9ERUZBVUxUX0JVU19XSURUSCAvIDgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKaW5kZXggYjMzODE5NS4uMzNjZjk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCkBAIC05NjAsNyArOTYwLDYgQEAKIAogCQkJfQogCQl9Ci0JCXJlcyA9IDA7CiAJfQogCiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCmluZGV4IDY3Y2RlMDEuLjUyODczM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYwpAQCAtNTQsMTUgKzU0LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0iYWhhMTUyeF9jcy5jIDEuNTQgMjAwMC8wNi8xMiAyMToyNzoyNSAoRGF2aWQgSGluZHMpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEwMyw3ICs5NCw3IEBACiB7CiAgICAgc2NzaV9pbmZvX3QgKmluZm87CiAKLSAgICBERUJVRygwLCAiYWhhMTUyeF9hdHRhY2goKVxuIik7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiYWhhMTUyeF9hdHRhY2goKVxuIik7CiAKICAgICAvKiBDcmVhdGUgbmV3IFNDU0kgZGV2aWNlICovCiAgICAgaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTUsNyArMTA2LDYgQEAKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMTA7CiAgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0gICAgbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTEyNyw3ICsxMTcsNyBAQAogCiBzdGF0aWMgdm9pZCBhaGExNTJ4X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBERUJVRygwLCAiYWhhMTUyeF9kZXRhY2goMHglcClcbiIsIGxpbmspOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImFoYTE1MnhfZGV0YWNoXG4iKTsKIAogICAgIGFoYTE1MnhfcmVsZWFzZV9jcyhsaW5rKTsKIApAQCAtMTM3LDkgKzEyNyw2IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgYWhhMTUyeF9jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKIAkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LApAQCAtMTY0LDE5ICsxNTEsMjIgQEAKIHsKICAgICBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IGFoYTE1Mnhfc2V0dXAgczsKLSAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IHJldDsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCi0gICAgREVCVUcoMCwgImFoYTE1MnhfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKyAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJhaGExNTJ4X2NvbmZpZ1xuIik7CiAKLSAgICBsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhaGExNTJ4X2NvbmZpZ19jaGVjaywgTlVMTCk7Ci0gICAgaWYgKGxhc3RfcmV0KSB7Ci0JY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7Ci0JZ290byBmYWlsZWQ7Ci0gICAgfQorICAgIHJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhaGExNTJ4X2NvbmZpZ19jaGVjaywgTlVMTCk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworICAgIGlmIChyZXQpCisJICAgIGdvdG8gZmFpbGVkOworCisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgCiAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFoYTE1MnggZHJpdmVyICovCiAgICAgbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOwpAQCAtMTk0LDcgKzE4NCw3IEBACiAgICAgaG9zdCA9IGFoYTE1MnhfcHJvYmVfb25lKCZzKTsKICAgICBpZiAoaG9zdCA9PSBOVUxMKSB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYWhhMTUyeF9jczogbm8gU0NTSSBkZXZpY2VzIGZvdW5kXG4iKTsKLQlnb3RvIGNzX2ZhaWxlZDsKKwlnb3RvIGZhaWxlZDsKICAgICB9CiAKICAgICBzcHJpbnRmKGluZm8tPm5vZGUuZGV2X25hbWUsICJzY3NpJWQiLCBob3N0LT5ob3N0X25vKTsKQEAgLTIwMyw4ICsxOTMsNiBAQAogCiAgICAgcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAgICAgYWhhMTUyeF9yZWxlYXNlX2NzKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKaW5kZXggMDYyNTRmNC4uOTE0MDQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCkBAIC01OSwxNiArNTksNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJGdXR1cmUgRG9tYWluIFBDTUNJQSBTQ1NJIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQotc3RhdGljIGNoYXIgKnZlcnNpb24gPQotImZkb21haW5fY3MuYyAxLjQ3IDIwMDEvMTAvMTMgMDA6MDg6NTIgKERhdmlkIEhpbmRzKSI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiB0eXBlZGVmIHN0cnVjdCBzY3NpX2luZm9fdCB7CkBAIC04Niw3ICs3Niw3IEBACiB7CiAJc2NzaV9pbmZvX3QgKmluZm87CiAKLQlERUJVRygwLCAiZmRvbWFpbl9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZmRvbWFpbl9hdHRhY2goKVxuIik7CiAKIAkvKiBDcmVhdGUgbmV3IFNDU0kgZGV2aWNlICovCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC05OSw3ICs4OSw2IEBACiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0xMTEsNyArMTAwLDcgQEAKIAogc3RhdGljIHZvaWQgZmRvbWFpbl9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImZkb21haW5fZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJmZG9tYWluX2RldGFjaFxuIik7CiAKIAlmZG9tYWluX3JlbGVhc2UobGluayk7CiAKQEAgLTEyMCw5ICsxMDksNiBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IGZkb21haW5fY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCiAJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKQEAgLTEzNywyMCArMTIzLDIyIEBACiBzdGF0aWMgaW50IGZkb21haW5fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLSAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47CisgICAgaW50IHJldDsKICAgICBjaGFyIHN0clsyMl07CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAotICAgIERFQlVHKDAsICJmZG9tYWluX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZmRvbWFpbl9jb25maWdcbiIpOwogCi0gICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZmRvbWFpbl9jb25maWdfY2hlY2ssIE5VTEwpOwotICAgIGlmIChsYXN0X3JldCkgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKyAgICByZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZmRvbWFpbl9jb25maWdfY2hlY2ssIE5VTEwpOworICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwotICAgIH0KIAotICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKyAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CisgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisgICAgaWYgKHJldCkKKwkgICAgZ290byBmYWlsZWQ7CiAKICAgICAvKiBBIGJhZCBoYWNrLi4uICovCiAgICAgcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOwpAQCAtMTYyLDExICsxNTAsMTEgQEAKICAgICBob3N0ID0gX19mZG9tYWluXzE2eDBfZGV0ZWN0KCZmZG9tYWluX2RyaXZlcl90ZW1wbGF0ZSk7CiAgICAgaWYgKCFob3N0KSB7CiAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImZkb21haW5fY3M6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIik7Ci0JZ290byBjc19mYWlsZWQ7CisJZ290byBmYWlsZWQ7CiAgICAgfQogCiAgICAgaWYgKHNjc2lfYWRkX2hvc3QoaG9zdCwgTlVMTCkpCi0JICAgIGdvdG8gY3NfZmFpbGVkOworCSAgICBnb3RvIGZhaWxlZDsKICAgICBzY3NpX3NjYW5faG9zdChob3N0KTsKIAogICAgIHNwcmludGYoaW5mby0+bm9kZS5kZXZfbmFtZSwgInNjc2klZCIsIGhvc3QtPmhvc3Rfbm8pOwpAQCAtMTc1LDggKzE2Myw2IEBACiAKICAgICByZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKICAgICBmZG9tYWluX3JlbGVhc2UobGluayk7CiAgICAgcmV0dXJuIC1FTk9ERVY7CkBAIC0xODgsNyArMTc0LDcgQEAKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAiZmRvbWFpbl9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJmZG9tYWluX3JlbGVhc2VcbiIpOwogCiAJc2NzaV9yZW1vdmVfaG9zdChpbmZvLT5ob3N0KTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwppbmRleCBlMzJjMzQ0Li5jMjM0MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKQEAgLTE1NjQsMTIgKzE1NjQsMTAgQEAKIAlsaW5rLT5pby5JT0FkZHJMaW5lcwkgPSAxMDsJLyogbm90IHVzZWQgKi8KIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzCSA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLQlsaW5rLT5pcnEuSVJRSW5mbzEJID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5BdHRyaWJ1dGVzCSA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKIAogCS8qIEludGVycnVwdCBoYW5kbGVyICovCiAJbGluay0+aXJxLkhhbmRsZXIJID0gJm5zcGludHI7Ci0JbGluay0+aXJxLkluc3RhbmNlICAgICAgID0gaW5mbzsKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyAgICAgfD0gSVJRRl9TSEFSRUQ7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCkBAIC0xNjg0LDEwICsxNjgyLDEwIEBACiAJCQlpZiAoY2ZnX21lbS0+cmVxLlNpemUgPCAweDEwMDApCiAJCQkJY2ZnX21lbS0+cmVxLlNpemUgPSAweDEwMDA7CiAJCQljZmdfbWVtLT5yZXEuQWNjZXNzU3BlZWQgPSAwOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmcF9kZXYsICZjZmdfbWVtLT5yZXEsICZwX2Rldi0+d2luKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgJmNmZ19tZW0tPnJlcSwgJnBfZGV2LT53aW4pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwogCQkJbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LT53aW4sICZtYXApICE9IDApCisJCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJCWNmZ19tZW0tPmRhdGEtPk1taW9BZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShjZmdfbWVtLT5yZXEuQmFzZSwgY2ZnX21lbS0+cmVxLlNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCmluZGV4IDIwYzNlNWUuLmY4NWYwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKQEAgLTYyLDE1ICs2Miw2IEBACiAKIHN0YXRpYyBjaGFyIHFsb2dpY19uYW1lW10gPSAicWxvZ2ljX2NzIjsKIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0gInFsb2dpY19jcy5jIDEuNzktYWMgMjAwMi8xMC8yNiAoRGF2aWQgSGluZHMpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcWxvZ2ljZmFzX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gcWxvZ2ljX25hbWUsCkBAIC0xNTksNyArMTUwLDcgQEAKIHsKIAlzY3NpX2luZm9fdCAqaW5mbzsKIAotCURFQlVHKDAsICJxbG9naWNfYXR0YWNoKClcbiIpOworCWRldl9kYmcoJmxpbmstPmRldiwgInFsb2dpY19hdHRhY2goKVxuIik7CiAKIAkvKiBDcmVhdGUgbmV3IFNDU0kgZGV2aWNlICovCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNzEsNyArMTYyLDYgQEAKIAlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTA7CiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKQEAgLTE4Myw3ICsxNzMsNyBAQAogCiBzdGF0aWMgdm9pZCBxbG9naWNfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJxbG9naWNfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJxbG9naWNfZGV0YWNoXG4iKTsKIAogCXFsb2dpY19yZWxlYXNlKGxpbmspOwogCWtmcmVlKGxpbmstPnByaXYpOwpAQCAtMTkyLDkgKzE4Miw2IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgcWxvZ2ljX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAogCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCkBAIC0yMTMsMTkgKzIwMCwyMiBAQAogc3RhdGljIGludCBxbG9naWNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0JaW50IGxhc3RfcmV0LCBsYXN0X2ZuOworCWludCByZXQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAotCURFQlVHKDAsICJxbG9naWNfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJxbG9naWNfY29uZmlnXG4iKTsKIAotCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHFsb2dpY19jb25maWdfY2hlY2ssIE5VTEwpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcWxvZ2ljX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7Ci0JfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fCAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewogCQkvKiBzZXQgQVRBY21kICovCkBAIC0yNDQsNyArMjM0LDcgQEAKIAkKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIiwgcWxvZ2ljX25hbWUpOwotCQlnb3RvIGNzX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJc3ByaW50ZihpbmZvLT5ub2RlLmRldl9uYW1lLCAic2NzaSVkIiwgaG9zdC0+aG9zdF9ubyk7CkBAIC0yNTMsMTIgKzI0Myw5IEBACiAKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKLQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiBmYWlsZWQ6CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwotCiB9CQkJCS8qIHFsb2dpY19jb25maWcgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0yNjcsNyArMjU0LDcgQEAKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAicWxvZ2ljX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInFsb2dpY19yZWxlYXNlXG4iKTsKIAogCXNjc2lfcmVtb3ZlX2hvc3QoaW5mby0+aG9zdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCmluZGV4IGIzMzBjMTEuLmU3NTY0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwpAQCAtNzcsMTcgKzc3LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLSJzeW01M2M1MDBfY3MuYyAwLjljIDIwMDQvMTAvMjcgKEJvYiBUcmFjeSkiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIApAQCAtNTI1LDcgKzUxNCw3IEBACiAJc3RydWN0IHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGluZm8tPmhvc3Q7CiAKLQlERUJVRygwLCAiU1lNNTNDNTAwX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgIlNZTTUzQzUwMF9yZWxlYXNlXG4iKTsKIAogCS8qCiAJKiAgRG8gdGhpcyBiZWZvcmUgcmVsZWFzaW5nL2ZyZWVpbmcgcmVzb3VyY2VzLgpAQCAtNjk3LDkgKzY4Niw2IEBACiAgICAgIC5zaG9zdF9hdHRycwkJPSBTWU01M0M1MDBfc2hvc3RfYXR0cnMKIH07CiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCBTWU01M0M1MDBfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKIAkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCkBAIC03MTksMjQgKzcwNSwyNyBAQAogU1lNNTNDNTAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotCWludCBsYXN0X3JldCwgbGFzdF9mbjsKKwlpbnQgcmV0OwogCWludCBpcnFfbGV2ZWwsIHBvcnRfYmFzZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQgPSAmc3ltNTNjNTAwX2RyaXZlcl90ZW1wbGF0ZTsKIAlzdHJ1Y3Qgc3ltNTNjNTAwX2RhdGEgKmRhdGE7CiAKLQlERUJVRygwLCAiU1lNNTNDNTAwX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiU1lNNTNDNTAwX2NvbmZpZ1xuIik7CiAKIAlpbmZvLT5tYW5mX2lkID0gbGluay0+bWFuZl9pZDsKIAotCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIFNZTTUzQzUwMF9jb25maWdfY2hlY2ssIE5VTEwpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgU1lNNTNDNTAwX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7Ci0JfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkqICBUaGF0J3MgdGhlIHRyb3VibGUgd2l0aCBjb3B5aW5nIGxpYmVyYWxseSBmcm9tIGFub3RoZXIgZHJpdmVyLgpAQCAtODI0LDggKzgxMyw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAic3ltNTNjNTAwX2NzOiBubyBTQ1NJIGRldmljZXMgZm91bmRcbiIpOwogCXJldHVybiAtRU5PREVWOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCVNZTTUzQzUwMF9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpAQCAtODU1LDcgKzg0Miw3IEBACiBzdGF0aWMgdm9pZAogU1lNNTNDNTAwX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAiU1lNNTNDNTAwX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiU1lNNTNDNTAwX2RldGFjaFxuIik7CiAKIAlTWU01M0M1MDBfcmVsZWFzZShsaW5rKTsKIApAQCAtODY4LDcgKzg1NSw3IEBACiB7CiAJc3RydWN0IHNjc2lfaW5mb190ICppbmZvOwogCi0JREVCVUcoMCwgIlNZTTUzQzUwMF9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiU1lNNTNDNTAwX2F0dGFjaCgpXG4iKTsKIAogCS8qIENyZWF0ZSBuZXcgU0NTSSBkZXZpY2UgKi8KIAlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTg4MCw3ICs4NjcsNiBAQAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAJbGluay0+aW8uSU9BZGRyTGluZXMgPSAxMDsKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwppbmRleCBmN2M3MGUyLi4wYTk3YmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKQEAgLTEwNzEsNyArMTA3MSw3IEBACiAKIAlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmNiX3NpemUpOwogCi0JaW9hZGxbMF0uZmxhZ3MgfD0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfUkVBRF9MQVNUKTsKKwlpb2FkbFswXS5mbGFncyB8PSBJT0FETF9GTEFHU19SRUFEX0xBU1Q7CiAJaW9hZGxbMF0uZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihyY2Jfc2l6ZSk7CiAJaW9hZGxbMF0uYWRkcmVzcyA9IGNwdV90b19sZTMyKGRtYSk7CiAKQEAgLTIyNTEsNyArMjI1MSw3IEBACiAKIAlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KGNtZC0+c2Vuc2VfYnVmZmVyX2RtYSk7CiAJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKLQlpb2FkbC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsLT5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAogCS8qIHJlcXVlc3Qgc2Vuc2UgbWlnaHQgYmUgY2FsbGVkIGFzIHBhcnQgb2YgZXJyb3IgcmVzcG9uc2UgcHJvY2Vzc2luZwogCSAqIHdoaWNoIHJ1bnMgaW4gdGFza2xldHMgY29udGV4dC4gSXQgaXMgcG9zc2libGUgdGhhdCBtaWQtbGF5ZXIgbWlnaHQKQEAgLTMwMTcsNyArMzAxNyw3IEBACiAJCWlvYWRsW2ldLmZsYWdzID0gMDsKIAl9CiAJLyogc2V0dXAgbGFzdCBkZXNjcmlwdG9yICovCi0JaW9hZGxbaSAtIDFdLmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzODcsNyArMzM4Nyw3IEBACiAJfQogCiAJLyogc2V0dXAgdGhlIGxhc3QgZGVzY3JpcHRvciAqLwotCWlvYWRsW2kgLSAxXS5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGxbaSAtIDFdLmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MzE0LDcgKzUzMTQsNyBAQAogCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CiAKIAlpb2FkbCA9ICYoaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsWzBdKTsKLQlpb2FkbC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsLT5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KHBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyKTsKIAlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCBjNDQ3ODM4Li40NzI5MWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIG91dF9kZXZpY2VfZGVzdHJveToKIAlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiBvdXQ6CiAJaWYgKGRpc3BsYXlfZmFpbHVyZV9tc2cpCkBAIC05NTEsMTUgKzk1Miw2IEBACiAJcmV0dXJuIFNDU0lfU0NBTl9MVU5fUFJFU0VOVDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGVzdHJveV9zZGV2KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwotCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKLQkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7Ci0JdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotfQotCiAjaWZkZWYgQ09ORklHX1NDU0lfTE9HR0lORwogLyoqIAogICogc2NzaV9pbnFfc3RyIC0gcHJpbnQgSU5RVUlSWSBkYXRhIGZyb20gbWluIHRvIG1heCBpbmRleCwgc3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQpAQCAtMTEzNyw3ICsxMTI5LDcgQEAKIAkJCX0KIAkJfQogCX0gZWxzZQotCQlzY3NpX2Rlc3Ryb3lfc2RldihzZGV2KTsKKwkJX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CiAgb3V0OgogCXJldHVybiByZXM7CiB9CkBAIC0xNDk4LDcgKzE0OTAsNyBAQAogCQkvKgogCQkgKiB0aGUgc2RldiB3ZSB1c2VkIGRpZG4ndCBhcHBlYXIgaW4gdGhlIHJlcG9ydCBsdW5zIHNjYW4KIAkJICovCi0JCXNjc2lfZGVzdHJveV9zZGV2KHNkZXYpOworCQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzA4LDcgKzE3MDAsNyBAQAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgewogCQlpZiAoIXNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpIHx8CiAJCSAgICBzY3NpX3N5c2ZzX2FkZF9zZGV2KHNkZXYpICE9IDApCi0JCQlzY3NpX2Rlc3Ryb3lfc2RldihzZGV2KTsKKwkJCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCX0KIH0KIApAQCAtMTk0MSw3ICsxOTMzLDcgQEAKIHsKIAlCVUdfT04oc2Rldi0+aWQgIT0gc2Rldi0+aG9zdC0+dGhpc19pZCk7CiAKLQlzY3NpX2Rlc3Ryb3lfc2RldihzZGV2KTsKKwlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9mcmVlX2hvc3RfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZmRlNTQ1My4uMzkyZDhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC04NTQsODUgKzg1NCw3MyBAQAogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogCWVycm9yID0gZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCWlmIChlcnJvcikgewotCQlwdXRfZGV2aWNlKHNkZXYtPnNkZXZfZ2VuZGV2LnBhcmVudCk7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0X3JlbW92ZTsKIAl9CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwotCQlnb3RvIGNsZWFuX2RldmljZTsKKwkJZGV2aWNlX2RlbCgmc2Rldi0+c2Rldl9nZW5kZXYpOworCQlnb3RvIG91dF9yZW1vdmU7CiAJfQotCi0JLyogdGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhlIHNkZXZfZGV2OyB0aGlzIGlzCi0JICogcmVsZWFzZWQgYnkgdGhlIHNkZXZfY2xhc3MgLnJlbGVhc2UgKi8KLQlnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJdHJhbnNwb3J0X2FkZF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlzZGV2LT5pc192aXNpYmxlID0gMTsKIAogCS8qIGNyZWF0ZSBxdWV1ZSBmaWxlcywgd2hpY2ggbWF5IGJlIHdyaXRhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGhvc3QgKi8KIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPmNoYW5nZV9xdWV1ZV9kZXB0aCkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX2RlcHRoX3J3KTsKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX2RlcHRoKTsKLQlpZiAoZXJyb3IpIHsKLQkJX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbW92ZTsKKwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y2hhbmdlX3F1ZXVlX3R5cGUpCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJnNkZXZfYXR0cl9xdWV1ZV90eXBlX3J3KTsKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX3R5cGUpOwotCWlmIChlcnJvcikgewotCQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmVtb3ZlOwogCiAJZXJyb3IgPSBic2dfcmVnaXN0ZXJfcXVldWUocnEsICZzZGV2LT5zZGV2X2dlbmRldiwgTlVMTCwgTlVMTCk7CiAKIAlpZiAoZXJyb3IpCisJCS8qIHdlJ3JlIHRyZWF0aW5nIGVycm9yIG9uIGJzZyByZWdpc3RlciBhcyBub24tZmF0YWwsCisJCSAqIHNvIHByZXRlbmQgbm90aGluZyB3ZW50IHdyb25nICovCiAJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKIAkJCSAgICAiRmFpbGVkIHRvIHJlZ2lzdGVyIGJzZyBxdWV1ZSwgZXJybm89JWRcbiIsIGVycm9yKTsKIAotCS8qIHdlJ3JlIHRyZWF0aW5nIGVycm9yIG9uIGJzZyByZWdpc3RlciBhcyBub24tZmF0YWwsIHNvIHByZXRlbmQKLQkgKiBub3RoaW5nIHdlbnQgd3JvbmcgKi8KLQllcnJvciA9IDA7Ci0KIAkvKiBhZGQgYWRkaXRpb25hbCBob3N0IHNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNkZXZfYXR0cnMpIHsKIAkJZm9yIChpID0gMDsgc2Rldi0+aG9zdC0+aG9zdHQtPnNkZXZfYXR0cnNbaV07IGkrKykgewogCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LAogCQkJCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2Rldl9hdHRyc1tpXSk7Ci0JCQlpZiAoZXJyb3IpIHsKLQkJCQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF9yZW1vdmU7CiAJCX0KIAl9CiAKLQl0cmFuc3BvcnRfYWRkX2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotIG91dDoKKwlyZXR1cm4gMDsKKworIG91dF9yZW1vdmU6CisJX19zY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CiAJcmV0dXJuIGVycm9yOwogCi0gY2xlYW5fZGV2aWNlOgotCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0NBTkNFTCk7Ci0KLQlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCi0JcmV0dXJuIGVycm9yOwogfQogCiB2b2lkIF9fc2NzaV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2Rldi0+c2Rldl9nZW5kZXY7CiAKLQlpZiAoc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQ0FOQ0VMKSAhPSAwKQotCQlyZXR1cm47CisJaWYgKHNkZXYtPmlzX3Zpc2libGUpIHsKKwkJaWYgKHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0NBTkNFTCkgIT0gMCkKKwkJCXJldHVybjsKIAotCWJzZ191bnJlZ2lzdGVyX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCWRldmljZV91bnJlZ2lzdGVyKCZzZGV2LT5zZGV2X2Rldik7Ci0JdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKLQlkZXZpY2VfZGVsKGRldik7CisJCWJzZ191bnJlZ2lzdGVyX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQlkZXZpY2VfdW5yZWdpc3Rlcigmc2Rldi0+c2Rldl9kZXYpOworCQl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOworCQlkZXZpY2VfZGVsKGRldik7CisJfSBlbHNlCisJCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZGV2KTsKIAlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CkBAIC0xMDY1LDcgKzEwNTMsNyBAQAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJnNkZXYtPnNkZXZfZGV2KTsKLQlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSAmc2Rldi0+c2Rldl9nZW5kZXY7CisJc2Rldi0+c2Rldl9kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPnNkZXZfZGV2LmNsYXNzID0gJnNkZXZfY2xhc3M7CiAJZGV2X3NldF9uYW1lKCZzZGV2LT5zZGV2X2RldiwgIiVkOiVkOiVkOiVkIiwKIAkJICAgICBzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggYTY3ZmVkMS4uYzZmNzBkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM2NTYsNiArMzY1Niw3IEBACiBmYWlsX2hvc3RfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzc0MSw2ICszNzQyLDcgQEAKIGZhaWxfcnBvcnRfbXNnOgogCS8qIHJldHVybiB0aGUgZXJybm8gZmFpbHVyZSBjb2RlIGFzIHRoZSBvbmx5IHN0YXR1cyAqLwogCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmV0OwogCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAlmY19ic2dfam9iZG9uZShqb2IpOwpAQCAtMzc5Nyw2ICszNzk5LDcgQEAKIAkJLyogY2hlY2sgaWYgd2UgaGF2ZSB0aGUgbXNnY29kZSB2YWx1ZSBhdCBsZWFzdCAqLwogCQlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8IHNpemVvZih1aW50MzJfdCkpIHsKIAkJCUJVR19PTihqb2ItPnJlcGx5X2xlbiA8IHNpemVvZih1aW50MzJfdCkpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9NU0c7CiAJCQlqb2ItPnJlcGx5X2xlbiA9IHNpemVvZih1aW50MzJfdCk7CiAJCQlmY19ic2dfam9iZG9uZShqb2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDg4ZGE5NzcuLjg0YmU2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQkgIF9fZnVuY19fLCB2aXJ0LCBwaHlzLCBiZTMyX3RvX2NwdShzZHQtPnJlZl90YWcpLAogCQkgIGJlMTZfdG9fY3B1KHNkdC0+YXBwX3RhZykpOwogCi0JcmV0dXJuIC1FSU87CisJcmV0dXJuIC1FSUxTRVE7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggYjFhZTc3NC4uNzM3YjRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTA4OSw3ICsxMDg5LDcgQEAKIAlpZiAoIXVwLT5wb3J0LmlvYmFzZSAmJiAhdXAtPnBvcnQubWFwYmFzZSAmJiAhdXAtPnBvcnQubWVtYmFzZSkKIAkJcmV0dXJuOwogCi0JREVCVUdfQVVUT0NPTkYoInR0eVMlZDogYXV0b2NvbmYgKDB4JTA0eCwgMHglcCk6ICIsCisJREVCVUdfQVVUT0NPTkYoInR0eVMlZDogYXV0b2NvbmYgKDB4JTA0bHgsIDB4JXApOiAiLAogCQkgICAgICAgc2VyaWFsX2luZGV4KCZ1cC0+cG9ydCksIHVwLT5wb3J0LmlvYmFzZSwgdXAtPnBvcnQubWVtYmFzZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggZTcxMDhlNy4uYjI4YWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xNTYxLDExICsxNTYxLDE2IEBACiAJcGJuX2V4YXJfWFIxN0MxNTIsCiAJcGJuX2V4YXJfWFIxN0MxNTQsCiAJcGJuX2V4YXJfWFIxN0MxNTgsCisJcGJuX2V4YXJfaWJtX3NhdHVybiwKIAlwYm5fcGFzZW1pXzE2ODJNLAogCXBibl9uaTg0MzBfMiwKIAlwYm5fbmk4NDMwXzQsCiAJcGJuX25pODQzMF84LAogCXBibl9uaTg0MzBfMTYsCisJcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwLAogfTsKIAogLyoKQEAgLTIxNDYsNiArMjE1MSwxMyBAQAogCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAogCQkudWFydF9vZmZzZXQJPSAweDIwMCwKIAl9LAorCVtwYm5fZXhhcl9pYm1fc2F0dXJuXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJfSwKKwogCS8qCiAJICogUEEgU2VtaSBQV1JmaWNpZW50IFBBNlQtMTY4Mk0gb24tY2hpcCBVQVJUCiAJICovCkBAIC0yMTg1LDYgKzIxOTcsMzcgQEAKIAkJLnVhcnRfb2Zmc2V0CT0gMHgxMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4ODAwLAogCX0sCisJLyoKKwkgKiBBRERJLURBVEEgR21iSCBQQ0ktRXhwcmVzcyBjb21tdW5pY2F0aW9uIGNhcmRzIDxpbmZvQGFkZGktZGF0YS5jb20+CisJICovCisJW3Bibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDEsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAyLAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gNCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDgsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvZnRtb2RlbV9ibGFja2xpc3RbXSA9IHsKQEAgLTIzNDAsNyArMjM4Myw3IEBACiAJCQlicmVhazsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19QQ0kKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICV4LCBpcnEgJWQsIHR5cGUgJWRcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJTZXR1cCBQQ0kgcG9ydDogcG9ydCAlbHgsIGlycSAlZCwgdHlwZSAlZFxuIiwKIAkJICAgICAgIHNlcmlhbF9wb3J0LmlvYmFzZSwgc2VyaWFsX3BvcnQuaXJxLCBzZXJpYWxfcG9ydC5pb3R5cGUpOwogI2VuZGlmCiAKQEAgLTI2NDksNiArMjY5Miw5IEBACiAJCVBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNILAogCQlQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSwgMCwgMCwKIAkJcGJuX2IwXzhfMTg0MzIwMF8yMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfRVhBUiwgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyLAorCQlQQ0lfVkVORE9SX0lEX0lCTSwgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVCwKKwkJMCwgMCwgcGJuX2V4YXJfaWJtX3NhdHVybiB9LAogCiAJewlQQ0lfVkVORE9SX0lEX1NFQUxFVkVMLCBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1U1MzAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCkBAIC0zMDkzLDYgKzMxMzksMTIgQEAKIAl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCisJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUVFJPX0IsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCisJCXBibl9iMF9idF8yXzExNTIwMCB9LAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19BLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCQlwYm5fYjBfYnRfNF80NjA4MDAgfSwKQEAgLTM1NTYsNiArMzYwOCwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDM1NTFjNWMuLjlkOTQ4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogCXZvaWQgKmRhdGE7CiAJaW50IHJldDsKIAotCUJVSUxEX0JVR19PTighaXNfcG93ZXJfb2ZfMihBVE1FTF9TRVJJQUxfUklOR1NJWkUpKTsKKwlCVUlMRF9CVUdfT04oQVRNRUxfU0VSSUFMX1JJTkdTSVpFICYgKEFUTUVMX1NFUklBTF9SSU5HU0laRSAtIDEpKTsKIAogCXBvcnQgPSAmYXRtZWxfcG9ydHNbcGRldi0+aWRdOwogCXBvcnQtPmJhY2t1cF9pbXIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmNtNjN4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwppbmRleCBiZWRkYWE2Li4zN2FkMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJICogaGlnaGVyIHRoYW4gZmlmbyBzaXplIGFueXdheSBzaW5jZSB3ZSdyZSBtdWNoIGZhc3RlciB0aGFuCiAJICogc2VyaWFsIHBvcnQgKi8KIAltYXhfY291bnQgPSAzMjsKLQl0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CiAJZG8gewogCQl1bnNpZ25lZCBpbnQgaWVzdGF0LCBjLCBjc3RhdDsKIAkJY2hhciBmbGFnOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKIAlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQogCQlnb3RvIHR4cV9lbXB0eTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCBkN2JjZDA3Li43Y2U5ZTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChzZXItPmlycSAhPSBwb3J0LT5pcnEpIHx8Ci0JICAgIChzZXItPmlvX3R5cGUgIT0gU0VSSUFMX0lPX01FTSkgfHwKKwkgICAgKHNlci0+aW9fdHlwZSAhPSBVUElPX01FTSkgfHwKIAkgICAgKHNlci0+YmF1ZF9iYXNlICE9IHBvcnQtPnVhcnRjbGspICB8fAogCSAgICAoc2VyLT5pb21lbV9iYXNlICE9ICh2b2lkICopcG9ydC0+bWFwYmFzZSkgfHwKIAkgICAgKHNlci0+aHViNiAhPSAwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKaW5kZXggMDI0MDZiYS4uY2RmMTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBvZl9wbGF0Zm9ybV9zZXJpYWxfdGFibGVbXSA9IHsKIAl7IC50eXBlID0gInNlcmlhbCIsIC5jb21wYXRpYmxlID0gIm5zODI1MCIsICAgLmRhdGEgPSAodm9pZCAqKVBPUlRfODI1MCwgfSwKIAl7IC50eXBlID0gInNlcmlhbCIsIC5jb21wYXRpYmxlID0gIm5zMTY0NTAiLCAgLmRhdGEgPSAodm9pZCAqKVBPUlRfMTY0NTAsIH0sCisJeyAudHlwZSA9ICJzZXJpYWwiLCAuY29tcGF0aWJsZSA9ICJuczE2NTUwYSIsIC5kYXRhID0gKHZvaWQgKilQT1JUXzE2NTUwQSwgfSwKIAl7IC50eXBlID0gInNlcmlhbCIsIC5jb21wYXRpYmxlID0gIm5zMTY1NTAiLCAgLmRhdGEgPSAodm9pZCAqKVBPUlRfMTY1NTAsIH0sCiAJeyAudHlwZSA9ICJzZXJpYWwiLCAuY29tcGF0aWJsZSA9ICJuczE2NzUwIiwgIC5kYXRhID0gKHZvaWQgKilQT1JUXzE2NzUwLCB9LAogCXsgLnR5cGUgPSAic2VyaWFsIiwgLmNvbXBhdGlibGUgPSAibnMxNjg1MCIsICAuZGF0YSA9ICh2b2lkICopUE9SVF8xNjg1MCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggZmY0NjE3ZS4uZmM0MTNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTU0LDE0ICs1NCw2IEBACiAKICNpbmNsdWRlICI4MjUwLmgiCiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJzZXJpYWxfY3MuYyAxLjEzNCAyMDAyLzA1LzA0IDA1OjQ4OjUzIChEYXZpZCBIaW5kcykiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMTIxLDI0ICsxMTMsMjAgQEAKIHN0YXRpYyBpbnQgcXVpcmtfcG9zdF9pYm0oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJY29uZl9yZWdfdCByZWcgPSB7IDAsIENTX1JFQUQsIDB4ODAwLCAwIH07Ci0JaW50IGxhc3RfcmV0LCBsYXN0X2ZuOworCWludCByZXQ7CiAKLQlsYXN0X3JldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJbGFzdF9mbiA9IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcjsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQorCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKwogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuVmFsdWUgPSByZWcuVmFsdWUgfCAxOwotCWxhc3RfcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwotCWlmIChsYXN0X3JldCkgewotCQlsYXN0X2ZuID0gQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9CisJcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCXJldHVybiAwOwogCi0gY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyBmYWlsZWQ6CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTI4Myw3ICsyNzEsNyBAQAogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7CiAJaW50IGk7CiAKLQlERUJVRygwLCAic2VyaWFsX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgInNlcmlhbF9yZWxlYXNlXG4iKTsKIAogCS8qCiAJICogUmVjaGVjayB0byBzZWUgaWYgdGhlIGRldmljZSBpcyBzdGlsbCBjb25maWd1cmVkLgpAQCAtMzM0LDcgKzMyMiw3IEBACiB7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvOwogCi0JREVCVUcoMCwgInNlcmlhbF9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAic2VyaWFsX2F0dGFjaCgpXG4iKTsKIAogCS8qIENyZWF0ZSBuZXcgc2VyaWFsIGRldmljZSAqLwogCWluZm8gPSBremFsbG9jKHNpemVvZiAoKmluZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTM0Niw3ICszMzQsNiBAQAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJbGluay0+aW8uTnVtUG9ydHMxID0gODsKIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWlmIChkb19zb3VuZCkgewogCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKQEAgLTM3MCw3ICszNTcsNyBAQAogewogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7CiAKLQlERUJVRygwLCAic2VyaWFsX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAic2VyaWFsX2RldGFjaFxuIik7CiAKIAkvKgogCSAqIEVuc3VyZSBhbnkgb3V0c3RhbmRpbmcgc2NoZWR1bGVkIHRhc2tzIGFyZSBjb21wbGV0ZWQuCkBAIC0zOTksNyArMzg2LDcgQEAKIAlwb3J0LmlycSA9IGlycTsKIAlwb3J0LmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX1NIQVJFX0lSUTsKIAlwb3J0LnVhcnRjbGsgPSAxODQzMjAwOwotCXBvcnQuZGV2ID0gJmhhbmRsZV90b19kZXYoaGFuZGxlKTsKKwlwb3J0LmRldiA9ICZoYW5kbGUtPmRldjsKIAlpZiAoYnVnZ3lfdWFydCkKIAkJcG9ydC5mbGFncyB8PSBVUEZfQlVHR1lfVUFSVDsKIApAQCAtNDI2LDIxICs0MTMsNiBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludAotZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqIHR1cGxlLCBjaXNwYXJzZV90ICogcGFyc2UpCi17Ci0JaW50IGk7Ci0JaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIGk7Ci0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gaTsKLQlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiBzdGF0aWMgaW50IHNpbXBsZV9jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAogCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAogCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCkBAIC01MjIsMTUgKzQ5NCwxMyBAQAogCiAJcHJpbnRrKEtFUk5fTk9USUNFCiAJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwotCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJcmV0dXJuIC0xOwogCiBmb3VuZF9wb3J0OgogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKKwlpZiAoaSAhPSAwKQogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwotCX0KKwogCWlmIChpbmZvLT5tdWx0aSAmJiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF8zQ09NKSkKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCAmPSB+KDB4MDgpOwogCkBAIC01NDEsMTAgKzUxMSw4IEBACiAJCWluZm8tPnF1aXJrLT5jb25maWcobGluayk7CiAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGkgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIC0xOwotCX0KIAlyZXR1cm4gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIH0KIApAQCAtNjEzLDcgKzU4MSw2IEBACiAJCS8qIEZJWE1FOiBjb21tZW50IGRvZXMgbm90IGZpdCwgZXJyb3IgaGFuZGxpbmcgZG9lcyBub3QgZml0ICovCiAJCXByaW50ayhLRVJOX05PVElDRQogCQkgICAgICAgInNlcmlhbF9jczogbm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQsIGdpdmluZyB1cFxuIik7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIApAQCAtNjI0LDEwICs1OTEsOCBAQAogCQlpbmZvLT5xdWlyay0+Y29uZmlnKGxpbmspOwogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IDApIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOworCWlmIChpICE9IDApCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCS8qIFRoZSBPeGZvcmQgU2VtaWNvbmR1Y3RvciBPWENGOTUwIGNhcmRzIGFyZSBpbiBmYWN0IHNpbmdsZS1wb3J0OgogCSAqIDggcmVnaXN0ZXJzIGFyZSBmb3IgdGhlIFVBUlQsIHRoZSBvdGhlcnMgYXJlIGV4dHJhIHJlZ2lzdGVycy4KQEAgLTY2NSw2ICs2MzAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXJpYWxfY2hlY2tfZm9yX211bHRpKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCSAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gcF9kZXYtPnByaXY7CisKKwlpZiAoKGNmLT5pby5ud2luID09IDEpICYmIChjZi0+aW8ud2luWzBdLmxlbiAlIDggPT0gMCkpCisJCWluZm8tPm11bHRpID0gY2YtPmlvLndpblswXS5sZW4gPj4gMzsKKworCWlmICgoY2YtPmlvLm53aW4gPT0gMikgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmCisJCShjZi0+aW8ud2luWzFdLmxlbiA9PSA4KSkKKwkJaW5mby0+bXVsdGkgPSAyOworCisJcmV0dXJuIDA7IC8qIGJyZWFrICovCit9CisKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBzZXJpYWxfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CkBAIC02NzYsNDYgKzY2MCwxNCBAQAogc3RhdGljIGludCBzZXJpYWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwotCXN0cnVjdCBzZXJpYWxfY2ZnX21lbSAqY2ZnX21lbTsKLQl0dXBsZV90ICp0dXBsZTsKLQl1X2NoYXIgKmJ1ZjsKLQljaXNwYXJzZV90ICpwYXJzZTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZjsKLQlpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm47CisJaW50IGk7CiAKLQlERUJVRygwLCAic2VyaWFsX2NvbmZpZygweCVwKVxuIiwgbGluayk7Ci0KLQljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjZmdfbWVtKQotCQlnb3RvIGZhaWxlZDsKLQotCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOwotCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OwotCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKLQotCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOwotCi0JLyogR2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KLQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0JaWYgKGxhc3RfcmV0ICE9IDApIHsKLQkJbGFzdF9mbiA9IFBhcnNlVHVwbGU7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJzZXJpYWxfY29uZmlnXG4iKTsKIAogCS8qIElzIHRoaXMgYSBjb21wbGlhbnQgbXVsdGlmdW5jdGlvbiBjYXJkPyAqLwotCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwotCXR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOwotCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gMCk7CisJaW5mby0+bXVsdGkgPSAobGluay0+c29ja2V0LT5mdW5jdGlvbnMgPiAxKTsKIAogCS8qIElzIHRoaXMgYSBtdWx0aXBvcnQgY2FyZD8gKi8KLQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKIAlpbmZvLT5tYW5maWQgPSBsaW5rLT5tYW5mX2lkOwogCWluZm8tPnByb2RpZCA9IGxpbmstPmNhcmRfaWQ7CiAKQEAgLTczMCwyMCArNjgyLDExIEBACiAKIAkvKiBBbm90aGVyIGNoZWNrIGZvciBkdWFsLXNlcmlhbCBjYXJkczogbG9vayBmb3IgZWl0aGVyIHNlcmlhbCBvcgogCSAgIG11bHRpZnVuY3Rpb24gY2FyZHMgdGhhdCBhc2sgZm9yIGFwcHJvcHJpYXRlIElPIHBvcnQgcmFuZ2VzICovCi0JdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9GVU5DSUQ7CiAJaWYgKChpbmZvLT5tdWx0aSA9PSAwKSAmJgogCSAgICAobGluay0+aGFzX2Z1bmNfaWQpICYmCiAJICAgICgobGluay0+ZnVuY19pZCA9PSBDSVNUUExfRlVOQ0lEX01VTFRJKSB8fAotCSAgICAgKGxpbmstPmZ1bmNfaWQgPT0gQ0lTVFBMX0ZVTkNJRF9TRVJJQUwpKSkgewotCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JCWlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IDApIHsKLQkJCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuICUgOCA9PSAwKSkKLQkJCQlpbmZvLT5tdWx0aSA9IGNmLT5pby53aW5bMF0ubGVuID4+IDM7Ci0JCQlpZiAoKGNmLT5pby5ud2luID09IDIpICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJgotCQkJICAgIChjZi0+aW8ud2luWzFdLmxlbiA9PSA4KSkKLQkJCQlpbmZvLT5tdWx0aSA9IDI7Ci0JCX0KLQl9CisJICAgICAobGluay0+ZnVuY19pZCA9PSBDSVNUUExfRlVOQ0lEX1NFUklBTCkpKQorCQlwY21jaWFfbG9vcF9jb25maWcobGluaywgc2VyaWFsX2NoZWNrX2Zvcl9tdWx0aSwgaW5mbyk7CiAKIAkvKgogCSAqIEFwcGx5IGFueSBtdWx0aS1wb3J0IHF1aXJrLgpAQCAtNzY4LDE0ICs3MTEsMTAgQEAKIAkJCWdvdG8gZmFpbGVkOwogCiAJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZVswXTsKLQlrZnJlZShjZmdfbWVtKTsKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAlzZXJpYWxfcmVtb3ZlKGxpbmspOwotCWtmcmVlKGNmZ19tZW0pOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC04NzksMTAgKzgxOCwxMCBAQAogCVBDTUNJQV9NRkNfREVWSUNFX0NJU19NQU5GX0NBUkQoMSwgMHgwMTc1LCAweDAwMDAsICJjaXMvRFA4MzkwMy5jaXMiKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9DSVNfTUFORl9DQVJEKDEsIDB4MDEwMSwgMHgwMDM1LCAiY2lzLzNDWEVNNTU2LmNpcyIpLAogCVBDTUNJQV9NRkNfREVWSUNFX0NJU19NQU5GX0NBUkQoMSwgMHgwMTAxLCAweDAwM2QsICJjaXMvM0NYRU01NTYuY2lzIiksCi0JUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJTaWVycmEgV2lyZWxlc3MiLCAiQUM4NTAiLCAweGQ4NWY2MjA2LCAweDQyYTJjMDE4LCAiU1dfOHh4X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBXaXJlbGVzcyBBQzg1MCAzRyBOZXR3b3JrIEFkYXB0ZXIgUjEgKi8KLQlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTkyLCAweDA3MTAsICJTV183eHhfU0VSLmNpcyIpLAkvKiBTaWVycmEgV2lyZWxlc3MgQUM3MTAvQUM3NTAgR1BSUyBOZXR3b3JrIEFkYXB0ZXIgUjEgKi8KLQlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTkyLCAweGE1NTUsICJTV181NTVfU0VSLmNpcyIpLCAgLyogU2llcnJhIEFpcmNhcmQgNTU1IENETUEgMXhydHQgTW9kZW0gLS0gcHJlIHVwZGF0ZSAqLwotCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAxM2YsIDB4YTU1NSwgIlNXXzU1NV9TRVIuY2lzIiksICAvKiBTaWVycmEgQWlyY2FyZCA1NTUgQ0RNQSAxeHJ0dCBNb2RlbSAtLSBwb3N0IHVwZGF0ZSAqLworCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiU2llcnJhIFdpcmVsZXNzIiwgIkFDODUwIiwgMHhkODVmNjIwNiwgMHg0MmEyYzAxOCwgImNpcy9TV184eHhfU0VSLmNpcyIpLCAvKiBTaWVycmEgV2lyZWxlc3MgQUM4NTAgM0cgTmV0d29yayBBZGFwdGVyIFIxICovCisJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJTaWVycmEgV2lyZWxlc3MiLCAiQUM3MTAvQUM3NTAiLCAweGQ4NWY2MjA2LCAweDc2MWIxMWUwLCAiY2lzL1NXXzd4eF9TRVIuY2lzIiksICAvKiBTaWVycmEgV2lyZWxlc3MgQUM3MTAvQUM3NTAgR1BSUyBOZXR3b3JrIEFkYXB0ZXIgUjEgKi8KKwlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTkyLCAweGE1NTUsICJjaXMvU1dfNTU1X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBBaXJjYXJkIDU1NSBDRE1BIDF4cnR0IE1vZGVtIC0tIHByZSB1cGRhdGUgKi8KKwlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHgwMTNmLCAweGE1NTUsICJjaXMvU1dfNTU1X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBBaXJjYXJkIDU1NSBDRE1BIDF4cnR0IE1vZGVtIC0tIHBvc3QgdXBkYXRlICovCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJNdWx0aVRlY2giLCAiUENNQ0lBIDU2SyBEYXRhRmF4IiwgMHg4NDIwNDdlZSwgMHhjMmVmY2YwMywgImNpcy9NVDU2MzRaTFguY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1Qi0yIiwgMHg5NjkxM2E4NSwgMHgyN2FiNTQzNywgImNpcy9DT01wYWQyLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiQURWQU5URUNIIiwgIkNPTXBhZC0zMi84NUItNCIsIDB4OTY5MTNhODUsIDB4Y2VjOGYxMDIsICJjaXMvQ09NcGFkNC5jaXMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggODUxMTlmYi4uNjQ5OGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTExNDMsNyArMTE0Myw3IEBACiAJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKIAkJY3B1X3JlbGF4KCk7CiAKLQlpZiAoc2NpX3BvcnQtPmRpc2FibGUpOworCWlmIChzY2lfcG9ydC0+ZGlzYWJsZSkKIAkJc2NpX3BvcnQtPmRpc2FibGUocG9ydCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYwppbmRleCBhMmQ0YTE5Li5lZDdkOTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5jCkBAIC01MywyMCArNTMsMjEgQEAKIEVYUE9SVF9TWU1CT0woc3Vuc2VyaWFsX3VucmVnaXN0ZXJfbWlub3JzKTsKIAogaW50IHN1bnNlcmlhbF9jb25zb2xlX21hdGNoKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCi0JCQkgICAgc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBsaW5lKQorCQkJICAgIHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBpbnQgbGluZSwgYm9vbCBpZ25vcmVfbGluZSkKIHsKLQlpbnQgb2ZmOwotCiAJaWYgKCFjb24gfHwgb2ZfY29uc29sZV9kZXZpY2UgIT0gZHApCiAJCXJldHVybiAwOwogCi0Jb2ZmID0gMDsKLQlpZiAob2ZfY29uc29sZV9vcHRpb25zICYmCi0JICAgICpvZl9jb25zb2xlX29wdGlvbnMgPT0gJ2InKQotCQlvZmYgPSAxOworCWlmICghaWdub3JlX2xpbmUpIHsKKwkJaW50IG9mZiA9IDA7CiAKLQlpZiAoKGxpbmUgJiAxKSAhPSBvZmYpCi0JCXJldHVybiAwOworCQlpZiAob2ZfY29uc29sZV9vcHRpb25zICYmCisJCSAgICAqb2ZfY29uc29sZV9vcHRpb25zID09ICdiJykKKwkJCW9mZiA9IDE7CisKKwkJaWYgKChsaW5lICYgMSkgIT0gb2ZmKQorCQkJcmV0dXJuIDA7CisJfQogCiAJY29uLT5pbmRleCA9IGxpbmU7CiAJZHJ2LT5jb25zID0gY29uOwpAQCAtNzYsMjMgKzc3LDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHN1bnNlcmlhbF9jb25zb2xlX21hdGNoKTsKIAotdm9pZAotc3Vuc2VyaWFsX2NvbnNvbGVfdGVybWlvcyhzdHJ1Y3QgY29uc29sZSAqY29uKQordm9pZCBzdW5zZXJpYWxfY29uc29sZV90ZXJtaW9zKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdWFydF9kcCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCWNvbnN0IGNoYXIgKm9kLCAqbW9kZSwgKnM7CisJY29uc3QgY2hhciAqbW9kZSwgKnM7CiAJY2hhciBtb2RlX3Byb3BbXSA9ICJ0dHlYLW1vZGUiOwogCWludCBiYXVkLCBiaXRzLCBzdG9wLCBjZmxhZzsKIAljaGFyIHBhcml0eTsKIAotCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9vcHRpb25zIik7Ci0Jb2QgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJvdXRwdXQtZGV2aWNlIiwgTlVMTCk7Ci0JaWYgKCFzdHJjbXAob2QsICJyc2MiKSkgewotCQltb2RlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX2NvbnNvbGVfZGV2aWNlLAorCWlmICghc3RyY21wKHVhcnRfZHAtPm5hbWUsICJyc2MiKSB8fAorCSAgICAhc3RyY21wKHVhcnRfZHAtPm5hbWUsICJyc2MtY29uc29sZSIpIHx8CisJICAgICFzdHJjbXAodWFydF9kcC0+bmFtZSwgInJzYy1jb250cm9sIikpIHsKKwkJbW9kZSA9IG9mX2dldF9wcm9wZXJ0eSh1YXJ0X2RwLAogCQkJCSAgICAgICAic3NwLWNvbnNvbGUtbW9kZXMiLCBOVUxMKTsKIAkJaWYgKCFtb2RlKQogCQkJbW9kZSA9ICIxMTUyMDAsOCxuLDEsLSI7CisJfSBlbHNlIGlmICghc3RyY21wKHVhcnRfZHAtPm5hbWUsICJsb20tY29uc29sZSIpKSB7CisJCW1vZGUgPSAiOTYwMCw4LG4sMSwtIjsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwogCQljaGFyIGM7CiAKIAkJYyA9ICdhJzsKQEAgLTEwMSw2ICsxMDMsNyBAQAogCiAJCW1vZGVfcHJvcFszXSA9IGM7CiAKKwkJZHAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL29wdGlvbnMiKTsKIAkJbW9kZSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgbW9kZV9wcm9wLCBOVUxMKTsKIAkJaWYgKCFtb2RlKQogCQkJbW9kZSA9ICI5NjAwLDgsbiwxLC0iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5oIGIvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5oCmluZGV4IDA0MjY2OGEuLmRiMjA1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmgKQEAgLTI2LDcgKzI2LDggQEAKIGV4dGVybiB2b2lkIHN1bnNlcmlhbF91bnJlZ2lzdGVyX21pbm9ycyhzdHJ1Y3QgdWFydF9kcml2ZXIgKiwgaW50KTsKIAogZXh0ZXJuIGludCBzdW5zZXJpYWxfY29uc29sZV9tYXRjaChzdHJ1Y3QgY29uc29sZSAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKiwKLQkJCQkgICBzdHJ1Y3QgdWFydF9kcml2ZXIgKiwgaW50KTsKLWV4dGVybiB2b2lkIHN1bnNlcmlhbF9jb25zb2xlX3Rlcm1pb3Moc3RydWN0IGNvbnNvbGUgKik7CisJCQkJICAgc3RydWN0IHVhcnRfZHJpdmVyICosIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBzdW5zZXJpYWxfY29uc29sZV90ZXJtaW9zKHN0cnVjdCBjb25zb2xlICosCisJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICopOwogCiAjZW5kaWYgLyogIShfU0VSSUFMX1NVTl9IKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKaW5kZXggZDU0ODY1Mi4uZDE0Y2NhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCkBAIC01NjYsNyArNTY2LDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25fcmVhZF9wYWdlOwogCiAJc3Vuc2VyaWFsX2NvbnNvbGVfbWF0Y2goJnN1bmh2X2NvbnNvbGUsIG9wLT5ub2RlLAotCQkJCSZzdW5odl9yZWcsIHBvcnQtPmxpbmUpOworCQkJCSZzdW5odl9yZWcsIHBvcnQtPmxpbmUsIGZhbHNlKTsKIAogCWVyciA9IHVhcnRfYWRkX29uZV9wb3J0KCZzdW5odl9yZWcsIHBvcnQpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCmluZGV4IGQxYWQzNDEuLmQ1MTRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCkBAIC04ODMsNyArODgzLDcgQEAKIAlwcmludGsoIkNvbnNvbGU6IHR0eVMlZCAoU0FCODI1MzIpXG4iLAogCSAgICAgICAoc3Vuc2FiX3JlZy5taW5vciAtIDY0KSArIGNvbi0+aW5kZXgpOwogCi0Jc3Vuc2VyaWFsX2NvbnNvbGVfdGVybWlvcyhjb24pOworCXN1bnNlcmlhbF9jb25zb2xlX3Rlcm1pb3MoY29uLCB0b19vZl9kZXZpY2UodXAtPnBvcnQuZGV2KS0+bm9kZSk7CiAKIAlzd2l0Y2ggKGNvbi0+Y2ZsYWcgJiBDQkFVRCkgewogCWNhc2UgQjE1MDogYmF1ZCA9IDE1MDsgYnJlYWs7CkBAIC0xMDI3LDEwICsxMDI3LDEyIEBACiAJCWdvdG8gb3V0MTsKIAogCXN1bnNlcmlhbF9jb25zb2xlX21hdGNoKFNVTlNBQl9DT05TT0xFKCksIG9wLT5ub2RlLAotCQkJCSZzdW5zYWJfcmVnLCB1cFswXS5wb3J0LmxpbmUpOworCQkJCSZzdW5zYWJfcmVnLCB1cFswXS5wb3J0LmxpbmUsCisJCQkJZmFsc2UpOwogCiAJc3Vuc2VyaWFsX2NvbnNvbGVfbWF0Y2goU1VOU0FCX0NPTlNPTEUoKSwgb3AtPm5vZGUsCi0JCQkJJnN1bnNhYl9yZWcsIHVwWzFdLnBvcnQubGluZSk7CisJCQkJJnN1bnNhYl9yZWcsIHVwWzFdLnBvcnQubGluZSwKKwkJCQlmYWxzZSk7CiAKIAllcnIgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc3Vuc2FiX3JlZywgJnVwWzBdLnBvcnQpOwogCWlmIChlcnIpCkBAIC0xMTE2LDcgKzExMTgsNiBAQAogCQlpZiAoIXN1bnNhYl9wb3J0cykKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXN1bnNhYl9yZWcuY29ucyA9IFNVTlNBQl9DT05TT0xFKCk7CiAJCWVyciA9IHN1bnNlcmlhbF9yZWdpc3Rlcl9taW5vcnMoJnN1bnNhYl9yZWcsIG51bV9jaGFubmVscyk7CiAJCWlmIChlcnIpIHsKIAkJCWtmcmVlKHN1bnNhYl9wb3J0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwppbmRleCA2OGQyNjJiLi4xNzBkM2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKQEAgLTEzMjksMTEgKzEzMjksOSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzdW5zdV9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKIHsKKwlzdGF0aWMgc3RydWN0IGt0ZXJtaW9zIGR1bW15OworCXN0cnVjdCBrdGVybWlvcyB0ZXJtaW9zOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7Ci0JaW50IGJhdWQgPSA5NjAwOwotCWludCBiaXRzID0gODsKLQlpbnQgcGFyaXR5ID0gJ24nOwotCWludCBmbG93ID0gJ24nOwogCiAJcHJpbnRrKCJDb25zb2xlOiB0dHlTJWQgKFNVKVxuIiwKIAkgICAgICAgKHN1bnN1X3JlZy5taW5vciAtIDY0KSArIGNvLT5pbmRleCk7CkBAIC0xMzUyLDEwICsxMzUwLDE1IEBACiAJICovCiAJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCi0JaWYgKG9wdGlvbnMpCi0JCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKKwkvKiBHZXQgZmlybXdhcmUgY29uc29sZSBzZXR0aW5ncy4gICovCisJc3Vuc2VyaWFsX2NvbnNvbGVfdGVybWlvcyhjbywgdG9fb2ZfZGV2aWNlKHBvcnQtPmRldiktPm5vZGUpOwogCi0JcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CisJbWVtc2V0KCZ0ZXJtaW9zLCAwLCBzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSk7CisJdGVybWlvcy5jX2NmbGFnID0gY28tPmNmbGFnOworCXBvcnQtPm1jdHJsIHw9IFRJT0NNX0RUUjsKKwlwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHBvcnQsICZ0ZXJtaW9zLCAmZHVtbXkpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uc29sZSBzdW5zdV9jb25zb2xlID0gewpAQCAtMTQwOSw2ICsxNDEyLDcgQEAKIAlzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJwOwogCWVudW0gc3VfdHlwZSB0eXBlOworCWJvb2wgaWdub3JlX2xpbmU7CiAJaW50IGVycjsKIAogCXR5cGUgPSBzdV9nZXRfdHlwZShkcCk7CkBAIC0xNDY3LDggKzE0NzEsMTQgQEAKIAogCXVwLT5wb3J0Lm9wcyA9ICZzdW5zdV9wb3BzOwogCisJaWdub3JlX2xpbmUgPSBmYWxzZTsKKwlpZiAoIXN0cmNtcChkcC0+bmFtZSwgInJzYy1jb25zb2xlIikgfHwKKwkgICAgIXN0cmNtcChkcC0+bmFtZSwgImxvbS1jb25zb2xlIikpCisJCWlnbm9yZV9saW5lID0gdHJ1ZTsKKwogCXN1bnNlcmlhbF9jb25zb2xlX21hdGNoKFNVTlNVX0NPTlNPTEUoKSwgZHAsCi0JCQkJJnN1bnN1X3JlZywgdXAtPnBvcnQubGluZSk7CisJCQkJJnN1bnN1X3JlZywgdXAtPnBvcnQubGluZSwKKwkJCQlpZ25vcmVfbGluZSk7CiAJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bnN1X3JlZywgJnVwLT5wb3J0KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bm1hcDsKQEAgLTE1MTcsNiArMTUyNywxMCBAQAogCQkubmFtZSA9ICJzZXJpYWwiLAogCQkuY29tcGF0aWJsZSA9ICJzdSIsCiAJfSwKKwl7CisJCS50eXBlID0gInNlcmlhbCIsCisJCS5jb21wYXRpYmxlID0gInN1IiwKKwl9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1X21hdGNoKTsKQEAgLTE1NDgsNiArMTU2MiwxMiBAQAogCQkJCW51bV91YXJ0Kys7CiAJCX0KIAl9CisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCAic2VyaWFsIikgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJzdSIpKSB7CisJCQlpZiAoc3VfZ2V0X3R5cGUoZHApID09IFNVX1BPUlRfUE9SVCkKKwkJCQludW1fdWFydCsrOworCQl9CisJfQogCiAJaWYgKG51bV91YXJ0KSB7CiAJCWVyciA9IHN1bnNlcmlhbF9yZWdpc3Rlcl9taW5vcnMoJnN1bnN1X3JlZywgbnVtX3VhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggZWY2OTNhZS4uMmM3YTY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCSAgICAgICAoc3Vuemlsb2dfcmVnLm1pbm9yIC0gNjQpICsgY29uLT5pbmRleCwgY29uLT5pbmRleCk7CiAKIAkvKiBHZXQgZmlybXdhcmUgY29uc29sZSBzZXR0aW5ncy4gICovCi0Jc3Vuc2VyaWFsX2NvbnNvbGVfdGVybWlvcyhjb24pOworCXN1bnNlcmlhbF9jb25zb2xlX3Rlcm1pb3MoY29uLCB0b19vZl9kZXZpY2UodXAtPnBvcnQuZGV2KS0+bm9kZSk7CiAKIAkvKiBGaXJtd2FyZSBjb25zb2xlIHNwZWVkIGlzIGxpbWl0ZWQgdG8gMTUwLS0+Mzg0MDAgYmF1ZCBzbwogCSAqIHRoaXMgaGFja2lzaCBjZmxhZyB0aGluZyBpcyBPSy4KQEAgLTE0MTYsNyArMTQxNiw4IEBACiAKIAlpZiAoIWtleWJvYXJkX21vdXNlKSB7CiAJCWlmIChzdW5zZXJpYWxfY29uc29sZV9tYXRjaChTVU5aSUxPR19DT05TT0xFKCksIG9wLT5ub2RlLAotCQkJCQkgICAgJnN1bnppbG9nX3JlZywgdXBbMF0ucG9ydC5saW5lKSkKKwkJCQkJICAgICZzdW56aWxvZ19yZWcsIHVwWzBdLnBvcnQubGluZSwKKwkJCQkJICAgIGZhbHNlKSkKIAkJCXVwLT5mbGFncyB8PSBTVU5aSUxPR19GTEFHX0lTX0NPTlM7CiAJCWVyciA9IHVhcnRfYWRkX29uZV9wb3J0KCZzdW56aWxvZ19yZWcsICZ1cFswXS5wb3J0KTsKIAkJaWYgKGVycikgewpAQCAtMTQyNSw3ICsxNDI2LDggQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJaWYgKHN1bnNlcmlhbF9jb25zb2xlX21hdGNoKFNVTlpJTE9HX0NPTlNPTEUoKSwgb3AtPm5vZGUsCi0JCQkJCSAgICAmc3Vuemlsb2dfcmVnLCB1cFsxXS5wb3J0LmxpbmUpKQorCQkJCQkgICAgJnN1bnppbG9nX3JlZywgdXBbMV0ucG9ydC5saW5lLAorCQkJCQkgICAgZmFsc2UpKQogCQkJdXAtPmZsYWdzIHw9IFNVTlpJTE9HX0ZMQUdfSVNfQ09OUzsKIAkJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bnppbG9nX3JlZywgJnVwWzFdLnBvcnQpOwogCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwppbmRleCBkODcxZGMyLi4yNTUyYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNzLT5kb25lKTsKIAogCWlmICghYnVzeV93YWl0KHJlYWRsKHNzLT5yZWdzICsgSFdfU1NQX0NUUkwwKSAmIEJNX1NTUF9DVFJMMF9SVU4pKQotCQlzdGF0dXMgPSBFVElNRURPVVQ7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CiAKIAlpZiAoIWRtYV9idWYpCiAJCWRtYV91bm1hcF9zaW5nbGUoc3MtPm1hc3Rlcl9kZXYsIHNwaV9idWZfZG1hLCBsZW4sIGRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwppbmRleCA5NjA1N2RlLi4xOWY3NTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKQEAgLTI5LDYgKzI5LDggQEAKIAogCiAjZGVmaW5lIFNQSV9GSUZPX1NJWkUgNAorI2RlZmluZSBTUElfTUFYX0RJVklERVIgMHhmZgkvKiBNYXguIHZhbHVlIGZvciBTUENSMS5TRVIgKi8KKyNkZWZpbmUgU1BJX01JTl9ESVZJREVSIDEJLyogTWluLiB2YWx1ZSBmb3IgU1BDUjEuU0VSICovCiAKICNkZWZpbmUgVFh4OV9TUE1DUgkJMHgwMAogI2RlZmluZSBUWHg5X1NQQ1IwCQkweDA0CkBAIC0xOTMsMTEgKzE5NSw4IEBACiAKIAkJaWYgKHByZXZfc3BlZWRfaHogIT0gc3BlZWRfaHoKIAkJCQl8fCBwcmV2X2JpdHNfcGVyX3dvcmQgIT0gYml0c19wZXJfd29yZCkgewotCQkJdTMyIG4gPSAoYy0+YmFzZWNsayArIHNwZWVkX2h6IC0gMSkgLyBzcGVlZF9oejsKLQkJCWlmIChuIDwgMSkKLQkJCQluID0gMTsKLQkJCWVsc2UgaWYgKG4gPiAweGZmKQotCQkJCW4gPSAweGZmOworCQkJaW50IG4gPSBESVZfUk9VTkRfVVAoYy0+YmFzZWNsaywgc3BlZWRfaHopIC0gMTsKKwkJCW4gPSBjbGFtcChuLCBTUElfTUlOX0RJVklERVIsIFNQSV9NQVhfRElWSURFUik7CiAJCQkvKiBlbnRlciBjb25maWcgbW9kZSAqLwogCQkJdHh4OXNwaV93cihjLCBtY3IgfCBUWHg5X1NQTUNSX0NPTkZJRyB8IFRYeDlfU1BNQ1JfQkNMUiwKIAkJCQkJVFh4OV9TUE1DUik7CkBAIC0zNzAsOCArMzY5LDggQEAKIAkJZ290byBleGl0OwogCX0KIAljLT5iYXNlY2xrID0gY2xrX2dldF9yYXRlKGMtPmNsayk7Ci0JYy0+bWluX3NwZWVkX2h6ID0gKGMtPmJhc2VjbGsgKyAweGZmIC0gMSkgLyAweGZmOwotCWMtPm1heF9zcGVlZF9oeiA9IGMtPmJhc2VjbGs7CisJYy0+bWluX3NwZWVkX2h6ID0gRElWX1JPVU5EX1VQKGMtPmJhc2VjbGssIFNQSV9NQVhfRElWSURFUiArIDEpOworCWMtPm1heF9zcGVlZF9oeiA9IGMtPmJhc2VjbGsgLyAoU1BJX01JTl9ESVZJREVSICsgMSk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IDEwMGU3YTUuLmU3MmY0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC02MTcsMTM2ICs2MTcsMTQwIEBACiAJfQkJCQkJCVwKICAgfSB3aGlsZSAoMCkKIAotaW50IHNzYl9wY21jaWFfZ2V0X2ludmFyaWFudHMoc3RydWN0IHNzYl9idXMgKmJ1cywKLQkJCSAgICAgIHN0cnVjdCBzc2JfaW5pdF9pbnZhcmlhbnRzICppdikKK3N0YXRpYyBpbnQgc3NiX3BjbWNpYV9nZXRfbWFjKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCXR1cGxlX3QgKnR1cGxlLAorCQkJdm9pZCAqcHJpdikKIHsKLQl0dXBsZV90IHR1cGxlOwotCWludCByZXM7Ci0JdW5zaWduZWQgY2hhciBidWZbMzJdOworCXN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tID0gcHJpdjsKKworCWlmICh0dXBsZS0+VHVwbGVEYXRhWzBdICE9IENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gIT0gRVRIX0FMRU4gKyAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YVsxXSAhPSBFVEhfQUxFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtY3B5KHNwcm9tLT5pbDBtYWMsICZ0dXBsZS0+VHVwbGVEYXRhWzJdLCBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IHNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCQl0dXBsZV90ICp0dXBsZSwKKwkJCQkJdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3NiX2luaXRfaW52YXJpYW50cyAqaXYgPSBwcml2OwogCXN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tID0gJml2LT5zcHJvbTsKIAlzdHJ1Y3Qgc3NiX2JvYXJkaW5mbyAqYmkgPSAmaXYtPmJvYXJkaW5mbzsKIAljb25zdCBjaGFyICplcnJvcl9kZXNjcmlwdGlvbjsKIAorCUdPVE9fRVJST1JfT04odHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEsICJWRU4gdHBsIDwgMSIpOworCXN3aXRjaCAodHVwbGUtPlR1cGxlRGF0YVswXSkgeworCWNhc2UgU1NCX1BDTUNJQV9DSVNfSUQ6CisJCUdPVE9fRVJST1JfT04oKHR1cGxlLT5UdXBsZURhdGFMZW4gIT0gNSkgJiYKKwkJCSAgICAgICh0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDcpLAorCQkJICAgICAgImlkIHRwbCBzaXplIik7CisJCWJpLT52ZW5kb3IgPSB0dXBsZS0+VHVwbGVEYXRhWzFdIHwKKwkJCSgodTE2KXR1cGxlLT5UdXBsZURhdGFbMl0gPDwgOCk7CisJCWJyZWFrOworCWNhc2UgU1NCX1BDTUNJQV9DSVNfQk9BUkRSRVY6CisJCUdPVE9fRVJST1JfT04odHVwbGUtPlR1cGxlRGF0YUxlbiAhPSAyLAorCQkJImJvYXJkcmV2IHRwbCBzaXplIik7CisJCXNwcm9tLT5ib2FyZF9yZXYgPSB0dXBsZS0+VHVwbGVEYXRhWzFdOworCQlicmVhazsKKwljYXNlIFNTQl9QQ01DSUFfQ0lTX1BBOgorCQlHT1RPX0VSUk9SX09OKCh0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDkpICYmCisJCQkodHVwbGUtPlR1cGxlRGF0YUxlbiAhPSAxMCksCisJCQkicGEgdHBsIHNpemUiKTsKKwkJc3Byb20tPnBhMGIwID0gdHVwbGUtPlR1cGxlRGF0YVsxXSB8CisJCQkoKHUxNil0dXBsZS0+VHVwbGVEYXRhWzJdIDw8IDgpOworCQlzcHJvbS0+cGEwYjEgPSB0dXBsZS0+VHVwbGVEYXRhWzNdIHwKKwkJCSgodTE2KXR1cGxlLT5UdXBsZURhdGFbNF0gPDwgOCk7CisJCXNwcm9tLT5wYTBiMiA9IHR1cGxlLT5UdXBsZURhdGFbNV0gfAorCQkJKCh1MTYpdHVwbGUtPlR1cGxlRGF0YVs2XSA8PCA4KTsKKwkJc3Byb20tPml0c3NpX2EgPSB0dXBsZS0+VHVwbGVEYXRhWzddOworCQlzcHJvbS0+aXRzc2lfYmcgPSB0dXBsZS0+VHVwbGVEYXRhWzddOworCQlzcHJvbS0+bWF4cHdyX2EgPSB0dXBsZS0+VHVwbGVEYXRhWzhdOworCQlzcHJvbS0+bWF4cHdyX2JnID0gdHVwbGUtPlR1cGxlRGF0YVs4XTsKKwkJYnJlYWs7CisJY2FzZSBTU0JfUENNQ0lBX0NJU19PRU1OQU1FOgorCQkvKiBXZSBpZ25vcmUgdGhpcy4gKi8KKwkJYnJlYWs7CisJY2FzZSBTU0JfUENNQ0lBX0NJU19DQ09ERToKKwkJR09UT19FUlJPUl9PTih0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDIsCisJCQkiY2NvZGUgdHBsIHNpemUiKTsKKwkJc3Byb20tPmNvdW50cnlfY29kZSA9IHR1cGxlLT5UdXBsZURhdGFbMV07CisJCWJyZWFrOworCWNhc2UgU1NCX1BDTUNJQV9DSVNfQU5URU5OQToKKwkJR09UT19FUlJPUl9PTih0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDIsCisJCQkiYW50IHRwbCBzaXplIik7CisJCXNwcm9tLT5hbnRfYXZhaWxhYmxlX2EgPSB0dXBsZS0+VHVwbGVEYXRhWzFdOworCQlzcHJvbS0+YW50X2F2YWlsYWJsZV9iZyA9IHR1cGxlLT5UdXBsZURhdGFbMV07CisJCWJyZWFrOworCWNhc2UgU1NCX1BDTUNJQV9DSVNfQU5UR0FJTjoKKwkJR09UT19FUlJPUl9PTih0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDIsCisJCQkiYW50ZyB0cGwgc2l6ZSIpOworCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEwID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMSA9IHR1cGxlLT5UdXBsZURhdGFbMV07CisJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQuYTIgPSB0dXBsZS0+VHVwbGVEYXRhWzFdOworCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEzID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEwID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmExID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEyID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEzID0gdHVwbGUtPlR1cGxlRGF0YVsxXTsKKwkJYnJlYWs7CisJY2FzZSBTU0JfUENNQ0lBX0NJU19CRkxBR1M6CisJCUdPVE9fRVJST1JfT04oKHR1cGxlLT5UdXBsZURhdGFMZW4gIT0gMykgJiYKKwkJCSh0dXBsZS0+VHVwbGVEYXRhTGVuICE9IDUpLAorCQkJImJmbCB0cGwgc2l6ZSIpOworCQlzcHJvbS0+Ym9hcmRmbGFnc19sbyA9IHR1cGxlLT5UdXBsZURhdGFbMV0gfAorCQkJKCh1MTYpdHVwbGUtPlR1cGxlRGF0YVsyXSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBTU0JfUENNQ0lBX0NJU19MRURTOgorCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5UdXBsZURhdGFMZW4gIT0gNSwKKwkJCSJsZWRzIHRwbCBzaXplIik7CisJCXNwcm9tLT5ncGlvMCA9IHR1cGxlLT5UdXBsZURhdGFbMV07CisJCXNwcm9tLT5ncGlvMSA9IHR1cGxlLT5UdXBsZURhdGFbMl07CisJCXNwcm9tLT5ncGlvMiA9IHR1cGxlLT5UdXBsZURhdGFbM107CisJCXNwcm9tLT5ncGlvMyA9IHR1cGxlLT5UdXBsZURhdGFbNF07CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVOT1NQQzsgLyogY29udGludWUgd2l0aCBuZXh0IGVudHJ5ICovCisKK2Vycm9yOgorCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICJQQ01DSUE6IEZhaWxlZCB0byBmZXRjaCBkZXZpY2UgaW52YXJpYW50czogJXNcbiIsCisJCSAgIGVycm9yX2Rlc2NyaXB0aW9uKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworCitpbnQgc3NiX3BjbWNpYV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAorCQkJICAgICAgc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgKml2KQoreworCXN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tID0gJml2LT5zcHJvbTsKKwlpbnQgcmVzOworCiAJbWVtc2V0KHNwcm9tLCAweEZGLCBzaXplb2YoKnNwcm9tKSk7CiAJc3Byb20tPnJldmlzaW9uID0gMTsKIAlzcHJvbS0+Ym9hcmRmbGFnc19sbyA9IDA7CiAJc3Byb20tPmJvYXJkZmxhZ3NfaGkgPSAwOwogCiAJLyogRmlyc3QgZmV0Y2ggdGhlIE1BQyBhZGRyZXNzLiAqLwotCW1lbXNldCgmdHVwbGUsIDAsIHNpemVvZih0dXBsZSkpOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9GVU5DRTsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JcmVzID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJNQUMgZmlyc3QgdHBsIik7Ci0JcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIk1BQyBmaXJzdCB0cGwgZGF0YSIpOwotCXdoaWxlICgxKSB7Ci0JCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuIDwgMSwgIk1BQyB0cGwgPCAxIik7Ci0JCWlmICh0dXBsZS5UdXBsZURhdGFbMF0gPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQotCQkJYnJlYWs7Ci0JCXJlcyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiTUFDIG5leHQgdHBsIik7Ci0JCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiTUFDIG5leHQgdHBsIGRhdGEiKTsKKwlyZXMgPSBwY21jaWFfbG9vcF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCBDSVNUUExfRlVOQ0UsCisJCQkJc3NiX3BjbWNpYV9nZXRfbWFjLCBzcHJvbSk7CisJaWYgKHJlcyAhPSAwKSB7CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkiUENNQ0lBOiBGYWlsZWQgdG8gZmV0Y2ggTUFDIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gRVRIX0FMRU4gKyAyLCAiTUFDIHRwbCBzaXplIik7Ci0JbWVtY3B5KHNwcm9tLT5pbDBtYWMsICZ0dXBsZS5UdXBsZURhdGFbMl0sIEVUSF9BTEVOKTsKIAogCS8qIEZldGNoIHRoZSB2ZW5kb3Igc3BlY2lmaWMgdHVwbGVzLiAqLwotCW1lbXNldCgmdHVwbGUsIDAsIHNpemVvZih0dXBsZSkpOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IFNTQl9QQ01DSUFfQ0lTOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQlyZXMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIlZFTiBmaXJzdCB0cGwiKTsKLQlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiVkVOIGZpcnN0IHRwbCBkYXRhIik7Ci0Jd2hpbGUgKDEpIHsKLQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gPCAxLCAiVkVOIHRwbCA8IDEiKTsKLQkJc3dpdGNoICh0dXBsZS5UdXBsZURhdGFbMF0pIHsKLQkJY2FzZSBTU0JfUENNQ0lBX0NJU19JRDoKLQkJCUdPVE9fRVJST1JfT04oKHR1cGxlLlR1cGxlRGF0YUxlbiAhPSA1KSAmJgotCQkJCSAgICAgICh0dXBsZS5UdXBsZURhdGFMZW4gIT0gNyksCi0JCQkJICAgICAgImlkIHRwbCBzaXplIik7Ci0JCQliaS0+dmVuZG9yID0gdHVwbGUuVHVwbGVEYXRhWzFdIHwKLQkJCSAgICAgICAoKHUxNil0dXBsZS5UdXBsZURhdGFbMl0gPDwgOCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTU0JfUENNQ0lBX0NJU19CT0FSRFJFVjoKLQkJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuICE9IDIsCi0JCQkJICAgICAgImJvYXJkcmV2IHRwbCBzaXplIik7Ci0JCQlzcHJvbS0+Ym9hcmRfcmV2ID0gdHVwbGUuVHVwbGVEYXRhWzFdOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1NCX1BDTUNJQV9DSVNfUEE6Ci0JCQlHT1RPX0VSUk9SX09OKCh0dXBsZS5UdXBsZURhdGFMZW4gIT0gOSkgJiYKLQkJCQkgICAgICAodHVwbGUuVHVwbGVEYXRhTGVuICE9IDEwKSwKLQkJCQkgICAgICAicGEgdHBsIHNpemUiKTsKLQkJCXNwcm9tLT5wYTBiMCA9IHR1cGxlLlR1cGxlRGF0YVsxXSB8Ci0JCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVsyXSA8PCA4KTsKLQkJCXNwcm9tLT5wYTBiMSA9IHR1cGxlLlR1cGxlRGF0YVszXSB8Ci0JCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVs0XSA8PCA4KTsKLQkJCXNwcm9tLT5wYTBiMiA9IHR1cGxlLlR1cGxlRGF0YVs1XSB8Ci0JCQkJICgodTE2KXR1cGxlLlR1cGxlRGF0YVs2XSA8PCA4KTsKLQkJCXNwcm9tLT5pdHNzaV9hID0gdHVwbGUuVHVwbGVEYXRhWzddOwotCQkJc3Byb20tPml0c3NpX2JnID0gdHVwbGUuVHVwbGVEYXRhWzddOwotCQkJc3Byb20tPm1heHB3cl9hID0gdHVwbGUuVHVwbGVEYXRhWzhdOwotCQkJc3Byb20tPm1heHB3cl9iZyA9IHR1cGxlLlR1cGxlRGF0YVs4XTsKLQkJCWJyZWFrOwotCQljYXNlIFNTQl9QQ01DSUFfQ0lTX09FTU5BTUU6Ci0JCQkvKiBXZSBpZ25vcmUgdGhpcy4gKi8KLQkJCWJyZWFrOwotCQljYXNlIFNTQl9QQ01DSUFfQ0lTX0NDT0RFOgotCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKLQkJCQkgICAgICAiY2NvZGUgdHBsIHNpemUiKTsKLQkJCXNwcm9tLT5jb3VudHJ5X2NvZGUgPSB0dXBsZS5UdXBsZURhdGFbMV07Ci0JCQlicmVhazsKLQkJY2FzZSBTU0JfUENNQ0lBX0NJU19BTlRFTk5BOgotCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKLQkJCQkgICAgICAiYW50IHRwbCBzaXplIik7Ci0JCQlzcHJvbS0+YW50X2F2YWlsYWJsZV9hID0gdHVwbGUuVHVwbGVEYXRhWzFdOwotCQkJc3Byb20tPmFudF9hdmFpbGFibGVfYmcgPSB0dXBsZS5UdXBsZURhdGFbMV07Ci0JCQlicmVhazsKLQkJY2FzZSBTU0JfUENNQ0lBX0NJU19BTlRHQUlOOgotCQkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gMiwKLQkJCQkgICAgICAiYW50ZyB0cGwgc2l6ZSIpOwotCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQuYTEgPSB0dXBsZS5UdXBsZURhdGFbMV07Ci0JCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEyID0gdHVwbGUuVHVwbGVEYXRhWzFdOwotCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMyA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMSA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMiA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMyA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCWJyZWFrOwotCQljYXNlIFNTQl9QQ01DSUFfQ0lTX0JGTEFHUzoKLQkJCUdPVE9fRVJST1JfT04oKHR1cGxlLlR1cGxlRGF0YUxlbiAhPSAzKSAmJgotCQkJCSAgICAgICh0dXBsZS5UdXBsZURhdGFMZW4gIT0gNSksCi0JCQkJICAgICAgImJmbCB0cGwgc2l6ZSIpOwotCQkJc3Byb20tPmJvYXJkZmxhZ3NfbG8gPSB0dXBsZS5UdXBsZURhdGFbMV0gfAotCQkJCQkgKCh1MTYpdHVwbGUuVHVwbGVEYXRhWzJdIDw8IDgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1NCX1BDTUNJQV9DSVNfTEVEUzoKLQkJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuICE9IDUsCi0JCQkJICAgICAgImxlZHMgdHBsIHNpemUiKTsKLQkJCXNwcm9tLT5ncGlvMCA9IHR1cGxlLlR1cGxlRGF0YVsxXTsKLQkJCXNwcm9tLT5ncGlvMSA9IHR1cGxlLlR1cGxlRGF0YVsyXTsKLQkJCXNwcm9tLT5ncGlvMiA9IHR1cGxlLlR1cGxlRGF0YVszXTsKLQkJCXNwcm9tLT5ncGlvMyA9IHR1cGxlLlR1cGxlRGF0YVs0XTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlcyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlpZiAocmVzID09IC1FTk9TUEMpCi0JCQlicmVhazsKLQkJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIlZFTiBuZXh0IHRwbCIpOwotCQlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQkJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIlZFTiBuZXh0IHRwbCBkYXRhIik7Ci0JfQorCXJlcyA9IHBjbWNpYV9sb29wX3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsIFNTQl9QQ01DSUFfQ0lTLAorCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIHNwcm9tKTsKKwlpZiAoKHJlcyA9PSAwKSB8fCAocmVzID09IC1FTk9TUEMpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOwotZXJyb3I6CiAJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgIlBDTUNJQTogRmFpbGVkIHRvIGZldGNoIGRldmljZSBpbnZhcmlhbnRzOiAlc1xuIiwKLQkJICAgZXJyb3JfZGVzY3JpcHRpb24pOworCQkJIlBDTUNJQTogRmFpbGVkIHRvIGZldGNoIGRldmljZSBpbnZhcmlhbnRzXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc2Nhbi5jIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCmluZGV4IGI3NDIxMmQuLmU4Yjg5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NjYW4uYworKysgYi9kcml2ZXJzL3NzYi9zY2FuLmMKQEAgLTE2Miw2ICsxNjIsOCBAQAogc3RhdGljIHUzMiBzY2FuX3JlYWQzMihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBjdXJyZW50X2NvcmVpZHgsCiAJCSAgICAgICB1MTYgb2Zmc2V0KQogeworCXUzMiBsbywgaGk7CisKIAlzd2l0Y2ggKGJ1cy0+YnVzdHlwZSkgewogCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgogCQlvZmZzZXQgKz0gY3VycmVudF9jb3JlaWR4ICogU1NCX0NPUkVfU0laRTsKQEAgLTE3NCw3ICsxNzYsOSBAQAogCQkJb2Zmc2V0IC09IDB4ODAwOwogCQl9IGVsc2UKIAkJCXNzYl9wY21jaWFfc3dpdGNoX3NlZ21lbnQoYnVzLCAwKTsKLQkJYnJlYWs7CisJCWxvID0gcmVhZHcoYnVzLT5tbWlvICsgb2Zmc2V0KTsKKwkJaGkgPSByZWFkdyhidXMtPm1taW8gKyBvZmZzZXQgKyAyKTsKKwkJcmV0dXJuIGxvIHwgKGhpIDw8IDE2KTsKIAljYXNlIFNTQl9CVVNUWVBFX1NESU86CiAJCW9mZnNldCArPSBjdXJyZW50X2NvcmVpZHggKiBTU0JfQ09SRV9TSVpFOwogCQlyZXR1cm4gc3NiX3NkaW9fc2Nhbl9yZWFkMzIoYnVzLCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA3ZGYzYmE0Li5kMjFiMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtOTMsOCArOTMsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCA3NDc1NzExLi44Y2JmMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw2IEBACiBvYmotJChDT05GSUdfQU5EUk9JRCkJCSs9IGRyZWFtLwogb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwotb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkJKz0gc3RsYzQ1eHgvCiBvYmotJChDT05GSUdfQjNERkcpCQkrPSBiM2RmZy8KIG9iai0kKENPTkZJR19JREVfUEhJU09OKQkrPSBwaGlzb24vCiBvYmotJChDT05GSUdfUExBTjlBVVRIKQkJKz0gcDlhdXRoLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKaW5kZXggODBjMGRmOC4uMzk5MjNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTE0MSwzNyArMTQxLDE0IEBACiAJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IGdldF9wcm9kaWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCi17Ci0JdHVwbGVfdCB0dXBsZTsKLQl1X3Nob3J0IGJ1ZlsxMjhdOwotCWludCBwcm9kaWQgPSAwOwotCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApICYmCi0JICAgIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSAwKSkgewotCQlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOwotCX0KLQotCXJldHVybiBwcm9kaWQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFzMTZjc19ib2FyZCAqZGFzMTZjc19wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCQkJIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWludCBpZDsKIAlpbnQgaTsKIAotCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOwotCiAJZm9yIChpID0gMDsgaSA8IG5fYm9hcmRzOyBpKyspIHsKLQkJaWYgKGRhczE2Y3NfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBpZCkgeworCQlpZiAoZGFzMTZjc19ib2FyZHNbaV0uZGV2aWNlX2lkID09IGxpbmstPmNhcmRfaWQpCiAJCQlyZXR1cm4gZGFzMTZjc19ib2FyZHMgKyBpOwotCQl9CiAJfQogCiAJcHJpbnRrKCJ1bmtub3duIGJvYXJkIVxuIik7CkBAIC02NjAsMjcgKzYzNyw4IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0vKgotICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKLSAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCi0gICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKLSAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYwotICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgotKi8KICNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9NT0RVTEUpCiAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9Ci0gICAgImNiX2RhczE2X2NzLmMgcGNtY2lhIGNvZGUgKERhdmlkIFNjaGxlZWYpLCBtb2RpZmllZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIChEYXZpZCBIaW5kcykiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQogc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CkBAIC03MzMsNyArNjkxLDcgQEAKIHsKIAlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKIAotCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGFzMTZjc19wY21jaWFfYXR0YWNoKClcbiIpOwogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKQEAgLTc0NSw3ICs3MDMsNiBAQAogCS8qIEluaXRpYWxpemUgdGhlIHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlICovCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CkBAIC03NjAsNyArNzE3LDcgQEAKIAogc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRhczE2Y3NfcGNtY2lhX2RldGFjaFxuIik7CiAKIAlpZiAobGluay0+ZGV2X25vZGUpIHsKIAkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOwpAQCAtNzcxLDExOCArNzI4LDU1IEBACiAJCWtmcmVlKGxpbmstPnByaXYpOwogfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9kZXRhY2ggKi8KIAorCitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX2NvbmZpZ19sb29wKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKLQl1X2NoYXIgYnVmWzY0XTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKwlpbnQgcmV0OwogCi0JREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGFzMTZjc19wY21jaWFfY29uZmlnXG4iKTsKIAotCS8qCi0JICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCi0JICAgcmVnaXN0ZXJzLgotCSAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOwotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCAhPSAwKQotCQlnb3RvIGNzX2ZhaWxlZDsKLQotCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7Ci0JbGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQgIT0gMCkKLQkJZ290byBjc19mYWlsZWQ7Ci0KLQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKLQlsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7Ci0JaWYgKGxhc3RfcmV0ICE9IDApCi0JCWdvdG8gY3NfZmFpbGVkOwotCi0JbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCi0JLyoKLQkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAotCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKLQkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCi0KLQkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQotCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCi0JICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCi0JICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgotCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKLQkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCi0JICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpCi0JCWdvdG8gY3NfZmFpbGVkOwotCi0Jd2hpbGUgKDEpIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0vKglpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotCX0KLSovCi0JCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCi0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCi0JCWJyZWFrOwotCi1uZXh0X2VudHJ5OgotCQlsYXN0X2ZuID0gR2V0TmV4dFR1cGxlOwotCi0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChsYXN0X3JldCkKLQkJCWdvdG8gY3NfZmFpbGVkOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkYXMxNmNzX3BjbWNpYV9jb25maWdfbG9vcCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfd2FybigmbGluay0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3VuZFxuIik7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qCkBAIC04OTEsMjEgKzc4NSwxOCBAQAogCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJICovCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewotCQlsYXN0X2ZuID0gUmVxdWVzdElSUTsKLQotCQlsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQkJaWYgKGxhc3RfcmV0KQotCQkJZ290byBjc19mYWlsZWQ7CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCX0KIAkvKgogCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwotCWxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGxhc3RfcmV0KQotCQlnb3RvIGNzX2ZhaWxlZDsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCS8qCiAJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKQEAgLTkzMCwxNCArODIxLDEzIEBACiAKIAlyZXR1cm47CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CitmYWlsZWQ6CiAJZGFzMTZjc19wY21jaWFfcmVsZWFzZShsaW5rKTsKIH0JCQkJLyogZGFzMTZjc19wY21jaWFfY29uZmlnICovCiAKIHN0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRhczE2Y3NfcGNtY2lhX3JlbGVhc2VcbiIpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0JCQkJLyogZGFzMTZjc19wY21jaWFfcmVsZWFzZSAqLwogCkBAIC05ODMsMTQgKzg3MywxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCiB7Ci0JREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKIAlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkYXMxNmNzX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCiB7Ci0JREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX2NzOiB1bmxvYWRpbmdcbiIpOworCXByX2RlYnVnKCJkYXMxNmNzX3BjbWNpYV9jczogdW5sb2FkaW5nXG4iKTsKIAlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhczE2Y3NfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwppbmRleCA5Y2FiMjFlLi45Yjk0NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwpAQCAtMTEwLDI1ICsxMTAsNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0KLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9Ci0gICAgImRhczA4LmMgcGNtY2lhIGNvZGUgKEZyYW5rIEhlc3MpLCBtb2RpZmllZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIChEYXZpZCBIaW5kcykiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgZGFzMDhfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIGludCBkYXMwOF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwpAQCAtMTgxLDcgKzE2Miw3IEBACiB7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWw7CiAKLQlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2F0dGFjaCgpXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkYXMwOF9wY21jaWFfYXR0YWNoKClcbiIpOwogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKQEAgLTE5Miw3ICsxNzMsNiBAQAogCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogCS8qCkBAIC0yMjQsNyArMjA0LDcgQEAKIHN0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAKLQlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGFzMDhfcGNtY2lhX2RldGFjaFxuIik7CiAKIAlpZiAobGluay0+ZGV2X25vZGUpIHsKIAkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPnN0b3AgPSAxOwpAQCAtMjM3LDYgKzIxNyw0NCBAQAogCiB9CQkJCS8qIGRhczA4X3BjbWNpYV9kZXRhY2ggKi8KIAorCitzdGF0aWMgaW50IGRhczA4X3BjbWNpYV9jb25maWdfbG9vcChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJfQorCXJldHVybiAwOworfQorCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgZGFzMDhfcGNtY2lhX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudApAQCAtMjQ4LDEyOCArMjY2LDIwIEBACiBzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKLQl1X2NoYXIgYnVmWzY0XTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKwlpbnQgcmV0OwogCi0JREVCVUcoMCwgImRhczA4X3BjbWNpYV9jb25maWcoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRhczA4X3BjbWNpYV9jb25maWdcbiIpOwogCi0JLyoKLQkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KLQkgICByZWdpc3RlcnMuCi0JICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOwotCi0JbGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JaWYgKGxhc3RfcmV0KQotCQlnb3RvIGNzX2ZhaWxlZDsKLQotCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCkKLQkJZ290byBjc19mYWlsZWQ7Ci0KLQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKLQotCWxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKLQlpZiAobGFzdF9yZXQpCi0JCWdvdG8gY3NfZmFpbGVkOwotCi0JbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCi0JLyoKLQkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAotCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKLQkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCi0KLQkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQotCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCi0JICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCi0JICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgotCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKLQkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCi0JICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpCi0JCWdvdG8gY3NfZmFpbGVkOwotCi0Jd2hpbGUgKDEpIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQotCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCQlpZiAobGFzdF9yZXQpCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJbGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwotCQlpZiAobGFzdF9yZXQpCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQotCQkJZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotLyoJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgewotCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQl9Ci0qLwotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JCQl9Ci0JCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCi0JCWJyZWFrOwotCi1uZXh0X2VudHJ5OgotCQlsYXN0X2ZuID0gR2V0TmV4dFR1cGxlOwotCi0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChsYXN0X3JldCkKLQkJCWdvdG8gY3NfZmFpbGVkOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkYXMwOF9wY21jaWFfY29uZmlnX2xvb3AsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmxpbmstPmRldiwgIm5vIGNvbmZpZ3VyYXRpb24gZm91bmRcbiIpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7Ci0JCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwotCQlsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQkJaWYgKGxhc3RfcmV0KQotCQkJZ290byBjc19mYWlsZWQ7CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qCkBAIC0zNzcsMTAgKzI4Nyw5IEBACiAJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JbGFzdF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOwotCWxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGxhc3RfcmV0KQotCQlnb3RvIGNzX2ZhaWxlZDsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCS8qCiAJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKQEAgLTQwNSw4ICszMTQsNyBAQAogCiAJcmV0dXJuOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworZmFpbGVkOgogCWRhczA4X3BjbWNpYV9yZWxlYXNlKGxpbmspOwogCiB9CQkJCS8qIGRhczA4X3BjbWNpYV9jb25maWcgKi8KQEAgLTQyMSw3ICszMjksNyBAQAogCiBzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAiZGFzMDhfcGNtY2lhX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRhczA4X3BjbWNpYV9yZWxlYXNlXG4iKTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CQkJCS8qIGRhczA4X3BjbWNpYV9yZWxlYXNlICovCiAKQEAgLTQ3NywxNCArMzg1LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZGFzMDhfcGNtY2lhX2NzKHZvaWQpCiB7Ci0JREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKIAlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkYXMwOF9jc19kcml2ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kYXMwOF9wY21jaWFfY3Modm9pZCkKIHsKLQlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2NzOiB1bmxvYWRpbmdcbiIpOworCXByX2RlYnVnKCJkYXMwOF9wY21jaWFfY3M6IHVubG9hZGluZ1xuIik7CiAJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkYXMwOF9jc19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggMmNkYTdhZC4uODBlMTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtNTEsNiArNTEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCBlYzMxYTM5Li5lZjVlMTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTQzNiwyNSArNDM2LDcgQEAKIAlyZXR1cm4gMDsKIH07CiAKLS8qIFBDTUNJQSBjcmFwICovCi0KLS8qCi0gICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0gIm5pX2RhcV83MDAuYywgYmFzZWQgb24gZHVtbXlfY3MuYyI7Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUENNQ0lBIGNyYXAgLS0gd2F0Y2ggeW91ciB3b3JkcywgcGxlYXNlISAqLwogCiBzdGF0aWMgdm9pZCBkaW83MDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKIHN0YXRpYyB2b2lkIGRpbzcwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTUxMCw3ICs0OTIsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMDogIGNzLWF0dGFjaFxuIik7CiAKLQlERUJVRygwLCAiZGlvNzAwX2NzX2F0dGFjaCgpXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW83MDBfY3NfYXR0YWNoKClcbiIpOwogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKQEAgLTUyMSw3ICs1MDMsNiBAQAogCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogCS8qCkBAIC01NTUsNyArNTM2LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV83MDA6IGNzLWRldGFjaCFcbiIpOwogCi0JREVCVUcoMCwgImRpbzcwMF9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRpbzcwMF9jc19kZXRhY2hcbiIpOwogCiAJaWYgKGxpbmstPmRldl9ub2RlKSB7CiAJCSgoc3RydWN0IGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wID0gMTsKQEAgLTU3NiwxNDEgKzU1Nyw4NSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGludCBkaW83MDBfcGNtY2lhX2NvbmZpZ19sb29wKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwl3aW5fcmVxX3QgKnJlcSA9IHByaXZfZGF0YTsKKwltZW1yZXFfdCBtYXA7CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlwX2Rldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0KKwkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07CisJCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOworCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKKwkJcmVxLT5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOworCQlyZXEtPlNpemUgPSBtZW0tPndpblswXS5sZW47CisJCWlmIChyZXEtPlNpemUgPCAweDEwMDApCisJCQlyZXEtPlNpemUgPSAweDEwMDA7CisJCXJlcS0+QWNjZXNzU3BlZWQgPSAwOworCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCByZXEsICZwX2Rldi0+d2luKSkKKwkJCXJldHVybiAtRU5PREVWOworCQltYXAuUGFnZSA9IDA7CisJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOworCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBkaW83MDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBsYXN0X3JldDsKLQl1X2NoYXIgYnVmWzY0XTsKIAl3aW5fcmVxX3QgcmVxOwotCW1lbXJlcV90IG1hcDsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKwlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMDogIGNzLWNvbmZpZ1xuIik7CiAKLQlERUJVRygwLCAiZGlvNzAwX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGlvNzAwX2NvbmZpZ1xuIik7CiAKLQkvKgotCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgotCSAgIHJlZ2lzdGVycy4KLQkgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQotCi0JbGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKLQlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07Ci0KLQkvKgotCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCi0JICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZwotCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KLQotCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCi0JICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKLQkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKLQkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCi0JICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycwotCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KLQkgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQgIT0gMCkgewotCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQl3aGlsZSAoMSkgewotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQkJfQotCi0JCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCi0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfQotCi0JCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0Lm1lbS5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9tZW1fdCAqbWVtID0KLQkJCSAgICAoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC5tZW07Ci0JCQlyZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOwotCQkJcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkJCXJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwotCQkJcmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47Ci0JCQlpZiAocmVxLlNpemUgPCAweDEwMDApCi0JCQkJcmVxLlNpemUgPSAweDEwMDA7Ci0JCQlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbikpCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJbWFwLlBhZ2UgPSAwOwotCQkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfQotCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCi0JCWJyZWFrOwotCi1uZXh0X2VudHJ5OgotCi0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChsYXN0X3JldCkgewotCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkaW83MDBfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZsaW5rLT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvdW5kXG4iKTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTcxOSwxMSArNjQ0LDkgQEAKIAkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKLQkJbGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JCWlmIChsYXN0X3JldCkgewotCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOwotCQkJZ290byBjc19mYWlsZWQ7Ci0JCX0KKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTczMSwxMSArNjU0LDkgQEAKIAkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KLQlsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChsYXN0X3JldCAhPSAwKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQpAQCAtNzYzLDcgKzY4NCw3IEBACiAKIAlyZXR1cm47CiAKLWNzX2ZhaWxlZDoKK2ZhaWxlZDoKIAlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwIGNzIGZhaWxlZCIpOwogCWRpbzcwMF9yZWxlYXNlKGxpbmspOwogCkBAIC03NzEsNyArNjkyLDcgQEAKIAogc3RhdGljIHZvaWQgZGlvNzAwX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImRpbzcwMF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW83MDBfcmVsZWFzZVxuIik7CiAKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CQkJCS8qIGRpbzcwMF9yZWxlYXNlICovCkBAIC04MzAsMTUgKzc1MSwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2RpbzcwMF9jcyh2b2lkKQogewotCXByaW50aygibmlfZGFxXzcwMDogIGNzLWluaXQgXG4iKTsKLQlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOwogCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmRpbzcwMF9jc19kcml2ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kaW83MDBfY3Modm9pZCkKIHsKLQlERUJVRygwLCAibmlfZGFxXzcwMDogdW5sb2FkaW5nXG4iKTsKKwlwcl9kZWJ1ZygibmlfZGFxXzcwMDogdW5sb2FkaW5nXG4iKTsKIAlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRpbzcwMF9jc19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKaW5kZXggMDcwMGE4Yi4uOTAxN2JlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtMTg3LDI1ICsxODcsNyBAQAogCXJldHVybiAwOwogfTsKIAotLyogUENNQ0lBIGNyYXAgKi8KLQotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQotc3RhdGljIGNoYXIgKnZlcnNpb24gPSAibmlfZGFxX2RpbzI0LmMsIGJhc2VkIG9uIGR1bW15X2NzLmMiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFBDTUNJQSBjcmFwIC0tIHdhdGNoIHlvdXIgd29yZHMhICovCiAKIHN0YXRpYyB2b2lkIGRpbzI0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CiBzdGF0aWMgdm9pZCBkaW8yNF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTI2MSw3ICsyNDMsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyAtIENTLWF0dGFjaCFcbiIpOwogCi0JREVCVUcoMCwgImRpbzI0X2NzX2F0dGFjaCgpXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW8yNF9jc19hdHRhY2goKVxuIik7CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwpAQCAtMjcyLDcgKzI1NCw2IEBACiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCiAJLyoKQEAgLTMwNiw3ICsyODcsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyAtIGNzLWRldGFjaCFcbiIpOwogCi0JREVCVUcoMCwgImRpbzI0X2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGlvMjRfY3NfZGV0YWNoXG4iKTsKIAogCWlmIChsaW5rLT5kZXZfbm9kZSkgewogCQkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7CkBAIC0zMjcsMTQyICszMDgsODUgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKK3N0YXRpYyBpbnQgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwl3aW5fcmVxX3QgKnJlcSA9IHByaXZfZGF0YTsKKwltZW1yZXFfdCBtYXA7CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlwX2Rldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0KKwkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07CisJCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOworCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKKwkJcmVxLT5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOworCQlyZXEtPlNpemUgPSBtZW0tPndpblswXS5sZW47CisJCWlmIChyZXEtPlNpemUgPCAweDEwMDApCisJCQlyZXEtPlNpemUgPSAweDEwMDA7CisJCXJlcS0+QWNjZXNzU3BlZWQgPSAwOworCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCByZXEsICZwX2Rldi0+d2luKSkKKwkJCXJldHVybiAtRU5PREVWOworCQltYXAuUGFnZSA9IDA7CisJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOworCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBkaW8yNF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JaW50IGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOworCWludCByZXQ7CiAJd2luX3JlcV90IHJlcTsKLQltZW1yZXFfdCBtYXA7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CiAKIAlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfZGlvMjQ6IEhPTEEgU09ZIFlPISAtIGNvbmZpZ1xuIik7CiAKLQlERUJVRygwLCAiZGlvMjRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW8yNF9jb25maWdcbiIpOwogCi0JLyoKLQkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KLQkgICByZWdpc3RlcnMuCi0JICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0JbGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JaWYgKGxhc3RfcmV0KSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQotCi0JbGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQotCWxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0JbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOwotCi0JLyoKLQkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAotCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKLQkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCi0KLQkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQotCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCi0JICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCi0JICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgotCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKLQkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCi0JICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0Jd2hpbGUgKDEpIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQotCQkJZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JCQl9Ci0JCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfbWVtX3QgKm1lbSA9Ci0JCQkgICAgKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOwotCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKLQkJCXJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7Ci0JCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQkJaWYgKHJlcS5TaXplIDwgMHgxMDAwKQotCQkJCXJlcS5TaXplID0gMHgxMDAwOwotCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCW1hcC5QYWdlID0gMDsKLQkJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCQlicmVhazsKLQotbmV4dF9lbnRyeToKLQotCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotCQlpZiAobGFzdF9yZXQpIHsKLQkJCWNzX2Vycm9yKGxpbmssIEdldE5leHRUdXBsZSwgbGFzdF9yZXQpOwotCQkJZ290byBjc19mYWlsZWQ7Ci0JCX0KKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZsaW5rLT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvdW5kXG4iKTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTQ3MSwxMSArMzk1LDkgQEAKIAkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKLQkJbGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JCWlmIChsYXN0X3JldCkgewotCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOwotCQkJZ290byBjc19mYWlsZWQ7Ci0JCX0KKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTQ4MywxMSArNDA1LDkgQEAKIAkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KIAkgKi8KLQlsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKgogCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCkBAIC01MTUsNyArNDM1LDcgQEAKIAogCXJldHVybjsKIAotY3NfZmFpbGVkOgorZmFpbGVkOgogCXByaW50ayhLRVJOX0lORk8gIkZhbGxvIik7CiAJZGlvMjRfcmVsZWFzZShsaW5rKTsKIApAQCAtNTIzLDcgKzQ0Myw3IEBACiAKIHN0YXRpYyB2b2lkIGRpbzI0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImRpbzI0X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImRpbzI0X3JlbGVhc2VcbiIpOwogCiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQkJCQkvKiBkaW8yNF9yZWxlYXNlICovCkBAIC01ODIsMTQgKzUwMiwxMiBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9kaW8yNF9jcyh2b2lkKQogewogCXByaW50aygibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyFcbiIpOwotCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CiAJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGlvMjRfY3NfZHJpdmVyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGlvMjRfY3Modm9pZCkKIHsKLQlERUJVRygwLCAibmlfZGlvMjQ6IHVubG9hZGluZ1xuIik7CiAJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkaW8yNF9jc19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCmluZGV4IGEzMDUzYjguLjdkNTE0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCkBAIC0xNTMsMjMgKzE1Myw2IEBACiAJcmV0dXJuIGxhYnBjX2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UsIGlycSwgMCk7CiB9CiAKLS8qCi0gICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgotICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKLSAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAotICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCi0gICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCi0qLwotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKLW1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKLXN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0KLSAgICAibmlfbGFicGMuYywgYmFzZWQgb24gZHVtbXlfY3MuYyAxLjMxIDIwMDEvMDgvMjQgMTI6MTM6MTMiOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKLSNlbmRpZgotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogLyoKQEAgLTIzNiw3ICsyMTksNyBAQAogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsOwogCi0JREVCVUcoMCwgImxhYnBjX2NzX2F0dGFjaCgpXG4iKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJsYWJwY19jc19hdHRhY2goKVxuIik7CiAKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwogCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwpAQCAtMjQ3LDcgKzIzMCw2IEBACiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9GT1JDRURfUFVMU0U7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEIHwgSVJRX1BVTFNFX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIAogCS8qCkBAIC0yNzgsNyArMjYwLDcgQEAKIAogc3RhdGljIHZvaWQgbGFicGNfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURFQlVHKDAsICJsYWJwY19jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImxhYnBjX2NzX2RldGFjaFxuIik7CiAKIAkvKgogCSAgIElmIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2Ugd29uJ3QKQEAgLTMwNSwxMzUgKzI4Nyw4NCBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGludCBsYWJwY19wY21jaWFfY29uZmlnX2xvb3Aoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCXVuc2lnbmVkIGludCB2Y2MsCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOworCW1lbXJlcV90IG1hcDsKKworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCXBfZGV2LT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQtPm1lbS5ud2luID4gMCkpIHsKKwkJY2lzdHBsX21lbV90ICptZW0gPQorCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJcmVxLT5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007CisJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJaWYgKHJlcS0+U2l6ZSA8IDB4MTAwMCkKKwkJCXJlcS0+U2l6ZSA9IDB4MTAwMDsKKwkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7CisJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3cocF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCW1hcC5QYWdlID0gMDsKKwkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+d2luLCAmbWFwKSkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIHZvaWQgbGFicGNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBsYXN0X3JldDsKLQl1X2NoYXIgYnVmWzY0XTsKKwlpbnQgcmV0OwogCXdpbl9yZXFfdCByZXE7Ci0JbWVtcmVxX3QgbWFwOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwogCi0JREVCVUcoMCwgImxhYnBjX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAibGFicGNfY29uZmlnXG4iKTsKIAotCS8qCi0JICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCi0JICAgcmVnaXN0ZXJzLgotCSAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0JaWYgKGxhc3RfcmV0KSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7Ci0JaWYgKGxhc3RfcmV0KSB7Ci0JCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQotCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwotCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKLQotCS8qCi0JICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKLQkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCi0JICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgotCi0JICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKLQkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAotCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQotCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKLQkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCi0JICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgotCSAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQl3aGlsZSAoMSkgewotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKLQkJCWRmbHQgPSAqY2ZnOwotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQotCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgewotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotCQl9Ci0KLQkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0KLQkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfQotCi0JCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0Lm1lbS5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9tZW1fdCAqbWVtID0KLQkJCSAgICAoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC5tZW07Ci0JCQlyZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOwotCQkJcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkJCXJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwotCQkJcmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47Ci0JCQlpZiAocmVxLlNpemUgPCAweDEwMDApCi0JCQkJcmVxLlNpemUgPSAweDEwMDA7Ci0JCQlyZXEuQWNjZXNzU3BlZWQgPSAwOwotCQkJbGluay0+d2luID0gKHdpbmRvd19oYW5kbGVfdCkgbGluazsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCW1hcC5QYWdlID0gMDsKLQkJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCQlicmVhazsKLQotbmV4dF9lbnRyeToKLQkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKLQkJaWYgKGxhc3RfcmV0KSB7Ci0JCQljc19lcnJvcihsaW5rLCBHZXROZXh0VHVwbGUsIGxhc3RfcmV0KTsKLQkJCWdvdG8gY3NfZmFpbGVkOwotCQl9CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGxhYnBjX3BjbWNpYV9jb25maWdfbG9vcCwgJnJlcSk7CisJaWYgKHJldCkgeworCQlkZXZfd2FybigmbGluay0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3VuZFxuIik7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qCkBAIC00NDIsMTEgKzM3Myw5IEBACiAJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KIAkgKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCQlpZiAobGFzdF9yZXQpIHsKLQkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKLQkJCWdvdG8gY3NfZmFpbGVkOwotCQl9CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qCkBAIC00NTQsMTEgKzM4Myw5IEBACiAJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JbGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQorCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQpAQCAtNDg2LDE0ICs0MTMsMTQgQEAKIAogCXJldHVybjsKIAotY3NfZmFpbGVkOgorZmFpbGVkOgogCWxhYnBjX3JlbGVhc2UobGluayk7CiAKIH0JCQkJLyogbGFicGNfY29uZmlnICovCiAKIHN0YXRpYyB2b2lkIGxhYnBjX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JREVCVUcoMCwgImxhYnBjX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgImxhYnBjX3JlbGVhc2VcbiIpOwogCiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQkJCQkvKiBsYWJwY19yZWxlYXNlICovCkBAIC01NTEsMTQgKzQ3OCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2xhYnBjX2NzKHZvaWQpCiB7Ci0JREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKIAlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZsYWJwY19jc19kcml2ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9sYWJwY19jcyh2b2lkKQogewotCURFQlVHKDAsICJuaV9sYWJwYzogdW5sb2FkaW5nXG4iKTsKIAlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmxhYnBjX2NzX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCmluZGV4IGUzZmZiMDYuLjc1M2VlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogLyogI2RlZmluZSBERUJVR19TVEFUVVNfQiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICI4MjU1LmgiCiAjaW5jbHVkZSAibWl0ZS5oIgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCmluZGV4IDlhZWY4N2YuLmQ2OTJmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKQEAgLTI3NCw3ICsyNzQsNiBAQAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKQEAgLTMxMiw5NiArMzExLDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIGludCBtaW9fcGNtY2lhX2NvbmZpZ19sb29wKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgYmFzZSwgcmV0OworCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisKKwlmb3IgKGJhc2UgPSAweDAwMDsgYmFzZSA8IDB4NDAwOyBiYXNlICs9IDB4MjApIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGJhc2U7CisJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKwogc3RhdGljIHZvaWQgbWlvX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQl0dXBsZV90IHR1cGxlOwotCXVfc2hvcnQgYnVmWzEyOF07Ci0JY2lzcGFyc2VfdCBwYXJzZTsKLQlpbnQgbWFuZmlkID0gMCwgcHJvZGlkID0gMDsKIAlpbnQgcmV0OwogCiAJRFBSSU5USygibWlvX2NzX2NvbmZpZyhsaW5rPSVwKVxuIiwgbGluayk7CiAKLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKLQlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKLQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKLQlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07Ci0KLSNpZiAwCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTiB8IFRVUExFX1JFVFVSTl9MSU5LOwotCWluZm8tPm11bHRpKGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSA9PSAwKTsKLSNlbmRpZgotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLQlpZiAoKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSAwKSAmJgotCSAgICAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgPT0gMCkpIHsKLQkJbWFuZmlkID0gbGUxNl90b19jcHUoYnVmWzBdKTsKLQkJcHJvZGlkID0gbGUxNl90b19jcHUoYnVmWzFdKTsKLQl9Ci0JLyogcHJpbnRrKCJtYW5maWQgPSAweCUwNHgsIDB4JTA0eFxuIixtYW5maWQscHJvZGlkKTsgKi8KLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwotCi0jaWYgMAotCXByaW50aygiIGluZGV4OiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4KTsKLQlwcmludGsoIiBmbGFnczogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5mbGFncyk7Ci0JcHJpbnRrKCIgaW8gZmxhZ3M6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MpOwotCXByaW50aygiIGlvIG53aW46IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW8ubndpbik7Ci0JcHJpbnRrKCIgaW8gYmFzZTogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZSk7Ci0JcHJpbnRrKCIgaW8gbGVuOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW4pOwotCXByaW50aygiIGlycTE6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaXJxLklSUUluZm8xKTsKLQlwcmludGsoIiBpcnEyOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMik7Ci0JcHJpbnRrKCIgbWVtIGZsYWdzOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS5mbGFncyk7Ci0JcHJpbnRrKCIgbWVtIG53aW46IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkubWVtLm53aW4pOwotCXByaW50aygiIHN1YnR1cGxlczogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5zdWJ0dXBsZXMpOwotI2VuZGlmCi0KLSNpZiAwCi0JbGluay0+aW8uTnVtUG9ydHMxID0gMHgyMDsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7Ci0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSNlbmRpZgotCWxpbmstPmlvLk51bVBvcnRzMSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbjsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9Ci0JICAgIHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCi0JewotCQlpbnQgYmFzZTsKLQkJZm9yIChiYXNlID0gMHgwMDA7IGJhc2UgPCAweDQwMDsgYmFzZSArPSAweDIwKSB7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlOwotCQkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCS8qIHByaW50aygiUmVxdWVzdElPIDB4JTAyeFxuIixyZXQpOyAqLwotCQkJaWYgKCFyZXQpCi0JCQkJYnJlYWs7Ci0JCX0KKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgbWlvX3BjbWNpYV9jb25maWdfbG9vcCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfd2FybigmbGluay0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3VuZFxuIik7CisJCXJldHVybjsKIAl9CiAKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMTsKLQlsaW5rLT5pcnEuSVJRSW5mbzIgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMjsKIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoInBjbWNpYV9yZXF1ZXN0X2lycSgpIHJldHVybmVkIGVycm9yOiAlaVxuIiwgcmV0KTsKIAl9Ci0JLyogcHJpbnRrKCJSZXF1ZXN0SVJRIDB4JTAyeFxuIixyZXQpOyAqLwotCi0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CiAKIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQkvKiBwcmludGsoIlJlcXVlc3RDb25maWd1cmF0aW9uICVkXG4iLHJldCk7ICovCiAKIAlsaW5rLT5kZXZfbm9kZSA9ICZkZXZfbm9kZTsKIH0KQEAgLTQ3NSw0MCArNDI1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3Byb2RpZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKLXsKLQl0dXBsZV90IHR1cGxlOwotCXVfc2hvcnQgYnVmWzEyOF07Ci0JaW50IHByb2RpZCA9IDA7Ci0KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0JaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgJiYKLQkgICAgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IDApKSB7Ci0JCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7Ci0JfQotCi0JcmV0dXJuIHByb2RpZDsKLX0KLQogc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCWludCBpZDsKIAlpbnQgaTsKIAotCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOwotCiAJZm9yIChpID0gMDsgaSA8IG5fbmlfYm9hcmRzOyBpKyspIHsKLQkJaWYgKG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gaWQpIHsKKwkJaWYgKG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gbGluay0+Y2FyZF9pZCkKIAkJCXJldHVybiBpOwotCQl9CiAJfQogCi0JcHJpbnRrKCJ1bmtub3duIGJvYXJkIDB4JTA0eCAtLSBwcmV0ZW5kIGl0IGlzIGEgIiwgaWQpOworCXByaW50aygidW5rbm93biBib2FyZCAweCUwNHggLS0gcHJldGVuZCBpdCBpcyBhICIsIGxpbmstPmNhcmRfaWQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggNTJiMmVjYS4uZDU0NDY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogLyogI2RlZmluZSBERUJVR19GTEFHUyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAogI2luY2x1ZGUgIm1pdGUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwppbmRleCAzNDRiODIzLi41MjU2ZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCkBAIC01NSwyMyArNTUsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KIAotLyoKLSAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCi0gICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQotICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCi0gICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKLSAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KLSovCi0KLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJxdWF0ZWNoX2RhcXBfY3MuYyAxLjEwIDIwMDMvMDQvMjEgKEJyZW50IEJhY2NhbGEpIjsKLSNlbHNlCi0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCi0jZW5kaWYKLQogLyogTWF4aW11bSBudW1iZXIgb2Ygc2VwYXJhdGUgREFRUCBkZXZpY2VzIHdlJ2xsIGFsbG93ICovCiAjZGVmaW5lIE1BWF9ERVYgICAgICAgICA0CiAKQEAgLTg2Myw4ICs4NDYsNiBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBkZXZfdGFibGVbaXQtPm9wdGlvbnNbMF1dOwotCXR1cGxlX3QgdHVwbGU7Ci0JaW50IGk7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoaXQtPm9wdGlvbnNbMF0gPCAwIHx8IGl0LT5vcHRpb25zWzBdID49IE1BWF9ERVYgfHwgIWxvY2FsKSB7CkBAIC04ODMsMjkgKzg2NCwxMCBAQAogCiAJc3RyY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCAiREFRUCIpOwogCWRldi0+Ym9hcmRfbmFtZSA9IGxvY2FsLT5ib2FyZF9uYW1lOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7Ci0JCXVfY2hhciBidWZbMTI4XTsKLQotCQlidWZbMF0gPSBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7Ci0JCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMjsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0OyBpKyspCi0JCQkJaWYgKGJ1ZltpXSA9PSAwKQotCQkJCQlicmVhazsKLQkJCWZvciAoaSsrOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuIC0gNDsgaSsrKQotCQkJCWlmIChidWZbaV0gPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQlpKys7Ci0JCQlpZiAoKGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0KQotCQkJICAgICYmIChzdHJuY21wKGJ1ZiArIGksICJEQVFQIiwgNCkgPT0gMCkpIHsKLQkJCQlzdHJuY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCBidWYgKyBpLAotCQkJCQlzaXplb2YobG9jYWwtPmJvYXJkX25hbWUpKTsKLQkJCX0KKwlpZiAobG9jYWwtPmxpbmstPnByb2RfaWRbMl0pIHsKKwkJaWYgKHN0cm5jbXAobG9jYWwtPmxpbmstPnByb2RfaWRbMl0sICJEQVFQIiwgNCkgPT0gMCkgeworCQkJc3RybmNweShsb2NhbC0+Ym9hcmRfbmFtZSwgbG9jYWwtPmxpbmstPnByb2RfaWRbMl0sCisJCQkJc2l6ZW9mKGxvY2FsLT5ib2FyZF9uYW1lKSk7CiAJCX0KIAl9CiAKQEAgLTEwNTgsNyArMTAyMCw3IEBACiAJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWw7CiAJaW50IGk7CiAKLQlERUJVRygwLCAiZGFxcF9jc19hdHRhY2goKVxuIik7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGFxcF9jc19hdHRhY2goKVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFVjsgaSsrKQogCQlpZiAoZGV2X3RhYmxlW2ldID09IE5VTEwpCkBAIC0xMDc5LDEwICsxMDQxLDggQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBkYXFwX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBsb2NhbDsKIAogCS8qCiAJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKQEAgLTExMTIsNyArMTA3Miw3IEBACiB7CiAJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKIAotCURFQlVHKDAsICJkYXFwX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiZGFxcF9jc19kZXRhY2hcbiIpOwogCiAJaWYgKGxpbmstPmRldl9ub2RlKSB7CiAJCWRldi0+c3RvcCA9IDE7CkBAIC0xMTM0LDExNSArMTA5NCw1NCBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorCitzdGF0aWMgaW50IGRhcXBfcGNtY2lhX2NvbmZpZ19sb29wKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwl9CisKKwkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyB2b2lkIGRhcXBfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBsYXN0X3JldDsKLQl1X2NoYXIgYnVmWzY0XTsKKwlpbnQgcmV0OwogCi0JREVCVUcoMCwgImRhcXBfY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkYXFwX2NzX2NvbmZpZ1xuIik7CiAKLQkvKgotCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgotCSAgIHJlZ2lzdGVycy4KLQkgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0KLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQotCi0JbGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwotCWlmIChsYXN0X3JldCkgewotCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7Ci0JCWdvdG8gY3NfZmFpbGVkOwotCX0KLQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKLQlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07Ci0KLQkvKgotCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCi0JICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZwotCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KLQotCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCi0JICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKLQkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKLQkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCi0JICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycwotCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KLQkgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOwotCQlnb3RvIGNzX2ZhaWxlZDsKLQl9Ci0KLQl3aGlsZSAoMSkgewotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0KLQkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQl9Ci0KLQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCQlicmVhazsKLQotbmV4dF9lbnRyeToKLQkJbGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKTsKLQkJaWYgKGxhc3RfcmV0KSB7Ci0JCQljc19lcnJvcihsaW5rLCBHZXROZXh0VHVwbGUsIGxhc3RfcmV0KTsKLQkJCWdvdG8gY3NfZmFpbGVkOwotCQl9CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGRhcXBfcGNtY2lhX2NvbmZpZ19sb29wLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKCZsaW5rLT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvdW5kXG4iKTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTEyNTEsMTEgKzExNTAsOSBAQAogCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCiAJICovCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewotCQlsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQkJaWYgKGxhc3RfcmV0KSB7Ci0JCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBsYXN0X3JldCk7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKgpAQCAtMTI2MywxMSArMTE2MCw5IEBACiAJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQogCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJICovCi0JbGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAobGFzdF9yZXQpIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGxhc3RfcmV0KTsKLQkJZ290byBjc19mYWlsZWQ7Ci0JfQorCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQpAQCAtMTI5NiwxNCArMTE5MSwxNCBAQAogCiAJcmV0dXJuOwogCi1jc19mYWlsZWQ6CitmYWlsZWQ6CiAJZGFxcF9jc19yZWxlYXNlKGxpbmspOwogCiB9CQkJCS8qIGRhcXBfY3NfY29uZmlnICovCiAKIHN0YXRpYyB2b2lkIGRhcXBfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAiZGFxcF9jc19yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJkYXFwX2NzX3JlbGVhc2VcbiIpOwogCiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQkJCQkvKiBkYXFwX2NzX3JlbGVhc2UgKi8KQEAgLTEzNjMsNyArMTI1OCw2IEBACiAKIGludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOwogCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmRhcXBfY3NfZHJpdmVyKTsKIAljb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFxcCk7CiAJcmV0dXJuIDA7CkBAIC0xMzcxLDcgKzEyNjUsNiBAQAogCiB2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCURFQlVHKDAsICJkYXFwX2NzOiB1bmxvYWRpbmdcbiIpOwogCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhcXApOwogCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmZGFxcF9jc19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggNjI5NGQzOC4uMmMzZDY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogZXh0ZXJuIGlubGluZSB2b2lkIGFkZF8xMGJpdCh1MzIgKnYsIGludCBuKQogewotCSp2ID0gSU5ERVgxMCgqdiArIG4pOworCSp2ID0gSU5ERVgxMCgqdiArIG4pIHwgKCp2ICYgRVRfRE1BMTBfV1JBUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCA4ZjJlOTFmLi4xMGUyMWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTExNzcsMTIgKzExNzcsMjAgQEAKIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKIHsKLQl1MzIgdiA9ICpmYnI7Ci0JYWRkXzEwYml0KCZ2LCAxKTsKLQlpZiAodiA+IGxpbWl0KQotCQl2ID0gKCpmYnIgJiB+RVRfRE1BMTBfTUFTSykgXiBFVF9ETUExMF9XUkFQOwotCSpmYnIgPSB2OwotCXJldHVybiB2OworICAgICAgICB1MzIgdiA9ICpmYnI7CisgICAgICAgIHYrKzsKKyAgICAgICAgLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQorICAgICAgICAgICB3b3JrcyBiZWNhdXNlIDEwMjMrKyBpcyAxMDI0IHdoaWNoIG1lYW5zIHRoZSBpZiBjb25kaXRpb24gaXMgbm90CisgICAgICAgICAgIHRha2VuIGJ1dCB0aGUgY2Fycnkgb2YgdGhlIGJpdCBpbnRvIHRoZSB3cmFwIGJpdCB0b2dnbGVzIHRoZSB3cmFwCisgICAgICAgICAgIHZhbHVlIGNvcnJlY3RseSAqLworICAgICAgICBpZiAoKHYgJiBFVF9ETUExMF9NQVNLKSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgdiAmPSB+RVRfRE1BMTBfTUFTSzsKKyAgICAgICAgICAgICAgICB2IF49IEVUX0RNQTEwX1dSQVA7CisgICAgICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSAxMDIzIGNhc2UgKi8KKyAgICAgICAgdiAmPSAoRVRfRE1BMTBfTUFTS3xFVF9ETUExMF9XUkFQKTsKKyAgICAgICAgKmZiciA9IHY7CisgICAgICAgIHJldHVybiB2OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwppbmRleCA4Yzg1YTljLi5mNGE2NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogCW1lbXNldChidWYsIDB4Y2QsIDYpOwogCXVzYiA9IGdvLT5ocGlfY29udGV4dDsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOwogCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLUVJTlRSOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQl1cCgmdXNiLT5pMmNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2ItPmkyY19sb2NrKTsKIAogCSp2YWwgPSAoYnVmWzBdIDw8IDgpIHwgYnVmWzFdOwogCWtmcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2MzMDFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9TMjI1MF9MT0FERVJfSF8KKyNkZWZpbmUgX1MyMjUwX0xPQURFUl9IXworCitleHRlcm4gaW50IHMyMjUwbG9hZGVyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzMjI1MGxvYWRlcl9jbGVhbnVwKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9CbGtWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9CbGtWc2MuYwppbmRleCA1MWFhODYxLi5hNDhlZTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQmxrVnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0Jsa1ZzYy5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCiAgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsLmMKaW5kZXggZDY0OWVlMS4uNzQ2MzcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbC5jCkBAIC02MTEsNyArNjExLDcgQEAKIAogCS8qIFN0b3AgY2FsbGJhY2sgYW5kIGNhbmNlbCB0aGUgdGltZXIgYXNhcCAqLwogCUNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrID0gTlVMTDsKLQlkZWxfdGltZXIoJkNoYW5uZWwtPnBvbGxfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZDaGFubmVsLT5wb2xsX3RpbWVyKTsKIAogCS8qIFNlbmQgYSBjbG9zaW5nIG1lc3NhZ2UgKi8KIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pICsKQEAgLTk3OCwxNCArOTc4LDEwIEBACiB7CiAJRHVtcFZtYnVzQ2hhbm5lbChDaGFubmVsKTsKIAlBU1NFUlQoQ2hhbm5lbC0+T25DaGFubmVsQ2FsbGJhY2spOwotI2lmZGVmIEVOQUJMRV9QT0xMSU5HCi0JZGVsX3RpbWVyKCZDaGFubmVsLT5wb2xsX3RpbWVyKTsKKwogCUNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrKENoYW5uZWwtPkNoYW5uZWxDYWxsYmFja0NvbnRleHQpOwotCWNoYW5uZWwtPnBvbGxfdGltZXIuZXhwaXJlcyhqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDApOwotCWFkZF90aW1lcigmY2hhbm5lbC0+cG9sbF90aW1lcik7Ci0jZWxzZQotCUNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrKENoYW5uZWwtPkNoYW5uZWxDYWxsYmFja0NvbnRleHQpOwotI2VuZGlmCisKKwltb2RfdGltZXIoJkNoYW5uZWwtPnBvbGxfdGltZXIsIGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMCkpOwogfQogCiAvKioKQEAgLTk5NywxMCArOTkzLDYgQEAKIAogCWlmIChjaGFubmVsLT5PbkNoYW5uZWxDYWxsYmFjaykgewogCQljaGFubmVsLT5PbkNoYW5uZWxDYWxsYmFjayhjaGFubmVsLT5DaGFubmVsQ2FsbGJhY2tDb250ZXh0KTsKLSNpZmRlZiBFTkFCTEVfUE9MTElORwotCQljaGFubmVsLT5wb2xsX3RpbWVyLmV4cGlyZXMoamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwKTsKLQkJYWRkX3RpbWVyKCZjaGFubmVsLT5wb2xsX3RpbWVyKTsKLSNlbmRpZgogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuYwppbmRleCAzZGI2MmNhLi5lZjM4NDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAgKi8KIHZvaWQgRnJlZVZtYnVzQ2hhbm5lbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqQ2hhbm5lbCkKIHsKLQlkZWxfdGltZXIoJkNoYW5uZWwtPnBvbGxfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZDaGFubmVsLT5wb2xsX3RpbWVyKTsKIAogCS8qCiAJICogV2UgaGF2ZSB0byByZWxlYXNlIHRoZSBjaGFubmVsJ3Mgd29ya3F1ZXVlL3RocmVhZCBpbiB0aGUgdm1idXMncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAppbmRleCBhODM5ZDhmLi5mYTk3M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBfQ0hBTk5FTF9NR01UX0hfCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiVm1idXNDaGFubmVsSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiVm1idXNQYWNrZXRGb3JtYXQuaCIKQEAgLTU0LDcgKzU1LDcgQEAKIAlDaGFubmVsTWVzc2FnZVZpZXdSYW5nZVJlbW92ZQkJPSAxOCwKICNlbmRpZgogCUNoYW5uZWxNZXNzYWdlQ291bnQKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiBzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciB7CiAJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBNZXNzYWdlVHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwppbmRleCAxNjEwYjg0Li4xYzcxN2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCiAgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDUyLDcgKzEwNTMsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QsICZsaXN0SGVhZCk7CisJCWxpc3RfbW92ZV90YWlsKG5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QubmV4dCwgJmxpc3RIZWFkKTsKIAkJaWYgKCsrY291bnQgPT0gdm14ZmVycGFnZVBhY2tldC0+UmFuZ2VDb3VudCArIDEpCiAJCQlicmVhazsKIAl9CkBAIC0xMDcxLDcgKzEwNzIsNyBAQAogCQkvKiBSZXR1cm4gaXQgdG8gdGhlIGZyZWVsaXN0ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZsaXN0SGVhZCwKKwkJCWxpc3RfbW92ZV90YWlsKGxpc3RIZWFkLm5leHQsCiAJCQkJICAgICAgICZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywKQEAgLTEwODUsOCArMTA4Niw3IEBACiAJfQogCiAJLyogUmVtb3ZlIHRoZSAxc3QgcGFja2V0IHRvIHJlcHJlc2VudCB0aGUgeGZlciBwYWdlIHBhY2tldCBpdHNlbGYgKi8KLQl4ZmVycGFnZVBhY2tldCA9IGxpc3RfZW50cnkoJmxpc3RIZWFkLCBzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0LAotCQkJCSAgICBMaXN0RW50cnkpOworCXhmZXJwYWdlUGFja2V0ID0gKHN0cnVjdCB4ZmVycGFnZV9wYWNrZXQqKWxpc3RIZWFkLm5leHQ7CiAJbGlzdF9kZWwoJnhmZXJwYWdlUGFja2V0LT5MaXN0RW50cnkpOwogCiAJLyogVGhpcyBpcyBob3cgbXVjaCB3ZSBjYW4gc2F0aXNmeSAqLwpAQCAtMTEwMiw4ICsxMTAyLDcgQEAKIAogCS8qIEVhY2ggcmFuZ2UgcmVwcmVzZW50cyAxIFJORElTIHBrdCB0aGF0IGNvbnRhaW5zIDEgZXRoZXJuZXQgZnJhbWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGNvdW50IC0gMSk7IGkrKykgewotCQluZXR2c2NQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IGh2X25ldHZzY19wYWNrZXQsCi0JCQkJCSAgTGlzdEVudHJ5KTsKKwkJbmV0dnNjUGFja2V0ID0gKHN0cnVjdCBodl9uZXR2c2NfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCQlsaXN0X2RlbCgmbmV0dnNjUGFja2V0LT5MaXN0RW50cnkpOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIG5ldHZzYyBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuaAppbmRleCAzZTcxMTJmLi42ZTBlMDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5oCkBAIC0xNiw2ICsxNiw3IEBACiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCiAgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjLmMKaW5kZXggMTQwMTVjOS4uMmY3YzQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzYy5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkgKiBOb3csIGluaXRpYXRlIHRoZSB2c2MvdnNwIGluaXRpYWxpemF0aW9uIHByb3RvY29sIG9uIHRoZSBvcGVuCiAJICogY2hhbm5lbAogCSAqLwotCW1lbXNldChyZXF1ZXN0LCBzaXplb2Yoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24pLCAwKTsKKwltZW1zZXQocmVxdWVzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uKSk7CiAJcmVxdWVzdC0+V2FpdEV2ZW50ID0gb3NkX1dhaXRFdmVudENyZWF0ZSgpOwogCiAJdnN0b3JQYWNrZXQtPk9wZXJhdGlvbiA9IFZTdG9yT3BlcmF0aW9uQmVnaW5Jbml0aWFsaXphdGlvbjsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCURQUklOVF9JTkZPKFNUT1JWU0MsICJRVUVSWV9QUk9UT0NPTF9WRVJTSU9OX09QRVJBVElPTi4uLiIpOwogCiAJLyogcmV1c2UgdGhlIHBhY2tldCBmb3IgdmVyc2lvbiByYW5nZSBzdXBwb3J0ZWQgKi8KLQltZW1zZXQodnN0b3JQYWNrZXQsIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwgMCk7CisJbWVtc2V0KHZzdG9yUGFja2V0LCAwLCBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCkpOwogCXZzdG9yUGFja2V0LT5PcGVyYXRpb24gPSBWU3Rvck9wZXJhdGlvblF1ZXJ5UHJvdG9jb2xWZXJzaW9uOwogCXZzdG9yUGFja2V0LT5GbGFncyA9IFJFUVVFU1RfQ09NUExFVElPTl9GTEFHOwogCkBAIC0yNjYsNyArMjY2LDcgQEAKIAkvKiBRdWVyeSBjaGFubmVsIHByb3BlcnRpZXMgKi8KIAlEUFJJTlRfSU5GTyhTVE9SVlNDLCAiUVVFUllfUFJPUEVSVElFU19PUEVSQVRJT04uLi4iKTsKIAotCW1lbXNldCh2c3RvclBhY2tldCwgc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLCAwKTsKKwltZW1zZXQodnN0b3JQYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSk7CiAJdnN0b3JQYWNrZXQtPk9wZXJhdGlvbiA9IFZTdG9yT3BlcmF0aW9uUXVlcnlQcm9wZXJ0aWVzOwogCXZzdG9yUGFja2V0LT5GbGFncyA9IFJFUVVFU1RfQ09NUExFVElPTl9GTEFHOwogCXZzdG9yUGFja2V0LT5TdG9yYWdlQ2hhbm5lbFByb3BlcnRpZXMuUG9ydE51bWJlciA9CkBAIC0zMDUsNyArMzA1LDcgQEAKIAogCURQUklOVF9JTkZPKFNUT1JWU0MsICJFTkRfSU5JVElBTElaQVRJT05fT1BFUkFUSU9OLi4uIik7CiAKLQltZW1zZXQodnN0b3JQYWNrZXQsIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwgMCk7CisJbWVtc2V0KHZzdG9yUGFja2V0LCAwLCBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCkpOwogCXZzdG9yUGFja2V0LT5PcGVyYXRpb24gPSBWU3Rvck9wZXJhdGlvbkVuZEluaXRpYWxpemF0aW9uOwogCXZzdG9yUGFja2V0LT5GbGFncyA9IFJFUVVFU1RfQ09NUExFVElPTl9GTEFHOwogCkBAIC01MDgsNyArNTA4LDcgQEAKIAlpbnQgcmV0OwogCiAJc3RvckRyaXZlciA9IChzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICopRGV2aWNlLT5Ecml2ZXI7Ci0JbWVtc2V0KCZwcm9wcywgc2l6ZW9mKHN0cnVjdCB2bXN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzKSwgMCk7CisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCB2bXN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzKSk7CiAKIAkvKiBPcGVuIHRoZSBjaGFubmVsICovCiAJcmV0ID0gRGV2aWNlLT5Ecml2ZXItPlZtYnVzQ2hhbm5lbEludGVyZmFjZS5PcGVuKERldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KaW5kZXggNGQzOTBiMi4uZGJmYmRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KQEAgLTEsMTEgKzEsMTcgQEAKIFRPRE86CiAJLSBmaXggcmVtYWluaW5nIGNoZWNrcGF0Y2ggd2FybmluZ3MgYW5kIGVycm9ycworCS0gdXNlIG9mIC8qKiB3aGVuIGl0IGlzIG5vdCBhIGtlcm5lbGRvYyBoZWFkZXIKIAktIHJlbW92ZSBSaW5nQnVmZmVyLmMgdG8gdXMgaW4ta2VybmVsIHJpbmdidWZmZXIgZnVuY3Rpb25zIGluc3RlYWQuCiAJLSBhdWRpdCB0aGUgdm1idXMgdG8gdmVyaWZ5IGl0IGlzIHdvcmtpbmcgcHJvcGVybHkgd2l0aCB0aGUKIAkgIGRyaXZlciBtb2RlbAorCS0gY29udmVydCB2bWJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzCisgICAgICAgICAgdG8gY29uc3RhbnQsIGEuay5hIHZtYnVzX29wcwogCS0gc2VlIGlmIHRoZSB2bWJ1cyBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIG90aGVyIHZpcnR1YWwgYnVzc2VzCiAJICBpbiB0aGUga2VybmVsCiAJLSBhdWRpdCB0aGUgbmV0d29yayBkcml2ZXIKKwkgIC0gdXNlIGV4aXN0aW5nIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0IGluIG5ldHdvcmsgZGV2aWNlCisJICAtIGNoZWNraW5nIGZvciBjYXJyaWVyIGluc2lkZSBvcGVuIGlzIHdyb25nLCBuZXR3b3JrIGRldmljZSBBUEkKKyAgICAgICAgICAgIGNvbmZ1c2lvbj8/CiAJLSBhdWRpdCB0aGUgYmxvY2sgZHJpdmVyCiAJLSBhdWRpdCB0aGUgc2NzaSBkcml2ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggOTljNDkyNi4uNjJiMjgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCiAgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMzE5MmQ1MC4uMGQ3NDU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCiAgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCmluZGV4IDhmZTU0M2IuLjNhNDc5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCmluZGV4IDk1MDQ2MDQuLmNlMDY0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgX09TRF9IXwogI2RlZmluZSBfT1NEX0hfCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyogRGVmaW5lcyAqLwogI2RlZmluZSBBTElHTl9VUCh2YWx1ZSwgYWxpZ24pCSgoKHZhbHVlKSAmIChhbGlnbi0xKSkgPwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IDU4MjMxOGYuLjg5NGVlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTUwNywxMiArNTA3LDEyIEBACiAKIAljaGlsZF9kZXZpY2Vfb2JqID0gJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9vYmo7CiAJY2hpbGRfZGV2aWNlX29iai0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VUeXBlLCAmdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgJmluc3RhbmNlLAorCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisJbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgaW5zdGFuY2UsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCi0JbWVtY3B5KCZjaGlsZF9kZXZpY2VfY3R4LT5jbGFzc19pZCwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCAmaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCBpbnN0YW5jZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCkBAIC01MzcsMTggKzUzNyw3IEBACiAJRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCiAJCSAgIGNoaWxkX2RldmljZV9jdHgpOwogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgcmVnaXN0ZXJlZCBhbHJlYWR5ICovCi0JaWYgKHN0cmxlbihkZXZfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKSkgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKLQkJCSAgICJjaGlsZCBkZXZpY2UgKCVwKSBhbHJlYWR5IHJlZ2lzdGVyZWQgLSBidXNpZCAlcyIsCi0JCQkgICBjaGlsZF9kZXZpY2VfY3R4LAotCQkJICAgZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpOwotCi0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0JLyogU2V0IHRoZSBkZXZpY2UgYnVzIGlkLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3Rlcigpd2lsbCBmYWlsLiAqLworCS8qIFNldCB0aGUgZGV2aWNlIG5hbWUuIE90aGVyd2lzZSwgZGV2aWNlX3JlZ2lzdGVyKCkgd2lsbCBmYWlsLiAqLwogCWRldl9zZXRfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlLCAidm1idXNfMF8lZCIsCiAJCSAgICAgYXRvbWljX2luY19yZXR1cm4oJmRldmljZV9udW0pKTsKIApAQCAtNTczLDcgKzU2Miw2IEBACiAJCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyZWQiLAogCQkJICAgICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpOwogCi1DbGVhbnVwOgogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjIzLDggKzYxMSw2IEBACiBzdGF0aWMgaW50IHZtYnVzX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKLQlpbnQgaSA9IDA7Ci0JaW50IGxlbiA9IDA7CiAJaW50IHJldDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNjQ0LDggKzYzMCw2IEBACiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE0XSwKIAkJICAgIGRldmljZV9jdHgtPmNsYXNzX2lkLmRhdGFbMTVdKTsKIAotCWVudi0+ZW52cF9pZHggPSBpOwotCWVudi0+YnVmbGVuID0gbGVuOwogCXJldCA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIlZNQlVTX0RFVklDRV9DTEFTU19HVUlEPXsiCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKIAkJCSAgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4fSIsCkBAIC02OTEsOCArNjc1LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZW52LT5lbnZwW2Vudi0+ZW52cF9pZHhdID0gTlVMTDsKLQogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCAxZmExOGYyLi43NjhmNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgImlpby5oIgogI2luY2x1ZGUgInRyaWdnZXJfY29uc3VtZXIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKaW5kZXggNDIyMzBlNi4uMzFhNThlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBjb25zdCBldGh0b29sX29wcyBjdm1fb2N0X2V0aHRvb2xfb3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gY3ZtX29jdF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gY3ZtX29jdF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGN2bV9vY3Rfc2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKaW5kZXggNjYxOTBiMC4uMDBkYzBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCkBAIC0zMTcsNiArMzE3LDYgQEAKIAkJCWN2bXhfd3JpdGVfY3NyKENWTVhfU1BYWF9JTlRfTVNLKGludGVyZmFjZSksIDApOwogCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TVFhYX0lOVF9NU0soaW50ZXJmYWNlKSwgMCk7CiAJCX0KLQkJZnJlZV9pcnEoOCArIDQ2LCAmbnVtYmVyX3NwaV9wb3J0cyk7CisJCWZyZWVfaXJxKE9DVEVPTl9JUlFfUk1MLCAmbnVtYmVyX3NwaV9wb3J0cyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCmluZGV4IGI4NDc5NTEuLjQ5MmM1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKQEAgLTExMSw2ICsxMTEsMTYgQEAKIAkiXHRhbGxvd3MgcGFja2V0cyB0byBiZSBzZW50IHdpdGhvdXQgbG9jayBjb250ZW50aW9uIGluIHRoZSBwYWNrZXRcbiIKIAkiXHRzY2hlZHVsZXIgcmVzdWx0aW5nIGluIHNvbWUgY2FzZXMgaW4gaW1wcm92ZWQgdGhyb3VnaHB1dC5cbiIpOwogCisKKy8qCisgKiBUaGUgb2Zmc2V0IGZyb20gbWFjX2FkZHJfYmFzZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBwb3J0CisgKiB0aGF0IGlzIGNvbmZpZ3VyZWQuICBCeSBjb252ZW50aW9uLCBpZiBhbnkgbWdtdCBwb3J0cyBleGlzdCBvbiB0aGUKKyAqIGNoaXAsIHRoZXkgZ2V0IHRoZSBmaXJzdCBtYWMgYWRkcmVzc2VzLCBUaGUgcG9ydHMgY29udHJvbGxlZCBieQorICogdGhpcyBkcml2ZXIgYXJlIG51bWJlcmVkIHNlcXVlbmNpYWxseSBmb2xsb3dpbmcgYW55IG1nbXQgYWRkcmVzc2VzCisgKiB0aGF0IG1heSBleGlzdC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjdm1fb2N0X21hY19hZGRyX29mZnNldDsKKwogLyoqCiAgKiBQZXJpb2RpYyB0aW1lciB0byBjaGVjayBhdXRvIG5lZ290aWF0aW9uCiAgKi8KQEAgLTQ3NCwxNiArNDg0LDMwIEBACiAgKi8KIGludCBjdm1fb2N0X2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RhdGljIGludCBjb3VudDsKLQljaGFyIG1hY1s4XSA9IHsgMHgwMCwgMHgwMCwKLQkJb2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9iYXNlWzBdLAotCQlvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbMV0sCi0JCW9jdGVvbl9ib290aW5mby0+bWFjX2FkZHJfYmFzZVsyXSwKLQkJb2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9iYXNlWzNdLAotCQlvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbNF0sCi0JCW9jdGVvbl9ib290aW5mby0+bWFjX2FkZHJfYmFzZVs1XSArIGNvdW50Ci0JfTsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJdTY0IG1hYyA9ICgodTY0KShvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbMF0gJiAweGZmKSA8PCA0MCkgfAorCQkoKHU2NCkob2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9iYXNlWzFdICYgMHhmZikgPDwgMzIpIHwKKwkJKCh1NjQpKG9jdGVvbl9ib290aW5mby0+bWFjX2FkZHJfYmFzZVsyXSAmIDB4ZmYpIDw8IDI0KSB8CisJCSgodTY0KShvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbM10gJiAweGZmKSA8PCAxNikgfAorCQkoKHU2NCkob2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9iYXNlWzRdICYgMHhmZikgPDwgOCkgfAorCQkodTY0KShvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbNV0gJiAweGZmKTsKKworCW1hYyArPSBjdm1fb2N0X21hY19hZGRyX29mZnNldDsKKwlzYS5zYV9kYXRhWzBdID0gKG1hYyA+PiA0MCkgJiAweGZmOworCXNhLnNhX2RhdGFbMV0gPSAobWFjID4+IDMyKSAmIDB4ZmY7CisJc2Euc2FfZGF0YVsyXSA9IChtYWMgPj4gMjQpICYgMHhmZjsKKwlzYS5zYV9kYXRhWzNdID0gKG1hYyA+PiAxNikgJiAweGZmOworCXNhLnNhX2RhdGFbNF0gPSAobWFjID4+IDgpICYgMHhmZjsKKwlzYS5zYV9kYXRhWzVdID0gbWFjICYgMHhmZjsKKworCWlmIChjdm1fb2N0X21hY19hZGRyX29mZnNldCA+PSBvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2NvdW50KQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVzaW5nIE1BQyBvdXRzaWRlIG9mIHRoZSBhc3NpZ25lZCByYW5nZToiCisJCQkiICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBkZXYtPm5hbWUsCisJCQlzYS5zYV9kYXRhWzBdICYgMHhmZiwgc2Euc2FfZGF0YVsxXSAmIDB4ZmYsCisJCQlzYS5zYV9kYXRhWzJdICYgMHhmZiwgc2Euc2FfZGF0YVszXSAmIDB4ZmYsCisJCQlzYS5zYV9kYXRhWzRdICYgMHhmZiwgc2Euc2FfZGF0YVs1XSAmIDB4ZmYpOworCWN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0Kys7CiAKIAkvKgogCSAqIEZvcmNlIHRoZSBpbnRlcmZhY2UgdG8gdXNlIHRoZSBQT1cgc2VuZCBpZiBhbHdheXNfdXNlX3BvdwpAQCAtNDk2LDE0ICs1MjAsMTIgQEAKIAlpZiAocHJpdi0+cXVldWUgIT0gLTEgJiYgVVNFX0hXX1RDUFVEUF9DSEVDS1NVTSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CiAKLQljb3VudCsrOwotCiAJLyogV2UgZG8gb3VyIG93biBsb2NraW5nLCBMaW51eCBkb2Vzbid0IG5lZWQgdG8gKi8KIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmY3ZtX29jdF9ldGh0b29sX29wcyk7CiAKIAljdm1fb2N0X21kaW9fc2V0dXBfZGV2aWNlKGRldik7Ci0JZGV2LT5uZXRkZXZfb3BzLT5uZG9fc2V0X21hY19hZGRyZXNzKGRldiwgbWFjKTsKKwlkZXYtPm5ldGRldl9vcHMtPm5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCAmc2EpOwogCWRldi0+bmV0ZGV2X29wcy0+bmRvX2NoYW5nZV9tdHUoZGV2LCBkZXYtPm10dSk7CiAKIAkvKgpAQCAtNjIwLDYgKzY0MiwxMyBAQAogCiAJcHJfbm90aWNlKCJjYXZpdW0tZXRoZXJuZXQgJXNcbiIsIE9DVEVPTl9FVEhFUk5FVF9WRVJTSU9OKTsKIAorCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCkpCisJCWN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0ID0gMjsgLyogRmlyc3QgdHdvIGFyZSB0aGUgbWdtdCBwb3J0cy4gKi8KKwllbHNlIGlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkpCisJCWN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0ID0gMTsgLyogRmlyc3Qgb25lIGlzIHRoZSBtZ210IHBvcnQuICovCisJZWxzZQorCQljdm1fb2N0X21hY19hZGRyX29mZnNldCA9IDA7CisKIAljdm1fb2N0X3Byb2NfaW5pdGlhbGl6ZSgpOwogCWN2bV9vY3RfcnhfaW5pdGlhbGl6ZSgpOwogCWN2bV9vY3RfY29uZmlndXJlX2NvbW1vbl9odygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKaW5kZXggZDU0OWQwOC4uZjZjYzI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIE9UVVMKIAl0cmlzdGF0ZSAiQXRoZXJvcyBPVFVTIDgwMi4xMW4gVVNCIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgV0xBTl84MDIxMSAmJiBNQUM4MDIxMQorCWRlcGVuZHMgb24gVVNCICYmIFdMQU4gJiYgTUFDODAyMTEKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoZXJvcyA4MDIuMTFuIFVTQiBoYXJkd2FyZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggZGQ3ZDNmZC4uNGNlMzk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTIwNzEsMTEgKzIwNzEsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpCisJaWYgKGtleXBhZF9lbmFibGVkICYmIGtleXBhZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmtleXBhZF9kZXYpOworCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAotCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpCisJaWYgKGxjZF9lbmFibGVkICYmIGxjZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmxjZF9kZXYpOworCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAogCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHBwcnQpOwpAQCAtMjIxMSwxMyArMjIxNSwxNiBAQAogCQlkZWxfdGltZXIoJnNjYW5fdGltZXIpOwogCiAJaWYgKHBwcnQgIT0gTlVMTCkgewotCQlpZiAoa2V5cGFkX2VuYWJsZWQpCisJCWlmIChrZXlwYWRfZW5hYmxlZCkgewogCQkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJCWtleXBhZF9pbml0aWFsaXplZCA9IDA7CisJCX0KIAogCQlpZiAobGNkX2VuYWJsZWQpIHsKIAkJCXBhbmVsX2xjZF9wcmludCgiXHgwY0xDRCBkcml2ZXIgIiBQQU5FTF9WRVJTSU9OCiAJCQkJCSJcbnVubG9hZGVkLlx4MWJbTGNceDFiW0xiXHgxYltMLSIpOwogCQkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJCWxjZF9pbml0aWFsaXplZCA9IDA7CiAJCX0KIAogCQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKaW5kZXggMGQxMTFkZC4uMmViOGUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgInBvY2guaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCmluZGV4IDdmNDRlNWUuLmVmZTM4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQyODYwCiAJdHJpc3RhdGUgIlJhbGluayAyODYwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAyODYwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKaW5kZXggZmIxNzM1NS4uODU3ZmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwpAQCAtMzYzLDYgKzM2Myw4IEBACiAJVUxPTkcJCQlTd0lkeCA9IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHg7CiAKIAlwVHhEICA9IChQVFhEX1NUUlVDKSBwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLkFsbG9jVmE7CisJaWYgKCFwVHhEKQorCQlyZXR1cm4gMDsKIAogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5kaXNQYWNrZXQgPSBwUGFja2V0OwogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IDlkNTg5YzIuLjAxOWNjNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiBJTlQJU2hvd19TU0lEX1Byb2MoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKaW5kZXggYjM5NmE5Yi4uZWQyN2I4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKaW5kZXggNzY4NDFmNi4uYWVhNWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDI4NzAKIAl0cmlzdGF0ZSAiUmFsaW5rIDI4NzAvMzA3MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgeHg3MCB3aXJlbGVzcyBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwppbmRleCAyNTVlOGVhLi4yYjNmNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMzA5MAogCXRyaXN0YXRlICJSYWxpbmsgMzA5MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMzA5MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggNWJlMDcxNC4uM2U1MWU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0zNCw2ICszNCw3IEBACiAgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwppbmRleCBkMjI0MWVjLi45Yjk0YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgogCiBVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAyMzZlNDI3Li4yMDNjNzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxODdTRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxODdTRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvVE9ETwppbmRleCBjMDlhOTE2Li5hNzYyZTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9UT0RPCkBAIC0xMSw1ICsxMSw0IEBACiAtIHNwYXJzZSBmaXhlcwogLSBpbnRlZ3JhdGUgd2l0aCBkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4CiAKLVBsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAotQmFydGxvbWllaiBab2xuaWVya2lld2ljeiA8YnpvbG5pZXJAZ21haWwuY29tPi4KK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAwMTNjM2UxLi40YzVkNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTAgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNmZiZTQ4OS4uMTgzOTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMTg5LDEwICsxODksOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNTliMmFiNC4uMzM0ZTRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0yODM5LDE2ICsyODM5LDEyIEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTI4NjksNyArMjg2NSw3IEBACiAJCX0KIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA4ZDhiZGQwLi5hMDhiOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMzMxLDEyICszMzEsMTAgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQogCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChrZXkpOwogCiAJCWlmICghbmV3X2NyeXB0LT5vcHMgfHwgIW5ld19jcnlwdC0+cHJpdikgewpAQCAtNDgzLDcgKzQ4MSw3IEBACiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKICAgICAgICAgaW50IGksIGlkeCwgcmV0ID0gMDsKICAgICAgICAgaW50IGdyb3VwX2tleSA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFsZywgKm1vZHVsZTsKKyAgICAgICAgY29uc3QgY2hhciAqYWxnOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgKm9wczsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKQEAgLTUzOSwxNSArNTM3LDEyIEBACiAgICAgICAgIHN3aXRjaCAoZXh0LT5hbGcpIHsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiV0VQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3dlcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJUS0lQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3RraXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiQ0NNUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF9jY21wIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCkBAIC01NTgsMTAgKzU1Myw4IEBACiAvLwlwcmludGsoIjgtMDktMDgtOT09PT09PiVzLCBhbGcgbmFtZTolc1xuIixfX2Z1bmNfXywgYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUobW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC01ODEsNyArNTc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCmluZGV4IDMxMDBhYTUuLjM3ZTRmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxOTJFCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MkUgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAxYThlYThhLi5iMWM1NDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDE0ICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0jZWxzZQotCQkJX19NT0RfREVDX1VTRV9DT1VOVChlbnRyeS0+b3BzLT5vd25lcik7Ci0jZW5kaWYKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCAxNjI1NmEzLi4xMmMyYTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjQyLDE0ICsyNDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0jZWxzZQotCQkJCV9fTU9EX0RFQ19VU0VfQ09VTlQoY3J5cHQtPm9wcy0+b3duZXIpOwotI2VuZGlmCi0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCAyZmMwNGRmLi5lYWU3YzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0zMjg0LDE3ICszMjg0LDE0IEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQkJLy9zZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvciBXRVA0MCBhdCBvdGhlciBwbGFjZQotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCQkvKiBzZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvcgorCQkgKiBXRVA0MCBhdCBvdGhlciBwbGFjZSAqLworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMzMxNSwxMSArMzMxMiw3IEBACiAJCX0KIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2Vsc2UKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9pbmNfbW9kX2NvdW50KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZW5kaWYKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCAyMjM0ODMxLi40ZTM0YTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTQ4MiwxNSArNDgyLDkgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZWxzZQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X2luY19tb2RfY291bnQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbmRpZgorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChrZXkpOwogCiAJCWlmICghbmV3X2NyeXB0LT5vcHMgfHwgIW5ld19jcnlwdC0+cHJpdikgewpAQCAtNjQ0LDcgKzYzOCw3IEBACiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKICAgICAgICAgaW50IGksIGlkeDsKICAgICAgICAgaW50IGdyb3VwX2tleSA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFsZywgKm1vZHVsZTsKKyAgICAgICAgY29uc3QgY2hhciAqYWxnOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgKm9wczsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKQEAgLTcxMSwxNSArNzA1LDEyIEBACiAgICAgICAgIHN3aXRjaCAoZXh0LT5hbGcpIHsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiV0VQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3dlcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJUS0lQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3RraXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiQ0NNUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF9jY21wIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCkBAIC03MzAsMTAgKzcyMSw4IEBACiAJcHJpbnRrKCJhbGcgbmFtZTolc1xuIixhbGcpOwogCiAJIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0X21vZHVsZShtb2R1bGUpOworICAgICAgICBpZiAob3BzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKQEAgLTc1OCw3ICs3NDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPm9wcyA9IG9wczsKLSAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKyAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwppbmRleCA3NzBmNDEyLi5iOGM5NWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxOTJTVQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJTVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETwppbmRleCBiMTNiZTllLi5mMTFlZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPCkBAIC0xNCw1ICsxNCw0IEBACiAtIHNwYXJzZSBmaXhlcwogLSBpbnRlZ3JhdGUgd2l0aCBkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4CiAKLVBsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAotQmFydGxvbWllaiBab2xuaWVya2lld2ljeiA8YnpvbG5pZXJAZ21haWwuY29tPi4KK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCBkNzZhNTRkLi41MjFlN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTAgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+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+MCwKLX07Ci0KLSNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfTk9ORQotLyogI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19BTEwgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfUlggfCBERUJVR19JUlEpICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgc3RsYzQ1eHhfd2FybmluZyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZHVtcChsZXZlbCwgYnVmLCBsZW4pCQlcCi0JZG8geyBcCi0JCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCi0JCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBcCi0JCQkJICAgICAgIDE2LCAxLCBidWYsIGxlbiwgMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBNQUMyU1RSKGEpICgoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdKQotI2RlZmluZSBNQUNTVFIgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgotCi0vKiBCaXQgMTUgaXMgcmVhZC93cml0ZSBiaXQ7IE9OID0gUkVBRCwgT0ZGID0gV1JJVEUgKi8KLSNkZWZpbmUgQUREUl9SRUFEX0JJVF8xNSAgMHg4MDAwCi0KLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMgICAgIDB4MDAKLSNkZWZpbmUgU1BJX0FEUlNfQVJNX0lOVF9FTgkgICAgMHgwNAotCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyAgICAweDA4Ci0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0VOCSAgICAweDBjCi0jZGVmaW5lIFNQSV9BRFJTX0hPU1RfSU5UX0FDSwkgICAgMHgxMAotCi0jZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzEgICAJICAgIDB4MTQKLSNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMiAgIAkgICAgMHgxOAotCi0vKiBoaWdoIHdvcmQgKi8KLSNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCAgICAgIDB4MjYKLQotI2RlZmluZSBTUElfQURSU19ETUFfREFUQSAgICAgIAkgICAgMHgyOAotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMICAgICAweDJjCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4gICAgICAweDJlCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFICAgICAweDMwCi0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCAgICAgIDB4MzQKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfTEVOICAgICAgIDB4MzYKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1JFQURfQkFTRSAgICAgIDB4MzgKLQotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgMHg4MDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEICAweDQwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCAgICAgIDB4MjAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQgICAgMHgxMDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9DUFVfRU4gICAweDA4MDAKLQotI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFICAgMHgwMDAxCi0jZGVmaW5lIFNQSV9ETUFfUkVBRF9DVFJMX0VOQUJMRSAgICAweDAwMDEKLSNkZWZpbmUgSE9TVF9BTExPV0VEICAgICAgICAgICAgICAgICgxIDw8IDcpCi0KLSNkZWZpbmUgRklSTVdBUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAKLQotI2RlZmluZSBTUElfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwICAgICAgICAgLyogbXNlYyAqLwotCi0jZGVmaW5lIFNQSV9NQVhfVFhfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAzMgotCi0jZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAzMjc2NwotCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfQ1RTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfRFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLQotI2RlZmluZSBTUElfSE9TVF9JTlRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUElfSE9TVF9JTlRfU1dfVVBEQVRFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotCi0vKiBjbGVhciB0byBzZW5kICovCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9DVFMJICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLQotLyogZGF0YSByZWFkeSAqLwotI2RlZmluZSBTUElfSE9TVF9JTlRfRFIJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotCi0jZGVmaW5lIFNQSV9IT1NUX0lOVFNfREVGQVVMVCBcCi0JKFNQSV9IT1NUX0lOVF9SRUFEWSB8IFNQSV9IT1NUX0lOVF9VUERBVEUgfCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKQotCi0jZGVmaW5lIFRBUkdFVF9CT09UX1NMRUVQIDUwCi0KLS8qIFRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZGl2aWRlZCBpbnRvIHRocmVlIGFyZWFzOgotICoKLSAqIG8gY29uZmlnIGFyZWEgKGZvciBjb250cm9sIGNvbW1hbmRzKQotICogbyB0eCBidWZmZXIKLSAqIG8gcnggYnVmZmVyCi0gKi8KLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX1NUQVJUIDB4MjAyMDAKLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0VORCAweDI3YzYwCi0jZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQpCi0jZGVmaW5lIEZJUk1XQVJFX01UVSAzMjQwCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTiAxMDI0Ci0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19TVEFSVCBGSVJNV0FSRV9CVUZGRVJfU1RBUlQKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0xFTiAoc2l6ZW9mKHN0cnVjdCBzX2xtX2NvbnRyb2wpICsgXAotCQkJICAgICBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19FTkQgKEZJUk1XQVJFX0NPTkZJR19TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gKDUgKiBGSVJNV0FSRV9NVFUgKyAxMDI0KQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfRU5EIChGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCArIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4gLSAxKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCAoRklSTVdBUkVfQlVGRkVSX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfTEVOIC0gRklSTVdBUkVfQ09ORklHX0xFTiAtIFwKLQkJCSAgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0VORCAoRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKyBcCi0JCQkgICAgICAgRklSTVdBUkVfVFhCVUZGRVJfTEVOIC0gMSkKLQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9IRUFERVIgMTAwCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVIgNAotCi0vKiBGSVhNRTogY29tZSB1cCB3aXRoIGEgcHJvcGVyIHZhbHVlICovCi0jZGVmaW5lIE1BWF9GUkFNRV9MRU4gMjUwMAotCi0vKiB1bml0IGlzIG1zICovCi0jZGVmaW5lIFRYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKLSNkZWZpbmUgVFhfVElNRU9VVCA0MDAwCi0KLSNkZWZpbmUgU1VQUE9SVEVEX0NIQU5ORUxTIDEzCi0KLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiBvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgYnJhdGVtYXNrKSAtIFwgKi8KLS8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgY2hhbm5lbCkgKi8KLSNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIDI5MgotI2RlZmluZSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIENIQU5ORUxfQ0FMX0xFTikKLS8qIEZJWE1FICovCi0vKiAjZGVmaW5lIFJTU0lfQ0FMX0xFTiBzaXplb2Yoc3RydWN0IHNfbG1vX3NjYW4pIC0gXCAqLwotLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCByc3NpY2FsKSAqLwotI2RlZmluZSBSU1NJX0NBTF9MRU4gOAotI2RlZmluZSBSU1NJX0NBTF9BUlJBWV9MRU4gKFNVUFBPUlRFRF9DSEFOTkVMUyAqIFJTU0lfQ0FMX0xFTikKLQotc3RydWN0IHNfZG1hX3JlZ3MgewotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQl1bnNpZ25lZCBzaG9ydCBsZW47Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotfTsKLQotc3RydWN0IHN0bGM0NXh4X2llX3RpbSB7Ci0JdTggZHRpbV9jb3VudDsKLQl1OCBkdGltX3BlcmlvZDsKLQl1OCBibWFwX2NvbnRyb2w7Ci0JdTggcHZibWFwWzI1MV07Ci19OwotCi1zdHJ1Y3QgdHhidWZmZXIgewotCS8qIGNhbiBiZSByZW1vdmVkIHdoZW4gc3dpdGNoZWQgdG8gc2tiIHF1ZXVlICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9saXN0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfbGlzdDsKLQotCWludCBzdGFydDsKLQlpbnQgZnJhbWVfc3RhcnQ7Ci0JaW50IGVuZDsKLQotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIGhhbmRsZTsKLQotCWJvb2wgc3RhdHVzX25lZWRlZDsKLQotCWludCBoZWFkZXJfbGVuOwotCi0JLyogdW5pdCBqaWZmaWVzICovCi0JdW5zaWduZWQgbG9uZyBsaWZldGltZTsKLX07Ci0KLWVudW0gZndfc3RhdGUgewotCUZXX1NUQVRFX09GRiwKLQlGV19TVEFURV9CT09USU5HLAotCUZXX1NUQVRFX1JFQURZLAotCUZXX1NUQVRFX1JFU0VULAotCUZXX1NUQVRFX1JFU0VUVElORywKLX07Ci0KLXN0cnVjdCBzdGxjNDV4eCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19yZXNldDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcmtfdHhfdGltZW91dDsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZndfY29tcDsKLQotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQlpbnQgY2hhbm5lbDsKLQotCXU4ICpjYWxfcnNzaTsKLQl1OCAqY2FsX2NoYW5uZWxzOwotCi0JZW51bSBmd19zdGF0ZSBmd19zdGF0ZTsKLQotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eGJ1ZmZlcjsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9wZW5kaW5nOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlpbnQgdHhfcXVldWVfc3RvcHBlZDsKLQotCS8qIHByb3RlY3RlZCBieSBtdXRleCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhfc2VudDsKLQotCWludCB0eF9mcmFtZXM7Ci0KLQl1OCAqZnc7Ci0JaW50IGZ3X2xlbjsKLQotCWJvb2wgcHNtOwotCWJvb2wgYXNzb2NpYXRlZDsKLQlpbnQgYWlkOwotCWJvb2wgcHNwb2xsaW5nOwotfTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1ZGI4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogIFRoaXMgaXMgdGhlIExNQUMgQVBJIGludGVyZmFjZSBoZWFkZXIgZmlsZSBmb3IgU1RMQzQ1NjAuICAgICAgICAJKgotKiAgQ29weXJpZ2h0IChDKSAyMDA3IENvbmV4YW50IFN5c3RlbXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAgICAgKgotKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgKgotKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIJKgotKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgKgotKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YJKgotKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgKgotKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgKgotKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2xtYWNfaF9fCi0jZGVmaW5lIF9fbG1hY19oX18KLQotI2RlZmluZSBMTV9UT1BfVkFSSUFOVCAgICAgIDB4MDUwNgotI2RlZmluZSBMTV9CT1RUT01fVkFSSUFOVCAgIDB4MDUwNgotCi0vKgotICogTE1BQyAtIFVNQUMgaW50ZXJmYWNlIGRlZmluaXRpb246Ci0gKi8KLQotI2RlZmluZSBMTV9GTEFHX0NPTlRST0wgICAgIDB4ODAwMAotI2RlZmluZSBMTV9GTEFHX0FMSUdOICAgICAgIDB4NDAwMAotCi0jZGVmaW5lIExNX0NUUkxfT1BTRVQgICAgICAgMHgwMDAxCi0KLSNkZWZpbmUgTE1fT1VUX1BST01JU0MgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fT1VUX1RJTUVTVEFNUCAgICAweDAwMDIKLSNkZWZpbmUgTE1fT1VUX1NFUU5SICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fT1VUX0JVUlNUICAgICAgICAweDAwMTAKLSNkZWZpbmUgTE1fT1VUX05PQ0FOQ0VMICAgICAweDAwMjAKLSNkZWZpbmUgTE1fT1VUX0NMRUFSVElNICAgICAweDAwNDAKLSNkZWZpbmUgTE1fT1VUX0hJVENISElLRSAgICAweDAwODAKLSNkZWZpbmUgTE1fT1VUX0NPTVBSRVNTICAgICAweDAxMDAKLSNkZWZpbmUgTE1fT1VUX0NPTkNBVCAgICAgICAweDAyMDAKLSNkZWZpbmUgTE1fT1VUX1BDU19BQ0NFUFQgICAweDA0MDAKLSNkZWZpbmUgTE1fT1VUX1dBSVRFT1NQICAgICAweDA4MDAKLQotCi0jZGVmaW5lIExNX0FMT0ZUX1NQICAgICAgICAgMHgxMAotI2RlZmluZSBMTV9BTE9GVF9DVFMgICAgICAgIDB4MjAKLSNkZWZpbmUgTE1fQUxPRlRfUlRTICAgICAgICAweDQwCi0jZGVmaW5lIExNX0FMT0ZUX01BU0sgICAgICAgMHgxZgotI2RlZmluZSBMTV9BTE9GVF9SQVRFICAgICAgIDB4MGYKLQotI2RlZmluZSBMTV9JTl9GQ1NfR09PRCAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9JTl9NQVRDSF9NQUMgICAgIDB4MDAwMgotI2RlZmluZSBMTV9JTl9NQ0JDICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9JTl9CRUFDT04gICAgICAgIDB4MDAwOAotI2RlZmluZSBMTV9JTl9NQVRDSF9CU1MgICAgIDB4MDAxMAotI2RlZmluZSBMTV9JTl9CQ0FTVF9CU1MgICAgIDB4MDAyMAotI2RlZmluZSBMTV9JTl9EQVRBICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9JTl9UUlVOQ0FURUQgICAgIDB4MDA4MAotCi0jZGVmaW5lIExNX0lOX1RSQU5TUEFSRU5UICAgMHgwMjAwCi0KLSNkZWZpbmUgTE1fUVVFVUVfQkVBQ09OICAgICAwCi0jZGVmaW5lIExNX1FVRVVFX1NDQU4gICAgICAgMQotI2RlZmluZSBMTV9RVUVVRV9NR1QgICAgICAgIDIKLSNkZWZpbmUgTE1fUVVFVUVfTUNCQyAgICAgICAzCi0jZGVmaW5lIExNX1FVRVVFX0RBVEEgICAgICAgNAotI2RlZmluZSBMTV9RVUVVRV9EQVRBMCAgICAgIDQKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTEgICAgICA1Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEyICAgICAgNgotI2RlZmluZSBMTV9RVUVVRV9EQVRBMyAgICAgIDcKLQotI2RlZmluZSBMTV9TRVRVUF9JTkZSQSAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fU0VUVVBfSUJTUyAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1NFVFVQX1RSQU5TUEFSRU5UICAgIDB4MDAwOAotI2RlZmluZSBMTV9TRVRVUF9QUk9NSVNDVU9VUyAgICAweDAwMTAKLSNkZWZpbmUgTE1fU0VUVVBfSElCRVJOQVRFICAgICAgMHgwMDIwCi0jZGVmaW5lIExNX1NFVFVQX05PQUNLICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9TRVRVUF9SWF9ESVNBQkxFRCAgICAweDAwODAKLQotI2RlZmluZSBMTV9BTlRFTk5BXzAgICAgICAgICAgICAwCi0jZGVmaW5lIExNX0FOVEVOTkFfMSAgICAgICAgICAgIDEKLSNkZWZpbmUgTE1fQU5URU5OQV9ESVZFUlNJVFkgICAgMgotCi0jZGVmaW5lIExNX1RYX0ZBSUxFRCAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9UWF9QU00gICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fVFhfUFNNX0NBTkNFTExFRAkweDAwMDQKLQotI2RlZmluZSBMTV9TQ0FOX0VYSVQgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fU0NBTl9UUkFQICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1NDQU5fQUNUSVZFICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9TQ0FOX0ZJTFRFUiAgICAgICAgICAweDAwMDgKLQotI2RlZmluZSBMTV9QU00gICAgICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fUFNNX0RUSU0gICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1BTTV9NQ0JDICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9QU01fQ0hFQ0tTVU0gICAgICAgICAweDAwMDgKLSNkZWZpbmUgTE1fUFNNX1NLSVBfTU9SRV9EQVRBICAgMHgwMDEwCi0jZGVmaW5lIExNX1BTTV9CRUFDT05fVElNRU9VVCAgIDB4MDAyMAotI2RlZmluZSBMTV9QU01fSEZPU0xFRVAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgMHgwMDgwCi0jZGVmaW5lCUxNX1BTTV9MUElUCQkweDAxMDAKLSNkZWZpbmUgTE1fUFNNX0JGX1VDQVNUX1NLSVAgICAgMHgwMjAwCi0jZGVmaW5lIExNX1BTTV9CRl9NQ0FTVF9TS0lQICAgIDB4MDQwMAotCi0vKiBoZm9zbGVlcCAqLwotI2RlZmluZSBMTV9QU01fU0xFRVBfT1BUSU9OX01BU0sgKExNX1BTTV9BVVRPU1dJVENIX1NMRUVQIHwgTE1fUFNNX0hGT1NMRUVQKQotI2RlZmluZSBMTV9QU01fU0xFRVBfT1BUSU9OX1NISUZUICAgICAgIDYKLS8qIGhmb3NsZWVwZW5kICovCi0jZGVmaW5lIExNX1BTTV9CRl9PUFRJT05fTUFTSyAoTE1fUFNNX0JGX01DQVNUX1NLSVAgfCBMTV9QU01fQkZfVUNBU1RfU0tJUCkKLSNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9TSElGVCAgOQotCi0KLSNkZWZpbmUgTE1fUFJJVkFDQ19XRVAgICAgICAgICAgMHgwMQotI2RlZmluZSBMTV9QUklWQUNDX1RLSVAgICAgICAgICAweDAyCi0jZGVmaW5lIExNX1BSSVZBQ0NfTUlDSEFFTCAgICAgIDB4MDQKLSNkZWZpbmUgTE1fUFJJVkFDQ19DQ1hfS1AgICAgICAgMHgwOAotI2RlZmluZSBMTV9QUklWQUNDX0NDWF9NSUMgICAgICAweDEwCi0jZGVmaW5lIExNX1BSSVZBQ0NfQUVTX0NDTVAgICAgIDB4MjAKLQotLyogc2l6ZSBvZiBzX2xtX2Rlc2NyIGluIHdvcmRzICovCi0jZGVmaW5lIExNX0RFU0NSX1NJWkVfV09SRFMgICAgIDExCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi1lbnVtIHsKLSAgICBMTV9NT0RFX0NMSUVOVCA9IDAsCi0gICAgTE1fTU9ERV9BUAotfTsKLQotc3RydWN0IHNfbG1fZGVzY3IgewotICAgIHVpbnQxNl90IG1vZGVzOwotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQzMl90IGJ1ZmZlcl9zdGFydDsKLSAgICB1aW50MzJfdCBidWZmZXJfZW5kOwotICAgIHVpbnQ4X3QgaGVhZGVyOwotICAgIHVpbnQ4X3QgdHJhaWxlcjsKLSAgICB1aW50OF90IHR4X3F1ZXVlczsKLSAgICB1aW50OF90IHR4X2RlcHRoOwotICAgIHVpbnQ4X3QgcHJpdmFjeTsKLSAgICB1aW50OF90IHJ4X2tleWNhY2hlOwotICAgIHVpbnQ4X3QgdGltX3NpemU7Ci0gICAgdWludDhfdCBwYWQxOwotICAgIHVpbnQ4X3QgcmF0ZXNbMTZdOwotICAgIHVpbnQzMl90IGxpbms7Ci0JdWludDE2X3QgbXR1OwotfTsKLQotCi1zdHJ1Y3Qgc19sbV9jb250cm9sIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDMyX3QgaGFuZGxlOwotICAgIHVpbnQxNl90IG9pZDsKLSAgICB1aW50MTZfdCBwYWQ7Ci0gICAgLyogdWludDhfdCBkYXRhW107ICovCi19OwotCi1lbnVtIHsKLSAgICBMTV9QUklWX05PTkUgPSAwLAotICAgIExNX1BSSVZfV0VQLAotICAgIExNX1BSSVZfVEtJUCwKLSAgICBMTV9QUklWX1RLSVBNSUNIQUVMLAotICAgIExNX1BSSVZfQ0NYX1dFUE1JQywKLSAgICBMTV9QUklWX0NDWF9LUE1JQywKLSAgICBMTV9QUklWX0NDWF9LUCwKLSAgICBMTV9QUklWX0FFU19DQ01QCi19OwotCi1lbnVtIHsKLSAgICBMTV9ERUNSWVBUX05PTkUsCi0gICAgTE1fREVDUllQVF9PSywKLSAgICBMTV9ERUNSWVBUX05PS0VZLAotICAgIExNX0RFQ1JZUFRfTk9NSUNIQUVMLAotICAgIExNX0RFQ1JZUFRfTk9DS0lQTUlDLAotICAgIExNX0RFQ1JZUFRfRkFJTF9XRVAsCi0gICAgTE1fREVDUllQVF9GQUlMX1RLSVAsCi0gICAgTE1fREVDUllQVF9GQUlMX01JQ0hBRUwsCi0gICAgTE1fREVDUllQVF9GQUlMX0NLSVBLUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUE1JQywKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQUVTQ0NNUAotfTsKLQotc3RydWN0IHNfbG1fZGF0YV9vdXQgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBoYW5kbGU7Ci0gICAgdWludDE2X3QgYWlkOwotICAgIHVpbnQ4X3QgcnRzX3JldHJpZXM7Ci0gICAgdWludDhfdCByZXRyaWVzOwotICAgIHVpbnQ4X3QgYWxvZnRbOF07Ci0gICAgdWludDhfdCBhbG9mdF9jdHJsOwotICAgIHVpbnQ4X3QgY3J5cHRfb2Zmc2V0OwotICAgIHVpbnQ4X3Qga2V5dHlwZTsKLSAgICB1aW50OF90IGtleWxlbjsKLSAgICB1aW50OF90IGtleVsxNl07Ci0gICAgdWludDhfdCBxdWV1ZTsKLSAgICB1aW50OF90IGJhY2tsb2c7Ci0gICAgdWludDE2X3QgZHVyYXRpb25zWzRdOwotICAgIHVpbnQ4X3QgYW50ZW5uYTsKLSAgICB1aW50OF90IGN0czsKLSAgICBpbnQxNl90IHBvd2VyOwotICAgIHVpbnQ4X3QgcGFkWzJdOwotICAgIC8qdWludDhfdCBkYXRhW107Ki8KLX07Ci0KLSNkZWZpbmUgTE1fUkNQSV9JTlZBTElEICAgICAgICAgKDB4ZmYpCi0KLXN0cnVjdCBzX2xtX2RhdGFfaW4gewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MTZfdCBmcmVxdWVuY3k7Ci0gICAgdWludDhfdCBhbnRlbm5hOwotICAgIHVpbnQ4X3QgcmF0ZTsKLSAgICB1aW50OF90IHJjcGk7Ci0gICAgdWludDhfdCBzcTsKLSAgICB1aW50OF90IGRlY3J5cHQ7Ci0gICAgdWludDhfdCByc3NpX3JhdzsKLSAgICB1aW50MzJfdCBjbG9ja1syXTsKLSAgICAvKnVpbnQ4X3QgZGF0YVtdOyovCi19OwotCi11bmlvbiB1X2xtX2RhdGEgewotICAgIHN0cnVjdCBzX2xtX2RhdGFfb3V0IG91dDsKLSAgICBzdHJ1Y3Qgc19sbV9kYXRhX2luIGluOwotfTsKLQotZW51bSB7Ci0gICAgTE1fT0lEX1NFVFVQCT0gMCwKLSAgICBMTV9PSURfU0NBTgkJPSAxLAotICAgIExNX09JRF9UUkFQCQk9IDIsCi0gICAgTE1fT0lEX0VEQ0YJCT0gMywKLSAgICBMTV9PSURfS0VZQ0FDSEUJPSA0LAotICAgIExNX09JRF9QU00JCT0gNiwKLSAgICBMTV9PSURfVFhDQU5DRUwJPSA3LAotICAgIExNX09JRF9UWAkJPSA4LAotICAgIExNX09JRF9CVVJTVAk9IDksCi0gICAgTE1fT0lEX1NUQVRTCT0gMTAsCi0gICAgTE1fT0lEX0xFRAkJPSAxMywKLSAgICBMTV9PSURfVElNRVIJPSAxNSwKLSAgICBMTV9PSURfTkFWCQk9IDIwLAotICAgIExNX09JRF9QQ1MJCT0gMjIsCi0gICAgTE1fT0lEX0JUX0JBTEFOQ0VSICA9IDI4LAotICAgIExNX09JRF9HUk9VUF9BRERSRVNTX1RBQkxFCT0gMzAsCi0gICAgTE1fT0lEX0FSUFRBQkxFICAgICA9IDMxLAotICAgIExNX09JRF9CVF9PUFRJT05TID0gMzUKLX07Ci0KLWVudW0gewotICAgIExNX0ZST05URU5EX1VOS05PV04gPSAwLAotICAgIExNX0ZST05URU5EX0RVRVRURTMsCi0gICAgTE1fRlJPTlRFTkRfRFVFVFRFMiwKLSAgICBMTV9GUk9OVEVORF9GUklTQkVFLAotICAgIExNX0ZST05URU5EX0NST1NTQk9XLAotICAgIExNX0ZST05URU5EX0xPTkdCT1cKLX07Ci0KLQotI2RlZmluZSBJTlZBTElEX0xQRl9CQU5EV0lEVEggICAweGZmZmYKLSNkZWZpbmUgSU5WQUxJRF9PU0NfU1RBUlRfREVMQVkgMHhmZmZmCi0KLXN0cnVjdCBzX2xtb19zZXR1cCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDhfdCAgbWFjYWRkcls2XTsKLSAgICB1aW50OF90ICBic3NpZFs2XTsKLSAgICB1aW50OF90ICBhbnRlbm5hOwotICAgIHVpbnQ4X3QgIHJ4X2FsaWduOwotICAgIHVpbnQzMl90IHJ4X2J1ZmZlcjsKLSAgICB1aW50MTZfdCByeF9tdHU7Ci0gICAgdWludDE2X3QgZnJvbnRlbmQ7Ci0gICAgdWludDE2X3QgdGltZW91dDsKLSAgICB1aW50MTZfdCB0cnVuY2F0ZTsKLSAgICB1aW50MzJfdCBicmF0ZW1hc2s7Ci0gICAgdWludDhfdCAgc2Jzc19vZmZzZXQ7Ci0gICAgdWludDhfdCAgbWNhc3Rfd2luZG93OwotICAgIHVpbnQ4X3QgIHJ4X3Jzc2lfdGhyZXNob2xkOwotICAgIHVpbnQ4X3QgIHJ4X2VkX3RocmVzaG9sZDsKLSAgICB1aW50MzJfdCByZWZfY2xvY2s7Ci0gICAgdWludDE2X3QgbHBmX2JhbmR3aWR0aDsKLSAgICB1aW50MTZfdCBvc2Nfc3RhcnRfZGVsYXk7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19zY2FuIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBkd2VsbDsKLSAgICB1aW50OF90IGNoYW5uZWxbMjkyXTsKLSAgICB1aW50MzJfdCBicmF0ZW1hc2s7Ci0gICAgdWludDhfdCAgYWxvZnRbOF07Ci0gICAgdWludDhfdCAgcnNzaWNhbFs4XTsKLX07Ci0KLQotZW51bSB7Ci0gICAgTE1fVFJBUF9TQ0FOID0gMCwKLSAgICBMTV9UUkFQX1RJTUVSLAotICAgIExNX1RSQVBfQkVBQ09OX1RYLAotICAgIExNX1RSQVBfRkFBX1JBRElPX09OLAotICAgIExNX1RSQVBfRkFBX1JBRElPX09GRiwKLSAgICBMTV9UUkFQX1JBREFSLAotICAgIExNX1RSQVBfTk9fQkVBQ09OLAotICAgIExNX1RSQVBfVEJUVCwKLSAgICBMTV9UUkFQX1NDT19FTlRFUiwKLSAgICBMTV9UUkFQX1NDT19FWElUCi19OwotCi1zdHJ1Y3Qgc19sbW9fdHJhcCB7Ci0gICAgdWludDE2X3QgZXZlbnQ7Ci0gICAgdWludDE2X3QgZnJlcXVlbmN5OwotfTsKLQotc3RydWN0IHNfbG1vX3RpbWVyIHsKLSAgICB1aW50MzJfdCBpbnRlcnZhbDsKLX07Ci0KLXN0cnVjdCBzX2xtb19uYXYgewotICAgIHVpbnQzMl90IHBlcmlvZDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2VkY2ZfcXVldWU7Ci0KLXN0cnVjdCBzX2xtb19lZGNmIHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICBzbG90dGltZTsKLSAgICB1aW50OF90ICBzaWZzOwotICAgIHVpbnQ4X3QgIGVvZnBhZDsKLSAgICBzdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZSB7Ci0JICAgIHVpbnQ4X3QgIGFpZnM7Ci0JICAgIHVpbnQ4X3QgIHBhZDA7Ci0JICAgIHVpbnQxNl90IGN3bWluOwotCSAgICB1aW50MTZfdCBjd21heDsKLQkgICAgdWludDE2X3QgdHhvcDsKLSAgICB9IHF1ZXVlc1s4XTsKLSAgICB1aW50OF90ICBtYXBwaW5nWzRdOwotICAgIHVpbnQxNl90IG1heGJ1cnN0OwotICAgIHVpbnQxNl90IHJvdW5kX3RyaXBfZGVsYXk7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fa2V5Y2FjaGUgewotICAgIHVpbnQ4X3QgZW50cnk7Ci0gICAgdWludDhfdCBrZXlpZDsKLSAgICB1aW50OF90IGFkZHJlc3NbNl07Ci0gICAgdWludDhfdCBwYWRbMl07Ci0gICAgdWludDhfdCBrZXl0eXBlOwotICAgIHVpbnQ4X3Qga2V5bGVuOwotICAgIHVpbnQ4X3Qga2V5WzI0XTsKLX07Ci0KLQotc3RydWN0IHNfbG1faW50ZXJ2YWw7Ci0KLXN0cnVjdCBzX2xtb19wc20gewotICAgIHVpbnQxNl90ICAgIGZsYWdzOwotICAgIHVpbnQxNl90ICAgIGFpZDsKLSAgICBzdHJ1Y3Qgc19sbV9pbnRlcnZhbCB7Ci0JICAgIHVpbnQxNl90IGludGVydmFsOwotCSAgICB1aW50MTZfdCBwZXJpb2RzOwotICAgIH0gaW50ZXJ2YWxzWzRdOwotICAgIC8qIHVpbnQxNl90ICAgIHBhZDsgKi8KLSAgICB1aW50OF90ICAgICBiZWFjb25fcmNwaV9za2lwX21heDsKLSAgICB1aW50OF90ICAgICByY3BpX2RlbHRhX3RocmVzaG9sZDsKLSAgICB1aW50OF90ICAgICBucjsKLSAgICB1aW50OF90ICAgICBleGNsdWRlWzFdOwotfTsKLQotI2RlZmluZSBNQ19GSUxURVJfQUREUkVTU19OVU0gICA0Ci0KLXN0cnVjdCBzX2xtb19ncm91cF9hZGRyZXNzX3RhYmxlIHsKLSAgICB1aW50MTZfdCAgICBmaWx0ZXJfZW5hYmxlOwotICAgIHVpbnQxNl90ICAgIG51bV9hZGRyZXNzOwotICAgIHVpbnQ4X3QgICAgIG1hY2FkZHJfbGlzdFtNQ19GSUxURVJfQUREUkVTU19OVU1dWzZdOwotfTsKLQotc3RydWN0IHNfbG1vX3R4Y2FuY2VsIHsKLSAgICB1aW50MzJfdCBhZGRyZXNzWzFdOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fdHggewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHJldHJpZXM7Ci0gICAgdWludDhfdCAgcmNwaTsKLSAgICB1aW50OF90ICBzcTsKLSAgICB1aW50MTZfdCBzZXFjdHJsOwotICAgIHVpbnQ4X3QgIGFudGVubmE7Ci0gICAgdWludDhfdCAgcGFkOwotfTsKLQotc3RydWN0IHNfbG1vX2J1cnN0IHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICBxdWV1ZTsKLSAgICB1aW50OF90ICBiYWNrbG9nOwotICAgIHVpbnQ4X3QgIHBhZDsKLSAgICB1aW50MTZfdCBkdXJhdGlvbnNbMzJdOwotfTsKLQotc3RydWN0IHNfbG1vX3N0YXRzIHsKLSAgICB1aW50MzJfdCB2YWxpZDsKLSAgICB1aW50MzJfdCBmY3M7Ci0gICAgdWludDMyX3QgYWJvcnQ7Ci0gICAgdWludDMyX3QgcGh5YWJvcnQ7Ci0gICAgdWludDMyX3QgcnRzX3N1Y2Nlc3M7Ci0gICAgdWludDMyX3QgcnRzX2ZhaWw7Ci0gICAgdWludDMyX3QgdGltZXN0YW1wOwotICAgIHVpbnQzMl90IHRpbWVfdHg7Ci0gICAgdWludDMyX3Qgbm9pc2VmbG9vcjsKLSAgICB1aW50MzJfdCBzYW1wbGVfbm9pc2VbOF07Ci0gICAgdWludDMyX3Qgc2FtcGxlX2NjYTsKLSAgICB1aW50MzJfdCBzYW1wbGVfdHg7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19sZWQgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IG1hc2tbMl07Ci0gICAgdWludDE2X3QgZGVsYXkvKlsyXSovOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fYnRfYmFsYW5jZXIgewotICAgIHVpbnQxNl90IHByaW9fdGhyZXNoOwotICAgIHVpbnQxNl90IGFjbF90aHJlc2g7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19hcnBfdGFibGUgewotICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7Ci0gICAgdWludDMyX3QgICAgaXBhZGRyOwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9fbG1hY19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwppbmRleCAzZDJhODRjLi5lMTM5ZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwppbmRleCA4OTYwZmE5Li4wMGZlMDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L1RPRE8KaW5kZXggODQ2MmNkMS4uY2IwNGFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvVE9ETwpAQCAtMTYsNiArMTYsNSBAQAogLSBzcGFyc2UgZml4ZXMKIC0gaW50ZWdyYXRlIHdpdGggZHJpdmVycy9uZXQvd2lyZWxlc3MKIAotUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sCi1Gb3Jlc3QgQm9uZCA8Zm9yZXN0QGFsaXR0bGV0b29xdWlldC5uZXQ+IGFuZCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Ci08YnpvbG5pZXJAZ21haWwuY29tPi4KK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CithbmQgRm9yZXN0IEJvbmQgPGZvcmVzdEBhbGl0dGxldG9vcXVpZXQubmV0Pi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvVE9ETwppbmRleCAxN2NmNTBjLi5hMzE4OTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9UT0RPCkBAIC0xNSw2ICsxNSw1IEBACiAtIHNwYXJzZSBmaXhlcwogLSBpbnRlZ3JhdGUgd2l0aCBkcml2ZXJzL25ldC93aXJlbGVzcwogCi1QbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwKLUZvcmVzdCBCb25kIDxmb3Jlc3RAYWxpdHRsZXRvb3F1aWV0Lm5ldD4gYW5kIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKLTxiem9sbmllckBnbWFpbC5jb20+LgorUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KK2FuZCBGb3Jlc3QgQm9uZCA8Zm9yZXN0QGFsaXR0bGV0b29xdWlldC5uZXQ+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCmluZGV4IDdmOTZiY2EuLjA1MTg2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKQEAgLTEzMzIsNyArMTMzMiw2IEBACiAgICAgICAgIGZyZWVfbmV0ZGV2KHBEZXZpY2UtPmRldik7CiAgICAgfQogCi0Ja2ZyZWUocERldmljZSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2Rpc2Nvbm5lY3QzLi4gXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKaW5kZXggOTQwNDYwYy4uMTMyNjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFczNVVORAogCXRyaXN0YXRlICJJUzg5QzM1IFdMQU4gVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTiAmJiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgV2luYm9uZCBXSUZJIGNhcmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwppbmRleCA5OTU5YjY1Li5mNDQyOTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFJJU00yX1VTQgogCXRyaXN0YXRlICJQcmlzbTIuNS8zIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXTEFOXzgwMjExICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKKwlkZXBlbmRzIG9uIFdMQU4gJiYgVVNCICYmIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHdsYW4tbmcgcHJpc20gMi41LzMgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKaW5kZXggMzQ3YzNlZC4uZDQ0MmZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwpAQCAtMTksMTMgKzE5LDYgQEAKICAqCVBDTUNJQSBzZXJ2aWNlIHN1cHBvcnQgZm9yIFF1aWNrbmV0IGNhcmRzCiAgKi8KICAKLSNpZmRlZiBQQ01DSUFfREVCVUcKLXN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Ci1tb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IGl4al9pbmZvX3QgewogCWludCBuZGV2OwpAQCAtMzksNyArMzIsNyBAQAogCiBzdGF0aWMgaW50IGl4al9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0JREVCVUcoMCwgIml4al9hdHRhY2goKVxuIik7CisJZGV2X2RiZygmcF9kZXYtPmRldiwgIml4al9hdHRhY2goKVxuIik7CiAJLyogQ3JlYXRlIG5ldyBpeGogZGV2aWNlICovCiAJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CkBAIC01NSwzMyArNDgsMzAgQEAKIAogc3RhdGljIHZvaWQgaXhqX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlERUJVRygwLCAiaXhqX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAiaXhqX2RldGFjaFxuIik7CiAKIAlpeGpfY3NfcmVsZWFzZShsaW5rKTsKIAogICAgICAgICBrZnJlZShsaW5rLT5wcml2KTsKIH0KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgdm9pZCBpeGpfZ2V0X3NlcmlhbChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIGxpbmssIElYSiAqIGopCiB7CiAJY2hhciAqc3RyOwogCWludCBpLCBwbGFjZTsKLQlERUJVRygwLCAiaXhqX2dldF9zZXJpYWwoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgIml4al9nZXRfc2VyaWFsXG4iKTsKIAogCXN0ciA9IGxpbmstPnByb2RfaWRbMF07CiAJaWYgKCFzdHIpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAlwcmludGsoIiVzIiwgc3RyKTsKIAlzdHIgPSBsaW5rLT5wcm9kX2lkWzFdOwogCWlmICghc3RyKQotCQlnb3RvIGNzX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAJcHJpbnRrKCIgJXMiLCBzdHIpOwogCXN0ciA9IGxpbmstPnByb2RfaWRbMl07CiAJaWYgKCFzdHIpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAlwbGFjZSA9IDE7CiAJZm9yIChpID0gc3RybGVuKHN0cikgLSAxOyBpID49IDA7IGktLSkgewogCQlzd2l0Y2ggKHN0cltpXSkgewpAQCAtMTE4LDkgKzEwOCw5IEBACiAJfQogCXN0ciA9IGxpbmstPnByb2RfaWRbM107CiAJaWYgKCFzdHIpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAlwcmludGsoIiB2ZXJzaW9uICVzXG4iLCBzdHIpOwotICAgICAgY3NfZmFpbGVkOgorZmFpbGVkOgogCXJldHVybjsKIH0KIApAQCAtMTUxLDEzICsxNDEsMTMgQEAKIAljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAogCWluZm8gPSBsaW5rLT5wcml2OwotCURFQlVHKDAsICJpeGpfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJpeGpfY29uZmlnXG4iKTsKIAogCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgaXhqX2NvbmZpZ19jaGVjaywgJmRmbHQpKQotCQlnb3RvIGNzX2ZhaWxlZDsKKwkJZ290byBmYWlsZWQ7CiAKIAlpZiAocGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAogCS8qCiAgCSAqCVJlZ2lzdGVyIHRoZSBjYXJkIHdpdGggdGhlIGNvcmUuCkBAIC0xNzAsNyArMTYwLDcgQEAKIAlpeGpfZ2V0X3NlcmlhbChsaW5rLCBqKTsKIAlyZXR1cm4gMDsKIAotICAgICAgY3NfZmFpbGVkOgorZmFpbGVkOgogCWl4al9jc19yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMTc4LDcgKzE2OCw3IEBACiBzdGF0aWMgdm9pZCBpeGpfY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlpeGpfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLQlERUJVRygwLCAiaXhqX2NzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCWRldl9kYmcoJmxpbmstPmRldiwgIml4al9jc19yZWxlYXNlXG4iKTsKIAlpbmZvLT5uZGV2ID0gMDsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCmluZGV4IDRlODNjMjkuLjZmOGQ4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jCkBAIC0xODAsMTUgKzE4MCwxNSBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBUSEVSTUFMX1RSSVBfQ1JJVElDQUw6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNyaXRpY2FsIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNyaXRpY2FsXG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9IT1Q6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdCIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJob3RcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX1BBU1NJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmUiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZVxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfQUNUSVZFOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmUiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiYWN0aXZlXG4iKTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duIik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd25cbiIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwppbmRleCAwMjM0N2M1Li5hYTUzZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYworKysgYi9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAJcmV0dXJuIDA7CiAgYmFkMToKIAlrZnJlZShwcml2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAgYmFkMDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGUzODYxYjIuLmU0ZWNhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTYwOSw5ICs2MDksOSBAQAogCiAJYWNtLT50aHJvdHRsZSA9IDA7CiAKLQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIAlzZXRfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJmFjbS0+cG9ydC5mbGFncyk7CiAJcnYgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKIGVycl9vdXQ6CkBAIC02ODYsMTUgKzY4NiwyMSBAQAogCiAJLyogUGVyZm9ybSB0aGUgY2xvc2luZyBwcm9jZXNzIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBkbyB0aGUgaGFyZHdhcmUKIAkgICBzaHV0ZG93biAqLwotCWlmICghYWNtIHx8IHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZhY20tPnBvcnQsIHR0eSwgZmlscCkgPT0gMCkKKwlpZiAoIWFjbSkKIAkJcmV0dXJuOworCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmYWNtLT5wb3J0LCB0dHksIGZpbHApID09IDApIHsKKwkJbXV0ZXhfbG9jaygmb3Blbl9tdXRleCk7CisJCWlmICghYWNtLT5kZXYpIHsKKwkJCXR0eV9wb3J0X3R0eV9zZXQoJmFjbS0+cG9ydCwgTlVMTCk7CisJCQlhY21fdHR5X3VucmVnaXN0ZXIoYWNtKTsKKwkJCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQl9CisJCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CisJCXJldHVybjsKKwl9CiAJYWNtX3BvcnRfZG93bihhY20sIDApOwogCXR0eV9wb3J0X2Nsb3NlX2VuZCgmYWNtLT5wb3J0LCB0dHkpOwotCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCXR0eV9wb3J0X3R0eV9zZXQoJmFjbS0+cG9ydCwgTlVMTCk7Ci0JaWYgKCFhY20tPmRldikKLQkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7Ci0JbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIH0KIAogc3RhdGljIGludCBhY21fdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA1Y2U4MzkxLi4wZjg1N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIGh1Yl9jbGVhcl90dF9idWZmZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCB1MTYgZGV2aW5mbywgdTE2IHR0KQogewotCXJldHVybiB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCXJldHVybiB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3NuZGN0cmxwaXBlKGhkZXYsIDApLAogCQkJICAgICAgIEhVQl9DTEVBUl9UVF9CVUZGRVIsIFVTQl9SVF9QT1JULCBkZXZpbmZvLAogCQkJICAgICAgIHR0LCBOVUxMLCAwLCAxMDAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggMzMzNTEzMS4uYTE4ZTNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTIyMyw2ICsyMjMsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfUFhBMjVYCiAJYm9vbGVhbiAiUFhBIDI1eCBvciBJWFAgNHh4IgogCWRlcGVuZHMgb24gKEFSQ0hfUFhBICYmIFBYQTI1eCkgfHwgQVJDSF9JWFA0WFgKKwlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgICBJbnRlbCdzIFBYQSAyNXggc2VyaWVzIFhTY2FsZSBBUk0tNVRFIHByb2Nlc3NvcnMgaW5jbHVkZQogCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgVGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwppbmRleCBkNWI2NTk2Li43MzExNTBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC0xMjEzLDcgKzEyMTMsMTIgQEAKIAkJCQl0bXAgJj0gQU1EX1VOTUFTS19CSVQoZXAtPm51bSk7CiAJCQkJd3JpdGVsKHRtcCwgJmRldi0+cmVncy0+ZXBfaXJxbXNrKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UgaWYgKGVwLT5pbikgeworCQkJCS8qIGVuYWJsZSBlcCBpcnEgKi8KKwkJCQl0bXAgPSByZWFkbCgmZGV2LT5yZWdzLT5lcF9pcnFtc2spOworCQkJCXRtcCAmPSBBTURfVU5NQVNLX0JJVChlcC0+bnVtKTsKKwkJCQl3cml0ZWwodG1wLCAmZGV2LT5yZWdzLT5lcF9pcnFtc2spOworCQkJfQogCiAJfSBlbHNlIGlmIChlcC0+ZG1hKSB7CiAKQEAgLTIwMDUsMTggKzIwMTAsMTcgQEAKIHsKIAlpbnQgdG1wOwogCi0JLyogZW1wdHkgcXVldWVzIGFuZCBpbml0IGhhcmR3YXJlICovCi0JdWRjX2Jhc2ljX2luaXQoZGV2KTsKLQlmb3IgKHRtcCA9IDA7IHRtcCA8IFVEQ19FUF9OVU07IHRtcCsrKSB7Ci0JCWVtcHR5X3JlcV9xdWV1ZSgmZGV2LT5lcFt0bXBdKTsKLQl9Ci0KIAlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKIAkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CiAJCWRyaXZlci0+ZGlzY29ubmVjdCgmZGV2LT5nYWRnZXQpOwogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJfQotCS8qIGluaXQgKi8KKworCS8qIGVtcHR5IHF1ZXVlcyBhbmQgaW5pdCBoYXJkd2FyZSAqLworCXVkY19iYXNpY19pbml0KGRldik7CisJZm9yICh0bXAgPSAwOyB0bXAgPCBVRENfRVBfTlVNOyB0bXArKykKKwkJZW1wdHlfcmVxX3F1ZXVlKCZkZXYtPmVwW3RtcF0pOworCiAJdWRjX3NldHVwX2VuZHBvaW50cyhkZXYpOwogfQogCkBAIC0yNDcyLDYgKzI0NzYsMTMgQEAKIAkJCQl9CiAJCQl9CiAKKwkJfSBlbHNlIGlmICghdXNlX2RtYSAmJiBlcC0+aW4pIHsKKwkJCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCisJCQl0bXAgPSByZWFkbCgKKwkJCQkmZGV2LT5yZWdzLT5lcF9pcnFtc2spOworCQkJdG1wIHw9IEFNRF9CSVQoZXAtPm51bSk7CisJCQl3cml0ZWwodG1wLAorCQkJCSZkZXYtPnJlZ3MtPmVwX2lycW1zayk7CiAJCX0KIAl9CiAJLyogY2xlYXIgc3RhdHVzIGJpdHMgKi8KQEAgLTMyNzksNiArMzI5MCwxNyBAQAogCQlnb3RvIGZpbmlzaGVkOwogCX0KIAorCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCS8qIHVkYyBjc3IgcmVnaXN0ZXJzIGJhc2UgKi8KKwlkZXYtPmNzciA9IGRldi0+dmlydF9hZGRyICsgVURDX0NTUl9BRERSOworCS8qIGRldiByZWdpc3RlcnMgYmFzZSAqLworCWRldi0+cmVncyA9IGRldi0+dmlydF9hZGRyICsgVURDX0RFVkNGR19BRERSOworCS8qIGVwIHJlZ2lzdGVycyBiYXNlICovCisJZGV2LT5lcF9yZWdzID0gZGV2LT52aXJ0X2FkZHIgKyBVRENfRVBSRUdTX0FERFI7CisJLyogZmlmbydzIGJhc2UgKi8KKwlkZXYtPnJ4ZmlmbyA9ICh1MzIgX19pb21lbSAqKShkZXYtPnZpcnRfYWRkciArIFVEQ19SWEZJRk9fQUREUik7CisJZGV2LT50eGZpZm8gPSAodTMyIF9faW9tZW0gKikoZGV2LT52aXJ0X2FkZHIgKyBVRENfVFhGSUZPX0FERFIpOworCiAJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdWRjX2lycSwgSVJRRl9TSEFSRUQsIG5hbWUsIGRldikgIT0gMCkgewogCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlcXVlc3RfaXJxKCVkKSBmYWlsXG4iLCBwZGV2LT5pcnEpOwogCQlrZnJlZShkZXYpOwpAQCAtMzMzMSw3ICszMzUzLDYgQEAKIAl1ZGNfcG9sbHN0YWxsX3RpbWVyLmRhdGEgPSAwOwogCiAJLyogZGV2aWNlIHN0cnVjdCBzZXR1cCAqLwotCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwogCWRldi0+Z2FkZ2V0Lm9wcyA9ICZ1ZGNfb3BzOwogCiAJZGV2X3NldF9uYW1lKCZkZXYtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKQEAgLTMzNDAsMTYgKzMzNjEsNiBAQAogCWRldi0+Z2FkZ2V0Lm5hbWUgPSBuYW1lOwogCWRldi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CiAKLQkvKiB1ZGMgY3NyIHJlZ2lzdGVycyBiYXNlICovCi0JZGV2LT5jc3IgPSBkZXYtPnZpcnRfYWRkciArIFVEQ19DU1JfQUREUjsKLQkvKiBkZXYgcmVnaXN0ZXJzIGJhc2UgKi8KLQlkZXYtPnJlZ3MgPSBkZXYtPnZpcnRfYWRkciArIFVEQ19ERVZDRkdfQUREUjsKLQkvKiBlcCByZWdpc3RlcnMgYmFzZSAqLwotCWRldi0+ZXBfcmVncyA9IGRldi0+dmlydF9hZGRyICsgVURDX0VQUkVHU19BRERSOwotCS8qIGZpZm8ncyBiYXNlICovCi0JZGV2LT5yeGZpZm8gPSAodTMyIF9faW9tZW0gKikoZGV2LT52aXJ0X2FkZHIgKyBVRENfUlhGSUZPX0FERFIpOwotCWRldi0+dHhmaWZvID0gKHUzMiBfX2lvbWVtICopKGRldi0+dmlydF9hZGRyICsgVURDX1RYRklGT19BRERSKTsKLQogCS8qIGluaXQgcmVnaXN0ZXJzLCBpbnRlcnJ1cHRzLCAuLi4gKi8KIAlzdGFydHVwX3JlZ2lzdGVycyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IGYzN2RlMjguLjE2N2NiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC02MSwxMSArNjEsNiBAQAogICogc2ltcGxlciwgTWljcm9zb2Z0IHB1c2hlcyB0aGVpciBvd24gYXBwcm9hY2g6IFJORElTLiAgVGhlIHB1Ymxpc2hlZAogICogUk5ESVMgc3BlY3MgYXJlIGFtYmlndW91cyBhbmQgYXBwZWFyIHRvIGJlIGluY29tcGxldGUsIGFuZCBhcmUgYWxzbwogICogbmVlZGxlc3NseSBjb21wbGV4LiAgVGhleSBib3Jyb3cgbW9yZSBmcm9tIENEQyBBQ00gdGhhbiBDREMgRUNNLgotICoKLSAqIFdoaWxlIENEQyBFQ00sIENEQyBTdWJzZXQsIGFuZCBSTkRJUyBhcmUgZGVzaWduZWQgdG8gZXh0ZW5kIHRoZSBldGhlcm5ldAotICogaW50ZXJmYWNlIHRvIHRoZSB0YXJnZXQsIENEQyBFRU0gd2FzIGRlc2lnbmVkIHRvIHVzZSBldGhlcm5ldCBvdmVyIHRoZSBVU0IKLSAqIGxpbmsgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGFyZ2V0LiAgQ0RDIEVFTSBpcyBpbXBsZW1lbnRlZCBhcyBhbiBhbHRlcm5hdGl2ZQotICogdG8gdGhvc2Ugb3RoZXIgcHJvdG9jb2xzIHdoZW4gdGhhdCBjb21tdW5pY2F0aW9uIG1vZGVsIGlzIG1vcmUgYXBwcm9wcmlhdGUKICAqLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRXRoZXJuZXQgR2FkZ2V0IgpAQCAtMTU3LDggKzE1Miw4IEBACiAjZGVmaW5lIFJORElTX1BST0RVQ1RfTlVNCTB4YTRhMgkvKiBFdGhlcm5ldC9STkRJUyBHYWRnZXQgKi8KIAogLyogRm9yIEVFTSBnYWRnZXRzICovCi0jZGVmaW5lIEVFTV9WRU5ET1JfTlVNCTB4MDUyNQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCi0jZGVmaW5lIEVFTV9QUk9EVUNUX05VTQkweGE0YTEJLyogSU5WQUxJRCAtIE5FRURTIFRPIEJFIEFMTE9DQVRFRCAqLworI2RlZmluZSBFRU1fVkVORE9SX05VTQkJMHgxZDZiCS8qIExpbnV4IEZvdW5kYXRpb24gKi8KKyNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCQkweDAxMDIJLyogRUVNIEdhZGdldCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggNDJhNzRiOC4uZmEzZDE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtMjEzOSw3ICsyMTM5LDcgQEAKIHN0YXRpYyB2b2lkIGZzbF91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJY29tcGxldGUodWRjX2NvbnRyb2xsZXItPmRvbmUpOwotCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5wYXJlbnQsIHVkY19jb250cm9sbGVyLT5lcF9xaF9zaXplLAogCQkJdWRjX2NvbnRyb2xsZXItPmVwX3FoLCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfZG1hKTsKIAlrZnJlZSh1ZGNfY29udHJvbGxlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggOTgzNWUwNy4uZjVmNTYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC02NzYsNiArNjc3LDcgQEAKIAllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGVzICovCiAJbXNsZWVwKDUpOwogCXVwX3dyaXRlKCZlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW0pOworCWVoY2ktPmxhc3RfcGVyaW9kaWNfZW5hYmxlID0ga3RpbWVfZ2V0X3JlYWwoKTsKIAogCXRlbXAgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAllaGNpX2luZm8gKGVoY2ksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggMzc4ODYxYi4uZWFkNWY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwpAQCAtMTExLDYgKzExMSwxMCBAQAogCXN3aXRjaCAocGRldi0+dmVuZG9yKSB7CiAJY2FzZSBQQ0lfVkVORE9SX0lEX0lOVEVMOgogCQllaGNpLT5uZWVkX2lvX3dhdGNoZG9nID0gMDsKKwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDI3Y2MpIHsKKwkJCWVoY2ktPmJyb2tlbl9wZXJpb2RpYyA9IDE7CisJCQllaGNpX2luZm8oZWhjaSwgInVzaW5nIGJyb2tlbiBwZXJpb2RpYyB3b3JrYXJvdW5kXG4iKTsKKwkJfQogCQlicmVhazsKIAljYXNlIFBDSV9WRU5ET1JfSURfVERJOgogCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCmluZGV4IDAwYWQ5Y2UuLjEzOWEyY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwpAQCAtNDg3LDggKzQ4NywyMCBAQAogCQkJICogd2UgbXVzdCBjbGVhciB0aGUgVFQgYnVmZmVyICgxMS4xNy41KS4KIAkJCSAqLwogCQkJaWYgKHVubGlrZWx5KGxhc3Rfc3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJgotCQkJCQlsYXN0X3N0YXR1cyAhPSAtRVJFTU9URUlPKSkKLQkJCQllaGNpX2NsZWFyX3R0X2J1ZmZlcihlaGNpLCBxaCwgdXJiLCB0b2tlbik7CisJCQkJCWxhc3Rfc3RhdHVzICE9IC1FUkVNT1RFSU8pKSB7CisJCQkJLyogVGhlIFRUJ3MgaW4gc29tZSBodWJzIG1hbGZ1bmN0aW9uIHdoZW4gdGhleQorCQkJCSAqIHJlY2VpdmUgdGhpcyByZXF1ZXN0IGZvbGxvd2luZyBhIFNUQUxMICh0aGV5CisJCQkJICogc3RvcCBzZW5kaW5nIGlzb2Nocm9ub3VzIHBhY2tldHMpLiAgU2luY2UgYQorCQkJCSAqIFNUQUxMIGNhbid0IGxlYXZlIHRoZSBUVCBidWZmZXIgaW4gYSBidXN5CisJCQkJICogc3RhdGUgKGlmIHlvdSBiZWxpZXZlIEZpZ3VyZXMgMTEtNDggLSAxMS01MQorCQkJCSAqIGluIHRoZSBVU0IgMi4wIHNwZWMpLCB3ZSB3b24ndCBjbGVhciB0aGUgVFQKKwkJCQkgKiBidWZmZXIgaW4gdGhpcyBjYXNlLiAgU3RyaWN0bHkgc3BlYWtpbmcgdGhpcworCQkJCSAqIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBzcGVjLgorCQkJCSAqLworCQkJCWlmIChsYXN0X3N0YXR1cyAhPSAtRVBJUEUpCisJCQkJCWVoY2lfY2xlYXJfdHRfYnVmZmVyKGVoY2ksIHFoLCB1cmIsCisJCQkJCQkJdG9rZW4pOworCQkJfQogCQl9CiAKIAkJLyogaWYgd2UncmUgcmVtb3Zpbmcgc29tZXRoaW5nIG5vdCBhdCB0aGUgcXVldWUgaGVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggM2VmYTU5Yi4uYTU1MzViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTQ3NSw2ICs0NzUsOCBAQAogCS8qIG1ha2Ugc3VyZSBlaGNpX3dvcmsgc2NhbnMgdGhlc2UgKi8KIAllaGNpLT5uZXh0X3VmcmFtZSA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KQogCQklIChlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMpOworCWlmICh1bmxpa2VseShlaGNpLT5icm9rZW5fcGVyaW9kaWMpKQorCQllaGNpLT5sYXN0X3BlcmlvZGljX2VuYWJsZSA9IGt0aW1lX2dldF9yZWFsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4Niw2ICs0ODgsMTYgQEAKIAlpZiAoLS1laGNpLT5wZXJpb2RpY19zY2hlZCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAodW5saWtlbHkoZWhjaS0+YnJva2VuX3BlcmlvZGljKSkgeworCQkvKiBkZWxheSBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkICovCisJCWt0aW1lX3Qgc2FmZSA9IGt0aW1lX2FkZF91cyhlaGNpLT5sYXN0X3BlcmlvZGljX2VuYWJsZSwgMTAwMCk7CisJCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0X3JlYWwoKTsKKwkJczY0IGRlbGF5ID0ga3RpbWVfdXNfZGVsdGEoc2FmZSwgbm93KTsKKworCQlpZiAodW5saWtlbHkoZGVsYXkgPiAwKSkKKwkJCXVkZWxheShkZWxheSk7CisJfQorCiAJLyogZGlkIHNldHRpbmcgUFNFIG5vdCB0YWtlIGVmZmVjdCB5ZXQ/CiAJICogdGFrZXMgZWZmZWN0IG9ubHkgYXQgZnJhbWUgYm91bmRhcmllcy4uLgogCSAqLwpAQCAtMTQwMCw2ICsxNDEyLDEwIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlwZXJpb2QgPSB1cmItPmludGVydmFsOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXBlcmlvZCA8PD0gMzsKKwogCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKIAogCS8qIHdoZW4ncyB0aGUgbGFzdCB1ZnJhbWUgdGhpcyB1cmIgY291bGQgc3RhcnQ/ICovCkBAIC0xNDE3LDggKzE0MzMsOCBAQAogCiAJCS8qIEZlbGwgYmVoaW5kIChieSB1cCB0byB0d2ljZSB0aGUgc2xvcCBhbW91bnQpPyAqLwogCQlpZiAoc3RhcnQgPj0gbWF4IC0gMiAqIDggKiBTQ0hFRFVMRV9TTE9QKQotCQkJc3RhcnQgKz0gc3RyZWFtLT5pbnRlcnZhbCAqIERJVl9ST1VORF9VUCgKLQkJCQkJbWF4IC0gc3RhcnQsIHN0cmVhbS0+aW50ZXJ2YWwpIC0gbW9kOworCQkJc3RhcnQgKz0gcGVyaW9kICogRElWX1JPVU5EX1VQKAorCQkJCQltYXggLSBzdGFydCwgcGVyaW9kKSAtIG1vZDsKIAogCQkvKiBUcmllZCB0byBzY2hlZHVsZSB0b28gZmFyIGludG8gdGhlIGZ1dHVyZT8gKi8KIAkJaWYgKHVubGlrZWx5KChzdGFydCArIHNjaGVkLT5zcGFuKSA+PSBtYXgpKSB7CkBAIC0xNDQxLDEwICsxNDU3LDYgQEAKIAogCS8qIE5PVEU6ICBhc3N1bWVzIFVSQl9JU09fQVNBUCwgdG8gbGltaXQgY29tcGxleGl0eS9idWdzICovCiAKLQlwZXJpb2QgPSB1cmItPmludGVydmFsOwotCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCi0JCXBlcmlvZCA8PD0gMzsKLQogCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KIAlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKIAkJaW50CQllbm91Z2hfc3BhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDA2NGU3NjguLjJkODVlMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC0xMTgsNiArMTE4LDcgQEAKIAl1bnNpZ25lZAkJc3RhbXA7CiAJdW5zaWduZWQJCXJhbmRvbV9mcmFtZTsKIAl1bnNpZ25lZCBsb25nCQluZXh0X3N0YXRlY2hhbmdlOworCWt0aW1lX3QJCQlsYXN0X3BlcmlvZGljX2VuYWJsZTsKIAl1MzIJCQljb21tYW5kOwogCiAJLyogU0lMSUNPTiBRVUlSS1MgKi8KQEAgLTEyNyw2ICsxMjgsNyBAQAogCXVuc2lnbmVkCQliaWdfZW5kaWFuX2Rlc2M6MTsKIAl1bnNpZ25lZAkJaGFzX2FtY2NfdXNiMjM6MTsKIAl1bnNpZ25lZAkJbmVlZF9pb193YXRjaGRvZzoxOworCXVuc2lnbmVkCQlicm9rZW5fcGVyaW9kaWM6MTsKIAogCS8qIHJlcXVpcmVkIGZvciB1c2IzMiBxdWlyayAqLwogCSNkZWZpbmUgT0hDSV9DVFJMX0hDRlMgICAgICAgICAgKDMgPDwgNikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA3OGJiNzcxLi4yNGViNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC04Nyw2ICs4Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgcXVpcmtfYW1kX3BsbChpbnQgc3RhdGUpOwogc3RhdGljIHZvaWQgYW1kX2lzb19kZXZfcHV0KHZvaWQpOworc3RhdGljIHZvaWQgc2I4MDBfcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWlya19hbWRfcGxsKGludCBzdGF0ZSkKIHsKQEAgLTk2LDYgKzk3LDEwIEBACiB7CiAJcmV0dXJuOwogfQorc3RhdGljIGlubGluZSB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IG9uKQoreworCXJldHVybjsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCBkMmJhMDRkLi5iOGExMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0xNzcsNiArMTc3LDEzIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKworCS8qIFNCODAwIG5lZWRzIHByZS1mZXRjaCBmaXggKi8KKwlpZiAoKHJldiA+PSAweDQwKSAmJiAocmV2IDw9IDB4NGYpKSB7CisJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfQU1EX1BSRUZFVENIOworCQlvaGNpX2RiZyhvaGNpLCAiZW5hYmxlZCBBTUQgcHJlZmV0Y2ggcXVpcmtcbiIpOworCX0KKwogCWlmICgocmV2ID4gMHgzYikgfHwgKHJldiA8IDB4MzApKSB7CiAJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOwogCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKQEAgLTI2Miw2ICsyNjksMTkgQEAKIAogfQogCitzdGF0aWMgdm9pZCBzYjgwMF9wcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgbWlzYzsKKworCXBkZXYgPSB0b19wY2lfZGV2KG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsICZtaXNjKTsKKwlpZiAob24gPT0gMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgJiAweGZjZmYpOworCWVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgfCAweDAzMDApOworfQorCiAvKiBMaXN0IG9mIHF1aXJrcyBmb3IgT0hDSSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9oY2lfcGNpX3F1aXJrc1tdID0gewogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCmluZGV4IDE2ZmVjYjguLjM1Mjg4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpAQCAtNDksOSArNDksMTIgQEAKIAlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgewogCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKIAkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOwotCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCi0JCQkJJiYgcXVpcmtfYW1kaXNvKG9oY2kpKQotCQkJcXVpcmtfYW1kX3BsbCgxKTsKKwkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQkJaWYgKHF1aXJrX2FtZGlzbyhvaGNpKSkKKwkJCQlxdWlya19hbWRfcGxsKDEpOworCQkJaWYgKHF1aXJrX2FtZHByZWZldGNoKG9oY2kpKQorCQkJCXNiODAwX3ByZWZldGNoKG9oY2ksIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CiAJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtNjgwLDkgKzY4MywxMiBAQAogCQkJCWRhdGEgKyB1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLm9mZnNldCwKIAkJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLmxlbmd0aCwgdXJiLCBjbnQpOwogCQl9Ci0JCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDAKLQkJCQkmJiBxdWlya19hbWRpc28ob2hjaSkpCi0JCQlxdWlya19hbWRfcGxsKDApOworCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwKSB7CisJCQlpZiAocXVpcmtfYW1kaXNvKG9oY2kpKQorCQkJCXF1aXJrX2FtZF9wbGwoMCk7CisJCQlpZiAocXVpcmtfYW1kcHJlZmV0Y2gob2hjaSkpCisJCQkJc2I4MDBfcHJlZmV0Y2gob2hjaSwgMSk7CisJCX0KIAkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKysgPT0gMAogCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzID09IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAppbmRleCAyMjIwMTFmLi41YmYxNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApAQCAtNDAyLDYgKzQwMiw3IEBACiAjZGVmaW5lCU9IQ0lfUVVJUktfRlJBTUVfTk8JMHg4MAkJCS8qIG5vIGJpZyBlbmRpYW4gZnJhbWVfbm8gc2hpZnQgKi8KICNkZWZpbmUJT0hDSV9RVUlSS19IVUJfUE9XRVIJMHgxMDAJCQkvKiBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vYyBzZXR1cCAqLwogI2RlZmluZQlPSENJX1FVSVJLX0FNRF9JU08JMHgyMDAJCQkvKiBJU08gdHJhbnNmZXJzKi8KKyNkZWZpbmUJT0hDSV9RVUlSS19BTURfUFJFRkVUQ0gJMHg0MDAJCQkvKiBwcmUtZmV0Y2ggZm9yIElTTyB0cmFuc2ZlciAqLwogCS8vIHRoZXJlIGFyZSBhbHNvIGNoaXAgcXVpcmtzL2J1Z3MgaW4gaW5pdCBsb2dpYwogCiAJc3RydWN0IHdvcmtfc3RydWN0CW5lY193b3JrOwkvKiBXb3JrZXIgZm9yIE5FQyBxdWlyayAqLwpAQCAtNDMzLDYgKzQzNCwxMCBAQAogewogCXJldHVybiBvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1EX0lTTzsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHF1aXJrX2FtZHByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlyZXR1cm4gb2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRF9QUkVGRVRDSDsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBxdWlya19uZWMoc3RydWN0IG9oY2lfaGNkICpvaGNpKQogewpAQCAtNDQ2LDYgKzQ1MSwxMCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcXVpcmtfYW1kcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBhbiBoY2QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb2hjaV9oY2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IDc0OWI1MzcuLmUzM2QzNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtMTAwMywxOSArMTAwMywyMCBAQAogCWlmIChzeXNzdHMgPT0gU0UwKSB7CiAJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QVRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKIAkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgQVRUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7Ci0JCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiAoc3lzc3RzID09IEZTX0pTVFMpCisJCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKKwkJZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCisJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKKworCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKKwkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKKworCQlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCisJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIAl9CiAKLQlpZiAoc3lzc3RzID09IEZTX0pTVFMpCi0JCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCWVsc2UgaWYgKHN5c3N0cyA9PSBMU19KU1RTKQotCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBIU0UsIGdldF9zeXNjZmdfcmVnKHBvcnQpKTsKLQotCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwotCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIERUQ0hFLCBnZXRfaW50ZW5iX3JlZyhwb3J0KSk7Ci0KLQlpZiAocjhhNjY1OTctPmJ1c19zdXNwZW5kZWQpCi0JCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOworCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHQgZGlzYWJsZWQgKi8KQEAgLTEwMjQsNiArMTAyNSw4IEBACiAJdTE2IHNwZWVkID0gZ2V0X3JoX3VzYl9zcGVlZChyOGE2NjU5NywgcG9ydCk7CiAJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CiAKKwlyaC0+cG9ydCAmPSB+KCgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKSB8CisJCSAgICAgICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpKTsKIAlpZiAoc3BlZWQgPT0gSFNNT0RFKQogCQlyaC0+cG9ydCB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCk7CiAJZWxzZSBpZiAoc3BlZWQgPT0gTFNNT0RFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCmluZGV4IDUxNjg0OGQuLjM5ZDI1M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKQEAgLTM3LDI4ICszNyw4IEBACiAvKiBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWYgZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChQQ01DSUFfREVCVUcpCi0KLXN0YXRpYyBpbnQgcGNfZGVidWcgPSAwOwotbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwotCi0jZGVmaW5lIERCRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyAic2w4MTFfY3M6ICIgYXJncykKLQotI2Vsc2UKLSNkZWZpbmUgREJHKG4sIGFyZ3MuLi4pIGRve313aGlsZSgwKQotI2VuZGlmCS8qIG5vIGRlYnVnZ2luZyAqLwotCiAjZGVmaW5lIElORk8oYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyAic2w4MTFfY3M6ICIgYXJncykKIAotI2RlZmluZSBJTlRfTU9EVUxFX1BBUk0obiwgdikgc3RhdGljIGludCBuID0gdjsgbW9kdWxlX3BhcmFtKG4sIGludCwgMDQ0NCkKLQotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi0JZG8geyBcCi0JCWxhc3RfZm4gPSAoZm4pOyBcCi0JCWlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgXAotCQkJZ290byBjc19mYWlsZWQ7IFwKLQl9IHdoaWxlICgwKQotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC03Niw3ICs1Niw3IEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGxhdGZvcm1fZGV2KHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7Ci0JREJHKDAsICJzbDgxMV9jcyBwbGF0Zm9ybV9kZXYgcmVsZWFzZVxuIik7CisJZGV2X2RiZyhkZXYsICJzbDgxMV9jcyBwbGF0Zm9ybV9kZXYgcmVsZWFzZVxuIik7CiAJZGV2LT5wYXJlbnQgPSBOVUxMOwogfQogCkBAIC0xNDAsNyArMTIwLDcgQEAKIAogc3RhdGljIHZvaWQgc2w4MTFfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCURCRygwLCAic2w4MTFfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlkZXZfZGJnKCZsaW5rLT5kZXYsICJzbDgxMV9jc19kZXRhY2hcbiIpOwogCiAJc2w4MTFfY3NfcmVsZWFzZShsaW5rKTsKIApAQCAtMTUwLDcgKzEzMCw3IEBACiAKIHN0YXRpYyB2b2lkIHNsODExX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewotCURCRygwLCAic2w4MTFfY3NfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAic2w4MTFfY3NfcmVsZWFzZVxuIik7CiAKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBsYXRmb3JtX2Rldik7CkBAIC0yMDUsMTEgKzE4NSwxMSBAQAogCiBzdGF0aWMgaW50IHNsODExX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50ID0gJmhhbmRsZV90b19kZXYobGluayk7CisJc3RydWN0IGRldmljZQkJKnBhcmVudCA9ICZsaW5rLT5kZXY7CiAJbG9jYWxfaW5mb190CQkqZGV2ID0gbGluay0+cHJpdjsKLQlpbnQJCQlsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQJCQlyZXQ7CiAKLQlEQkcoMCwgInNsODExX2NzX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisJZGV2X2RiZygmbGluay0+ZGV2LCAic2w4MTFfY3NfY29uZmlnXG4iKTsKIAogCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgc2w4MTFfY3NfY29uZmlnX2NoZWNrLCBOVUxMKSkKIAkJZ290byBmYWlsZWQ7CkBAIC0yMTcsMTQgKzE5NywxNiBAQAogCS8qIHJlcXVpcmUgYW4gSVJRIGFuZCB0d28gcmVnaXN0ZXJzICovCiAJaWYgKCFsaW5rLT5pby5OdW1Qb3J0czEgfHwgbGluay0+aW8uTnVtUG9ydHMxIDwgMikKIAkJZ290byBmYWlsZWQ7Ci0JaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKLQkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwKLQkJCXBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JZWxzZQorCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CisJfSBlbHNlCiAJCWdvdG8gZmFpbGVkOwogCi0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCi0JCXBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCBkcml2ZXJfbmFtZSk7CiAJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKQEAgLTI0MSw4ICsyMjMsNiBAQAogCiAJaWYgKHNsODExX2hjX2luaXQocGFyZW50LCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkKIAkJCTwgMCkgewotY3NfZmFpbGVkOgotCQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInNsODExX2NzX2NvbmZpZyBmYWlsZWRcbiIpOwogCQlzbDgxMV9jc19yZWxlYXNlKGxpbmspOwpAQCAtMjYzLDcgKzI0Myw2IEBACiAKIAkvKiBJbml0aWFsaXplICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7Ci0JbGluay0+aXJxLklSUUluZm8xID0gSVJRX0lORk8yX1ZBTElEfElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCmluZGV4IGM2MzI0MzcuLjU2MmViYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKQEAgLTExNSw2ICsxMTUsMTAgQEAKIAkJaWYgKHN0YXR1cyAmIFFURF9TVFNfSEFMVEVEKSB7CiAJCQkvKiBVZywgYW4gZXJyb3IuICovCiAJCQlwcm9jZXNzX2hhbHRlZF9xdGQod2hjLCBxc2V0LCB0ZCk7CisJCQkvKiBBIGhhbHRlZCBxVEQgYWx3YXlzIHRyaWdnZXJzIGFuIHVwZGF0ZQorCQkJICAgYmVjYXVzZSB0aGUgcXNldCB3YXMgZWl0aGVyIHJlbW92ZWQgb3IKKwkJCSAgIHJlYWN0aXZhdGVkLiAqLworCQkJdXBkYXRlIHw9IFdIQ19VUERBVEVfVVBEQVRFRDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zMDUsNiArMzA5LDcgQEAKIAlzdHJ1Y3Qgd2hjX3VyYiAqd3VyYiA9IHVyYi0+aGNwcml2OwogCXN0cnVjdCB3aGNfcXNldCAqcXNldCA9IHd1cmItPnFzZXQ7CiAJc3RydWN0IHdoY19zdGQgKnN0ZCwgKnQ7CisJYm9vbCBoYXNfcXRkID0gZmFsc2U7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zMTUsMTcgKzMyMCwyMSBAQAogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGQsIHQsICZxc2V0LT5zdGRzLCBsaXN0X25vZGUpIHsKLQkJaWYgKHN0ZC0+dXJiID09IHVyYikKKwkJaWYgKHN0ZC0+dXJiID09IHVyYikgeworCQkJaWYgKHN0ZC0+cXRkKQorCQkJCWhhc19xdGQgPSB0cnVlOwogCQkJcXNldF9mcmVlX3N0ZCh3aGMsIHN0ZCk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlzdGQtPnF0ZCA9IE5VTEw7IC8qIHNvIHRoaXMgc3RkIGlzIHJlLWFkZGVkIHdoZW4gdGhlIHFzZXQgaXMgKi8KIAl9CiAKLQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKLQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7Ci0Jd3VyYi0+aXNfYXN5bmMgPSB0cnVlOwotCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOwotCisJaWYgKGhhc19xdGQpIHsKKwkJYXNsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSB0cnVlOworCQlxdWV1ZV93b3JrKHdoYy0+d29ya3F1ZXVlLCAmd3VyYi0+ZGVxdWV1ZV93b3JrKTsKKwl9IGVsc2UKKwkJcXNldF9yZW1vdmVfdXJiKHdoYywgcXNldCwgdXJiLCBzdGF0dXMpOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndoYy0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKaW5kZXggYTllMDViYS4uMGRiM2ZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwpAQCAtMTIxLDYgKzEyMSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMzMyw2ICszMzcsNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM0MywxNyArMzQ4LDIyIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCXB6bF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IGZhbHNlOwotCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOwotCisJaWYgKGhhc19xdGQpIHsKKwkJcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7CisJCXVwZGF0ZV9wemxfaHdfdmlldyh3aGMpOworCQl3dXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCAxZGI0ZmVhLi5iOGZkMjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC04MDIsOSArODAyLDExIEBACiAJaW50IGk7CiAKIAkvKiBGcmVlIHRoZSBFdmVudCBSaW5nIFNlZ21lbnQgVGFibGUgYW5kIHRoZSBhY3R1YWwgRXZlbnQgUmluZyAqLwotCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2Jhc2UpOwotCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKKwlpZiAoeGhjaS0+aXJfc2V0KSB7CisJCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7CisJCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9iYXNlKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCX0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB4aGNpX2Vyc3RfZW50cnkpKih4aGNpLT5lcnN0Lm51bV9lbnRyaWVzKTsKIAlpZiAoeGhjaS0+ZXJzdC5lbnRyaWVzKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemUsCkBAIC04NDEsOSArODQzLDkgQEAKIAkJCQl4aGNpLT5kY2JhYSwgeGhjaS0+ZGNiYWEtPmRtYSk7CiAJeGhjaS0+ZGNiYWEgPSBOVUxMOwogCisJc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogCXhoY2ktPnBhZ2Vfc2l6ZSA9IDA7CiAJeGhjaS0+cGFnZV9zaGlmdCA9IDA7Ci0Jc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogfQogCiBpbnQgeGhjaV9tZW1faW5pdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IGZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggMTczYzM5Yy4uODIxYjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC04NjQsOSArODY0LDExIEBACiAJY3VyX3NlZyA9IHN0YXJ0X3NlZzsKIAogCWRvIHsKKwkJaWYgKHN0YXJ0X2RtYSA9PSAwKQorCQkJcmV0dXJuIDA7CiAJCS8qIFdlIG1heSBnZXQgYW4gZXZlbnQgZm9yIGEgTGluayBUUkIgaW4gdGhlIG1pZGRsZSBvZiBhIFREICovCiAJCWVuZF9zZWdfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywKLQkJCQkmc3RhcnRfc2VnLT50cmJzW1RSQlNfUEVSX1NFR01FTlQgLSAxXSk7CisJCQkJJmN1cl9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdKTsKIAkJLyogSWYgdGhlIGVuZCBUUkIgaXNuJ3QgaW4gdGhpcyBzZWdtZW50LCB0aGlzIGlzIHNldCB0byAwICovCiAJCWVuZF90cmJfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywgZW5kX3RyYik7CiAKQEAgLTg5Myw4ICs4OTUsOSBAQAogCQl9CiAJCWN1cl9zZWcgPSBjdXJfc2VnLT5uZXh0OwogCQlzdGFydF9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLCAmY3VyX3NlZy0+dHJic1swXSk7Ci0JfSB3aGlsZSAoMSk7CisJfSB3aGlsZSAoY3VyX3NlZyAhPSBzdGFydF9zZWcpOwogCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA5ZWQzZTc0Li4xMGYzMjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTM0OCwxMiArMzQ4LDEyIEBACiAKIC8qCiAgKiBSZXR1cm4gYSBmZXcgKGtpbG8tKWJ5dGVzIHRvIHRoZSBoZWFkIG9mIHRoZSBidWZmZXIuCi0gKiBUaGlzIGlzIHVzZWQgaWYgYSBETUEgZmV0Y2ggZmFpbHMuCisgKiBUaGlzIGlzIHVzZWQgaWYgYSBkYXRhIGZldGNoIGZhaWxzLgogICovCiBzdGF0aWMgdm9pZCBtb25fYnVmZl9hcmVhX3NocmluayhzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAotCXNpemUgPSAoc2l6ZSArIFBLVF9BTElHTi0xKSAmIH4oUEtUX0FMSUdOLTEpOworCS8qIHNpemUgJj0gfihQS1RfQUxJR04tMSk7ICAtLSB3ZSdyZSBjYWxsZWQgd2l0aCBhbGlnbmVkIHNpemUgKi8KIAlycC0+Yl9jbnQgLT0gc2l6ZTsKIAlpZiAocnAtPmJfaW4gPCBzaXplKQogCQlycC0+Yl9pbiArPSBycC0+Yl9zaXplOwpAQCAtNDMzLDYgKzQzMyw3IEBACiAJdW5zaWduZWQgaW50IHVyYl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBkZWx0YTsKIAl1bnNpZ25lZCBpbnQgbmRlc2MsIGxlbmRlc2M7CiAJdW5zaWduZWQgY2hhciBkaXI7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKQEAgLTUzNyw4ICs1MzgsMTAgQEAKIAlpZiAobGVuZ3RoICE9IDApIHsKIAkJZXAtPmZsYWdfZGF0YSA9IG1vbl9iaW5fZ2V0X2RhdGEocnAsIG9mZnNldCwgdXJiLCBsZW5ndGgpOwogCQlpZiAoZXAtPmZsYWdfZGF0YSAhPSAwKSB7CS8qIFllcywgaXQncyAweDAwLCBub3QgJzAnICovCi0JCQllcC0+bGVuX2NhcCA9IDA7Ci0JCQltb25fYnVmZl9hcmVhX3NocmluayhycCwgbGVuZ3RoKTsKKwkJCWRlbHRhID0gKGVwLT5sZW5fY2FwICsgUEtUX0FMSUdOLTEpICYgfihQS1RfQUxJR04tMSk7CisJCQllcC0+bGVuX2NhcCAtPSBsZW5ndGg7CisJCQlkZWx0YSAtPSAoZXAtPmxlbl9jYXAgKyBQS1RfQUxJR04tMSkgJiB+KFBLVF9BTElHTi0xKTsKKwkJCW1vbl9idWZmX2FyZWFfc2hyaW5rKHJwLCBkZWx0YSk7CiAJCX0KIAl9IGVsc2UgewogCQllcC0+ZmxhZ19kYXRhID0gZGF0YV90YWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggYzM1NzdiYi4uZWYyMzMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtMTQ0MiwxMSArMTQ0Miw2IEBACiAJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfVFhDU1IsIHZhbHVlKTsKIAkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWENTUiwgdmFsdWUpOwogCi0JCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHQgKi8KLQkJaWYgKGVuYWJsZWQpCi0JCQltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfVFhDUFBJX0lOVEVOQUJfUkVHLAotCQkJCQkoMSA8PCBjcHBpX2NoLT5pbmRleCkpOwotCiAJCS8qIFdoaWxlIHdlIHNjcnViIHRoZSBUWCBzdGF0ZSBSQU0sIGVuc3VyZSB0aGF0IHdlIGNsZWFuCiAJCSAqIHVwIGFueSBpbnRlcnJ1cHQgdGhhdCdzIGN1cnJlbnRseSBhc3NlcnRlZDoKIAkJICogMS4gV3JpdGUgdG8gY29tcGxldGlvbiBQdHIgdmFsdWUgMHgxKGJpdCAwIHNldCkKQEAgLTE0NTksNiArMTQ1NCwxMSBAQAogCQljcHBpX3Jlc2V0X3R4KHR4X3JhbSwgMSk7CiAJCW11c2Jfd3JpdGVsKCZ0eF9yYW0tPnR4X2NvbXBsZXRlLCAwLCAwKTsKIAorCQkvKiByZS1lbmFibGUgaW50ZXJydXB0ICovCisJCWlmIChlbmFibGVkKQorCQkJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1RYQ1BQSV9JTlRFTkFCX1JFRywKKwkJCQkJKDEgPDwgY3BwaV9jaC0+aW5kZXgpKTsKKwogCQljcHBpX2R1bXBfdHgoNSwgY3BwaV9jaCwgIiAoZG9uZSB0ZWFyZG93bikiKTsKIAogCQkvKiBSRVZJU0lUIHR4IHNpZGUgX3Nob3VsZF8gY2xlYW4gdXAgdGhlIHNhbWUgd2F5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAzYTYxZGRiLi41NDdlMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTE0NTAsNyArMTQ1MCw3IEBACiAjZW5kaWYKIAogCQlpZiAoaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQlEQkcoMSwKIAkJCQkiJXM6IGh3X2VwICVkJXMsICVzbWF4ICVkXG4iLAogCQkJCW11c2JfZHJpdmVyX25hbWUsIGksCiAJCQkJaHdfZXAtPmlzX3NoYXJlZF9maWZvID8gInNoYXJlZCIgOiAidHgiLApAQCAtMTQ1OSw3ICsxNDU5LDcgQEAKIAkJCQlod19lcC0+bWF4X3BhY2tldF9zel90eCk7CiAJCX0KIAkJaWYgKGh3X2VwLT5tYXhfcGFja2V0X3N6X3J4ICYmICFod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQlEQkcoMSwKIAkJCQkiJXM6IGh3X2VwICVkJXMsICVzbWF4ICVkXG4iLAogCQkJCW11c2JfZHJpdmVyX25hbWUsIGksCiAJCQkJInJ4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCA4YjNjNGUyLi43NDA3M2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IDIwMDUgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBieSBUZXhhcyBJbnN0cnVtZW50cwogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNDM2LDE0ICs0MzcsNiBAQAogCQkJY3NyIHw9IE1VU0JfVFhDU1JfUF9XWkNfQklUUzsKIAkJCWNzciAmPSB+TVVTQl9UWENTUl9QX1NFTlRTVEFMTDsKIAkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIGNzcik7Ci0JCQlpZiAoZG1hX2NoYW5uZWxfc3RhdHVzKGRtYSkgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKLQkJCQlkbWEtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19DT1JFX0FCT1JUOwotCQkJCW11c2ItPmRtYV9jb250cm9sbGVyLT5jaGFubmVsX2Fib3J0KGRtYSk7Ci0JCQl9Ci0KLQkJCWlmIChyZXF1ZXN0KQotCQkJCW11c2JfZ19naXZlYmFjayhtdXNiX2VwLCByZXF1ZXN0LCAtRVBJUEUpOwotCiAJCQlicmVhazsKIAkJfQogCkBAIC01ODIsMTUgKzU3NSwyNSBAQAogICovCiBzdGF0aWMgdm9pZCByeHN0YXRlKHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9yZXF1ZXN0ICpyZXEpCiB7Ci0JdTE2CQkJY3NyID0gMDsKIAljb25zdCB1OAkJZXBudW0gPSByZXEtPmVwbnVtOwogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxdWVzdCA9ICZyZXEtPnJlcXVlc3Q7CiAJc3RydWN0IG11c2JfZXAJCSptdXNiX2VwID0gJm11c2ItPmVuZHBvaW50c1tlcG51bV0uZXBfb3V0OwogCXZvaWQgX19pb21lbQkJKmVwaW8gPSBtdXNiLT5lbmRwb2ludHNbZXBudW1dLnJlZ3M7CiAJdW5zaWduZWQJCWZpZm9fY291bnQgPSAwOwogCXUxNgkJCWxlbiA9IG11c2JfZXAtPnBhY2tldF9zejsKKwl1MTYJCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwogCi0JY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKTsKKwkvKiBXZSBzaG91bGRuJ3QgZ2V0IGhlcmUgd2hpbGUgRE1BIGlzIGFjdGl2ZSwgYnV0IHdlIGRvLi4uICovCisJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhtdXNiX2VwLT5kbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CisJCURCRyg0LCAiRE1BIHBlbmRpbmcuLi5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNzciAmIE1VU0JfUlhDU1JfUF9TRU5EU1RBTEwpIHsKKwkJREJHKDUsICIlcyBzdGFsbGluZywgUlhDU1IgJTA0eFxuIiwKKwkJICAgIG11c2JfZXAtPmVuZF9wb2ludC5uYW1lLCBjc3IpOworCQlyZXR1cm47CisJfQogCiAJaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIG11c2JfZXAtPmRtYSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKQEAgLTc2MSwxOSArNzY0LDEwIEBACiAJCQljc3IsIGRtYSA/ICIgKGRtYSkiIDogIiIsIHJlcXVlc3QpOwogCiAJaWYgKGNzciAmIE1VU0JfUlhDU1JfUF9TRU5UU1RBTEwpIHsKLQkJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhkbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7Ci0JCQlkbWEtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19DT1JFX0FCT1JUOwotCQkJKHZvaWQpIG11c2ItPmRtYV9jb250cm9sbGVyLT5jaGFubmVsX2Fib3J0KGRtYSk7Ci0JCQlyZXF1ZXN0LT5hY3R1YWwgKz0gbXVzYl9lcC0+ZG1hLT5hY3R1YWxfbGVuOwotCQl9Ci0KIAkJY3NyIHw9IE1VU0JfUlhDU1JfUF9XWkNfQklUUzsKIAkJY3NyICY9IH5NVVNCX1JYQ1NSX1BfU0VOVFNUQUxMOwogCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCBjc3IpOwotCi0JCWlmIChyZXF1ZXN0KQotCQkJbXVzYl9nX2dpdmViYWNrKG11c2JfZXAsIHJlcXVlc3QsIC1FUElQRSk7Ci0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChjc3IgJiBNVVNCX1JYQ1NSX1BfT1ZFUlJVTikgewpAQCAtNzk1LDcgKzc4OSw3IEBACiAJCURCRygoY3NyICYgTVVTQl9SWENTUl9ETUFFTkFCKSA/IDQgOiAxLAogCQkJIiVzIGJ1c3ksIGNzciAlMDR4XG4iLAogCQkJbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUsIGNzcik7Ci0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChkbWEgJiYgKGNzciAmIE1VU0JfUlhDU1JfRE1BRU5BQikpIHsKQEAgLTgyNiwyMiArODIwLDE1IEBACiAJCWlmICgocmVxdWVzdC0+YWN0dWFsIDwgcmVxdWVzdC0+bGVuZ3RoKQogCQkJCSYmIChtdXNiX2VwLT5kbWEtPmFjdHVhbF9sZW4KIAkJCQkJPT0gbXVzYl9lcC0+cGFja2V0X3N6KSkKLQkJCWdvdG8gZG9uZTsKKwkJCXJldHVybjsKICNlbmRpZgogCQltdXNiX2dfZ2l2ZWJhY2sobXVzYl9lcCwgcmVxdWVzdCwgMCk7CiAKIAkJcmVxdWVzdCA9IG5leHRfcmVxdWVzdChtdXNiX2VwKTsKIAkJaWYgKCFyZXF1ZXN0KQotCQkJZ290byBkb25lOwotCi0JCS8qIGRvbid0IHN0YXJ0IG1vcmUgaS9vIHRpbGwgdGhlIHN0YWxsIGNsZWFycyAqLwotCQltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXBudW0pOwotCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwotCQlpZiAoY3NyICYgTVVTQl9SWENTUl9QX1NFTkRTVEFMTCkKLQkJCWdvdG8gZG9uZTsKKwkJCXJldHVybjsKIAl9CiAKLQogCS8qIGFuYWx5emUgcmVxdWVzdCBpZiB0aGUgZXAgaXMgaG90ICovCiAJaWYgKHJlcXVlc3QpCiAJCXJ4c3RhdGUobXVzYiwgdG9fbXVzYl9yZXF1ZXN0KHJlcXVlc3QpKTsKQEAgLTg0OSw4ICs4MzYsNiBAQAogCQlEQkcoMywgInBhY2tldCB3YWl0aW5nIGZvciAlcyVzIHJlcXVlc3RcbiIsCiAJCQkJbXVzYl9lcC0+ZGVzYyA/ICIiIDogImluYWN0aXZlICIsCiAJCQkJbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUpOwotCi1kb25lOgogCXJldHVybjsKIH0KIApAQCAtMTI0NCw3ICsxMjI5LDcgQEAKIAl2b2lkIF9faW9tZW0JCSptYmFzZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAl1MTYJCQljc3I7Ci0Jc3RydWN0IG11c2JfcmVxdWVzdAkqcmVxdWVzdCA9IE5VTEw7CisJc3RydWN0IG11c2JfcmVxdWVzdAkqcmVxdWVzdDsKIAlpbnQJCQlzdGF0dXMgPSAwOwogCiAJaWYgKCFlcCkKQEAgLTEyNjAsMjQgKzEyNDUsMjkgQEAKIAogCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcG51bSk7CiAKLQkvKiBjYW5ub3QgcG9ydGFibHkgc3RhbGwgd2l0aCBub24tZW1wdHkgRklGTyAqLwogCXJlcXVlc3QgPSB0b19tdXNiX3JlcXVlc3QobmV4dF9yZXF1ZXN0KG11c2JfZXApKTsKLQlpZiAodmFsdWUgJiYgbXVzYl9lcC0+aXNfaW4pIHsKLQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKTsKLQkJaWYgKGNzciAmIE1VU0JfVFhDU1JfRklGT05PVEVNUFRZKSB7Ci0JCQlEQkcoMywgIiVzIGZpZm8gYnVzeSwgY2Fubm90IGhhbHRcbiIsIGVwLT5uYW1lKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAtRUFHQUlOOworCWlmICh2YWx1ZSkgeworCQlpZiAocmVxdWVzdCkgeworCQkJREJHKDMsICJyZXF1ZXN0IGluIHByb2dyZXNzLCBjYW5ub3QgaGFsdCAlc1xuIiwKKwkJCSAgICBlcC0+bmFtZSk7CisJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJZ290byBkb25lOwogCQl9Ci0KKwkJLyogQ2Fubm90IHBvcnRhYmx5IHN0YWxsIHdpdGggbm9uLWVtcHR5IEZJRk8gKi8KKwkJaWYgKG11c2JfZXAtPmlzX2luKSB7CisJCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOworCQkJaWYgKGNzciAmIE1VU0JfVFhDU1JfRklGT05PVEVNUFRZKSB7CisJCQkJREJHKDMsICJGSUZPIGJ1c3ksIGNhbm5vdCBoYWx0ICVzXG4iLCBlcC0+bmFtZSk7CisJCQkJc3RhdHVzID0gLUVBR0FJTjsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0KIAl9CiAKIAkvKiBzZXQvY2xlYXIgdGhlIHN0YWxsIGFuZCB0b2dnbGUgYml0cyAqLwogCURCRygyLCAiJXM6ICVzIHN0YWxsXG4iLCBlcC0+bmFtZSwgdmFsdWUgPyAic2V0IiA6ICJjbGVhciIpOwogCWlmIChtdXNiX2VwLT5pc19pbikgewogCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOwotCQlpZiAoY3NyICYgTVVTQl9UWENTUl9GSUZPTk9URU1QVFkpCi0JCQljc3IgfD0gTVVTQl9UWENTUl9GTFVTSEZJRk87CiAJCWNzciB8PSBNVVNCX1RYQ1NSX1BfV1pDX0JJVFMKIAkJCXwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAodmFsdWUpCkBAIC0xMzAwLDE0ICsxMjkwLDEzIEBACiAJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsIGNzcik7CiAJfQogCi1kb25lOgotCiAJLyogbWF5YmUgc3RhcnQgdGhlIGZpcnN0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlICovCiAJaWYgKCFtdXNiX2VwLT5idXN5ICYmICF2YWx1ZSAmJiByZXF1ZXN0KSB7CiAJCURCRygzLCAicmVzdGFydGluZyB0aGUgcmVxdWVzdFxuIik7CiAJCW11c2JfZXBfcmVzdGFydChtdXNiLCByZXF1ZXN0KTsKIAl9CiAKK2RvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCA3YTY3Nzg2Li41MjJlZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTUxMSw3ICs1MTEsOCBAQAogCiAJLyogdXBkYXRlIHRoZSBmbGFncyAqLwogCWlmIChmaWZvX2NvdW50IDwgTVVTQl9NQVhfRU5EMF9QQUNLRVQKLQkJCXx8IHJlcXVlc3QtPmFjdHVhbCA9PSByZXF1ZXN0LT5sZW5ndGgpIHsKKwkJCXx8IChyZXF1ZXN0LT5hY3R1YWwgPT0gcmVxdWVzdC0+bGVuZ3RoCisJCQkJJiYgIXJlcXVlc3QtPnplcm8pKSB7CiAJCW11c2ItPmVwMF9zdGF0ZSA9IE1VU0JfRVAwX1NUQUdFX1NUQVRVU09VVDsKIAkJY3NyIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCBjZjk0NTExLi5lM2FiNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTEzMDEsOCArMTMwMSwxMSBAQAogCQlyZXR1cm47CiAJfSBlbHNlCWlmICh1c2JfcGlwZWlzb2MocGlwZSkgJiYgZG1hKSB7CiAJCWlmIChtdXNiX3R4X2RtYV9wcm9ncmFtKG11c2ItPmRtYV9jb250cm9sbGVyLCBod19lcCwgcWgsIHVyYiwKLQkJCQlvZmZzZXQsIGxlbmd0aCkpCisJCQkJb2Zmc2V0LCBsZW5ndGgpKSB7CisJCQlpZiAoaXNfY3BwaV9lbmFibGVkKCkgfHwgdHVzYl9kbWFfb21hcCgpKQorCQkJCW11c2JfaF90eF9kbWFfc3RhcnQoaHdfZXApOwogCQkJcmV0dXJuOworCQl9CiAJfSBlbHNlCWlmICh0eF9jc3IgJiBNVVNCX1RYQ1NSX0RNQUVOQUIpIHsKIAkJREJHKDEsICJub3QgY29tcGxldGUsIGJ1dCBETUEgZW5hYmxlZD9cbiIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggNjk4MjUyYS4uYmQyNTRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNTAsNiArNTAsOCBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kaXNjb25uZWN0KHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKTsKK3N0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApOwogCiBzdGF0aWMgaW50IGRlYnVnOwogCkBAIC0xNDMsNiArMTQ1LDggQEAKIAkudGlvY21zZXQJCT0gY3AyMTB4X3Rpb2Ntc2V0LAogCS5hdHRhY2gJCQk9IGNwMjEweF9zdGFydHVwLAogCS5kaXNjb25uZWN0CQk9IGNwMjEweF9kaXNjb25uZWN0LAorCS5kdHJfcnRzCQk9IGNwMjEweF9kdHJfcnRzLAorCS5jYXJyaWVyX3JhaXNlZAkJPSBjcDIxMHhfY2Fycmllcl9yYWlzZWQKIH07CiAKIC8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCkBAIC03NDYsNiArNzUwLDE0IEBACiAJcmV0dXJuIGNwMjEweF9zZXRfY29uZmlnKHBvcnQsIENQMjEwWF9TRVRfTUhTLCAmY29udHJvbCwgMik7CiB9CiAKK3N0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbikKK3sKKwlpZiAob24pCisJCWNwMjEweF90aW9jbXNldF9wb3J0KHAsIE5VTEwsICBUSU9DTV9EVFJ8VElPQ01fUlRTLCAwKTsKKwllbHNlCisJCWNwMjEweF90aW9jbXNldF9wb3J0KHAsIE5VTEwsICAwLCBUSU9DTV9EVFJ8VElPQ01fUlRTKTsKK30KKwogc3RhdGljIGludCBjcDIxMHhfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwpAQCAtNzY4LDYgKzc4MCwxNSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQgY3AyMTB4X2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnApCit7CisJdW5zaWduZWQgaW50IGNvbnRyb2w7CisJY3AyMTB4X2dldF9jb25maWcocCwgQ1AyMTBYX0dFVF9NRE1TVFMsICZjb250cm9sLCAxKTsKKwlpZiAoY29udHJvbCAmIENPTlRST0xfRENEKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA5YzYwZDZkLi5lYmNjNmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTkzNyw3ICsxOTM3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAkvKiBhY2NvdW50IGZvciB0cmFuc2ZlcnJlZCBkYXRhICovCi0JY291bnRiYWNrID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWNvdW50YmFjayA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAlkYXRhX29mZnNldCA9IHByaXYtPndyaXRlX29mZnNldDsKIAlpZiAoZGF0YV9vZmZzZXQgPiAwKSB7CiAJCS8qIFN1YnRyYWN0IHRoZSBjb250cm9sIGJ5dGVzICovCkBAIC0xOTUwLDcgKzE5NTAsNiBAQAogCiAJaWYgKHN0YXR1cykgewogCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgc3RhdHVzKTsKLQkJcmV0dXJuOwogCX0KIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDQzYzIyNzAuLjA1NzdlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTMwOCw2ICszMDgsNyBAQAogCiAjZGVmaW5lIERMSU5LX1ZFTkRPUl9JRAkJCQkweDExODYKICNkZWZpbmUgRExJTktfUFJPRFVDVF9EV01fNjUyCQkJMHgzZTA0CisjZGVmaW5lIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNQkJMHhjZTE2CiAKICNkZWZpbmUgUUlTREFfVkVORE9SX0lECQkJCTB4MWRhNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMV80NTEyCQkJMHg0NTEyCkBAIC0zMTUsNiArMzE2LDkgQEAKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxNQkJCTB4NDUxNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE5CQkJMHg0NTE5CiAKKy8qIFRMQVlURUNIIFBST0RVQ1RTICovCisjZGVmaW5lIFRMQVlURUNIX1ZFTkRPUl9JRAkJCTB4MjBCOQorI2RlZmluZSBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMAkJCTB4MTY4MgogCiAvKiBUT1NISUJBIFBST0RVQ1RTICovCiAjZGVmaW5lIFRPU0hJQkFfVkVORE9SX0lECQkJMHgwOTMwCkBAIC0zMjgsNiArMzMyLDEzIEBACiAjZGVmaW5lIEFMQ0FURUxfVkVORE9SX0lECQkJMHgxYmJiCiAjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwUwkJCTB4MDAwMAogCisvKiBBaXJwbHVzIHByb2R1Y3RzICovCisjZGVmaW5lIEFJUlBMVVNfVkVORE9SX0lECQkJMHgxMDExCisjZGVmaW5lIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTAJCQkweDMxOTgKKworLyogNEcgU3lzdGVtcyBwcm9kdWN0cyAqLworI2RlZmluZSBGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQJCTB4MWM5ZQorI2RlZmluZSBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxNAkJMHg5NjAzCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCkBAIC01ODAsNiArNTkxLDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQkVOUV9WRU5ET1JfSUQsIEJFTlFfUFJPRFVDVF9IMTApIH0sCiAJeyBVU0JfREVWSUNFKERMSU5LX1ZFTkRPUl9JRCwgRExJTktfUFJPRFVDVF9EV01fNjUyKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNSkgfSwgLyogWWVzLCBBTElOS19WRU5ET1JfSUQgKi8KIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTEyKSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxNSkgfSwKQEAgLTU4OSw2ICs2MDEsOSBAQAogCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIDB4OTAwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEFMSU5LX1ZFTkRPUl9JRCwgQUxJTktfUFJPRFVDVF8zR1UsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFMpIH0sCisJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAorCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAorCXsgVVNCX0RFVklDRShGT1VSX0dfU1lTVEVNU19WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA0NTg4Mzk4Li41MDE5MzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yOTYsNyArMjk2LDYgQEAKIAlpbnQgZHNyX3N0YXRlOwogCWludCBkY2Rfc3RhdGU7CiAJaW50IHJpX3N0YXRlOwotCiAJdW5zaWduZWQgaW50IG9wZW5lZDoxOwogfTsKIApAQCAtMzA2LDYgKzMwNSw4IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCV9fdTE2IGludGVyZmFjZSA9IDA7CiAJaW50IHZhbCA9IDA7CisJaW50IGRvX3NlbmQgPSAwOworCWludCByZXR2YWw7CiAKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCkBAIC0zMjQsMTAgKzMyNSw3IEBACiAJCSAqLwogCQlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgewogCQkJLyogc2VuZCBjb250cm9sIG1lc3NhZ2UgKi8KLQkJCXJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQlkb19zZW5kID0gMTsKIAkJfQogCX0KIApAQCAtMzM5LDEyICszMzcsMTggQEAKIAkJCWludGVyZmFjZSA9IDE7CiAJCWVsc2UgaWYgKHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9PSA1KQogCQkJaW50ZXJmYWNlID0gMjsKLQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCQlkb19zZW5kID0gMTsKIAl9Ci0JcmV0dXJuIDA7CisJaWYgKCFkb19zZW5kKQorCQlyZXR1cm4gMDsKKworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTc3Myw4ICs3NzcsMTEgQEAKIAogCWlmIChzZXJpYWwtPmRldikgewogCQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKQorCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CisJCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQkJc2llcnJhX3NlbmRfc2V0dXAocG9ydCk7CisJCX0KIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAkJcG9ydGRhdGEtPm9wZW5lZCA9IDA7CkBAIC03ODgsOCArNzk1LDYgQEAKIAkJCXNpZXJyYV9yZWxlYXNlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CiAJCX0KLQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCX0KIH0KIApAQCAtODI3LDYgKzgzMiw4IEBACiAJaWYgKGVycikgewogCQkvKiBnZXQgcmlkIG9mIGV2ZXJ5dGhpbmcgYXMgaW4gY2xvc2UgKi8KIAkJc2llcnJhX2Nsb3NlKHBvcnQpOworCQkvKiByZXN0b3JlIGJhbGFuY2UgZm9yIGF1dG9wbSAqLworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKQEAgLTkxNSw3ICs5MjIsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIApAQCAtOTIzLDggKzkzMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKQotCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2pdKTsKKwkJc2llcnJhX3N0b3BfcnhfdXJicyhwb3J0KTsKIAkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcG9ydGRhdGEtPmFjdGl2ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggM2E0ZmIwMi4uNTg5ZjZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAkJLyogZGV2aWNlIHN1cHBvcnRzIGFuZCBuZWVkcyBiaWdnZXIgc2Vuc2UgYnVmZmVyICovCiAJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0FORV9TRU5TRSkKIAkJCXNlbnNlX3NpemUgPSB+MDsKLQorUmV0cnlfU2Vuc2U6CiAJCVVTX0RFQlVHUCgiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOwogCiAJCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgc2Vuc2Vfc2l6ZSk7CkBAIC03MjAsNiArNzIwLDIxIEBACiAJCQlzcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCWdvdG8gSGFuZGxlX0Vycm9yczsKIAkJfQorCisJCS8qIFNvbWUgZGV2aWNlcyBjbGFpbSB0byBzdXBwb3J0IGxhcmdlciBzZW5zZSBidXQgZmFpbCB3aGVuCisJCSAqIHRyeWluZyB0byByZXF1ZXN0IGl0LiBXaGVuIGEgdHJhbnNwb3J0IGZhaWx1cmUgaGFwcGVucworCQkgKiB1c2luZyBVU19GU19TQU5FX1NFTlNFLCB3ZSBhbHdheXMgcmV0cnkgd2l0aCBhIHN0YW5kYXJkCisJCSAqIChzbWFsbCkgc2Vuc2UgcmVxdWVzdC4gVGhpcyBmaXhlcyBzb21lIFVTQiBHU00gbW9kZW1zCisJCSAqLworCQlpZiAodGVtcF9yZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCAmJgorCQkgICAgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKSAmJgorCQkgICAgc2Vuc2Vfc2l6ZSAhPSBVU19TRU5TRV9TSVpFKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZSwgcmV0cnkgc21hbGwgc2Vuc2VcbiIpOworCQkJc2Vuc2Vfc2l6ZSA9IFVTX1NFTlNFX1NJWkU7CisJCQlnb3RvIFJldHJ5X1NlbnNlOworCQl9CisKKwkJLyogT3RoZXIgZmFpbHVyZXMgKi8KIAkJaWYgKHRlbXBfcmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CiAJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGIyZjE0OWYuLjQ1MTZjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMjAwLDM1ICsyMDAsNDAgQEAKIHsKIAlpbnQgcmVzdWx0LCBieXRlcywgc2VjZF9zaXplOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7Ci0Jc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHNlY2Q7CisJc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yICpzZWNkOwogCWNvbnN0IHN0cnVjdCB1c2JfZW5jcnlwdGlvbl9kZXNjcmlwdG9yICpldGQsICpjY20xX2V0ZCA9IE5VTEw7Ci0Jdm9pZCAqc2VjZF9idWY7CiAJY29uc3Qgdm9pZCAqaXRyLCAqdG9wOwogCWNoYXIgYnVmWzY0XTsKIAorCXNlY2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfU0VDVVJJVFksCi0JCQkJICAgIDAsICZzZWNkLCBzaXplb2Yoc2VjZCkpOworCQkJCSAgICAwLCBzZWNkLCBzaXplb2Yoc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yKSk7CiAJaWYgKHJlc3VsdCA8IHNpemVvZihzZWNkKSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkOworCQlnb3RvIG91dDsKIAl9Ci0Jc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC53VG90YWxMZW5ndGgpOwotCXNlY2RfYnVmID0ga21hbGxvYyhzZWNkX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChzZWNkX2J1ZiA9PSBOVUxMKSB7CisJc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC0+d1RvdGFsTGVuZ3RoKTsKKwlzZWNkID0ga3JlYWxsb2Moc2VjZCwgc2VjZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIHNlY3VyaXR5IGRlc2NyaXB0b3JzXG4iKTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbG9jOworCQlnb3RvIG91dDsKIAl9CiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgc2VjZF9idWYsIHNlY2Rfc2l6ZSk7CisJCQkJICAgIDAsIHNlY2QsIHNlY2Rfc2l6ZSk7CiAJaWYgKHJlc3VsdCA8IHNlY2Rfc2l6ZSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbDsKKwkJZ290byBvdXQ7CiAJfQogCWJ5dGVzID0gMDsKLQlpdHIgPSBzZWNkX2J1ZiArIHNpemVvZihzZWNkKTsKLQl0b3AgPSBzZWNkX2J1ZiArIHJlc3VsdDsKKwlpdHIgPSAmc2VjZFsxXTsKKwl0b3AgPSAodm9pZCAqKXNlY2QgKyByZXN1bHQ7CiAJd2hpbGUgKGl0ciA8IHRvcCkgewogCQlldGQgPSBpdHI7CiAJCWlmICh0b3AgLSBpdHIgPCBzaXplb2YoKmV0ZCkpIHsKQEAgLTI1OSwyNCArMjY0LDE2IEBACiAJCWRldl9lcnIoZGV2LCAiV1VTQiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IENDTTEgZW5jcnlwdGlvbiwgIgogCQkJImNhbid0IHVzZSFcbiIpOwogCQlyZXN1bHQgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yX25vX2NjbTE7CisJCWdvdG8gb3V0OwogCX0KIAl3dXNiX2Rldi0+Y2NtMV9ldGQgPSAqY2NtMV9ldGQ7CiAJZGV2X2RiZyhkZXYsICJzdXBwb3J0ZWQgZW5jcnlwdGlvbjogJXM7IHVzaW5nICVzICgweCUwMngvJTAyeClcbiIsCiAJCWJ1Ziwgd3VzYl9ldF9uYW1lKGNjbTFfZXRkLT5iRW5jcnlwdGlvblR5cGUpLAogCQljY20xX2V0ZC0+YkVuY3J5cHRpb25WYWx1ZSwgY2NtMV9ldGQtPmJBdXRoS2V5SW5kZXgpOwogCXJlc3VsdCA9IDA7Ci0Ja2ZyZWUoc2VjZF9idWYpOwogb3V0OgorCWtmcmVlKHNlY2QpOwogCXJldHVybiByZXN1bHQ7Ci0KLQotZXJyb3Jfbm9fY2NtMToKLWVycm9yX3NlY2RfYWxsOgotCWtmcmVlKHNlY2RfYnVmKTsKLWVycm9yX3NlY2RfYWxsb2M6Ci1lcnJvcl9zZWNkOgotCWdvdG8gb3V0OwogfQogCiB2b2lkIHd1c2JfZGV2X3NlY19ybShzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDliYmIyODUuLjE4OGUxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTIxMjEsNyArMjEyMSw3IEBACiAKIGNvbmZpZyBGQl9QUkVfSU5JVF9GQgogCWJvb2wgIkRvbid0IHJlaW5pdGlhbGl6ZSwgdXNlIGJvb3Rsb2FkZXIncyBHREMvRGlzcGxheSBjb25maWd1cmF0aW9uIgotCWRlcGVuZHMgb24gRkJfTUI4NjJYWF9MSU1FCisJZGVwZW5kcyBvbiBGQiAmJiBGQl9NQjg2MlhYX0xJTUUKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgZGlzcGxheSBjb250ZW50cyBzaG91bGQgYmUgaW5oZXJpdGVkIGFzIHNldCBieQogCSAgdGhlIGJvb3Rsb2FkZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKaW5kZXggOGNkMjc5Yi4uMzc2MjRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwpAQCAtMzI5LDEyICszMjksNiBAQAogICoKICAqCSogcGVyZm9ybSBmYiBzcGVjaWZpYyBtbWFwICoKICAqCWludCAoKmZiX21tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci0gKgotICoJKiBzYXZlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdGUgKgotICoJdm9pZCAoKmZiX3NhdmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSAqCi0gKgkqIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKgotICoJdm9pZCAoKmZiX3Jlc3RvcmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKICAqIH0gOwogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwppbmRleCAyODMwZmZkLi5kNWU4MDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCkBAIC00ODQsNiArNDg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgY2xrX3ZhbHVlX2toejsKIAl1bnNpZ25lZCBsb25nIGJpdHNfcGVyX2xpbmU7CisJdW5zaWduZWQgbG9uZyBwaXhfZmFjdG9yID0gMjsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKQEAgLTUxNiwyMCArNTE3LDI0IEBACiAJLyogTm93LCB0aGUgTENEQyBjb3JlLi4uICovCiAKIAkvKiBTZXQgcGl4ZWwgY2xvY2sgKi8KKwlpZiAoY3B1X2lzX2F0OTFzYW05ZzQ1KCkgJiYgIWNwdV9pc19hdDkxc2FtOWc0NWVzKCkpCisJCXBpeF9mYWN0b3IgPSAxOworCiAJY2xrX3ZhbHVlX2toeiA9IGNsa19nZXRfcmF0ZShzaW5mby0+bGNkY19jbGspIC8gMTAwMDsKIAogCXZhbHVlID0gRElWX1JPVU5EX1VQKGNsa192YWx1ZV9raHosIFBJQ09TMktIWihpbmZvLT52YXIucGl4Y2xvY2spKTsKIAotCWlmICh2YWx1ZSA8IDIpIHsKKwlpZiAodmFsdWUgPCBwaXhfZmFjdG9yKSB7CiAJCWRldl9ub3RpY2UoaW5mby0+ZGV2aWNlLCAiQnlwYXNzaW5nIHBpeGVsIGNsb2NrIGRpdmlkZXJcbiIpOwogCQlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19MQ0RDT04xLCBBVE1FTF9MQ0RDX0JZUEFTUyk7CiAJfSBlbHNlIHsKLQkJdmFsdWUgPSAodmFsdWUgLyAyKSAtIDE7CisJCXZhbHVlID0gKHZhbHVlIC8gcGl4X2ZhY3RvcikgLSAxOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgKiBwcm9ncmFtbWluZyBDTEtWQUwgPSAweCUwOGx4XG4iLAogCQkJCXZhbHVlKTsKIAkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMSwKIAkJCQl2YWx1ZSA8PCBBVE1FTF9MQ0RDX0NMS1ZBTF9PRkZTRVQpOwotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSBLSFoyUElDT1MoY2xrX3ZhbHVlX2toeiAvICgyICogKHZhbHVlICsgMSkpKTsKKwkJaW5mby0+dmFyLnBpeGNsb2NrID0KKwkJCUtIWjJQSUNPUyhjbGtfdmFsdWVfa2h6IC8gKHBpeF9mYWN0b3IgKiAodmFsdWUgKyAxKSkpOwogCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgdXBkYXRlZCBwaXhjbGs6ICAgICAlbHUgS0h6XG4iLAogCQkJCQlQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwppbmRleCAyMjExYTg1Li45Njc3NDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwpAQCAtNDMzLDggKzQzMyw5IEBACiAKIAlpZiAoY29yZ2libF9mbGFncyAmIENPUkdJQkxfU1VTUEVOREVEKQogCQlpbnRlbnNpdHkgPSAwOwotCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9CQVRUTE9XKQotCQlpbnRlbnNpdHkgJj0gbGNkLT5saW1pdF9tYXNrOworCisJaWYgKChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9CQVRUTE9XKSAmJiBpbnRlbnNpdHkgPiBsY2QtPmxpbWl0X21hc2spCisJCWludGVuc2l0eSA9IGxjZC0+bGltaXRfbWFzazsKIAogCXJldHVybiBjb3JnaV9ibF9zZXRfaW50ZW5zaXR5KGxjZCwgaW50ZW5zaXR5KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKaW5kZXggYjY0NDk0NzAuLmE0ODJkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0YXRpYyBpbnQgbGNkX3JlZ2lzdGVyX2ZiKHN0cnVjdCBsY2RfZGV2aWNlICpsZCkKIHsKLQltZW1zZXQoJmxkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKCZsZC0+ZmJfbm90aWYpKTsKKwltZW1zZXQoJmxkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKGxkLT5mYl9ub3RpZikpOwogCWxkLT5mYl9ub3RpZi5ub3RpZmllcl9jYWxsID0gZmJfbm90aWZpZXJfY2FsbGJhY2s7CiAJcmV0dXJuIGZiX3JlZ2lzdGVyX2NsaWVudCgmbGQtPmZiX25vdGlmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggNWE2ODZjZS4uMzY4MWM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTIzMTEsMTQgKzIzMTEsMTEgQEAKIAkJb3BzLT5ncmFwaGljcyA9IDE7CiAKIAkJaWYgKCFibGFuaykgewotCQkJaWYgKGluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlKQotCQkJCWluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlKGluZm8pOwogCQkJdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XIHwgRkJfQUNUSVZBVEVfRk9SQ0U7CiAJCQlmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQkJb3BzLT5ncmFwaGljcyA9IDA7CiAJCQlvcHMtPnZhciA9IGluZm8tPnZhcjsKLQkJfSBlbHNlIGlmIChpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZSkKLQkJCWluZm8tPmZib3BzLT5mYl9yZXN0b3JlX3N0YXRlKGluZm8pOworCQl9CiAJfQogCiAgCWlmICghZmJjb25faXNfaW5hY3RpdmUodmMsIGluZm8pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKaW5kZXggZDA2NTg5NC4uZWExZmQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtNTU0LDExICs1NTQsMTEgQEAKIAkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAkJYnJlYWs7CiAJY2FzZSAxNjoJCS8qIFJHQiA1NjUgKi8KLQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CiAJCXZhci0+cmVkLmxlbmd0aCA9IDU7CiAJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKIAkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMTE7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwogCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKIAkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKIAkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKQEAgLTU5MSw3ICs1OTEsNyBAQAogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBwYXItPmRhdGFidWZfc3ogKyBQQUdFX1NJWkUsCi0JCQkJCWluZm8tPnNjcmVlbl9iYXNlLAorCQkJCQlpbmZvLT5zY3JlZW5fYmFzZSAtIFBBR0VfU0laRSwKIAkJCQkJaW5mby0+Zml4LnNtZW1fc3RhcnQpOwogCQlmcmVlX2lycShwYXItPmlycSwgcGFyKTsKIAkJY2xrX2Rpc2FibGUocGFyLT5sY2RjX2Nsayk7CkBAIC03MDQsNyArNzA0LDcgQEAKIAogCWlmIChpID09IEFSUkFZX1NJWkUoa25vd25fbGNkX3BhbmVscykpIHsKIAkJZGV2X2VycigmZGV2aWNlLT5kZXYsICJHTENEOiBObyB2YWxpZCBwYW5lbCBmb3VuZFxuIik7Ci0JCXJldCA9IEVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfY2xrX2Rpc2FibGU7CiAJfSBlbHNlCiAJCWRldl9pbmZvKCZkZXZpY2UtPmRldiwgIkdMQ0Q6IEZvdW5kICVzIHBhbmVsXG4iLApAQCAtNzQ5LDYgKzc0OSw3IEBACiAJCQkJKFBBR0VfU0laRSAtIHBhci0+cGFsZXR0ZV9zeik7CiAKIAkvKiB0aGUgcmVzdCBvZiB0aGUgZnJhbWUgYnVmZmVyIGlzIHBpeGVsIGRhdGEgKi8KKwlkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSA9IHBhci0+dl9wYWxldHRlX2Jhc2UgKyBwYXItPnBhbGV0dGVfc3o7CiAJZGE4eHhfZmJfZml4LnNtZW1fc3RhcnQgPSBwYXItPnBfcGFsZXR0ZV9iYXNlICsgcGFyLT5wYWxldHRlX3N6OwogCWRhOHh4X2ZiX2ZpeC5zbWVtX2xlbiA9IHBhci0+ZGF0YWJ1Zl9zeiAtIHBhci0+cGFsZXR0ZV9zejsKIAlkYTh4eF9mYl9maXgubGluZV9sZW5ndGggPSAobGNkY19pbmZvLT53aWR0aCAqIGxjZF9jZmctPmJwcCkgLyA4OwpAQCAtNzg3LDYgKzc4OCw4IEBACiAJZGE4eHhfZmJfaW5mby0+dmFyID0gZGE4eHhfZmJfdmFyOwogCWRhOHh4X2ZiX2luZm8tPmZib3BzID0gJmRhOHh4X2ZiX29wczsKIAlkYTh4eF9mYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbGV0dGU7CisJZGE4eHhfZmJfaW5mby0+Zml4LnZpc3VhbCA9IChkYTh4eF9mYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPD0gOCkgPworCQkJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAKIAlyZXQgPSBmYl9hbGxvY19jbWFwKCZkYTh4eF9mYl9pbmZvLT5jbWFwLCBQQUxFVFRFX1NJWkUsIDApOwogCWlmIChyZXQpCkBAIC04MjUsNyArODI4LDcgQEAKIAogZXJyX3JlbGVhc2VfZmJfbWVtOgogCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHBhci0+ZGF0YWJ1Zl9zeiArIFBBR0VfU0laRSwKLQkJCQlkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSwKKwkJCQlkYTh4eF9mYl9pbmZvLT5zY3JlZW5fYmFzZSAtIFBBR0VfU0laRSwKIAkJCQlkYTh4eF9mYl9pbmZvLT5maXguc21lbV9zdGFydCk7CiAKIGVycl9yZWxlYXNlX2ZiOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nYmVmYi5jIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCmluZGV4IDFhODM3MDkuLmY2N2RiNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBACiAJZ2JlZmJfc2V0dXAob3B0aW9ucyk7CiAjZW5kaWYKIAotCWlmICghcmVxdWVzdF9yZWdpb24oR0JFX0JBU0UsIHNpemVvZihzdHJ1Y3Qgc2dpX2diZSksICJHQkUiKSkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKEdCRV9CQVNFLCBzaXplb2Yoc3RydWN0IHNnaV9nYmUpLCAiR0JFIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJnYmVmYjogY291bGRuJ3QgcmVzZXJ2ZSBtbWlvIHJlZ2lvblxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfcmVsZWFzZV9mcmFtZWJ1ZmZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwppbmRleCA1YzVhMWFkLi40NzQ0MjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKaW5kZXggOWM3ODA1MC4uYzllOTM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwppbmRleCA4MGQwZjVmLi43MTA0OGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCmluZGV4IDk5NjM2YTIuLjZjNTE5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcC5jCkBAIC0yMiw5ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0jaW5jbHVkZSA8bGludXgvYW5kcm9pZF9wbWVtLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogCiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KQEAgLTI2MiwxMSArMjU5LDYgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAl1bnNpZ25lZCBsb25nIHZzdGFydDsKIAotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQlpZiAoIWdldF9wbWVtX2ZpbGUoaW1nLT5tZW1vcnlfaWQsIHN0YXJ0LCAmdnN0YXJ0LCBsZW4sIGZpbGVwKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQogCWZpbGUgPSBmZ2V0X2xpZ2h0KGltZy0+bWVtb3J5X2lkLCAmcHV0X25lZWRlZCk7CiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpAQCAtMjgzLDEyICsyNzUsNiBAQAogCiB2b2lkIHB1dF9pbWcoc3RydWN0IGZpbGUgKnNyY19maWxlLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUpCiB7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCWlmIChzcmNfZmlsZSkKLQkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7Ci0JaWYgKGRzdF9maWxlKQotCQlwdXRfcG1lbV9maWxlKGRzdF9maWxlKTsKLSNlbmRpZgogfQogCiBpbnQgbWRwX2JsaXQoc3RydWN0IG1kcF9kZXZpY2UgKm1kcF9kZXYsIHN0cnVjdCBmYl9pbmZvICpmYiwKQEAgLTMyMCw5ICszMDYsNiBAQAogCWlmICh1bmxpa2VseShnZXRfaW1nKCZyZXEtPmRzdCwgZmIsICZkc3Rfc3RhcnQsICZkc3RfbGVuLCAmZHN0X2ZpbGUpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1wZF9wcHA6IGNvdWxkIG5vdCByZXRyaWV2ZSBkc3QgaW1hZ2UgZnJvbSAiCiAJCQkJIm1lbW9yeVxuIik7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotCQlwdXRfcG1lbV9maWxlKHNyY19maWxlKTsKLSNlbmRpZgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbXV0ZXhfbG9jaygmbWRwX211dGV4KTsKQEAgLTQ5OSw3ICs0ODIsNiBAQAogCS8qIHJlZ2lzdGVyIG1kcCBkZXZpY2UgKi8KIAltZHAtPm1kcF9kZXYuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJbWRwLT5tZHBfZGV2LmRldi5jbGFzcyA9IG1kcF9jbGFzczsKLQlzbnByaW50ZihtZHAtPm1kcF9kZXYuZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJtZHAlZCIsIHBkZXYtPmlkKTsKIAogCS8qIGlmIHlvdSBjYW4gcmVtb3ZlIHRoZSBwbGF0Zm9ybSBkZXZpY2UgeW91J2QgaGF2ZSB0byBpbXBsZW1lbnQKIAkgKiB0aGlzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCmluZGV4IGJhMmM0NjcuLjRmZjAwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tc21fbWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5kcm9pZF9wbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9tc21fZmIuaD4KIAogI2luY2x1ZGUgIm1kcF9ody5oIgpAQCAtNTc5LDI1ICs1NzgsNiBAQAogc3RhdGljIHZvaWQgZmx1c2hfaW1ncyhzdHJ1Y3QgbWRwX2JsaXRfcmVxICpyZXEsIHN0cnVjdCBtZHBfcmVncyAqcmVncywKIAkJICAgICAgIHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQogewotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQl1aW50MzJfdCBzcmMwX2xlbiwgc3JjMV9sZW4sIGRzdDBfbGVuLCBkc3QxX2xlbjsKLQotCS8qIGZsdXNoIHNyYyBpbWFnZXMgdG8gbWVtb3J5IGJlZm9yZSBkbWEgdG8gbWRwICovCi0JZ2V0X2xlbigmcmVxLT5zcmMsICZyZXEtPnNyY19yZWN0LCByZWdzLT5zcmNfYnBwLCAmc3JjMF9sZW4sCi0JCSZzcmMxX2xlbik7Ci0JZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQsIHNyYzBfbGVuKTsKLQlpZiAoSVNfUFNFVURPUExOUihyZXEtPnNyYy5mb3JtYXQpKQotCQlmbHVzaF9wbWVtX2ZpbGUoc3JjX2ZpbGUsIHJlcS0+c3JjLm9mZnNldCArIHNyYzBfbGVuLAotCQkJCXNyYzFfbGVuKTsKLQotCS8qIGZsdXNoIGRzdCBpbWFnZXMgKi8KLQlnZXRfbGVuKCZyZXEtPmRzdCwgJnJlcS0+ZHN0X3JlY3QsIHJlZ3MtPmRzdF9icHAsICZkc3QwX2xlbiwKLQkJJmRzdDFfbGVuKTsKLQlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCwgZHN0MF9sZW4pOwotCWlmIChJU19QU0VVRE9QTE5SKHJlcS0+ZHN0LmZvcm1hdCkpCi0JCWZsdXNoX3BtZW1fZmlsZShkc3RfZmlsZSwgcmVxLT5kc3Qub2Zmc2V0ICsgZHN0MF9sZW4sCi0JCQkJZHN0MV9sZW4pOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGdldF9jaHJvbWFfYWRkcihzdHJ1Y3QgbWRwX2ltZyAqaW1nLCBzdHJ1Y3QgbWRwX3JlY3QgKnJlY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDM3YjEzNWQuLjg0MmQxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCQl2Z2Ffb3V0OCgweDNjNSwgc3I4LCBwYXIpOwogCQl2Z2Ffb3V0OCgweDNjNCwgMHgwZCwgcGFyKTsKIAkJc3JkID0gdmdhX2luOCgweDNjNSwgcGFyKTsKLQkJc3JkICY9IDB4MDM7CisJCXNyZCAmPSAweDUwOwogCiAJCXN3aXRjaCAoYmxhbmspIHsKIAkJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgpAQCAtMTYwNiwyMiArMTYwNiw2IEBACiAJcmV0dXJuIChibGFuayA9PSBGQl9CTEFOS19OT1JNQUwpID8gMSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmFnZWZiX3NhdmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0Jc2F2YWdlX2dldF9kZWZhdWx0X3BhcihwYXIsICZwYXItPnNhdmUpOwotfQotCi1zdGF0aWMgdm9pZCBzYXZhZ2VmYl9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXNhdmFnZWZiX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTiwgaW5mbyk7Ci0Jc2F2YWdlX3NldF9kZWZhdWx0X3BhcihwYXIsICZwYXItPnNhdmUpOwotCXNhdmFnZWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwotfQotCiBzdGF0aWMgaW50IHNhdmFnZWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTE2NjcsOCArMTY1MSw2IEBACiAJLmZiX3NldGNvbHJlZyAgID0gc2F2YWdlZmJfc2V0Y29scmVnLAogCS5mYl9wYW5fZGlzcGxheSA9IHNhdmFnZWZiX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayAgICAgICA9IHNhdmFnZWZiX2JsYW5rLAotCS5mYl9zYXZlX3N0YXRlICA9IHNhdmFnZWZiX3NhdmVfc3RhdGUsCi0JLmZiX3Jlc3RvcmVfc3RhdGUgPSBzYXZhZ2VmYl9yZXN0b3JlX3N0YXRlLAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NBVkFHRV9BQ0NFTCkKIAkuZmJfZmlsbHJlY3QgICAgPSBzYXZhZ2VmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgICAgPSBzYXZhZ2VmYl9jb3B5YXJlYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggZTM1MjMyYS4uNTRmYmIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTE0MTEsMjMgKzE0MTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1dmVzYWZiX3NhdmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlpZiAocGFyLT52YmVfc3RhdGVfc2F2ZWQpCi0JCWtmcmVlKHBhci0+dmJlX3N0YXRlX3NhdmVkKTsKLQotCXBhci0+dmJlX3N0YXRlX3NhdmVkID0gdXZlc2FmYl92YmVfc3RhdGVfc2F2ZShwYXIpOwotfQotCi1zdGF0aWMgdm9pZCB1dmVzYWZiX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQl1dmVzYWZiX3ZiZV9zdGF0ZV9yZXN0b3JlKHBhciwgcGFyLT52YmVfc3RhdGVfc2F2ZWQpOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyB1dmVzYWZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmZiX29wZW4JPSB1dmVzYWZiX29wZW4sCkBAIC0xNDQxLDggKzE0MjQsNiBAQAogCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9jaGVja192YXIJPSB1dmVzYWZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHV2ZXNhZmJfc2V0X3BhciwKLQkuZmJfc2F2ZV9zdGF0ZQk9IHV2ZXNhZmJfc2F2ZV9zdGF0ZSwKLQkuZmJfcmVzdG9yZV9zdGF0ZSA9IHV2ZXNhZmJfcmVzdG9yZV9zdGF0ZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB1dmVzYWZiX2luaXRfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKQEAgLTE0NTksMTUgKzE0NDAsNiBAQAogCWluZm8tPmZpeC55cGFuc3RlcCA9IHBhci0+eXBhbiA/IDEgOiAwOwogCWluZm8tPmZpeC55d3JhcHN0ZXAgPSAocGFyLT55cGFuID4gMSkgPyAxIDogMDsKIAotCS8qCi0JICogSWYgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IHRoZSBzdGF0ZSBidWZmZXIgc2l6ZSwgZGlzYWJsZQotCSAqIGZ1bmN0aW9ucyBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIGhhcmR3YXJlIHN0YXRlLgotCSAqLwotCWlmIChwYXItPnZiZV9zdGF0ZV9zaXplID09IDApIHsKLQkJaW5mby0+ZmJvcHMtPmZiX3NhdmVfc3RhdGUgPSBOVUxMOwotCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCiAJLyogRGlzYWJsZSBibGFua2luZyBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgc28uICovCiAJaWYgKCFibGFuaykKIAkJaW5mby0+ZmJvcHMtPmZiX2JsYW5rID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDIwMGMyMmYuLjlkZDU4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMTksNyArMTksNiBAQAogICovCiAvLyNkZWZpbmUgREVCVUcKICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2JhbGxvb24uaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjQ4LDcgKzI0Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdmlydGJhbGxvb25fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiID0gdmRldi0+cHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDRhMWYxZWIuLjI4ZDljZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTUzMCwxOSArNTMwLDIyIEBACiAJCQllcnIgPSBQVFJfRVJSKHZxc1tpXSk7CiAJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KKworCQlpZiAoIXZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMgfHwgbXNpeF92ZWMgPT0gVklSVElPX01TSV9OT19WRUNUT1IpCisJCQljb250aW51ZTsKKwogCQkvKiBhbGxvY2F0ZSBwZXItdnEgaXJxIGlmIGF2YWlsYWJsZSBhbmQgbmVjZXNzYXJ5ICovCi0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKSB7Ci0JCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCSBzaXplb2YgKnZwX2Rldi0+bXNpeF9uYW1lcywKLQkJCQkgIiVzLSVzIiwKLQkJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7Ci0JCQllcnIgPSByZXF1ZXN0X2lycShtc2l4X3ZlYywgdnJpbmdfaW50ZXJydXB0LCAwLAotCQkJCQkgIHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCi0JCQkJCSAgdnFzW2ldKTsKLQkJCWlmIChlcnIpIHsKLQkJCQl2cF9kZWxfdnEodnFzW2ldKTsKLQkJCQlnb3RvIGVycm9yX2ZpbmQ7Ci0JCQl9CisJCXNucHJpbnRmKHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCisJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCisJCQkgIiVzLSVzIiwKKwkJCSBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEodnBfZGV2LT5tc2l4X2VudHJpZXNbbXNpeF92ZWNdLnZlY3RvciwKKwkJCQkgIHZyaW5nX2ludGVycnVwdCwgMCwKKwkJCQkgIHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCisJCQkJICB2cXNbaV0pOworCQlpZiAoZXJyKSB7CisJCQl2cF9kZWxfdnEodnFzW2ldKTsKKwkJCWdvdG8gZXJyb3JfZmluZDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCmluZGV4IGY1MzYwMDUuLmZiZDJlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwpAQCAtMjg1LDYgKzI4NSw5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIE9ubHkgZ2V0IHVzZWQgYXJyYXkgZW50cmllcyBhZnRlciB0aGV5IGhhdmUgYmVlbiBleHBvc2VkIGJ5IGhvc3QuICovCisJcm1iKCk7CisKIAlpID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0uaWQ7CiAJKmxlbiA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmxlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IGYyNGQwNDEuLjRkMjI3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0Zm9ybV93ZHRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIndhdGNoZG9nIiwKKwkJLm5hbWUgPSAicG54NDAwOC13YXRjaGRvZyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gcG54NDAwOF93ZHRfcHJvYmUsCkBAIC0zNTIsNCArMzUyLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3YXRjaGRvZyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpwbng0MDA4LXdhdGNoZG9nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKaW5kZXggZjZjY2NjOS4uYmYxMmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwpAQCAtNjIsNyArNjIsNyBAQAogc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKIG1vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCB2YWx1ZSwgaW4gc2Vjb25kcyAoZGVmYXVsdD0iCi0JCVdBVENIRE9HX1RJTUVPVVQgIikiKTsKKwkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl3ZHRfcmVnID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CisJd2R0X3JlZyA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAJaWYgKCF3ZHRfcmVnKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZW1hcCBJL08gcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAxZThmMDJmLi5kM2M4MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CiAJcmlvd2RfZGV2aWNlID0gcDsKLQllcnIgPSAwOworCXJldHVybiAwOwogCiBvdXRfaW91bm1hcDoKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCmluZGV4IDg1MmNhMTkuLjkxNDMwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCX0KIAogCWVyciA9IG1pc2NfcmVnaXN0ZXIoJmZpdHBjMl93ZHRfbWlzY2Rldik7Ci0JaWYgKCFlcnIpIHsKKwlpZiAoZXJyKSB7CiAJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIGVycik7CiAJCWdvdG8gZXJyX21hcmdpbjsKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggYTZjN2MzZS4uZjRjYTBjNyAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTY5LDExICs2OSwxMyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19NWVJJX1NCVVMpICs9IG15cmljb20vbGFuYWkuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1BDTUNJQV9QQ05FVCkgKz0gY2lzL0xBLVBDTS5jaXMgY2lzL1BDTUxNMjguY2lzIFwKIAkJCQkgICAgIGNpcy9EUDgzOTAzLmNpcyBjaXMvTkUySy5jaXMgXAotCQkJCSAgICAgY2lzL3RhbWFyYWNrLmNpcworCQkJCSAgICAgY2lzL3RhbWFyYWNrLmNpcyBjaXMvUEUtMjAwLmNpcwogZnctc2hpcHBlZC0kKENPTkZJR19QQ01DSUFfM0M1ODkpICs9IGNpcy8zQ1hFTTU1Ni5jaXMKIGZ3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBXzNDNTc0KSArPSBjaXMvM0NDRkVNNTU2LmNpcwogZnctc2hpcHBlZC0kKENPTkZJR19TRVJJQUxfODI1MF9DUykgKz0gY2lzL01UNTYzNFpMWC5jaXMgY2lzL1JTLUNPTS0yUC5jaXMgXAotCQkJCSAgICAgICBjaXMvQ09NcGFkMi5jaXMgY2lzL0NPTXBhZDQuY2lzCisJCQkJICAgICAgIGNpcy9DT01wYWQyLmNpcyBjaXMvQ09NcGFkNC5jaXMgXAorCQkJCSAgICAgICBjaXMvU1dfNTU1X1NFUi5jaXMgY2lzL1NXXzd4eF9TRVIuY2lzIFwKKwkJCQkgICAgICAgY2lzL1NXXzh4eF9TRVIuY2lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1BDTUNJQV9TTUM5MUM5MikgKz0gb3NpdGVjaC9YaWxpbng3T0QuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NDU0lfQURWQU5TWVMpICs9IGFkdmFuc3lzL21jb2RlLmJpbiBhZHZhbnN5cy8zOEMxNjAwLmJpbiBcCiAJCQkJICAgICAgYWR2YW5zeXMvMzU1MC5iaW4gYWR2YW5zeXMvMzhDMDgwMC5iaW4KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCBjNDM3ZTE0Li43YThhZGMwIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC02MDAsNiArNjAwLDcgQEAKICAgICAgIGNpcy9EUDgzOTAzLmNpcwogICAgICAgY2lzL05FMksuY2lzCiAgICAgICBjaXMvdGFtYXJhY2suY2lzCisgICAgICBjaXMvUEUtMjAwLmNpcwogCiBMaWNlbmNlOiBHUEwKIApAQCAtNjMzLDYgKzYzNCw5IEBACiAgICAgICBjaXMvUlMtQ09NLTJQLmNpcwogICAgICAgY2lzL0NPTXBhZDIuY2lzCiAgICAgICBjaXMvQ09NcGFkNC5jaXMKKyAgICAgIGNpcy9TV181NTVfU0VSLmNpcworICAgICAgY2lzL1NXXzd4eF9TRVIuY2lzCisgICAgICBjaXMvU1dfOHh4X1NFUi5jaXMKIAogTGljZW5jZTogR1BMCiAKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2Npcy9QRS0yMDAuY2lzLmloZXggYi9maXJtd2FyZS9jaXMvUEUtMjAwLmNpcy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZGJkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jaXMvUEUtMjAwLmNpcy5paGV4CkBAIC0wLDAgKzEsOSBAQAorOjEwMDAwMDAwMDEwMzAwMDBGRjE1MUUwNDAxNTA0RDU4MjAyMDIwMDA2MAorOjEwMDAxMDAwNTA0NTJEMzIzMDMwMDA0NTU0NDg0NTUyNEU0NTU0MDAyRAorOjEwMDAyMDAwNTIzMDMxMDBGRjIxMDIwNjAzMUEwNTAxMDEwMDAxMDFDRgorOjEwMDAzMDAwMUIwRUMxODExOTAxNTVFMDUxMDAwRjEwMEYzMEZGRkY1OQorOjA0MDA0MDAwMTQwMEZGMDBBOQorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBQRS0yMDAgZXRoZXJuZXQgY2FyZAorIwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY2lzL1NXXzU1NV9TRVIuY2lzLmloZXggYi9maXJtd2FyZS9jaXMvU1dfNTU1X1NFUi5jaXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjkzNDhhCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY2lzL1NXXzU1NV9TRVIuY2lzLmloZXgKQEAgLTAsMCArMSwxMiBAQAorOjEwMDAwMDAwMDEwMUZGMTcwMzQxMDBGRjIwMDQzRjAxMTAwNzIxMDJGNworOjEwMDAxMDAwMDIwMDE1MkEwNzAwNTM2OTY1NzI3MjYxMjA1NzY5NzJFMAorOjEwMDAyMDAwNjU2QzY1NzM3MzAwNDE2OTcyNDM2MTcyNjQyMDM1MzU5NAorOjEwMDAzMDAwMzUwMDQxMzUzNTM1MDA1MjY1NzYyMDMxMDBGRjFBMDUwRgorOjEwMDA0MDAwMDEwMzAwMDc3MzFCMEJFMDAxMThBMzYwRjgwMzA3MzBERQorOjEwMDA1MDAwQkMzRjFCMDhBMTAxMDhBMzYwRjgwMjA3MUIwOEEyMDEwRQorOjEwMDA2MDAwMDhBMzYwRTgwMzA3MUIwOEEzMDEwOEEzNjBFODAyMDdEMAorOjBBMDA3MDAwMUIwNEE0MDEwODIzMTQwMEZGMDA4NAorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBBQzU1NSBwcm92aWRlZCBieSBTaWVycmEgV2lyZWxlc3MKKyMKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2Npcy9TV183eHhfU0VSLmNpcy5paGV4IGIvZmlybXdhcmUvY2lzL1NXXzd4eF9TRVIuY2lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlNDRhZAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2Npcy9TV183eHhfU0VSLmNpcy5paGV4CkBAIC0wLDAgKzEsMTMgQEAKKzoxMDAwMDAwMDAxMDFGRjE3MDM0MTAwRkYyMDA0OTIwMTEwMDcyMTAyQTQKKzoxMDAwMTAwMDAyMDAxNTM3MDcwMDUzNjk2NTcyNzI2MTIwNTc2OTcyRDMKKzoxMDAwMjAwMDY1NkM2NTczNzMwMDQxNDMzNzMxMzAyRjQxNDMzNzM1NzkKKzoxMDAwMzAwMDMwMDA0NzUwNTI1MzIwNEU2NTc0Nzc2RjcyNkIyMDQxRTkKKzoxMDAwNDAwMDY0NjE3MDc0NjU3MjAwNTIzMTAwRkYxQTA1MDEwMzAwOEIKKzoxMDAwNTAwMDA3NzMxQjEwRTAwMTE5Nzg0RDU1NUQyNUEzNjBGODAzNjcKKzoxMDAwNjAwMDA3MzBCQzg2MUIwOEExMDEwOEEzNjBGODAyMDcxQjA4MjMKKzoxMDAwNzAwMEEyMDEwOEEzNjBFODAzMDcxQjA4QTMwMTA4QTM2MEU4MjYKKzowQzAwODAwMDAyMDcxQjA0QTQwMTA4MjMxNDAwRkYwMDY5Cis6MDAwMDAwMDFGRgorIworIyBSZXBsYWNlbWVudCBDSVMgZm9yIEFDN3h4IHByb3ZpZGVkIGJ5IFNpZXJyYSBXaXJlbGVzcworIwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY2lzL1NXXzh4eF9TRVIuY2lzLmloZXggYi9maXJtd2FyZS9jaXMvU1dfOHh4X1NFUi5jaXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNmZTYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY2lzL1NXXzh4eF9TRVIuY2lzLmloZXgKQEAgLTAsMCArMSwxMyBAQAorOjEwMDAwMDAwMDEwMUZGMTcwMzQxMDBGRjIwMDQ5MjAxMTAwNzIxMDJBNAorOjEwMDAxMDAwMDIwMDE1MkYwNzAwNTM2OTY1NzI3MjYxMjA1NzY5NzJEQgorOjEwMDAyMDAwNjU2QzY1NzM3MzAwNDE0MzM4MzUzMDAwMzM0NzIwNEVBQgorOjEwMDAzMDAwNjU3NDc3NkY3MjZCMjA0MTY0NjE3MDc0NjU3MjAwNTJGMQorOjEwMDA0MDAwMzEwMEZGMUEwNTAxMDMwMDA3NzMxQjEwRTAwMTE5Nzg0NgorOjEwMDA1MDAwNEQ1NTVEMjVBMzYwRjg0ODA3MzBCQzg2MUIwOEExMDFGQgorOjEwMDA2MDAwMDhBMzYwRjg0NzA3MUIwOEEyMDEwOEEzNjBFODQ4MDczNworOjEwMDA3MDAwMUIwOEEzMDEwOEEzNjBFODQ3MDcxQjA0QTQwMTA4MjM4OQorOjA0MDA4MDAwMTQwMEZGMDA2OQorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBBQzh4eCBwcm92aWRlZCBieSBTaWVycmEgV2lyZWxlc3MKKyMKZGlmZiAtLWdpdCBhL2ZzLzlwL2NhY2hlLmMgYi9mcy85cC9jYWNoZS5jCmluZGV4IDUxYzk0ZTIuLmU3Nzc5NjEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2NhY2hlLmMKKysrIGIvZnMvOXAvY2FjaGUuYwpAQCAtMzQzLDE4ICszNDMsNyBAQAogCiAJQlVHX09OKCF2Y29va2llLT5mc2NhY2hlKTsKIAotCWlmIChQYWdlRnNDYWNoZShwYWdlKSkgewotCQlpZiAoZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpKSB7Ci0JCQlpZiAoIShnZnAgJiBfX0dGUF9XQUlUKSkKLQkJCQlyZXR1cm4gMDsKLQkJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpOwotCQl9Ci0KLQkJZnNjYWNoZV91bmNhY2hlX3BhZ2UodmNvb2tpZS0+ZnNjYWNoZSwgcGFnZSk7Ci0JCUNsZWFyUGFnZUZzQ2FjaGUocGFnZSk7Ci0JfQotCi0JcmV0dXJuIDE7CisJcmV0dXJuIGZzY2FjaGVfbWF5YmVfcmVsZWFzZV9wYWdlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UsIGdmcCk7CiB9CiAKIHZvaWQgX192OWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMzY4LDcgKzM1Nyw2IEBACiAJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHZjb29raWUtPmZzY2FjaGUsIHBhZ2UpOwogCQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCQlmc2NhY2hlX3VuY2FjaGVfcGFnZSh2Y29va2llLT5mc2NhY2hlLCBwYWdlKTsKLQkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCA4NzNjZDMxLi4xNWNjZTUzIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC00MCw2ICs0MCwyNCBAQAogI2luY2x1ZGUgImZpZC5oIgogCiAvKioKKyAqIHN0cnVjdCBwOV9yZGlyIC0gcmVhZGRpciBhY2NvdW50aW5nCisgKiBAbXV0ZXg6IG11dGV4IHByb3RlY3RpbmcgcmVhZGRpcgorICogQGhlYWQ6IHN0YXJ0IG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAdGFpbDogZW5kIG9mZnNldCBvZiBjdXJyZW50IGRpcnJlYWQgYnVmZmVyCisgKiBAYnVmOiBkaXJyZWFkIGJ1ZmZlcgorICoKKyAqIHByaXZhdGUgc3RydWN0dXJlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHJlYWRkaXIKKyAqIGFsbG9jYXRlZCBvbiBkZW1hbmQKKyAqLworCitzdHJ1Y3QgcDlfcmRpciB7CisJc3RydWN0IG11dGV4IG11dGV4OworCWludCBoZWFkOworCWludCB0YWlsOworCXVpbnQ4X3QgKmJ1ZjsKK307CisKKy8qKgogICogZHRfdHlwZSAtIHJldHVybiBmaWxlIHR5cGUKICAqIEBtaXN0YXQ6IG1pc3RhdCBzdHJ1Y3R1cmUKICAqCkBAIC03MCw1NiArODgsNzkgQEAKIHsKIAlpbnQgb3ZlcjsKIAlzdHJ1Y3QgcDlfd3N0YXQgc3Q7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJaW50IGJ1ZmxlbjsKLQljaGFyICpzdGF0YnVmOwotCWludCBuLCBpID0gMDsKKwlpbnQgcmVjbGVuID0gMDsKKwlzdHJ1Y3QgcDlfcmRpciAqcmRpcjsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCWZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGF0YnVmKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXdoaWxlICgxKSB7Ci0JCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBzdGF0YnVmLCBOVUxMLCBidWZsZW4sCi0JCQkJCQkJCWZpZC0+cmRpcl9mcG9zKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJYnJlYWs7CisJLyogYWxsb2NhdGUgcmRpciBvbiBkZW1hbmQgKi8KKwlpZiAoIWZpZC0+cmRpcikgeworCQlyZGlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3JkaXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKIAotCQluID0gZXJyOwotCQl3aGlsZSAoaSA8IG4pIHsKLQkJCWVyciA9IHA5c3RhdF9yZWFkKHN0YXRidWYgKyBpLCBidWZsZW4taSwgJnN0LAotCQkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CisJCWlmIChyZGlyID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJaWYgKCFmaWQtPnJkaXIpIHsKKwkJCXJkaXItPmJ1ZiA9ICh1aW50OF90ICopcmRpciArIHNpemVvZihzdHJ1Y3QgcDlfcmRpcik7CisJCQltdXRleF9pbml0KCZyZGlyLT5tdXRleCk7CisJCQlyZGlyLT5oZWFkID0gcmRpci0+dGFpbCA9IDA7CisJCQlmaWQtPnJkaXIgPSAodm9pZCAqKSByZGlyOworCQkJcmRpciA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlrZnJlZShyZGlyKTsKKwl9CisJcmRpciA9IChzdHJ1Y3QgcDlfcmRpciAqKSBmaWQtPnJkaXI7CisKKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJkaXItPm11dGV4KTsKKwl3aGlsZSAoZXJyID09IDApIHsKKwkJaWYgKHJkaXItPnRhaWwgPT0gcmRpci0+aGVhZCkgeworCQkJZXJyID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIHJkaXItPmJ1ZiwgTlVMTCwKKwkJCQkJCQlidWZsZW4sIGZpbHAtPmZfcG9zKTsKKwkJCWlmIChlcnIgPD0gMCkKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKworCQkJcmRpci0+aGVhZCA9IDA7CisJCQlyZGlyLT50YWlsID0gZXJyOworCQl9CisKKwkJd2hpbGUgKHJkaXItPmhlYWQgPCByZGlyLT50YWlsKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChyZGlyLT5idWYgKyByZGlyLT5oZWFkLAorCQkJCQkJYnVmbGVuIC0gcmRpci0+aGVhZCwgJnN0LAorCQkJCQkJZmlkLT5jbG50LT5kb3R1KTsKIAkJCWlmIChlcnIpIHsKIAkJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInJldHVybmVkICVkXG4iLCBlcnIpOwogCQkJCWVyciA9IC1FSU87CiAJCQkJcDlzdGF0X2ZyZWUoJnN0KTsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0KLQkJCWkgKz0gc3Quc2l6ZSsyOwotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gc3Quc2l6ZSsyOworCQkJcmVjbGVuID0gc3Quc2l6ZSsyOwogCiAJCQlvdmVyID0gZmlsbGRpcihkaXJlbnQsIHN0Lm5hbWUsIHN0cmxlbihzdC5uYW1lKSwKIAkJCSAgICBmaWxwLT5mX3Bvcywgdjlmc19xaWQyaW5vKCZzdC5xaWQpLCBkdF90eXBlKCZzdCkpOwogCi0JCQlmaWxwLT5mX3BvcyArPSBzdC5zaXplKzI7Ci0KIAkJCXA5c3RhdF9mcmVlKCZzdCk7CiAKIAkJCWlmIChvdmVyKSB7CiAJCQkJZXJyID0gMDsKLQkJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CisJCQlyZGlyLT5oZWFkICs9IHJlY2xlbjsKKwkJCWZpbHAtPmZfcG9zICs9IHJlY2xlbjsKIAkJfQogCX0KIAotZnJlZV9hbmRfZXhpdDoKLQlrZnJlZShzdGF0YnVmKTsKK3VubG9ja19hbmRfZXhpdDoKKwltdXRleF91bmxvY2soJnJkaXItPm11dGV4KTsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1OTQ3NjI4Li4xOGY3NGVjIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtOTk0LDggKzk5NCw3IEBACiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCiAJCSIlcyAtPiAlcyAoJXMpXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLCBzdC0+ZXh0ZW5zaW9uLCBidWZmZXIpOwogCi0JcmV0dmFsID0gYnVmbGVuOwotCisJcmV0dmFsID0gc3RybmxlbihidWZmZXIsIGJ1Zmxlbik7CiBkb25lOgogCWtmcmVlKHN0KTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTA2Miw3ICsxMDYxLDcgQEAKIAkJCV9fcHV0bmFtZShsaW5rKTsKIAkJCWxpbmsgPSBFUlJfUFRSKGxlbik7CiAJCX0gZWxzZQotCQkJbGlua1tsZW5dID0gMDsKKwkJCWxpbmtbbWluKGxlbiwgUEFUSF9NQVgtMSldID0gMDsKIAl9CiAJbmRfc2V0X2xpbmsobmQsIGxpbmspOwogCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBkNGJmOGNhLi42NGQ0NGVmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTEzNSw4ICsxMzUsOCBAQAogCiBjb25maWcgSFVHRVRMQkZTCiAJYm9vbCAiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgU1BBUkM2NCB8fCAoU1VQRVJIICYmIE1NVSkgfHwgXAotCQkgICAoUzM5MCAmJiA2NEJJVCkgfHwgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KKwlkZXBlbmRzIG9uIFg4NiB8fCBJQTY0IHx8IFNQQVJDNjQgfHwgKFMzOTAgJiYgNjRCSVQpIHx8IFwKKwkJICAgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyB8fCBCUk9LRU4KIAloZWxwCiAJICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uCiAJICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCA2ODFjMmE3Li4zOWIzMDE2IDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTMxNSw3ICszMTUsNiBAQAogCQkJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKIAkJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHZub2RlLT5jYWNoZSwgcGFnZSk7CiAJCQlmc2NhY2hlX3VuY2FjaGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOwotCQkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKIAkJfQogI2VuZGlmCiAKQEAgLTM0OSwxNyArMzQ4LDkgQEAKIAkvKiBkZW55IGlmIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUgYW5kIHRoZSBjYWxsZXIgaGFzbid0CiAJICogZWxlY3RlZCB0byB3YWl0ICovCiAjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCi0JaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7Ci0JCWlmIChmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKSkgewotCQkJaWYgKCEoZ2ZwX2ZsYWdzICYgX19HRlBfV0FJVCkpIHsKLQkJCQlfbGVhdmUoIiA9IEYgW2NhY2hlIGJ1c3ldIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOwotCQl9Ci0KLQkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKLQkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKKwlpZiAoIWZzY2FjaGVfbWF5YmVfcmVsZWFzZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSwgZ2ZwX2ZsYWdzKSkgeworCQlfbGVhdmUoIiA9IEYgW2NhY2hlIGJ1c3ldIik7CisJCXJldHVybiAwOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDQwMmNiODQuLjEyZGE1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0zMjUsOCArMzI1LDE2IEBACiAgKglAZ2ZwX21hc2s6IGFsbG9jYXRpb24gbWFzayB0byB1c2UKICAqCUBucl9pb3ZlY3M6IG51bWJlciBvZiBpb3ZlY3MKICAqCi0gKglBbGxvY2F0ZSBhIG5ldyBiaW8gd2l0aCBAbnJfaW92ZWNzIGJ2ZWNzLiAgSWYgQGdmcF9tYXNrCi0gKgljb250YWlucyBfX0dGUF9XQUlULCB0aGUgYWxsb2NhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisgKgliaW9fYWxsb2Mgd2lsbCBhbGxvY2F0ZSBhIGJpbyBhbmQgYXNzb2NpYXRlZCBiaW9fdmVjIGFycmF5IHRoYXQgY2FuIGhvbGQKKyAqCWF0IGxlYXN0IEBucl9pb3ZlY3MgZW50cmllcy4gQWxsb2NhdGlvbnMgd2lsbCBiZSBkb25lIGZyb20gdGhlCisgKglmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldCBhbmQgQGJpb19rbWFsbG9jLgorICoKKyAqCUlmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQorICoJYSBiaW8uIFRoaXMgaXMgZHVlIHRvIHRoZSBtZW1wb29sIGd1YXJhbnRlZXMuIFRvIG1ha2UgdGhpcyB3b3JrLCBjYWxsZXJzCisgKgltdXN0IG5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBhdCBhIHRpbWUgZnJvbSB0aGlzIHBvb2wuIENhbGxlcnMKKyAqCXRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5CisgKglhbGxvY2F0ZWQgYmlvIGZvciBJTyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBhIG5ldyBvbmUuIEZhaWx1cmUgdG8KKyAqCWRvIHNvIGNhbiBjYXVzZSBsaXZlbG9ja3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICoKICAqCVJFVFVSTlM6CiAgKglQb2ludGVyIHRvIG5ldyBiaW8gb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMzUwLDIxICszNTgsMTMgQEAKIH0KIAogLyoqCi0gKiBiaW9fYWxsb2MgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCisgKiBiaW9fa21hbGxvYyAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL08gdXNpbmcga21hbGxvYygpCiAgKiBAZ2ZwX21hc2s6ICAgdGhlIEdGUF8gbWFzayBnaXZlbiB0byB0aGUgc2xhYiBhbGxvY2F0b3IKICAqIEBucl9pb3ZlY3M6CW51bWJlciBvZiBpb3ZlY3MgdG8gcHJlLWFsbG9jYXRlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgIGJpb19hbGxvYyB3aWxsIGFsbG9jYXRlIGEgYmlvIGFuZCBhc3NvY2lhdGVkIGJpb192ZWMgYXJyYXkgdGhhdCBjYW4gaG9sZAotICogICBhdCBsZWFzdCBAbnJfaW92ZWNzIGVudHJpZXMuIEFsbG9jYXRpb25zIHdpbGwgYmUgZG9uZSBmcm9tIHRoZQotICogICBmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldC4KLSAqCi0gKiAgIElmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQotICogICBhIGJpby4gVGhpcyBpcyBkdWUgdG8gdGhlIG1lbXBvb2wgZ3VhcmFudGVlcy4gVG8gbWFrZSB0aGlzIHdvcmssIGNhbGxlcnMKLSAqICAgbXVzdCBuZXZlciBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gYXQgYSB0aW1lIGZyb20gdGhpcyBwb29sLiBDYWxsZXJzCi0gKiAgIHRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5Ci0gKiAgIGFsbG9jYXRlZCBiaW8gZm9yIElPIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGEgbmV3IG9uZS4gRmFpbHVyZSB0bwotICogICBkbyBzbyBjYW4gY2F1c2UgbGl2ZWxvY2tzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAqICAgQWxsb2NhdGUgYSBuZXcgYmlvIHdpdGggQG5yX2lvdmVjcyBidmVjcy4gIElmIEBnZnBfbWFzayBjb250YWlucworICogICAlX19HRlBfV0FJVCwgdGhlIGFsbG9jYXRpb24gaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgogICoKICAqKi8KIHN0cnVjdCBiaW8gKmJpb19rbWFsbG9jKGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQpAQCAtNDA3LDcgKzQwNyw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIFB1dCBhIHJlZmVyZW5jZSB0byBhICZzdHJ1Y3QgYmlvLCBlaXRoZXIgb25lIHlvdSBoYXZlIGdvdHRlbiB3aXRoCi0gKiAgIGJpb19hbGxvYyBvciBiaW9fZ2V0LiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgorICogICBiaW9fYWxsb2MsIGJpb19nZXQgb3IgYmlvX2Nsb25lLiBUaGUgbGFzdCBwdXQgb2YgYSBiaW8gd2lsbCBmcmVlIGl0LgogICoqLwogdm9pZCBiaW9fcHV0KHN0cnVjdCBiaW8gKmJpbykKIHsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggOWNmNGI5Mi4uOGJlZDA1NSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNDgsOCArMTI0OCw4IEBACiAJCQliZF9zZXRfc2l6ZShiZGV2LCAobG9mZl90KWJkZXYtPmJkX3BhcnQtPm5yX3NlY3RzIDw8IDkpOwogCQl9CiAJfSBlbHNlIHsKLQkJcHV0X2Rpc2soZGlzayk7CiAJCW1vZHVsZV9wdXQoZGlzay0+Zm9wcy0+b3duZXIpOworCQlwdXRfZGlzayhkaXNrKTsKIAkJZGlzayA9IE5VTEw7CiAJCWlmIChiZGV2LT5iZF9jb250YWlucyA9PSBiZGV2KSB7CiAJCQlpZiAoYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbikgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYWNsLmMgYi9mcy9idHJmcy9hY2wuYwppbmRleCA2OWIzNTVhLi4zNjE2MDQyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hY2wuYworKysgYi9mcy9idHJmcy9hY2wuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImJ0cmZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKIAotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAKIHN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpidHJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewpAQCAtMzEzLDcgKzMxMyw3IEBACiAJLnNldAk9IGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3Nfc2V0LAogfTsKIAotI2Vsc2UgLyogQ09ORklHX0JUUkZTX1BPU0lYX0FDTCAqLworI2Vsc2UgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwogCiBpbnQgYnRyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0zMjUsNCArMzI1LDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19CVFJGU19QT1NJWF9BQ0wgKi8KKyNlbmRpZiAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCBjNzFhYmVjLi5mNjc4M2E0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTg2LDYgKzg2LDEyIEBACiAJICogdHJhbnNpZCBvZiB0aGUgdHJhbnNfaGFuZGxlIHRoYXQgbGFzdCBtb2RpZmllZCB0aGlzIGlub2RlCiAJICovCiAJdTY0IGxhc3RfdHJhbnM7CisKKwkvKgorCSAqIGxvZyB0cmFuc2lkIHdoZW4gdGhpcyBpbm9kZSB3YXMgbGFzdCBtb2RpZmllZAorCSAqLworCXU2NCBsYXN0X3N1Yl90cmFuczsKKwogCS8qCiAJICogdHJhbnNpZCB0aGF0IGxhc3QgbG9nZ2VkIHRoaXMgaW5vZGUKIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDFiYjg5N2UuLjQ0NGIzZTkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtMTAwOSw2ICsxMDA5LDcgQEAKIAlhdG9taWNfdCBsb2dfd3JpdGVyczsKIAlhdG9taWNfdCBsb2dfY29tbWl0WzJdOwogCXVuc2lnbmVkIGxvbmcgbG9nX3RyYW5zaWQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X2xvZ19jb21taXQ7CiAJdW5zaWduZWQgbG9uZyBsb2dfYmF0Y2g7CiAJcGlkX3QgbG9nX3N0YXJ0X3BpZDsKIAlib29sIGxvZ19tdWx0aXBsZV9waWRzOwpAQCAtMTE1Miw2ICsxMTUzLDcgQEAKICNkZWZpbmUgQlRSRlNfTU9VTlRfRkxVU0hPTkNPTU1JVCAgICAgICAoMSA8PCA3KQogI2RlZmluZSBCVFJGU19NT1VOVF9TU0RfU1BSRUFECQkoMSA8PCA4KQogI2RlZmluZSBCVFJGU19NT1VOVF9OT1NTRAkJKDEgPDwgOSkKKyNkZWZpbmUgQlRSRlNfTU9VTlRfRElTQ0FSRAkJKDEgPDwgMTApCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0yMzczLDcgKzIzNzUsNyBAQAogaW50IGJ0cmZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpOwogCiAvKiBhY2wuYyAqLwotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiBpbnQgYnRyZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKICNlbHNlCiAjZGVmaW5lIGJ0cmZzX2NoZWNrX2FjbCBOVUxMCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggMTAwNTUxYS4uMDJiNmFmYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtOTE3LDYgKzkxNyw3IEBACiAJYXRvbWljX3NldCgmcm9vdC0+bG9nX3dyaXRlcnMsIDApOwogCXJvb3QtPmxvZ19iYXRjaCA9IDA7CiAJcm9vdC0+bG9nX3RyYW5zaWQgPSAwOworCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IDA7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmcm9vdC0+ZGlydHlfbG9nX3BhZ2VzLAogCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAKQEAgLTEwODcsNiArMTA4OCw3IEBACiAJV0FSTl9PTihyb290LT5sb2dfcm9vdCk7CiAJcm9vdC0+bG9nX3Jvb3QgPSBsb2dfcm9vdDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggZDBjNGQ1OC4uOTQ2MjdjNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0xNTY4LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMLAogCQkJICAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgYnRyZnNfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkJdTY0IG51bV9ieXRlcykKIHsKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogCWludCByZXQ7CiAJdTY0IG1hcF9sZW5ndGggPSBudW1fYnl0ZXM7CiAJc3RydWN0IGJ0cmZzX211bHRpX2JpbyAqbXVsdGkgPSBOVUxMOwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUZWxsIHRoZSBibG9jayBkZXZpY2UocykgdGhhdCB0aGUgc2VjdG9ycyBjYW4gYmUgZGlzY2FyZGVkICovCiAJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsIFJFQUQsCiAJCQkgICAgICBieXRlbnIsICZtYXBfbGVuZ3RoLCAmbXVsdGksIDApOwpAQCAtMTYwNCw5ICsxNjA0LDYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBpbnQgYnRyZnNfaW5jX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yOTgwLDEwICsyOTc3LDEwIEBACiAKIAlmcmVlX3NwYWNlID0gYnRyZnNfc3VwZXJfdG90YWxfYnl0ZXMoZGlza19zdXBlcik7CiAJLyoKLQkgKiB3ZSBhbGxvdyB0aGUgbWV0YWRhdGEgdG8gZ3JvdyB0byBhIG1heCBvZiBlaXRoZXIgNWdiIG9yIDUlIG9mIHRoZQorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciAxMGdiIG9yIDUlIG9mIHRoZQogCSAqIHNwYWNlIGluIHRoZSB2b2x1bWUuCiAJICovCi0JbWluX21ldGFkYXRhID0gbWluKCh1NjQpNSAqIDEwMjQgKiAxMDI0ICogMTAyNCwKKwltaW5fbWV0YWRhdGEgPSBtaW4oKHU2NCkxMCAqIDEwMjQgKiAxMDI0ICogMTAyNCwKIAkJCSAgICAgZGl2NjRfdTY0KGZyZWVfc3BhY2UgKiA1LCAxMDApKTsKIAlpZiAoaW5mby0+dG90YWxfYnl0ZXMgPj0gbWluX21ldGFkYXRhKSB7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTM2OTAsNiArMzY4NywxNCBAQAogCWlmIChpc19kYXRhKQogCQlnb3RvIHBpbml0OwogCisJLyoKKwkgKiBkaXNjYXJkIGlzIHNsb29vb3csIGFuZCBzbyB0cmlnZ2VyaW5nIGRpc2NhcmRzIG9uCisJICogaW5kaXZpZHVhbCBidHJlZSBibG9ja3MgaXNuJ3QgYSBnb29kIHBsYW4uICBKdXN0CisJICogcGluIGV2ZXJ5dGhpbmcgaW4gZGlzY2FyZCBtb2RlLgorCSAqLworCWlmIChidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJZ290byBwaW5pdDsKKwogCWJ1ZiA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIG51bV9ieXRlcyk7CiAJaWYgKCFidWYpCiAJCWdvdG8gcGluaXQ7CkBAIC00MDk3LDcgKzQxMDIsNyBAQAogfQogCiBlbnVtIGJ0cmZzX2xvb3BfdHlwZSB7Ci0JTE9PUF9DQUNIRURfT05MWSA9IDAsCisJTE9PUF9GSU5EX0lERUFMID0gMCwKIAlMT09QX0NBQ0hJTkdfTk9XQUlUID0gMSwKIAlMT09QX0NBQ0hJTkdfV0FJVCA9IDIsCiAJTE9PUF9BTExPQ19DSFVOSyA9IDMsCkBAIC00MTI2LDEyICs0MTMxLDE1IEBACiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCA9IE5VTEw7CiAJaW50IGVtcHR5X2NsdXN0ZXIgPSAyICogMTAyNCAqIDEwMjQ7CiAJaW50IGFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOworCWludCBkb25lX2NodW5rX2FsbG9jID0gMDsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIAlpbnQgbGFzdF9wdHJfbG9vcCA9IDA7CiAJaW50IGxvb3AgPSAwOwogCWJvb2wgZm91bmRfdW5jYWNoZWRfYmcgPSBmYWxzZTsKIAlib29sIGZhaWxlZF9jbHVzdGVyX3JlZmlsbCA9IGZhbHNlOwogCWJvb2wgZmFpbGVkX2FsbG9jID0gZmFsc2U7CisJdTY0IGlkZWFsX2NhY2hlX3BlcmNlbnQgPSAwOworCXU2NCBpZGVhbF9jYWNoZV9vZmZzZXQgPSAwOwogCiAJV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKIAlidHJmc19zZXRfa2V5X3R5cGUoaW5zLCBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwpAQCAtNDE2NywxNCArNDE3NSwxOSBAQAogCQllbXB0eV9jbHVzdGVyID0gMDsKIAogCWlmIChzZWFyY2hfc3RhcnQgPT0gaGludF9ieXRlKSB7CitpZGVhbF9jYWNoZToKIAkJYmxvY2tfZ3JvdXAgPSBidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAocm9vdC0+ZnNfaW5mbywKIAkJCQkJCSAgICAgICBzZWFyY2hfc3RhcnQpOwogCQkvKgogCQkgKiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYmxvY2sgZ3JvdXAgaWYgaXQgZG9lc24ndCBtYXRjaCBvdXIKIAkJICogYWxsb2NhdGlvbiBiaXRzLCBvciBpZiBpdHMgbm90IGNhY2hlZC4KKwkJICoKKwkJICogSG93ZXZlciBpZiB3ZSBhcmUgcmUtc2VhcmNoaW5nIHdpdGggYW4gaWRlYWwgYmxvY2sgZ3JvdXAKKwkJICogcGlja2VkIG91dCB0aGVuIHdlIGRvbid0IGNhcmUgdGhhdCB0aGUgYmxvY2sgZ3JvdXAgaXMgY2FjaGVkLgogCQkgKi8KIAkJaWYgKGJsb2NrX2dyb3VwICYmIGJsb2NrX2dyb3VwX2JpdHMoYmxvY2tfZ3JvdXAsIGRhdGEpICYmCi0JCSAgICBibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKSkgeworCQkgICAgKGJsb2NrX2dyb3VwLT5jYWNoZWQgIT0gQlRSRlNfQ0FDSEVfTk8gfHwKKwkJICAgICBzZWFyY2hfc3RhcnQgPT0gaWRlYWxfY2FjaGVfb2Zmc2V0KSkgewogCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAkJCWlmIChsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+bGlzdCkgfHwKIAkJCSAgICBibG9ja19ncm91cC0+cm8pIHsKQEAgLTQxODYsMTMgKzQxOTksMTMgQEAKIAkJCQkgKi8KIAkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgewogCQkJCWdvdG8gaGF2ZV9ibG9ja19ncm91cDsKKwkJCX0KIAkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgewogCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJfQogCX0KLQogc2VhcmNoOgogCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19ncm91cCwgJnNwYWNlX2luZm8tPmJsb2NrX2dyb3VwcywgbGlzdCkgewpAQCAtNDIwNCwyOCArNDIxNyw0NSBAQAogCiBoYXZlX2Jsb2NrX2dyb3VwOgogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9OTykpIHsKKwkJCXU2NCBmcmVlX3BlcmNlbnQ7CisKKwkJCWZyZWVfcGVyY2VudCA9IGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmJsb2NrX2dyb3VwLT5pdGVtKTsKKwkJCWZyZWVfcGVyY2VudCAqPSAxMDA7CisJCQlmcmVlX3BlcmNlbnQgPSBkaXY2NF91NjQoZnJlZV9wZXJjZW50LAorCQkJCQkJIGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0KTsKKwkJCWZyZWVfcGVyY2VudCA9IDEwMCAtIGZyZWVfcGVyY2VudDsKKwkJCWlmIChmcmVlX3BlcmNlbnQgPiBpZGVhbF9jYWNoZV9wZXJjZW50ICYmCisJCQkgICAgbGlrZWx5KCFibG9ja19ncm91cC0+cm8pKSB7CisJCQkJaWRlYWxfY2FjaGVfb2Zmc2V0ID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKKwkJCQlpZGVhbF9jYWNoZV9wZXJjZW50ID0gZnJlZV9wZXJjZW50OworCQkJfQorCiAJCQkvKgotCQkJICogd2Ugd2FudCB0byBzdGFydCBjYWNoaW5nIGt0aHJlYWRzLCBidXQgbm90IHRvbyBtYW55Ci0JCQkgKiByaWdodCBvZmYgdGhlIGJhdCBzbyB3ZSBkb24ndCBvdmVyd2hlbG0gdGhlIHN5c3RlbSwKLQkJCSAqIHNvIG9ubHkgc3RhcnQgdGhlbSBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDIgYW5kIHdlJ3JlCi0JCQkgKiBpbiB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLgorCQkJICogV2Ugb25seSB3YW50IHRvIHN0YXJ0IGt0aHJlYWQgY2FjaGluZyBpZiB3ZSBhcmUgYXQKKwkJCSAqIHRoZSBwb2ludCB3aGVyZSB3ZSB3aWxsIHdhaXQgZm9yIGNhY2hpbmcgdG8gbWFrZQorCQkJICogcHJvZ3Jlc3MsIG9yIGlmIG91ciBpZGVhbCBzZWFyY2ggaXMgb3ZlciBhbmQgd2UndmUKKwkJCSAqIGZvdW5kIHNvbWVib2R5IHRvIHN0YXJ0IGNhY2hpbmcuCiAJCQkgKi8KIAkJCWlmIChsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCB8fAotCQkJICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpIDwgMikgeworCQkJICAgIChsb29wID4gTE9PUF9GSU5EX0lERUFMICYmCisJCQkgICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpIDwgMikpIHsKIAkJCQlyZXQgPSBjYWNoZV9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCQkJQlVHX09OKHJldCk7CiAJCQl9CisJCQlmb3VuZF91bmNhY2hlZF9iZyA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBJZiBsb29wIGlzIHNldCBmb3IgY2FjaGVkIG9ubHksIHRyeSB0aGUgbmV4dCBibG9jaworCQkJICogZ3JvdXAuCisJCQkgKi8KKwkJCWlmIChsb29wID09IExPT1BfRklORF9JREVBTCkKKwkJCQlnb3RvIGxvb3A7CiAJCX0KIAogCQljYWNoZWQgPSBibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKTsKLQkJaWYgKHVubGlrZWx5KCFjYWNoZWQpKSB7CisJCWlmICh1bmxpa2VseSghY2FjaGVkKSkKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gdHJ1ZTsKIAotCQkJLyogaWYgd2Ugb25seSB3YW50IGNhY2hlZCBiZ3MsIGxvb3AgKi8KLQkJCWlmIChsb29wID09IExPT1BfQ0FDSEVEX09OTFkpCi0JCQkJZ290byBsb29wOwotCQl9Ci0KIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5ybykpCiAJCQlnb3RvIGxvb3A7CiAKQEAgLTQ0MDUsOSArNDQzNSwxMSBAQAogCX0KIAl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKIAotCS8qIExPT1BfQ0FDSEVEX09OTFksIG9ubHkgc2VhcmNoIGZ1bGx5IGNhY2hlZCBibG9jayBncm91cHMKLQkgKiBMT09QX0NBQ0hJTkdfTk9XQUlULCBzZWFyY2ggcGFydGlhbGx5IGNhY2hlZCBibG9jayBncm91cHMsIGJ1dAotCSAqCQkJZG9udCB3YWl0IGZvUiB0aGVtIHRvIGZpbmlzaCBjYWNoaW5nCisJLyogTE9PUF9GSU5EX0lERUFMLCBvbmx5IHNlYXJjaCBjYWNoaW5nL2NhY2hlZCBiZydzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IKKwkgKgkJCWZvciB0aGVtIHRvIG1ha2UgY2FjaGluZyBwcm9ncmVzcy4gIEFsc28KKwkgKgkJCWRldGVybWluZSB0aGUgYmVzdCBwb3NzaWJsZSBiZyB0byBjYWNoZQorCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3Vwcywga2lja2luZworCSAqCQkJY2FjaGluZyBrdGhyZWFkcyBhcyB3ZSBtb3ZlIGFsb25nCiAJICogTE9PUF9DQUNISU5HX1dBSVQsIHNlYXJjaCBldmVyeXRoaW5nLCBhbmQgd2FpdCBpZiBvdXIgYmcgaXMgY2FjaGluZwogCSAqIExPT1BfQUxMT0NfQ0hVTkssIGZvcmNlIGEgY2h1bmsgYWxsb2NhdGlvbiBhbmQgdHJ5IGFnYWluCiAJICogTE9PUF9OT19FTVBUWV9TSVpFLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkKQEAgLTQ0MTYsMTIgKzQ0NDgsNDcgQEAKIAlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSAmJgogCSAgICAoZm91bmRfdW5jYWNoZWRfYmcgfHwgZW1wdHlfc2l6ZSB8fCBlbXB0eV9jbHVzdGVyIHx8CiAJICAgICBhbGxvd2VkX2NodW5rX2FsbG9jKSkgewotCQlpZiAoZm91bmRfdW5jYWNoZWRfYmcpIHsKKwkJaWYgKGxvb3AgPT0gTE9PUF9GSU5EX0lERUFMICYmIGZvdW5kX3VuY2FjaGVkX2JnKSB7CiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IGZhbHNlOwotCQkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgewotCQkJCWxvb3ArKzsKKwkJCWxvb3ArKzsKKwkJCWlmICghaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGF0b21pY19yZWFkKCZzcGFjZV9pbmZvLT5jYWNoaW5nX3RocmVhZHMpKQogCQkJCWdvdG8gc2VhcmNoOwotCQkJfQorCisJCQkvKgorCQkJICogMSBvZiB0aGUgZm9sbG93aW5nIDIgdGhpbmdzIGhhdmUgaGFwcGVuZWQgc28gZmFyCisJCQkgKgorCQkJICogMSkgV2UgZm91bmQgYW4gaWRlYWwgYmxvY2sgZ3JvdXAgZm9yIGNhY2hpbmcgdGhhdAorCQkJICogaXMgbW9zdGx5IGZ1bGwgYW5kIHdpbGwgY2FjaGUgcXVpY2tseSwgc28gd2UgbWlnaHQKKwkJCSAqIGFzIHdlbGwgd2FpdCBmb3IgaXQuCisJCQkgKgorCQkJICogMikgV2Ugc2VhcmNoZWQgZm9yIGNhY2hlZCBvbmx5IGFuZCB3ZSBkaWRuJ3QgZmluZAorCQkJICogYW55dGhpbmcsIGFuZCB3ZSBkaWRuJ3Qgc3RhcnQgYW55IGNhY2hpbmcga3RocmVhZHMKKwkJCSAqIGVpdGhlciwgc28gY2hhbmNlcyBhcmUgd2Ugd2lsbCBsb29wIHRocm91Z2ggYW5kCisJCQkgKiBzdGFydCBhIGNvdXBsZSBjYWNoaW5nIGt0aHJlYWRzLCBhbmQgdGhlbiBjb21lIGJhY2sKKwkJCSAqIGFyb3VuZCBhbmQganVzdCB3YWl0IGZvciB0aGVtLiAgVGhpcyB3aWxsIGJlIHNsb3dlcgorCQkJICogYmVjYXVzZSB3ZSB3aWxsIGhhdmUgMiBjYWNoaW5nIGt0aHJlYWRzIHJlYWRpbmcgYXQKKwkJCSAqIHRoZSBzYW1lIHRpbWUgd2hlbiB3ZSBjb3VsZCBoYXZlIGp1c3Qgc3RhcnRlZCBvbmUKKwkJCSAqIGFuZCB3YWl0ZWQgZm9yIGl0IHRvIGdldCBmYXIgZW5vdWdoIHRvIGdpdmUgdXMgYW4KKwkJCSAqIGFsbG9jYXRpb24sIHNvIGdvIGFoZWFkIGFuZCBnbyB0byB0aGUgd2FpdCBjYWNoaW5nCisJCQkgKiBsb29wLgorCQkJICovCisJCQlsb29wID0gTE9PUF9DQUNISU5HX1dBSVQ7CisJCQlzZWFyY2hfc3RhcnQgPSBpZGVhbF9jYWNoZV9vZmZzZXQ7CisJCQlpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwkJCWdvdG8gaWRlYWxfY2FjaGU7CisJCX0gZWxzZSBpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpIHsKKwkJCS8qCisJCQkgKiBEaWRuJ3QgZmluZCBhIHVuY2FjaGVkIGJnLCB3YWl0IG9uIGFueXRoaW5nIHdlIGZpbmQKKwkJCSAqIG5leHQuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCWdvdG8gc2VhcmNoOworCQl9CisKKwkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgeworCQkJbG9vcCsrOworCQkJZ290byBzZWFyY2g7CiAJCX0KIAogCQlpZiAobG9vcCA9PSBMT09QX0FMTE9DX0NIVU5LKSB7CkBAIC00NDMzLDcgKzQ1MDAsOCBAQAogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCiAJCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKIAkJCWFsbG93ZWRfY2h1bmtfYWxsb2MgPSAwOwotCQl9IGVsc2UgeworCQkJZG9uZV9jaHVua19hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MpIHsKIAkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggMmM3MjZiNy4uY2NiZGNiNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJd3JpdGVfbG9jaygmdHJlZS0+bG9jayk7CiAJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcodHJlZSwgc3RhcnQsIGxlbik7CiAKLQlXQVJOX09OKGVtLT5zdGFydCAhPSBzdGFydCB8fCAhZW0pOworCVdBUk5fT04oIWVtIHx8IGVtLT5zdGFydCAhPSBzdGFydCk7CiAKIAlpZiAoIWVtKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCAyZDYyM2FhLi4wNjU1MGFmIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMDg2LDggKzEwODYsMTAgQEAKIAkJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQllbHNlCiAJCQkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlIGlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKIAkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJfSBlbHNlIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJfQogCQl9CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKQEAgLTExMzcsNiArMTEzOSwxMyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCisKKwkvKiB3ZSB3YWl0IGZpcnN0LCBzaW5jZSB0aGUgd3JpdGViYWNrIG1heSBjaGFuZ2UgdGhlIGlub2RlICovCisJcm9vdC0+bG9nX2JhdGNoKys7CisJLyogdGhlIFZGUyBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlIGZvciB1cyAqLworCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJcm9vdC0+bG9nX2JhdGNoKys7CisKIAkvKgogCSAqIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqIGFuZCBzZWUgaWYgaXRzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQKQEAgLTExNDQsNiArMTE1MywxMSBAQAogCWlmICghQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBpZiB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZWQgdGhpcyBmaWxlIHdhcyBiZWZvcmUKKwkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQorCSAqIHN5bmNpbmcKKwkgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CkBAIC0xMTUzLDEzICsxMTY3LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQlyb290LT5sb2dfYmF0Y2grKzsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKLQlyb290LT5sb2dfYmF0Y2grKzsKLQotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdAogCSAqLwpAQCAtMTE4OCwxNCArMTE5NSwxOCBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQllbHNlCisJaWYgKHJldCAhPSBCVFJGU19OT19MT0dfU1lOQykgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZWxzZQorCQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IDVjMmNhYWQuLmNiMjg0OWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCQl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OwogCQkJd2luZG93X2ZyZWUgPSBlbnRyeS0+Ynl0ZXM7CiAJCQlsYXN0ID0gZW50cnk7Ci0JCQltYXhfZXh0ZW50ID0gMDsKKwkJCW1heF9leHRlbnQgPSBlbnRyeS0+Ynl0ZXM7CiAJCX0gZWxzZSB7CiAJCQlsYXN0ID0gbmV4dDsKIAkJCXdpbmRvd19mcmVlICs9IG5leHQtPmJ5dGVzOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggOWUxMzhiNy4uYjNhZDE2OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC01MzgsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfbWFwX3RyZWUgKmVtX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlOwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqaW9fdHJlZTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX2Nvdy0+ZXh0ZW50cykpCiAJCXJldHVybiAwOwpAQCAtNTUyLDYgKzU1Miw3IEBACiAKIAkJaW9fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKIAorcmV0cnk6CiAJCS8qIGRpZCB0aGUgY29tcHJlc3Npb24gY29kZSBmYWxsIGJhY2sgdG8gdW5jb21wcmVzc2VkIElPPyAqLwogCQlpZiAoIWFzeW5jX2V4dGVudC0+cGFnZXMpIHsKIAkJCWludCBwYWdlX3N0YXJ0ZWQgPSAwOwpAQCAtNTYyLDExICs1NjMsMTEgQEAKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsIEdGUF9OT0ZTKTsKIAogCQkJLyogYWxsb2NhdGUgYmxvY2tzICovCi0JCQljb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJICAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAotCQkJCSAgICAgICAmcGFnZV9zdGFydGVkLCAmbnJfd3JpdHRlbiwgMCk7CisJCQlyZXQgPSBjb3dfZmlsZV9yYW5nZShpbm9kZSwgYXN5bmNfY293LT5sb2NrZWRfcGFnZSwKKwkJCQkJICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLAorCQkJCQkgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKIAogCQkJLyoKIAkJCSAqIGlmIHBhZ2Vfc3RhcnRlZCwgY293X2ZpbGVfcmFuZ2UgaW5zZXJ0ZWQgYW4KQEAgLTU3NCw3ICs1NzUsNyBAQAogCQkJICogYW5kIElPIGZvciB1cy4gIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdWJtaXQKIAkJCSAqIGFsbCB0aG9zZSBwYWdlcyBkb3duIHRvIHRoZSBkcml2ZS4KIAkJCSAqLwotCQkJaWYgKCFwYWdlX3N0YXJ0ZWQpCisJCQlpZiAoIXBhZ2Vfc3RhcnRlZCAmJiAhcmV0KQogCQkJCWV4dGVudF93cml0ZV9sb2NrZWRfcmFuZ2UoaW9fdHJlZSwKIAkJCQkJCSAgaW5vZGUsIGFzeW5jX2V4dGVudC0+c3RhcnQsCiAJCQkJCQkgIGFzeW5jX2V4dGVudC0+c3RhcnQgKwpAQCAtNjAyLDcgKzYwMywyMSBAQAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgMCwgYWxsb2NfaGludCwKIAkJCQkJICAgKHU2NCktMSwgJmlucywgMSk7Ci0JCUJVR19PTihyZXQpOworCQlpZiAocmV0KSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBhc3luY19leHRlbnQtPm5yX3BhZ2VzOyBpKyspIHsKKwkJCQlXQVJOX09OKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0tPm1hcHBpbmcpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShhc3luY19leHRlbnQtPnBhZ2VzW2ldKTsKKwkJCX0KKwkJCWtmcmVlKGFzeW5jX2V4dGVudC0+cGFnZXMpOworCQkJYXN5bmNfZXh0ZW50LT5ucl9wYWdlcyA9IDA7CisJCQlhc3luY19leHRlbnQtPnBhZ2VzID0gTlVMTDsKKwkJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKKwkJCQkgICAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJZ290byByZXRyeTsKKwkJfQorCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CiAJCWVtLT5zdGFydCA9IGFzeW5jX2V4dGVudC0+c3RhcnQ7CiAJCWVtLT5sZW4gPSBhc3luY19leHRlbnQtPnJhbV9zaXplOwpAQCAtNzQzLDggKzc1OCwyMiBAQAogCWVtID0gc2VhcmNoX2V4dGVudF9tYXBwaW5nKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUsCiAJCQkJICAgc3RhcnQsIG51bV9ieXRlcyk7CiAJaWYgKGVtKSB7Ci0JCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7Ci0JCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCS8qCisJCSAqIGlmIGJsb2NrIHN0YXJ0IGlzbid0IGFuIGFjdHVhbCBibG9jayBudW1iZXIgdGhlbiBmaW5kIHRoZQorCQkgKiBmaXJzdCBibG9jayBpbiB0aGlzIGlub2RlIGFuZCB1c2UgdGhhdCBhcyBhIGhpbnQuICBJZiB0aGF0CisJCSAqIGJsb2NrIGlzIGFsc28gYm9ndXMgdGhlbiBqdXN0IGRvbid0IHdvcnJ5IGFib3V0IGl0LgorCQkgKi8KKwkJaWYgKGVtLT5ibG9ja19zdGFydCA+PSBFWFRFTlRfTUFQX0xBU1RfQllURSkgeworCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJCWVtID0gc2VhcmNoX2V4dGVudF9tYXBwaW5nKGVtX3RyZWUsIDAsIDApOworCQkJaWYgKGVtICYmIGVtLT5ibG9ja19zdGFydCA8IEVYVEVOVF9NQVBfTEFTVF9CWVRFKQorCQkJCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7CisJCQlpZiAoZW0pCisJCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJfSBlbHNlIHsKKwkJCWFsbG9jX2hpbnQgPSBlbS0+YmxvY2tfc3RhcnQ7CisJCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUubG9jayk7CiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIG51bV9ieXRlcyAtIDEsIDApOwpAQCAtMjQ3NCw3ICsyNTAzLDE5IEBACiAKIAlyb290ID0gQlRSRlNfSShkaXIpLT5yb290OwogCisJLyoKKwkgKiA1IGl0ZW1zIGZvciB1bmxpbmsgaW5vZGUKKwkgKiAxIGZvciBvcnBoYW4KKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIApAQCAtMjQ4OSw2ICsyNTMwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNTY5LDcgKzI2MTEsMTYgQEAKIAkgICAgaW5vZGUtPmlfaW5vID09IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CisKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAlpZiAodW5saWtlbHkoaW5vZGUtPmlfaW5vID09IEJUUkZTX0VNUFRZX1NVQlZPTF9ESVJfT0JKRUNUSUQpKSB7CkBAIC0yNTkyLDYgKzI2NDMsNyBAQAogb3V0OgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCiAJaWYgKHJldCAmJiAhZXJyKQpAQCAtMzAzMiwxMiArMzA4NCwyMiBAQAogCiAJaWYgKChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpID09IDApCiAJCWdvdG8gb3V0OworCXJldCA9IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXJldCA9IC1FTk9NRU07CiBhZ2FpbjoKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKLQlpZiAoIXBhZ2UpCisJaWYgKCFwYWdlKSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJCWdvdG8gb3V0OworCX0KIAogCXBhZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKIAlwYWdlX2VuZCA9IHBhZ2Vfc3RhcnQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxOwpAQCAtMzA3MCw2ICszMTMyLDEwIEBACiAJCWdvdG8gYWdhaW47CiAJfQogCisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKwogCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKIAlpZiAocmV0KSB7CiAJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKQEAgLTMwODgsNiArMzE1NCw5IEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgorCWlmIChyZXQpCisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiBvdXQ6CkBAIC0zMTExLDcgKzMxODAsOSBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CkBAIC0zNDgwLDYgKzM1NTEsNyBAQAogCWJpLT5nZW5lcmF0aW9uID0gMDsKIAliaS0+c2VxdWVuY2UgPSAwOwogCWJpLT5sYXN0X3RyYW5zID0gMDsKKwliaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWJpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWJpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJYmktPnJlc2VydmVkX2J5dGVzID0gMDsKQEAgLTQ5ODAsNyArNTA1Miw5IEBACiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0JQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uICsgMTsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOworCiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgpAQCAtNTAwNSw3ICs1MDc5LDkgQEAKIAlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogCQlyZXR1cm47CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCXJldCA9IGJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKQEAgLTUxMDAsOSArNTE3NiwxMSBAQAogCWlmICghZWkpCiAJCXJldHVybiBOVUxMOwogCWVpLT5sYXN0X3RyYW5zID0gMDsKKwllaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWVpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWVpLT5vdXRzdGFuZGluZ19leHRlbnRzID0gMDsKIAllaS0+cmVzZXJ2ZWRfZXh0ZW50cyA9IDA7CisJZWktPnJvb3QgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZlaS0+YWNjb3VudGluZ19sb2NrKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmZWktPm9yZGVyZWRfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CkBAIC01MTE5LDYgKzUxOTcsMTQgQEAKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKIAkvKgorCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVyZSB3ZSBjcmVhdGUgYW4gaW5vZGUsIGJ1dCBzb21lYm9keSBlbHNlIGFsc28KKwkgKiBjcmVhdGVkIHRoZSBzYW1lIGlub2RlIGFuZCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIG9uZSB3ZSBhbHJlYWR5CisJICogY3JlYXRlZC4KKwkgKi8KKwlpZiAoIXJvb3QpCisJCWdvdG8gZnJlZTsKKworCS8qCiAJICogTWFrZSBzdXJlIHdlJ3JlIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJlZCBvcGVyYXRpb24KIAkgKiBsaXN0cy4KIAkgKi8KQEAgLTUxNTMsNiArNTIzOSw3IEBACiAJfQogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CitmcmVlOgogCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKIH0KIApAQCAtNTI1OCwxMSArNTM0NSwxNCBAQAogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAogCS8qCi0JICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCi0JICogMSBpdGVtIGZvciBvcnBoYW4gZW50cnkKLQkgKiAxIGl0ZW0gZm9yIHJlZgorCSAqIFdlIHdhbnQgdG8gcmVzZXJ2ZSB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSBhbW91bnQgb2YgaXRlbXMuICBTbyBpZgorCSAqIGJvdGggaW5vZGVzIGFyZSBzdWJ2b2xzIGFuZCB3ZSBuZWVkIHRvIHVubGluayB0aGVtIHRoZW4gdGhhdCB3b3VsZAorCSAqIHJlcXVpcmUgNCBpdGVtIG1vZGlmaWNhdGlvbnMsIGJ1dCBpZiB0aGV5IGFyZSBib3RoIG5vcm1hbCBpbm9kZXMgaXQKKwkgKiB3b3VsZCByZXF1aXJlIDUgaXRlbSBtb2RpZmljYXRpb25zLCBzbyB3ZSdsbCBhc3N1bWUgdGhlaXIgbm9ybWFsCisJICogaW5vZGVzLiAgU28gNSAqIDIgaXMgMTAsIHBsdXMgMSBmb3IgdGhlIG5ldyBsaW5rLCBzbyAxMSB0b3RhbCBpdGVtcworCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgogCSAqLwotCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNCk7CisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxMSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTM3OCw3ICs1NDY4LDcgQEAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKIAotCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA0KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKaW5kZXggOTM1MTQyOC4uNjdmYTJkMiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcm9vdC10cmVlLmMKKysrIGIvZnMvYnRyZnMvcm9vdC10cmVlLmMKQEAgLTE1OSw3ICsxNTksNiBAQAogCXdyaXRlX2V4dGVudF9idWZmZXIobCwgaXRlbSwgcHRyLCBzaXplb2YoKml0ZW0pKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiBvdXQ6Ci0JYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzMyLDcgKzMzMSw2IEBACiAJQlVHX09OKHJlZnMgIT0gMCk7CiAJcmV0ID0gYnRyZnNfZGVsX2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgpOwogb3V0OgotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDlkZTliMjIuLjc1MmE1NDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNjYsNyArNjYsOCBAQAogCU9wdF9kZWdyYWRlZCwgT3B0X3N1YnZvbCwgT3B0X2RldmljZSwgT3B0X25vZGF0YXN1bSwgT3B0X25vZGF0YWNvdywKIAlPcHRfbWF4X2V4dGVudCwgT3B0X21heF9pbmxpbmUsIE9wdF9hbGxvY19zdGFydCwgT3B0X25vYmFycmllciwKIAlPcHRfc3NkLCBPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwKLQlPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9lcnIsCisJT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LAorCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODgsNiArODksNyBAQAogCXtPcHRfbm90cmVlbG9nLCAibm90cmVlbG9nIn0sCiAJe09wdF9mbHVzaG9uY29tbWl0LCAiZmx1c2hvbmNvbW1pdCJ9LAogCXtPcHRfcmF0aW8sICJtZXRhZGF0YV9yYXRpbz0lZCJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yNTcsNiArMjU5LDkgQEAKIAkJCQkgICAgICAgaW5mby0+bWV0YWRhdGFfcmF0aW8pOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAlzYi0+c19leHBvcnRfb3AgPSAmYnRyZnNfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGJ0cmZzX3hhdHRyX2hhbmRsZXJzOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7Ci0jaWZkZWYgQ09ORklHX0JUUkZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCAwYjhmMzZkLi5jMjA3ZThjIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTE2Myw4ICsxNjMsMTQgQEAKIAl9CiB9CiAKK2VudW0gYnRyZnNfdHJhbnNfdHlwZSB7CisJVFJBTlNfU1RBUlQsCisJVFJBTlNfSk9JTiwKKwlUUkFOU19VU0VSU1BBQ0UsCit9OworCiBzdGF0aWMgc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCSAgICAgaW50IG51bV9ibG9ja3MsIGludCB3YWl0KQorCQkJCQkgICAgIGludCBudW1fYmxvY2tzLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpoID0KIAkJa21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCBHRlBfTk9GUyk7CkBAIC0xNzIsNyArMTc4LDggQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAoIXJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcgJiYKLQkgICAgKCh3YWl0ID09IDEgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8IHdhaXQgPT0gMikpCisJICAgICgodHlwZSA9PSBUUkFOU19TVEFSVCAmJiAhcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykgfHwKKwkgICAgIHR5cGUgPT0gVFJBTlNfVVNFUlNQQUNFKSkKIAkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOwogCXJldCA9IGpvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJQlVHX09OKHJldCk7CkBAIC0xODYsNyArMTkzLDcgQEAKIAloLT5hbGxvY19leGNsdWRlX3N0YXJ0ID0gMDsKIAloLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKIAotCWlmICghY3VycmVudC0+am91cm5hbF9pbmZvKQorCWlmICghY3VycmVudC0+am91cm5hbF9pbmZvICYmIHR5cGUgIT0gVFJBTlNfVVNFUlNQQUNFKQogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBoOwogCiAJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbi0+dXNlX2NvdW50Kys7CkBAIC0xOTgsMTggKzIwNSwxOCBAQAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgMSk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIFRSQU5TX1NUQVJUKTsKIH0KIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICBpbnQgbnVtX2Jsb2NrcykKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2Jsb2NrcywgMCk7CisJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIFRSQU5TX0pPSU4pOwogfQogCiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqciwKIAkJCQkJCQkgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHIsIG51bV9ibG9ja3MsIDIpOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyLCBudW1fYmxvY2tzLCBUUkFOU19VU0VSU1BBQ0UpOwogfQogCiAvKiB3YWl0IGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCB0byBiZSBmdWxseSBjb21wbGV0ZSAqLwpAQCAtMzQ0LDEwICszNTEsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzk0LDYgKzQwMSwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MjQsNiArNDU0LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggNjYzYzY3NC4uZDRlM2U3YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC03OSw2ICs3OSw3IEBACiAJCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb24tPnRyYW5zaWQ7CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOwogfQogCiBpbnQgYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMTA3LDUgKzEwOCw5IEBACiAJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKK2ludCBidHJmc193cml0ZV9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25faW5fY29tbWl0KHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggNGVkZmRjMi4uNzQxNjY2YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0xOTgwLDYgKzE5ODAsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZyA9IHJvb3QtPmxvZ19yb290OwogCXN0cnVjdCBidHJmc19yb290ICpsb2dfcm9vdF90cmVlID0gcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZTsKKwl1NjQgbG9nX3RyYW5zaWQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAlpbmRleDEgPSByb290LT5sb2dfdHJhbnNpZCAlIDI7CkBAIC0xOTk0LDEyICsxOTk1LDEzIEBACiAJaWYgKGF0b21pY19yZWFkKCZyb290LT5sb2dfY29tbWl0WyhpbmRleDEgKyAxKSAlIDJdKSkKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCByb290LCByb290LT5sb2dfdHJhbnNpZCAtIDEpOwogCi0Jd2hpbGUgKHJvb3QtPmxvZ19tdWx0aXBsZV9waWRzKSB7CisJd2hpbGUgKDEpIHsKIAkJdW5zaWduZWQgbG9uZyBiYXRjaCA9IHJvb3QtPmxvZ19iYXRjaDsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKLQorCQlpZiAocm9vdC0+bG9nX211bHRpcGxlX3BpZHMpIHsKKwkJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJfQogCQl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIHJvb3QpOwogCQlpZiAoYmF0Y2ggPT0gcm9vdC0+bG9nX2JhdGNoKQogCQkJYnJlYWs7CkBAIC0yMDEyLDEyICsyMDE0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkvKiB3ZSBzdGFydCBJTyBvbiAgYWxsIHRoZSBtYXJrZWQgZXh0ZW50cyBoZXJlLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKwkgKiB3YWl0IGZvciB0aGVtIHVudGlsIGxhdGVyLgorCSAqLworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJmxvZy0+cm9vdF9pdGVtLCBsb2ctPm5vZGUpOwogCiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKKwlsb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ190cmFuc2lkKys7CiAJbG9nLT5sb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ19zdGFydF9waWQgPSAwOwpAQCAtMjA0Niw2ICsyMDUyLDcgQEAKIAogCWluZGV4MiA9IGxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkICUgMjsKIAlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSkpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKQEAgLTIwNjUsNiArMjA3Miw3IEBACiAJICogY2hlY2sgdGhlIGZ1bGwgY29tbWl0IGZsYWcgYWdhaW4KIAkgKi8KIAlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPT0gdHJhbnMtPnRyYW5zaWQpIHsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXRfd2FrZV9sb2dfcm9vdDsKQEAgLTIwNzMsNiArMjA4MSw3IEBACiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nX3Jvb3RfdHJlZSwKIAkJCQkmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzKTsKIAlCVUdfT04ocmV0KTsKKwlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAogCWJ0cmZzX3NldF9zdXBlcl9sb2dfcm9vdCgmcm9vdC0+ZnNfaW5mby0+c3VwZXJfZm9yX2NvbW1pdCwKIAkJCQlsb2dfcm9vdF90cmVlLT5ub2RlLT5zdGFydCk7CkBAIC0yMDkyLDkgKzIxMDEsMTQgQEAKIAkgKiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiBvcGVuLCBzbyBhIGZ1bGwgY29tbWl0IGNhbid0IGhvcAogCSAqIGluIGFuZCBjYXVzZSBwcm9ibGVtcyBlaXRoZXIuCiAJICovCi0Jd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMik7CisJd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwgMSk7CiAJcmV0ID0gMDsKIAorCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKHJvb3QtPmxhc3RfbG9nX2NvbW1pdCA8IGxvZ190cmFuc2lkKQorCQlyb290LT5sYXN0X2xvZ19jb21taXQgPSBsb2dfdHJhbnNpZDsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisKIG91dF93YWtlX2xvZ19yb290OgogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMCk7CiAJc21wX21iKCk7CkBAIC0yODYyLDYgKzI4NzYsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGlub2RlX2luX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5sb2dnZWRfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zIDw9IHJvb3QtPmxhc3RfbG9nX2NvbW1pdCkKKwkJcmV0ID0gMTsKKwltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogaGVscGVyIGZ1bmN0aW9uIGFyb3VuZCBidHJmc19sb2dfaW5vZGUgdG8gbWFrZSBzdXJlIG5ld2x5IGNyZWF0ZWQKICAqIHBhcmVudCBkaXJlY3RvcmllcyBhbHNvIGVuZCB1cCBpbiB0aGUgbG9nLiAgQSBtaW5pbWFsIGlub2RlIGFuZCBiYWNrcmVmCkBAIC0yOTAxLDYgKzI5MzAsMTEgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVuZF9ub190cmFuczsKIAorCWlmIChpbm9kZV9pbl9sb2codHJhbnMsIGlub2RlKSkgeworCQlyZXQgPSBCVFJGU19OT19MT0dfU1lOQzsKKwkJZ290byBlbmRfbm9fdHJhbnM7CisJfQorCiAJc3RhcnRfbG9nX3RyYW5zKHRyYW5zLCByb290KTsKIAogCXJldCA9IGJ0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuaCBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKaW5kZXggZDA5Yzc2MC4uMDc3NmVhYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuaAorKysgYi9mcy9idHJmcy90cmVlLWxvZy5oCkBAIC0xOSw2ICsxOSw5IEBACiAjaWZuZGVmIF9fVFJFRV9MT0dfCiAjZGVmaW5lIF9fVFJFRV9MT0dfCiAKKy8qIHJldHVybiB2YWx1ZSBmb3IgYnRyZnNfbG9nX2RlbnRyeV9zYWZlIHRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBsb2cgaXQgYXQgYWxsICovCisjZGVmaW5lIEJUUkZTX05PX0xPR19TWU5DIDI1NgorCiBpbnQgYnRyZnNfc3luY19sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIuYyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggYjBmYzkzZi4uYjZkZDU5NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMveGF0dHIuYworKysgYi9mcy9idHJmcy94YXR0ci5jCkBAIC0yNjAsNyArMjYwLDcgQEAKICAqIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgZGlyZWN0bHkuCiAgKi8KIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpidHJmc194YXR0cl9oYW5kbGVyc1tdID0gewotI2lmZGVmIENPTkZJR19CVFJGU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAJJmJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKIAkmYnRyZnNfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMKaW5kZXggNDMxYWNjZC4uMjcwODkzMSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYworKysgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCkBAIC0xMTQsOCArMTE0LDkgQEAKIAogLyoKICAqIGF0dGVtcHQgdG8gbG9vayB1cCB0aGUgbm9taW5hdGVkIG5vZGUgaW4gdGhpcyBjYWNoZQorICogLSByZXR1cm4gLUVUSU1FRE9VVCB0byBiZSBzY2hlZHVsZWQgYWdhaW4KICAqLwotc3RhdGljIHZvaWQgY2FjaGVmaWxlc19sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKIHsKIAlzdHJ1Y3QgY2FjaGVmaWxlc19sb29rdXBfZGF0YSAqbG9va3VwX2RhdGE7CiAJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsICpvYmplY3Q7CkBAIC0xNDUsMTMgKzE0NiwxNSBAQAogCSAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPnR5cGUgIT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkKIAkJY2FjaGVmaWxlc19hdHRyX2NoYW5nZWQoJm9iamVjdC0+ZnNjYWNoZSk7CiAKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYWNoZUZpbGVzOiBMb29rdXAgZmFpbGVkIGVycm9yICVkXG4iLAotCQkgICAgICAgcmV0KTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVUSU1FRE9VVCkgeworCQlpZiAocmV0ICE9IC1FTk9CVUZTKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJDYWNoZUZpbGVzOiBMb29rdXAgZmFpbGVkIGVycm9yICVkXG4iLCByZXQpOwogCQlmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IoJm9iamVjdC0+ZnNjYWNoZSk7CiAJfQogCiAJX2xlYXZlKCIgWyVkXSIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTMzMSw2ICszMzQsNyBAQAogCQl9CiAKIAkJY2FjaGUgPSBvYmplY3QtPmZzY2FjaGUuY2FjaGU7CisJCWZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3koJm9iamVjdC0+ZnNjYWNoZSk7CiAJCWttZW1fY2FjaGVfZnJlZShjYWNoZWZpbGVzX29iamVjdF9qYXIsIG9iamVjdCk7CiAJCWZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3llZChjYWNoZSk7CiAJfQpAQCAtNDAzLDEyICs0MDcsMjYgQEAKIAlpZiAob2lfc2l6ZSA9PSBuaV9zaXplKQogCQlyZXR1cm4gMDsKIAotCW5ld2F0dHJzLmlhX3NpemUgPSBuaV9zaXplOwotCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9TSVpFOwotCiAJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKIAltdXRleF9sb2NrKCZvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwkvKiBpZiB0aGVyZSdzIGFuIGV4dGVuc2lvbiB0byBhIHBhcnRpYWwgcGFnZSBhdCB0aGUgZW5kIG9mIHRoZSBiYWNraW5nCisJICogZmlsZSwgd2UgbmVlZCB0byBkaXNjYXJkIHRoZSBwYXJ0aWFsIHBhZ2Ugc28gdGhhdCB3ZSBwaWNrIHVwIG5ldworCSAqIGRhdGEgYWZ0ZXIgaXQgKi8KKwlpZiAob2lfc2l6ZSAmIH5QQUdFX01BU0sgJiYgbmlfc2l6ZSA+IG9pX3NpemUpIHsKKwkJX2RlYnVnKCJkaXNjYXJkIHRhaWwgJWxseCIsIG9pX3NpemUpOworCQluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRTsKKwkJbmV3YXR0cnMuaWFfc2l6ZSA9IG9pX3NpemUgJiBQQUdFX01BU0s7CisJCXJldCA9IG5vdGlmeV9jaGFuZ2Uob2JqZWN0LT5iYWNrZXIsICZuZXdhdHRycyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byB0cnVuY2F0ZV9mYWlsZWQ7CisJfQorCisJbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX1NJWkU7CisJbmV3YXR0cnMuaWFfc2l6ZSA9IG5pX3NpemU7CiAJcmV0ID0gbm90aWZ5X2NoYW5nZShvYmplY3QtPmJhY2tlciwgJm5ld2F0dHJzKTsKKwordHJ1bmNhdGVfZmFpbGVkOgogCW11dGV4X3VubG9jaygmb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwppbmRleCA0Y2U4MThhLi4xNGFjNDgwIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMKKysrIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0yMSwxNyArMjEsODEgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLXN0YXRpYyBpbnQgY2FjaGVmaWxlc193YWl0X2JpdCh2b2lkICpmbGFncykKKyNkZWZpbmUgQ0FDSEVGSUxFU19LRVlCVUZfU0laRSA1MTIKKworLyoKKyAqIGR1bXAgZGVidWdnaW5nIGluZm8gYWJvdXQgYW4gb2JqZWN0CisgKi8KK3N0YXRpYyBub2lubGluZQordm9pZCBfX2NhY2hlZmlsZXNfcHJpbnRrX29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQljb25zdCBjaGFyICpwcmVmaXgsCisJCQkJdTggKmtleWJ1ZikKIHsKLQlzY2hlZHVsZSgpOwotCXJldHVybiAwOworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llOworCXVuc2lnbmVkIGtleWxlbiwgbG9vcDsKKworCXByaW50ayhLRVJOX0VSUiAiJXNvYmplY3Q6IE9CSiV4XG4iLAorCSAgICAgICBwcmVmaXgsIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJcHJpbnRrKEtFUk5fRVJSICIlc29ianN0YXRlPSVzIGZsPSVseCBzd2ZsPSVseCBldj0lbHhbJWx4XVxuIiwKKwkgICAgICAgcHJlZml4LCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5mc2NhY2hlLnN0YXRlXSwKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmZsYWdzLCBvYmplY3QtPmZzY2FjaGUud29yay5mbGFncywKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmV2ZW50cywKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmV2ZW50X21hc2sgJiBGU0NBQ0hFX09CSkVDVF9FVkVOVFNfTUFTSyk7CisJcHJpbnRrKEtFUk5fRVJSICIlc29wcz0ldSBpbnA9JXUgZXhjPSV1XG4iLAorCSAgICAgICBwcmVmaXgsIG9iamVjdC0+ZnNjYWNoZS5uX29wcywgb2JqZWN0LT5mc2NhY2hlLm5faW5fcHJvZ3Jlc3MsCisJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5uX2V4Y2x1c2l2ZSk7CisJcHJpbnRrKEtFUk5fRVJSICIlc3BhcmVudD0lcFxuIiwKKwkgICAgICAgcHJlZml4LCBvYmplY3QtPmZzY2FjaGUucGFyZW50KTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5mc2NhY2hlLmxvY2spOworCWNvb2tpZSA9IG9iamVjdC0+ZnNjYWNoZS5jb29raWU7CisJaWYgKGNvb2tpZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzY29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgcHJlZml4LAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZSwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPnBhcmVudCwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5mbGFncyk7CisJCWlmIChrZXlidWYpCisJCQlrZXlsZW4gPSBjb29raWUtPmRlZi0+Z2V0X2tleShjb29raWUtPm5ldGZzX2RhdGEsIGtleWJ1ZiwKKwkJCQkJCSAgICAgIENBQ0hFRklMRVNfS0VZQlVGX1NJWkUpOworCQllbHNlCisJCQlrZXlsZW4gPSAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXNjb29raWU9TlVMTFxuIiwgcHJlZml4KTsKKwkJa2V5bGVuID0gMDsKKwl9CisJc3Bpbl91bmxvY2soJm9iamVjdC0+ZnNjYWNoZS5sb2NrKTsKKworCWlmIChrZXlsZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlc2tleT1bJXVdICciLCBwcmVmaXgsIGtleWxlbik7CisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBrZXlsZW47IGxvb3ArKykKKwkJCXByaW50aygiJTAyeCIsIGtleWJ1Zltsb29wXSk7CisJCXByaW50aygiJ1xuIik7CisJfQorfQorCisvKgorICogZHVtcCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCBhIHBhaXIgb2Ygb2JqZWN0cworICovCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWNoZWZpbGVzX3ByaW50a19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqeG9iamVjdCkKK3sKKwl1OCAqa2V5YnVmOworCisJa2V5YnVmID0ga21hbGxvYyhDQUNIRUZJTEVTX0tFWUJVRl9TSVpFLCBHRlBfTk9JTyk7CisJaWYgKG9iamVjdCkKKwkJX19jYWNoZWZpbGVzX3ByaW50a19vYmplY3Qob2JqZWN0LCAiIiwga2V5YnVmKTsKKwlpZiAoeG9iamVjdCkKKwkJX19jYWNoZWZpbGVzX3ByaW50a19vYmplY3QoeG9iamVjdCwgIngiLCBrZXlidWYpOworCWtmcmVlKGtleWJ1Zik7CiB9CiAKIC8qCiAgKiByZWNvcmQgdGhlIGZhY3QgdGhhdCBhbiBvYmplY3QgaXMgbm93IGFjdGl2ZQogICovCi1zdGF0aWMgdm9pZCBjYWNoZWZpbGVzX21hcmtfb2JqZWN0X2FjdGl2ZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCi0JCQkJCSAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KQogewogCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqeG9iamVjdDsKIAlzdHJ1Y3QgcmJfbm9kZSAqKl9wLCAqX3BhcmVudCA9IE5VTEw7CkBAIC00Miw4ICsxMDYsMTEgQEAKIHRyeV9hZ2FpbjoKIAl3cml0ZV9sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBFcnJvcjogT2JqZWN0IGFscmVhZHkgYWN0aXZlXG4iKTsKKwkJY2FjaGVmaWxlc19wcmludGtfb2JqZWN0KG9iamVjdCwgTlVMTCk7CiAJCUJVRygpOworCX0KIAogCWRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OwogCV9wID0gJmNhY2hlLT5hY3RpdmVfbm9kZXMucmJfbm9kZTsKQEAgLTY2LDggKzEzMyw4IEBACiAJcmJfaW5zZXJ0X2NvbG9yKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCAmY2FjaGUtPmFjdGl2ZV9ub2Rlcyk7CiAKIAl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7Ci0JX2xlYXZlKCIiKTsKLQlyZXR1cm47CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CiAKIAkvKiBhbiBvbGQgb2JqZWN0IGZyb20gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiBpcyBob2dnaW5nIHRoZSBzbG90IC0gd2UKIAkgKiBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGRlc3Ryb3llZCAqLwpAQCAtNzYsNDQgKzE0Myw3MCBAQAogCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogRXJyb3I6IgogCQkgICAgICAgIiBVbmV4cGVjdGVkIG9iamVjdCBjb2xsaXNpb25cbiIpOwotCQlwcmludGsoS0VSTl9FUlIgInhvYmplY3Q6IE9CSiV4XG4iLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7Ci0JCXByaW50ayhLRVJOX0VSUiAieG9ianN0YXRlPSVzXG4iLAotCQkgICAgICAgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW3hvYmplY3QtPmZzY2FjaGUuc3RhdGVdKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4b2JqZmxhZ3M9JWx4XG4iLCB4b2JqZWN0LT5mc2NhY2hlLmZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4b2JqZXZlbnQ9JWx4IFslbHhdXG4iLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5ldmVudHMsIHhvYmplY3QtPmZzY2FjaGUuZXZlbnRfbWFzayk7Ci0JCXByaW50ayhLRVJOX0VSUiAieG9wcz0ldSBpbnA9JXUgZXhjPSV1XG4iLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5uX29wcywgeG9iamVjdC0+ZnNjYWNoZS5uX2luX3Byb2dyZXNzLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5uX2V4Y2x1c2l2ZSk7Ci0JCXByaW50ayhLRVJOX0VSUiAieGNvb2tpZT0lcCBbcHI9JXAgbmQ9JXAgZmw9JWx4XVxuIiwKLQkJICAgICAgIHhvYmplY3QtPmZzY2FjaGUuY29va2llLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPnBhcmVudCwKLQkJICAgICAgIHhvYmplY3QtPmZzY2FjaGUuY29va2llLT5uZXRmc19kYXRhLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4cGFyZW50PSVwXG4iLAotCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5wYXJlbnQpOwotCQlwcmludGsoS0VSTl9FUlIgIm9iamVjdDogT0JKJXhcbiIsCi0JCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQpOwotCQlwcmludGsoS0VSTl9FUlIgImNvb2tpZT0lcCBbcHI9JXAgbmQ9JXAgZmw9JWx4XVxuIiwKLQkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUsCi0JCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5wYXJlbnQsCi0JCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5uZXRmc19kYXRhLAotCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZmxhZ3MpOwotCQlwcmludGsoS0VSTl9FUlIgInBhcmVudD0lcFxuIiwKLQkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5wYXJlbnQpOworCQljYWNoZWZpbGVzX3ByaW50a19vYmplY3Qob2JqZWN0LCB4b2JqZWN0KTsKIAkJQlVHKCk7CiAJfQogCWF0b21pY19pbmMoJnhvYmplY3QtPnVzYWdlKTsKIAl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CiAKLQlfZGVidWcoIj4+PiB3YWl0Iik7Ci0Jd2FpdF9vbl9iaXQoJnhvYmplY3QtPmZsYWdzLCBDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsCi0JCSAgICBjYWNoZWZpbGVzX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JX2RlYnVnKCI8PDwgd2FpdGVkIik7CisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSwgJnhvYmplY3QtPmZsYWdzKSkgeworCQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisKKwkJc2lnbmVkIGxvbmcgdGltZW91dCA9IDYwICogSFo7CisJCXdhaXRfcXVldWVfdCB3YWl0OworCQlib29sIHJlcXVldWU7CisKKwkJLyogaWYgdGhlIG9iamVjdCB3ZSdyZSB3YWl0aW5nIGZvciBpcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcsCisJCSAqIHRoZW4ganVzdCBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1ZSBiZWhpbmQgaXQgKi8KKwkJaWYgKHNsb3dfd29ya19pc19xdWV1ZWQoJnhvYmplY3QtPmZzY2FjaGUud29yaykpIHsKKwkJCV9kZWJ1ZygicXVldWUgT0JKJXggYmVoaW5kIE9CSiV4IGltbWVkaWF0ZWx5IiwKKwkJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsCisJCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCQlnb3RvIHJlcXVldWU7CisJCX0KKworCQkvKiBvdGhlcndpc2Ugd2Ugc2xlZXAgdW50aWwgZWl0aGVyIHRoZSBvYmplY3Qgd2UncmUgd2FpdGluZyBmb3IKKwkJICogaXMgZG9uZSwgb3IgdGhlIHNsb3ctd29yayBmYWNpbGl0eSB3YW50cyB0aGUgdGhyZWFkIGJhY2sgdG8KKwkJICogZG8gb3RoZXIgd29yayAqLworCQl3cSA9IGJpdF93YWl0cXVldWUoJnhvYmplY3QtPmZsYWdzLCBDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUpOworCQlpbml0X3dhaXQoJndhaXQpOworCQlyZXF1ZXVlID0gZmFsc2U7CisJCWRvIHsKKwkJCXByZXBhcmVfdG9fd2FpdCh3cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICghdGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmeG9iamVjdC0+ZmxhZ3MpKQorCQkJCWJyZWFrOworCQkJcmVxdWV1ZSA9IHNsb3dfd29ya19zbGVlcF90aWxsX3RocmVhZF9uZWVkZWQoCisJCQkJJm9iamVjdC0+ZnNjYWNoZS53b3JrLCAmdGltZW91dCk7CisJCX0gd2hpbGUgKHRpbWVvdXQgPiAwICYmICFyZXF1ZXVlKTsKKwkJZmluaXNoX3dhaXQod3EsICZ3YWl0KTsKKworCQlpZiAocmVxdWV1ZSAmJgorCQkgICAgdGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmeG9iamVjdC0+ZmxhZ3MpKSB7CisJCQlfZGVidWcoInF1ZXVlIE9CSiV4IGJlaGluZCBPQkoleCBhZnRlciB3YWl0IiwKKwkJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsCisJCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCQlnb3RvIHJlcXVldWU7CisJCX0KKworCQlpZiAodGltZW91dCA8PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IEVycm9yOiBPdmVybG9uZyIKKwkJCSAgICAgICAiIHdhaXQgZm9yIG9sZCBhY3RpdmUgb2JqZWN0IHRvIGdvIGF3YXlcbiIpOworCQkJY2FjaGVmaWxlc19wcmludGtfb2JqZWN0KG9iamVjdCwgeG9iamVjdCk7CisJCQlnb3RvIHJlcXVldWU7CisJCX0KKwl9CisKKwlBU1NFUlQoIXRlc3RfYml0KENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSwgJnhvYmplY3QtPmZsYWdzKSk7CiAKIAljYWNoZS0+Y2FjaGUub3BzLT5wdXRfb2JqZWN0KCZ4b2JqZWN0LT5mc2NhY2hlKTsKIAlnb3RvIHRyeV9hZ2FpbjsKKworcmVxdWV1ZToKKwljbGVhcl9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncyk7CisJY2FjaGUtPmNhY2hlLm9wcy0+cHV0X29iamVjdCgmeG9iamVjdC0+ZnNjYWNoZSk7CisJX2xlYXZlKCIgPSAtRVRJTUVET1VUIik7CisJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKIC8qCkBAIC0yNTQsNyArMzQ3LDcgQEAKIAogCWRpciA9IGRnZXRfcGFyZW50KG9iamVjdC0+ZGVudHJ5KTsKIAotCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCXJldCA9IGNhY2hlZmlsZXNfYnVyeV9vYmplY3QoY2FjaGUsIGRpciwgb2JqZWN0LT5kZW50cnkpOwogCiAJZHB1dChkaXIpOwpAQCAtMzA3LDcgKzQwMCw3IEBACiAJLyogc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGVsZW1lbnQgbmFtZSAqLwogCV9kZWJ1ZygibG9va3VwICclcyciLCBuYW1lKTsKIAotCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCiAJc3RhcnQgPSBqaWZmaWVzOwogCW5leHQgPSBsb29rdXBfb25lX2xlbihuYW1lLCBkaXIsIG5sZW4pOwpAQCAtNDE4LDEyICs1MTEsMTUgQEAKIAl9CiAKIAkvKiBub3RlIHRoYXQgd2UncmUgbm93IHVzaW5nIHRoaXMgb2JqZWN0ICovCi0JY2FjaGVmaWxlc19tYXJrX29iamVjdF9hY3RpdmUoY2FjaGUsIG9iamVjdCk7CisJcmV0ID0gY2FjaGVmaWxlc19tYXJrX29iamVjdF9hY3RpdmUoY2FjaGUsIG9iamVjdCk7CiAKIAltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZHB1dChkaXIpOwogCWRpciA9IE5VTEw7CiAKKwlpZiAocmV0ID09IC1FVElNRURPVVQpCisJCWdvdG8gbWFya19hY3RpdmVfdGltZWRfb3V0OworCiAJX2RlYnVnKCI9PT0gT0JUQUlORURfT0JKRUNUID09PSIpOwogCiAJaWYgKG9iamVjdC0+bmV3KSB7CkBAIC00NjcsNiArNTYzLDEwIEBACiAJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJDcmVhdGUvbWtkaXIgZmFpbGVkIik7CiAJZ290byBlcnJvcjsKIAorbWFya19hY3RpdmVfdGltZWRfb3V0OgorCV9kZWJ1ZygibWFyayBhY3RpdmUgdGltZWQgb3V0Iik7CisJZ290byByZWxlYXNlX2RlbnRyeTsKKwogY2hlY2tfZXJyb3I6CiAJX2RlYnVnKCJjaGVjayBlcnJvciAlZCIsIHJldCk7CiAJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKQEAgLTQ3NCw3ICs1NzQsNyBAQAogCWNsZWFyX2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKTsKIAl3YWtlX3VwX2JpdCgmb2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFKTsKIAl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7Ci0KK3JlbGVhc2VfZGVudHJ5OgogCWRwdXQob2JqZWN0LT5kZW50cnkpOwogCW9iamVjdC0+ZGVudHJ5ID0gTlVMTDsKIAlnb3RvIGVycm9yX291dDsKQEAgLTQ5NSw5ICs1OTUsNiBAQAogZXJyb3Jfb3V0MjoKIAlkcHV0KGRpcik7CiBlcnJvcl9vdXQ6Ci0JaWYgKHJldCA9PSAtRU5PU1BDKQotCQlyZXQgPSAtRU5PQlVGUzsKLQogCV9sZWF2ZSgiID0gZXJyb3IgJWQiLCAtcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9yZHdyLmMgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwppbmRleCBhNjk3ODdlLi5hNmM4YzZmIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL3Jkd3IuYworKysgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKQEAgLTQwLDggKzQxLDEwIEBACiAKIAlfZGVidWcoIi0tLSBtb25pdG9yICVwICVseCAtLS0iLCBwYWdlLCBwYWdlLT5mbGFncyk7CiAKLQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSAmJiAhUGFnZUVycm9yKHBhZ2UpKQotCQlkdW1wX3N0YWNrKCk7CisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkgeworCQkvKiB1bmxvY2tlZCwgbm90IHVwdG9kYXRlIGFuZCBub3QgZXJyb25vdXM/ICovCisJCV9kZWJ1ZygicGFnZSBwcm9iYWJseSB0cnVuY2F0ZWQiKTsKKwl9CiAKIAkvKiByZW1vdmUgZnJvbSB0aGUgd2FpdHF1ZXVlICovCiAJbGlzdF9kZWwoJndhaXQtPnRhc2tfbGlzdCk7CkBAIC02MSw2ICs2NCw4NCBAQAogfQogCiAvKgorICogaGFuZGxlIGEgcHJvYmFibHkgdHJ1bmNhdGVkIHBhZ2UKKyAqIC0gY2hlY2sgdG8gc2VlIGlmIHRoZSBwYWdlIGlzIHN0aWxsIHJlbGV2YW50IGFuZCByZWlzc3VlIHRoZSByZWFkIGlmCisgKiAgIHBvc3NpYmxlCisgKiAtIHJldHVybiAtRUlPIG9uIGVycm9yLCAtRU5PREFUQSBpZiB0aGUgcGFnZSBpcyBnb25lLCAtRUlOUFJPR1JFU1MgaWYgd2UKKyAqICAgbXVzdCB3YWl0IGFnYWluIGFuZCAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX3JlYWRfcmVpc3N1ZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVmaWxlc19vbmVfcmVhZCAqbW9uaXRvcikKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYm1hcHBpbmcgPSBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBwYWdlICpiYWNrcGFnZSA9IG1vbml0b3ItPmJhY2tfcGFnZSwgKmJhY2twYWdlMjsKKwlpbnQgcmV0OworCisJa2VudGVyKCJ7aW5vPSVseH0seyVseCwlbHh9IiwKKwkgICAgICAgb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfaW5vLAorCSAgICAgICBiYWNrcGFnZS0+aW5kZXgsIGJhY2twYWdlLT5mbGFncyk7CisKKwkvKiBza2lwIGlmIHRoZSBwYWdlIHdhcyB0cnVuY2F0ZWQgYXdheSBjb21wbGV0ZWx5ICovCisJaWYgKGJhY2twYWdlLT5tYXBwaW5nICE9IGJtYXBwaW5nKSB7CisJCWtsZWF2ZSgiID0gLUVOT0RBVEEgW21hcHBpbmddIik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwliYWNrcGFnZTIgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBiYWNrcGFnZS0+aW5kZXgpOworCWlmICghYmFja3BhZ2UyKSB7CisJCWtsZWF2ZSgiID0gLUVOT0RBVEEgW2dvbmVdIik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlpZiAoYmFja3BhZ2UgIT0gYmFja3BhZ2UyKSB7CisJCXB1dF9wYWdlKGJhY2twYWdlMik7CisJCWtsZWF2ZSgiID0gLUVOT0RBVEEgW2RpZmZlcmVudF0iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCS8qIHRoZSBwYWdlIGlzIHN0aWxsIHRoZXJlIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSByZWYgb24gaXQsIHNvIHdlIGRvbid0CisJICogbmVlZCBhIHNlY29uZCAqLworCXB1dF9wYWdlKGJhY2twYWdlMik7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9uaXRvci0+b3BfbGluayk7CisJYWRkX3BhZ2Vfd2FpdF9xdWV1ZShiYWNrcGFnZSwgJm1vbml0b3ItPm1vbml0b3IpOworCisJaWYgKHRyeWxvY2tfcGFnZShiYWNrcGFnZSkpIHsKKwkJcmV0ID0gLUVJTzsKKwkJaWYgKFBhZ2VFcnJvcihiYWNrcGFnZSkpCisJCQlnb3RvIHVubG9ja19kaXNjYXJkOworCQlyZXQgPSAwOworCQlpZiAoUGFnZVVwdG9kYXRlKGJhY2twYWdlKSkKKwkJCWdvdG8gdW5sb2NrX2Rpc2NhcmQ7CisKKwkJa2RlYnVnKCJyZWlzc3VlIHJlYWQiKTsKKwkJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byB1bmxvY2tfZGlzY2FyZDsKKwl9CisKKwkvKiBidXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiByZWFkIGJlZm9yZSB0aGUgbW9uaXRvciB3YXMgaW5zdGFsbGVkLCBzbworCSAqIHRoZSBtb25pdG9yIG1heSBtaXNzIHRoZSBldmVudCAtIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2UgZG8gZ2V0CisJICogb25lIGluIHN1Y2ggYSBjYXNlICovCisJaWYgKHRyeWxvY2tfcGFnZShiYWNrcGFnZSkpIHsKKwkJX2RlYnVnKCJqdW1wc3RhcnQgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCX0KKworCS8qIGl0J2xsIHJlYXBwZWFyIG9uIHRoZSB0b2RvIGxpc3QgKi8KKwlrbGVhdmUoIiA9IC1FSU5QUk9HUkVTUyIpOworCXJldHVybiAtRUlOUFJPR1JFU1M7CisKK3VubG9ja19kaXNjYXJkOgorCXVubG9ja19wYWdlKGJhY2twYWdlKTsKKwlzcGluX2xvY2tfaXJxKCZvYmplY3QtPndvcmtfbG9jayk7CisJbGlzdF9kZWwoJm1vbml0b3ItPm9wX2xpbmspOworCXNwaW5fdW5sb2NrX2lycSgmb2JqZWN0LT53b3JrX2xvY2spOworCWtsZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBjb3B5IGRhdGEgZnJvbSBiYWNraW5nIHBhZ2VzIHRvIG5ldGZzIHBhZ2VzIHRvIGNvbXBsZXRlIGEgcmVhZCBvcGVyYXRpb24KICAqIC0gZHJpdmVuIGJ5IEZTLUNhY2hlJ3MgdGhyZWFkIHBvb2wKICAqLwpAQCAtOTIsMjAgKzE3MywyNiBAQAogCiAJCV9kZWJ1ZygiLSBjb3B5IHslbHV9IiwgbW9uaXRvci0+YmFja19wYWdlLT5pbmRleCk7CiAKLQkJZXJyb3IgPSAtRUlPOworCXJlY2hlY2s6CiAJCWlmIChQYWdlVXB0b2RhdGUobW9uaXRvci0+YmFja19wYWdlKSkgewogCQkJY29weV9oaWdocGFnZShtb25pdG9yLT5uZXRmc19wYWdlLCBtb25pdG9yLT5iYWNrX3BhZ2UpOwogCiAJCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgbW9uaXRvci0+bmV0ZnNfcGFnZSk7CiAJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG1vbml0b3ItPm9wLCAmcGFnZXZlYyk7CiAJCQllcnJvciA9IDA7Ci0JCX0KLQotCQlpZiAoZXJyb3IpCisJCX0gZWxzZSBpZiAoIVBhZ2VFcnJvcihtb25pdG9yLT5iYWNrX3BhZ2UpKSB7CisJCQkvKiB0aGUgcGFnZSBoYXMgcHJvYmFibHkgYmVlbiB0cnVuY2F0ZWQgKi8KKwkJCWVycm9yID0gY2FjaGVmaWxlc19yZWFkX3JlaXNzdWUob2JqZWN0LCBtb25pdG9yKTsKKwkJCWlmIChlcnJvciA9PSAtRUlOUFJPR1JFU1MpCisJCQkJZ290byBuZXh0OworCQkJZ290byByZWNoZWNrOworCQl9IGVsc2UgewogCQkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCiAJCQkJb2JqZWN0LAogCQkJCSJSZWFkcGFnZSBmYWlsZWQgb24gYmFja2luZyBmaWxlICVseCIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpIG1vbml0b3ItPmJhY2tfcGFnZS0+ZmxhZ3MpOworCQkJZXJyb3IgPSAtRUlPOworCQl9CiAKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPmJhY2tfcGFnZSk7CiAKQEAgLTExNCw2ICsyMDEsNyBAQAogCQlmc2NhY2hlX3B1dF9yZXRyaWV2YWwob3ApOwogCQlrZnJlZShtb25pdG9yKTsKIAorCW5leHQ6CiAJCS8qIGxldCB0aGUgdGhyZWFkIHBvb2wgaGF2ZSBzb21lIGFpciBvY2Nhc2lvbmFsbHkgKi8KIAkJbWF4LS07CiAJCWlmIChtYXggPCAwIHx8IG5lZWRfcmVzY2hlZCgpKSB7CkBAIC0zMzMsNyArNDIxLDggQEAKIAogCXNoaWZ0ID0gUEFHRV9TSElGVCAtIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCi0Jb3AtPm9wLmZsYWdzID0gRlNDQUNIRV9PUF9GQVNUOworCW9wLT5vcC5mbGFncyAmPSBGU0NBQ0hFX09QX0tFRVBfRkxBR1M7CisJb3AtPm9wLmZsYWdzIHw9IEZTQ0FDSEVfT1BfRkFTVDsKIAlvcC0+b3AucHJvY2Vzc29yID0gY2FjaGVmaWxlc19yZWFkX2NvcGllcjsKIAogCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CkBAIC02MzksNyArNzI4LDggQEAKIAogCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CiAKLQlvcC0+b3AuZmxhZ3MgPSBGU0NBQ0hFX09QX0ZBU1Q7CisJb3AtPm9wLmZsYWdzICY9IEZTQ0FDSEVfT1BfS0VFUF9GTEFHUzsKKwlvcC0+b3AuZmxhZ3MgfD0gRlNDQUNIRV9PUF9GQVNUOwogCW9wLT5vcC5wcm9jZXNzb3IgPSBjYWNoZWZpbGVzX3JlYWRfY29waWVyOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJhY2twYWdlcyk7CkBAIC04MDEsNyArODkxLDggQEAKIAlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlsb2ZmX3QgcG9zOworCWxvZmZfdCBwb3MsIGVvZjsKKwlzaXplX3QgbGVuOwogCXZvaWQgKmRhdGE7CiAJaW50IHJldDsKIApAQCAtODMyLDE4ICs5MjMsMzMgQEAKIAlpZiAoSVNfRVJSKGZpbGUpKSB7CiAJCXJldCA9IFBUUl9FUlIoZmlsZSk7CiAJfSBlbHNlIHsKKwkJaW1hX2NvdW50c19nZXQoZmlsZSk7CiAJCXJldCA9IC1FSU87CiAJCWlmIChmaWxlLT5mX29wLT53cml0ZSkgewogCQkJcG9zID0gKGxvZmZfdCkgcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVDsKKworCQkJLyogd2UgbXVzdG4ndCB3cml0ZSBtb3JlIGRhdGEgdGhhbiB3ZSBoYXZlLCBzbyB3ZSBoYXZlCisJCQkgKiB0byBiZXdhcmUgb2YgYSBwYXJ0aWFsIHBhZ2UgYXQgRU9GICovCisJCQllb2YgPSBvYmplY3QtPmZzY2FjaGUuc3RvcmVfbGltaXRfbDsKKwkJCWxlbiA9IFBBR0VfU0laRTsKKwkJCWlmIChlb2YgJiB+UEFHRV9NQVNLKSB7CisJCQkJQVNTRVJUQ01QKHBvcywgPCwgZW9mKTsKKwkJCQlpZiAoZW9mIC0gcG9zIDwgUEFHRV9TSVpFKSB7CisJCQkJCV9kZWJ1ZygiY3V0IHNob3J0ICVsbHggdG8gJWxseCIsCisJCQkJCSAgICAgICBwb3MsIGVvZik7CisJCQkJCWxlbiA9IGVvZiAtIHBvczsKKwkJCQkJQVNTRVJUQ01QKHBvcyArIGxlbiwgPT0sIGVvZik7CisJCQkJfQorCQkJfQorCiAJCQlkYXRhID0ga21hcChwYWdlKTsKIAkJCW9sZF9mcyA9IGdldF9mcygpOwogCQkJc2V0X2ZzKEtFUk5FTF9EUyk7CiAJCQlyZXQgPSBmaWxlLT5mX29wLT53cml0ZSgKLQkJCQlmaWxlLCAoY29uc3Qgdm9pZCBfX3VzZXIgKikgZGF0YSwgUEFHRV9TSVpFLAotCQkJCSZwb3MpOworCQkJCWZpbGUsIChjb25zdCB2b2lkIF9fdXNlciAqKSBkYXRhLCBsZW4sICZwb3MpOwogCQkJc2V0X2ZzKG9sZF9mcyk7CiAJCQlrdW5tYXAocGFnZSk7Ci0JCQlpZiAocmV0ICE9IFBBR0VfU0laRSkKKwkJCWlmIChyZXQgIT0gbGVuKQogCQkJCXJldCA9IC1FSU87CiAJCX0KIAkJZnB1dChmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCAxNDU1NDBhLi4wOTRlYTY1IDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDMgKzEsMTIgQEAKK1ZlcnNpb24gMS42MQorLS0tLS0tLS0tLS0tCitGaXggYXBwZW5kIHByb2JsZW0gdG8gU2FtYmEgc2VydmVycyAoZmlsZXMgb3BlbmVkIHdpdGggT19BUFBFTkQgY291bGQKK2hhdmUgZHVwbGljYXRlZCBkYXRhKS4gRml4IG9vcHMgaW4gY2lmc19sb29rdXAuIFdvcmthcm91bmQgcHJvYmxlbQorbW91bnRpbmcgdG8gT1MvNDAwIE5ldHNlcnZlLiBGaXggb29wcyBpbiBjaWZzX2dldF90Y3Bfc2Vzc2lvbi4KK0Rpc2FibGUgdXNlIG9mIHNlcnZlciBpbm9kZSBudW1iZXJzIHdoZW4gc2VydmVyIG9ubHkKK3BhcnRpYWxseSBzdXBwb3J0cyB0aGVtIChlLmcuIGZvciBvbmUgc2VydmVyIHF1ZXJ5aW5nIGlub2RlIG51bWJlcnMgb24KK0ZpbmRGaXJzdCBmYWlscyBidXQgUVBhdGhJbmZvIHF1ZXJpZXMgd29ya3MpLgorCiBWZXJzaW9uIDEuNjAKIC0tLS0tLS0tLS0tLS0KIEZpeCBtZW1vcnkgbGVhayBpbiByZWNvbm5lY3QuICBGaXggb29wcyBpbiBERlMgbW91bnQgZXJyb3IgcGF0aC4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDlhNWU0ZjUuLjI5ZjFkYTcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU7CiAjZW5kaWYKLQlyYyA9IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKCk7CisJcmMgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3Jlc29sdmVyX2tleTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggNjkyOGMyNC4uNTY0NjcyNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC0zODgsNCArMzg4LDUgQEAKIAkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCBfX3U2NCAqcEV4dEF0dHJCaXRzLCBfX3U2NCAqcE1hc2spOworZXh0ZXJuIHZvaWQgY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDMwMDNlMC4uNjNlYTgzZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1NzcsNyArMTU3Nyw4IEBACiAKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKLQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOworCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCisJCQlrZnJlZSh0Y3Bfc2VzLT5ob3N0bmFtZSk7CiAJCWlmICh0Y3Bfc2VzLT5zc29ja2V0KQogCQkJc29ja19yZWxlYXNlKHRjcF9zZXMtPnNzb2NrZXQpOwogCQlrZnJlZSh0Y3Bfc2VzKTsKQEAgLTIyMTksMTYgKzIyMjAsOCBAQAogCQkgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBjb25zdCBjaGFyICpmdWxsX3BhdGgpCiB7CiAJaW50IHJjOwotCV9fdTY0IGlub2RlX251bTsKIAlGSUxFX0FMTF9JTkZPICpwZmlsZV9pbmZvOwogCi0JcmMgPSBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZpbm9kZV9udW0sCi0JCQkJICAgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCSAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKLQkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQlpZiAocmMgIT0gLUVPUE5PVFNVUFApCi0JCXJldHVybiByYzsKLQogCXBmaWxlX2luZm8gPSBrbWFsbG9jKHNpemVvZihGSUxFX0FMTF9JTkZPKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBmaWxlX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA2MjdhNjBhLi4xZjQyZjc3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTIxNCw4ICsyMTQsNiBAQAogCQlwb3NpeF9mbGFncyB8PSBTTUJfT19FWENMOwogCWlmIChvZmxhZ3MgJiBPX1RSVU5DKQogCQlwb3NpeF9mbGFncyB8PSBTTUJfT19UUlVOQzsKLQlpZiAob2ZsYWdzICYgT19BUFBFTkQpCi0JCXBvc2l4X2ZsYWdzIHw9IFNNQl9PX0FQUEVORDsKIAlpZiAob2ZsYWdzICYgT19TWU5DKQogCQlwb3NpeF9mbGFncyB8PSBTTUJfT19TWU5DOwogCWlmIChvZmxhZ3MgJiBPX0RJUkVDVE9SWSkKQEAgLTY0Myw5ICs2NDEsOSBAQAogCSAqIE9fRVhDTDogb3B0aW1pemUgYXdheSB0aGUgbG9va3VwLCBidXQgZG9uJ3QgaGFzaCB0aGUgZGVudHJ5LiBMZXQKIAkgKiB0aGUgVkZTIGhhbmRsZSB0aGUgY3JlYXRlLgogCSAqLwotCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfRVhDTCkgeworCWlmIChuZCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX0VYQ0wpKSB7CiAJCWRfaW5zdGFudGlhdGUoZGlyZW50cnksIE5VTEwpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogY2FuIG5vdCBncmFiIHRoZSByZW5hbWUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKQEAgLTY3NSw3ICs2NzMsNyBAQAogCSAqIHJlZHVjdGlvbiBpbiBuZXR3b3JrIHRyYWZmaWMgaW4gdGhlIG90aGVyIHBhdGhzLgogCSAqLwogCWlmIChwVGNvbi0+dW5peF9leHQpIHsKLQkJaWYgKCEobmQtPmZsYWdzICYgKExPT0tVUF9QQVJFTlQgfCBMT09LVVBfRElSRUNUT1JZKSkgJiYKKwkJaWYgKG5kICYmICEobmQtPmZsYWdzICYgKExPT0tVUF9QQVJFTlQgfCBMT09LVVBfRElSRUNUT1JZKSkgJiYKIAkJICAgICAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pICYmICFwVGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gJiYKIAkJICAgICAobmQtPmludGVudC5vcGVuLmZsYWdzICYgT19DUkVBVCkpIHsKIAkJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJm5ld0lub2RlLCBuZC0+cGF0aC5tbnQsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggNWUyNDkyNS4uY2FiYWJkOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNTEyLDEzICs1MTIsMTAgQEAKIAkJCQkJY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCQlpZiAocmMxKSB7CisJCQlpZiAocmMxIHx8ICFmYXR0ci5jZl91bmlxdWVpZCkgewogCQkJCWNGWUkoMSwgKCJHZXRTcnZJbm9kZU51bSByYyAlZCIsIHJjMSkpOwogCQkJCWZhdHRyLmNmX3VuaXF1ZWlkID0gaXVuaXF1ZShzYiwgUk9PVF9JKTsKLQkJCQkvKiBkaXNhYmxlIHNlcnZlcmlubyBpZiBjYWxsIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCQlpZiAocmMxID09IC1FSU5WQUwpCi0JCQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICY9Ci0JCQkJCQkJfkNJRlNfTU9VTlRfU0VSVkVSX0lOVU07CisJCQkJY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oY2lmc19zYik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDAyNDFiMjUuLmQyN2Q0ZWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC03MTUsMyArNzE1LDE3IEBACiBjdG9VQ1Nfb3V0OgogCXJldHVybiBpOwogfQorCit2b2lkCitjaWZzX2F1dG9kaXNhYmxlX3NlcnZlcmlubyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQoreworCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pIHsKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJj0gfkNJRlNfTU9VTlRfU0VSVkVSX0lOVU07CisJCWNFUlJPUigxLCAoIkF1dG9kaXNhYmxpbmcgdGhlIHVzZSBvZiBzZXJ2ZXIgaW5vZGUgbnVtYmVycyBvbiAiCisJCQkgICAiJXMuIFRoaXMgc2VydmVyIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHRoZW0gIgorCQkJICAgInByb3Blcmx5LiBIYXJkbGlua3Mgd2lsbCBub3QgYmUgcmVjb2duaXplZCBvbiB0aGlzICIKKwkJCSAgICJtb3VudC4gQ29uc2lkZXIgbW91bnRpbmcgd2l0aCB0aGUgXCJub3NlcnZlcmlub1wiICIKKwkJCSAgICJvcHRpb24gdG8gc2lsZW5jZSB0aGlzIG1lc3NhZ2UuIiwKKwkJCSAgIGNpZnNfc2ItPnRjb24tPnRyZWVOYW1lKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCAxZjA5OGNhLi5mODQwNjJmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzI3LDExICs3MjcsMTIgQEAKIAkJY2lmc19kaXJfaW5mb190b19mYXR0cigmZmF0dHIsIChGSUxFX0RJUkVDVE9SWV9JTkZPICopCiAJCQkJCXBmaW5kRW50cnksIGNpZnNfc2IpOwogCi0JLyogRklYTUU6IG1ha2UgX3RvX2ZhdHRyIGZ1bmN0aW9ucyBmaWxsIHRoaXMgb3V0ICovCi0JaWYgKHBDaWZzRi0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX0lEX0ZVTExfRElSX0lORk8pCisJaWYgKGludW0gJiYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkpIHsKIAkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpbnVtOwotCWVsc2UKKwl9IGVsc2UgewogCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CisJCWNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKGNpZnNfc2IpOworCX0KIAogCWlubyA9IGNpZnNfdW5pcXVlaWRfdG9faW5vX3QoZmF0dHIuY2ZfdW5pcXVlaWQpOwogCXRtcF9kZW50cnkgPSBjaWZzX3JlYWRkaXJfbG9va3VwKGZpbGUtPmZfZGVudHJ5LCAmcXN0cmluZywgJmZhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggZDU3NmI1NS4uNmMxOTA0MCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTE1MzIsNiArMTUzMiw4IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0OwogCisJY3VycmVudC0+c3RhY2tfc3RhcnQgPSBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2s7CisKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCiAJY3VycmVudC0+ZnMtPmluX2V4ZWMgPSAwOwogCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGY5MWZkNTEuLmQ4NGU3MDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCiBzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IHNwYWNlX3Jlc3YJX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CiAKIAlpZiAoY29weV9pbl91c2VyKCZwLT5sX3R5cGUsCSZwMzItPmxfdHlwZSwJc2l6ZW9mKHMxNikpIHx8CkBAIC0yODAyLDcgKzI4MDIsNyBAQAogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CiAJY2FzZSBGU19JT0NfUkVTVlNQNjQ6Ci0JCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJZXJyb3IgPSBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBkNDliZTZiLi5jMGM2MzZlIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgpAQCAtNjI0LDEwICs2MjMsOCBAQAogCS8qIE1vdmUgc3RhY2sgcGFnZXMgZG93biBpbiBtZW1vcnkuICovCiAJaWYgKHN0YWNrX3NoaWZ0KSB7CiAJCXJldCA9IHNoaWZ0X2FyZ19wYWdlcyh2bWEsIHN0YWNrX3NoaWZ0KTsKLQkJaWYgKHJldCkgewotCQkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKQEAgLTY0MSw3ICs2MzgsNyBAQAogCiBvdXRfdW5sb2NrOgogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7CiAKQEAgLTEyMTEsOSArMTIwOCw2IEBACiAJcmV0dmFsID0gc2VjdXJpdHlfYnBybV9jaGVjayhicHJtKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwotCXJldHZhbCA9IGltYV9icHJtX2NoZWNrKGJwcm0pOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7CiAKIAkvKiBrZXJuZWwgbW9kdWxlIGxvYWRlciBmaXh1cCAqLwogCS8qIHNvIHdlIGRvbid0IHRyeSB0byBsb2FkIHJ1biBtb2Rwcm9iZSBpbiBrZXJuZWwgc3BhY2UuICovCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZzeW5jLmMgYi9mcy9leHQzL2ZzeW5jLmMKaW5kZXggNDUxZDE2Ni4uODIwOWYyNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9mc3luYy5jCisrKyBiL2ZzL2V4dDMvZnN5bmMuYwpAQCAtNDYsMTkgKzQ2LDIxIEBACiBpbnQgZXh0M19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsOwogCWludCByZXQgPSAwOworCXRpZF90IGNvbW1pdF90aWQ7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAwOwogCiAJSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgotCSAqIGRhdGE9d3JpdGViYWNrOgorCSAqIGRhdGE9d3JpdGViYWNrLG9yZGVyZWQ6CiAJICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS4KLQkgKiAgc3luY19pbm9kZSgpIHdpbGwgc3luYyB0aGUgbWV0YWRhdGEKLQkgKgotCSAqIGRhdGE9b3JkZXJlZDoKLQkgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpIHdpbGwgd3JpdGUgdGhlIGRhdGEgYW5kCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHdyaXRlIHRoZSBpbm9kZSBpZiBpdCBpcyBkaXJ0eS4gIFRoZW4gdGhlIGNhbGxlcidzCi0JICogIGZpbGVtYXBfZmRhdGF3YWl0KCkgd2lsbCB3YWl0IG9uIHRoZSBwYWdlcy4KKwkgKiAgTWV0YWRhdGEgaXMgaW4gdGhlIGpvdXJuYWwsIHdlIHdhaXQgZm9yIGEgcHJvcGVyIHRyYW5zYWN0aW9uCisJICogIHRvIGNvbW1pdCBoZXJlLgogCSAqCiAJICogZGF0YT1qb3VybmFsOgogCSAqICBmaWxlbWFwX2ZkYXRhd3JpdGUgd29uJ3QgZG8gYW55dGhpbmcgKHRoZSBidWZmZXJzIGFyZSBjbGVhbikuCkBAIC03MywyMiArNzUsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRhdGFzeW5jICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBmbHVzaDsKKwlpZiAoZGF0YXN5bmMpCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfZGF0YXN5bmNfdGlkKTsKKwllbHNlCisJCWNvbW1pdF90aWQgPSBhdG9taWNfcmVhZCgmZWktPmlfc3luY190aWQpOwogCi0JLyoKLQkgKiBUaGUgVkZTIGhhcyB3cml0dGVuIHRoZSBmaWxlIGRhdGEuICBJZiB0aGUgaW5vZGUgaXMgdW5hbHRlcmVkCi0JICogdGhlbiB3ZSBuZWVkIG5vdCBzdGFydCBhIGNvbW1pdC4KLQkgKi8KLQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWV9TWU5DfElfRElSVFlfREFUQVNZTkMpKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCQkubnJfdG9fd3JpdGUgPSAwLCAvKiBzeXNfZnN5bmMgZGlkIHRoaXMgKi8KLQkJfTsKLQkJcmV0ID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJaWYgKGxvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCkpIHsKKwkJbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpOwogCQlnb3RvIG91dDsKIAl9Ci1mbHVzaDoKKwogCS8qCiAJICogSW4gY2FzZSB3ZSBkaWRuJ3QgY29tbWl0IGEgdHJhbnNhY3Rpb24sIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBkaXNrIGNhY2hlcyBtYW51YWxseSBzbyB0aGF0IGRhdGEgcmVhbGx5IGlzIG9uIHBlcnNpc3RlbnQKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhY2YxYjE0Li4zNTRlZDNiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC02OTksOCArNjk5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0M19ibG9ja19hbGxvY19pbmZvICpibG9ja19pOwogCWV4dDNfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAotCWJsb2NrX2kgPSBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CisJYmxvY2tfaSA9IGVpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAJLyoKIAkgKiBJZiB3ZSdyZSBzcGxpY2luZyBpbnRvIGEgW3RkXWluZGlyZWN0IGJsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQogCSAqIGlub2RlKSB0aGVuIHdlIG5lZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgW3RkXWluZGlyZWN0IGJsb2NrCkBAIC03NDEsNiArNzQyLDggQEAKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJLyogZXh0M19tYXJrX2lub2RlX2RpcnR5IGFscmVhZHkgdXBkYXRlZCBpX3N5bmNfdGlkICovCisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIAogCS8qIGhhZCB3ZSBzcGxpY2VkIGl0IG9udG8gaW5kaXJlY3QgYmxvY2s/ICovCiAJaWYgKHdoZXJlLT5iaCkgewpAQCAtMTczNSw2ICsxNzM4LDcgQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgb3JwaGFuID0gMDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJaW50IHJldHJpZXMgPSAwOwogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCWxvZmZfdCBmaW5hbF9zaXplID0gb2Zmc2V0ICsgY291bnQ7CkBAIC0xNzU3LDkgKzE3NjEsMTIgQEAKIAkJfQogCX0KIAorcmV0cnk6CiAJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDNfZ2V0X2Jsb2NrLCBOVUxMKTsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKKwkJZ290byByZXRyeTsKIAogCWlmIChvcnBoYW4pIHsKIAkJaW50IGVycjsKQEAgLTI3NTAsNiArMjc1Nyw4IEBACiAJc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqZWk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CisJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJbG9uZyByZXQ7CiAJaW50IGJsb2NrOwogCkBAIC0yODI3LDYgKzI4MzYsMzAgQEAKIAkJZWktPmlfZGF0YVtibG9ja10gPSByYXdfaW5vZGUtPmlfYmxvY2tbYmxvY2tdOwogCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOwogCisJLyoKKwkgKiBTZXQgdHJhbnNhY3Rpb24gaWQncyBvZiB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGNvbW1pdHRlZAorCSAqIHRvIGZpbmlzaCBmW2RhdGFdc3luYy4gV2Ugc2V0IHRoZW0gdG8gY3VycmVudGx5IHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBhcyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBpbm9kZSBvciBzb21lIG9mIGl0cyBtZXRhZGF0YSBpc24ndAorCSAqIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIC0gdGhlIGlub2RlIGNvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYW5kCisJICogbm93IGl0IGlzIHJlcmVhZCBmcm9tIGRpc2suCisJICovCisJaWYgKGpvdXJuYWwpIHsKKwkJdGlkX3QgdGlkOworCisJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikKKwkJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOworCQllbHNlCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKwkJaWYgKHRyYW5zYWN0aW9uKQorCQkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQllbHNlCisJCQl0aWQgPSBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZTsKKwkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCB0aWQpOworCQlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIHRpZCk7CisJfQorCiAJaWYgKGlub2RlLT5pX2lubyA+PSBFWFQzX0ZJUlNUX0lOTyhpbm9kZS0+aV9zYikgKyAxICYmCiAJICAgIEVYVDNfSU5PREVfU0laRShpbm9kZS0+aV9zYikgPiBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKIAkJLyoKQEAgLTMwMTEsNiArMzA0NCw3IEBACiAJCWVyciA9IHJjOwogCWVpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKIAorCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKTsKIG91dF9icmVsc2U6CiAJYnJlbHNlIChiaCk7CiAJZXh0M19zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIGVycik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggN2E1MjBhOC4uNDI3NDk2YyAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNDY2LDYgKzQ2Niw4IEBACiAJCXJldHVybiBOVUxMOwogCWVpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOwogCWVpLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlhdG9taWNfc2V0KCZlaS0+aV9kYXRhc3luY190aWQsIDApOworCWF0b21pY19zZXQoJmVpLT5pX3N5bmNfdGlkLCAwKTsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggOTg0Y2EwYy4uODgyNTUxNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTMyMiw2ICszMjIsNyBAQAogI2RlZmluZSBFWFQ0X1NUQVRFX05PX0VYUEFORAkJMHgwMDAwMDAwOCAvKiBObyBzcGFjZSBmb3IgZXhwYW5zaW9uICovCiAjZGVmaW5lIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UJMHgwMDAwMDAxMCAvKiBBbGxvYyBEQSBibGtzIG9uIGNsb3NlICovCiAjZGVmaW5lIEVYVDRfU1RBVEVfRVhUX01JR1JBVEUJCTB4MDAwMDAwMjAgLyogSW5vZGUgaXMgbWlncmF0aW5nICovCisjZGVmaW5lIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTgkweDAwMDAwMDQwIC8qIG5lZWQgY29udmVydCBvbiBkaW8gZG9uZSovCiAKIC8qIFVzZWQgdG8gcGFzcyBncm91cCBkZXNjcmlwdG9yIGRhdGEgd2hlbiBvbmxpbmUgcmVzaXplIGlzIGRvbmUgKi8KIHN0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCB7CkBAIC03NDMsNiArNzQ0LDcgQEAKICNkZWZpbmUgRVhUNF9NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLworI2RlZmluZSBFWFQ0X01PVU5UX0pPVVJOQUxfQ0hFQ0tTVU0JMHg4MDAwMDAgLyogSm91cm5hbCBjaGVja3N1bXMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0FTWU5DX0NPTU1JVAkweDEwMDAwMDAgLyogSm91cm5hbCBBc3luYyBDb21taXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9JX1ZFUlNJT04gICAgICAgICAgICAweDIwMDAwMDAgLyogaV92ZXJzaW9uIHN1cHBvcnQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9ERUxBTExPQwkJMHg4MDAwMDAwIC8qIERlbGFsbG9jIHN1cHBvcnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggMTA1MzllMy4uNzE1MjY0YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTI4MDcsNiArMjgwNyw4IEBACiAgKiBpbnRvIHRocmVlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50KGF0IG1vc3QpLiBBZnRlciBJTyBjb21wbGV0ZSwgdGhlIHBhcnQKICAqIGJlaW5nIGZpbGxlZCB3aWxsIGJlIGNvbnZlcnQgdG8gaW5pdGlhbGl6ZWQgYnkgdGhlIGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgogICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdW5pbml0aWFsaXplZCBleHRlbnQgdG8gYmUgd3JpdHRlbiBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTI4MjQsNyArMjgyNiw2IEBACiAJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgZWVfbGVuLCBkZXB0aDsKIAlleHQ0X2ZzYmxrX3QgbmV3YmxvY2s7CiAJaW50IGVyciA9IDA7Ci0JaW50IHJldCA9IDA7CiAKIAlleHRfZGVidWcoImV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHM6IGlub2RlICVsdSwiCiAJCSAgImlibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1XG4iLCBpbm9kZS0+aV9pbm8sCkBAIC0yODQyLDEyICsyODQzLDEyIEBACiAJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZvcmlnX2V4LCBleHRfcGJsb2NrKGV4KSk7CiAKIAkvKgotIAkgKiBpZiB0aGUgZW50aXJlIHVuaW50aWFsaXplZCBleHRlbnQgbGVuZ3RoIGxlc3MgdGhhbgotIAkgKiB0aGUgc2l6ZSBvZiBleHRlbnQgdG8gd3JpdGUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3BsaXQKLSAJICogdW5pbml0aWFsaXplZCBleHRlbnQKKyAJICogSWYgdGhlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGJlZ2lucyBhdCB0aGUgc2FtZSBsb2dpY2FsCisgCSAqIGJsb2NrIHdoZXJlIHRoZSB3cml0ZSBiZWdpbnMsIGFuZCB0aGUgd3JpdGUgY29tcGxldGVseQorIAkgKiBjb3ZlcnMgdGhlIGV4dGVudCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHNwbGl0IGl0LgogIAkgKi8KLSAJaWYgKGFsbG9jYXRlZCA8PSBtYXhfYmxvY2tzKQotCQlyZXR1cm4gcmV0OworCWlmICgoaWJsb2NrID09IGVlX2Jsb2NrKSAmJiAoYWxsb2NhdGVkIDw9IG1heF9ibG9ja3MpKQorCQlyZXR1cm4gYWxsb2NhdGVkOwogCiAJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOwogCWlmIChlcnIpCkBAIC0zMDQ4LDEyICszMDQ5LDE4IEBACiAJCXJldCA9IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAogCQkJCQkJaW5vZGUsIHBhdGgsIGlibG9jaywKIAkJCQkJCW1heF9ibG9ja3MsIGZsYWdzKTsKLQkJLyogZmxhZyB0aGUgaW9fZW5kIHN0cnVjdCB0aGF0IHdlIG5lZWQgY29udmVydCB3aGVuIElPIGRvbmUgKi8KKwkJLyoKKwkJICogRmxhZyB0aGUgaW5vZGUobm9uIGFpbyBjYXNlKSBvciBlbmRfaW8gc3RydWN0IChhaW8gY2FzZSkKKwkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCisJCSAqIGNvbXBsZXRlZAorCQkgKi8KIAkJaWYgKGlvKQogCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJZWxzZQorCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47CiAJCWdvdG8gb3V0OwogCX0KLQkvKiBESU8gZW5kX2lvIGNvbXBsZXRlLCBjb252ZXJ0IHRoZSBmaWxsZWQgZXh0ZW50IHRvIHdyaXR0ZW4gKi8KKwkvKiBhc3luYyBESU8gZW5kX2lvIGNvbXBsZXRlLCBjb252ZXJ0IHRoZSBmaWxsZWQgZXh0ZW50IHRvIHdyaXR0ZW4gKi8KIAlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVCkgewogCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZSwgaW5vZGUsCiAJCQkJCQkJcGF0aCk7CkBAIC0zMjk1LDEwICszMzAyLDE2IEBACiAJCSAqIFRvIGF2b2lkIHVuZWNlc3NhcnkgY29udmVydGlvbiBmb3IgZXZlcnkgYWlvIGRpbyByZXdyaXRlCiAJCSAqIHRvIHRoZSBtaWQgb2YgZmlsZSwgaGVyZSB3ZSBmbGFnIHRoZSBJTyB0aGF0IGlzIHJlYWxseQogCQkgKiBuZWVkIHRoZSBjb252ZXJ0aW9uLgotCQkgKgorCQkgKiBGb3Igbm9uIGFzeWNuIGRpcmVjdCBJTyBjYXNlLCBmbGFnIHRoZSBpbm9kZSBzdGF0ZQorCQkgKiB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSBjb252ZXJ0aW9uIHdoZW4gSU8gaXMgZG9uZS4KIAkJICovCi0JCWlmIChpbyAmJiBmbGFncyA9PSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCi0JCQlpby0+ZmxhZyA9IERJT19BSU9fVU5XUklUVEVOOworCQlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCQlpZiAoaW8pCisJCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCWVsc2UKKwkJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9CisJCQkJCUVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjs7CisJCX0KIAl9CiAJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIGZsYWdzKTsKIAlpZiAoZXJyKSB7CkBAIC0zNTE5LDYgKzM1MzIsNyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdCBJTyBlbmQgaW8gY2FsbCBiYWNrCiAgKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCQkJICAgIGxvZmZfdCBsZW4pCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggNWM1YmM1ZC4uMmM4Y2FhNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAgKiBzbyBiZWZvcmUgd2UgY2FsbCBoZXJlIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjb25zaXN0ZW50bHkgZGlydGllZCBhZ2FpbnN0CiAgKiB0aGlzIHRyYW5zYWN0aW9uLgogICovCi0gaW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSBpbnQgbmJsb2NrcykKIHsKIAlpbnQgcmV0OwpAQCAtMjA5LDYgKzIwOSw3IEBACiAJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCXJldCA9IGV4dDRfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOwogCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOworCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQ0NSw4ICszNDQ2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBibG9ja3Mgd2UgbWFwIGZvciBkaXJlY3QgSU8gYXQgb25jZS4gKi8KLQogc3RhdGljIGludCBleHQ0X2dldF9ibG9ja19kaW9fd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKQEAgLTM2NTQsMTMgKzM2NTMsMTQgQEAKICAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAKKwkvKiBpZiBub3QgYXN5bmMgZGlyZWN0IElPIG9yIGRpbyB3aXRoIDAgYnl0ZXMgd3JpdGUsIGp1c3QgcmV0dXJuICovCisJaWYgKCFpb19lbmQgfHwgIXNpemUpCisJCXJldHVybjsKKwogCWV4dF9kZWJ1ZygiZXh0NF9lbmRfaW9fZGlvKCk6IGlvX2VuZCAweCVwIgogCQkgICJmb3IgaW5vZGUgJWx1LCBpb2NiIDB4JXAsIG9mZnNldCAlbGx1LCBzaXplICVsbHVcbiIsCiAgCQkgIGlvY2ItPnByaXZhdGUsIGlvX2VuZC0+aW5vZGUtPmlfaW5vLCBpb2NiLCBvZmZzZXQsCiAJCSAgc2l6ZSk7Ci0JLyogaWYgbm90IGFzeW5jIGRpcmVjdCBJTyBvciBkaW8gd2l0aCAwIGJ5dGVzIHdyaXRlLCBqdXN0IHJldHVybiAqLwotCWlmICghaW9fZW5kIHx8ICFzaXplKQotCQlyZXR1cm47CiAKIAkvKiBpZiBub3QgYWlvIGRpbyB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBqdXN0IGZyZWUgaW8gYW5kIHJldHVybiAqLwogCWlmIChpb19lbmQtPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pewpAQCAtMzc3MSwxMyArMzc3MSwxOSBAQAogCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiByZXQgPD0gMCAmJiBpb2NiLT5wcml2YXRlKSB7CiAJCQlleHQ0X2ZyZWVfaW9fZW5kKGlvY2ItPnByaXZhdGUpOwogCQkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Ci0JCX0gZWxzZSBpZiAocmV0ID4gMCkKKwkJfSBlbHNlIGlmIChyZXQgPiAwICYmIChFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYKKwkJCQkgICAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKSkgeworCQkJaW50IGVycjsKIAkJCS8qCiAJCQkgKiBmb3Igbm9uIEFJTyBjYXNlLCBzaW5jZSB0aGUgSU8gaXMgYWxyZWFkeQogCQkJICogY29tcGxldGVkLCB3ZSBjb3VsZCBkbyB0aGUgY29udmVydGlvbiByaWdodCBoZXJlCiAJCQkgKi8KLQkJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwKLQkJCQkJCQkJb2Zmc2V0LCByZXQpOworCQkJZXJyID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGlub2RlLAorCQkJCQkJCSAgICAgb2Zmc2V0LCByZXQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0ID0gZXJyOworCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOworCQl9CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggN2M4ZmU4MC4uNmQyYzFiOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMTUxOCwxMiArMTUxOCw4IEBACiAJCQlyZXR1cm4gcmV0dmFsOwogCiAJCWlmIChibG9ja3MgPT0gMSAmJiAhZHhfZmFsbGJhY2sgJiYKLQkJICAgIEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpIHsKLQkJCXJldHZhbCA9IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlLCBkZW50cnksIGlub2RlLCBiaCk7Ci0JCQlpZiAocmV0dmFsID09IC1FTk9TUEMpCi0JCQkJYnJlbHNlKGJoKTsKLQkJCXJldHVybiByZXR2YWw7Ci0JCX0KKwkJICAgIEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpCisJCQlyZXR1cm4gbWFrZV9pbmRleGVkX2RpcihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJYmggPSBleHQ0X2FwcGVuZChoYW5kbGUsIGRpciwgJmJsb2NrLCAmcmV0dmFsKTsKQEAgLTE1MzIsMTAgKzE1MjgsNyBAQAogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGJoLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gMDsKIAlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSwgYmxvY2tzaXplKTsKLQlyZXR2YWwgPSBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7Ci0JaWYgKHJldHZhbCA9PSAtRU5PU1BDKQotCQlicmVsc2UoYmgpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKIH0KIAogLyoKQEAgLTE2NjQsOCArMTY1Nyw3IEBACiAJaWYgKCFkZSkKIAkJZ290byBjbGVhbnVwOwogCWVyciA9IGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKLQlpZiAoZXJyICE9IC1FTk9TUEMpCi0JCWJoID0gTlVMTDsKKwliaCA9IE5VTEw7CiAJZ290byBjbGVhbnVwOwogCiBqb3VybmFsX2Vycm9yOgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDMxMjIxMWUuLmQ0Y2E5MmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDAsOSArMTMwMCwxMSBAQAogCQkJKmpvdXJuYWxfZGV2bnVtID0gb3B0aW9uOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2pvdXJuYWxfY2hlY2tzdW06Ci0JCQlicmVhazsJLyogS2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9DSEVDS1NVTSk7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfam91cm5hbF9hc3luY19jb21taXQ6CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEpPVVJOQUxfQVNZTkNfQ09NTUlUKTsKKwkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9DSEVDS1NVTSk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9sb2FkOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBOT0xPQUQpOwpAQCAtMjc1OSwxNCArMjc2MSwyMCBAQAogCQlnb3RvIGZhaWxlZF9tb3VudDQ7CiAJfQogCi0JamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKLQkJCQkgIEpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsIDApOwotCWlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9BU1lOQ19DT01NSVQpKQotCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLCAwLCAwLAorCWlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9BU1lOQ19DT01NSVQpKSB7CisJCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsCisJCQkJSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwKIAkJCQlKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKTsKLQllbHNlCisJfSBlbHNlIGlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9DSEVDS1NVTSkpIHsKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLCAwKTsKIAkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLCAwLCAwLAogCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOworCX0gZWxzZSB7CisJCWpiZDJfam91cm5hbF9jbGVhcl9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAorCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOworCX0KIAogCS8qIFdlIGhhdmUgbm93IHVwZGF0ZWQgdGhlIGpvdXJuYWwgaWYgcmVxdWlyZWQsIHNvIHdlIGNhbgogCSAqIHZhbGlkYXRlIHRoZSBkYXRhIGpvdXJuYWxpbmcgbW9kZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGZjMDg5ZjIuLjJjZjkzZWMgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCXR5cGUgPSBQSURUWVBFX1BJRDsKIAkJYnJlYWs7CiAKLQljYXNlIEZfT1dORVJfR0lEOgorCWNhc2UgRl9PV05FUl9QR1JQOgogCQl0eXBlID0gUElEVFlQRV9QR0lEOwogCQlicmVhazsKIApAQCAtMzIxLDcgKzMyMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQSURUWVBFX1BHSUQ6Ci0JCW93bmVyLnR5cGUgPSBGX09XTkVSX0dJRDsKKwkJb3duZXIudHlwZSA9IEZfT1dORVJfUEdSUDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDhlYjQ0MDQuLjRiZWY0YzAgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtMjgwLDcgKzI3OSw2IEBACiAJaWYgKGZpbGUtPmZfb3AgJiYgZmlsZS0+Zl9vcC0+cmVsZWFzZSkKIAkJZmlsZS0+Zl9vcC0+cmVsZWFzZShpbm9kZSwgZmlsZSk7CiAJc2VjdXJpdHlfZmlsZV9mcmVlKGZpbGUpOwotCWltYV9maWxlX2ZyZWUoZmlsZSk7CiAJaWYgKHVubGlrZWx5KFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfY2RldiAhPSBOVUxMKSkKIAkJY2Rldl9wdXQoaW5vZGUtPmlfY2Rldik7CiAJZm9wc19wdXQoZmlsZS0+Zl9vcCk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL0tjb25maWcgYi9mcy9mc2NhY2hlL0tjb25maWcKaW5kZXggOWJiYjhjZS4uODY0ZGFjMiAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9LY29uZmlnCisrKyBiL2ZzL2ZzY2FjaGUvS2NvbmZpZwpAQCAtNTQsMyArNTQsMTAgQEAKIAkgIGVuYWJsZWQgYnkgc2V0dGluZyBiaXRzIGluIC9zeXMvbW9kdWxlcy9mc2NhY2hlL3BhcmFtZXRlci9kZWJ1Zy4KIAogCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIEZTQ0FDSEVfT0JKRUNUX0xJU1QKKwlib29sICJNYWludGFpbiBnbG9iYWwgb2JqZWN0IGxpc3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgUFJPQ19GUworCWhlbHAKKwkgIE1haW50YWluIGEgZ2xvYmFsIGxpc3Qgb2YgYWN0aXZlIGZzY2FjaGUgb2JqZWN0cyB0aGF0IGNhbiBiZQorCSAgcmV0cmlldmVkIHRocm91Z2ggL3Byb2MvZnMvZnNjYWNoZS9vYmplY3RzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvTWFrZWZpbGUgYi9mcy9mc2NhY2hlL01ha2VmaWxlCmluZGV4IDkxNTcxYjkuLjZkNTYxNTMgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvTWFrZWZpbGUKKysrIGIvZnMvZnNjYWNoZS9NYWtlZmlsZQpAQCAtMTUsNSArMTUsNiBAQAogZnNjYWNoZS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIGZzY2FjaGUtJChDT05GSUdfRlNDQUNIRV9TVEFUUykgKz0gc3RhdHMubwogZnNjYWNoZS0kKENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTSkgKz0gaGlzdG9ncmFtLm8KK2ZzY2FjaGUtJChDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVCkgKz0gb2JqZWN0LWxpc3QubwogCiBvYmotJChDT05GSUdfRlNDQUNIRSkgOj0gZnNjYWNoZS5vCmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL2NhY2hlLmMgYi9mcy9mc2NhY2hlL2NhY2hlLmMKaW5kZXggZTIxOTg1Yi4uNmEzYzQ4YSAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9jYWNoZS5jCisrKyBiL2ZzL2ZzY2FjaGUvY2FjaGUuYwpAQCAtMjYzLDYgKzI2Myw3IEBACiAJc3Bpbl9sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaWZzZGVmLT5jYWNoZV9saW5rLCAmY2FjaGUtPm9iamVjdF9saXN0KTsKIAlzcGluX3VubG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCWZzY2FjaGVfb2JqbGlzdF9hZGQoaWZzZGVmKTsKIAogCS8qIGFkZCB0aGUgY2FjaGUncyBuZXRmcyBkZWZpbml0aW9uIGluZGV4IG9iamVjdCB0byB0aGUgdG9wIGxldmVsIGluZGV4CiAJICogY29va2llIGFzIGEga25vd24gYmFja2luZyBvYmplY3QgKi8KQEAgLTM4MCwxMSArMzgxLDE1IEBACiAKIAkvKiBtYWtlIHN1cmUgYWxsIHBhZ2VzIHBpbm5lZCBieSBvcGVyYXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgbmV0ZnMgYXJlCiAJICogd3JpdHRlbiB0byBkaXNrICovCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3N5bmNfY2FjaGUpOwogCWNhY2hlLT5vcHMtPnN5bmNfY2FjaGUoY2FjaGUpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX3N5bmNfY2FjaGUpOwogCiAJLyogZGlzc29jaWF0ZSBhbGwgdGhlIG5ldGZzIHBhZ2VzIGJhY2tlZCBieSB0aGlzIGNhY2hlIGZyb20gdGhlIGJsb2NrCiAJICogbWFwcGluZ3MgaW4gdGhlIGNhY2hlICovCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX2Rpc3NvY2lhdGVfcGFnZXMpOwogCWNhY2hlLT5vcHMtPmRpc3NvY2lhdGVfcGFnZXMoY2FjaGUpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX2Rpc3NvY2lhdGVfcGFnZXMpOwogCiAJLyogd2Ugbm93IGhhdmUgdG8gZGVzdHJveSBhbGwgdGhlIGFjdGl2ZSBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhpcwogCSAqIGNhY2hlIC0gd2hpY2ggd2UgZG8gYnkgcGFzc2luZyB0aGVtIG9mZiB0byB0aHJlYWQgcG9vbCB0byBiZQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9jb29raWUuYyBiL2ZzL2ZzY2FjaGUvY29va2llLmMKaW5kZXggNzJmZDE4Zi4uOTkwNTM1MCAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9jb29raWUuYworKysgYi9mcy9mc2NhY2hlL2Nvb2tpZS5jCkBAIC0zNiw2ICszNiw3IEBACiAKIAltZW1zZXQoY29va2llLCAwLCBzaXplb2YoKmNvb2tpZSkpOwogCXNwaW5fbG9ja19pbml0KCZjb29raWUtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZjb29raWUtPnN0b3Jlc19sb2NrKTsKIAlJTklUX0hMSVNUX0hFQUQoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKTsKIH0KIApAQCAtMTAyLDcgKzEwMyw5IEBACiAJY29va2llLT5uZXRmc19kYXRhCT0gbmV0ZnNfZGF0YTsKIAljb29raWUtPmZsYWdzCQk9IDA7CiAKLQlJTklUX1JBRElYX1RSRUUoJmNvb2tpZS0+c3RvcmVzLCBHRlBfTk9GUyk7CisJLyogcmFkaXggdHJlZSBpbnNlcnRpb24gd29uJ3QgdXNlIHRoZSBwcmVhbGxvY2F0aW9uIHBvb2wgdW5sZXNzIGl0J3MKKwkgKiB0b2xkIGl0IG1heSBub3Qgd2FpdCAqLworCUlOSVRfUkFESVhfVFJFRSgmY29va2llLT5zdG9yZXMsIEdGUF9OT0ZTICYgfl9fR0ZQX1dBSVQpOwogCiAJc3dpdGNoIChjb29raWUtPmRlZi0+dHlwZSkgewogCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoKQEAgLTI0OSw3ICsyNTIsOSBAQAogCiAJLyogYXNrIHRoZSBjYWNoZSB0byBhbGxvY2F0ZSBhbiBvYmplY3QgKHdlIG1heSBlbmQgdXAgd2l0aCBkdXBsaWNhdGUKIAkgKiBvYmplY3RzIGF0IHRoaXMgc3RhZ2UsIGJ1dCB3ZSBzb3J0IHRoYXQgb3V0IGxhdGVyKSAqLworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NvcF9hbGxvY19vYmplY3QpOwogCW9iamVjdCA9IGNhY2hlLT5vcHMtPmFsbG9jX29iamVjdChjYWNoZSwgY29va2llKTsKKwlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9hbGxvY19vYmplY3QpOwogCWlmIChJU19FUlIob2JqZWN0KSkgewogCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3Rfbm9fYWxsb2MpOwogCQlyZXQgPSBQVFJfRVJSKG9iamVjdCk7CkBAIC0yNzAsOCArMjc1LDExIEBACiAJLyogb25seSBhdHRhY2ggaWYgd2UgbWFuYWdlZCB0byBhbGxvY2F0ZSBhbGwgd2UgbmVlZGVkLCBvdGhlcndpc2UKIAkgKiBkaXNjYXJkIHRoZSBvYmplY3Qgd2UganVzdCBhbGxvY2F0ZWQgYW5kIGluc3RlYWQgdXNlIHRoZSBvbmUKIAkgKiBhdHRhY2hlZCB0byB0aGUgY29va2llICovCi0JaWYgKGZzY2FjaGVfYXR0YWNoX29iamVjdChjb29raWUsIG9iamVjdCkgPCAwKQorCWlmIChmc2NhY2hlX2F0dGFjaF9vYmplY3QoY29va2llLCBvYmplY3QpIDwgMCkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CiAJCWNhY2hlLT5vcHMtPnB1dF9vYmplY3Qob2JqZWN0KTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CisJfQogCiAJX2xlYXZlKCIgPSAwIik7CiAJcmV0dXJuIDA7CkBAIC0yODcsNyArMjk1LDkgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcHV0OgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NvcF9wdXRfb2JqZWN0KTsKIAljYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CisJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CiBlcnJvcjoKIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzQ5LDYgKzM1OSw4IEBACiAJb2JqZWN0LT5jb29raWUgPSBjb29raWU7CiAJYXRvbWljX2luYygmY29va2llLT51c2FnZSk7CiAJaGxpc3RfYWRkX2hlYWQoJm9iamVjdC0+Y29va2llX2xpbmssICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cyk7CisKKwlmc2NhY2hlX29iamxpc3RfYWRkKG9iamVjdCk7CiAJcmV0ID0gMDsKIAogY2FudF9hdHRhY2hfb2JqZWN0OgpAQCAtNDAzLDYgKzQxNSw4IEBACiAJdW5zaWduZWQgbG9uZyBldmVudDsKIAogCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlcyk7CisJaWYgKHJldGlyZSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3JldGlyZSk7CiAKIAlpZiAoIWNvb2tpZSkgewogCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbCk7CkBAIC00MjgsMTIgKzQ0Miw4IEBACiAKIAlldmVudCA9IHJldGlyZSA/IEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRSA6IEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0U7CiAKLQkvKiBkZXRhY2ggcG9pbnRlcnMgYmFjayB0byB0aGUgbmV0ZnMgKi8KIAlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CiAKLQljb29raWUtPm5ldGZzX2RhdGEJPSBOVUxMOwotCWNvb2tpZS0+ZGVmCQk9IE5VTEw7Ci0KIAkvKiBicmVhayBsaW5rcyB3aXRoIGFsbCB0aGUgYWN0aXZlIG9iamVjdHMgKi8KIAl3aGlsZSAoIWhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpIHsKIAkJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCkBAIC00NTYsNiArNDY2LDEwIEBACiAJCQlCVUcoKTsKIAl9CiAKKwkvKiBkZXRhY2ggcG9pbnRlcnMgYmFjayB0byB0aGUgbmV0ZnMgKi8KKwljb29raWUtPm5ldGZzX2RhdGEJPSBOVUxMOworCWNvb2tpZS0+ZGVmCQk9IE5VTEw7CisKIAlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKIAogCWlmIChjb29raWUtPnBhcmVudCkgewpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9pbnRlcm5hbC5oIGIvZnMvZnNjYWNoZS9pbnRlcm5hbC5oCmluZGV4IDFjMzQxMzAuLmVkZDc0MzQgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvaW50ZXJuYWwuaAorKysgYi9mcy9mc2NhY2hlL2ludGVybmFsLmgKQEAgLTE3LDYgKzE3LDcgQEAKICAqIC0gY2FjaGUtPm9iamVjdF9saXN0X2xvY2sKICAqIC0gb2JqZWN0LT5sb2NrCiAgKiAtIG9iamVjdC0+cGFyZW50LT5sb2NrCisgKiAtIGNvb2tpZS0+c3RvcmVzX2xvY2sKICAqIC0gZnNjYWNoZV90aHJlYWRfbG9jawogICoKICAqLwpAQCAtODgsMTcgKzg5LDMxIEBACiAvKgogICogb2JqZWN0LmMKICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgZnNjYWNoZV9vYmplY3Rfc3RhdGVzX3Nob3J0W0ZTQ0FDSEVfT0JKRUNUX19OU1RBVEVTXVs1XTsKKwogZXh0ZXJuIHZvaWQgZnNjYWNoZV93aXRoZHJhd2luZ19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKiwKIAkJCQkgICAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOwogZXh0ZXJuIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CiAKIC8qCisgKiBvYmplY3QtbGlzdC5jCisgKi8KKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnNjYWNoZV9vYmpsaXN0X2ZvcHM7CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfb2JqbGlzdF9hZGQoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworI2Vsc2UKKyNkZWZpbmUgZnNjYWNoZV9vYmpsaXN0X2FkZChvYmplY3QpIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworLyoKICAqIG9wZXJhdGlvbi5jCiAgKi8KIGV4dGVybiBpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAogCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CiBleHRlcm4gaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAogCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gaW50IGZzY2FjaGVfY2FuY2VsX29wKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKIGV4dGVybiB2b2lkIGZzY2FjaGVfYWJvcnRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKIGV4dGVybiB2b2lkIGZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CiBleHRlcm4gdm9pZCBmc2NhY2hlX29wZXJhdGlvbl9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CkBAIC0xMjcsNiArMTQyLDggQEAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfZGVmZXJyZWRfcmVsZWFzZTsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcmVsZWFzZTsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfZ2M7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29wX2NhbmNlbGxlZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcmVqZWN0ZWQ7CiAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfb2s7CkBAIC0xMzgsNiArMTU1LDggQEAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzX29rOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfd2FpdDsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzX25vYnVmczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzX2ludHI7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vYmplY3RfZGVhZDsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2Nfb3BzOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcF93YWl0czsKIApAQCAtMTQ4LDYgKzE2Nyw3IEBACiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHI7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfb2JqZWN0X2RlYWQ7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcHM7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0czsKIApAQCAtMTU4LDYgKzE3OCwxNCBAQAogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfb29tOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV9vcHM7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV9wYWdlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfcmFkaXhfZGVsZXRlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfcGFnZXNfb3Zlcl9saW1pdDsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV92bXNjYW5fbm90X3N0b3Jpbmc7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX3Ztc2Nhbl9nb25lOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV92bXNjYW5fYnVzeTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfdm1zY2FuX2NhbmNlbGxlZDsKIAogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9tYXJrczsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fdW5jYWNoZXM7CkBAIC0xNzYsNiArMjA0LDcgQEAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbDsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3dhaXRjcnQ7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc19yZXRpcmU7CiAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX2luZGV4OwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb29raWVfZGF0YTsKQEAgLTE4Niw2ICsyMTUsNyBAQAogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3VwczsKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc190aW1lZF9vdXQ7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfYXZhaWw7CiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9kZWFkOwpAQCAtMTk1LDE1ICsyMjUsNDEgQEAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY2hlY2thdXhfdXBkYXRlOwogZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZTsKIAorZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3BfYWxsb2Nfb2JqZWN0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3BfbG9va3VwX29iamVjdDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX2xvb2t1cF9jb21wbGV0ZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX2dyYWJfb2JqZWN0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3BfdXBkYXRlX29iamVjdDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX2Ryb3Bfb2JqZWN0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3BfcHV0X29iamVjdDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX3N5bmNfY2FjaGU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9hdHRyX2NoYW5nZWQ7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9yZWFkX29yX2FsbG9jX3BhZ2U7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9yZWFkX29yX2FsbG9jX3BhZ2VzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3BfYWxsb2NhdGVfcGFnZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX2FsbG9jYXRlX3BhZ2VzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jb3Bfd3JpdGVfcGFnZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX3VuY2FjaGVfcGFnZTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29wX2Rpc3NvY2lhdGVfcGFnZXM7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX3N0YXQoYXRvbWljX3QgKnN0YXQpCiB7CiAJYXRvbWljX2luYyhzdGF0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfc3RhdF9kKGF0b21pY190ICpzdGF0KQoreworCWF0b21pY19kZWMoc3RhdCk7Cit9CisKKyNkZWZpbmUgX19mc2NhY2hlX3N0YXQoc3RhdCkgKHN0YXQpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfc3RhdHNfZm9wczsKICNlbHNlCiAKKyNkZWZpbmUgX19mc2NhY2hlX3N0YXQoc3RhdCkgKE5VTEwpCiAjZGVmaW5lIGZzY2FjaGVfc3RhdChzdGF0KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZnNjYWNoZV9zdGF0X2Qoc3RhdCkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvbWFpbi5jIGIvZnMvZnNjYWNoZS9tYWluLmMKaW5kZXggNGRlNDFiNS4uYWRkNmJkYiAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9tYWluLmMKKysrIGIvZnMvZnNjYWNoZS9tYWluLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIoKTsKKwlyZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3Jfc2xvd193b3JrOwogCkBAIC04MCw3ICs4MCw3IEBACiBlcnJvcl9jb29raWVfamFyOgogCWZzY2FjaGVfcHJvY19jbGVhbnVwKCk7CiBlcnJvcl9wcm9jOgotCXNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoKTsKKwlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKFRISVNfTU9EVUxFKTsKIGVycm9yX3Nsb3dfd29yazoKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTcsNyArOTcsNyBAQAogCWtvYmplY3RfcHV0KGZzY2FjaGVfcm9vdCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGZzY2FjaGVfY29va2llX2phcik7CiAJZnNjYWNoZV9wcm9jX2NsZWFudXAoKTsKLQlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CisJc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogVW5sb2FkZWRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29iamVjdC1saXN0LmMgYi9mcy9mc2NhY2hlL29iamVjdC1saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5MDI0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvb2JqZWN0LWxpc3QuYwpAQCAtMCwwICsxLDQzMiBAQAorLyogR2xvYmFsIGZzY2FjaGUgb2JqZWN0IGxpc3QgbWFpbnRhaW5lciBhbmQgdmlld2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDT09LSUUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tleS5oPgorI2luY2x1ZGUgPGtleXMvdXNlci10eXBlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIHN0cnVjdCByYl9yb290IGZzY2FjaGVfb2JqZWN0X2xpc3Q7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhmc2NhY2hlX29iamVjdF9saXN0X2xvY2spOworCitzdHJ1Y3QgZnNjYWNoZV9vYmpsaXN0X2RhdGEgeworCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogZGlzcGxheSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfS0VZCTB4MDAwMDAwMDEJLyogc2hvdyBvYmplY3Qga2V5cyAqLworI2RlZmluZSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0FVWAkweDAwMDAwMDAyCS8qIHNob3cgb2JqZWN0IGF1eGRhdGEgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19DT09LSUUJMHgwMDAwMDAwNAkvKiBzaG93IG9iamVjdHMgd2l0aCBjb29raWVzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9DT09LSUUJMHgwMDAwMDAwOAkvKiBzaG93IG9iamVjdHMgd2l0aG91dCBjb29raWVzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQlVTWQkweDAwMDAwMDEwCS8qIHNob3cgYnVzeSBvYmplY3RzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfSURMRQkweDAwMDAwMDIwCS8qIHNob3cgaWRsZSBvYmplY3RzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfUEVORFdSCTB4MDAwMDAwNDAJLyogc2hvdyBvYmplY3RzIHdpdGggcGVuZGluZyB3cml0ZXMgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1BFTkRXUgkweDAwMDAwMDgwCS8qIHNob3cgb2JqZWN0cyB3aXRob3V0IHBlbmRpbmcgd3JpdGVzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfUkVBRFMJMHgwMDAwMDEwMAkvKiBzaG93IG9iamVjdHMgd2l0aCBhY3RpdmUgcmVhZHMgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1JFQURTCTB4MDAwMDAyMDAJLyogc2hvdyBvYmplY3RzIHdpdGhvdXQgYWN0aXZlIHJlYWRzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfRVZFTlRTCTB4MDAwMDA0MDAJLyogc2hvdyBvYmplY3RzIHdpdGggZXZlbnRzICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9FVkVOVFMJMHgwMDAwMDgwMAkvKiBzaG93IG9iamVjdHMgd2l0aG91dCBubyBldmVudHMgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19XT1JLCTB4MDAwMDEwMDAJLyogc2hvdyBvYmplY3RzIHdpdGggc2xvdyB3b3JrICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9XT1JLCTB4MDAwMDIwMDAJLyogc2hvdyBvYmplY3RzIHdpdGhvdXQgc2xvdyB3b3JrICovCisKKwl1OAkJYnVmWzUxMl07CS8qIGtleSBhbmQgYXV4IGRhdGEgYnVmZmVyICovCit9OworCisvKgorICogQWRkIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGxpc3QKKyAqIC0gd2UgdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBmc2NhY2hlX29iamVjdCBzdHJ1Y3R1cmUgYXMgdGhlIGtleSBpbnRvIHRoZQorICogICB0cmVlCisgKi8KK3ZvaWQgZnNjYWNoZV9vYmpsaXN0X2FkZChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnhvYmo7CisJc3RydWN0IHJiX25vZGUgKipwID0gJmZzY2FjaGVfb2JqZWN0X2xpc3QucmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CisKKwl3cml0ZV9sb2NrKCZmc2NhY2hlX29iamVjdF9saXN0X2xvY2spOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQl4b2JqID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIG9iamxpc3RfbGluayk7CisKKwkJaWYgKG9iaiA8IHhvYmopCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9iaiA+IHhvYmopCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlyYl9saW5rX25vZGUoJm9iai0+b2JqbGlzdF9saW5rLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmb2JqLT5vYmpsaXN0X2xpbmssICZmc2NhY2hlX29iamVjdF9saXN0KTsKKworCXdyaXRlX3VubG9jaygmZnNjYWNoZV9vYmplY3RfbGlzdF9sb2NrKTsKK30KKworLyoqCisgKiBmc2NhY2hlX29iamVjdF9kZXN0cm95IC0gTm90ZSB0aGF0IGEgY2FjaGUgb2JqZWN0IGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZAorICogQG9iamVjdDogVGhlIG9iamVjdCB0byBiZSBkZXN0cm95ZWQKKyAqCisgKiBOb3RlIHRoZSBpbW1pbmVudCBkZXN0cnVjdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGEgY2FjaGUgb2JqZWN0IHJlY29yZC4KKyAqLwordm9pZCBmc2NhY2hlX29iamVjdF9kZXN0cm95KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqKQoreworCXdyaXRlX2xvY2soJmZzY2FjaGVfb2JqZWN0X2xpc3RfbG9jayk7CisKKwlCVUdfT04oUkJfRU1QVFlfUk9PVCgmZnNjYWNoZV9vYmplY3RfbGlzdCkpOworCXJiX2VyYXNlKCZvYmotPm9iamxpc3RfbGluaywgJmZzY2FjaGVfb2JqZWN0X2xpc3QpOworCisJd3JpdGVfdW5sb2NrKCZmc2NhY2hlX29iamVjdF9saXN0X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9kZXN0cm95KTsKKworLyoKKyAqIGZpbmQgdGhlIG9iamVjdCBpbiB0aGUgdHJlZSBvbiBvciBhZnRlciB0aGUgc3BlY2lmaWVkIGluZGV4CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmZzY2FjaGVfb2JqbGlzdF9sb29rdXAobG9mZl90ICpfcG9zKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqcG9iaiwgKm9iaiwgKm1pbm9iaiA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKnA7CisJdW5zaWduZWQgbG9uZyBwb3M7CisKKwlpZiAoKl9wb3MgPj0gKHVuc2lnbmVkIGxvbmcpIEVSUl9QVFIoLUVOT0VOVCkpCisJCXJldHVybiBOVUxMOworCXBvcyA9ICpfcG9zOworCisJLyogYmFubmVycyAoY2FuJ3QgcmVwcmVzZW50IGxpbmUgMCBieSBwb3MgMCBhcyB0aGF0IHdvdWxkIGludm9sdmUKKwkgKiByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIpICovCisJaWYgKHBvcyA9PSAwKQorCQlyZXR1cm4gKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKSArKygqX3Bvcyk7CisJaWYgKHBvcyA8IDMpCisJCXJldHVybiAoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopcG9zOworCisJcG9iaiA9IChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKilwb3M7CisJcCA9IGZzY2FjaGVfb2JqZWN0X2xpc3QucmJfbm9kZTsKKwl3aGlsZSAocCkgeworCQlvYmogPSByYl9lbnRyeShwLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIG9iamxpc3RfbGluayk7CisJCWlmIChwb2JqIDwgb2JqKSB7CisJCQlpZiAoIW1pbm9iaiB8fCBtaW5vYmogPiBvYmopCisJCQkJbWlub2JqID0gb2JqOworCQkJcCA9IHAtPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAocG9iaiA+IG9iaikgeworCQkJcCA9IHAtPnJiX3JpZ2h0OworCQl9IGVsc2UgeworCQkJbWlub2JqID0gb2JqOworCQkJYnJlYWs7CisJCX0KKwkJb2JqID0gTlVMTDsKKwl9CisKKwlpZiAoIW1pbm9iaikKKwkJKl9wb3MgPSAodW5zaWduZWQgbG9uZykgRVJSX1BUUigtRU5PRU5UKTsKKwllbHNlIGlmIChtaW5vYmogIT0gb2JqKQorCQkqX3BvcyA9ICh1bnNpZ25lZCBsb25nKSBtaW5vYmo7CisJcmV0dXJuIG1pbm9iajsKK30KKworLyoKKyAqIHNldCB1cCB0aGUgaXRlcmF0b3IgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBmaXJzdCBsaW5lCisgKi8KK3N0YXRpYyB2b2lkICpmc2NhY2hlX29iamxpc3Rfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKl9wb3MpCisJX19hY3F1aXJlcygmZnNjYWNoZV9vYmplY3RfbGlzdF9sb2NrKQoreworCXJlYWRfbG9jaygmZnNjYWNoZV9vYmplY3RfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZnNjYWNoZV9vYmpsaXN0X2xvb2t1cChfcG9zKTsKK30KKworLyoKKyAqIG1vdmUgdG8gdGhlIG5leHQgbGluZQorICovCitzdGF0aWMgdm9pZCAqZnNjYWNoZV9vYmpsaXN0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCit7CisJKCpfcG9zKSsrOworCXJldHVybiBmc2NhY2hlX29iamxpc3RfbG9va3VwKF9wb3MpOworfQorCisvKgorICogY2xlYW4gdXAgYWZ0ZXIgcmVhZGluZworICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamxpc3Rfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCisJX19yZWxlYXNlcygmZnNjYWNoZV9vYmplY3RfbGlzdF9sb2NrKQoreworCXJlYWRfdW5sb2NrKCZmc2NhY2hlX29iamVjdF9saXN0X2xvY2spOworfQorCisvKgorICogZGlzcGxheSBhbiBvYmplY3QKKyAqLworc3RhdGljIGludCBmc2NhY2hlX29iamxpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqbGlzdF9kYXRhICpkYXRhID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iaiA9IHY7CisJdW5zaWduZWQgbG9uZyBjb25maWcgPSBkYXRhLT5jb25maWc7CisJdWludDE2X3Qga2V5bGVuLCBhdXhsZW47CisJY2hhciBfdHlwZVszXSwgKnR5cGU7CisJYm9vbCBub19jb29raWU7CisJdTggKmJ1ZiA9IGRhdGEtPmJ1ZiwgKnA7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHYgPT0gMSkgeworCQlzZXFfcHV0cyhtLCAiT0JKRUNUICAgUEFSRU5UICAgU1RBVCBDSExETiBPUFMgT09QIElQUiBFWCBSRUFEUyIKKwkJCSAiIEVNIEVWIEYgUyIKKwkJCSAiIHwgTkVURlNfQ09PS0lFX0RFRiBUWSBGTCBORVRGU19EQVRBIik7CisJCWlmIChjb25maWcgJiAoRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19LRVkgfAorCQkJICAgICAgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19BVVgpKQorCQkJc2VxX3B1dHMobSwgIiAgICAgICAiKTsKKwkJaWYgKGNvbmZpZyAmIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfS0VZKQorCQkJc2VxX3B1dHMobSwgIk9CSkVDVF9LRVkiKTsKKwkJaWYgKChjb25maWcgJiAoRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19LRVkgfAorCQkJICAgICAgIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQVVYKSkgPT0KKwkJICAgIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0tFWSB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQVVYKSkKKwkJCXNlcV9wdXRzKG0sICIsICIpOworCQlpZiAoY29uZmlnICYgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19BVVgpCisJCQlzZXFfcHV0cyhtLCAiQVVYX0RBVEEiKTsKKwkJc2VxX3B1dHMobSwgIlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICgodW5zaWduZWQgbG9uZykgdiA9PSAyKSB7CisJCXNlcV9wdXRzKG0sICI9PT09PT09PSA9PT09PT09PSA9PT09ID09PT09ID09PSA9PT0gPT09ID09ID09PT09IgorCQkJICIgPT0gPT0gPSA9IgorCQkJICIgfCA9PT09PT09PT09PT09PT09ID09ID09ID09PT09PT09PT09PT09PT0iKTsKKwkJaWYgKGNvbmZpZyAmIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0tFWSB8CisJCQkgICAgICBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0FVWCkpCisJCQlzZXFfcHV0cyhtLCAiID09PT09PT09PT09PT09PT0iKTsKKwkJc2VxX3B1dHMobSwgIlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIGZpbHRlciBvdXQgYW55IHVud2FudGVkIG9iamVjdHMgKi8KKyNkZWZpbmUgRklMVEVSKGNyaXRlcmlvbiwgX3llcywgX25vKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyB5ZXMgPSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHXyMjX3llczsJXAorCQl1bnNpZ25lZCBsb25nIG5vID0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR18jI19ubzsJXAorCQlpZiAoY3JpdGVyaW9uKSB7CQkJCQlcCisJCQlpZiAoIShjb25maWcgJiB5ZXMpKQkJCQlcCisJCQkJcmV0dXJuIDA7CQkJCVwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCQlpZiAoIShjb25maWcgJiBubykpCQkJCVwKKwkJCQlyZXR1cm4gMDsJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlKDApCisKKwlpZiAofmNvbmZpZykgeworCQlGSUxURVIob2JqLT5jb29raWUsCisJCSAgICAgICBDT09LSUUsIE5PQ09PS0lFKTsKKwkJRklMVEVSKG9iai0+c3RhdGUgIT0gRlNDQUNIRV9PQkpFQ1RfQUNUSVZFIHx8CisJCSAgICAgICBvYmotPm5fb3BzICE9IDAgfHwKKwkJICAgICAgIG9iai0+bl9vYmpfb3BzICE9IDAgfHwKKwkJICAgICAgIG9iai0+ZmxhZ3MgfHwKKwkJICAgICAgICFsaXN0X2VtcHR5KCZvYmotPmRlcGVuZGVudHMpLAorCQkgICAgICAgQlVTWSwgSURMRSk7CisJCUZJTFRFUih0ZXN0X2JpdChGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFLCAmb2JqLT5mbGFncyksCisJCSAgICAgICBQRU5EV1IsIE5PUEVORFdSKTsKKwkJRklMVEVSKGF0b21pY19yZWFkKCZvYmotPm5fcmVhZHMpLAorCQkgICAgICAgUkVBRFMsIE5PUkVBRFMpOworCQlGSUxURVIob2JqLT5ldmVudHMgJiBvYmotPmV2ZW50X21hc2ssCisJCSAgICAgICBFVkVOVFMsIE5PRVZFTlRTKTsKKwkJRklMVEVSKG9iai0+d29yay5mbGFncyAmIH4oMVVMIDw8IFNMT1dfV09SS19WRVJZX1NMT1cpLAorCQkgICAgICAgV09SSywgTk9XT1JLKTsKKwl9CisKKwlzZXFfcHJpbnRmKG0sCisJCSAgICIlOHggJTh4ICVzICU1dSAlM3UgJTN1ICUzdSAlMnUgJTV1ICUybHggJTJseCAlMWx4ICUxbHggfCAiLAorCQkgICBvYmotPmRlYnVnX2lkLAorCQkgICBvYmotPnBhcmVudCA/IG9iai0+cGFyZW50LT5kZWJ1Z19pZCA6IC0xLAorCQkgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNfc2hvcnRbb2JqLT5zdGF0ZV0sCisJCSAgIG9iai0+bl9jaGlsZHJlbiwKKwkJICAgb2JqLT5uX29wcywKKwkJICAgb2JqLT5uX29ial9vcHMsCisJCSAgIG9iai0+bl9pbl9wcm9ncmVzcywKKwkJICAgb2JqLT5uX2V4Y2x1c2l2ZSwKKwkJICAgYXRvbWljX3JlYWQoJm9iai0+bl9yZWFkcyksCisJCSAgIG9iai0+ZXZlbnRfbWFzayAmIEZTQ0FDSEVfT0JKRUNUX0VWRU5UU19NQVNLLAorCQkgICBvYmotPmV2ZW50cywKKwkJICAgb2JqLT5mbGFncywKKwkJICAgb2JqLT53b3JrLmZsYWdzKTsKKworCW5vX2Nvb2tpZSA9IHRydWU7CisJa2V5bGVuID0gYXV4bGVuID0gMDsKKwlpZiAob2JqLT5jb29raWUpIHsKKwkJc3Bpbl9sb2NrKCZvYmotPmxvY2spOworCQlpZiAob2JqLT5jb29raWUpIHsKKwkJCXN3aXRjaCAob2JqLT5jb29raWUtPmRlZi0+dHlwZSkgeworCQkJY2FzZSAwOgorCQkJCXR5cGUgPSAiSVgiOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXR5cGUgPSAiRFQiOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzcHJpbnRmKF90eXBlLCAiJTAydSIsCisJCQkJCW9iai0+Y29va2llLT5kZWYtPnR5cGUpOworCQkJCXR5cGUgPSBfdHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXMgJTJseCAlMTZwIiwKKwkJCQkgICBvYmotPmNvb2tpZS0+ZGVmLT5uYW1lLAorCQkJCSAgIHR5cGUsCisJCQkJICAgb2JqLT5jb29raWUtPmZsYWdzLAorCQkJCSAgIG9iai0+Y29va2llLT5uZXRmc19kYXRhKTsKKworCQkJaWYgKG9iai0+Y29va2llLT5kZWYtPmdldF9rZXkgJiYKKwkJCSAgICBjb25maWcgJiBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0tFWSkKKwkJCQlrZXlsZW4gPSBvYmotPmNvb2tpZS0+ZGVmLT5nZXRfa2V5KAorCQkJCQlvYmotPmNvb2tpZS0+bmV0ZnNfZGF0YSwKKwkJCQkJYnVmLCA0MDApOworCisJCQlpZiAob2JqLT5jb29raWUtPmRlZi0+Z2V0X2F1eCAmJgorCQkJICAgIGNvbmZpZyAmIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQVVYKQorCQkJCWF1eGxlbiA9IG9iai0+Y29va2llLT5kZWYtPmdldF9hdXgoCisJCQkJCW9iai0+Y29va2llLT5uZXRmc19kYXRhLAorCQkJCQlidWYgKyBrZXlsZW4sIDUxMiAtIGtleWxlbik7CisKKwkJCW5vX2Nvb2tpZSA9IGZhbHNlOworCQl9CisJCXNwaW5fdW5sb2NrKCZvYmotPmxvY2spOworCisJCWlmICghbm9fY29va2llICYmIChrZXlsZW4gPiAwIHx8IGF1eGxlbiA+IDApKSB7CisJCQlzZXFfcHJpbnRmKG0sICIgIik7CisJCQlmb3IgKHAgPSBidWY7IGtleWxlbiA+IDA7IGtleWxlbi0tKQorCQkJCXNlcV9wcmludGYobSwgIiUwMngiLCAqcCsrKTsKKwkJCWlmIChhdXhsZW4gPiAwKSB7CisJCQkJaWYgKGNvbmZpZyAmIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfS0VZKQorCQkJCQlzZXFfcHJpbnRmKG0sICIsICIpOworCQkJCWZvciAoOyBhdXhsZW4gPiAwOyBhdXhsZW4tLSkKKwkJCQkJc2VxX3ByaW50ZihtLCAiJTAyeCIsICpwKyspOworCQkJfQorCQl9CisJfQorCisJaWYgKG5vX2Nvb2tpZSkKKwkJc2VxX3ByaW50ZihtLCAiPG5vX2Nvb2tpZT5cbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBmc2NhY2hlX29iamxpc3Rfb3BzID0geworCS5zdGFydAkJPSBmc2NhY2hlX29iamxpc3Rfc3RhcnQsCisJLnN0b3AJCT0gZnNjYWNoZV9vYmpsaXN0X3N0b3AsCisJLm5leHQJCT0gZnNjYWNoZV9vYmpsaXN0X25leHQsCisJLnNob3cJCT0gZnNjYWNoZV9vYmpsaXN0X3Nob3csCit9OworCisvKgorICogZ2V0IHRoZSBjb25maWd1cmF0aW9uIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3QKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmpsaXN0X2NvbmZpZyhzdHJ1Y3QgZnNjYWNoZV9vYmpsaXN0X2RhdGEgKmRhdGEpCit7CisjaWZkZWYgQ09ORklHX0tFWVMKKwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqY29uZmtleTsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZzsKKwlzdHJ1Y3Qga2V5ICprZXk7CisJY29uc3QgY2hhciAqYnVmOworCWludCBsZW47CisKKwlrZXkgPSByZXF1ZXN0X2tleSgma2V5X3R5cGVfdXNlciwgImZzY2FjaGU6b2JqbGlzdCIsIE5VTEwpOworCWlmIChJU19FUlIoa2V5KSkKKwkJZ290byBub19jb25maWc7CisKKwljb25maWcgPSAwOworCXJjdV9yZWFkX2xvY2soKTsKKworCWNvbmZrZXkgPSBrZXktPnBheWxvYWQuZGF0YTsKKwlidWYgPSBjb25ma2V5LT5kYXRhOworCisJZm9yIChsZW4gPSBjb25ma2V5LT5kYXRhbGVuIC0gMTsgbGVuID49IDA7IGxlbi0tKSB7CisJCXN3aXRjaCAoYnVmW2xlbl0pIHsKKwkJY2FzZSAnSyc6IGNvbmZpZyB8PSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0tFWTsJCWJyZWFrOworCQljYXNlICdBJzogY29uZmlnIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQVVYOwkJYnJlYWs7CisJCWNhc2UgJ0MnOiBjb25maWcgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19DT09LSUU7CWJyZWFrOworCQljYXNlICdjJzogY29uZmlnIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9DT09LSUU7CWJyZWFrOworCQljYXNlICdCJzogY29uZmlnIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfQlVTWTsJYnJlYWs7CisJCWNhc2UgJ2InOiBjb25maWcgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19JRExFOwlicmVhazsKKwkJY2FzZSAnVyc6IGNvbmZpZyB8PSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX1BFTkRXUjsJYnJlYWs7CisJCWNhc2UgJ3cnOiBjb25maWcgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1BFTkRXUjsJYnJlYWs7CisJCWNhc2UgJ1InOiBjb25maWcgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19SRUFEUzsJYnJlYWs7CisJCWNhc2UgJ3InOiBjb25maWcgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1JFQURTOwlicmVhazsKKwkJY2FzZSAnUyc6IGNvbmZpZyB8PSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX1dPUks7CWJyZWFrOworCQljYXNlICdzJzogY29uZmlnIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9XT1JLOwlicmVhazsKKwkJfQorCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCWtleV9wdXQoa2V5KTsKKworCWlmICghKGNvbmZpZyAmIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0NPT0tJRSB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9DT09LSUUpKSkKKwkgICAgY29uZmlnICAgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19DT09LSUUgfCBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX05PQ09PS0lFOworCWlmICghKGNvbmZpZyAmIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0JVU1kgfCBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0lETEUpKSkKKwkgICAgY29uZmlnICAgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19CVVNZIHwgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19JRExFOworCWlmICghKGNvbmZpZyAmIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX1BFTkRXUiB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9QRU5EV1IpKSkKKwkgICAgY29uZmlnICAgfD0gRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19QRU5EV1IgfCBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX05PUEVORFdSOworCWlmICghKGNvbmZpZyAmIChGU0NBQ0hFX09CSkxJU1RfQ09ORklHX1JFQURTIHwgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1JFQURTKSkpCisJICAgIGNvbmZpZyAgIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfUkVBRFMgfCBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX05PUkVBRFM7CisJaWYgKCEoY29uZmlnICYgKEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfRVZFTlRTIHwgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT0VWRU5UUykpKQorCSAgICBjb25maWcgICB8PSBGU0NBQ0hFX09CSkxJU1RfQ09ORklHX0VWRU5UUyB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9FVkVOVFM7CisJaWYgKCEoY29uZmlnICYgKEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfV09SSyB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9XT1JLKSkpCisJICAgIGNvbmZpZyAgIHw9IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfV09SSyB8IEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9XT1JLOworCisJZGF0YS0+Y29uZmlnID0gY29uZmlnOworCXJldHVybjsKKworbm9fY29uZmlnOgorI2VuZGlmCisJZGF0YS0+Y29uZmlnID0gVUxPTkdfTUFYOworfQorCisvKgorICogb3BlbiAiL3Byb2MvZnMvZnNjYWNoZS9vYmplY3RzIiB0byBwcm92aWRlIGEgbGlzdCBvZiBhY3RpdmUgb2JqZWN0cworICogLSBjYW4gYmUgY29uZmlndXJlZCBieSBhIHVzZXItZGVmaW5lZCBrZXkgYWRkZWQgdG8gdGhlIGNhbGxlcidzIGtleXJpbmdzCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9vYmpsaXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqbGlzdF9kYXRhICpkYXRhOworCXN0cnVjdCBzZXFfZmlsZSAqbTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJmZzY2FjaGVfb2JqbGlzdF9vcHMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIGJ1ZmZlciBmb3Iga2V5IGV4dHJhY3Rpb24gKi8KKwlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZzY2FjaGVfb2JqbGlzdF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogZ2V0IHRoZSBjb25maWd1cmF0aW9uIGtleSAqLworCWZzY2FjaGVfb2JqbGlzdF9jb25maWcoZGF0YSk7CisKKwltLT5wcml2YXRlID0gZGF0YTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFuIHVwIG9uIGNsb3NlCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9vYmpsaXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJa2ZyZWUobS0+cHJpdmF0ZSk7CisJbS0+cHJpdmF0ZSA9IE5VTEw7CisJcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmc2NhY2hlX29iamxpc3RfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZnNjYWNoZV9vYmpsaXN0X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBmc2NhY2hlX29iamxpc3RfcmVsZWFzZSwKK307CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29iamVjdC5jIGIvZnMvZnNjYWNoZS9vYmplY3QuYwppbmRleCAzOTJhNDFiLi5lNTEzYWM1IDEwMDY0NAotLS0gYS9mcy9mc2NhY2hlL29iamVjdC5jCisrKyBiL2ZzL2ZzY2FjaGUvb2JqZWN0LmMKQEAgLTE0LDkgKzE0LDEwIEBACiAKICNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBDT09LSUUKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLWNvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdID0geworY29uc3QgY2hhciAqZnNjYWNoZV9vYmplY3Rfc3RhdGVzW0ZTQ0FDSEVfT0JKRUNUX19OU1RBVEVTXSA9IHsKIAlbRlNDQUNIRV9PQkpFQ1RfSU5JVF0JCT0gIk9CSkVDVF9JTklUIiwKIAlbRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUF0JPSAiT0JKRUNUX0xPT0tJTkdfVVAiLAogCVtGU0NBQ0hFX09CSkVDVF9DUkVBVElOR10JPSAiT0JKRUNUX0NSRUFUSU5HIiwKQEAgLTMzLDkgKzM0LDI4IEBACiB9OwogRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9zdGF0ZXMpOwogCitjb25zdCBjaGFyIGZzY2FjaGVfb2JqZWN0X3N0YXRlc19zaG9ydFtGU0NBQ0hFX09CSkVDVF9fTlNUQVRFU11bNV0gPSB7CisJW0ZTQ0FDSEVfT0JKRUNUX0lOSVRdCQk9ICJJTklUIiwKKwlbRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUF0JPSAiTE9PSyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HXQk9ICJDUlROIiwKKwlbRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFXQk9ICJBVkJMIiwKKwlbRlNDQUNIRV9PQkpFQ1RfQUNUSVZFXQkJPSAiQUNUViIsCisJW0ZTQ0FDSEVfT0JKRUNUX1VQREFUSU5HXQk9ICJVUERUIiwKKwlbRlNDQUNIRV9PQkpFQ1RfRFlJTkddCQk9ICJEWU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkddCT0gIkxDRFkiLAorCVtGU0NBQ0hFX09CSkVDVF9BQk9SVF9JTklUXQk9ICJBQlRJIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HXQk9ICJSRUxTIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HXQk9ICJSQ1lDIiwKKwlbRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkddCT0gIldUSEQiLAorCVtGU0NBQ0hFX09CSkVDVF9ERUFEXQkJPSAiREVBRCIsCit9OworCiBzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICopOwogc3RhdGljIGludCAgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2dldF9yZWYoc3RydWN0IHNsb3dfd29yayAqKTsKIHN0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKik7CisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19QUk9DCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZGVzYyhzdHJ1Y3Qgc2xvd193b3JrICosIHN0cnVjdCBzZXFfZmlsZSAqKTsKKyNlbmRpZgogc3RhdGljIHZvaWQgZnNjYWNoZV9pbml0aWFsaXNlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CiBzdGF0aWMgdm9pZCBmc2NhY2hlX2xvb2t1cF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOwogc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3RfYXZhaWxhYmxlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKQEAgLTQ1LDkgKzY1LDEzIEBACiBzdGF0aWMgdm9pZCBmc2NhY2hlX2RlcXVldWVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKIAogY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmdldF9yZWYJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZ2V0X3JlZiwKIAkucHV0X3JlZgk9IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19wdXRfcmVmLAogCS5leGVjdXRlCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2V4ZWN1dGUsCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19QUk9DCisJLmRlc2MJCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2Rlc2MsCisjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHMpOwogCkBAIC04MSw2ICsxMDUsNyBAQAogc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc3RhdGVfbWFjaGluZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKIHsKIAllbnVtIGZzY2FjaGVfb2JqZWN0X3N0YXRlIG5ld19zdGF0ZTsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKIAogCUFTU0VSVChvYmplY3QgIT0gTlVMTCk7CiAKQEAgLTEyMCwyMCArMTQ1LDMxIEBACiAJY2FzZSBGU0NBQ0hFX09CSkVDVF9VUERBVElORzoKIAkJY2xlYXJfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURSwgJm9iamVjdC0+ZXZlbnRzKTsKIAkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fdXBkYXRlc19ydW4pOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfdXBkYXRlX29iamVjdCk7CiAJCW9iamVjdC0+Y2FjaGUtPm9wcy0+dXBkYXRlX29iamVjdChvYmplY3QpOworCQlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF91cGRhdGVfb2JqZWN0KTsKIAkJZ290byBhY3RpdmVfdHJhbnNpdDsKIAogCQkvKiBoYW5kbGUgYW4gb2JqZWN0IGR5aW5nIGR1cmluZyBsb29rdXAgb3IgY3JlYXRpb24gKi8KIAljYXNlIEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HOgogCQlvYmplY3QtPmV2ZW50X21hc2sgJj0gfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURSk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NvcF9sb29rdXBfY29tcGxldGUpOwogCQlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9jb21wbGV0ZShvYmplY3QpOworCQlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9sb29rdXBfY29tcGxldGUpOwogCiAJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKIAkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RZSU5HOwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLAotCQkJCSAgICAgICAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKLQkJCXdha2VfdXBfYml0KCZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MsCi0JCQkJICAgIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKwkJY29va2llID0gb2JqZWN0LT5jb29raWU7CisJCWlmIChjb29raWUpIHsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwKKwkJCQkJICAgICAgICZjb29raWUtPmZsYWdzKSkKKwkJCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywKKwkJCQkJICAgIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApOworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywKKwkJCQkJICAgICAgICZjb29raWUtPmZsYWdzKSkKKwkJCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywKKwkJCQkJICAgIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKwkJfQogCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKIAogCQlmc2NhY2hlX2RvbmVfcGFyZW50X29wKG9iamVjdCk7CkBAIC0xNjUsNiArMjAxLDcgQEAKIAkJfQogCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKIAkJZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMob2JqZWN0KTsKKwkJZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKG9iamVjdCk7CiAJCWdvdG8gdGVybWluYWxfdHJhbnNpdDsKIAogCQkvKiBoYW5kbGUgYW4gYWJvcnQgZHVyaW5nIGluaXRpYWxpc2F0aW9uICovCkBAIC0zMTYsMTYgKzM1MywzMSBAQAogCiAJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CiAKLQljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRSwgJm9iamVjdC0+ZXZlbnRzKTsKLQogCXN0YXJ0ID0gamlmZmllczsKIAlmc2NhY2hlX29iamVjdF9zdGF0ZV9tYWNoaW5lKG9iamVjdCk7CiAJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb2Jqc19oaXN0b2dyYW0sIHN0YXJ0KTsKIAlpZiAob2JqZWN0LT5ldmVudHMgJiBvYmplY3QtPmV2ZW50X21hc2spCiAJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qob2JqZWN0KTsKKwljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRSwgJm9iamVjdC0+ZXZlbnRzKTsKIH0KIAogLyoKKyAqIGRlc2NyaWJlIGFuIG9iamVjdCBmb3Igc2xvdy13b3JrIGRlYnVnZ2luZworICovCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19QUk9DCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZGVzYyhzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLAorCQkJCQkgIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCisJc2VxX3ByaW50ZihtLCAiRlNDOiBPQkoleDogJXMiLAorCQkgICBvYmplY3QtPmRlYnVnX2lkLAorCQkgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNfc2hvcnRbb2JqZWN0LT5zdGF0ZV0pOworfQorI2VuZGlmCisKKy8qCiAgKiBpbml0aWFsaXNlIGFuIG9iamVjdAogICogLSBjaGVjayB0aGUgc3BlY2lmaWVkIG9iamVjdCdzIHBhcmVudCB0byBzZWUgaWYgd2UgY2FuIG1ha2UgdXNlIG9mIGl0CiAgKiAgIGltbWVkaWF0ZWx5IHRvIGRvIGEgY3JlYXRpb24KQEAgLTM3Niw3ICs0MjgsOSBAQAogCQkJICogYmluZGluZyBvbiB0byB1cywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QKIAkJCSAqIGFkZCBvdXJzZWxmIHRvIHRoZSBsaXN0IG11bHRpcGxlIHRpbWVzICovCiAJCQlpZiAobGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBfbGluaykpIHsKKwkJCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfZ3JhYl9vYmplY3QpOwogCQkJCW9iamVjdC0+Y2FjaGUtPm9wcy0+Z3JhYl9vYmplY3Qob2JqZWN0KTsKKwkJCQlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9ncmFiX29iamVjdCk7CiAJCQkJbGlzdF9hZGQoJm9iamVjdC0+ZGVwX2xpbmssCiAJCQkJCSAmcGFyZW50LT5kZXBlbmRlbnRzKTsKIApAQCAtNDE0LDYgKzQ2OCw3IEBACiB7CiAJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKIAlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudDsKKwlpbnQgcmV0OwogCiAJX2VudGVyKCIiKTsKIApAQCAtNDM4LDExICs0OTMsMjAgQEAKIAkgICAgICAgb2JqZWN0LT5jYWNoZS0+dGFnLT5uYW1lKTsKIAogCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzKTsKLQlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9vYmplY3Qob2JqZWN0KTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfbG9va3VwX29iamVjdCk7CisJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5sb29rdXBfb2JqZWN0KG9iamVjdCk7CisJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfbG9va3VwX29iamVjdCk7CiAKIAlpZiAodGVzdF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IsICZvYmplY3QtPmV2ZW50cykpCiAJCXNldF9iaXQoRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEUsICZjb29raWUtPmZsYWdzKTsKIAorCWlmIChyZXQgPT0gLUVUSU1FRE9VVCkgeworCQkvKiBwcm9iYWJseSBzdHVjayBiZWhpbmQgYW5vdGhlciBvYmplY3QsIHNvIG1vdmUgdGhpcyBvbmUgdG8KKwkJICogdGhlIGJhY2sgb2YgdGhlIHF1ZXVlICovCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3RpbWVkX291dCk7CisJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfUkVRVUVVRSwgJm9iamVjdC0+ZXZlbnRzKTsKKwl9CisKIAlfbGVhdmUoIiIpOwogfQogCkBAIC01NDYsNyArNjEwLDggQEAKIAogCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQorCWlmIChvYmplY3QtPmNvb2tpZSAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQogCQl3YWtlX3VwX2JpdCgmb2JqZWN0LT5jb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORyk7CiAKIAlmc2NhY2hlX2RvbmVfcGFyZW50X29wKG9iamVjdCk7CkBAIC01NjIsNyArNjI3LDkgQEAKIAl9CiAJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CiAKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfbG9va3VwX2NvbXBsZXRlKTsKIAlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9jb21wbGV0ZShvYmplY3QpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX2xvb2t1cF9jb21wbGV0ZSk7CiAJZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMob2JqZWN0KTsKIAogCWZzY2FjaGVfaGlzdChmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW0sIG9iamVjdC0+bG9va3VwX2ppZik7CkBAIC01ODEsMTEgKzY0OCwxNiBAQAogCiAJX2VudGVyKCJ7T0JKJXgsJWR9Iiwgb2JqZWN0LT5kZWJ1Z19pZCwgb2JqZWN0LT5uX2NoaWxkcmVuKTsKIAorCUFTU0VSVENNUChvYmplY3QtPmNvb2tpZSwgPT0sIE5VTEwpOworCUFTU0VSVChobGlzdF91bmhhc2hlZCgmb2JqZWN0LT5jb29raWVfbGluaykpOworCiAJc3Bpbl9sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmb2JqZWN0LT5jYWNoZV9saW5rKTsKIAlzcGluX3VubG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOwogCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX2Ryb3Bfb2JqZWN0KTsKIAljYWNoZS0+b3BzLT5kcm9wX29iamVjdChvYmplY3QpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX2Ryb3Bfb2JqZWN0KTsKIAogCWlmIChwYXJlbnQpIHsKIAkJX2RlYnVnKCJyZWxlYXNlIHBhcmVudCBPQkoleCB7JWR9IiwKQEAgLTYwMCw3ICs2NzIsOSBAQAogCX0KIAogCS8qIHRoaXMganVzdCBzaGlmdHMgdGhlIG9iamVjdCByZWxlYXNlIHRvIHRoZSBzbG93IHdvcmsgcHJvY2Vzc29yICovCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOwogCW9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOwogCiAJX2xlYXZlKCIiKTsKIH0KQEAgLTY5MCw4ICs3NjQsMTIgQEAKIHsKIAlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCWludCByZXQ7CiAKLQlyZXR1cm4gb2JqZWN0LT5jYWNoZS0+b3BzLT5ncmFiX29iamVjdChvYmplY3QpID8gMCA6IC1FQUdBSU47CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX2dyYWJfb2JqZWN0KTsKKwlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPmdyYWJfb2JqZWN0KG9iamVjdCkgPyAwIDogLUVBR0FJTjsKKwlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9ncmFiX29iamVjdCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTcwMiw3ICs3ODAsOSBAQAogCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CiAKLQlyZXR1cm4gb2JqZWN0LT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOworCW9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworCWZzY2FjaGVfc3RhdF9kKCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOwogfQogCiAvKgpAQCAtNzM5LDcgKzgxOSw5IEBACiAKIAkJLyogc29ydCBvbnRvIGFwcHJvcHJpYXRlIGxpc3RzICovCiAJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3QoZGVwKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOwogCQlkZXAtPmNhY2hlLT5vcHMtPnB1dF9vYmplY3QoZGVwKTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcGVuZGVudHMpKQogCQkJY29uZF9yZXNjaGVkX2xvY2soJm9iamVjdC0+bG9jayk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29wZXJhdGlvbi5jIGIvZnMvZnNjYWNoZS9vcGVyYXRpb24uYwppbmRleCBlN2Y4ZDUzLi4zMTNlNzlhIDEwMDY0NAotLS0gYS9mcy9mc2NhY2hlL29wZXJhdGlvbi5jCisrKyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIE9QRVJBVElPTgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogYXRvbWljX3QgZnNjYWNoZV9vcF9kZWJ1Z19pZDsKQEAgLTMxLDMyICszMiwzMyBAQAogCV9lbnRlcigie09CSiV4IE9QJXgsJXV9IiwKIAkgICAgICAgb3AtPm9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9wLT51c2FnZSkpOwogCisJZnNjYWNoZV9zZXRfb3Bfc3RhdGUob3AsICJFblEiKTsKKworCUFTU0VSVChsaXN0X2VtcHR5KCZvcC0+cGVuZF9saW5rKSk7CiAJQVNTRVJUKG9wLT5wcm9jZXNzb3IgIT0gTlVMTCk7CiAJQVNTRVJUQ01QKG9wLT5vYmplY3QtPnN0YXRlLCA+PSwgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFKTsKIAlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJm9wLT51c2FnZSksID4sIDApOwogCi0JaWYgKGxpc3RfZW1wdHkoJm9wLT5wZW5kX2xpbmspKSB7Ci0JCXN3aXRjaCAob3AtPmZsYWdzICYgRlNDQUNIRV9PUF9UWVBFKSB7Ci0JCWNhc2UgRlNDQUNIRV9PUF9GQVNUOgotCQkJX2RlYnVnKCJxdWV1ZSBmYXN0Iik7Ci0JCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOwotCQkJaWYgKCFzY2hlZHVsZV93b3JrKCZvcC0+ZmFzdF93b3JrKSkKLQkJCQlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlNDQUNIRV9PUF9TTE9XOgotCQkJX2RlYnVnKCJxdWV1ZSBzbG93Iik7Ci0JCQlzbG93X3dvcmtfZW5xdWV1ZSgmb3AtPnNsb3dfd29yayk7Ci0JCQlicmVhazsKLQkJY2FzZSBGU0NBQ0hFX09QX01ZVEhSRUFEOgotCQkJX2RlYnVnKCJxdWV1ZSBmb3IgY2FsbGVyJ3MgYXR0ZW50aW9uIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IFVuZXhwZWN0ZWQgb3AgdHlwZSAlbHgiLAotCQkJICAgICAgIG9wLT5mbGFncyk7Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX2VucXVldWUpOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX2VucXVldWUpOworCXN3aXRjaCAob3AtPmZsYWdzICYgRlNDQUNIRV9PUF9UWVBFKSB7CisJY2FzZSBGU0NBQ0hFX09QX0ZBU1Q6CisJCV9kZWJ1ZygicXVldWUgZmFzdCIpOworCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQlpZiAoIXNjaGVkdWxlX3dvcmsoJm9wLT5mYXN0X3dvcmspKQorCQkJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwkJYnJlYWs7CisJY2FzZSBGU0NBQ0hFX09QX1NMT1c6CisJCV9kZWJ1ZygicXVldWUgc2xvdyIpOworCQlzbG93X3dvcmtfZW5xdWV1ZSgmb3AtPnNsb3dfd29yayk7CisJCWJyZWFrOworCWNhc2UgRlNDQUNIRV9PUF9NWVRIUkVBRDoKKwkJX2RlYnVnKCJxdWV1ZSBmb3IgY2FsbGVyJ3MgYXR0ZW50aW9uIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IFVuZXhwZWN0ZWQgb3AgdHlwZSAlbHgiLAorCQkgICAgICAgb3AtPmZsYWdzKTsKKwkJQlVHKCk7CisJCWJyZWFrOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbik7CkBAIC02Nyw2ICs2OSw4IEBACiBzdGF0aWMgdm9pZCBmc2NhY2hlX3J1bl9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKIAkJCSAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCiB7CisJZnNjYWNoZV9zZXRfb3Bfc3RhdGUob3AsICJSdW4iKTsKKwogCW9iamVjdC0+bl9pbl9wcm9ncmVzcysrOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPmZsYWdzKSkKIAkJd2FrZV91cF9iaXQoJm9wLT5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HKTsKQEAgLTg3LDkgKzkxLDEyIEBACiAKIAlfZW50ZXIoIntPQkoleCBPUCV4fSwiLCBvYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQpOwogCisJZnNjYWNoZV9zZXRfb3Bfc3RhdGUob3AsICJTdWJtaXRYIik7CisKIAlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CiAJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MpOwogCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2V4Y2x1c2l2ZSk7CisJQVNTRVJUKGxpc3RfZW1wdHkoJm9wLT5wZW5kX2xpbmspKTsKIAogCXJldCA9IC1FTk9CVUZTOwogCWlmIChmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgewpAQCAtMTkwLDkgKzE5NywxMiBAQAogCiAJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA+LCAwKTsKIAorCWZzY2FjaGVfc2V0X29wX3N0YXRlKG9wLCAiU3VibWl0Iik7CisKIAlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CiAJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MpOwogCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2V4Y2x1c2l2ZSk7CisJQVNTRVJUKGxpc3RfZW1wdHkoJm9wLT5wZW5kX2xpbmspKTsKIAogCW9zdGF0ZSA9IG9iamVjdC0+c3RhdGU7CiAJc21wX3JtYigpOwpAQCAtMjIyLDYgKzIzMiwxMSBAQAogCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CiAJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOwogCQlyZXQgPSAwOworCX0gZWxzZSBpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9EWUlORyB8fAorCQkgICBvYmplY3QtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HIHx8CisJCSAgIG9iamVjdC0+c3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkcpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcmVqZWN0ZWQpOworCQlyZXQgPSAtRU5PQlVGUzsKIAl9IGVsc2UgaWYgKCF0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZvYmplY3QtPmNhY2hlLT5mbGFncykpIHsKIAkJZnNjYWNoZV9yZXBvcnRfdW5leHBlY3RlZF9zdWJtaXNzaW9uKG9iamVjdCwgb3AsIG9zdGF0ZSk7CiAJCUFTU0VSVCghZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpOwpAQCAtMjY0LDEyICsyNzksNyBAQAogCQkJc3RvcCA9IHRydWU7CiAJCX0KIAkJbGlzdF9kZWxfaW5pdCgmb3AtPnBlbmRfbGluayk7Ci0JCW9iamVjdC0+bl9pbl9wcm9ncmVzcysrOwotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPmZsYWdzKSkKLQkJCXdha2VfdXBfYml0KCZvcC0+ZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORyk7Ci0JCWlmIChvcC0+cHJvY2Vzc29yKQotCQkJZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihvcCk7CisJCWZzY2FjaGVfcnVuX29wKG9iamVjdCwgb3ApOwogCiAJCS8qIHRoZSBwZW5kaW5nIHF1ZXVlIHdhcyBob2xkaW5nIGEgcmVmIG9uIHRoZSBvYmplY3QgKi8KIAkJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKQEAgLTI4Miw2ICsyOTIsMzYgQEAKIH0KIAogLyoKKyAqIGNhbmNlbCBhbiBvcGVyYXRpb24gdGhhdCdzIHBlbmRpbmcgb24gYW4gb2JqZWN0CisgKi8KK2ludCBmc2NhY2hlX2NhbmNlbF9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0gb3AtPm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCJPQkoleCBPUCV4fSIsIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQpOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJcmV0ID0gLUVCVVNZOworCWlmICghbGlzdF9lbXB0eSgmb3AtPnBlbmRfbGluaykpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfY2FuY2VsbGVkKTsKKwkJbGlzdF9kZWxfaW5pdCgmb3AtPnBlbmRfbGluayk7CisJCW9iamVjdC0+bl9vcHMtLTsKKwkJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfRVhDTFVTSVZFLCAmb3AtPmZsYWdzKSkKKwkJCW9iamVjdC0+bl9leGNsdXNpdmUtLTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+ZmxhZ3MpKQorCQkJd2FrZV91cF9iaXQoJm9wLT5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HKTsKKwkJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogcmVsZWFzZSBhbiBvcGVyYXRpb24KICAqIC0gcXVldWVzIHBlbmRpbmcgb3BzIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW4tcHJvZ3Jlc3Mgb3AKICAqLwpAQCAtMjk4LDYgKzMzOCw4IEBACiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZvcC0+dXNhZ2UpKQogCQlyZXR1cm47CiAKKwlmc2NhY2hlX3NldF9vcF9zdGF0ZShvcCwgIlB1dCIpOworCiAJX2RlYnVnKCJQVVQgT1AiKTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChGU0NBQ0hFX09QX0RFQUQsICZvcC0+ZmxhZ3MpKQogCQlCVUcoKTsKQEAgLTMxMSw2ICszNTMsOSBAQAogCiAJb2JqZWN0ID0gb3AtPm9iamVjdDsKIAorCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0RFQ19SRUFEX0NOVCwgJm9wLT5mbGFncykpCisJCWF0b21pY19kZWMoJm9iamVjdC0+bl9yZWFkcyk7CisKIAkvKiBub3cuLi4gd2UgbWF5IGdldCBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IHNwaW5sb2NrIGhlbGQsIHNvIHdlCiAJICogY29tcGxldGUgdGhlIGNsZWFudXAgaGVyZSBvbmx5IGlmIHdlIGNhbiBpbW1lZGlhdGVseSBhY3F1aXJlIHRoZQogCSAqIGxvY2ssIGFuZCBkZWZlciBpdCBvdGhlcndpc2UgKi8KQEAgLTQ1Miw4ICs0OTcsMjcgQEAKIAlfbGVhdmUoIiIpOwogfQogCisvKgorICogZGVzY3JpYmUgYW4gb3BlcmF0aW9uIGZvciBzbG93LXdvcmsgZGVidWdnaW5nCisgKi8KKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX1BST0MKK3N0YXRpYyB2b2lkIGZzY2FjaGVfb3BfZGVzYyhzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHNsb3dfd29yayk7CisKKwlzZXFfcHJpbnRmKG0sICJGU0M6IE9CSiV4IE9QJXg6ICVzLyVzIGZsPSVseCIsCisJCSAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsCisJCSAgIG9wLT5uYW1lLCBvcC0+c3RhdGUsIG9wLT5mbGFncyk7Cit9CisjZW5kaWYKKwogY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vcF9zbG93X3dvcmtfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZ2V0X3JlZgk9IGZzY2FjaGVfb3BfZ2V0X3JlZiwKIAkucHV0X3JlZgk9IGZzY2FjaGVfb3BfcHV0X3JlZiwKIAkuZXhlY3V0ZQk9IGZzY2FjaGVfb3BfZXhlY3V0ZSwKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX1BST0MKKwkuZGVzYwkJPSBmc2NhY2hlX29wX2Rlc2MsCisjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL3BhZ2UuYyBiL2ZzL2ZzY2FjaGUvcGFnZS5jCmluZGV4IDI1NjhlMGUuLmM1OThlYTQgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvcGFnZS5jCisrKyBiL2ZzL2ZzY2FjaGUvcGFnZS5jCkBAIC00MywxOCArNDMsMTAyIEBACiBFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUpOwogCiAvKgotICogbm90ZSB0aGF0IGEgcGFnZSBoYXMgZmluaXNoZWQgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUKKyAqIGRlY2lkZSB3aGV0aGVyIGEgcGFnZSBjYW4gYmUgcmVsZWFzZWQsIHBvc3NpYmx5IGJ5IGNhbmNlbGxpbmcgYSBzdG9yZSB0byBpdAorICogLSB3ZSdyZSBhbGxvd2VkIHRvIHNsZWVwIGlmIF9fR0ZQX1dBSVQgaXMgZmxhZ2dlZAogICovCi1zdGF0aWMgdm9pZCBmc2NhY2hlX2VuZF9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2Jvb2wgX19mc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBwYWdlICp4cGFnZTsKKwl2b2lkICp2YWw7CiAKLQlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisJX2VudGVyKCIlcCwlcCwleCIsIGNvb2tpZSwgcGFnZSwgZ2ZwKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwl2YWwgPSByYWRpeF90cmVlX2xvb2t1cCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4KTsKKwlpZiAoIXZhbCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVfdm1zY2FuX25vdF9zdG9yaW5nKTsKKwkJX19mc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBzZWUgaWYgdGhlIHBhZ2UgaXMgYWN0dWFsbHkgdW5kZXJnb2luZyBzdG9yYWdlIC0gaWYgc28gd2UgY2FuJ3QgZ2V0CisJICogcmlkIG9mIGl0IHRpbGwgdGhlIGNhY2hlIGhhcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJaWYgKHJhZGl4X3RyZWVfdGFnX2dldCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LAorCQkJICAgICAgIEZTQ0FDSEVfQ09PS0lFX1NUT1JJTkdfVEFHKSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBwYWdlX2J1c3k7CisJfQorCisJLyogdGhlIHBhZ2UgaXMgcGVuZGluZyBzdG9yYWdlLCBzbyB3ZSBhdHRlbXB0IHRvIGNhbmNlbCB0aGUgc3RvcmUgYW5kCisJICogZGlzY2FyZCB0aGUgc3RvcmUgcmVxdWVzdCBzbyB0aGF0IHRoZSBwYWdlIGNhbiBiZSByZWNsYWltZWQgKi8KKwlzcGluX2xvY2soJmNvb2tpZS0+c3RvcmVzX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKHJhZGl4X3RyZWVfdGFnX2dldCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LAorCQkJICAgICAgIEZTQ0FDSEVfQ09PS0lFX1NUT1JJTkdfVEFHKSkgeworCQkvKiB0aGUgcGFnZSBzdGFydGVkIHRvIHVuZGVyZ28gc3RvcmFnZSB3aGlsc3Qgd2Ugd2VyZSBsb29raW5nLAorCQkgKiBzbyBub3cgd2UgY2FuIG9ubHkgd2FpdCBvciByZXR1cm4gKi8KKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+c3RvcmVzX2xvY2spOworCQlnb3RvIHBhZ2VfYnVzeTsKKwl9CisKIAl4cGFnZSA9IHJhZGl4X3RyZWVfZGVsZXRlKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOwotCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOwotCUFTU0VSVCh4cGFnZSAhPSBOVUxMKTsKKwlzcGluX3VubG9jaygmY29va2llLT5zdG9yZXNfbG9jayk7CisKKwlpZiAoeHBhZ2UpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVfdm1zY2FuX2NhbmNlbGxlZCk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3JlX3JhZGl4X2RlbGV0ZXMpOworCQlBU1NFUlRDTVAoeHBhZ2UsID09LCBwYWdlKTsKKwl9IGVsc2UgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV92bXNjYW5fZ29uZSk7CisJfQogCiAJd2FrZV91cF9iaXQoJmNvb2tpZS0+ZmxhZ3MsIDApOworCWlmICh4cGFnZSkKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHhwYWdlKTsKKwlfX2ZzY2FjaGVfdW5jYWNoZV9wYWdlKGNvb2tpZSwgcGFnZSk7CisJcmV0dXJuIHRydWU7CisKK3BhZ2VfYnVzeToKKwkvKiB3ZSBtaWdodCB3YW50IHRvIHdhaXQgaGVyZSwgYnV0IHRoYXQgY291bGQgZGVhZGxvY2sgdGhlIGFsbG9jYXRvciBhcworCSAqIHRoZSBzbG93LXdvcmsgdGhyZWFkcyB3cml0aW5nIHRvIHRoZSBjYWNoZSBtYXkgYWxsIGVuZCB1cCBzbGVlcGluZworCSAqIG9uIG1lbW9yeSBhbGxvY2F0aW9uICovCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVfdm1zY2FuX2J1c3kpOworCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZSk7CisKKy8qCisgKiBub3RlIHRoYXQgYSBwYWdlIGhhcyBmaW5pc2hlZCBiZWluZyB3cml0dGVuIHRvIHRoZSBjYWNoZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX2VuZF9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llOworCXN0cnVjdCBwYWdlICp4cGFnZSA9IE5VTEw7CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJY29va2llID0gb2JqZWN0LT5jb29raWU7CisJaWYgKGNvb2tpZSkgeworCQkvKiBkZWxldGUgdGhlIHBhZ2UgZnJvbSB0aGUgdHJlZSBpZiBpdCBpcyBub3cgbm8gbG9uZ2VyCisJCSAqIHBlbmRpbmcgKi8KKwkJc3Bpbl9sb2NrKCZjb29raWUtPnN0b3Jlc19sb2NrKTsKKwkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCQkgICAgIEZTQ0FDSEVfQ09PS0lFX1NUT1JJTkdfVEFHKTsKKwkJaWYgKCFyYWRpeF90cmVlX3RhZ19nZXQoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCQkJRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcpKSB7CisJCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV9yYWRpeF9kZWxldGVzKTsKKwkJCXhwYWdlID0gcmFkaXhfdHJlZV9kZWxldGUoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+c3RvcmVzX2xvY2spOworCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywgMCk7CisJfQorCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCWlmICh4cGFnZSkKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHhwYWdlKTsKIH0KIAogLyoKQEAgLTYzLDE0ICsxNDcsMjEgQEAKIHN0YXRpYyB2b2lkIGZzY2FjaGVfYXR0cl9jaGFuZ2VkX29wKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCiB7CiAJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QgPSBvcC0+b2JqZWN0OworCWludCByZXQ7CiAKIAlfZW50ZXIoIntPQkoleCBPUCV4fSIsIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CiAKIAlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHMpOwogCi0JaWYgKGZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpICYmCi0JICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+YXR0cl9jaGFuZ2VkKG9iamVjdCkgPCAwKQotCQlmc2NhY2hlX2Fib3J0X29iamVjdChvYmplY3QpOworCWlmIChmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgeworCQlmc2NhY2hlX3NldF9vcF9zdGF0ZShvcCwgIkNhbGxGUyIpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfYXR0cl9jaGFuZ2VkKTsKKwkJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5hdHRyX2NoYW5nZWQob2JqZWN0KTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfYXR0cl9jaGFuZ2VkKTsKKwkJZnNjYWNoZV9zZXRfb3Bfc3RhdGUob3AsICJEb25lIik7CisJCWlmIChyZXQgPCAwKQorCQkJZnNjYWNoZV9hYm9ydF9vYmplY3Qob2JqZWN0KTsKKwl9CiAKIAlfbGVhdmUoIiIpOwogfQpAQCAtOTksNiArMTkwLDcgQEAKIAlmc2NhY2hlX29wZXJhdGlvbl9pbml0KG9wLCBOVUxMKTsKIAlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3cob3AsIGZzY2FjaGVfYXR0cl9jaGFuZ2VkX29wKTsKIAlvcC0+ZmxhZ3MgPSBGU0NBQ0hFX09QX1NMT1cgfCAoMSA8PCBGU0NBQ0hFX09QX0VYQ0xVU0lWRSk7CisJZnNjYWNoZV9zZXRfb3BfbmFtZShvcCwgIkF0dHIiKTsKIAogCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKIApAQCAtMTg0LDYgKzI3Niw3IEBACiAJb3AtPnN0YXJ0X3RpbWUJPSBqaWZmaWVzOwogCUlOSVRfV09SSygmb3AtPm9wLmZhc3Rfd29yaywgZnNjYWNoZV9yZXRyaWV2YWxfd29yayk7CiAJSU5JVF9MSVNUX0hFQUQoJm9wLT50b19kbyk7CisJZnNjYWNoZV9zZXRfb3BfbmFtZSgmb3AtPm9wLCAiUmV0ciIpOwogCXJldHVybiBvcDsKIH0KIApAQCAtMjIxLDYgKzMxNCw0MyBAQAogfQogCiAvKgorICogd2FpdCBmb3IgYW4gb2JqZWN0IHRvIGJlY29tZSBhY3RpdmUgKG9yIGRlYWQpCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV93YWl0X2Zvcl9yZXRyaWV2YWxfYWN0aXZhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJCSBzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCQkJIGF0b21pY190ICpzdGF0X29wX3dhaXRzLAorCQkJCQkJIGF0b21pY190ICpzdGF0X29iamVjdF9kZWFkKQoreworCWludCByZXQ7CisKKwlpZiAoIXRlc3RfYml0KEZTQ0FDSEVfT1BfV0FJVElORywgJm9wLT5vcC5mbGFncykpCisJCWdvdG8gY2hlY2tfaWZfZGVhZDsKKworCV9kZWJ1ZygiPj4+IFdUIik7CisJZnNjYWNoZV9zdGF0KHN0YXRfb3Bfd2FpdHMpOworCWlmICh3YWl0X29uX2JpdCgmb3AtPm9wLmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQlmc2NhY2hlX3dhaXRfYml0X2ludGVycnVwdGlibGUsCisJCQlUQVNLX0lOVEVSUlVQVElCTEUpIDwgMCkgeworCQlyZXQgPSBmc2NhY2hlX2NhbmNlbF9vcCgmb3AtPm9wKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCQkvKiBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIHF1ZXVlIGJ5IGFub3RoZXIgcGFydHksCisJCSAqIHNvIHdlIHNob3VsZCBnZXQgdG8gcnVuIHNob3J0bHkgKi8KKwkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwl9CisJX2RlYnVnKCI8PDwgR08iKTsKKworY2hlY2tfaWZfZGVhZDoKKwlpZiAodW5saWtlbHkoZnNjYWNoZV9vYmplY3RfaXNfZGVhZChvYmplY3QpKSkgeworCQlmc2NhY2hlX3N0YXQoc3RhdF9vYmplY3RfZGVhZCk7CisJCXJldHVybiAtRU5PQlVGUzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiByZWFkIGEgcGFnZSBmcm9tIHRoZSBjYWNoZSBvciBhbGxvY2F0ZSBhIGJsb2NrIGluIHdoaWNoIHRvIHN0b3JlIGl0CiAgKiAtIHdlIHJldHVybjoKICAqICAgLUVOT01FTQktIG91dCBvZiBtZW1vcnksIG5vdGhpbmcgZG9uZQpAQCAtMjU3LDYgKzM4Nyw3IEBACiAJCV9sZWF2ZSgiID0gLUVOT01FTSIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJZnNjYWNoZV9zZXRfb3BfbmFtZSgmb3AtPm9wLCAiUmV0clJBMSIpOwogCiAJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOwogCkBAIC0yNjcsNiArMzk4LDkgQEAKIAogCUFTU0VSVENNUChvYmplY3QtPnN0YXRlLCA+LCBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQKTsKIAorCWF0b21pY19pbmMoJm9iamVjdC0+bl9yZWFkcyk7CisJc2V0X2JpdChGU0NBQ0hFX09QX0RFQ19SRUFEX0NOVCwgJm9wLT5vcC5mbGFncyk7CisKIAlpZiAoZnNjYWNoZV9zdWJtaXRfb3Aob2JqZWN0LCAmb3AtPm9wKSA8IDApCiAJCWdvdG8gbm9idWZzX3VubG9jazsKIAlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKQEAgLTI3OSwyMyArNDEzLDI3IEBACiAKIAkvKiB3ZSB3YWl0IGZvciB0aGUgb3BlcmF0aW9uIHRvIGJlY29tZSBhY3RpdmUsIGFuZCB0aGVuIHByb2Nlc3MgaXQKIAkgKiAqaGVyZSosIGluIHRoaXMgdGhyZWFkLCBhbmQgbm90IGluIHRoZSB0aHJlYWQgcG9vbCAqLwotCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7Ci0JCV9kZWJ1ZygiPj4+IFdUIik7Ci0JCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0cyk7Ci0JCXdhaXRfb25fYml0KCZvcC0+b3AuZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORywKLQkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCV9kZWJ1ZygiPDw8IEdPIik7Ci0JfQorCXJldCA9IGZzY2FjaGVfd2FpdF9mb3JfcmV0cmlldmFsX2FjdGl2YXRpb24oCisJCW9iamVjdCwgb3AsCisJCV9fZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSwKKwkJX19mc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29iamVjdF9kZWFkKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CiAKIAkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCiAJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfYWxsb2NhdGVfcGFnZSk7CiAJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfYWxsb2NhdGVfcGFnZSk7CiAJCWlmIChyZXQgPT0gMCkKIAkJCXJldCA9IC1FTk9EQVRBOwogCX0gZWxzZSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NvcF9yZWFkX29yX2FsbG9jX3BhZ2UpOwogCQlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPnJlYWRfb3JfYWxsb2NfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcmVhZF9vcl9hbGxvY19wYWdlKTsKIAl9CiAKK2Vycm9yOgogCWlmIChyZXQgPT0gLUVOT01FTSkKIAkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CiAJZWxzZSBpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKQEAgLTM0Nyw3ICs0ODUsNiBAQAogCQkJCSAgdm9pZCAqY29udGV4dCwKIAkJCQkgIGdmcF90IGdmcCkKIHsKLQlmc2NhY2hlX3BhZ2VzX3JldHJpZXZhbF9mdW5jX3QgZnVuYzsKIAlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOwogCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OwogCWludCByZXQ7CkBAIC0zNjksNiArNTA2LDcgQEAKIAlvcCA9IGZzY2FjaGVfYWxsb2NfcmV0cmlldmFsKG1hcHBpbmcsIGVuZF9pb19mdW5jLCBjb250ZXh0KTsKIAlpZiAoIW9wKQogCQlyZXR1cm4gLUVOT01FTTsKKwlmc2NhY2hlX3NldF9vcF9uYW1lKCZvcC0+b3AsICJSZXRyUkFOIik7CiAKIAlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CiAKQEAgLTM3Nyw2ICs1MTUsOSBAQAogCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAogCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKIAorCWF0b21pY19pbmMoJm9iamVjdC0+bl9yZWFkcyk7CisJc2V0X2JpdChGU0NBQ0hFX09QX0RFQ19SRUFEX0NOVCwgJm9wLT5vcC5mbGFncyk7CisKIAlpZiAoZnNjYWNoZV9zdWJtaXRfb3Aob2JqZWN0LCAmb3AtPm9wKSA8IDApCiAJCWdvdG8gbm9idWZzX3VubG9jazsKIAlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKQEAgLTM4OSwyMSArNTMwLDI3IEBACiAKIAkvKiB3ZSB3YWl0IGZvciB0aGUgb3BlcmF0aW9uIHRvIGJlY29tZSBhY3RpdmUsIGFuZCB0aGVuIHByb2Nlc3MgaXQKIAkgKiAqaGVyZSosIGluIHRoaXMgdGhyZWFkLCBhbmQgbm90IGluIHRoZSB0aHJlYWQgcG9vbCAqLwotCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7Ci0JCV9kZWJ1ZygiPj4+IFdUIik7Ci0JCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0cyk7Ci0JCXdhaXRfb25fYml0KCZvcC0+b3AuZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORywKLQkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCV9kZWJ1ZygiPDw8IEdPIik7Ci0JfQorCXJldCA9IGZzY2FjaGVfd2FpdF9mb3JfcmV0cmlldmFsX2FjdGl2YXRpb24oCisJCW9iamVjdCwgb3AsCisJCV9fZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSwKKwkJX19mc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29iamVjdF9kZWFkKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CiAKIAkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCi0JaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKLQkJZnVuYyA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZXM7Ci0JZWxzZQotCQlmdW5jID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5yZWFkX29yX2FsbG9jX3BhZ2VzOwotCXJldCA9IGZ1bmMob3AsIHBhZ2VzLCBucl9wYWdlcywgZ2ZwKTsKKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NvcF9hbGxvY2F0ZV9wYWdlcyk7CisJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZXMoCisJCQlvcCwgcGFnZXMsIG5yX3BhZ2VzLCBnZnApOworCQlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9hbGxvY2F0ZV9wYWdlcyk7CisJfSBlbHNlIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3JlYWRfb3JfYWxsb2NfcGFnZXMpOworCQlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPnJlYWRfb3JfYWxsb2NfcGFnZXMoCisJCQlvcCwgcGFnZXMsIG5yX3BhZ2VzLCBnZnApOworCQlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9yZWFkX29yX2FsbG9jX3BhZ2VzKTsKKwl9CiAKK2Vycm9yOgogCWlmIChyZXQgPT0gLUVOT01FTSkKIAkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CiAJZWxzZSBpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKQEAgLTQ2MSw2ICs2MDgsNyBAQAogCW9wID0gZnNjYWNoZV9hbGxvY19yZXRyaWV2YWwocGFnZS0+bWFwcGluZywgTlVMTCwgTlVMTCk7CiAJaWYgKCFvcCkKIAkJcmV0dXJuIC1FTk9NRU07CisJZnNjYWNoZV9zZXRfb3BfbmFtZSgmb3AtPm9wLCAiUmV0ckFMMSIpOwogCiAJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOwogCkBAIC00NzUsMTggKzYyMywyMiBAQAogCiAJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2Nfb3BzKTsKIAotCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7Ci0JCV9kZWJ1ZygiPj4+IFdUIik7Ci0JCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzKTsKLQkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAotCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJX2RlYnVnKCI8PDwgR08iKTsKLQl9CisJcmV0ID0gZnNjYWNoZV93YWl0X2Zvcl9yZXRyaWV2YWxfYWN0aXZhdGlvbigKKwkJb2JqZWN0LCBvcCwKKwkJX19mc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY19vcF93YWl0cyksCisJCV9fZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX29iamVjdF9kZWFkKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CiAKIAkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX2FsbG9jYXRlX3BhZ2UpOwogCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwlmc2NhY2hlX3N0YXRfZCgmZnNjYWNoZV9uX2NvcF9hbGxvY2F0ZV9wYWdlKTsKIAotCWlmIChyZXQgPCAwKQorZXJyb3I6CisJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jc19pbnRyKTsKKwllbHNlIGlmIChyZXQgPCAwKQogCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzKTsKIAllbHNlCiAJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jc19vayk7CkBAIC01MjEsNyArNjczLDcgQEAKIAlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCA9CiAJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UsIG9wKTsKIAlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9IG9wLT5vcC5vYmplY3Q7Ci0Jc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBuOwogCXZvaWQgKnJlc3VsdHNbMV07CkBAIC01MjksMTYgKzY4MSwxOSBAQAogCiAJX2VudGVyKCJ7T1AleCwlZH0iLCBvcC0+b3AuZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+b3AudXNhZ2UpKTsKIAotCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKLQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJZnNjYWNoZV9zZXRfb3Bfc3RhdGUoJm9wLT5vcCwgIkdldFBhZ2UiKTsKIAotCWlmICghZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpIHsKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJY29va2llID0gb2JqZWN0LT5jb29raWU7CisKKwlpZiAoIWZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpIHx8ICFjb29raWUpIHsKIAkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOwogCQlfbGVhdmUoIiIpOwogCQlyZXR1cm47CiAJfQogCisJc3Bpbl9sb2NrKCZjb29raWUtPnN0b3Jlc19sb2NrKTsKKwogCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3JlX2NhbGxzKTsKIAogCS8qIGZpbmQgYSBwYWdlIHRvIHN0b3JlICovCkBAIC01NDksMjMgKzcwNCwzNSBAQAogCQlnb3RvIHN1cGVyc2VkZWQ7CiAJcGFnZSA9IHJlc3VsdHNbMF07CiAJX2RlYnVnKCJnYW5nICVkIFslbHhdIiwgbiwgcGFnZS0+aW5kZXgpOwotCWlmIChwYWdlLT5pbmRleCA+IG9wLT5zdG9yZV9saW1pdCkKKwlpZiAocGFnZS0+aW5kZXggPiBvcC0+c3RvcmVfbGltaXQpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVfcGFnZXNfb3Zlcl9saW1pdCk7CiAJCWdvdG8gc3VwZXJzZWRlZDsKLQotCXJhZGl4X3RyZWVfdGFnX2NsZWFyKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgsCi0JCQkgICAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKLQotCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCX0KIAogCWlmIChwYWdlKSB7CisJCXJhZGl4X3RyZWVfdGFnX3NldCgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4LAorCQkJCSAgIEZTQ0FDSEVfQ09PS0lFX1NUT1JJTkdfVEFHKTsKKwkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCQkgICAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKKwl9CisKKwlzcGluX3VubG9jaygmY29va2llLT5zdG9yZXNfbG9jayk7CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlpZiAocGFnZSkgeworCQlmc2NhY2hlX3NldF9vcF9zdGF0ZSgmb3AtPm9wLCAiU3RvcmUiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVfcGFnZXMpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3Bfd3JpdGVfcGFnZSk7CiAJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+d3JpdGVfcGFnZShvcCwgcGFnZSk7Ci0JCWZzY2FjaGVfZW5kX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlpZiAocmV0IDwgMCkKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3Bfd3JpdGVfcGFnZSk7CisJCWZzY2FjaGVfc2V0X29wX3N0YXRlKCZvcC0+b3AsICJFbmRXcml0ZSIpOworCQlmc2NhY2hlX2VuZF9wYWdlX3dyaXRlKG9iamVjdCwgcGFnZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlmc2NhY2hlX3NldF9vcF9zdGF0ZSgmb3AtPm9wLCAiQWJvcnQiKTsKIAkJCWZzY2FjaGVfYWJvcnRfb2JqZWN0KG9iamVjdCk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCWZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oJm9wLT5vcCk7CisJCX0KIAl9CiAKIAlfbGVhdmUoIiIpOwpAQCAtNTc1LDkgKzc0Miw5IEBACiAJLyogdGhpcyB3cml0ZXIgaXMgZ29pbmcgYXdheSBhbmQgdGhlcmUgYXJlbid0IGFueSBtb3JlIHRoaW5ncyB0bwogCSAqIHdyaXRlICovCiAJX2RlYnVnKCJjZWFzZSIpOworCXNwaW5fdW5sb2NrKCZjb29raWUtPnN0b3Jlc19sb2NrKTsKIAljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpOwogCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOwogCV9sZWF2ZSgiIik7CiB9CiAKQEAgLTYzNCw2ICs4MDEsNyBAQAogCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV9yZWxlYXNlX3dyaXRlX29wKTsKIAlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3coJm9wLT5vcCwgZnNjYWNoZV93cml0ZV9vcCk7CiAJb3AtPm9wLmZsYWdzID0gRlNDQUNIRV9PUF9TTE9XIHwgKDEgPDwgRlNDQUNIRV9PUF9XQUlUSU5HKTsKKwlmc2NhY2hlX3NldF9vcF9uYW1lKCZvcC0+b3AsICJXcml0ZTEiKTsKIAogCXJldCA9IHJhZGl4X3RyZWVfcHJlbG9hZChnZnAgJiB+X19HRlBfSElHSE1FTSk7CiAJaWYgKHJldCA8IDApCkBAIC02NTIsNiArODIwLDcgQEAKIAkvKiBhZGQgdGhlIHBhZ2UgdG8gdGhlIHBlbmRpbmctc3RvcmFnZSByYWRpeCB0cmVlIG9uIHRoZSBiYWNraW5nCiAJICogb2JqZWN0ICovCiAJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCXNwaW5fbG9jaygmY29va2llLT5zdG9yZXNfbG9jayk7CiAKIAlfZGVidWcoInN0b3JlIGxpbWl0ICVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKSBvYmplY3QtPnN0b3JlX2xpbWl0KTsKIApAQCAtNjcyLDYgKzg0MSw3IEBACiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpKQogCQlnb3RvIGFscmVhZHlfcGVuZGluZzsKIAorCXNwaW5fdW5sb2NrKCZjb29raWUtPnN0b3Jlc19sb2NrKTsKIAlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKIAogCW9wLT5vcC5kZWJ1Z19pZAk9IGF0b21pY19pbmNfcmV0dXJuKCZmc2NhY2hlX29wX2RlYnVnX2lkKTsKQEAgLTY5Myw2ICs4NjMsNyBAQAogYWxyZWFkeV9xdWV1ZWQ6CiAJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzX2FnYWluKTsKIGFscmVhZHlfcGVuZGluZzoKKwlzcGluX3VubG9jaygmY29va2llLT5zdG9yZXNfbG9jayk7CiAJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CiAJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwpAQCAtNzAyLDcgKzg3Myw5IEBACiAJcmV0dXJuIDA7CiAKIHN1Ym1pdF9mYWlsZWQ6CisJc3Bpbl9sb2NrKCZjb29raWUtPnN0b3Jlc19sb2NrKTsKIAlyYWRpeF90cmVlX2RlbGV0ZSgmY29va2llLT5zdG9yZXMsIHBhZ2UtPmluZGV4KTsKKwlzcGluX3VubG9jaygmY29va2llLT5zdG9yZXNfbG9jayk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCXJldCA9IC1FTk9CVUZTOwogCWdvdG8gbm9idWZzOwpAQCAtNzYzLDcgKzkzNiw5IEBACiAJaWYgKFRlc3RDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpICYmCiAJICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+dW5jYWNoZV9wYWdlKSB7CiAJCS8qIHRoZSBjYWNoZSBiYWNrZW5kIHJlbGVhc2VzIHRoZSBjb29raWUgbG9jayAqLworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfdW5jYWNoZV9wYWdlKTsKIAkJb2JqZWN0LT5jYWNoZS0+b3BzLT51bmNhY2hlX3BhZ2Uob2JqZWN0LCBwYWdlKTsKKwkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfdW5jYWNoZV9wYWdlKTsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9wcm9jLmMgYi9mcy9mc2NhY2hlL3Byb2MuYwppbmRleCBiZWVhYjQ0Li4xZDllNDk1IDEwMDY0NAotLS0gYS9mcy9mc2NhY2hlL3Byb2MuYworKysgYi9mcy9mc2NhY2hlL3Byb2MuYwpAQCAtMzcsMTAgKzM3LDIwIEBACiAJCWdvdG8gZXJyb3JfaGlzdG9ncmFtOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVAorCWlmICghcHJvY19jcmVhdGUoImZzL2ZzY2FjaGUvb2JqZWN0cyIsIFNfSUZSRUcgfCAwNDQ0LCBOVUxMLAorCQkJICZmc2NhY2hlX29iamxpc3RfZm9wcykpCisJCWdvdG8gZXJyb3Jfb2JqZWN0czsKKyNlbmRpZgorCiAJX2xlYXZlKCIgPSAwIik7CiAJcmV0dXJuIDA7CiAKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVAorZXJyb3Jfb2JqZWN0czoKKyNlbmRpZgogI2lmZGVmIENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTQorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlL2hpc3RvZ3JhbSIsIE5VTEwpOwogZXJyb3JfaGlzdG9ncmFtOgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKQEAgLTU4LDYgKzY4LDkgQEAKICAqLwogdm9pZCBmc2NhY2hlX3Byb2NfY2xlYW51cCh2b2lkKQogeworI2lmZGVmIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUvb2JqZWN0cyIsIE5VTEwpOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNCiAJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUvaGlzdG9ncmFtIiwgTlVMTCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvc3RhdHMuYyBiL2ZzL2ZzY2FjaGUvc3RhdHMuYwppbmRleCA2NWRlYjk5Li40NjQzNWYzYSAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9zdGF0cy5jCisrKyBiL2ZzL2ZzY2FjaGUvc3RhdHMuYwpAQCAtMjUsNiArMjUsOCBAQAogYXRvbWljX3QgZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2U7CiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcmVsZWFzZTsKIGF0b21pY190IGZzY2FjaGVfbl9vcF9nYzsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9jYW5jZWxsZWQ7CithdG9taWNfdCBmc2NhY2hlX25fb3BfcmVqZWN0ZWQ7CiAKIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWQ7CiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX29rOwpAQCAtMzYsNiArMzgsOCBAQAogYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vazsKIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfd2FpdDsKIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19pbnRyOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vYmplY3RfZGVhZDsKIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcHM7CiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2Nfb3Bfd2FpdHM7CiAKQEAgLTQ2LDYgKzUwLDcgQEAKIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmczsKIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHI7CiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbTsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX29iamVjdF9kZWFkOwogYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcHM7CiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzOwogCkBAIC01Niw2ICs2MSwxNCBAQAogYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vb207CiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfb3BzOwogYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX3BhZ2VzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX3JhZGl4X2RlbGV0ZXM7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfcGFnZXNfb3Zlcl9saW1pdDsKKworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX3Ztc2Nhbl9ub3Rfc3RvcmluZzsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZV92bXNjYW5fZ29uZTsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZV92bXNjYW5fYnVzeTsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZV92bXNjYW5fY2FuY2VsbGVkOwogCiBhdG9taWNfdCBmc2NhY2hlX25fbWFya3M7CiBhdG9taWNfdCBmc2NhY2hlX25fdW5jYWNoZXM7CkBAIC03NCw2ICs4Nyw3IEBACiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzOwogYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsOwogYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc193YWl0Y3J0OworYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc19yZXRpcmU7CiAKIGF0b21pY190IGZzY2FjaGVfbl9jb29raWVfaW5kZXg7CiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX2RhdGE7CkBAIC04NCw2ICs5OCw3IEBACiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHM7CiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmU7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfdGltZWRfb3V0OwogYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkOwogYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9hdmFpbDsKIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfZGVhZDsKQEAgLTkzLDYgKzEwOCwyMyBAQAogYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZTsKIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZTsKIAorYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9hbGxvY19vYmplY3Q7CithdG9taWNfdCBmc2NhY2hlX25fY29wX2xvb2t1cF9vYmplY3Q7CithdG9taWNfdCBmc2NhY2hlX25fY29wX2xvb2t1cF9jb21wbGV0ZTsKK2F0b21pY190IGZzY2FjaGVfbl9jb3BfZ3JhYl9vYmplY3Q7CithdG9taWNfdCBmc2NhY2hlX25fY29wX3VwZGF0ZV9vYmplY3Q7CithdG9taWNfdCBmc2NhY2hlX25fY29wX2Ryb3Bfb2JqZWN0OworYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9wdXRfb2JqZWN0OworYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9zeW5jX2NhY2hlOworYXRvbWljX3QgZnNjYWNoZV9uX2NvcF9hdHRyX2NoYW5nZWQ7CithdG9taWNfdCBmc2NhY2hlX25fY29wX3JlYWRfb3JfYWxsb2NfcGFnZTsKK2F0b21pY190IGZzY2FjaGVfbl9jb3BfcmVhZF9vcl9hbGxvY19wYWdlczsKK2F0b21pY190IGZzY2FjaGVfbl9jb3BfYWxsb2NhdGVfcGFnZTsKK2F0b21pY190IGZzY2FjaGVfbl9jb3BfYWxsb2NhdGVfcGFnZXM7CithdG9taWNfdCBmc2NhY2hlX25fY29wX3dyaXRlX3BhZ2U7CithdG9taWNfdCBmc2NhY2hlX25fY29wX3VuY2FjaGVfcGFnZTsKK2F0b21pY190IGZzY2FjaGVfbl9jb3BfZGlzc29jaWF0ZV9wYWdlczsKKwogLyoKICAqIGRpc3BsYXkgdGhlIGdlbmVyYWwgc3RhdGlzdGljcwogICovCkBAIC0xMjksMTAgKzE2MSwxMSBAQAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmcyksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfb29tKSk7CiAKLQlzZXFfcHJpbnRmKG0sICJMb29rdXBzOiBuPSV1IG5lZz0ldSBwb3M9JXUgY3J0PSV1XG4iLAorCXNlcV9wcmludGYobSwgIkxvb2t1cHM6IG49JXUgbmVnPSV1IHBvcz0ldSBjcnQ9JXUgdG1vPSV1XG4iLAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3Vwc19uZWdhdGl2ZSksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3RpbWVkX291dCksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2NyZWF0ZWQpKTsKIAogCXNlcV9wcmludGYobSwgIlVwZGF0ZXM6IG49JXUgbnVsPSV1IHJ1bj0ldVxuIiwKQEAgLTE0MCwxMCArMTczLDExIEBACiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdXBkYXRlc19udWxsKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl91cGRhdGVzX3J1bikpOwogCi0Jc2VxX3ByaW50ZihtLCAiUmVsaW5xczogbj0ldSBudWw9JXUgd2NyPSV1XG4iLAorCXNlcV9wcmludGYobSwgIlJlbGlucXM6IG49JXUgbnVsPSV1IHdjcj0ldSBydHI9JXVcbiIsCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbCksCi0JCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3dhaXRjcnQpKTsKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3JldGlyZSkpOwogCiAJc2VxX3ByaW50ZihtLCAiQXR0ckNoZzogbj0ldSBvaz0ldSBuYmY9JXUgb29tPSV1IHJ1bj0ldVxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWQpLApAQCAtMTUyLDE0ICsxODYsMTYgQEAKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9tZW0pLAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9jYWxscykpOwogCi0Jc2VxX3ByaW50ZihtLCAiQWxsb2NzIDogbj0ldSBvaz0ldSB3dD0ldSBuYmY9JXVcbiIsCisJc2VxX3ByaW50ZihtLCAiQWxsb2NzIDogbj0ldSBvaz0ldSB3dD0ldSBuYmY9JXUgaW50PSV1XG4iLAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jcyksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX29rKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY3Nfd2FpdCksCi0JCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcykpOwotCXNlcV9wcmludGYobSwgIkFsbG9jcyA6IG9wcz0ldSBvd3Q9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX2ludHIpKTsKKwlzZXFfcHJpbnRmKG0sICJBbGxvY3MgOiBvcHM9JXUgb3d0PSV1IGFidD0ldVxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY19vcHMpLAotCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzKSk7CisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2Nfb3Bfd2FpdHMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jc19vYmplY3RfZGVhZCkpOwogCiAJc2VxX3ByaW50ZihtLCAiUmV0cnZsczogbj0ldSBvaz0ldSB3dD0ldSBub2Q9JXUgbmJmPSV1IgogCQkgICAiIGludD0ldSBvb209JXVcbiIsCkBAIC0xNzAsOSArMjA2LDEwIEBACiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpLAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfaW50ciksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSkpOwotCXNlcV9wcmludGYobSwgIlJldHJ2bHM6IG9wcz0ldSBvd3Q9JXVcbiIsCisJc2VxX3ByaW50ZihtLCAiUmV0cnZsczogb3BzPSV1IG93dD0ldSBhYnQ9JXVcbiIsCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wcyksCi0JCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSk7CisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29iamVjdF9kZWFkKSk7CiAKIAlzZXFfcHJpbnRmKG0sICJTdG9yZXMgOiBuPSV1IG9rPSV1IGFnbj0ldSBuYmY9JXUgb29tPSV1XG4iLAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlcyksCkBAIC0xODAsMTggKzIxNyw0OSBAQAogCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19hZ2FpbiksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX25vYnVmcyksCiAJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX29vbSkpOwotCXNlcV9wcmludGYobSwgIlN0b3JlcyA6IG9wcz0ldSBydW49JXVcbiIsCisJc2VxX3ByaW50ZihtLCAiU3RvcmVzIDogb3BzPSV1IHJ1bj0ldSBwZ3M9JXUgcnhkPSV1IG9sbT0ldVxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZV9vcHMpLAotCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX2NhbGxzKSk7CisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVfY2FsbHMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX3BhZ2VzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZV9yYWRpeF9kZWxldGVzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZV9wYWdlc19vdmVyX2xpbWl0KSk7CiAKLQlzZXFfcHJpbnRmKG0sICJPcHMgICAgOiBwZW5kPSV1IHJ1bj0ldSBlbnE9JXVcbiIsCisJc2VxX3ByaW50ZihtLCAiVm1TY2FuIDogbm9zPSV1IGdvbj0ldSBic3k9JXUgY2FuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX3Ztc2Nhbl9ub3Rfc3RvcmluZyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVfdm1zY2FuX2dvbmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX3Ztc2Nhbl9idXN5KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZV92bXNjYW5fY2FuY2VsbGVkKSk7CisKKwlzZXFfcHJpbnRmKG0sICJPcHMgICAgOiBwZW5kPSV1IHJ1bj0ldSBlbnE9JXUgY2FuPSV1IHJlaj0ldVxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9wZW5kKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9ydW4pLAotCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2VucXVldWUpKTsKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9lbnF1ZXVlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9jYW5jZWxsZWQpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX3JlamVjdGVkKSk7CiAJc2VxX3ByaW50ZihtLCAiT3BzICAgIDogZGZyPSV1IHJlbD0ldSBnYz0ldVxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9kZWZlcnJlZF9yZWxlYXNlKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9yZWxlYXNlKSwKIAkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9nYykpOworCisJc2VxX3ByaW50ZihtLCAiQ2FjaGVPcDogYWxvPSVkIGx1bz0lZCBsdWM9JWQgZ3JvPSVkXG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF9hbGxvY19vYmplY3QpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF9sb29rdXBfb2JqZWN0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfbG9va3VwX2NvbXBsZXRlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfZ3JhYl9vYmplY3QpKTsKKwlzZXFfcHJpbnRmKG0sICJDYWNoZU9wOiB1cG89JWQgZHJvPSVkIHB0bz0lZCBhdGM9JWQgc3luPSVkXG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF91cGRhdGVfb2JqZWN0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfZHJvcF9vYmplY3QpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF9wdXRfb2JqZWN0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfYXR0cl9jaGFuZ2VkKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3Bfc3luY19jYWNoZSkpOworCXNlcV9wcmludGYobSwgIkNhY2hlT3A6IHJhcD0lZCByYXM9JWQgYWxwPSVkIGFscz0lZCB3cnA9JWQgdWNwPSVkIGRzcD0lZFxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfcmVhZF9vcl9hbGxvY19wYWdlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb3BfcmVhZF9vcl9hbGxvY19wYWdlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29wX2FsbG9jYXRlX3BhZ2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF9hbGxvY2F0ZV9wYWdlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29wX3dyaXRlX3BhZ2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF91bmNhY2hlX3BhZ2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NvcF9kaXNzb2NpYXRlX3BhZ2VzKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDk5MmY2YzkuLjQ3ODdhZTYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMzg1LDYgKzM4NSw5IEBACiAJaWYgKGZjLT5ub19jcmVhdGUpCiAJCXJldHVybiAtRU5PU1lTOwogCisJaWYgKGZsYWdzICYgT19ESVJFQ1QpCisJCXJldHVybiAtRUlOVkFMOworCiAJZm9yZ2V0X3JlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CiAJaWYgKElTX0VSUihmb3JnZXRfcmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIoZm9yZ2V0X3JlcSk7CkBAIC03MTIsOCArNzE1LDEwIEBACiAJCQlmdXNlX2ludmFsaWRhdGVfYXR0cihuZXdkaXIpOwogCiAJCS8qIG5ld2VudCB3aWxsIGVuZCB1cCBuZWdhdGl2ZSAqLwotCQlpZiAobmV3ZW50LT5kX2lub2RlKQorCQlpZiAobmV3ZW50LT5kX2lub2RlKSB7CisJCQlmdXNlX2ludmFsaWRhdGVfYXR0cihuZXdlbnQtPmRfaW5vZGUpOwogCQkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKG5ld2VudCk7CisJCX0KIAl9IGVsc2UgaWYgKGVyciA9PSAtRUlOVFIpIHsKIAkJLyogSWYgcmVxdWVzdCB3YXMgaW50ZXJydXB0ZWQsIERFSVRZIG9ubHkga25vd3MgaWYgdGhlCiAJCSAgIHJlbmFtZSBhY3R1YWxseSB0b29rIHBsYWNlLiAgSWYgdGhlIGludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBhMzQ5MmY3Li5jMTg5MTNhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMTA2Myw3ICsxMDYzLDggQEAKIAkJCQlicmVhazsKIAkJfQogCX0KLQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOworCWlmICghSVNfRVJSKHJlcSkpCisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJaWYgKHJlcyA+IDApCiAJCSpwcG9zID0gcG9zOwogCkBAIC0xNTk5LDcgKzE2MDAsNyBAQAogCQkJa2FkZHIgKz0gY29weTsKIAkJfQogCi0JCWt1bm1hcChtYXApOworCQlrdW5tYXAocGFnZSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9nZnMyL0tjb25maWcgYi9mcy9nZnMyL0tjb25maWcKaW5kZXggNTk3MTM1OS4uNGRjZGRmOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9LY29uZmlnCisrKyBiL2ZzL2dmczIvS2NvbmZpZwpAQCAtOCw2ICs4LDggQEAKIAlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IFNMT1dfV09SSworCXNlbGVjdCBRVU9UQQorCXNlbGVjdCBRVU9UQUNUTAogCWhlbHAKIAkgIEEgY2x1c3RlciBmaWxlc3lzdGVtLgogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCAzZmM0ZTNhLi4zZWIxZWE4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsX3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KQEAgLTI2LDEwOCArMjcsNDQgQEAKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKIAotI2RlZmluZSBBQ0xfQUNDRVNTIDEKLSNkZWZpbmUgQUNMX0RFRkFVTFQgMAorc3RhdGljIGNvbnN0IGNoYXIgKmdmczJfYWNsX25hbWUoaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCXJldHVybiBHRlMyX1BPU0lYX0FDTF9BQ0NFU1M7CisJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQlyZXR1cm4gR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CiAKLWludCBnZnMyX2FjbF92YWxpZGF0ZV9zZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgYWNjZXNzLAotCQkJICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwgaW50ICpyZW1vdmUsIG1vZGVfdCAqbW9kZSkKK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpnZnMyX2FjbF9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2FjbF92YWxpZGF0ZV9yZW1vdmUoaXAsIGFjY2Vzcyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoIWVyLT5lcl9kYXRhKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFjbCA9IHBvc2l4X2FjbF9mcm9tX3hhdHRyKGVyLT5lcl9kYXRhLCBlci0+ZXJfZGF0YV9sZW4pOwotCWlmIChJU19FUlIoYWNsKSkKLQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKLQlpZiAoIWFjbCkgewotCQkqcmVtb3ZlID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZXJyb3IgPSBwb3NpeF9hY2xfdmFsaWQoYWNsKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGFjY2VzcykgewotCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgbW9kZSk7Ci0JCWlmICghZXJyb3IpCi0JCQkqcmVtb3ZlID0gMTsKLQkJZWxzZSBpZiAoZXJyb3IgPiAwKQotCQkJZXJyb3IgPSAwOwotCX0KLQotb3V0OgotCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZ2ZzMl9hY2xfdmFsaWRhdGVfcmVtb3ZlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IGFjY2VzcykKLXsKLQlpZiAoIUdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIWlzX293bmVyX29yX2NhcCgmaXAtPmlfaW5vZGUpKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChTX0lTTE5LKGlwLT5pX2lub2RlLmlfbW9kZSkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoIWFjY2VzcyAmJiAhU19JU0RJUihpcC0+aV9pbm9kZS5pX21vZGUpKQotCQlyZXR1cm4gLUVBQ0NFUzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjbF9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICBzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgIGNoYXIgKipkYXRhcCwgdW5zaWduZWQgaW50ICpsZW5wKQoteworCWNvbnN0IGNoYXIgKm5hbWU7CiAJY2hhciAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWludCBlcnJvcjsKLQotCWVsLT5lbF9iaCA9IE5VTEw7CisJaW50IGxlbjsKIAogCWlmICghaXAtPmlfZWF0dHIpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAotCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCBHRlMyX0VBVFlQRV9TWVMsIG5hbWUsIGVsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoIWVsLT5lbF9lYSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSkpCi0JCWdvdG8gb3V0OworCWFjbCA9IGdldF9jYWNoZWRfYWNsKCZpcC0+aV9pbm9kZSwgdHlwZSk7CisJaWYgKGFjbCAhPSBBQ0xfTk9UX0NBQ0hFRCkKKwkJcmV0dXJuIGFjbDsKIAotCWxlbiA9IEdGUzJfRUFfREFUQV9MRU4oZWwtPmVsX2VhKTsKLQlkYXRhID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKLQllcnJvciA9IC1FTk9NRU07Ci0JaWYgKCFkYXRhKQotCQlnb3RvIG91dDsKKwluYW1lID0gZ2ZzMl9hY2xfbmFtZSh0eXBlKTsKKwlpZiAobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWVycm9yID0gZ2ZzMl9lYV9nZXRfY29weShpcCwgZWwsIGRhdGEsIGxlbik7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfa2ZyZWU7Ci0JZXJyb3IgPSAwOworCWxlbiA9IGdmczJfeGF0dHJfYWNsX2dldChpcCwgbmFtZSwgJmRhdGEpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gRVJSX1BUUihsZW4pOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoYWNsKSB7Ci0JCSphY2wgPSBwb3NpeF9hY2xfZnJvbV94YXR0cihkYXRhLCBsZW4pOwotCQlpZiAoSVNfRVJSKCphY2wpKQotCQkJZXJyb3IgPSBQVFJfRVJSKCphY2wpOwotCX0KLQotb3V0X2tmcmVlOgotCWlmIChlcnJvciB8fCAhZGF0YXApIHsKLQkJa2ZyZWUoZGF0YSk7Ci0JfSBlbHNlIHsKLQkJKmRhdGFwID0gZGF0YTsKLQkJKmxlbnAgPSBsZW47Ci0JfQotb3V0OgotCXJldHVybiBlcnJvcjsKKwlhY2wgPSBwb3NpeF9hY2xfZnJvbV94YXR0cihkYXRhLCBsZW4pOworCWtmcmVlKGRhdGEpOworCXJldHVybiBhY2w7CiB9CiAKIC8qKgpAQCAtMTQwLDE0ICs3NywxMiBAQAogCiBpbnQgZ2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7Ci0Jc3RydWN0IGdmczJfZWFfbG9jYXRpb24gZWw7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBhY2xfZ2V0KEdGUzJfSShpbm9kZSksIEdGUzJfUE9TSVhfQUNMX0FDQ0VTUywgJmFjbCwgJmVsLCBOVUxMLCBOVUxMKTsKLQlicmVsc2UoZWwuZWxfYmgpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWFjbCA9IGdmczJfYWNsX2dldChHRlMyX0koaW5vZGUpLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAogCWlmIChhY2wpIHsKIAkJZXJyb3IgPSBwb3NpeF9hY2xfcGVybWlzc2lvbihpbm9kZSwgYWNsLCBtYXNrKTsKQEAgLTE1OCw1NyArOTMsNzUgQEAKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotc3RhdGljIGludCBtdW5nZV9tb2RlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgbW9kZV90IG1vZGUpCitzdGF0aWMgaW50IGdmczJfc2V0X21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgUkVTX0RJTk9ERSwgMCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJaWYgKG1vZGUgIT0gaW5vZGUtPmlfbW9kZSkgeworCQlzdHJ1Y3QgaWF0dHIgaWF0dHI7CiAKLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwKLQkJCQkoaXAtPmlfaW5vZGUuaV9tb2RlICYgU19JRk1UKSA9PSAobW9kZSAmIFNfSUZNVCkpOwotCQlpcC0+aV9pbm9kZS5pX21vZGUgPSBtb2RlOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJYnJlbHNlKGRpYmgpOworCQlpYXR0ci5pYV92YWxpZCA9IEFUVFJfTU9ERTsKKwkJaWF0dHIuaWFfbW9kZSA9IG1vZGU7CisKKwkJZXJyb3IgPSBnZnMyX3NldGF0dHJfc2ltcGxlKEdGUzJfSShpbm9kZSksICZpYXR0cik7CiAJfQogCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGdmczJfYWNsX2NyZWF0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCitzdGF0aWMgaW50IGdmczJfYWNsX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQogewotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMLCAqY2xvbmU7Ci0JbW9kZV90IG1vZGUgPSBpcC0+aV9pbm9kZS5pX21vZGU7Ci0JY2hhciAqZGF0YSA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgZXJyb3I7CisJaW50IGxlbjsKKwljaGFyICpkYXRhOworCWNvbnN0IGNoYXIgKm5hbWUgPSBnZnMyX2FjbF9uYW1lKHR5cGUpOworCisJQlVHX09OKG5hbWUgPT0gTlVMTCk7CisJbGVuID0gcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgTlVMTCwgMCk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwlkYXRhID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHBvc2l4X2FjbF90b194YXR0cihhY2wsIGRhdGEsIGxlbik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCBkYXRhLCBsZW4sIDApOworCWlmICghZXJyb3IpCisJCXNldF9jYWNoZWRfYWNsKGlub2RlLCB0eXBlLCBhY2wpOworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnJvcjsKK30KKworaW50IGdmczJfYWNsX2NyZWF0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wsICpjbG9uZTsKKwltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJaW50IGVycm9yID0gMDsKIAogCWlmICghc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKIAkJcmV0dXJuIDA7Ci0JaWYgKFNfSVNMTksoaXAtPmlfaW5vZGUuaV9tb2RlKSkKKwlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuIDA7CiAKLQllcnJvciA9IGFjbF9nZXQoZGlwLCBHRlMyX1BPU0lYX0FDTF9ERUZBVUxULCAmYWNsLCAmZWwsICZkYXRhLCAmbGVuKTsKLQlicmVsc2UoZWwuZWxfYmgpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWFjbCA9IGdmczJfYWNsX2dldChkaXAsIEFDTF9UWVBFX0RFRkFVTFQpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoIWFjbCkgewogCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7Ci0JCWlmIChtb2RlICE9IGlwLT5pX2lub2RlLmlfbW9kZSkKLQkJCWVycm9yID0gbXVuZ2VfbW9kZShpcCwgbW9kZSk7CisJCWlmIChtb2RlICE9IGlub2RlLT5pX21vZGUpCisJCQllcnJvciA9IGdmczJfc2V0X21vZGUoaW5vZGUsIG1vZGUpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyb3IgPSBnZnMyX2FjbF9zZXQoaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OworCX0KKwogCWNsb25lID0gcG9zaXhfYWNsX2Nsb25lKGFjbCwgR0ZQX05PRlMpOwogCWVycm9yID0gLUVOT01FTTsKIAlpZiAoIWNsb25lKQpAQCAtMjE2LDQzICsxNjksMzIgQEAKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCWFjbCA9IGNsb25lOwogCi0JaWYgKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSkgewotCQllcnJvciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLAotCQkJCSAgICAgICBHRlMyX1BPU0lYX0FDTF9ERUZBVUxULCBkYXRhLCBsZW4sIDApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAllcnJvciA9IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShhY2wsICZtb2RlKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAlpZiAoZXJyb3IgPT0gMCkKIAkJZ290byBtdW5nZTsKIAotCXBvc2l4X2FjbF90b194YXR0cihhY2wsIGRhdGEsIGxlbik7Ci0JZXJyb3IgPSBnZnMyX3hhdHRyX3NldCgmaXAtPmlfaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywKLQkJCSAgICAgICBHRlMyX1BPU0lYX0FDTF9BQ0NFU1MsIGRhdGEsIGxlbiwgMCk7CisJZXJyb3IgPSBnZnMyX2FjbF9zZXQoaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogbXVuZ2U6Ci0JZXJyb3IgPSBtdW5nZV9tb2RlKGlwLCBtb2RlKTsKKwllcnJvciA9IGdmczJfc2V0X21vZGUoaW5vZGUsIG1vZGUpOwogb3V0OgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7Ci0Ja2ZyZWUoZGF0YSk7CiAJcmV0dXJuIGVycm9yOwogfQogCiBpbnQgZ2ZzMl9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTCwgKmNsb25lOwotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgKmNsb25lOwogCWNoYXIgKmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGFjbF9nZXQoaXAsIEdGUzJfUE9TSVhfQUNMX0FDQ0VTUywgJmFjbCwgJmVsLCAmZGF0YSwgJmxlbik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9icmVsc2U7CisJYWNsID0gZ2ZzMl9hY2xfZ2V0KGlwLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoIWFjbCkKIAkJcmV0dXJuIGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOwogCkBAIC0yNjUsMTUgKzIwNywxMzQgQEAKIAogCWVycm9yID0gcG9zaXhfYWNsX2NobW9kX21hc3EoYWNsLCBhdHRyLT5pYV9tb2RlKTsKIAlpZiAoIWVycm9yKSB7CisJCWxlbiA9IHBvc2l4X2FjbF90b194YXR0cihhY2wsIE5VTEwsIDApOworCQlkYXRhID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlpZiAoZGF0YSA9PSBOVUxMKQorCQkJZ290byBvdXQ7CiAJCXBvc2l4X2FjbF90b194YXR0cihhY2wsIGRhdGEsIGxlbik7Ci0JCWVycm9yID0gZ2ZzMl9lYV9hY2xfY2htb2QoaXAsICZlbCwgYXR0ciwgZGF0YSk7CisJCWVycm9yID0gZ2ZzMl94YXR0cl9hY2xfY2htb2QoaXAsIGF0dHIsIGRhdGEpOworCQlrZnJlZShkYXRhKTsKKwkJc2V0X2NhY2hlZF9hY2woJmlwLT5pX2lub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGFjbCk7CiAJfQogCiBvdXQ6CiAJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKLQlrZnJlZShkYXRhKTsKLW91dF9icmVsc2U6Ci0JYnJlbHNlKGVsLmVsX2JoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl9hY2xfdHlwZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTKSA9PSAwKQorCQlyZXR1cm4gQUNMX1RZUEVfQUNDRVNTOworCWlmIChzdHJjbXAobmFtZSwgR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVCkgPT0gMCkKKwkJcmV0dXJuIEFDTF9UWVBFX0RFRkFVTFQ7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zeXN0ZW1fZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWludCB0eXBlOworCWludCBlcnJvcjsKKworCXR5cGUgPSBnZnMyX2FjbF90eXBlKG5hbWUpOworCWlmICh0eXBlIDwgMCkKKwkJcmV0dXJuIHR5cGU7CisKKwlhY2wgPSBnZnMyX2FjbF9nZXQoR0ZTMl9JKGlub2RlKSwgdHlwZSk7CisJaWYgKElTX0VSUihhY2wpKQorCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCWlmIChhY2wgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJZXJyb3IgPSBwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCBidWZmZXIsIHNpemUpOworCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zeXN0ZW1fc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwLCB0eXBlOworCisJaWYgKCFzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl0eXBlID0gZ2ZzMl9hY2xfdHlwZShuYW1lKTsKKwlpZiAodHlwZSA8IDApCisJCXJldHVybiB0eXBlOworCWlmIChmbGFncyAmIFhBVFRSX0NSRUFURSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR5cGUgPT0gQUNMX1RZUEVfREVGQVVMVCAmJiAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIHZhbHVlID8gLUVBQ0NFUyA6IDA7CisJaWYgKChjdXJyZW50X2ZzdWlkKCkgIT0gaW5vZGUtPmlfdWlkKSAmJiAhY2FwYWJsZShDQVBfRk9XTkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCF2YWx1ZSkKKwkJZ290byBzZXRfYWNsOworCisJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOworCWlmICghYWNsKSB7CisJCS8qCisJCSAqIGFjbF9zZXRfZmlsZSgzKSBtYXkgcmVxdWVzdCB0aGF0IHdlIHNldCBkZWZhdWx0IEFDTHMgd2l0aAorCQkgKiB6ZXJvIGxlbmd0aCAtLSBkZWZlbmQgKGdyYWNlZnVsbHkpIGFnYWluc3QgdGhhdCBoZXJlLgorCQkgKi8KKwkJZ290byBvdXQ7CisJfQorCWlmIChJU19FUlIoYWNsKSkgeworCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyb3IgPSBwb3NpeF9hY2xfdmFsaWQoYWNsKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKGFjbC0+YV9jb3VudCA+IEdGUzJfQUNMX01BWF9FTlRSSUVTKQorCQlnb3RvIG91dF9yZWxlYXNlOworCisJaWYgKHR5cGUgPT0gQUNMX1RZUEVfQUNDRVNTKSB7CisJCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKKworCQlpZiAoZXJyb3IgPD0gMCkgeworCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJCWFjbCA9IE5VTEw7CisKKwkJCWlmIChlcnJvciA8IDApCisJCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJZXJyb3IgPSBnZnMyX3NldF9tb2RlKGlub2RlLCBtb2RlKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKK3NldF9hY2w6CisJZXJyb3IgPSBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgMCk7CisJaWYgKCFlcnJvcikgeworCQlpZiAoYWNsKQorCQkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CisJCWVsc2UKKwkJCWZvcmdldF9jYWNoZWRfYWNsKGlub2RlLCB0eXBlKTsKKwl9CitvdXRfcmVsZWFzZToKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfU1lTVEVNX1BSRUZJWCwKKwkuZ2V0ICAgID0gZ2ZzMl94YXR0cl9zeXN0ZW1fZ2V0LAorCS5zZXQgICAgPSBnZnMyX3hhdHRyX3N5c3RlbV9zZXQsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5oIGIvZnMvZ2ZzMi9hY2wuaAppbmRleCA2NzUxOTMwLi45MzA2YTJlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5oCisrKyBiL2ZzL2dmczIvYWNsLmgKQEAgLTEzLDI2ICsxMywxMiBAQAogI2luY2x1ZGUgImluY29yZS5oIgogCiAjZGVmaW5lIEdGUzJfUE9TSVhfQUNMX0FDQ0VTUwkJInBvc2l4X2FjbF9hY2Nlc3MiCi0jZGVmaW5lIEdGUzJfUE9TSVhfQUNMX0FDQ0VTU19MRU4JMTYKICNkZWZpbmUgR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVAkJInBvc2l4X2FjbF9kZWZhdWx0IgotI2RlZmluZSBHRlMyX1BPU0lYX0FDTF9ERUZBVUxUX0xFTgkxNworI2RlZmluZSBHRlMyX0FDTF9NQVhfRU5UUklFUwkJMjUKIAotI2RlZmluZSBHRlMyX0FDTF9JU19BQ0NFU1MobmFtZSwgbGVuKSBcCi0gICAgICAgICAoKGxlbikgPT0gR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTX0xFTiAmJiBcCi0gICAgICAgICAhbWVtY21wKEdGUzJfUE9TSVhfQUNMX0FDQ0VTUywgKG5hbWUpLCAobGVuKSkpCi0KLSNkZWZpbmUgR0ZTMl9BQ0xfSVNfREVGQVVMVChuYW1lLCBsZW4pIFwKLSAgICAgICAgICgobGVuKSA9PSBHRlMyX1BPU0lYX0FDTF9ERUZBVUxUX0xFTiAmJiBcCi0gICAgICAgICAhbWVtY21wKEdGUzJfUE9TSVhfQUNMX0RFRkFVTFQsIChuYW1lKSwgKGxlbikpKQotCi1zdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0OwotCi1pbnQgZ2ZzMl9hY2xfdmFsaWRhdGVfc2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IGFjY2VzcywKLQkJCSAgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCi0JCQkgIGludCAqcmVtb3ZlLCBtb2RlX3QgKm1vZGUpOwotaW50IGdmczJfYWNsX3ZhbGlkYXRlX3JlbW92ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCBhY2Nlc3MpOwotaW50IGdmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKLWludCBnZnMyX2FjbF9jcmVhdGUoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKLWludCBnZnMyX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0cik7CitleHRlcm4gaW50IGdmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKK2V4dGVybiBpbnQgZ2ZzMl9hY2xfY3JlYXRlKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBnZnMyX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0cik7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlcjsKIAogI2VuZGlmIC8qIF9fQUNMX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvYW9wcy5jIGIvZnMvZ2ZzMi9hb3BzLmMKaW5kZXggNjk0YjVkNC4uN2I4ZGE5NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hb3BzLmMKKysrIGIvZnMvZ2ZzMi9hb3BzLmMKQEAgLTI2OSw3ICsyNjksNiBAQAogCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJdW5zaWduZWQgb2Zmc2V0ID0gaV9zaXplICYgKFBBR0VfQ0FDSEVfU0laRS0xKTsKIAl1bnNpZ25lZCBucmJsb2NrcyA9IG5yX3BhZ2VzICogKFBBR0VfQ0FDSEVfU0laRS9pbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwotCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCWludCBpOwogCWludCByZXQ7CiAKQEAgLTMxMywxMSArMzEyLDYgQEAKIAogCQlpZiAocmV0IHx8ICgtLSh3YmMtPm5yX3RvX3dyaXRlKSA8PSAwKSkKIAkJCXJldCA9IDE7Ci0JCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewotCQkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKLQkJCXJldCA9IDE7Ci0JCX0KLQogCX0KIAlnZnMyX3RyYW5zX2VuZChzZHApOwogCXJldHVybiByZXQ7CkBAIC0zMzgsNyArMzMyLDYgQEAKIHN0YXRpYyBpbnQgZ2ZzMl93cml0ZV9jYWNoZV9qZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCWludCByZXQgPSAwOwogCWludCBkb25lID0gMDsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwpAQCAtMzQ4LDExICszNDEsNiBAQAogCWludCBzY2FubmVkID0gMDsKIAlpbnQgcmFuZ2Vfd2hvbGUgPSAwOwogCi0JaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7Ci0JCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CiAJaWYgKHdiYy0+cmFuZ2VfY3ljbGljKSB7CiAJCWluZGV4ID0gbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OyAvKiBTdGFydCBmcm9tIHByZXYgb2Zmc2V0ICovCkBAIC04MTksOCArODA3LDEwIEBACiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCX0KIAotCWlmIChpbm9kZSA9PSBzZHAtPnNkX3JpbmRleCkKKwlpZiAoaW5vZGUgPT0gc2RwLT5zZF9yaW5kZXgpIHsKIAkJYWRqdXN0X2ZzX3NwYWNlKGlub2RlKTsKKwkJaXAtPmlfZ2guZ2hfZmxhZ3MgfD0gR0xfTk9DQUNIRTsKKwl9CiAKIAlicmVsc2UoZGliaCk7CiAJZ2ZzMl90cmFuc19lbmQoc2RwKTsKQEAgLTg4OSw4ICs4NzksMTAgQEAKIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJfQogCi0JaWYgKGlub2RlID09IHNkcC0+c2RfcmluZGV4KQorCWlmIChpbm9kZSA9PSBzZHAtPnNkX3JpbmRleCkgewogCQlhZGp1c3RfZnNfc3BhY2UoaW5vZGUpOworCQlpcC0+aV9naC5naF9mbGFncyB8PSBHTF9OT0NBQ0hFOworCX0KIAogCWJyZWxzZShkaWJoKTsKIAlnZnMyX3RyYW5zX2VuZChzZHApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggMjk3ZDdlNS4uMjVmZGRjMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC01MjUsMzggKzUyNSw2IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiB9CiAKLQotLyoqCi0gKiBkaXJlbnRfZmlyc3QgLSBSZXR1cm4gdGhlIGZpcnN0IGRpcmVudAotICogQGRpcDogdGhlIGRpcmVjdG9yeQotICogQGJoOiBUaGUgYnVmZmVyCi0gKiBAZGVudDogUG9pbnRlciB0byBsaXN0IG9mIGRpcmVudHMKLSAqCi0gKiByZXR1cm4gZmlyc3QgZGlyZW50IHdoZXRoZXIgYmggcG9pbnRzIHRvIGxlYWYgb3Igc3R1ZmZlZCBkaW5vZGUKLSAqCi0gKiBSZXR1cm5zOiBJU19MRUFGLCBJU19ESU5PREUsIG9yIC1lcnJubwotICovCi0KLXN0YXRpYyBpbnQgZGlyZW50X2ZpcnN0KHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQlzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKipkZW50KQotewotCXN0cnVjdCBnZnMyX21ldGFfaGVhZGVyICpoID0gKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyICopYmgtPmJfZGF0YTsKLQotCWlmIChiZTMyX3RvX2NwdShoLT5taF90eXBlKSA9PSBHRlMyX01FVEFUWVBFX0xGKSB7Ci0JCWlmIChnZnMyX21ldGFfY2hlY2soR0ZTMl9TQigmZGlwLT5pX2lub2RlKSwgYmgpKQotCQkJcmV0dXJuIC1FSU87Ci0JCSpkZW50ID0gKHN0cnVjdCBnZnMyX2RpcmVudCAqKShiaC0+Yl9kYXRhICsKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZ2ZzMl9sZWFmKSk7Ci0JCXJldHVybiBJU19MRUFGOwotCX0gZWxzZSB7Ci0JCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKEdGUzJfU0IoJmRpcC0+aV9pbm9kZSksIGJoLCBHRlMyX01FVEFUWVBFX0RJKSkKLQkJCXJldHVybiAtRUlPOwotCQkqZGVudCA9IChzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKikoYmgtPmJfZGF0YSArCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7Ci0JCXJldHVybiBJU19ESU5PREU7Ci0JfQotfQotCiBzdGF0aWMgaW50IGRpcmVudF9jaGVja19yZWNsZW4oc3RydWN0IGdmczJfaW5vZGUgKmRpcCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKmQsIGNvbnN0IHZvaWQgKmVuZF9wKQogewpAQCAtMTAwNiw3ICs5NzQsNyBAQAogCWRpdmlkZXIgPSAoc3RhcnQgKyBoYWxmX2xlbikgPDwgKDMyIC0gZGlwLT5pX2RlcHRoKTsKIAogCS8qICBDb3B5IHRoZSBlbnRyaWVzICAqLwotCWRpcmVudF9maXJzdChkaXAsIG9iaCwgJmRlbnQpOworCWRlbnQgPSAoc3RydWN0IGdmczJfZGlyZW50ICopKG9iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2xlYWYpKTsKIAogCWRvIHsKIAkJbmV4dCA9IGRlbnQ7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggOGI2NzRiMS4uZjQ1NWEwMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMjQxLDE1ICsyNDEsMTQgQEAKIAlpbnQgcnYgPSAwOwogCiAJd3JpdGVfbG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ2wtPmdsX3JlZikpIHsKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmZ2wtPmdsX3JlZiwgJmxydV9sb2NrKSkgewogCQlobGlzdF9kZWwoJmdsLT5nbF9saXN0KTsKLQkJd3JpdGVfdW5sb2NrKGdsX2xvY2tfYWRkcihnbC0+Z2xfaGFzaCkpOwotCQlzcGluX2xvY2soJmxydV9sb2NrKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZnbC0+Z2xfbHJ1KSkgewogCQkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7CiAJCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7CisJCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAkJZ2xvY2tfZnJlZShnbCk7CiAJCXJ2ID0gMTsKQEAgLTUxMyw3ICs1MTIsNiBAQAogCQkJR0xPQ0tfQlVHX09OKGdsLCAxKTsKIAkJfQogCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwotCQlnZnMyX2dsb2NrX3B1dChnbCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUyNCw4ICs1MjIsNiBAQAogCQlpZiAoZ2xvcHMtPmdvX3htb3RlX2JoKSB7CiAJCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJcnYgPSBnbG9wcy0+Z29feG1vdGVfYmgoZ2wsIGdoKTsKLQkJCWlmIChydiA9PSAtRUFHQUlOKQotCQkJCXJldHVybjsKIAkJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCQkJaWYgKHJ2KSB7CiAJCQkJZG9fZXJyb3IoZ2wsIHJ2KTsKQEAgLTU0MCw3ICs1MzYsNiBAQAogCWNsZWFyX2JpdChHTEZfTE9DSywgJmdsLT5nbF9mbGFncyk7CiBvdXRfbG9ja2VkOgogCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdmczJfbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdm9pZCAqbG9jaywKQEAgLTYwMCw3ICs1OTUsNiBAQAogCiAJaWYgKCEocmV0ICYgTE1fT1VUX0FTWU5DKSkgewogCQlmaW5pc2hfeG1vdGUoZ2wsIHJldCk7Ci0JCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCQlnZnMyX2dsb2NrX3B1dChnbCk7CiAJfSBlbHNlIHsKQEAgLTY3MiwxMiArNjY2LDE3IEBACiAJcmV0dXJuOwogCiBvdXRfc2NoZWQ6CisJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKIAkJZ2ZzMl9nbG9ja19wdXRfbm9sb2NrKGdsKTsKKwlyZXR1cm47CisKIG91dF91bmxvY2s6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKLQlnb3RvIG91dDsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgZGVsZXRlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC03MDcsOSArNzA2LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7CiAJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZnMyX2dsb2NrLCBnbF93b3JrLndvcmspOworCWludCBkcm9wX3JlZiA9IDA7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKSkgewogCQlmaW5pc2hfeG1vdGUoZ2wsIGdsLT5nbF9yZXBseSk7CisJCWRyb3BfcmVmID0gMTsKKwl9CiAJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgpAQCAtNzI3LDYgKzcyOSw4IEBACiAJaWYgKCFkZWxheSB8fAogCSAgICBxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIGRlbGF5KSA9PSAwKQogCQlnZnMyX2dsb2NrX3B1dChnbCk7CisJaWYgKGRyb3BfcmVmKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKIC8qKgpAQCAtMTM2MSwxMCArMTM2NSw2IEBACiAJCWxpc3RfZGVsX2luaXQoJmdsLT5nbF9scnUpOwogCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwogCi0JCS8qIENoZWNrIGlmIGdsb2NrIGlzIGFib3V0IHRvIGJlIGZyZWVkICovCi0JCWlmIChhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCiAJCS8qIFRlc3QgZm9yIGJlaW5nIGRlbW90YWJsZSAqLwogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpKSB7CiAJCQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwpAQCAtMTM3NSwxMCArMTM3NSwxMSBAQAogCQkJCWhhbmRsZV9jYWxsYmFjayhnbCwgTE1fU1RfVU5MT0NLRUQsIDApOwogCQkJCW5yLS07CiAJCQl9CisJCQljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOworCQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAkJCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCQkJZ2ZzMl9nbG9ja19wdXRfbm9sb2NrKGdsKTsKIAkJCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JCQljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOwogCQkJc3Bpbl9sb2NrKCZscnVfbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5oIGIvZnMvZ2ZzMi9nbG9jay5oCmluZGV4IGM2MDk4OTQuLjEzZjBiZDIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suaAorKysgYi9mcy9nZnMyL2dsb2NrLmgKQEAgLTE4MCwxNSArMTgwLDYgQEAKIAlyZXR1cm4gZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9nbG9ja19pc19ibG9ja2luZyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0JaW50IHJldDsKLQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKLQlyZXQgPSB0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKTsKLQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwotCXJldHVybiByZXQ7Ci19Ci0KIGludCBnZnMyX2dsb2NrX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKIAkJICAgdTY0IG51bWJlciwgY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xvcHMsCiAJCSAgIGludCBjcmVhdGUsIHN0cnVjdCBnZnMyX2dsb2NrICoqZ2xwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCA2OTg1ZWVmLi43ODU1NGFjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMTg0LDggKzE4NSwxMCBAQAogCWlmIChmbGFncyAmIERJT19NRVRBREFUQSkgewogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7Ci0JCWlmIChpcCkKKwkJaWYgKGlwKSB7CiAJCQlzZXRfYml0KEdJRl9JTlZBTElELCAmaXAtPmlfZmxhZ3MpOworCQkJZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygmaXAtPmlfaW5vZGUpOworCQl9CiAJfQogCiAJaWYgKGlwID09IEdGUzJfSShnbC0+Z2xfc2JkLT5zZF9yaW5kZXgpKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNmVkYjQyMy4uNDc5MjIwMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC00MjksNyArNDI5LDExIEBACiAJdW5zaWduZWQgaW50IGFyX21ldGE6MTsJCQkvKiBtb3VudCBtZXRhZnMgKi8KIAl1bnNpZ25lZCBpbnQgYXJfZGlzY2FyZDoxOwkJLyogZGlzY2FyZCByZXF1ZXN0cyAqLwogCXVuc2lnbmVkIGludCBhcl9lcnJvcnM6MjsgICAgICAgICAgICAgICAvKiBlcnJvcnM9d2l0aGRyYXcgfCBwYW5pYyAqLworCXVuc2lnbmVkIGludCBhcl9ub2JhcnJpZXI6MTsgICAgICAgICAgICAvKiBkbyBub3Qgc2VuZCBiYXJyaWVycyAqLwogCWludCBhcl9jb21taXQ7CQkJCS8qIENvbW1pdCBpbnRlcnZhbCAqLworCWludCBhcl9zdGF0ZnNfcXVhbnR1bTsJCQkvKiBUaGUgZmFzdCBzdGF0ZnMgaW50ZXJ2YWwgKi8KKwlpbnQgYXJfcXVvdGFfcXVhbnR1bTsJCQkvKiBUaGUgcXVvdGEgaW50ZXJ2YWwgKi8KKwlpbnQgYXJfc3RhdGZzX3BlcmNlbnQ7CQkJLyogVGhlICUgY2hhbmdlIHRvIGZvcmNlIHN5bmMgKi8KIH07CiAKIHN0cnVjdCBnZnMyX3R1bmUgewpAQCAtNTU4LDYgKzU2Miw3IEBACiAJc3BpbmxvY2tfdCBzZF9zdGF0ZnNfc3BpbjsKIAlzdHJ1Y3QgZ2ZzMl9zdGF0ZnNfY2hhbmdlX2hvc3Qgc2Rfc3RhdGZzX21hc3RlcjsKIAlzdHJ1Y3QgZ2ZzMl9zdGF0ZnNfY2hhbmdlX2hvc3Qgc2Rfc3RhdGZzX2xvY2FsOworCWludCBzZF9zdGF0ZnNfZm9yY2Vfc3luYzsKIAogCS8qIFJlc291cmNlIGdyb3VwIHN0dWZmICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBmYjE1ZDNiLi4yNmJhMmE0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC04NzEsNyArODcxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9ndW5sb2NrMjsKIAotCWVycm9yID0gZ2ZzMl9hY2xfY3JlYXRlKGRpcCwgR0ZTMl9JKGlub2RlKSk7CisJZXJyb3IgPSBnZnMyX2FjbF9jcmVhdGUoZGlwLCBpbm9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKQEAgLTk0Nyw5ICs5NDcsNyBAQAogCiAJc3RyLT5kaV9oZWFkZXIubWhfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKIAlzdHItPmRpX2hlYWRlci5taF90eXBlID0gY3B1X3RvX2JlMzIoR0ZTMl9NRVRBVFlQRV9ESSk7Ci0Jc3RyLT5kaV9oZWFkZXIuX19wYWQwID0gMDsKIAlzdHItPmRpX2hlYWRlci5taF9mb3JtYXQgPSBjcHVfdG9fYmUzMihHRlMyX0ZPUk1BVF9ESSk7Ci0Jc3RyLT5kaV9oZWFkZXIuX19wYWQxID0gMDsKIAlzdHItPmRpX251bS5ub19hZGRyID0gY3B1X3RvX2JlNjQoaXAtPmlfbm9fYWRkcik7CiAJc3RyLT5kaV9udW0ubm9fZm9ybWFsX2lubyA9IGNwdV90b19iZTY0KGlwLT5pX25vX2Zvcm1hbF9pbm8pOwogCXN0ci0+ZGlfbW9kZSA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbW9kZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCAxM2M2MjM3Li40NTExYjA4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTU5Niw3ICs1OTYsOSBAQAogCW1lbXNldChsaCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2xvZ19oZWFkZXIpKTsKIAlsaC0+bGhfaGVhZGVyLm1oX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CiAJbGgtPmxoX2hlYWRlci5taF90eXBlID0gY3B1X3RvX2JlMzIoR0ZTMl9NRVRBVFlQRV9MSCk7CisJbGgtPmxoX2hlYWRlci5fX3BhZDAgPSBjcHVfdG9fYmU2NCgwKTsKIAlsaC0+bGhfaGVhZGVyLm1oX2Zvcm1hdCA9IGNwdV90b19iZTMyKEdGUzJfRk9STUFUX0xIKTsKKwlsaC0+bGhfaGVhZGVyLm1oX2ppZCA9IGNwdV90b19iZTMyKHNkcC0+c2RfamRlc2MtPmpkX2ppZCk7CiAJbGgtPmxoX3NlcXVlbmNlID0gY3B1X3RvX2JlNjQoc2RwLT5zZF9sb2dfc2VxdWVuY2UrKyk7CiAJbGgtPmxoX2ZsYWdzID0gY3B1X3RvX2JlMzIoZmxhZ3MpOwogCWxoLT5saF90YWlsID0gY3B1X3RvX2JlMzIodGFpbCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvcHMuYyBiL2ZzL2dmczIvbG9wcy5jCmluZGV4IDk5NjlmZjAuLmRlOTc2MzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9wcy5jCisrKyBiL2ZzL2dmczIvbG9wcy5jCkBAIC0xMzIsNiArMTMyLDcgQEAKIHN0YXRpYyB2b2lkIGJ1Zl9sb19hZGQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2xvZ19lbGVtZW50ICpsZSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCA9IGNvbnRhaW5lcl9vZihsZSwgc3RydWN0IGdmczJfYnVmZGF0YSwgYmRfbGUpOworCXN0cnVjdCBnZnMyX21ldGFfaGVhZGVyICptaDsKIAlzdHJ1Y3QgZ2ZzMl90cmFucyAqdHI7CiAKIAlsb2NrX2J1ZmZlcihiZC0+YmRfYmgpOwpAQCAtMTQ4LDYgKzE0OSw5IEBACiAJc2V0X2JpdChHTEZfRElSVFksICZiZC0+YmRfZ2wtPmdsX2ZsYWdzKTsKIAlnZnMyX21ldGFfY2hlY2soc2RwLCBiZC0+YmRfYmgpOwogCWdmczJfcGluKHNkcCwgYmQtPmJkX2JoKTsKKwltaCA9IChzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciAqKWJkLT5iZF9iaC0+Yl9kYXRhOworCW1oLT5fX3BhZDAgPSBjcHVfdG9fYmU2NCgwKTsKKwltaC0+bWhfamlkID0gY3B1X3RvX2JlMzIoc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKIAlzZHAtPnNkX2xvZ19udW1fYnVmKys7CiAJbGlzdF9hZGQoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfYnVmKTsKIAl0ci0+dHJfbnVtX2J1Zl9uZXcrKzsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggZWFjZDc4YS4uNWIzMWY3NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX3VucmVnaXN0ZXI7CiAKLQllcnJvciA9IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKCk7CisJZXJyb3IgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfc2xvdzsKIApAQCAtMTYzLDcgKzE2Myw3IEBACiAJZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnMoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMybWV0YV9mc190eXBlKTsKLQlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CisJc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CiAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9xdW90YWRfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9yZ3JwZF9jYWNoZXApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCA1MmZiNmMwLi5lZGZlZTI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtNjIsMTMgKzYzLDEwIEBACiAJZ3QtPmd0X3F1b3RhX3dhcm5fcGVyaW9kID0gMTA7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX251bSA9IDE7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX2RlbiA9IDE7Ci0JZ3QtPmd0X3F1b3RhX3F1YW50dW0gPSA2MDsKIAlndC0+Z3RfbmV3X2ZpbGVzX2pkYXRhID0gMDsKIAlndC0+Z3RfbWF4X3JlYWRhaGVhZCA9IDEgPDwgMTg7CiAJZ3QtPmd0X3N0YWxsX3NlY3MgPSA2MDA7CiAJZ3QtPmd0X2NvbXBsYWluX3NlY3MgPSAxMDsKLQlndC0+Z3Rfc3RhdGZzX3F1YW50dW0gPSAzMDsKLQlndC0+Z3Rfc3RhdGZzX3Nsb3cgPSAwOwogfQogCiBzdGF0aWMgc3RydWN0IGdmczJfc2JkICppbml0X3NiZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMTExNCw3ICsxMTEyLDcgQEAKICAqIFJldHVybnM6IGVycm5vCiAgKi8KIAotc3RhdGljIGludCBmaWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCitzdGF0aWMgaW50IGZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGdmczJfYXJncyAqYXJncywgaW50IHNpbGVudCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgbW91bnRfZ2g7CkBAIC0xMTI1LDE3ICsxMTIzLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgYWxsb2Mgc3RydWN0IGdmczJfc2JkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCi0Jc2RwLT5zZF9hcmdzLmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOwotCXNkcC0+c2RfYXJncy5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7Ci0Jc2RwLT5zZF9hcmdzLmFyX2NvbW1pdCA9IDYwOwotCXNkcC0+c2RfYXJncy5hcl9lcnJvcnMgPSBHRlMyX0VSUk9SU19ERUZBVUxUOwotCi0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmc2RwLT5zZF9hcmdzLCBkYXRhKTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgcGFyc2UgbW91bnQgYXJndW1lbnRzXG4iKTsKLQkJZ290byBmYWlsOwotCX0KKwlzZHAtPnNkX2FyZ3MgPSAqYXJnczsKIAogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKSB7CiAgICAgICAgICAgICAgICAgc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwpAQCAtMTE0MywxMSArMTEzMSwxNSBAQAogCX0KIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9ub2JhcnJpZXIpCisJCXNldF9iaXQoU0RGX05PQkFSUklFUlMsICZzZHAtPnNkX2ZsYWdzKTsKIAogCXNiLT5zX21hZ2ljID0gR0ZTMl9NQUdJQzsKIAlzYi0+c19vcCA9ICZnZnMyX3N1cGVyX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmZ2ZzMl9leHBvcnRfb3BzOwogCXNiLT5zX3hhdHRyID0gZ2ZzMl94YXR0cl9oYW5kbGVyczsKKwlzYi0+c19xY29wID0gJmdmczJfcXVvdGFjdGxfb3BzOworCXNiX2Rxb3B0KHNiKS0+ZmxhZ3MgfD0gRFFVT1RfUVVPVEFfU1lTX0ZJTEU7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAKQEAgLTExNjAsNiArMTE1MiwxNSBAQAogCXNkcC0+c2RfZnNiMmJiID0gMSA8PCBzZHAtPnNkX2ZzYjJiYl9zaGlmdDsKIAogCXNkcC0+c2RfdHVuZS5ndF9sb2dfZmx1c2hfc2VjcyA9IHNkcC0+c2RfYXJncy5hcl9jb21taXQ7CisJc2RwLT5zZF90dW5lLmd0X3F1b3RhX3F1YW50dW0gPSBzZHAtPnNkX2FyZ3MuYXJfcXVvdGFfcXVhbnR1bTsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3N0YXRmc19xdWFudHVtKSB7CisJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfc2xvdyA9IDA7CisJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfcXVhbnR1bSA9IHNkcC0+c2RfYXJncy5hcl9zdGF0ZnNfcXVhbnR1bTsKKwl9CisJZWxzZSB7CisJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfc2xvdyA9IDE7CisJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfcXVhbnR1bSA9IDMwOworCX0KIAogCWVycm9yID0gaW5pdF9uYW1lcyhzZHAsIHNpbGVudCk7CiAJaWYgKGVycm9yKQpAQCAtMTI0MywxOCArMTI0NCwxMjcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3N0YXRpYyBpbnQgc2V0X2dmczJfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhKQogewotCXJldHVybiBnZXRfc2JfYmRldihmc190eXBlLCBmbGFncywgZGV2X25hbWUsIGRhdGEsIGZpbGxfc3VwZXIsIG1udCk7CisJcy0+c19iZGV2ID0gZGF0YTsKKwlzLT5zX2RldiA9IHMtPnNfYmRldi0+YmRfZGV2OworCisJLyoKKwkgKiBXZSBzZXQgdGhlIGJkaSBoZXJlIHRvIHRoZSBxdWV1ZSBiYWNraW5nLCBmaWxlIHN5c3RlbXMgY2FuCisJICogb3ZlcndyaXRlIHRoaXMgaW4gLT5maWxsX3N1cGVyKCkKKwkgKi8KKwlzLT5zX2JkaSA9ICZiZGV2X2dldF9xdWV1ZShzLT5zX2JkZXYpLT5iYWNraW5nX2Rldl9pbmZvOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlc3RfbWV0YV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgdGVzdF9nZnMyX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqcHRyKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBwdHI7CiAJcmV0dXJuIChiZGV2ID09IHMtPnNfYmRldik7CiB9CiAKKy8qKgorICogZ2ZzMl9nZXRfc2IgLSBHZXQgdGhlIEdGUzIgc3VwZXJibG9jaworICogQGZzX3R5cGU6IFRoZSBHRlMyIGZpbGVzeXN0ZW0gdHlwZQorICogQGZsYWdzOiBNb3VudCBmbGFncworICogQGRldl9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgZGV2aWNlCisgKiBAZGF0YTogVGhlIG1vdW50IGFyZ3VtZW50cworICogQG1udDogVGhlIHZmc21udCBmb3IgdGhpcyBtb3VudAorICoKKyAqIFEuIFdoeSBub3QgdXNlIGdldF9zYl9iZGV2KCkgPworICogQS4gV2UgbmVlZCB0byBzZWxlY3Qgb25lIG9mIHR3byByb290IGRpcmVjdG9yaWVzIHRvIG1vdW50LCBpbmRlcGVuZGVudAorICogICAgb2Ygd2hldGhlciB0aGlzIGlzIHRoZSBpbml0aWFsLCBvciBzdWJzZXF1ZW50LCBtb3VudCBvZiB0aGlzIHNiCisgKgorICogUmV0dXJuczogMCBvciAtdmUgb24gZXJyb3IKKyAqLworCitzdGF0aWMgaW50IGdmczJfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCisJCSAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CisJZm1vZGVfdCBtb2RlID0gRk1PREVfUkVBRDsKKwlpbnQgZXJyb3I7CisJc3RydWN0IGdmczJfYXJncyBhcmdzOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwOworCisJaWYgKCEoZmxhZ3MgJiBNU19SRE9OTFkpKQorCQltb2RlIHw9IEZNT0RFX1dSSVRFOworCisJYmRldiA9IG9wZW5fYmRldl9leGNsdXNpdmUoZGV2X25hbWUsIG1vZGUsIGZzX3R5cGUpOworCWlmIChJU19FUlIoYmRldikpCisJCXJldHVybiBQVFJfRVJSKGJkZXYpOworCisJLyoKKwkgKiBvbmNlIHRoZSBzdXBlciBpcyBpbnNlcnRlZCBpbnRvIHRoZSBsaXN0IGJ5IHNnZXQsIHNfdW1vdW50CisJICogd2lsbCBwcm90ZWN0IHRoZSBsb2NrZnMgY29kZSBmcm9tIHRyeWluZyB0byBzdGFydCBhIHNuYXBzaG90CisJICogd2hpbGUgd2UgYXJlIG1vdW50aW5nCisJICovCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCWlmIChiZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCA+IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJCWVycm9yID0gLUVCVVNZOworCQlnb3RvIGVycm9yX2JkZXY7CisJfQorCXMgPSBzZ2V0KGZzX3R5cGUsIHRlc3RfZ2ZzMl9zdXBlciwgc2V0X2dmczJfc3VwZXIsIGJkZXYpOworCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCWVycm9yID0gUFRSX0VSUihzKTsKKwlpZiAoSVNfRVJSKHMpKQorCQlnb3RvIGVycm9yX2JkZXY7CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKKwlhcmdzLmFyX2RhdGEgPSBHRlMyX0RBVEFfREVGQVVMVDsKKwlhcmdzLmFyX2NvbW1pdCA9IDYwOworCWFyZ3MuYXJfc3RhdGZzX3F1YW50dW0gPSAzMDsKKwlhcmdzLmFyX3F1b3RhX3F1YW50dW0gPSA2MDsKKwlhcmdzLmFyX2Vycm9ycyA9IEdGUzJfRVJST1JTX0RFRkFVTFQ7CisKKwllcnJvciA9IGdmczJfbW91bnRfYXJncygmYXJncywgZGF0YSk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHBhcnNlIG1vdW50IGFyZ3VtZW50c1xuIik7CisJCWlmIChzLT5zX3Jvb3QpCisJCQlnb3RvIGVycm9yX3N1cGVyOworCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmIChzLT5zX3Jvb3QpIHsKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWlmICgoZmxhZ3MgXiBzLT5zX2ZsYWdzKSAmIE1TX1JET05MWSkKKwkJCWdvdG8gZXJyb3Jfc3VwZXI7CisJCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGJkZXYsIG1vZGUpOworCX0gZWxzZSB7CisJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CisJCXMtPnNfbW9kZSA9IG1vZGU7CisJCXN0cmxjcHkocy0+c19pZCwgYmRldm5hbWUoYmRldiwgYiksIHNpemVvZihzLT5zX2lkKSk7CisJCXNiX3NldF9ibG9ja3NpemUocywgYmxvY2tfc2l6ZShiZGV2KSk7CisJCWVycm9yID0gZmlsbF9zdXBlcihzLCAmYXJncywgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CisJCWlmIChlcnJvcikgeworCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJCWJkZXYtPmJkX3N1cGVyID0gczsKKwl9CisKKwlzZHAgPSBzLT5zX2ZzX2luZm87CisJbW50LT5tbnRfc2IgPSBzOworCWlmIChhcmdzLmFyX21ldGEpCisJCW1udC0+bW50X3Jvb3QgPSBkZ2V0KHNkcC0+c2RfbWFzdGVyX2Rpcik7CisJZWxzZQorCQltbnQtPm1udF9yb290ID0gZGdldChzZHAtPnNkX3Jvb3RfZGlyKTsKKwlyZXR1cm4gMDsKKworZXJyb3Jfc3VwZXI6CisJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CitlcnJvcl9iZGV2OgorCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGJkZXYsIG1vZGUpOworCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIGludCBzZXRfbWV0YV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQgKnB0cikKIHsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNzQsMTMgKzEzODQsMTcgQEAKIAkJICAgICAgIGRldl9uYW1lLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9Ci0JcyA9IHNnZXQoJmdmczJfZnNfdHlwZSwgdGVzdF9tZXRhX3N1cGVyLCBzZXRfbWV0YV9zdXBlciwKKwlzID0gc2dldCgmZ2ZzMl9mc190eXBlLCB0ZXN0X2dmczJfc3VwZXIsIHNldF9tZXRhX3N1cGVyLAogCQkgcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfYmRldik7CiAJcGF0aF9wdXQoJnBhdGgpOwogCWlmIChJU19FUlIocykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogZ2ZzMiBtb3VudCBkb2VzIG5vdCBleGlzdFxuIik7CiAJCXJldHVybiBQVFJfRVJSKHMpOwogCX0KKwlpZiAoKGZsYWdzIF4gcy0+c19mbGFncykgJiBNU19SRE9OTFkpIHsKKwkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCXNkcCA9IHMtPnNfZnNfaW5mbzsKIAltbnQtPm1udF9zYiA9IHM7CiAJbW50LT5tbnRfcm9vdCA9IGRnZXQoc2RwLT5zZF9tYXN0ZXJfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCAyZTliOTMyLi5lM2JmNmVhIDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBmdXp6aW5lc3MgaW4gdGhlIGN1cnJlbnQgdXNhZ2UgdmFsdWUgb2YgSURzIHRoYXQgYXJlIGJlaW5nIHVzZWQgb24gZGlmZmVyZW50CiAgKiBub2RlcyBpbiB0aGUgY2x1c3RlciBzaW11bHRhbmVvdXNseS4gIFNvLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSB1c2VyIG9uCiAgKiBtdWx0aXBsZSBub2RlcyB0byBvdmVycnVuIHRoZWlyIHF1b3RhLCBidXQgdGhhdCBvdmVycnVuIGlzIGNvbnRyb2xhYmxlLgotICogU2luY2UgcXVvdGEgdGFncyBhcmUgcGFydCBvZiB0cmFuc2FjdGlvbnMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gYSBxdW90YSBjaGVjaworICogU2luY2UgcXVvdGEgdGFncyBhcmUgcGFydCBvZiB0cmFuc2FjdGlvbnMsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgcXVvdGEgY2hlY2sKICAqIHByb2dyYW0gdG8gYmUgcnVuIG9uIG5vZGUgY3Jhc2hlcyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCiAgKgogICogVGhlcmUgYXJlIGNvdXBsZSBvZiBrbm9icyB0aGF0IGxldCB0aGUgYWRtaW5pc3RyYXRvciBtYW5hZ2UgdGhlIHF1b3RhCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CisjaW5jbHVkZSA8bGludXgvZHFibGtfeGZzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC02NSwxMyArNjcsNiBAQAogI2RlZmluZSBRVU9UQV9VU0VSIDEKICNkZWZpbmUgUVVPVEFfR1JPVVAgMAogCi1zdHJ1Y3QgZ2ZzMl9xdW90YV9ob3N0IHsKLQl1NjQgcXVfbGltaXQ7Ci0JdTY0IHF1X3dhcm47Ci0JczY0IHF1X3ZhbHVlOwotCXUzMiBxdV9sbF9uZXh0OwotfTsKLQogc3RydWN0IGdmczJfcXVvdGFfY2hhbmdlX2hvc3QgewogCXU2NCBxY19jaGFuZ2U7CiAJdTMyIHFjX2ZsYWdzOyAvKiBHRlMyX1FDRl8uLi4gKi8KQEAgLTE2NCw3ICsxNTksNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBxZF9nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCB1c2VyLCB1MzIgaWQsIGludCBjcmVhdGUsCitzdGF0aWMgaW50IHFkX2dldChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHVzZXIsIHUzMiBpZCwKIAkJICBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICoqcWRwKQogewogCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkID0gTlVMTCwgKm5ld19xZCA9IE5VTEw7CkBAIC0yMDIsNyArMTk3LDcgQEAKIAogCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCi0JCWlmIChxZCB8fCAhY3JlYXRlKSB7CisJCWlmIChxZCkgewogCQkJaWYgKG5ld19xZCkgewogCQkJCWdmczJfZ2xvY2tfcHV0KG5ld19xZC0+cWRfZ2wpOwogCQkJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIG5ld19xZCk7CkBAIC00NjEsMTIgKzQ1NiwxMiBAQAogCXFkX3B1dChxZCk7CiB9CiAKLXN0YXRpYyBpbnQgcWRzYl9nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCB1c2VyLCB1MzIgaWQsIGludCBjcmVhdGUsCitzdGF0aWMgaW50IHFkc2JfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgdXNlciwgdTMyIGlkLAogCQkgICAgc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqKnFkcCkKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHFkX2dldChzZHAsIHVzZXIsIGlkLCBjcmVhdGUsIHFkcCk7CisJZXJyb3IgPSBxZF9nZXQoc2RwLCB1c2VyLCBpZCwgcWRwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTA4LDIwICs1MDMsMjAgQEAKIAlpZiAoc2RwLT5zZF9hcmdzLmFyX3F1b3RhID09IEdGUzJfUVVPVEFfT0ZGKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gcWRzYl9nZXQoc2RwLCBRVU9UQV9VU0VSLCBpcC0+aV9pbm9kZS5pX3VpZCwgQ1JFQVRFLCBxZCk7CisJZXJyb3IgPSBxZHNiX2dldChzZHAsIFFVT1RBX1VTRVIsIGlwLT5pX2lub2RlLmlfdWlkLCBxZCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAlhbC0+YWxfcWRfbnVtKys7CiAJcWQrKzsKIAotCWVycm9yID0gcWRzYl9nZXQoc2RwLCBRVU9UQV9HUk9VUCwgaXAtPmlfaW5vZGUuaV9naWQsIENSRUFURSwgcWQpOworCWVycm9yID0gcWRzYl9nZXQoc2RwLCBRVU9UQV9HUk9VUCwgaXAtPmlfaW5vZGUuaV9naWQsIHFkKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCWFsLT5hbF9xZF9udW0rKzsKIAlxZCsrOwogCiAJaWYgKHVpZCAhPSBOT19RVU9UQV9DSEFOR0UgJiYgdWlkICE9IGlwLT5pX2lub2RlLmlfdWlkKSB7Ci0JCWVycm9yID0gcWRzYl9nZXQoc2RwLCBRVU9UQV9VU0VSLCB1aWQsIENSRUFURSwgcWQpOworCQllcnJvciA9IHFkc2JfZ2V0KHNkcCwgUVVPVEFfVVNFUiwgdWlkLCBxZCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCQlhbC0+YWxfcWRfbnVtKys7CkBAIC01MjksNyArNTI0LDcgQEAKIAl9CiAKIAlpZiAoZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSAmJiBnaWQgIT0gaXAtPmlfaW5vZGUuaV9naWQpIHsKLQkJZXJyb3IgPSBxZHNiX2dldChzZHAsIFFVT1RBX0dST1VQLCBnaWQsIENSRUFURSwgcWQpOworCQllcnJvciA9IHFkc2JfZ2V0KHNkcCwgUVVPVEFfR1JPVVAsIGdpZCwgcWQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAkJYWwtPmFsX3FkX251bSsrOwpAQCAtNjE3LDQ4ICs2MTIsMzYgQEAKIAltdXRleF91bmxvY2soJnNkcC0+c2RfcXVvdGFfbXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX3F1b3RhX2luKHN0cnVjdCBnZnMyX3F1b3RhX2hvc3QgKnF1LCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGdmczJfcXVvdGEgKnN0ciA9IGJ1ZjsKLQotCXF1LT5xdV9saW1pdCA9IGJlNjRfdG9fY3B1KHN0ci0+cXVfbGltaXQpOwotCXF1LT5xdV93YXJuID0gYmU2NF90b19jcHUoc3RyLT5xdV93YXJuKTsKLQlxdS0+cXVfdmFsdWUgPSBiZTY0X3RvX2NwdShzdHItPnF1X3ZhbHVlKTsKLQlxdS0+cXVfbGxfbmV4dCA9IGJlMzJfdG9fY3B1KHN0ci0+cXVfbGxfbmV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdmczJfcXVvdGFfb3V0KGNvbnN0IHN0cnVjdCBnZnMyX3F1b3RhX2hvc3QgKnF1LCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IGdmczJfcXVvdGEgKnN0ciA9IGJ1ZjsKLQotCXN0ci0+cXVfbGltaXQgPSBjcHVfdG9fYmU2NChxdS0+cXVfbGltaXQpOwotCXN0ci0+cXVfd2FybiA9IGNwdV90b19iZTY0KHF1LT5xdV93YXJuKTsKLQlzdHItPnF1X3ZhbHVlID0gY3B1X3RvX2JlNjQocXUtPnF1X3ZhbHVlKTsKLQlzdHItPnF1X2xsX25leHQgPSBjcHVfdG9fYmUzMihxdS0+cXVfbGxfbmV4dCk7Ci0JbWVtc2V0KCZzdHItPnF1X3Jlc2VydmVkLCAwLCBzaXplb2Yoc3RyLT5xdV9yZXNlcnZlZCkpOwotfQotCiAvKioKLSAqIGdmczJfYWRqdXN0X3F1b3RhCisgKiBnZnMyX2FkanVzdF9xdW90YSAtIGFkanVzdCByZWNvcmQgb2YgY3VycmVudCBibG9jayB1c2FnZQorICogQGlwOiBUaGUgcXVvdGEgaW5vZGUKKyAqIEBsb2M6IE9mZnNldCBvZiB0aGUgZW50cnkgaW4gdGhlIHF1b3RhIGZpbGUKKyAqIEBjaGFuZ2U6IFRoZSBhbW91bnQgb2YgdXNhZ2UgY2hhbmdlIHRvIHJlY29yZAorICogQHFkOiBUaGUgcXVvdGEgZGF0YQorICogQGZkcTogVGhlIHVwZGF0ZWQgbGltaXRzIHRvIHJlY29yZAogICoKICAqIFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBib3Jyb3dlZCBmcm9tIGdmczJfYmxvY2tfdHJ1bmNhdGVfcGFnZSB3aGljaCB3YXMKICAqIGluIHR1cm4gbW9zdGx5IGJvcnJvd2VkIGZyb20gZXh0MworICoKKyAqIFJldHVybnM6IDAgb3IgLXZlIG9uIGVycm9yCiAgKi8KKwogc3RhdGljIGludCBnZnMyX2FkanVzdF9xdW90YShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGxvZmZfdCBsb2MsCi0JCQkgICAgIHM2NCBjaGFuZ2UsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQorCQkJICAgICBzNjQgY2hhbmdlLCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCwKKwkJCSAgICAgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmZkcSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJmlwLT5pX2lub2RlOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAl1bnNpZ25lZCBsb25nIGluZGV4ID0gbG9jID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJdW5zaWduZWQgb2Zmc2V0ID0gbG9jICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwogCXVuc2lnbmVkIGJsb2Nrc2l6ZSwgaWJsb2NrLCBwb3M7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqZGliaDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl2b2lkICprYWRkcjsKLQljaGFyICpwdHI7Ci0Jc3RydWN0IGdmczJfcXVvdGFfaG9zdCBxcDsKKwlzdHJ1Y3QgZ2ZzMl9xdW90YSAqcXA7CiAJczY0IHZhbHVlOwogCWludCBlcnIgPSAtRUlPOworCXU2NCBzaXplOwogCiAJaWYgKGdmczJfaXNfc3R1ZmZlZChpcCkpCiAJCWdmczJfdW5zdHVmZl9kaW5vZGUoaXAsIE5VTEwpOwpAQCAtNzAwLDE4ICs2ODMsMzggQEAKIAlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDApOwogCiAJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JcHRyID0ga2FkZHIgKyBvZmZzZXQ7Ci0JZ2ZzMl9xdW90YV9pbigmcXAsIHB0cik7Ci0JcXAucXVfdmFsdWUgKz0gY2hhbmdlOwotCXZhbHVlID0gcXAucXVfdmFsdWU7Ci0JZ2ZzMl9xdW90YV9vdXQoJnFwLCBwdHIpOworCXFwID0ga2FkZHIgKyBvZmZzZXQ7CisJdmFsdWUgPSAoczY0KWJlNjRfdG9fY3B1KHFwLT5xdV92YWx1ZSkgKyBjaGFuZ2U7CisJcXAtPnF1X3ZhbHVlID0gY3B1X3RvX2JlNjQodmFsdWUpOworCXFkLT5xZF9xYi5xYl92YWx1ZSA9IHFwLT5xdV92YWx1ZTsKKwlpZiAoZmRxKSB7CisJCWlmIChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpIHsKKwkJCXFwLT5xdV93YXJuID0gY3B1X3RvX2JlNjQoZmRxLT5kX2Jsa19zb2Z0bGltaXQpOworCQkJcWQtPnFkX3FiLnFiX3dhcm4gPSBxcC0+cXVfd2FybjsKKwkJfQorCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKSB7CisJCQlxcC0+cXVfbGltaXQgPSBjcHVfdG9fYmU2NChmZHEtPmRfYmxrX2hhcmRsaW1pdCk7CisJCQlxZC0+cWRfcWIucWJfbGltaXQgPSBxcC0+cXVfbGltaXQ7CisJCX0KKwl9CiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCWVyciA9IDA7Ci0JcWQtPnFkX3FiLnFiX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7Ci0JcWQtPnFkX3FiLnFiX3ZhbHVlID0gY3B1X3RvX2JlNjQodmFsdWUpOwotCSgoc3RydWN0IGdmczJfcXVvdGFfbHZiKikocWQtPnFkX2dsLT5nbF9sdmIpKS0+cWJfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKLQkoKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiopKHFkLT5xZF9nbC0+Z2xfbHZiKSktPnFiX3ZhbHVlID0gY3B1X3RvX2JlNjQodmFsdWUpOworCisJZXJyID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrOworCisJc2l6ZSA9IGxvYyArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSk7CisJaWYgKHNpemUgPiBpbm9kZS0+aV9zaXplKSB7CisJCWlwLT5pX2Rpc2tzaXplID0gc2l6ZTsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBzaXplKTsKKwl9CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRTsKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CisJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOworCWJyZWxzZShkaWJoKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwogdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTczOSw5ICs3NDIsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNvcnQocWRhLCBudW1fcWQsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICopLCBzb3J0X3FkLCBOVUxMKTsKKwltdXRleF9sb2NrX25lc3RlZCgmaXAtPmlfaW5vZGUuaV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CiAJZm9yIChxeCA9IDA7IHF4IDwgbnVtX3FkOyBxeCsrKSB7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHFkYVtxeF0tPnFkX2dsLAotCQkJCQkgICBMTV9TVF9FWENMVVNJVkUsCisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHFkYVtxeF0tPnFkX2dsLCBMTV9TVF9FWENMVVNJVkUsCiAJCQkJCSAgIEdMX05PQ0FDSEUsICZnaHNbcXhdKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CkBAIC03OTUsOSArNzk4LDcgQEAKIAlmb3IgKHggPSAwOyB4IDwgbnVtX3FkOyB4KyspIHsKIAkJcWQgPSBxZGFbeF07CiAJCW9mZnNldCA9IHFkMm9mZnNldChxZCk7Ci0JCWVycm9yID0gZ2ZzMl9hZGp1c3RfcXVvdGEoaXAsIG9mZnNldCwgcWQtPnFkX2NoYW5nZV9zeW5jLAotCQkJCQkgIChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICopCi0JCQkJCSAgcWQpOworCQllcnJvciA9IGdmczJfYWRqdXN0X3F1b3RhKGlwLCBvZmZzZXQsIHFkLT5xZF9jaGFuZ2Vfc3luYywgcWQsIE5VTEwpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9lbmRfdHJhbnM7CiAKQEAgLTgxNywyMSArODE4LDQ0IEBACiBvdXQ6CiAJd2hpbGUgKHF4LS0pCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaHNbcXhdKTsKKwltdXRleF91bmxvY2soJmlwLT5pX2lub2RlLmlfbXV0ZXgpOwogCWtmcmVlKGdocyk7CiAJZ2ZzMl9sb2dfZmx1c2goaXAtPmlfZ2wtPmdsX3NiZCwgaXAtPmlfZ2wpOwogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCB1cGRhdGVfcWQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX3F1b3RhX2lub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9xdW90YSBxOworCXN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqcWx2YjsKKwlsb2ZmX3QgcG9zOworCWludCBlcnJvcjsKKworCW1lbXNldCgmcSwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKSk7CisJcG9zID0gcWQyb2Zmc2V0KHFkKTsKKwllcnJvciA9IGdmczJfaW50ZXJuYWxfcmVhZChpcCwgTlVMTCwgKGNoYXIgKikmcSwgJnBvcywgc2l6ZW9mKHEpKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlxbHZiID0gKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqKXFkLT5xZF9nbC0+Z2xfbHZiOworCXFsdmItPnFiX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CisJcWx2Yi0+X19wYWQgPSAwOworCXFsdmItPnFiX2xpbWl0ID0gcS5xdV9saW1pdDsKKwlxbHZiLT5xYl93YXJuID0gcS5xdV93YXJuOworCXFsdmItPnFiX3ZhbHVlID0gcS5xdV92YWx1ZTsKKwlxZC0+cWRfcWIgPSAqcWx2YjsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRvX2dsb2NrKHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkLCBpbnQgZm9yY2VfcmVmcmVzaCwKIAkJICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqcV9naCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX3F1b3RhX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlzdHJ1Y3QgZ2ZzMl9xdW90YV9ob3N0IHE7Ci0JY2hhciBidWZbc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKV07CiAJaW50IGVycm9yOwotCXN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqcWx2YjsKIAogcmVzdGFydDoKIAllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChxZC0+cWRfZ2wsIExNX1NUX1NIQVJFRCwgMCwgcV9naCk7CkBAIC04NDEsMTEgKzg2NSw5IEBACiAJcWQtPnFkX3FiID0gKihzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKilxZC0+cWRfZ2wtPmdsX2x2YjsKIAogCWlmIChmb3JjZV9yZWZyZXNoIHx8IHFkLT5xZF9xYi5xYl9tYWdpYyAhPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKSkgewotCQlsb2ZmX3QgcG9zOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChxX2doKTsKLQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocWQtPnFkX2dsLAotCQkJCQkgICBMTV9TVF9FWENMVVNJVkUsIEdMX05PQ0FDSEUsCi0JCQkJCSAgIHFfZ2gpOworCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChxZC0+cWRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwKKwkJCQkJICAgR0xfTk9DQUNIRSwgcV9naCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIApAQCAtODUzLDI5ICs4NzUsMTQgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBmYWlsOwogCi0JCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSkpOwotCQlwb3MgPSBxZDJvZmZzZXQocWQpOwotCQllcnJvciA9IGdmczJfaW50ZXJuYWxfcmVhZChpcCwgTlVMTCwgYnVmLCAmcG9zLAotCQkJCQkgICBzaXplb2Yoc3RydWN0IGdmczJfcXVvdGEpKTsKLQkJaWYgKGVycm9yIDwgMCkKKwkJZXJyb3IgPSB1cGRhdGVfcWQoc2RwLCBxZCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gZmFpbF9ndW5sb2NrOwogCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKLQotCQlnZnMyX3F1b3RhX2luKCZxLCBidWYpOwotCQlxbHZiID0gKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqKXFkLT5xZF9nbC0+Z2xfbHZiOwotCQlxbHZiLT5xYl9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwotCQlxbHZiLT5fX3BhZCA9IDA7Ci0JCXFsdmItPnFiX2xpbWl0ID0gY3B1X3RvX2JlNjQocS5xdV9saW1pdCk7Ci0JCXFsdmItPnFiX3dhcm4gPSBjcHVfdG9fYmU2NChxLnF1X3dhcm4pOwotCQlxbHZiLT5xYl92YWx1ZSA9IGNwdV90b19iZTY0KHEucXVfdmFsdWUpOwotCQlxZC0+cWRfcWIgPSAqcWx2YjsKLQotCQlpZiAoZ2ZzMl9nbG9ja19pc19ibG9ja2luZyhxZC0+cWRfZ2wpKSB7Ci0JCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChxX2doKTsKLQkJCWZvcmNlX3JlZnJlc2ggPSAwOwotCQkJZ290byByZXN0YXJ0OwotCQl9CisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KHFfZ2gpOworCQlmb3JjZV9yZWZyZXNoID0gMDsKKwkJZ290byByZXN0YXJ0OwogCX0KIAogCXJldHVybiAwOwpAQCAtOTk1LDcgKzEwMDIsNyBAQAogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBmc2lkPSVzOiBxdW90YSAlcyBmb3IgJXMgJXVcclxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBmc2lkPSVzOiBxdW90YSAlcyBmb3IgJXMgJXVcbiIsCiAJICAgICAgIHNkcC0+c2RfZnNuYW1lLCB0eXBlLAogCSAgICAgICAodGVzdF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpKSA/ICJ1c2VyIiA6ICJncm91cCIsCiAJICAgICAgIHFkLT5xZF9pZCk7CkBAIC0xMDMyLDYgKzEwMzksMTAgQEAKIAogCQlpZiAoYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSAmJiAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgPCB2YWx1ZSkgewogCQkJcHJpbnRfbWVzc2FnZShxZCwgImV4Y2VlZGVkIik7CisJCQlxdW90YV9zZW5kX3dhcm5pbmcodGVzdF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpID8KKwkJCQkJICAgVVNSUVVPVEEgOiBHUlBRVU9UQSwgcWQtPnFkX2lkLAorCQkJCQkgICBzZHAtPnNkX3Zmcy0+c19kZXYsIFFVT1RBX05MX0JIQVJEV0FSTik7CisKIAkJCWVycm9yID0gLUVEUVVPVDsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl93YXJuKSAmJgpAQCAtMTAzOSw2ICsxMDUwLDkgQEAKIAkJCSAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcWQtPnFkX2xhc3Rfd2FybiArCiAJCQkJCSBnZnMyX3R1bmVfZ2V0KHNkcCwKIAkJCQkJCWd0X3F1b3RhX3dhcm5fcGVyaW9kKSAqIEhaKSkgeworCQkJcXVvdGFfc2VuZF93YXJuaW5nKHRlc3RfYml0KFFERl9VU0VSLCAmcWQtPnFkX2ZsYWdzKSA/CisJCQkJCSAgIFVTUlFVT1RBIDogR1JQUVVPVEEsIHFkLT5xZF9pZCwKKwkJCQkJICAgc2RwLT5zZF92ZnMtPnNfZGV2LCBRVU9UQV9OTF9CU09GVFdBUk4pOwogCQkJZXJyb3IgPSBwcmludF9tZXNzYWdlKHFkLCAid2FybmluZyIpOwogCQkJcWQtPnFkX2xhc3Rfd2FybiA9IGppZmZpZXM7CiAJCX0KQEAgLTEwNjksOCArMTA4Myw5IEBACiAJfQogfQogCi1pbnQgZ2ZzMl9xdW90YV9zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoraW50IGdmczJfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIHsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqKnFkYTsKIAl1bnNpZ25lZCBpbnQgbWF4X3FkID0gZ2ZzMl90dW5lX2dldChzZHAsIGd0X3F1b3RhX3NpbXVsX3N5bmMpOwogCXVuc2lnbmVkIGludCBudW1fcWQ7CkBAIC0xMTE4LDcgKzExMzMsNyBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBxX2doOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gcWRfZ2V0KHNkcCwgdXNlciwgaWQsIENSRUFURSwgJnFkKTsKKwllcnJvciA9IHFkX2dldChzZHAsIHVzZXIsIGlkLCAmcWQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xMTI3LDcgKzExNDIsNiBAQAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcV9naCk7CiAKIAlxZF9wdXQocWQpOwotCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMjk4LDEyICsxMzEyLDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIHF1b3RhZF9jaGVja190aW1lbyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqbXNnLAotCQkJICAgICAgIGludCAoKmZ4bikoc3RydWN0IGdmczJfc2JkICpzZHApLAorCQkJICAgICAgIGludCAoKmZ4bikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdCwgdW5zaWduZWQgbG9uZyAqdGltZW8sCiAJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfdGltZW8pCiB7CiAJaWYgKHQgPj0gKnRpbWVvKSB7Ci0JCWludCBlcnJvciA9IGZ4bihzZHApOworCQlpbnQgZXJyb3IgPSBmeG4oc2RwLT5zZF92ZnMsIDApOwogCQlxdW90YWRfZXJyb3Ioc2RwLCBtc2csIGVycm9yKTsKIAkJKnRpbWVvID0gZ2ZzMl90dW5lX2dldF9pKCZzZHAtPnNkX3R1bmUsIG5ld190aW1lbykgKiBIWjsKIAl9IGVsc2UgewpAQCAtMTMzMCw2ICsxMzQ0LDE0IEBACiAJfQogfQogCit2b2lkIGdmczJfd2FrZV91cF9zdGF0ZnMoc3RydWN0IGdmczJfc2JkICpzZHApIHsKKwlpZiAoIXNkcC0+c2Rfc3RhdGZzX2ZvcmNlX3N5bmMpIHsKKwkJc2RwLT5zZF9zdGF0ZnNfZm9yY2Vfc3luYyA9IDE7CisJCXdha2VfdXAoJnNkcC0+c2RfcXVvdGFfd2FpdCk7CisJfQorfQorCisKIC8qKgogICogZ2ZzMl9xdW90YWQgLSBXcml0ZSBjYWNoZWQgcXVvdGEgY2hhbmdlcyBpbnRvIHRoZSBxdW90YSBmaWxlCiAgKiBAc2RwOiBQb2ludGVyIHRvIEdGUzIgc3VwZXJibG9jawpAQCAtMTM0OSw4ICsxMzcxLDE1IEBACiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAogCQkvKiBVcGRhdGUgdGhlIG1hc3RlciBzdGF0ZnMgZmlsZSAqLwotCQlxdW90YWRfY2hlY2tfdGltZW8oc2RwLCAic3RhdGZzIiwgZ2ZzMl9zdGF0ZnNfc3luYywgdCwKLQkJCQkgICAmc3RhdGZzX3RpbWVvLCAmdHVuZS0+Z3Rfc3RhdGZzX3F1YW50dW0pOworCQlpZiAoc2RwLT5zZF9zdGF0ZnNfZm9yY2Vfc3luYykgeworCQkJaW50IGVycm9yID0gZ2ZzMl9zdGF0ZnNfc3luYyhzZHAtPnNkX3ZmcywgMCk7CisJCQlxdW90YWRfZXJyb3Ioc2RwLCAic3RhdGZzIiwgZXJyb3IpOworCQkJc3RhdGZzX3RpbWVvID0gZ2ZzMl90dW5lX2dldChzZHAsIGd0X3N0YXRmc19xdWFudHVtKSAqIEhaOworCQl9CisJCWVsc2UKKwkJCXF1b3RhZF9jaGVja190aW1lbyhzZHAsICJzdGF0ZnMiLCBnZnMyX3N0YXRmc19zeW5jLCB0LAorCQkJCSAgIAkgICAmc3RhdGZzX3RpbWVvLAorCQkJCQkgICAmdHVuZS0+Z3Rfc3RhdGZzX3F1YW50dW0pOwogCiAJCS8qIFVwZGF0ZSBxdW90YSBmaWxlICovCiAJCXF1b3RhZF9jaGVja190aW1lbyhzZHAsICJzeW5jIiwgZ2ZzMl9xdW90YV9zeW5jLCB0LApAQCAtMTM2Nyw3ICsxMzk2LDcgQEAKIAkJc3Bpbl9sb2NrKCZzZHAtPnNkX3RydW5jX2xvY2spOwogCQllbXB0eSA9IGxpc3RfZW1wdHkoJnNkcC0+c2RfdHJ1bmNfbGlzdCk7CiAJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3RydW5jX2xvY2spOwotCQlpZiAoZW1wdHkpCisJCWlmIChlbXB0eSAmJiAhc2RwLT5zZF9zdGF0ZnNfZm9yY2Vfc3luYykKIAkJCXQgLT0gc2NoZWR1bGVfdGltZW91dCh0KTsKIAkJZWxzZQogCQkJdCA9IDA7CkBAIC0xMzc3LDMgKzE0MDYsMTgxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl9xdW90YV9nZXRfeHN0YXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJIHN0cnVjdCBmc19xdW90YV9zdGF0ICpmcXMpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCisJbWVtc2V0KGZxcywgMCwgc2l6ZW9mKHN0cnVjdCBmc19xdW90YV9zdGF0KSk7CisJZnFzLT5xc192ZXJzaW9uID0gRlNfUVNUQVRfVkVSU0lPTjsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3F1b3RhID09IEdGUzJfUVVPVEFfT04pCisJCWZxcy0+cXNfZmxhZ3MgPSAoWEZTX1FVT1RBX1VEUV9FTkZEIHwgWEZTX1FVT1RBX0dEUV9FTkZEKTsKKwllbHNlIGlmIChzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgPT0gR0ZTMl9RVU9UQV9BQ0NPVU5UKQorCQlmcXMtPnFzX2ZsYWdzID0gKFhGU19RVU9UQV9VRFFfQUNDVCB8IFhGU19RVU9UQV9HRFFfQUNDVCk7CisJaWYgKHNkcC0+c2RfcXVvdGFfaW5vZGUpIHsKKwkJZnFzLT5xc191cXVvdGEucWZzX2lubyA9IEdGUzJfSShzZHAtPnNkX3F1b3RhX2lub2RlKS0+aV9ub19hZGRyOworCQlmcXMtPnFzX3VxdW90YS5xZnNfbmJsa3MgPSBzZHAtPnNkX3F1b3RhX2lub2RlLT5pX2Jsb2NrczsKKwl9CisJZnFzLT5xc191cXVvdGEucWZzX25leHRlbnRzID0gMTsgLyogdW5zdXBwb3J0ZWQgKi8KKwlmcXMtPnFzX2dxdW90YSA9IGZxcy0+cXNfdXF1b3RhOyAvKiBpdHMgdGhlIHNhbWUgaW5vZGUgaW4gYm90aCBjYXNlcyAqLworCWZxcy0+cXNfaW5jb3JlZHFzID0gYXRvbWljX3JlYWQoJnFkX2xydV9jb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94cXVvdGFfZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKKwkJCSAgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpmZHEpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqcWx2YjsKKwlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgcV9naDsKKwlpbnQgZXJyb3I7CisKKwltZW1zZXQoZmRxLCAwLCBzaXplb2Yoc3RydWN0IGZzX2Rpc2tfcXVvdGEpKTsKKworCWlmIChzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgPT0gR0ZTMl9RVU9UQV9PRkYpCisJCXJldHVybiAtRVNSQ0g7IC8qIENyYXp5IFhGUyBlcnJvciBjb2RlICovCisKKwlpZiAodHlwZSA9PSBVU1JRVU9UQSkKKwkJdHlwZSA9IFFVT1RBX1VTRVI7CisJZWxzZSBpZiAodHlwZSA9PSBHUlBRVU9UQSkKKwkJdHlwZSA9IFFVT1RBX0dST1VQOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnJvciA9IHFkX2dldChzZHAsIHR5cGUsIGlkLCAmcWQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWVycm9yID0gZG9fZ2xvY2socWQsIEZPUkNFLCAmcV9naCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCXFsdmIgPSAoc3RydWN0IGdmczJfcXVvdGFfbHZiICopcWQtPnFkX2dsLT5nbF9sdmI7CisJZmRxLT5kX3ZlcnNpb24gPSBGU19EUVVPVF9WRVJTSU9OOworCWZkcS0+ZF9mbGFncyA9ICh0eXBlID09IFFVT1RBX1VTRVIpID8gWEZTX1VTRVJfUVVPVEEgOiBYRlNfR1JPVVBfUVVPVEE7CisJZmRxLT5kX2lkID0gaWQ7CisJZmRxLT5kX2Jsa19oYXJkbGltaXQgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl9saW1pdCk7CisJZmRxLT5kX2Jsa19zb2Z0bGltaXQgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl93YXJuKTsKKwlmZHEtPmRfYmNvdW50ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfdmFsdWUpOworCisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnFfZ2gpOworb3V0OgorCXFkX3B1dChxZCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBHRlMyIG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIFhGUyBmaWVsZHMgKi8KKyNkZWZpbmUgR0ZTMl9GSUVMRE1BU0sgKEZTX0RRX0JTT0ZUfEZTX0RRX0JIQVJEKQorCitzdGF0aWMgaW50IGdmczJfeHF1b3RhX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCisJCQkgICBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZmRxKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koc2RwLT5zZF9xdW90YV9pbm9kZSk7CisJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CisJc3RydWN0IGdmczJfaG9sZGVyIHFfZ2gsIGlfZ2g7CisJdW5zaWduZWQgaW50IGRhdGFfYmxvY2tzLCBpbmRfYmxvY2tzOworCXVuc2lnbmVkIGludCBibG9ja3MgPSAwOworCWludCBhbGxvY19yZXF1aXJlZDsKKwlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CisJbG9mZl90IG9mZnNldDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3F1b3RhID09IEdGUzJfUVVPVEFfT0ZGKQorCQlyZXR1cm4gLUVTUkNIOyAvKiBDcmF6eSBYRlMgZXJyb3IgY29kZSAqLworCisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIFVTUlFVT1RBOgorCQl0eXBlID0gUVVPVEFfVVNFUjsKKwkJaWYgKGZkcS0+ZF9mbGFncyAhPSBYRlNfVVNFUl9RVU9UQSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIEdSUFFVT1RBOgorCQl0eXBlID0gUVVPVEFfR1JPVVA7CisJCWlmIChmZHEtPmRfZmxhZ3MgIT0gWEZTX0dST1VQX1FVT1RBKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmZHEtPmRfZmllbGRtYXNrICYgfkdGUzJfRklFTERNQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZmRxLT5kX2lkICE9IGlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycm9yID0gcWRfZ2V0KHNkcCwgdHlwZSwgaWQsICZxZCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwltdXRleF9sb2NrKCZpcC0+aV9pbm9kZS5pX211dGV4KTsKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChxZC0+cWRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJnFfZ2gpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcHV0OworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZpX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3E7CisKKwkvKiBDaGVjayBmb3IgZXhpc3RpbmcgZW50cnksIGlmIG5vbmUgdGhlbiBhbGxvYyBuZXcgYmxvY2tzICovCisJZXJyb3IgPSB1cGRhdGVfcWQoc2RwLCBxZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9pOworCisJLyogSWYgbm90aGluZyBoYXMgY2hhbmdlZCwgdGhpcyBpcyBhIG5vLW9wICovCisJaWYgKChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpICYmCisJICAgIChmZHEtPmRfYmxrX3NvZnRsaW1pdCA9PSBiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfd2FybikpKQorCQlmZHEtPmRfZmllbGRtYXNrIF49IEZTX0RRX0JTT0ZUOworCWlmICgoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JIQVJEKSAmJgorCSAgICAoZmRxLT5kX2Jsa19oYXJkbGltaXQgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSkpCisJCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQkhBUkQ7CisJaWYgKGZkcS0+ZF9maWVsZG1hc2sgPT0gMCkKKwkJZ290byBvdXRfaTsKKworCW9mZnNldCA9IHFkMm9mZnNldChxZCk7CisJZXJyb3IgPSBnZnMyX3dyaXRlX2FsbG9jX3JlcXVpcmVkKGlwLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSksCisJCQkJCSAgJmFsbG9jX3JlcXVpcmVkKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2k7CisJaWYgKGFsbG9jX3JlcXVpcmVkKSB7CisJCWFsID0gZ2ZzMl9hbGxvY19nZXQoaXApOworCQlpZiAoYWwgPT0gTlVMTCkKKwkJCWdvdG8gb3V0X2k7CisJCWdmczJfd3JpdGVfY2FsY19yZXNlcnYoaXAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSksCisJCQkJICAgICAgICZkYXRhX2Jsb2NrcywgJmluZF9ibG9ja3MpOworCQlibG9ja3MgPSBhbC0+YWxfcmVxdWVzdGVkID0gMSArIGRhdGFfYmxvY2tzICsgaW5kX2Jsb2NrczsKKwkJZXJyb3IgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZShpcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2FsbG9jOworCX0KKworCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIGJsb2NrcyArIFJFU19ESU5PREUgKyAxLCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkvKiBBcHBseSBjaGFuZ2VzICovCisJZXJyb3IgPSBnZnMyX2FkanVzdF9xdW90YShpcCwgb2Zmc2V0LCAwLCBxZCwgZmRxKTsKKworCWdmczJfdHJhbnNfZW5kKHNkcCk7CitvdXRfcmVsZWFzZToKKwlpZiAoYWxsb2NfcmVxdWlyZWQpIHsKKwkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoaXApOworb3V0X2FsbG9jOgorCQlnZnMyX2FsbG9jX3B1dChpcCk7CisJfQorb3V0X2k6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOworb3V0X3E6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnFfZ2gpOworb3V0X3B1dDoKKwltdXRleF91bmxvY2soJmlwLT5pX2lub2RlLmlfbXV0ZXgpOworCXFkX3B1dChxZCk7CisJcmV0dXJuIGVycm9yOworfQorCitjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGdmczJfcXVvdGFjdGxfb3BzID0geworCS5xdW90YV9zeW5jICAgICA9IGdmczJfcXVvdGFfc3luYywKKwkuZ2V0X3hzdGF0ZSAgICAgPSBnZnMyX3F1b3RhX2dldF94c3RhdGUsCisJLmdldF94cXVvdGEJPSBnZnMyX3hxdW90YV9nZXQsCisJLnNldF94cXVvdGEJPSBnZnMyX3hxdW90YV9zZXQsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmggYi9mcy9nZnMyL3F1b3RhLmgKaW5kZXggMGZhNWZhNi4uZTI3MWZhMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5oCisrKyBiL2ZzL2dmczIvcXVvdGEuaApAQCAtMjUsMTMgKzI1LDE1IEBACiBleHRlcm4gdm9pZCBnZnMyX3F1b3RhX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHM2NCBjaGFuZ2UsCiAJCQkgICAgICB1MzIgdWlkLCB1MzIgZ2lkKTsKIAotZXh0ZXJuIGludCBnZnMyX3F1b3RhX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX3F1b3RhX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBnZnMyX3F1b3RhX3JlZnJlc2goc3RydWN0IGdmczJfc2JkICpzZHAsIGludCB1c2VyLCB1MzIgaWQpOwogCiBleHRlcm4gaW50IGdmczJfcXVvdGFfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gdm9pZCBnZnMyX3F1b3RhX2NsZWFudXAoc3RydWN0IGdmczJfc2JkICpzZHApOwogZXh0ZXJuIGludCBnZnMyX3F1b3RhZCh2b2lkICpkYXRhKTsKIAorZXh0ZXJuIHZvaWQgZ2ZzMl93YWtlX3VwX3N0YXRmcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGdmczJfcXVvdGFfbG9ja19jaGVjayhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CkBAIC01MCw1ICs1Miw2IEBACiB9CiAKIGV4dGVybiBpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgZ2ZzMl9xdW90YWN0bF9vcHM7CiAKICNlbmRpZiAvKiBfX1FVT1RBX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmVjb3ZlcnkuYyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwppbmRleCA1OWQyNjk1Li40YjliZWNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCkBAIC03LDYgKzcsNyBAQAogICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpAQCAtNDA5LDcgKzQxMCw5IEBACiAJbWVtc2V0KGxoLCAwLCBzaXplb2Yoc3RydWN0IGdmczJfbG9nX2hlYWRlcikpOwogCWxoLT5saF9oZWFkZXIubWhfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKIAlsaC0+bGhfaGVhZGVyLm1oX3R5cGUgPSBjcHVfdG9fYmUzMihHRlMyX01FVEFUWVBFX0xIKTsKKwlsaC0+bGhfaGVhZGVyLl9fcGFkMCA9IGNwdV90b19iZTY0KDApOwogCWxoLT5saF9oZWFkZXIubWhfZm9ybWF0ID0gY3B1X3RvX2JlMzIoR0ZTMl9GT1JNQVRfTEgpOworCWxoLT5saF9oZWFkZXIubWhfamlkID0gY3B1X3RvX2JlMzIoc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKIAlsaC0+bGhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChoZWFkLT5saF9zZXF1ZW5jZSArIDEpOwogCWxoLT5saF9mbGFncyA9IGNwdV90b19iZTMyKEdGUzJfTE9HX0hFQURfVU5NT1VOVCk7CiAJbGgtPmxoX2Jsa25vID0gY3B1X3RvX2JlMzIobGJsb2NrKTsKQEAgLTU5Myw2ICs1OTYsNyBAQAogfQogCiBzdHJ1Y3Qgc2xvd193b3JrX29wcyBnZnMyX3JlY292ZXJfb3BzID0geworCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkuZ2V0X3JlZiA9IGdmczJfcmVjb3Zlcl9nZXRfcmVmLAogCS5wdXRfcmVmID0gZ2ZzMl9yZWNvdmVyX3B1dF9yZWYsCiAJLmV4ZWN1dGUgPSBnZnMyX3JlY292ZXJfd29yaywKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggOGYxY2ZiMC4uMDYwOGY0OSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTE3MTAsMTEgKzE3MTAsMTYgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwogCXN0cnVjdCBnZnMyX2hvbGRlciByaV9naCwgcmdkX2doOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX3JpbmRleCk7CisJaW50IHJpX2xvY2tlZCA9IDA7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKKwlpZiAoIWdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSkgeworCQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWw7CisJCXJpX2xvY2tlZCA9IDE7CisJfQogCiAJZXJyb3IgPSAtRUlOVkFMOwogCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgbm9fYWRkcik7CkBAIC0xNzMwLDcgKzE3MzUsOCBAQAogCiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJnZF9naCk7CiBmYWlsX3JpbmRleDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOworCWlmIChyaV9sb2NrZWQpCisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7CiBmYWlsOgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAwZWMzZWM2Li5jMjgyYWQ0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC03MCw2ICs3MCwxMSBAQAogCU9wdF9jb21taXQsCiAJT3B0X2Vycl93aXRoZHJhdywKIAlPcHRfZXJyX3BhbmljLAorCU9wdF9zdGF0ZnNfcXVhbnR1bSwKKwlPcHRfc3RhdGZzX3BlcmNlbnQsCisJT3B0X3F1b3RhX3F1YW50dW0sCisJT3B0X2JhcnJpZXIsCisJT3B0X25vYmFycmllciwKIAlPcHRfZXJyb3IsCiB9OwogCkBAIC0xMDEsMTggKzEwNiwyMyBAQAogCXtPcHRfY29tbWl0LCAiY29tbWl0PSVkIn0sCiAJe09wdF9lcnJfd2l0aGRyYXcsICJlcnJvcnM9d2l0aGRyYXcifSwKIAl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAorCXtPcHRfc3RhdGZzX3F1YW50dW0sICJzdGF0ZnNfcXVhbnR1bT0lZCJ9LAorCXtPcHRfc3RhdGZzX3BlcmNlbnQsICJzdGF0ZnNfcGVyY2VudD0lZCJ9LAorCXtPcHRfcXVvdGFfcXVhbnR1bSwgInF1b3RhX3F1YW50dW09JWQifSwKKwl7T3B0X2JhcnJpZXIsICJiYXJyaWVyIn0sCisJe09wdF9ub2JhcnJpZXIsICJub2JhcnJpZXIifSwKIAl7T3B0X2Vycm9yLCBOVUxMfQogfTsKIAogLyoqCiAgKiBnZnMyX21vdW50X2FyZ3MgLSBQYXJzZSBtb3VudCBvcHRpb25zCi0gKiBAc2RwOgotICogQGRhdGE6CisgKiBAYXJnczogVGhlIHN0cnVjdHVyZSBpbnRvIHdoaWNoIHRoZSBwYXJzZWQgb3B0aW9ucyB3aWxsIGJlIHdyaXR0ZW4KKyAqIEBvcHRpb25zOiBUaGUgb3B0aW9ucyB0byBwYXJzZQogICoKICAqIFJldHVybjogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpvcHRpb25zKQoraW50IGdmczJfbW91bnRfYXJncyhzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpvcHRpb25zKQogewogCWNoYXIgKm87CiAJaW50IHRva2VuOwpAQCAtMTU3LDcgKzE2Nyw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBPcHRfZGVidWc6CiAJCQlpZiAoYXJncy0+YXJfZXJyb3JzID09IEdGUzJfRVJST1JTX1BBTklDKSB7Ci0JCQkJZnNfaW5mbyhzZHAsICItbyBkZWJ1ZyBhbmQgLW8gZXJyb3JzPXBhbmljICIKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiAtbyBkZWJ1ZyBhbmQgLW8gZXJyb3JzPXBhbmljICIKIAkJCQkgICAgICAgImFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTIxMCw3ICsyMjAsMjkgQEAKIAkJY2FzZSBPcHRfY29tbWl0OgogCQkJcnYgPSBtYXRjaF9pbnQoJnRtcFswXSwgJmFyZ3MtPmFyX2NvbW1pdCk7CiAJCQlpZiAocnYgfHwgYXJncy0+YXJfY29tbWl0IDw9IDApIHsKLQkJCQlmc19pbmZvKHNkcCwgImNvbW1pdCBtb3VudCBvcHRpb24gcmVxdWlyZXMgYSBwb3NpdGl2ZSBudW1lcmljIGFyZ3VtZW50XG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBjb21taXQgbW91bnQgb3B0aW9uIHJlcXVpcmVzIGEgcG9zaXRpdmUgbnVtZXJpYyBhcmd1bWVudFxuIik7CisJCQkJcmV0dXJuIHJ2ID8gcnYgOiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N0YXRmc19xdWFudHVtOgorCQkJcnYgPSBtYXRjaF9pbnQoJnRtcFswXSwgJmFyZ3MtPmFyX3N0YXRmc19xdWFudHVtKTsKKwkJCWlmIChydiB8fCBhcmdzLT5hcl9zdGF0ZnNfcXVhbnR1bSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBzdGF0ZnNfcXVhbnR1bSBtb3VudCBvcHRpb24gcmVxdWlyZXMgYSBub24tbmVnYXRpdmUgbnVtZXJpYyBhcmd1bWVudFxuIik7CisJCQkJcmV0dXJuIHJ2ID8gcnYgOiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT3B0X3F1b3RhX3F1YW50dW06CisJCQlydiA9IG1hdGNoX2ludCgmdG1wWzBdLCAmYXJncy0+YXJfcXVvdGFfcXVhbnR1bSk7CisJCQlpZiAocnYgfHwgYXJncy0+YXJfcXVvdGFfcXVhbnR1bSA8PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogcXVvdGFfcXVhbnR1bSBtb3VudCBvcHRpb24gcmVxdWlyZXMgYSBwb3NpdGl2ZSBudW1lcmljIGFyZ3VtZW50XG4iKTsKKwkJCQlyZXR1cm4gcnYgPyBydiA6IC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3RhdGZzX3BlcmNlbnQ6CisJCQlydiA9IG1hdGNoX2ludCgmdG1wWzBdLCAmYXJncy0+YXJfc3RhdGZzX3BlcmNlbnQpOworCQkJaWYgKHJ2IHx8IGFyZ3MtPmFyX3N0YXRmc19wZXJjZW50IDwgMCB8fAorCQkJICAgIGFyZ3MtPmFyX3N0YXRmc19wZXJjZW50ID4gMTAwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3RhdGZzX3BlcmNlbnQgbW91bnQgb3B0aW9uIHJlcXVpcmVzIGEgbnVtZXJpYyBhcmd1bWVudCBiZXR3ZWVuIDAgYW5kIDEwMFxuIik7CiAJCQkJcmV0dXJuIHJ2ID8gcnYgOiAtRUlOVkFMOwogCQkJfQogCQkJYnJlYWs7CkBAIC0yMTksMTUgKzI1MSwyMSBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycl9wYW5pYzoKIAkJCWlmIChhcmdzLT5hcl9kZWJ1ZykgewotCQkJCWZzX2luZm8oc2RwLCAiLW8gZGVidWcgYW5kIC1vIGVycm9ycz1wYW5pYyAiCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogLW8gZGVidWcgYW5kIC1vIGVycm9ycz1wYW5pYyAiCiAJCQkJCSJhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlhcmdzLT5hcl9lcnJvcnMgPSBHRlMyX0VSUk9SU19QQU5JQzsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9iYXJyaWVyOgorCQkJYXJncy0+YXJfbm9iYXJyaWVyID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2JhcnJpZXI6CisJCQlhcmdzLT5hcl9ub2JhcnJpZXIgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycm9yOgogCQlkZWZhdWx0OgotCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogaW52YWxpZCBtb3VudCBvcHRpb246ICVzXG4iLCBvKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNDQyLDcgKzQ4MCwxMCBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICpsX2lwID0gR0ZTMl9JKHNkcC0+c2Rfc2NfaW5vZGUpOwogCXN0cnVjdCBnZnMyX3N0YXRmc19jaGFuZ2VfaG9zdCAqbF9zYyA9ICZzZHAtPnNkX3N0YXRmc19sb2NhbDsKKwlzdHJ1Y3QgZ2ZzMl9zdGF0ZnNfY2hhbmdlX2hvc3QgKm1fc2MgPSAmc2RwLT5zZF9zdGF0ZnNfbWFzdGVyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbF9iaDsKKwlzNjQgeCwgeTsKKwlpbnQgbmVlZF9zeW5jID0gMDsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIobF9pcCwgJmxfYmgpOwpAQCAtNDU2LDkgKzQ5NywxNyBAQAogCWxfc2MtPnNjX2ZyZWUgKz0gZnJlZTsKIAlsX3NjLT5zY19kaW5vZGVzICs9IGRpbm9kZXM7CiAJZ2ZzMl9zdGF0ZnNfY2hhbmdlX291dChsX3NjLCBsX2JoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9zdGF0ZnNfcGVyY2VudCkgeworCQl4ID0gMTAwICogbF9zYy0+c2NfZnJlZTsKKwkJeSA9IG1fc2MtPnNjX2ZyZWUgKiBzZHAtPnNkX2FyZ3MuYXJfc3RhdGZzX3BlcmNlbnQ7CisJCWlmICh4ID49IHkgfHwgeCA8PSAteSkKKwkJCW5lZWRfc3luYyA9IDE7CisJfQogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3N0YXRmc19zcGluKTsKIAogCWJyZWxzZShsX2JoKTsKKwlpZiAobmVlZF9zeW5jKQorCQlnZnMyX3dha2VfdXBfc3RhdGZzKHNkcCk7CiB9CiAKIHZvaWQgdXBkYXRlX3N0YXRmcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICptX2JoLApAQCAtNDg0LDggKzUzMyw5IEBACiAJZ2ZzMl9zdGF0ZnNfY2hhbmdlX291dChtX3NjLCBtX2JoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7CiB9CiAKLWludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoraW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiB7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBnZnMyX2lub2RlICptX2lwID0gR0ZTMl9JKHNkcC0+c2Rfc3RhdGZzX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbF9pcCA9IEdGUzJfSShzZHAtPnNkX3NjX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9zdGF0ZnNfY2hhbmdlX2hvc3QgKm1fc2MgPSAmc2RwLT5zZF9zdGF0ZnNfbWFzdGVyOwpAQCAtNTIxLDYgKzU3MSw3IEBACiAJCWdvdG8gb3V0X2JoMjsKIAogCXVwZGF0ZV9zdGF0ZnMoc2RwLCBtX2JoLCBsX2JoKTsKKwlzZHAtPnNkX3N0YXRmc19mb3JjZV9zeW5jID0gMDsKIAogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAKQEAgLTcxMiw4ICs3NjMsOCBAQAogCWludCBlcnJvcjsKIAogCWZsdXNoX3dvcmtxdWV1ZShnZnMyX2RlbGV0ZV93b3JrcXVldWUpOwotCWdmczJfcXVvdGFfc3luYyhzZHApOwotCWdmczJfc3RhdGZzX3N5bmMoc2RwKTsKKwlnZnMyX3F1b3RhX3N5bmMoc2RwLT5zZF92ZnMsIDApOworCWdmczJfc3RhdGZzX3N5bmMoc2RwLT5zZF92ZnMsIDApOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF90cmFuc19nbCwgTE1fU1RfU0hBUkVELCBHTF9OT0NBQ0hFLAogCQkJCSAgICZ0X2doKTsKQEAgLTEwNjEsOCArMTExMiwxMyBAQAogCiAJc3Bpbl9sb2NrKCZndC0+Z3Rfc3Bpbik7CiAJYXJncy5hcl9jb21taXQgPSBndC0+Z3RfbG9nX2ZsdXNoX3NlY3M7CisJYXJncy5hcl9xdW90YV9xdWFudHVtID0gZ3QtPmd0X3F1b3RhX3F1YW50dW07CisJaWYgKGd0LT5ndF9zdGF0ZnNfc2xvdykKKwkJYXJncy5hcl9zdGF0ZnNfcXVhbnR1bSA9IDA7CisJZWxzZQorCQlhcmdzLmFyX3N0YXRmc19xdWFudHVtID0gZ3QtPmd0X3N0YXRmc19xdWFudHVtOwogCXNwaW5fdW5sb2NrKCZndC0+Z3Rfc3Bpbik7Ci0JZXJyb3IgPSBnZnMyX21vdW50X2FyZ3Moc2RwLCAmYXJncywgZGF0YSk7CisJZXJyb3IgPSBnZnMyX21vdW50X2FyZ3MoJmFyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xMDk3LDggKzExNTMsMjEgQEAKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CiAJZWxzZQogCQlzYi0+c19mbGFncyAmPSB+TVNfUE9TSVhBQ0w7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9ub2JhcnJpZXIpCisJCXNldF9iaXQoU0RGX05PQkFSUklFUlMsICZzZHAtPnNkX2ZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChTREZfTk9CQVJSSUVSUywgJnNkcC0+c2RfZmxhZ3MpOwogCXNwaW5fbG9jaygmZ3QtPmd0X3NwaW4pOwogCWd0LT5ndF9sb2dfZmx1c2hfc2VjcyA9IGFyZ3MuYXJfY29tbWl0OworCWd0LT5ndF9xdW90YV9xdWFudHVtID0gYXJncy5hcl9xdW90YV9xdWFudHVtOworCWlmIChhcmdzLmFyX3N0YXRmc19xdWFudHVtKSB7CisJCWd0LT5ndF9zdGF0ZnNfc2xvdyA9IDA7CisJCWd0LT5ndF9zdGF0ZnNfcXVhbnR1bSA9IGFyZ3MuYXJfc3RhdGZzX3F1YW50dW07CisJfQorCWVsc2UgeworCQlndC0+Z3Rfc3RhdGZzX3Nsb3cgPSAxOworCQlndC0+Z3Rfc3RhdGZzX3F1YW50dW0gPSAzMDsKKwl9CiAJc3Bpbl91bmxvY2soJmd0LT5ndF9zcGluKTsKIAogCWdmczJfb25saW5lX3VldmVudChzZHApOwpAQCAtMTE3OSw3ICsxMjQ4LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IG1udC0+bW50X3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IGdmczJfYXJncyAqYXJncyA9ICZzZHAtPnNkX2FyZ3M7Ci0JaW50IGxmc2VjczsKKwlpbnQgdmFsOwogCiAJaWYgKGlzX2FuY2VzdG9yKG1udC0+bW50X3Jvb3QsIHNkcC0+c2RfbWFzdGVyX2RpcikpCiAJCXNlcV9wcmludGYocywgIixtZXRhIik7CkBAIC0xMjQwLDkgKzEzMDksMTcgQEAKIAl9CiAJaWYgKGFyZ3MtPmFyX2Rpc2NhcmQpCiAJCXNlcV9wcmludGYocywgIixkaXNjYXJkIik7Ci0JbGZzZWNzID0gc2RwLT5zZF90dW5lLmd0X2xvZ19mbHVzaF9zZWNzOwotCWlmIChsZnNlY3MgIT0gNjApCi0JCXNlcV9wcmludGYocywgIixjb21taXQ9JWQiLCBsZnNlY3MpOworCXZhbCA9IHNkcC0+c2RfdHVuZS5ndF9sb2dfZmx1c2hfc2VjczsKKwlpZiAodmFsICE9IDYwKQorCQlzZXFfcHJpbnRmKHMsICIsY29tbWl0PSVkIiwgdmFsKTsKKwl2YWwgPSBzZHAtPnNkX3R1bmUuZ3Rfc3RhdGZzX3F1YW50dW07CisJaWYgKHZhbCAhPSAzMCkKKwkJc2VxX3ByaW50ZihzLCAiLHN0YXRmc19xdWFudHVtPSVkIiwgdmFsKTsKKwl2YWwgPSBzZHAtPnNkX3R1bmUuZ3RfcXVvdGFfcXVhbnR1bTsKKwlpZiAodmFsICE9IDYwKQorCQlzZXFfcHJpbnRmKHMsICIscXVvdGFfcXVhbnR1bT0lZCIsIHZhbCk7CisJaWYgKGFyZ3MtPmFyX3N0YXRmc19wZXJjZW50KQorCQlzZXFfcHJpbnRmKHMsICIsc3RhdGZzX3BlcmNlbnQ9JWQiLCBhcmdzLT5hcl9zdGF0ZnNfcGVyY2VudCk7CiAJaWYgKGFyZ3MtPmFyX2Vycm9ycyAhPSBHRlMyX0VSUk9SU19ERUZBVUxUKSB7CiAJCWNvbnN0IGNoYXIgKnN0YXRlOwogCkBAIC0xMjU5LDYgKzEzMzYsOSBAQAogCQl9CiAJCXNlcV9wcmludGYocywgIixlcnJvcnM9JXMiLCBzdGF0ZSk7CiAJfQorCWlmICh0ZXN0X2JpdChTREZfTk9CQVJSSUVSUywgJnNkcC0+c2RfZmxhZ3MpKQorCQlzZXFfcHJpbnRmKHMsICIsbm9iYXJyaWVyIik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5oIGIvZnMvZ2ZzMi9zdXBlci5oCmluZGV4IDIzNWRiMzYuLjNkZjYwZjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuaAorKysgYi9mcy9nZnMyL3N1cGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLWV4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKK2V4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MsIGNoYXIgKmRhdGEpOwogCiBleHRlcm4gc3RydWN0IGdmczJfamRlc2MgKmdmczJfamRlc2NfZmluZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCk7CiBleHRlcm4gaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJCQkgIGNvbnN0IHZvaWQgKmJ1Zik7CiBleHRlcm4gdm9pZCB1cGRhdGVfc3RhdGZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm1fYmgsCiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqbF9iaCk7Ci1leHRlcm4gaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIAogZXh0ZXJuIGludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gdm9pZCBnZnMyX3VuZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3lzLmMgYi9mcy9nZnMyL3N5cy5jCmluZGV4IDQ0NjMyOTcuLmM1ZGFkMWUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJaWYgKHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdmczJfc3RhdGZzX3N5bmMoc2RwKTsKKwlnZnMyX3N0YXRmc19zeW5jKHNkcC0+c2RfdmZzLCAwKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0xNzEsMTMgKzE3MSwxNCBAQAogCWlmIChzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlnZnMyX3F1b3RhX3N5bmMoc2RwKTsKKwlnZnMyX3F1b3RhX3N5bmMoc2RwLT5zZF92ZnMsIDApOwogCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHF1b3RhX3JlZnJlc2hfdXNlcl9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLAogCQkJCQlzaXplX3QgbGVuKQogeworCWludCBlcnJvcjsKIAl1MzIgaWQ7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCkBAIC0xODUsMTMgKzE4NiwxNCBAQAogCiAJaWQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCi0JZ2ZzMl9xdW90YV9yZWZyZXNoKHNkcCwgMSwgaWQpOwotCXJldHVybiBsZW47CisJZXJyb3IgPSBnZnMyX3F1b3RhX3JlZnJlc2goc2RwLCAxLCBpZCk7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBsZW47CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHF1b3RhX3JlZnJlc2hfZ3JvdXBfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkJIHNpemVfdCBsZW4pCiB7CisJaW50IGVycm9yOwogCXUzMiBpZDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTE5OSw4ICsyMDEsOCBAQAogCiAJaWQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCi0JZ2ZzMl9xdW90YV9yZWZyZXNoKHNkcCwgMCwgaWQpOwotCXJldHVybiBsZW47CisJZXJyb3IgPSBnZnMyX3F1b3RhX3JlZnJlc2goc2RwLCAwLCBpZCk7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBsZW47CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRlbW90ZV9ycV9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi94YXR0ci5jIGIvZnMvZ2ZzMi94YXR0ci5jCmluZGV4IDhhMGY4ZWYuLjkxMmY1Y2IgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRyLmMKQEAgLTE4Niw4ICsxODYsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCitzdGF0aWMgaW50IGdmczJfZWFfZmluZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsKQogewogCXN0cnVjdCBlYV9maW5kIGVmOwogCWludCBlcnJvcjsKQEAgLTUxNiw4ICs1MTYsOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGdmczJfZWFfZ2V0X2NvcHkoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgICAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGdmczJfZWFfZ2V0X2NvcHkoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCisJCQkgICAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCiB7CiAJaW50IHJldDsKIAlzaXplX3QgbGVuID0gR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpOwpAQCAtNTM0LDYgKzUzNCwzNiBAQAogCXJldHVybiBsZW47CiB9CiAKK2ludCBnZnMyX3hhdHRyX2FjbF9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICoqcHBkYXRhKQoreworCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOworCWludCBlcnJvcjsKKwlpbnQgbGVuOworCWNoYXIgKmRhdGE7CisKKwllcnJvciA9IGdmczJfZWFfZmluZChpcCwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCAmZWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWlmICghZWwuZWxfZWEpCisJCWdvdG8gb3V0OworCWlmICghR0ZTMl9FQV9EQVRBX0xFTihlbC5lbF9lYSkpCisJCWdvdG8gb3V0OworCisJbGVuID0gR0ZTMl9FQV9EQVRBX0xFTihlbC5lbF9lYSk7CisJZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJZXJyb3IgPSAtRU5PTUVNOworCWlmIChkYXRhID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXJyb3IgPSBnZnMyX2VhX2dldF9jb3B5KGlwLCAmZWwsIGRhdGEsIGxlbik7CisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gbGVuOworCSpwcGRhdGEgPSBkYXRhOworb3V0OgorCWJyZWxzZShlbC5lbF9iaCk7CisJcmV0dXJuIGVycm9yOworfQorCiAvKioKICAqIGdmczJfeGF0dHJfZ2V0IC0gR2V0IGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKICAqIEBpbm9kZTogVGhlIGlub2RlCkBAIC0xMjU5LDIyICsxMjg5LDI2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2ZzMl9lYV9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgICAgIHN0cnVjdCBpYXR0ciAqYXR0ciwgY2hhciAqZGF0YSkKK2ludCBnZnMyX3hhdHRyX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0ciwgY2hhciAqZGF0YSkKIHsKKwlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CiAJaW50IGVycm9yOwogCi0JaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC0+ZWxfZWEpKSB7CisJZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIEdGUzJfRUFUWVBFX1NZUywgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTLCAmZWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC5lbF9lYSkpIHsKIAkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKLQkJbWVtY3B5KEdGUzJfRUEyREFUQShlbC0+ZWxfZWEpLCBkYXRhLAotCQkgICAgICAgR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpKTsKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGVsLmVsX2JoLCAxKTsKKwkJbWVtY3B5KEdGUzJfRUEyREFUQShlbC5lbF9lYSksIGRhdGEsCisJCSAgICAgICBHRlMyX0VBX0RBVEFfTEVOKGVsLmVsX2VhKSk7CiAJfSBlbHNlCi0JCWVycm9yID0gZWFfYWNsX2NobW9kX3Vuc3R1ZmZlZChpcCwgZWwtPmVsX2VhLCBkYXRhKTsKKwkJZXJyb3IgPSBlYV9hY2xfY2htb2RfdW5zdHVmZmVkKGlwLCBlbC5lbF9lYSwgZGF0YSk7CiAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE1MDcsMTggKzE1NDEsNiBAQAogCXJldHVybiBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfVVNSLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQotewotCXJldHVybiBnZnMyX3hhdHRyX2dldChpbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCBidWZmZXIsIHNpemUpOwotfQotCi1zdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlyZXR1cm4gZ2ZzMl94YXR0cl9zZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBnZnMyX3hhdHRyX3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CkBAIC0xNTQzLDEyICsxNTY1LDYgQEAKIAkuc2V0ICAgID0gZ2ZzMl94YXR0cl9zZWN1cml0eV9zZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlciA9IHsKLQkucHJlZml4ID0gWEFUVFJfU1lTVEVNX1BSRUZJWCwKLQkuZ2V0ICAgID0gZ2ZzMl94YXR0cl9zeXN0ZW1fZ2V0LAotCS5zZXQgICAgPSBnZnMyX3hhdHRyX3N5c3RlbV9zZXQsCi19OwotCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqZ2ZzMl94YXR0cl9oYW5kbGVyc1tdID0gewogCSZnZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKIAkmZ2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi94YXR0ci5oIGIvZnMvZ2ZzMi94YXR0ci5oCmluZGV4IGNiZGZkNzcuLjhkNmFlNTggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuaAorKysgYi9mcy9nZnMyL3hhdHRyLmgKQEAgLTYyLDExICs2Miw3IEBACiAKIC8qIEV4cG9ydGVkIHRvIGFjbC5jICovCiAKLWV4dGVybiBpbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpOwotZXh0ZXJuIGludCBnZnMyX2VhX2dldF9jb3B5KHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsLAotCQkJICAgIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKLWV4dGVybiBpbnQgZ2ZzMl9lYV9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCQkgICAgIHN0cnVjdCBpYXR0ciAqYXR0ciwgY2hhciAqZGF0YSk7CitleHRlcm4gaW50IGdmczJfeGF0dHJfYWNsX2dldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKipkYXRhKTsKK2V4dGVybiBpbnQgZ2ZzMl94YXR0cl9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpOwogCiAjZW5kaWYgLyogX19FQVRUUl9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDliOWQ2MzkuLjA1MmYyMTQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9idHJlZS5jCisrKyBiL2ZzL2hmcy9idHJlZS5jCkBAIC01OCw2ICs1OCwxMSBAQAogCX0KIAl1bmxvY2tfbmV3X2lub2RlKHRyZWUtPmlub2RlKTsKIAorCWlmICghSEZTX0kodHJlZS0+aW5vZGUpLT5maXJzdF9ibG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGludmFsaWQgYnRyZWUgZXh0ZW50IHJlY29yZHMgKDAgc2l6ZSkuXG4iKTsKKwkJZ290byBmcmVlX2lub2RlOworCX0KKwogCW1hcHBpbmcgPSB0cmVlLT5pbm9kZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAwLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy93cmFwcGVyLmMgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwppbmRleCAxNzVkMDhlLi5iZWQ3OGFjOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTk5LDYgKzk5LDEwIEBACiAKIAlpZiAoaGZzcGx1c19nZXRfbGFzdF9zZXNzaW9uKHNiLCAmcGFydF9zdGFydCwgJnBhcnRfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOworCWlmICgodTY0KXBhcnRfc3RhcnQgKyBwYXJ0X3NpemUgPiAweDEwMDAwMDAwMFVMTCkgeworCQlwcl9lcnIoImhmczogdm9sdW1lcyBsYXJnZXIgdGhhbiAyVEIgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXdoaWxlICgxKSB7CiAJCWJoID0gc2JfYnJlYWQ1MTIoc2IsIHBhcnRfc3RhcnQgKyBIRlNQTFVTX1ZPTEhFQURfU0VDVE9SLCB2aGRyKTsKIAkJaWYgKCFiaCkKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDRkOGUzYmUuLjA2YzFmMDIgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTE1NywxMSArMTU2LDYgQEAKIAogCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpCiAJCWdvdG8gb3V0OwotCi0JLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaV9pbnRlZ3JpdHkgKi8KLQlpZiAoaW1hX2lub2RlX2FsbG9jKGlub2RlKSkKLQkJZ290byBvdXRfZnJlZV9zZWN1cml0eTsKLQogCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9sb2NrKTsKIAlsb2NrZGVwX3NldF9jbGFzcygmaW5vZGUtPmlfbG9jaywgJnNiLT5zX3R5cGUtPmlfbG9ja19rZXkpOwogCkBAIC0yMDEsOSArMTk1LDYgQEAKICNlbmRpZgogCiAJcmV0dXJuIDA7Ci0KLW91dF9mcmVlX3NlY3VyaXR5OgotCXNlY3VyaXR5X2lub2RlX2ZyZWUoaW5vZGUpOwogb3V0OgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtMjM1LDcgKzIyNiw2IEBACiB2b2lkIF9fZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUJVR19PTihpbm9kZV9oYXNfYnVmZmVycyhpbm9kZSkpOwotCWltYV9pbm9kZV9mcmVlKGlub2RlKTsKIAlzZWN1cml0eV9pbm9kZV9mcmVlKGlub2RlKTsKIAlmc25vdGlmeV9pbm9kZV9kZWxldGUoaW5vZGUpOwogI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDdiMTdhMTQuLjZjNzUxMTAgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQkgICB1NjQgbGVuLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCB0bXA7Ci0JdW5zaWduZWQgaW50IHN0YXJ0X2JsazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfYmxrOwogCWxvbmcgbG9uZyBsZW5ndGggPSAwLCBtYXBfbGVuID0gMDsKIAl1NjQgbG9naWNhbCA9IDAsIHBoeXMgPSAwLCBzaXplID0gMDsKIAl1MzIgZmxhZ3MgPSBGSUVNQVBfRVhURU5UX01FUkdFRDsKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IGJkM2MwNzMuLjQxNjBhZmEgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtNzMsNiArNzMsNyBAQAogRVhQT1JUX1NZTUJPTChqb3VybmFsX2Fja19lcnIpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX2NsZWFyX2Vycik7CiBFWFBPUlRfU1lNQk9MKGxvZ193YWl0X2NvbW1pdCk7CitFWFBPUlRfU1lNQk9MKGxvZ19zdGFydF9jb21taXQpOwogRVhQT1JUX1NZTUJPTChqb3VybmFsX3N0YXJ0X2NvbW1pdCk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfZm9yY2VfY29tbWl0X25lc3RlZCk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfd2lwZSk7CkBAIC03NTYsNiArNzU3LDcgQEAKIAogCXJldHVybiBqb3VybmFsOwogb3V0X2VycjoKKwlrZnJlZShqb3VybmFsLT5qX3didWYpOwogCWtmcmVlKGpvdXJuYWwpOwogCXJldHVybiBOVUxMOwogfQpAQCAtODIwLDYgKzgyMiw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggYjBhYjUyMS4uZmVkODUzODggMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC05MTMsNiArOTEzLDcgQEAKIAogCXJldHVybiBqb3VybmFsOwogb3V0X2VycjoKKwlrZnJlZShqb3VybmFsLT5qX3didWYpOwogCWpiZDJfc3RhdHNfcHJvY19leGl0KGpvdXJuYWwpOwogCWtmcmVlKGpvdXJuYWwpOwogCXJldHVybiBOVUxMOwpAQCAtOTg2LDYgKzk4Nyw3IEBACiAKIAlyZXR1cm4gam91cm5hbDsKIG91dF9lcnI6CisJa2ZyZWUoam91cm5hbC0+al93YnVmKTsKIAlqYmQyX3N0YXRzX3Byb2NfZXhpdChqb3VybmFsKTsKIAlrZnJlZShqb3VybmFsKTsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWQuYyBiL2ZzL2pmZnMyL3JlYWQuYwppbmRleCBjZmUwNWMxLi4zZjM5YmUxIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9yZWFkLmMKKysrIGIvZnMvamZmczIvcmVhZC5jCkBAIC0xNjQsMTIgKzE2NCwxNSBAQAogCiAJLyogWFhYIEZJWE1FOiBXaGVyZSBhIHNpbmdsZSBwaHlzaWNhbCBub2RlIGFjdHVhbGx5IHNob3dzIHVwIGluIHR3bwogCSAgIGZyYWdzLCB3ZSByZWFkIGl0IHR3aWNlLiBEb24ndCBkbyB0aGF0LiAqLwotCS8qIE5vdyB3ZSdyZSBwb2ludGluZyBhdCB0aGUgZmlyc3QgZnJhZyB3aGljaCBvdmVybGFwcyBvdXIgcGFnZSAqLworCS8qIE5vdyB3ZSdyZSBwb2ludGluZyBhdCB0aGUgZmlyc3QgZnJhZyB3aGljaCBvdmVybGFwcyBvdXIgcGFnZQorCSAqIChvciBwZXJoYXBzIGlzIGJlZm9yZSBpdCwgaWYgd2UndmUgYmVlbiBhc2tlZCB0byByZWFkIG9mZiB0aGUKKwkgKiBlbmQgb2YgdGhlIGZpbGUpLiAqLwogCXdoaWxlKG9mZnNldCA8IGVuZCkgewogCQlEMihwcmludGsoS0VSTl9ERUJVRyAiamZmczJfcmVhZF9pbm9kZV9yYW5nZTogb2Zmc2V0ICVkLCBlbmQgJWRcbiIsIG9mZnNldCwgZW5kKSk7Ci0JCWlmICh1bmxpa2VseSghZnJhZyB8fCBmcmFnLT5vZnMgPiBvZmZzZXQpKSB7CisJCWlmICh1bmxpa2VseSghZnJhZyB8fCBmcmFnLT5vZnMgPiBvZmZzZXQgfHwKKwkJCSAgICAgZnJhZy0+b2ZzICsgZnJhZy0+c2l6ZSA8PSBvZmZzZXQpKSB7CiAJCQl1aW50MzJfdCBob2xlc2l6ZSA9IGVuZCAtIG9mZnNldDsKLQkJCWlmIChmcmFnKSB7CisJCQlpZiAoZnJhZyAmJiBmcmFnLT5vZnMgPiBvZmZzZXQpIHsKIAkJCQlEMShwcmludGsoS0VSTl9OT1RJQ0UgIkVlcC4gSG9sZSBpbiBpbm8gIyV1IGZyYWdsaXN0LiBmcmFnLT5vZnMgPSAweCUwOHgsIG9mZnNldCA9IDB4JTA4eFxuIiwgZi0+aW5vY2FjaGUtPmlubywgZnJhZy0+b2ZzLCBvZmZzZXQpKTsKIAkJCQlob2xlc2l6ZSA9IG1pbihob2xlc2l6ZSwgZnJhZy0+b2ZzIC0gb2Zmc2V0KTsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggYmRjM2NiNC4uN2Q3MGQ2MyAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTE5MjEsNiArMTkyMSwxNiBAQAogCWlmIChkYXRhX3BhZ2UpCiAJCSgoY2hhciAqKWRhdGFfcGFnZSlbUEFHRV9TSVpFIC0gMV0gPSAwOwogCisJLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KKwlyZXR2YWwgPSBrZXJuX3BhdGgoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gc2VjdXJpdHlfc2JfbW91bnQoZGV2X25hbWUsICZwYXRoLAorCQkJCSAgIHR5cGVfcGFnZSwgZmxhZ3MsIGRhdGFfcGFnZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkcHV0X291dDsKKwogCS8qIERlZmF1bHQgdG8gcmVsYXRpbWUgdW5sZXNzIG92ZXJyaWRlbiAqLwogCWlmICghKGZsYWdzICYgTVNfTk9BVElNRSkpCiAJCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CkBAIC0xOTQ1LDE2ICsxOTU1LDYgQEAKIAkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUgfCBNU19SRUxBVElNRXwgTVNfS0VSTk1PVU5UIHwKIAkJICAgTVNfU1RSSUNUQVRJTUUpOwogCi0JLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KLQlyZXR2YWwgPSBrZXJuX3BhdGgoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dmFsID0gc2VjdXJpdHlfc2JfbW91bnQoZGV2X25hbWUsICZwYXRoLAotCQkJCSAgIHR5cGVfcGFnZSwgZmxhZ3MsIGRhdGFfcGFnZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBkcHV0X291dDsKLQogCWlmIChmbGFncyAmIE1TX1JFTU9VTlQpCiAJCXJldHZhbCA9IGRvX3JlbW91bnQoJnBhdGgsIGZsYWdzICYgfk1TX1JFTU9VTlQsIG1udF9mbGFncywKIAkJCQkgICAgZGF0YV9wYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzMjA2MmMzLi43Y2IyOTg1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTM2LDYgKzE1MzYsOCBAQAogCQlvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUpOworCiAJZF9kcm9wKGRlbnRyeSk7CiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+bGluayhpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggNmMzMjEwMC4uZTFkNDE1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IE5GU19DTElFTlQoaW5vZGUpLAorCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc193cml0ZV9kaXJlY3Rfb3BzLAogCQkud29ya3F1ZXVlID0gbmZzaW9kX3dvcmtxdWV1ZSwKIAkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMsCmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS5jIGIvZnMvbmZzL2ZzY2FjaGUuYwppbmRleCA3MGZhZDY5Li5mYTU4ODAwIDEwMDY0NAotLS0gYS9mcy9uZnMvZnNjYWNoZS5jCisrKyBiL2ZzL25mcy9mc2NhY2hlLmMKQEAgLTM1OSwxNyArMzU5LDEzIEBACiAKIAlCVUdfT04oIWNvb2tpZSk7CiAKLQlpZiAoZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSkpIHsKLQkJaWYgKCEoZ2ZwICYgX19HRlBfV0FJVCkpCi0JCQlyZXR1cm4gMDsKLQkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKLQl9Ci0KIAlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpIHsKIAkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZnNjYWNoZSByZWxlYXNlcGFnZSAoMHglcC8weCVwLzB4JXApXG4iLAogCQkJIGNvb2tpZSwgcGFnZSwgbmZzaSk7CiAKLQkJZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKKwkJaWYgKCFmc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShjb29raWUsIHBhZ2UsIGdmcCkpCisJCQlyZXR1cm4gMDsKKwogCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKIAkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBlZDdjMjY5Li43NDFhNTYyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNzIsMTIgKzcyLDE3IEBACiAvKiBQcmV2ZW50IGxlYWtzIG9mIE5GU3Y0IGVycm9ycyBpbnRvIHVzZXJsYW5kICovCiBzdGF0aWMgaW50IG5mczRfbWFwX2Vycm9ycyhpbnQgZXJyKQogewotCWlmIChlcnIgPCAtMTAwMCkgeworCWlmIChlcnIgPj0gLTEwMDApCisJCXJldHVybiBlcnI7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBjb3VsZCBub3QgaGFuZGxlIE5GU3Y0IGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCAtZXJyKTsKLQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOwogfQogCiAvKgpAQCAtMjc2Miw3ICsyNzY3LDcgQEAKIAkJLnBhZ2VzID0gJnBhZ2UsCiAJCS5wZ2Jhc2UgPSAwLAogCQkuY291bnQgPSBjb3VudCwKLQkJLmJpdG1hc2sgPSBORlNfU0VSVkVSKGRlbnRyeS0+ZF9pbm9kZSktPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2ssCisJCS5iaXRtYXNrID0gTkZTX1NFUlZFUihkZW50cnktPmRfaW5vZGUpLT5hdHRyX2JpdG1hc2ssCiAJfTsKIAlzdHJ1Y3QgbmZzNF9yZWFkZGlyX3JlcyByZXM7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKQEAgLTMwNjAsOSArMzA2NSw2IEBACiAJaWYgKHRpbWVfYmVmb3JlKGNscC0+Y2xfbGFzdF9yZW5ld2FsLHRpbWVzdGFtcCkpCiAJCWNscC0+Y2xfbGFzdF9yZW5ld2FsID0gdGltZXN0YW1wOwogCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwotCWRwcmludGsoIiVzIGNhbGxpbmcgcHV0X3JwY2NyZWQgb24gcnBjX2NyZWQgJXBcbiIsIF9fZnVuY19fLAotCQkJCXRhc2stPnRrX21zZy5ycGNfY3JlZCk7Ci0JcHV0X3JwY2NyZWQodGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNF9yZW5ld19vcHMgPSB7CkBAIC00ODc3LDcgKzQ4NzksNiBAQAogCW5mczQxX3NlcXVlbmNlX2ZyZWVfc2xvdChjbHAsIHRhc2stPnRrX21zZy5ycGNfcmVzcCk7CiAJZHByaW50aygiJXMgcnBjX2NyZWQgJXBcbiIsIF9fZnVuY19fLCB0YXNrLT50a19tc2cucnBjX2NyZWQpOwogCi0JcHV0X3JwY2NyZWQodGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX2FyZ3ApOwogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfcmVzcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDgzYWQ0N2MuLjIwYjRlMzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTY4MSw3ICs1NjgxLDYgQEAKIAl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCS1FU0VSVkVSRkFVTFQJfSwKIAl7IE5GUzRFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlM0RVJSX0xPQ0tFRCwJLUVBR0FJTgkJfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCS1FUkVNT1RFSU8JfSwKIAl7IE5GUzRFUlJfU1lNTElOSywJLUVMT09QCQl9LAogCXsgTkZTNEVSUl9PUF9JTExFR0FMLAktRU9QTk9UU1VQUAl9LAogCXsgTkZTNEVSUl9ERUFETE9DSywJLUVERUFETEsJfSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggYTJjMThhYy4uOTBiZTU1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTEyNTMsNiArMTI1Myw3IEBACiAJCQlkZWZhdWx0OgogCQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiAgIHVucmVjb2duaXplZCAiCiAJCQkJCQkidHJhbnNwb3J0IHByb3RvY29sXG4iKTsKKwkJCQlrZnJlZShzdHJpbmcpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczN4ZHIuYyBiL2ZzL25mc2QvbmZzM3hkci5jCmluZGV4IGVkZjkyNmUuLmQwYTJjZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3hkci5jCisrKyBiL2ZzL25mc2QvbmZzM3hkci5jCkBAIC05NTgsNyArOTU4LDcgQEAKIAkJcDEgPSBlbmNvZGVfZW50cnlfYmFnZ2FnZShjZCwgcDEsIG5hbWUsIG5hbWxlbiwgaW5vKTsKIAogCQlpZiAocGx1cykKLQkJCXAgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOworCQkJcDEgPSBlbmNvZGVfZW50cnlwbHVzX2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4pOwogCiAJCS8qIGRldGVybWluZSBlbnRyeSB3b3JkIGxlbmd0aCBhbmQgbGVuZ3RocyB0byBnbyBpbiBwYWdlcyAqLwogCQludW1fZW50cnlfd29yZHMgPSBwMSAtIHRtcDsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCA1OTQxOTU4Li44NGMyNTM4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC04Nyw2ICs4Nyw3IEBACiAJCQlicmVsc2UoYmgpOwogCQkJQlVHKCk7CiAJCX0KKwkJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiAJCWJoLT5iX2JkZXYgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfYmRldjsKIAkJYmgtPmJfYmxvY2tuciA9IGJsb2NrbnI7CiAJCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKQEAgLTI3Niw4ICsyNzcsNyBAQAogCQkJCSAgICAgICAiaW52YWxpZCBvbGRrZXkgJWxsZCAobmV3a2V5PSVsbGQpIiwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvbGRrZXksCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3a2V5KTsKLQkJaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkob2JoKSAmJiBUZXN0U2V0UGFnZURpcnR5KG9wYWdlKSkKLQkJCUJVRygpOworCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShvYmgpOwogCiAJCXNwaW5fbG9ja19pcnEoJmJ0bmMtPnRyZWVfbG9jayk7CiAJCXJhZGl4X3RyZWVfZGVsZXRlKCZidG5jLT5wYWdlX3RyZWUsIG9sZGtleSk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvY3BmaWxlLmMgYi9mcy9uaWxmczIvY3BmaWxlLmMKaW5kZXggMWM2Y2ZiNS4uM2Y1ZDVkMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2NwZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9jcGZpbGUuYwpAQCAtODcxLDcgKzg3MSw2IEBACiAJCSAqIGV4Y2x1c2l2ZSB3aXRoIGEgbmV3IG1vdW50IGpvYi4gIFRob3VnaCBpdCBkb2Vzbid0IGNvdmVyCiAJCSAqIHVtb3VudCwgaXQncyBlbm91Z2ggZm9yIHRoZSBwdXJwb3NlLgogCQkgKi8KLQkJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJaWYgKG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChuaWxmcywgY25vLCAxKSkgewogCQkJLyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHByb3RlY3QKIAkJCSAgIHBsYWluIHJlYWQtb25seSBtb3VudHMgc2luY2UgdGhleSBhcmUgZXhjbHVzaXZlCkBAIC04ODAsNyArODc5LDYgQEAKIAkJCXJldCA9IC1FQlVTWTsKIAkJfSBlbHNlCiAJCQlyZXQgPSBuaWxmc19jcGZpbGVfY2xlYXJfc25hcHNob3QoY3BmaWxlLCBjbm8pOwotCQltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSBOSUxGU19TTkFQU0hPVDoKIAkJcmV0dXJuIG5pbGZzX2NwZmlsZV9zZXRfc25hcHNob3QoY3BmaWxlLCBjbm8pOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lub2RlLmMgYi9mcy9uaWxmczIvaW5vZGUuYwppbmRleCA1MDQwMjIwLi4yYTBhNWEzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW5vZGUuYworKysgYi9mcy9uaWxmczIvaW5vZGUuYwpAQCAtNjY0LDcgKzY2NCw2IEBACiAJaW50IGVycjsKIAogCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwotCS8qIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIE1VU1QgbG9jayBzX2lub2RlX2xvY2sgKi8KIAlpZiAoaWktPmlfYmggPT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwogCQllcnIgPSBuaWxmc19pZmlsZV9nZXRfaW5vZGVfYmxvY2soc2JpLT5zX2lmaWxlLCBpbm9kZS0+aV9pbm8sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW9jdGwuYyBiL2ZzL25pbGZzMi9pb2N0bC5jCmluZGV4IDY1NzJlYTQuLmY2YWY3NjAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pb2N0bC5jCisrKyBiL2ZzL25pbGZzMi9pb2N0bC5jCkBAIC05OSw3ICs5OSw4IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmNwZmlsZSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmcy0+bnNfY3BmaWxlOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCXN0cnVjdCBpbm9kZSAqY3BmaWxlID0gbmlsZnMtPm5zX2NwZmlsZTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKIAlzdHJ1Y3QgbmlsZnNfY3Btb2RlIGNwbW9kZTsKIAlpbnQgcmV0OwpAQCAtMTA5LDE0ICsxMTAsMTcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNwbW9kZSwgYXJncCwgc2l6ZW9mKGNwbW9kZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCW11dGV4X2xvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CiAJcmV0ID0gbmlsZnNfY3BmaWxlX2NoYW5nZV9jcG1vZGUoCiAJCWNwZmlsZSwgY3Btb2RlLmNtX2NubywgY3Btb2RlLmNtX21vZGUpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewogCQluaWxmc190cmFuc2FjdGlvbl9hYm9ydChpbm9kZS0+aV9zYik7CisJCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KKwltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk3LDcgKzMwMSwxOCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JYmgtPmJfcHJpdmF0ZSA9IHZkZXNjOworCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYmgtPmJfYXNzb2NfYnVmZmVycykpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjb25mbGljdGluZyAlcyBidWZmZXI6IGlubz0lbGx1LCAiCisJCSAgICAgICAiY25vPSVsbHUsIG9mZnNldD0lbGx1LCBibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfaW5vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfYmxvY2tuciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQogCWxpc3RfYWRkX3RhaWwoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsIGJ1ZmZlcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzM1LDI0ICszNTAsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJcmV0ID0gbmlsZnNfZ2NjYWNoZV93YWl0X2FuZF9tYXJrX2RpcnR5KGJoKTsKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKLQkJCQl2ZGVzYyA9IGJoLT5iX3ByaXZhdGU7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVAotCQkJCSAgICAgICAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogIgotCQkJCSAgICAgICAiaW5vPSVsbHUsIGNubz0lbGx1LCBvZmZzZXQ9JWxsdSwgIgotCQkJCSAgICAgICAiYmxvY2tucj0lbGx1LCB2YmxvY2tucj0lbGx1XG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywKLQkJCQkgICAgICAgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2NubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF92YmxvY2tucik7Ci0JCQl9CisJCQlXQVJOX09OKHJldCA9PSAtRUVYSVNUKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJcmV0dXJuIG5tZW1iczsKQEAgLTM2MCw3ICszNjEsNiBAQAogIGZhaWxlZDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNDcxLDcgKzQ3MSw2IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsZWQ6Ci0JbmlsZnNfcmVtb3ZlX2FsbF9nY2lub2RlKG5pbGZzKTsKIAlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBHQyBmYWlsZWQgZHVyaW5nIHByZXBhcmF0aW9uOiAlczogZXJyPSVkXG4iLAogCSAgICAgICBtc2csIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU2MCw2ICs1NTksOCBAQAogCWVsc2UKIAkJcmV0ID0gbmlsZnNfY2xlYW5fc2VnbWVudHMoaW5vZGUtPmlfc2IsIGFyZ3YsIGtidWZzKTsKIAorCWlmIChyZXQgPCAwKQorCQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCiAgb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCA2ODNkZjg5Li42ZWZmNjZhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI0NjgsMTcgKzI0NjgsMjIgQEAKIAkvKiBDbGVhciByZXF1ZXN0cyAoZXZlbiB3aGVuIHRoZSBjb25zdHJ1Y3Rpb24gZmFpbGVkKSAqLwogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAotCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwotCiAJaWYgKHJlcS0+bW9kZSA9PSBTQ19MU0VHX1NSKSB7CisJCXNjaS0+c2Nfc3RhdGUgJj0gfk5JTEZTX1NFR0NUT1JfQ09NTUlUOwogCQlzY2ktPnNjX3NlcV9kb25lID0gcmVxLT5zZXFfYWNjZXB0ZWQ7CiAJCW5pbGZzX3NlZ2N0b3Jfd2FrZXVwKHNjaSwgcmVxLT5zY19lcnIgPyA6IHJlcS0+c2JfZXJyKTsKIAkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ID0gMDsKLQl9IGVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOwotCWVsc2UgaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9EQVQpCi0JCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKKwl9IGVsc2UgeworCQlpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0ZJTEUpCisJCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOworCQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9EQVRfQklUOwogCisJCS8qIHJlLWVuYWJsZSB0aW1lciBpZiBjaGVja3BvaW50IGNyZWF0aW9uIHdhcyBub3QgZG9uZSAqLworCQlpZiAoc2NpLT5zY190aW1lciAmJiAoc2NpLT5zY19zdGF0ZSAmIE5JTEZTX1NFR0NUT1JfQ09NTUlUKSAmJgorCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgc2NpLT5zY190aW1lci0+ZXhwaXJlcykpCisJCQlhZGRfdGltZXIoc2NpLT5zY190aW1lcik7CisJfQogCXNwaW5fdW5sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKaW5kZXggODI4YTg4OS4uN2U1NGU1MiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwpAQCAtOTEsNiArOTEsNyBAQAogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CisJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwogCXByZXYgPSAmZG5lbnRyeS0+ZG47CiAJd2hpbGUgKChkbiA9ICpwcmV2KSAhPSBOVUxMKSB7Ci0JCWlmICgoZG4tPmRuX21hc2sgJiBldmVudC0+bWFzaykgPT0gMCkgeworCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGM4YTA3YzYuLjMxNjVkODUgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMzI0LDExICszMjQsMTEgQEAKIAlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQllbnRyeS0+Z3JvdXAgPSBncm91cDsKLQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKLQogCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwogCWlmICghbGVudHJ5KSB7CisJCWVudHJ5LT5ncm91cCA9IGdyb3VwOworCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwogCQlobGlzdF9hZGRfaGVhZCgmZW50cnktPmlfbGlzdCwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyk7CiAJCWxpc3RfYWRkKCZlbnRyeS0+Z19saXN0LCAmZ3JvdXAtPm1hcmtfZW50cmllcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwppbmRleCAzODE2ZDU3Li5iOGJmNTNiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKKysrIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAogCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZwogCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLwotCQkJaWYgKG9sZC0+bmFtZV9sZW4gJiYKKwkJCWlmICghb2xkLT5uYW1lX2xlbiB8fAogCQkJICAgICFzdHJjbXAob2xkLT5maWxlX25hbWUsIG5ldy0+ZmlsZV9uYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IDg5ZmM4ZWUuLmRlMDU5ZjQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTE3MTIsNyArMTcxMiw4IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCiAJaWYgKCFvY2ZzMl9yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgfHwKLQkgICAgIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSkKKwkgICAgIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1JFRkNPVU5UX0ZMKSB8fAorCSAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCiAJCXJldHVybiAwOwogCiAJY3BvcyA9IHBvcyA+PiBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IGVhZTQwNDYuLmQ5NjNkODYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMzUsMTIgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+Ci0jaWZuZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECi0jIGluY2x1ZGUgPGxpbnV4L2piZDIuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGxpbnV4L2piZC5oPgotIyBpbmNsdWRlICJvY2ZzMl9qYmRfY29tcGF0LmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9qYmQyLmg+CiAKIC8qIEZvciB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqLwogI2luY2x1ZGUgInN0YWNrZ2x1ZS5oIgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCA2MDI4N2ZjLi4zYTBkZjdhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMzc0Myw2ICszNzQzLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKKwkJZ290byBhdHRhY2hfeGF0dHI7CisKIAlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZGlfZXQsIElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwogCiAJc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKQEAgLTM3NjksNiArMzc3Miw3IEBACiAJCWNwb3MgKz0gbnVtX2NsdXN0ZXJzOwogCX0KIAorYXR0YWNoX3hhdHRyOgogCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSB7CiAJCXJldCA9IG9jZnMyX3hhdHRyX2F0dGFjaF9yZWZjb3VudF90cmVlKGlub2RlLCBkaV9iaCwKIAkJCQkJCSAgICAgICAmcmVmX3RyZWUtPnJmX2NpLApAQCAtMzg1OCw2ICszODYyLDQ5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9kdXBsaWNhdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICpzX2lub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsCisJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqdF9pbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICp0X2JoKQoreworCWludCByZXQ7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNfaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKnNfZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXNfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICp0X2RpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil0X2JoLT5iX2RhdGE7CisKKwlCVUdfT04oIShPQ0ZTMl9JKHNfaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkpOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIElOT0RFX0NBQ0hFKHRfaW5vZGUpLCB0X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXRfZGktPmlkMi5pX2RhdGEuaWRfY291bnQgPSBzX2RpLT5pZDIuaV9kYXRhLmlkX2NvdW50OworCW1lbWNweSh0X2RpLT5pZDIuaV9kYXRhLmlkX2RhdGEsIHNfZGktPmlkMi5pX2RhdGEuaWRfZGF0YSwKKwkgICAgICAgbGUxNl90b19jcHUoc19kaS0+aWQyLmlfZGF0YS5pZF9jb3VudCkpOworCXNwaW5fbG9jaygmT0NGUzJfSSh0X2lub2RlKS0+aXBfbG9jayk7CisJT0NGUzJfSSh0X2lub2RlKS0+aXBfZHluX2ZlYXR1cmVzIHw9IE9DRlMyX0lOTElORV9EQVRBX0ZMOworCXRfZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYoT0NGUzJfSSh0X2lub2RlKS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlzcGluX3VubG9jaygmT0NGUzJfSSh0X2lub2RlKS0+aXBfbG9jayk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdF9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG9jZnMyX2R1cGxpY2F0ZV9leHRlbnRfbGlzdChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsCiAJCQkJc3RydWN0IGlub2RlICp0X2lub2RlLAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCwKQEAgLTM5OTcsNiArNDA0NCwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoT0NGUzJfSShzX2lub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwkJcmV0ID0gb2NmczJfZHVwbGljYXRlX2lubGluZV9kYXRhKHNfaW5vZGUsIHNfYmgsCisJCQkJCQkgIHRfaW5vZGUsIHRfYmgpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXQgPSBvY2ZzMl9sb2NrX3JlZmNvdW50X3RyZWUob3NiLCBsZTY0X3RvX2NwdShkaS0+aV9yZWZjb3VudF9sb2MpLAogCQkJCSAgICAgICAxLCAmcmVmX3RyZWUsICZyZWZfcm9vdF9iaCk7CiAJaWYgKHJldCkgewpAQCAtNDAxMywxMCArNDA2OCw2IEBACiAJCWdvdG8gb3V0X3VubG9ja19yZWZjb3VudDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9jb21wbGV0ZV9yZWZsaW5rKHNfaW5vZGUsIHNfYmgsIHRfaW5vZGUsIHRfYmgsIHByZXNlcnZlKTsKLQlpZiAocmV0KQotCQltbG9nX2Vycm5vKHJldCk7Ci0KIG91dF91bmxvY2tfcmVmY291bnQ6CiAJb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUob3NiLCByZWZfdHJlZSwgMSk7CiAJYnJlbHNlKHJlZl9yb290X2JoKTsKQEAgLTQwNjgsOSArNDExOSwxNyBAQAogCQlyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRycyhpbm9kZSwgb2xkX2JoLAogCQkJCQkgICBuZXdfaW5vZGUsIG5ld19iaCwKIAkJCQkJICAgcHJlc2VydmUpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGlub2RlX3VubG9jazsKKwkJfQogCX0KKworCXJldCA9IG9jZnMyX2NvbXBsZXRlX3JlZmxpbmsoaW5vZGUsIG9sZF9iaCwKKwkJCQkgICAgIG5ld19pbm9kZSwgbmV3X2JoLCBwcmVzZXJ2ZSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCiBpbm9kZV91bmxvY2s6CiAJb2NmczJfaW5vZGVfdW5sb2NrKG5ld19pbm9kZSwgMSk7CiAJYnJlbHNlKG5ld19iaCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCBjMGU0OGFlLi4xNGY0N2QyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTc3MywxOCArNzczLDIwIEBACiAJCWlmICh0bXBzdGF0IDwgMCkgewogCQkJc3RhdHVzID0gdG1wc3RhdDsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJCWdvdG8gYmFpbDsKKwkJCWJyZWFrOwogCQl9CiAJCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgKCpiaCktPmJfZGF0YTsKIAkJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2Jsb2NrY2hlY2tfc3RhdHMpKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnN0YXRzLT5iX2xvY2spOwotCQlzdGF0dXMgPSBvY2ZzMl92ZXJpZnlfdm9sdW1lKGRpLCAqYmgsIGJsa3NpemUsIHN0YXRzKTsKLQkJaWYgKHN0YXR1cyA+PSAwKQotCQkJZ290byBiYWlsOwotCQlicmVsc2UoKmJoKTsKLQkJKmJoID0gTlVMTDsKLQkJaWYgKHN0YXR1cyAhPSAtRUFHQUlOKQorCQl0bXBzdGF0ID0gb2NmczJfdmVyaWZ5X3ZvbHVtZShkaSwgKmJoLCBibGtzaXplLCBzdGF0cyk7CisJCWlmICh0bXBzdGF0IDwgMCkgeworCQkJYnJlbHNlKCpiaCk7CisJCQkqYmggPSBOVUxMOworCQl9CisJCWlmICh0bXBzdGF0ICE9IC1FQUdBSU4pIHsKKwkJCXN0YXR1cyA9IHRtcHN0YXQ7CiAJCQlicmVhazsKKwkJfQogCX0KIAogYmFpbDoKQEAgLTE2NDUsNiArMTY0NywxMCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX2ZpbGVzID0gbnVtYml0czsKIAlidWYtPmZfZmZyZWUgPSBmcmVlYml0czsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSBjcmMzMl9sZSgwLCBvc2ItPnV1aWRfc3RyLCBPQ0ZTMl9WT0xfVVVJRF9MRU4pCisJCQkJJiAweEZGRkZGRkZGVUw7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gY3JjMzJfbGUoMCwgb3NiLT51dWlkX3N0ciArIE9DRlMyX1ZPTF9VVUlEX0xFTiwKKwkJCQlPQ0ZTMl9WT0xfVVVJRF9MRU4pICYgMHhGRkZGRkZGRlVMOwogCiAJYnJlbHNlKGJoKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdXB0b2RhdGUuYyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKaW5kZXggYjYyODRmMi4uYzYxMzY5MyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdXB0b2RhdGUuYworKysgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCkBAIC01MywxMSArNTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2lmbmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAotIyBpbmNsdWRlIDxsaW51eC9qYmQyLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxsaW51eC9qYmQuaD4KLSNlbmRpZgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfVVBUT0RBVEUKIApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDRmMDFlMDYuLmI0YjMxZDIgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTU4Nyw2ICs1ODcsOSBAQAogCWVycm9yID0gLUVQRVJNOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0NIUk9PVCkpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OworCWVycm9yID0gc2VjdXJpdHlfcGF0aF9jaHJvb3QoJnBhdGgpOworCWlmIChlcnJvcikKKwkJZ290byBkcHV0X2FuZF9vdXQ7CiAKIAlzZXRfZnNfcm9vdChjdXJyZW50LT5mcywgJnBhdGgpOwogCWVycm9yID0gMDsKQEAgLTYxNywxMSArNjIwLDE1IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfcHV0ZjsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJZXJyID0gc2VjdXJpdHlfcGF0aF9jaG1vZChkZW50cnksIGZpbGUtPmZfdmZzbW50LCBtb2RlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKG1vZGUgPT0gKG1vZGVfdCkgLTEpCiAJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCW5ld2F0dHJzLmlhX21vZGUgPSAobW9kZSAmIFNfSUFMTFVHTykgfCAoaW5vZGUtPmlfbW9kZSAmIH5TX0lBTExVR08pOwogCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9NT0RFIHwgQVRUUl9DVElNRTsKIAllcnIgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiBvdXRfcHV0ZjoKQEAgLTY0NiwxMSArNjUzLDE1IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGRwdXRfYW5kX291dDsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJZXJyb3IgPSBzZWN1cml0eV9wYXRoX2NobW9kKHBhdGguZGVudHJ5LCBwYXRoLm1udCwgbW9kZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKG1vZGUgPT0gKG1vZGVfdCkgLTEpCiAJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCW5ld2F0dHJzLmlhX21vZGUgPSAobW9kZSAmIFNfSUFMTFVHTykgfCAoaW5vZGUtPmlfbW9kZSAmIH5TX0lBTExVR08pOwogCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9NT0RFIHwgQVRUUl9DVElNRTsKIAllcnJvciA9IG5vdGlmeV9jaGFuZ2UocGF0aC5kZW50cnksICZuZXdhdHRycyk7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCW1udF9kcm9wX3dyaXRlKHBhdGgubW50KTsKIGRwdXRfYW5kX291dDoKQEAgLTY2NCw5ICs2NzUsOSBAQAogCXJldHVybiBzeXNfZmNobW9kYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCBtb2RlKTsKIH0KIAotc3RhdGljIGludCBjaG93bl9jb21tb24oc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApCitzdGF0aWMgaW50IGNob3duX2NvbW1vbihzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CiAKQEAgLTY4Myw3ICs2OTQsOSBAQAogCQluZXdhdHRycy5pYV92YWxpZCB8PQogCQkJQVRUUl9LSUxMX1NVSUQgfCBBVFRSX0tJTExfU0dJRCB8IEFUVFJfS0lMTF9QUklWOwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQllcnJvciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOworCWVycm9yID0gc2VjdXJpdHlfcGF0aF9jaG93bihwYXRoLCB1c2VyLCBncm91cCk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBub3RpZnlfY2hhbmdlKHBhdGgtPmRlbnRyeSwgJm5ld2F0dHJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTcwMCw3ICs3MTMsNyBAQAogCWVycm9yID0gbW50X3dhbnRfd3JpdGUocGF0aC5tbnQpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcmVsZWFzZTsKLQllcnJvciA9IGNob3duX2NvbW1vbihwYXRoLmRlbnRyeSwgdXNlciwgZ3JvdXApOworCWVycm9yID0gY2hvd25fY29tbW9uKCZwYXRoLCB1c2VyLCBncm91cCk7CiAJbW50X2Ryb3Bfd3JpdGUocGF0aC5tbnQpOwogb3V0X3JlbGVhc2U6CiAJcGF0aF9wdXQoJnBhdGgpOwpAQCAtNzI1LDcgKzczOCw3IEBACiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXRoLm1udCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9yZWxlYXNlOwotCWVycm9yID0gY2hvd25fY29tbW9uKHBhdGguZGVudHJ5LCB1c2VyLCBncm91cCk7CisJZXJyb3IgPSBjaG93bl9jb21tb24oJnBhdGgsIHVzZXIsIGdyb3VwKTsKIAltbnRfZHJvcF93cml0ZShwYXRoLm1udCk7CiBvdXRfcmVsZWFzZToKIAlwYXRoX3B1dCgmcGF0aCk7CkBAIC03NDQsNyArNzU3LDcgQEAKIAllcnJvciA9IG1udF93YW50X3dyaXRlKHBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3JlbGVhc2U7Ci0JZXJyb3IgPSBjaG93bl9jb21tb24ocGF0aC5kZW50cnksIHVzZXIsIGdyb3VwKTsKKwllcnJvciA9IGNob3duX2NvbW1vbigmcGF0aCwgdXNlciwgZ3JvdXApOwogCW1udF9kcm9wX3dyaXRlKHBhdGgubW50KTsKIG91dF9yZWxlYXNlOgogCXBhdGhfcHV0KCZwYXRoKTsKQEAgLTc2Nyw3ICs3ODAsNyBAQAogCQlnb3RvIG91dF9mcHV0OwogCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5KTsKLQllcnJvciA9IGNob3duX2NvbW1vbihkZW50cnksIHVzZXIsIGdyb3VwKTsKKwllcnJvciA9IGNob3duX2NvbW1vbigmZmlsZS0+Zl9wYXRoLCB1c2VyLCBncm91cCk7CiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiBvdXRfZnB1dDoKIAlmcHV0KGZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDUyYzQxNTEuLmFlMTdkMDIgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTc3NywzNiArNzc3LDU1IEBACiBzdGF0aWMgaW50CiBwaXBlX3JlYWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQkvKiBXZSBjb3VsZCBoYXZlIHBlcmhhcHMgdXNlZCBhdG9taWNfdCwgYnV0IHRoaXMgYW5kIGZyaWVuZHMKLQkgICBiZWxvdyBhcmUgdGhlIG9ubHkgcGxhY2VzLiAgU28gaXQgZG9lc24ndCBzZWVtIHdvcnRod2hpbGUuICAqLworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBwaXBlX3Jkd3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggMDdmNzdhNy4uNGJhZGRlMSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtNDEwLDYgKzQxMCwxNiBAQAogfQogI2VuZGlmCQkvKiBDT05GSUdfTU1VICovCiAKK3N0YXRpYyB2b2lkIHRhc2tfY3B1c19hbGxvd2VkKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXNlcV9wcmludGYobSwgIkNwdXNfYWxsb3dlZDpcdCIpOworCXNlcV9jcHVtYXNrKG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkX2xpc3Q6XHQiKTsKKwlzZXFfY3B1bWFza19saXN0KG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9wcmludGYobSwgIlxuIik7Cit9CisKIGludCBwcm9jX3BpZF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCiAJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKQEAgLTQyNCw2ICs0MzQsNyBAQAogCX0KIAl0YXNrX3NpZyhtLCB0YXNrKTsKIAl0YXNrX2NhcChtLCB0YXNrKTsKKwl0YXNrX2NwdXNfYWxsb3dlZChtLCB0YXNrKTsKIAljcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChtLCB0YXNrKTsKICNpZiBkZWZpbmVkKENPTkZJR19TMzkwKQogCXRhc2tfc2hvd19yZWdzKG0sIHRhc2spOwpAQCAtNDk1LDIwICs1MDYsMTcgQEAKIAogCQkvKiBhZGQgdXAgbGl2ZSB0aHJlYWQgc3RhdHMgYXQgdGhlIGdyb3VwIGxldmVsICovCiAJCWlmICh3aG9sZSkgewotCQkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gdGFzazsKIAkJCWRvIHsKIAkJCQltaW5fZmx0ICs9IHQtPm1pbl9mbHQ7CiAJCQkJbWFqX2ZsdCArPSB0LT5tYWpfZmx0OwotCQkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHRhc2tfZ3RpbWUodCkpOworCQkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHQtPmd0aW1lKTsKIAkJCQl0ID0gbmV4dF90aHJlYWQodCk7CiAJCQl9IHdoaWxlICh0ICE9IHRhc2spOwogCiAJCQltaW5fZmx0ICs9IHNpZy0+bWluX2ZsdDsKIAkJCW1hal9mbHQgKz0gc2lnLT5tYWpfZmx0OwotCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodGFzaywgJmNwdXRpbWUpOwotCQkJdXRpbWUgPSBjcHV0aW1lLnV0aW1lOwotCQkJc3RpbWUgPSBjcHV0aW1lLnN0aW1lOworCQkJdGhyZWFkX2dyb3VwX3RpbWVzKHRhc2ssICZ1dGltZSwgJnN0aW1lKTsKIAkJCWd0aW1lID0gY3B1dGltZV9hZGQoZ3RpbWUsIHNpZy0+Z3RpbWUpOwogCQl9CiAKQEAgLTUyNCw5ICs1MzIsOCBAQAogCWlmICghd2hvbGUpIHsKIAkJbWluX2ZsdCA9IHRhc2stPm1pbl9mbHQ7CiAJCW1hal9mbHQgPSB0YXNrLT5tYWpfZmx0OwotCQl1dGltZSA9IHRhc2tfdXRpbWUodGFzayk7Ci0JCXN0aW1lID0gdGFza19zdGltZSh0YXNrKTsKLQkJZ3RpbWUgPSB0YXNrX2d0aW1lKHRhc2spOworCQl0YXNrX3RpbWVzKHRhc2ssICZ1dGltZSwgJnN0aW1lKTsKKwkJZ3RpbWUgPSB0YXNrLT5ndGltZTsKIAl9CiAKIAkvKiBzY2FsZSBwcmlvcml0eSBhbmQgbmljZSB2YWx1ZXMgZnJvbSB0aW1lc2xpY2VzIHRvIC0yMC4uMjAgKi8KQEAgLTU3MSw3ICs1NzgsNyBAQAogCQlyc3NsaW0sCiAJCW1tID8gbW0tPnN0YXJ0X2NvZGUgOiAwLAogCQltbSA/IG1tLT5lbmRfY29kZSA6IDAsCi0JCShwZXJtaXR0ZWQpID8gdGFzay0+c3RhY2tfc3RhcnQgOiAwLAorCQkocGVybWl0dGVkICYmIG1tKSA/IHRhc2stPnN0YWNrX3N0YXJ0IDogMCwKIAkJZXNwLAogCQllaXAsCiAJCS8qIFRoZSBzaWduYWwgaW5mb3JtYXRpb24gaGVyZSBpcyBvYnNvbGV0ZS4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggODM3NDY5YS4uYWY2NDNiNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTI1OTcsOCArMjU5Nyw3IEBACiAJbmFtZS5sZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBwaWQpOwogCWRlbnRyeSA9IGRfaGFzaF9hbmRfbG9va3VwKG1udC0+bW50X3Jvb3QsICZuYW1lKTsKIAlpZiAoZGVudHJ5KSB7Ci0JCWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfRVhJVElORykpCi0JCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOworCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwogCQlkX2Ryb3AoZGVudHJ5KTsKIAkJZHB1dChkZW50cnkpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbWVtaW5mby5jIGIvZnMvcHJvYy9tZW1pbmZvLmMKaW5kZXggYzdiZmY0Zi4uYTY1MjM5YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9tZW1pbmZvLmMKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJIlZtYWxsb2NVc2VkOiAgICAlOGx1IGtCXG4iCiAJCSJWbWFsbG9jQ2h1bms6ICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQotCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU4bHUga0JcbiIKKwkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlNWx1IGtCXG4iCiAjZW5kaWYKIAkJLAogCQlLKGkudG90YWxyYW0pLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9zdGF0LmMgYi9mcy9wcm9jL3N0YXQuYwppbmRleCA3Y2M3MjZjLi5iOWI3YWFkIDEwMDY0NAotLS0gYS9mcy9wcm9jL3N0YXQuYworKysgYi9mcy9wcm9jL3N0YXQuYwpAQCAtMjcsNyArMjcsNyBAQAogCWludCBpLCBqOwogCXVuc2lnbmVkIGxvbmcgamlmOwogCWNwdXRpbWU2NF90IHVzZXIsIG5pY2UsIHN5c3RlbSwgaWRsZSwgaW93YWl0LCBpcnEsIHNvZnRpcnEsIHN0ZWFsOwotCWNwdXRpbWU2NF90IGd1ZXN0OworCWNwdXRpbWU2NF90IGd1ZXN0LCBndWVzdF9uaWNlOwogCXU2NCBzdW0gPSAwOwogCXU2NCBzdW1fc29mdGlycSA9IDA7CiAJdW5zaWduZWQgaW50IHBlcl9zb2Z0aXJxX3N1bXNbTlJfU09GVElSUVNdID0gezB9OwpAQCAtMzYsNyArMzYsNyBAQAogCiAJdXNlciA9IG5pY2UgPSBzeXN0ZW0gPSBpZGxlID0gaW93YWl0ID0KIAkJaXJxID0gc29mdGlycSA9IHN0ZWFsID0gY3B1dGltZTY0X3plcm87Ci0JZ3Vlc3QgPSBjcHV0aW1lNjRfemVybzsKKwlndWVzdCA9IGd1ZXN0X25pY2UgPSBjcHV0aW1lNjRfemVybzsKIAlnZXRib290dGltZSgmYm9vdHRpbWUpOwogCWppZiA9IGJvb3R0aW1lLnR2X3NlYzsKIApAQCAtNTEsNiArNTEsOCBAQAogCQlzb2Z0aXJxID0gY3B1dGltZTY0X2FkZChzb2Z0aXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxKTsKIAkJc3RlYWwgPSBjcHV0aW1lNjRfYWRkKHN0ZWFsLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7CiAJCWd1ZXN0ID0gY3B1dGltZTY0X2FkZChndWVzdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3QpOworCQlndWVzdF9uaWNlID0gY3B1dGltZTY0X2FkZChndWVzdF9uaWNlLAorCQkJa3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3RfbmljZSk7CiAJCWZvcl9lYWNoX2lycV9ucihqKSB7CiAJCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaiwgaSk7CiAJCX0KQEAgLTY1LDcgKzY3LDggQEAKIAl9CiAJc3VtICs9IGFyY2hfaXJxX3N0YXQoKTsKIAotCXNlcV9wcmludGYocCwgImNwdSAgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHVcbiIsCisJc2VxX3ByaW50ZihwLCAiY3B1ICAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAiCisJCSIlbGx1XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHVzZXIpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KG5pY2UpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN5c3RlbSksCkBAIC03NCw3ICs3Nyw4IEBACiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoaXJxKSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzb2Z0aXJxKSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGVhbCksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3QpKTsKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChndWVzdCksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3RfbmljZSkpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCiAJCS8qIENvcHkgdmFsdWVzIGhlcmUgdG8gd29yayBhcm91bmQgZ2NjLTIuOTUuMywgZ2NjLTIuOTYgKi8KQEAgLTg4LDggKzkyLDEwIEBACiAJCXNvZnRpcnEgPSBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxOwogCQlzdGVhbCA9IGtzdGF0X2NwdShpKS5jcHVzdGF0LnN0ZWFsOwogCQlndWVzdCA9IGtzdGF0X2NwdShpKS5jcHVzdGF0Lmd1ZXN0OworCQlndWVzdF9uaWNlID0ga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3RfbmljZTsKIAkJc2VxX3ByaW50ZihwLAotCQkJImNwdSVkICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1XG4iLAorCQkJImNwdSVkICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICIKKwkJCSIlbGx1XG4iLAogCQkJaSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QodXNlciksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KG5pY2UpLApAQCAtOTksNyArMTA1LDggQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoaXJxKSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc29mdGlycSksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdXRpbWU2NF90b19jbG9ja190KHN0ZWFsKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3QpKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3B1dGltZTY0X3RvX2Nsb2NrX3QoZ3Vlc3QpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChndWVzdF9uaWNlKSk7CiAJfQogCXNlcV9wcmludGYocCwgImludHIgJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3VtKTsKIApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvS2NvbmZpZyBiL2ZzL3F1b3RhL0tjb25maWcKaW5kZXggODA0N2UwMS4uMzUzZTc4YSAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvS2NvbmZpZworKysgYi9mcy9xdW90YS9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAKIGNvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQogCWJvb2wgIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gUVVPVEEgJiYgTkVUCisJZGVwZW5kcyBvbiBRVU9UQUNUTCAmJiBORVQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcXVvdGEgd2FybmluZ3MgKGFib3V0IGV4Y2VlZGluZyBzb2Z0bGltaXQsIHJlYWNoaW5nCiAJICBoYXJkbGltaXQsIGV0Yy4pIHdpbGwgYmUgcmVwb3J0ZWQgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZS4gSWYgdW5zdXJlLApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggMzliNDljNC4uOWI2YWQ5MCAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC03NywxMCArNzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPiAvKiBmb3IgaW5vZGVfbG9jaywgb2RkbHkgZW5vdWdoLi4gKi8KLSNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKLSNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgotI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTA3MSw3MyArMTA2Nyw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCi0vKiBOZXRsaW5rIGZhbWlseSBzdHJ1Y3R1cmUgZm9yIHF1b3RhICovCi1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHF1b3RhX2dlbmxfZmFtaWx5ID0gewotCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCi0JLmhkcnNpemUgPSAwLAotCS5uYW1lID0gIlZGU19EUVVPVCIsCi0JLnZlcnNpb24gPSAxLAotCS5tYXhhdHRyID0gUVVPVEFfTkxfQV9NQVgsCi19OwotCi0vKiBTZW5kIHdhcm5pbmcgdG8gdXNlcnNwYWNlIGFib3V0IHVzZXIgd2hpY2ggZXhjZWVkZWQgcXVvdGEgKi8KLXN0YXRpYyB2b2lkIHNlbmRfd2FybmluZyhjb25zdCBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBjb25zdCBjaGFyIHdhcm50eXBlKQotewotCXN0YXRpYyBhdG9taWNfdCBzZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl2b2lkICptc2dfaGVhZDsKLQlpbnQgcmV0OwotCWludCBtc2dfc2l6ZSA9IDQgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKwotCQkgICAgICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsKLQotCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdXNpbmcgR0ZQX05PRlMgYXMgd2UgYXJlIGNhbGxlZCBmcm9tIGEKLQkgKiBmaWxlc3lzdGVtIHBlcmZvcm1pbmcgd3JpdGUgYW5kIHRodXMgZnVydGhlciByZWN1cnNpb24gaW50bwotCSAqIHRoZSBmcyB0byBmcmVlIHNvbWUgZGF0YSBjb3VsZCBjYXVzZSBkZWFkbG9ja3MuICovCi0Jc2tiID0gZ2VubG1zZ19uZXcobXNnX3NpemUsIEdGUF9OT0ZTKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAiVkZTOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBzZW5kIHF1b3RhIHdhcm5pbmcuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgYXRvbWljX2FkZF9yZXR1cm4oMSwgJnNlcSksCi0JCQkmcXVvdGFfZ2VubF9mYW1pbHksIDAsIFFVT1RBX05MX0NfV0FSTklORyk7Ci0JaWYgKCFtc2dfaGVhZCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAiVkZTOiBDYW5ub3Qgc3RvcmUgbmV0bGluayBoZWFkZXIgaW4gcXVvdGEgd2FybmluZy5cbiIpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9RVFlQRSwgZHF1b3QtPmRxX3R5cGUpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9FWENFU1NfSUQsIGRxdW90LT5kcV9pZCk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1dBUk5JTkcsIHdhcm50eXBlKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01BSk9SLAotCQlNQUpPUihkcXVvdC0+ZHFfc2ItPnNfZGV2KSk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NSU5PUiwKLQkJTUlOT1IoZHF1b3QtPmRxX3NiLT5zX2RldikpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9DQVVTRURfSUQsIGN1cnJlbnRfdWlkKCkpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpOwotCi0JZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOwotCXJldHVybjsKLWF0dHJfZXJyX291dDoKLQlwcmludGsoS0VSTl9FUlIgIlZGUzogTm90IGVub3VnaCBzcGFjZSB0byBjb21wb3NlIHF1b3RhIG1lc3NhZ2UhXG4iKTsKLWVycl9vdXQ6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci19Ci0jZW5kaWYKIC8qCiAgKiBXcml0ZSB3YXJuaW5ncyB0byB0aGUgY29uc29sZSBhbmQgc2VuZCB3YXJuaW5nIG1lc3NhZ2VzIG92ZXIgbmV0bGluay4KICAqCkBAIC0xMTQ1LDE4ICsxMDc0LDIwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdCAqY29uc3QgKmRxdW90cywgY2hhciAqd2FybnR5cGUpCiB7CisJc3RydWN0IGRxdW90ICpkcTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykKLQkJaWYgKGRxdW90c1tpXSAmJiB3YXJudHlwZVtpXSAhPSBRVU9UQV9OTF9OT1dBUk4gJiYKLQkJICAgICF3YXJuaW5nX2lzc3VlZChkcXVvdHNbaV0sIHdhcm50eXBlW2ldKSkgeworCWZvciAoaSA9IDA7IGkgPCBNQVhRVU9UQVM7IGkrKykgeworCQlkcSA9IGRxdW90c1tpXTsKKwkJaWYgKGRxICYmIHdhcm50eXBlW2ldICE9IFFVT1RBX05MX05PV0FSTiAmJgorCQkgICAgIXdhcm5pbmdfaXNzdWVkKGRxLCB3YXJudHlwZVtpXSkpIHsKICNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORwotCQkJcHJpbnRfd2FybmluZyhkcXVvdHNbaV0sIHdhcm50eXBlW2ldKTsKKwkJCXByaW50X3dhcm5pbmcoZHEsIHdhcm50eXBlW2ldKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCQkJc2VuZF93YXJuaW5nKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pOwotI2VuZGlmCisJCQlxdW90YV9zZW5kX3dhcm5pbmcoZHEtPmRxX3R5cGUsIGRxLT5kcV9pZCwKKwkJCQkJICAgZHEtPmRxX3NiLT5zX2Rldiwgd2FybnR5cGVbaV0pOwogCQl9CisJfQogfQogCiBzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdCkKQEAgLTI2MDcsMTIgKzI1MzgsNiBAQAogCiAJcmVnaXN0ZXJfc2hyaW5rZXIoJmRxY2FjaGVfc2hyaW5rZXIpOwogCi0jaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCi0JaWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZxdW90YV9nZW5sX2ZhbWlseSkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVkZTOiBGYWlsZWQgdG8gY3JlYXRlIHF1b3RhIG5ldGxpbmsgaW50ZXJmYWNlLlxuIik7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQoZHF1b3RfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YS5jIGIvZnMvcXVvdGEvcXVvdGEuYwppbmRleCA5NWM1YjQyLi5lZTkxZTI3IDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YS5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhLmMKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogCiAvKiBDaGVjayB2YWxpZGl0eSBvZiBnZW5lcmljIHF1b3RhY3RsIGNvbW1hbmRzICovCiBzdGF0aWMgaW50IGdlbmVyaWNfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCkBAIC01MjUsMyArNTI3LDk0IEBACiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKKworLyogTmV0bGluayBmYW1pbHkgc3RydWN0dXJlIGZvciBxdW90YSAqLworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBxdW90YV9nZW5sX2ZhbWlseSA9IHsKKwkuaWQgPSBHRU5MX0lEX0dFTkVSQVRFLAorCS5oZHJzaXplID0gMCwKKwkubmFtZSA9ICJWRlNfRFFVT1QiLAorCS52ZXJzaW9uID0gMSwKKwkubWF4YXR0ciA9IFFVT1RBX05MX0FfTUFYLAorfTsKKworLyoqCisgKiBxdW90YV9zZW5kX3dhcm5pbmcgLSBTZW5kIHdhcm5pbmcgdG8gdXNlcnNwYWNlIGFib3V0IGV4Y2VlZGVkIHF1b3RhCisgKiBAdHlwZTogVGhlIHF1b3RhIHR5cGU6IFVTUlFRVU9UQSwgR1JQUVVPVEEsLi4uCisgKiBAaWQ6IFRoZSB1c2VyIG9yIGdyb3VwIGlkIG9mIHRoZSBxdW90YSB0aGF0IHdhcyBleGNlZWRlZAorICogQGRldjogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgZnMgaXMgbW91bnRlZCAoc2ItPnNfZGV2KQorICogQHdhcm50eXBlOiBUaGUgdHlwZSBvZiB0aGUgd2FybmluZzogUVVPVEFfTkxfLi4uCisgKgorICogVGhpcyBjYW4gYmUgdXNlZCBieSBmaWxlc3lzdGVtcyAoaW5jbHVkaW5nIHRob3NlIHdoaWNoIGRvbid0IHVzZQorICogZHF1b3QpIHRvIHNlbmQgYSBtZXNzYWdlIHRvIHVzZXJzcGFjZSByZWxhdGluZyB0byBxdW90YSBsaW1pdHMuCisgKgorICovCisKK3ZvaWQgcXVvdGFfc2VuZF93YXJuaW5nKHNob3J0IHR5cGUsIHVuc2lnbmVkIGludCBpZCwgZGV2X3QgZGV2LAorCQkJY29uc3QgY2hhciB3YXJudHlwZSkKK3sKKwlzdGF0aWMgYXRvbWljX3Qgc2VxOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9pZCAqbXNnX2hlYWQ7CisJaW50IHJldDsKKwlpbnQgbXNnX3NpemUgPSA0ICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICsKKwkJICAgICAgIDIgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7CisKKwkvKiBXZSBoYXZlIHRvIGFsbG9jYXRlIHVzaW5nIEdGUF9OT0ZTIGFzIHdlIGFyZSBjYWxsZWQgZnJvbSBhCisJICogZmlsZXN5c3RlbSBwZXJmb3JtaW5nIHdyaXRlIGFuZCB0aHVzIGZ1cnRoZXIgcmVjdXJzaW9uIGludG8KKwkgKiB0aGUgZnMgdG8gZnJlZSBzb21lIGRhdGEgY291bGQgY2F1c2UgZGVhZGxvY2tzLiAqLworCXNrYiA9IGdlbmxtc2dfbmV3KG1zZ19zaXplLCBHRlBfTk9GUyk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgIlZGUzogTm90IGVub3VnaCBtZW1vcnkgdG8gc2VuZCBxdW90YSB3YXJuaW5nLlxuIik7CisJCXJldHVybjsKKwl9CisJbXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIGF0b21pY19hZGRfcmV0dXJuKDEsICZzZXEpLAorCQkJJnF1b3RhX2dlbmxfZmFtaWx5LCAwLCBRVU9UQV9OTF9DX1dBUk5JTkcpOworCWlmICghbXNnX2hlYWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgIlZGUzogQ2Fubm90IHN0b3JlIG5ldGxpbmsgaGVhZGVyIGluIHF1b3RhIHdhcm5pbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfUVRZUEUsIHR5cGUpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9FWENFU1NfSUQsIGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIGF0dHJfZXJyX291dDsKKwlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfV0FSTklORywgd2FybnR5cGUpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9ERVZfTUFKT1IsIE1BSk9SKGRldikpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9ERVZfTUlOT1IsIE1JTk9SKGRldikpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9DQVVTRURfSUQsIGN1cnJlbnRfdWlkKCkpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpOworCisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOworCXJldHVybjsKK2F0dHJfZXJyX291dDoKKwlwcmludGsoS0VSTl9FUlIgIlZGUzogTm90IGVub3VnaCBzcGFjZSB0byBjb21wb3NlIHF1b3RhIG1lc3NhZ2UhXG4iKTsKK2Vycl9vdXQ6CisJa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MKHF1b3RhX3NlbmRfd2FybmluZyk7CisKK3N0YXRpYyBpbnQgX19pbml0IHF1b3RhX2luaXQodm9pZCkKK3sKKwlpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJnF1b3RhX2dlbmxfZmFtaWx5KSAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJWRlM6IEZhaWxlZCB0byBjcmVhdGUgcXVvdGEgbmV0bGluayBpbnRlcmZhY2UuXG4iKTsKKwlyZXR1cm4gMDsKK307CisKK21vZHVsZV9pbml0KHF1b3RhX2luaXQpOworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMDA1MGZjNC4uZTAyMDE4MyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogCiBERUZJTkVfTVVURVgoc3lzZnNfbXV0ZXgpOwpAQCAtMjg1LDYgKzI4Niw5IEBACiAJCXN5c2ZzX3B1dChzZC0+c19zeW1saW5rLnRhcmdldF9zZCk7CiAJaWYgKHN5c2ZzX3R5cGUoc2QpICYgU1lTRlNfQ09QWV9OQU1FKQogCQlrZnJlZShzZC0+c19uYW1lKTsKKwlpZiAoc2QtPnNfaWF0dHIgJiYgc2QtPnNfaWF0dHItPmlhX3NlY2RhdGEpCisJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhLAorCQkJCQlzZC0+c19pYXR0ci0+aWFfc2VjZGF0YV9sZW4pOwogCWtmcmVlKHNkLT5zX2lhdHRyKTsKIAlzeXNmc19mcmVlX2lubyhzZC0+c19pbm8pOwogCWttZW1fY2FjaGVfZnJlZShzeXNmc19kaXJfY2FjaGVwLCBzZCk7CkBAIC04OTQsNyArODk4LDggQEAKIAogCW11dGV4X2xvY2soJnN5c2ZzX3JlbmFtZV9tdXRleCk7CiAJQlVHX09OKCFzZC0+c19wYXJlbnQpOwotCW5ld19wYXJlbnRfc2QgPSBuZXdfcGFyZW50X2tvYmotPnNkID8gbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OworCW5ld19wYXJlbnRfc2QgPSAobmV3X3BhcmVudF9rb2JqICYmIG5ld19wYXJlbnRfa29iai0+c2QpID8KKwkJbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OwogCiAJZXJyb3IgPSAwOwogCWlmIChzZC0+c19wYXJlbnQgPT0gbmV3X3BhcmVudF9zZCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA1NjFhOWMwLi5mNWVhNDY4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kLCAqbmV3X29kID0gTlVMTDsKIAogIHJldHJ5OgotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAoIXNkLT5zX2F0dHIub3BlbiAmJiBuZXdfb2QpIHsKIAkJc2QtPnNfYXR0ci5vcGVuID0gbmV3X29kOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJm9kLT5idWZmZXJzKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmIChvZCkgewogCQlrZnJlZShuZXdfb2QpOwpAQCAtMzE1LDggKzMxNSw5IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZnNfYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCA9IHNkLT5zX2F0dHIub3BlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9kLT5yZWZjbnQpKQpAQCAtMzI0LDcgKzMyNSw3IEBACiAJZWxzZQogCQlvZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJa2ZyZWUob2QpOwogfQpAQCAtNDU2LDggKzQ1Nyw5IEBACiB2b2lkIHN5c2ZzX25vdGlmeV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJb2QgPSBzZC0+c19hdHRyLm9wZW47CiAJaWYgKG9kKSB7CkBAIC00NjUsNyArNDY3LDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvZC0+cG9sbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX25vdGlmeV9kaXJlbnQpOwogCmRpZmYgLS1naXQgYS9mcy94YXR0cl9hY2wuYyBiL2ZzL3hhdHRyX2FjbC5jCmluZGV4IGM2YWQ3YzcuLjA1YWMwZmUgMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3hhdHRyX2FjbC5jCkBAIC0zNiw3ICszNiw3IEBACiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiBOVUxMOwogCQotCWFjbCA9IHBvc2l4X2FjbF9hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJYWNsID0gcG9zaXhfYWNsX2FsbG9jKGNvdW50LCBHRlBfTk9GUyk7CiAJaWYgKCFhY2wpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWFjbF9lID0gYWNsLT5hX2VudHJpZXM7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCA5ZTQxZjkxLi4zZDRhMGM4IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwlpZiAob3AgIT0gUV9YUVVPVEFSTSAmJiAhWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQogCQlyZXR1cm4gLUVOT1NZUzsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggNGU0Mjc2Yi4uNWQxYTNiOSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtODc2LDcgKzg3Niw2IEBACiAJCWlwLT5pX2dkcXVvdCA9IE5VTEw7CiAJfQogCXhmc19pcHV0KGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JSVJFTEUoaXApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCBhYjY0ZjNlLi4wNzg1Nzk3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTg4MCw2ICs4ODAsNyBAQAogCQkJCSAqIE5vdCBpbiByYW5nZSAtIHNhdmUgbGFzdCBzZWFyY2gKIAkJCQkgKiBsb2NhdGlvbiBhbmQgYWxsb2NhdGUgYSBuZXcgaW5vZGUKIAkJCQkgKi8KKwkJCQl4ZnNfYnRyZWVfZGVsX2N1cnNvcih0Y3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJCQkJcGFnLT5wYWdsX2xlZnRyZWMgPSB0cmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9yaWdodHJlYyA9IHJlYy5pcl9zdGFydGlubzsKIAkJCQlwYWctPnBhZ2xfcGFnaW5vID0gcGFnaW5vOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCmluZGV4IDEwOTkzOTUuLmZiMTdmODIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYworKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCQkJCSJYRlM6IE5VTEwgZHF1b3QgaW4gJXMuIiwgX19mdW5jX18pOwogCQkJCWdvdG8gbmV4dDsKIAkJCX0KLQkJCWlmIChpdGVtLT5yaV9idWZbaV0uaV9sZW4gPCBzaXplb2YoeGZzX2RxYmxrX3QpKSB7CisJCQlpZiAoaXRlbS0+cmlfYnVmW2ldLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCQkJY21uX2VycihDRV9BTEVSVCwKIAkJCQkJIlhGUzogZHF1b3QgdG9vIHNtYWxsICglZCkgaW4gJXMuIiwKIAkJCQkJaXRlbS0+cmlfYnVmW2ldLmlfbGVuLCBfX2Z1bmNfXyk7CkBAIC0yNjM1LDcgKzI2MzUsNyBAQAogCQkJIlhGUzogTlVMTCBkcXVvdCBpbiAlcy4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9Ci0JaWYgKGl0ZW0tPnJpX2J1ZlsxXS5pX2xlbiA8IHNpemVvZih4ZnNfZHFibGtfdCkpIHsKKwlpZiAoaXRlbS0+cmlfYnVmWzFdLmlfbGVuIDwgc2l6ZW9mKHhmc19kaXNrX2RxdW90X3QpKSB7CiAJCWNtbl9lcnIoQ0VfQUxFUlQsCiAJCQkiWEZTOiBkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJaXRlbS0+cmlfYnVmWzFdLmlfbGVuLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCBmMzEyNzFjLi4yZmZjNTcwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcCA9IE5VTEw7CiAJeGZzX2xvZ19pdGVtX3QJCSptbGlwOwkvKiBwdHIgdG8gbWluaW11bSBsaXAgKi8KKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCiAJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOwogCkBAIC00ODMsOCArNDg0LDE2IEBACiAKIAlpZiAobWxpcCA9PSBkbGlwKSB7CiAJCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKKwkJLyoKKwkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrIGlzCisJCSAqIGRyb3BwZWQsIHNvIHdlIG11c3QgZ2V0IGEgY29weSBvZiBsaV9sc24gYmVmb3JlIHdlIGRvCisJCSAqIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBvbiAzMi1iaXQgcGxhdGZvcm1zCisJCSAqIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcgNjQtYml0IHZhbHVlcyBsaWtlIGxpX2xzbgorCQkgKiBpcyBub3QgYXRvbWljLgorCQkgKi8KKwkJdGFpbF9sc24gPSBtbGlwLT5saV9sc247CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIG1saXAtPmxpX2xzbik7CisJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LCB0YWlsX2xzbik7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwogCX0KQEAgLTUxNCw2ICs1MjMsNyBAQAogewogCXhmc19sb2dfaXRlbV90CQkqZGxpcDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CisJeGZzX2xzbl90CQl0YWlsX2xzbjsKIAogCWlmIChsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgewogCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CkBAIC01MjcsOSArNTM3LDE2IEBACiAKIAkJaWYgKG1saXAgPT0gZGxpcCkgewogCQkJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCQkJLyoKKwkJCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyBtbGlwIGFmdGVyIHRoZSBBSUwgbG9jaworCQkJICogaXMgZHJvcHBlZCwgc28gd2UgbXVzdCBnZXQgYSBjb3B5IG9mIGxpX2xzbgorCQkJICogYmVmb3JlIHdlIGRvIHNvLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudAorCQkJICogb24gMzItYml0IHBsYXRmb3JtcyB3aGVyZSBhY2Nlc3NpbmcgYW5kIHVwZGF0aW5nCisJCQkgKiA2NC1iaXQgdmFsdWVzIGxpa2UgbGlfbHNuIGlzIG5vdCBhdG9taWMuCisJCQkgKi8KKwkJCXRhaWxfbHNuID0gbWxpcCA/IG1saXAtPmxpX2xzbiA6IDA7CiAJCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwKLQkJCQkJCShtbGlwID8gbWxpcC0+bGlfbHNuIDogMCkpOworCQkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIHRhaWxfbHNuKTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IDBjM2RkODYuLjQ5NWRjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTczLDE0ICs3MywyMyBAQAogI2RlZmluZSBGX1NFVFNJRwkxMAkvKiBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogZm9yIHNvY2tldHMuICovCiAjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgRl9HRVRMSzY0CisjZGVmaW5lIEZfR0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NFVExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBGX1NFVE9XTl9FWAotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMworI2RlZmluZSBGX1NFVE9XTl9FWAkxNQorI2RlZmluZSBGX0dFVE9XTl9FWAkxNgogI2VuZGlmCiAKICNkZWZpbmUgRl9PV05FUl9USUQJMAogI2RlZmluZSBGX09XTkVSX1BJRAkxCi0jZGVmaW5lIEZfT1dORVJfR0lECTIKKyNkZWZpbmUgRl9PV05FUl9QR1JQCTIKIAogc3RydWN0IGZfb3duZXJfZXggewogCWludAl0eXBlOwpAQCAtMTM5LDEyICsxNDgsNiBAQAogCiAjaWZuZGVmIENPTkZJR182NEJJVAogCi0jaWZuZGVmIEZfR0VUTEs2NAotI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KLSNkZWZpbmUgRl9TRVRMSzY0CTEzCi0jZGVmaW5lIEZfU0VUTEtXNjQJMTQKLSNlbmRpZgotCiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0s2NAogI2lmbmRlZiBfX0FSQ0hfRkxPQ0s2NF9QQUQKICNkZWZpbmUgX19BUkNIX0ZMT0NLNjRfUEFECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDNmMzg0ZDQuLjVhNTM4NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0zMzAsNiArMzMwLDcgQEAKIHVuaWZkZWYteSArPSBzY2hlZC5oCiB1bmlmZGVmLXkgKz0gc2NyZWVuX2luZm8uaAogdW5pZmRlZi15ICs9IHNkbGEuaAordW5pZmRlZi15ICs9IHNlY3VyZWJpdHMuaAogdW5pZmRlZi15ICs9IHNlbGludXhfbmV0bGluay5oCiB1bmlmZGVmLXkgKz0gc2VtLmgKIHVuaWZkZWYteSArPSBzZXJpYWxfY29yZS5oCkBAIC0zNjQsNiArMzY1LDcgQEAKIHVuaWZkZWYteSArPSB2aWRlb2RldjIuaAogdW5pZmRlZi15ICs9IHZpZGVvZGV2LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fY29uZmlnLmgKK3VuaWZkZWYteSArPSB2aXJ0aW9faWRzLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fYmxrLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fbmV0LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fOXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCBkZDk3ZmI4Li5iMTBlYzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtNTMsNiArNTMsNyBAQAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIGZyZWVfYm9vdG1lbSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBmcmVlX2Jvb3RtZW1fbGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIC8qCiAgKiBGbGFncyBmb3IgcmVzZXJ2ZV9ib290bWVtIChhbHNvIGlmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCBjOGYyYTVmNy4uMzllNWZmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTkyLDkgKzkyLDcgQEAKICNkZWZpbmUgX0tFUk5FTF9DQVBBQklMSVRZX1ZFUlNJT04gX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8zCiAjZGVmaW5lIF9LRVJORUxfQ0FQQUJJTElUWV9VMzJTICAgIF9MSU5VWF9DQVBBQklMSVRZX1UzMlNfMwogCi0jaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCiBleHRlcm4gaW50IGZpbGVfY2Fwc19lbmFibGVkOwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IGtlcm5lbF9jYXBfc3RydWN0IHsKIAlfX3UzMiBjYXBbX0tFUk5FTF9DQVBBQklMSVRZX1UzMlNdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggYTNlZDdjYi4uNzNkY2Y4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC03OSw2ICs3OSw3IEBACiAjZGVmaW5lICBub2lubGluZQkJCV9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKICNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXwkJX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKICNkZWZpbmUgX19tYXliZV91bnVzZWQJCQlfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2RlZmluZSBfX2Fsd2F5c191bnVzZWQJCQlfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQogCiAjZGVmaW5lIF9fZ2NjX2hlYWRlcih4KSAjeAogI2RlZmluZSBfZ2NjX2hlYWRlcih4KSBfX2djY19oZWFkZXIobGludXgvY29tcGlsZXItZ2NjIyN4LmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCmluZGV4IDQ1MGZhNTkuLjk0ZGVhM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCkBAIC0zNiw0ICszNiwyNiBAQAogICAgdGhlIGtlcm5lbCBjb250ZXh0ICovCiAjZGVmaW5lIF9fY29sZAkJCV9fYXR0cmlidXRlX18oKF9fY29sZF9fKSkKIAorCisjaWYgX19HTlVDX01JTk9SX18gPj0gNQorLyoKKyAqIE1hcmsgYSBwb3NpdGlvbiBpbiBjb2RlIGFzIHVucmVhY2hhYmxlLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworICogc3VwcHJlc3MgY29udHJvbCBmbG93IHdhcm5pbmdzIGFmdGVyIGFzbSBibG9ja3MgdGhhdCB0cmFuc2ZlcgorICogY29udHJvbCBlbHNld2hlcmUuCisgKgorICogRWFybHkgc25hcHNob3RzIG9mIGdjYyA0LjUgZG9uJ3Qgc3VwcG9ydCB0aGlzIGFuZCB3ZSBjYW4ndCBkZXRlY3QKKyAqIHRoaXMgaW4gdGhlIHByZXByb2Nlc3NvciwgYnV0IHdlIGNhbiBsaXZlIHdpdGggdGhpcyBiZWNhdXNlIHRoZXkncmUKKyAqIHVucmVsZWFzZWQuICBSZWFsbHksIHdlIG5lZWQgdG8gaGF2ZSBhdXRvY29uZiBmb3IgdGhlIGtlcm5lbC4KKyAqLworI2RlZmluZSB1bnJlYWNoYWJsZSgpIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBfX0dOVUNfTUlOT1JfXyA+IDAKKyNkZWZpbmUgX19jb21waWxldGltZV9vYmplY3Rfc2l6ZShvYmopIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShvYmosIDApCisjZW5kaWYKKyNpZiBfX0dOVUNfTUlOT1JfXyA+PSA0CisjZGVmaW5lIF9fY29tcGlsZXRpbWVfd2FybmluZyhtZXNzYWdlKSBfX2F0dHJpYnV0ZV9fKCh3YXJuaW5nKG1lc3NhZ2UpKSkKKyNkZWZpbmUgX19jb21waWxldGltZV9lcnJvcihtZXNzYWdlKSBfX2F0dHJpYnV0ZV9fKChlcnJvcihtZXNzYWdlKSkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCAwNGZiNTEzLi41YmUzZGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xNDQsNiArMTQ0LDExIEBACiAjIGRlZmluZSBiYXJyaWVyKCkgX19tZW1vcnlfYmFycmllcigpCiAjZW5kaWYKIAorLyogVW5yZWFjaGFibGUgY29kZSAqLworI2lmbmRlZiB1bnJlYWNoYWJsZQorIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBkbyB7IH0gd2hpbGUgKDEpCisjZW5kaWYKKwogI2lmbmRlZiBSRUxPQ19ISURFCiAjIGRlZmluZSBSRUxPQ19ISURFKHB0ciwgb2ZmKQkJCQkJXAogICAoeyB1bnNpZ25lZCBsb25nIF9fcHRyOwkJCQkJXApAQCAtMjEzLDYgKzIxOCwxMCBAQAogIyBkZWZpbmUgX19tYXliZV91bnVzZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCisjaWZuZGVmIF9fYWx3YXlzX3VudXNlZAorIyBkZWZpbmUgX19hbHdheXNfdW51c2VkCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCiAjaWZuZGVmIG5vaW5saW5lCiAjZGVmaW5lIG5vaW5saW5lCiAjZW5kaWYKQEAgLTI2Niw2ICsyNzUsMTcgQEAKICMgZGVmaW5lIF9fc2FtZV90eXBlKGEsIGIpIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGEpLCB0eXBlb2YoYikpCiAjZW5kaWYKIAorLyogQ29tcGlsZSB0aW1lIG9iamVjdCBzaXplLCAtMSBmb3IgdW5rbm93biAqLworI2lmbmRlZiBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplCisjIGRlZmluZSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKG9iaikgLTEKKyNlbmRpZgorI2lmbmRlZiBfX2NvbXBpbGV0aW1lX3dhcm5pbmcKKyMgZGVmaW5lIF9fY29tcGlsZXRpbWVfd2FybmluZyhtZXNzYWdlKQorI2VuZGlmCisjaWZuZGVmIF9fY29tcGlsZXRpbWVfZXJyb3IKKyMgZGVmaW5lIF9fY29tcGlsZXRpbWVfZXJyb3IobWVzc2FnZSkKKyNlbmRpZgorCiAvKgogICogUHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBtZXJnaW5nIG9yIHJlZmV0Y2hpbmcgYWNjZXNzZXMuICBUaGUgY29tcGlsZXIKICAqIGlzIGFsc28gZm9yYmlkZGVuIGZyb20gcmVvcmRlcmluZyBzdWNjZXNzaXZlIGluc3RhbmNlcyBvZiBBQ0NFU1NfT05DRSgpLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCA0NDcxN2ViLi43OWEyMzQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMjkxLDggKzI5MSwxNSBAQAogaW50IGNwdWZyZXFfZ2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGNwdSk7CiBpbnQgY3B1ZnJlcV91cGRhdGVfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOwogCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAvKiBxdWVyeSB0aGUgY3VycmVudCBDUFUgZnJlcXVlbmN5IChpbiBrSHopLiBJZiB6ZXJvLCBjcHVmcmVxIGNvdWxkbid0IGRldGVjdCBpdCAqLwogdW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogcXVlcnkgdGhlIGxhc3Qga25vd24gQ1BVIGZyZXEgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhY2EzMWJmLi4yZWEzZTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTEyNCw3ICsxMjQsOSBAQAogCXN0cnVjdCBidXNfdHlwZQkJKmJ1czsKIAogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyIAkJKm1vZF9uYW1lOwkvKiB1c2VkIGZvciBidWlsdC1pbiBtb2R1bGVzICovCisJY29uc3QgY2hhcgkJKm1vZF9uYW1lOwkvKiB1c2VkIGZvciBidWlsdC1pbiBtb2R1bGVzICovCisKKwlib29sIHN1cHByZXNzX2JpbmRfYXR0cnM7CS8qIGRpc2FibGVzIGJpbmQvdW5iaW5kIHZpYSBzeXNmcyAqLwogCiAJaW50ICgqcHJvYmUpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCWludCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYXIuaCBiL2luY2x1ZGUvbGludXgvZG1hci5oCmluZGV4IDRhMmIxNjIuLjVkZTRjOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hci5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hci5oCkBAIC0yMDgsMTYgKzIwOCw5IEBACiAJdTggaW5jbHVkZV9hbGw6MTsJCS8qIGluY2x1ZGUgYWxsIHBvcnRzICovCiB9OwogCi0vKiBJbnRlbCBETUFSICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpbnRlbF9pb21tdV9pbml0KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlyZXR1cm4gZG1hcl9kZXZfc2NvcGVfaW5pdCgpOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotI2VuZGlmIC8qICFDT05GSUdfRE1BUiAqLworI2Vsc2UgLyogIUNPTkZJR19ETUFSOiAqLworc3RhdGljIGlubGluZSBpbnQgaW50ZWxfaW9tbXVfaW5pdCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CisjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KKwogI2VuZGlmIC8qIF9fRE1BUl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCmluZGV4IGNhMWJmZTkuLjkzZTc0MjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaApAQCAtMTM3LDYgKzEzNywxNCBAQAogCSAqIGJ5IG90aGVyIG1lYW5zLCBzbyB3ZSBoYXZlIHRydW5jYXRlX211dGV4LgogCSAqLwogCXN0cnVjdCBtdXRleCB0cnVuY2F0ZV9tdXRleDsKKworCS8qCisJICogVHJhbnNhY3Rpb25zIHRoYXQgY29udGFpbiBpbm9kZSdzIG1ldGFkYXRhIG5lZWRlZCB0byBjb21wbGV0ZQorCSAqIGZzeW5jIGFuZCBmZGF0YXN5bmMsIHJlc3BlY3RpdmVseS4KKwkgKi8KKwlhdG9taWNfdCBpX3N5bmNfdGlkOworCWF0b21pY190IGlfZGF0YXN5bmNfdGlkOworCiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBhMzRiZGY1Li5kZTljNzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC02NjksMTIgKzY2OSw2IEBACiAJLyogcGVyZm9ybSBmYiBzcGVjaWZpYyBtbWFwICovCiAJaW50ICgqZmJfbW1hcCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAotCS8qIHNhdmUgY3VycmVudCBoYXJkd2FyZSBzdGF0ZSAqLwotCXZvaWQgKCpmYl9zYXZlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KLQkvKiByZXN0b3JlIHNhdmVkIHN0YXRlICovCi0Jdm9pZCAoKmZiX3Jlc3RvcmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQogCS8qIGdldCBjYXBhYmlsaXR5IGdpdmVuIHZhciAqLwogCXZvaWQgKCpmYl9nZXRfY2Fwcykoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9ibGl0X2NhcHMgKmNhcHMsCiAJCQkgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaAppbmRleCA4NGQzNTMyLi43YmUwYzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaApAQCAtOTEsNiArOTEsOCBAQAogI2RlZmluZSBGU0NBQ0hFX09QX1dBSVRJTkcJNAkvKiBjbGVhcmVkIHdoZW4gb3AgaXMgd29rZW4gKi8KICNkZWZpbmUgRlNDQUNIRV9PUF9FWENMVVNJVkUJNQkvKiBleGNsdXNpdmUgb3AsIG90aGVyIG9wcyBtdXN0IHdhaXQgKi8KICNkZWZpbmUgRlNDQUNIRV9PUF9ERUFECQk2CS8qIG9wIGlzIG5vdyBkZWFkICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfREVDX1JFQURfQ05UCTcJLyogZGVjcmVtZW50IG9iamVjdC0+bl9yZWFkcyBvbiBkZXN0cnVjdGlvbiAqLworI2RlZmluZSBGU0NBQ0hFX09QX0tFRVBfRkxBR1MJMHhjMAkvKiBmbGFncyB0byBrZWVwIHdoZW4gcmVwdXJwb3NpbmcgYW4gb3AgKi8KIAogCWF0b21pY190CQl1c2FnZTsKIAl1bnNpZ25lZAkJZGVidWdfaWQ7CS8qIGRlYnVnZ2luZyBJRCAqLwpAQCAtMTAyLDYgKzEwNCwxNiBAQAogCiAJLyogb3BlcmF0aW9uIHJlbGVhc2VyICovCiAJZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90IHJlbGVhc2U7CisKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX1BST0MKKwljb25zdCBjaGFyICpuYW1lOwkJLyogb3BlcmF0aW9uIG5hbWUgKi8KKwljb25zdCBjaGFyICpzdGF0ZTsJCS8qIG9wZXJhdGlvbiBzdGF0ZSAqLworI2RlZmluZSBmc2NhY2hlX3NldF9vcF9uYW1lKE9QLCBOKQlkbyB7IChPUCktPm5hbWUgID0gKE4pOyB9IHdoaWxlKDApCisjZGVmaW5lIGZzY2FjaGVfc2V0X29wX3N0YXRlKE9QLCBTKQlkbyB7IChPUCktPnN0YXRlID0gKFMpOyB9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBmc2NhY2hlX3NldF9vcF9uYW1lKE9QLCBOKQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZnNjYWNoZV9zZXRfb3Bfc3RhdGUoT1AsIFMpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCiB9OwogCiBleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9vcF9kZWJ1Z19pZDsKQEAgLTEyNSw2ICsxMzcsNyBAQAogCW9wLT5kZWJ1Z19pZCA9IGF0b21pY19pbmNfcmV0dXJuKCZmc2NhY2hlX29wX2RlYnVnX2lkKTsKIAlvcC0+cmVsZWFzZSA9IHJlbGVhc2U7CiAJSU5JVF9MSVNUX0hFQUQoJm9wLT5wZW5kX2xpbmspOworCWZzY2FjaGVfc2V0X29wX3N0YXRlKG9wLCAiSW5pdCIpOwogfQogCiAvKioKQEAgLTIyMSw4ICsyMzQsMTAgQEAKIAlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKigqYWxsb2Nfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCiAJCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CiAKLQkvKiBsb29rIHVwIHRoZSBvYmplY3QgZm9yIGEgY29va2llICovCi0Jdm9pZCAoKmxvb2t1cF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKwkvKiBsb29rIHVwIHRoZSBvYmplY3QgZm9yIGEgY29va2llCisJICogLSByZXR1cm4gLUVUSU1FRE9VVCB0byBiZSByZXF1ZXVlZAorCSAqLworCWludCAoKmxvb2t1cF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKIAogCS8qIGZpbmlzaGVkIGxvb2tpbmcgdXAgKi8KIAl2b2lkICgqbG9va3VwX2NvbXBsZXRlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CkBAIC0yOTcsMTIgKzMxMiwxNCBAQAogCWF0b21pY190CQkJdXNhZ2U7CQkvKiBudW1iZXIgb2YgdXNlcnMgb2YgdGhpcyBjb29raWUgKi8KIAlhdG9taWNfdAkJCW5fY2hpbGRyZW47CS8qIG51bWJlciBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvb2tpZSAqLwogCXNwaW5sb2NrX3QJCQlsb2NrOworCXNwaW5sb2NrX3QJCQlzdG9yZXNfbG9jazsJLyogbG9jayBvbiBwYWdlIHN0b3JlIHRyZWUgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZAkJYmFja2luZ19vYmplY3RzOyAvKiBvYmplY3QocykgYmFja2luZyB0aGlzIGZpbGUvaW5kZXggKi8KIAljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmCSpkZWY7CQkvKiBkZWZpbml0aW9uICovCiAJc3RydWN0IGZzY2FjaGVfY29va2llCQkqcGFyZW50OwkvKiBwYXJlbnQgb2YgdGhpcyBlbnRyeSAqLwogCXZvaWQJCQkJKm5ldGZzX2RhdGE7CS8qIGJhY2sgcG9pbnRlciB0byBuZXRmcyAqLwogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJCXN0b3JlczsJCS8qIHBhZ2VzIHRvIGJlIHN0b3JlZCBvbiB0aGlzIGNvb2tpZSAqLwogI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9QRU5ESU5HX1RBRwkwCQkvKiBwYWdlcyB0YWc6IHBlbmRpbmcgd3JpdGUgdG8gY2FjaGUgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfU1RPUklOR19UQUcJMQkJLyogcGFnZXMgdGFnOiB3cml0aW5nIHRvIGNhY2hlICovCiAKIAl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CiAjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAJMAkvKiBUIGlmIG5vbi1pbmRleCBjb29raWUgYmVpbmcgbG9va2VkIHVwIHN0aWxsICovCkBAIC0zMzcsNiArMzU0LDcgQEAKIAkJRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLAkvKiByZXRpcmluZyBvYmplY3QgKi8KIAkJRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkcsCS8qIHdpdGhkcmF3aW5nIG9iamVjdCAqLwogCQlGU0NBQ0hFX09CSkVDVF9ERUFELAkJLyogb2JqZWN0IGlzIG5vdyBkZWFkICovCisJCUZTQ0FDSEVfT0JKRUNUX19OU1RBVEVTCiAJfSBzdGF0ZTsKIAogCWludAkJCWRlYnVnX2lkOwkvKiBkZWJ1Z2dpbmcgSUQgKi8KQEAgLTM0NSw2ICszNjMsNyBAQAogCWludAkJCW5fb2JqX29wczsJLyogbnVtYmVyIG9mIG9iamVjdCBvcHMgb3V0c3RhbmRpbmcgb24gb2JqZWN0ICovCiAJaW50CQkJbl9pbl9wcm9ncmVzczsJLyogbnVtYmVyIG9mIG9wcyBpbiBwcm9ncmVzcyAqLwogCWludAkJCW5fZXhjbHVzaXZlOwkvKiBudW1iZXIgb2YgZXhjbHVzaXZlIG9wcyBxdWV1ZWQgKi8KKwlhdG9taWNfdAkJbl9yZWFkczsJLyogbnVtYmVyIG9mIHJlYWQgb3BzIGluIHByb2dyZXNzICovCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIHN0YXRlIGFuZCBvcGVyYXRpb25zIGxvY2sgKi8KIAogCXVuc2lnbmVkIGxvbmcJCWxvb2t1cF9qaWY7CS8qIHRpbWUgYXQgd2hpY2ggbG9va3VwIHN0YXJ0ZWQgKi8KQEAgLTM1OCw2ICszNzcsNyBAQAogI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFCTQJLyogVCBpZiBuZXRmcyByZXF1ZXN0ZWQgb2JqZWN0IHJlbGVhc2UgKi8KICNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFCTUJLyogVCBpZiBuZXRmcyByZXF1ZXN0ZWQgb2JqZWN0IHJldGlyZW1lbnQgKi8KICNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcJNgkvKiBUIGlmIGNhY2hlIHJlcXVlc3RlZCBvYmplY3Qgd2l0aGRyYXdhbCAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVkVOVFNfTUFTSwkweDdmCS8qIG1hc2sgb2YgYWxsIGV2ZW50cyovCiAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKICNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfTE9DSwkJMAkvKiBUIGlmIG9iamVjdCBpcyBidXN5IGJlaW5nIHByb2Nlc3NlZCAqLwpAQCAtMzczLDcgKzM5MywxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJZGVwZW5kZW50czsJLyogRklGTyBvZiBkZXBlbmRlbnQgb2JqZWN0cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZGVwX2xpbms7CS8qIGxpbmsgaW4gcGFyZW50J3MgZGVwZW5kZW50cyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nX29wczsJLyogdW5zdGFydGVkIG9wZXJhdGlvbnMgb24gdGhpcyBvYmplY3QgKi8KKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9PQkpFQ1RfTElTVAorCXN0cnVjdCByYl9ub2RlCQlvYmpsaXN0X2xpbms7CS8qIGxpbmsgaW4gZ2xvYmFsIG9iamVjdCBsaXN0ICovCisjZW5kaWYKIAlwZ29mZl90CQkJc3RvcmVfbGltaXQ7CS8qIGN1cnJlbnQgc3RvcmFnZSBsaW1pdCAqLworCWxvZmZfdAkJCXN0b3JlX2xpbWl0X2w7CS8qIGN1cnJlbnQgc3RvcmFnZSBsaW1pdCAqLwogfTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdOwpAQCAtMzgzLDYgKzQwNywxMCBAQAogCSAob2JqKS0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFICYmCSAgICAgIFwKIAkgKG9iaiktPnN0YXRlIDwgRlNDQUNIRV9PQkpFQ1RfRFlJTkcpCiAKKyNkZWZpbmUgZnNjYWNoZV9vYmplY3RfaXNfZGVhZChvYmopCQkJCVwKKwkodGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmKG9iaiktPmNhY2hlLT5mbGFncykgJiYJXAorCSAob2JqKS0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfRFlJTkcpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzOwogCiAvKioKQEAgLTQxNCw2ICs0NDIsNyBAQAogCW9iamVjdC0+ZXZlbnRzID0gb2JqZWN0LT5ldmVudF9tYXNrID0gMDsKIAlvYmplY3QtPmZsYWdzID0gMDsKIAlvYmplY3QtPnN0b3JlX2xpbWl0ID0gMDsKKwlvYmplY3QtPnN0b3JlX2xpbWl0X2wgPSAwOwogCW9iamVjdC0+Y2FjaGUgPSBjYWNoZTsKIAlvYmplY3QtPmNvb2tpZSA9IGNvb2tpZTsKIAlvYmplY3QtPnBhcmVudCA9IE5VTEw7CkBAIC00MjIsNiArNDUxLDEyIEBACiBleHRlcm4gdm9pZCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOwogZXh0ZXJuIHZvaWQgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOwogCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfT0JKRUNUX0xJU1QKK2V4dGVybiB2b2lkIGZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3koc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworI2Vsc2UKKyNkZWZpbmUgZnNjYWNoZV9vYmplY3RfZGVzdHJveShvYmplY3QpIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKwogLyoqCiAgKiBmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQgLSBOb3RlIGRlc3RydWN0aW9uIG9mIGFuIG9iamVjdCBpbiBhIGNhY2hlCiAgKiBAY2FjaGU6IFRoZSBjYWNoZSBmcm9tIHdoaWNoIHRoZSBvYmplY3QgY2FtZQpAQCAtNDYwLDYgKzQ5NSw3IEBACiBzdGF0aWMgaW5saW5lCiB2b2lkIGZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LCBsb2ZmX3QgaV9zaXplKQogeworCW9iamVjdC0+c3RvcmVfbGltaXRfbCA9IGlfc2l6ZTsKIAlvYmplY3QtPnN0b3JlX2xpbWl0ID0gaV9zaXplID4+IFBBR0VfU0hJRlQ7CiAJaWYgKGlfc2l6ZSAmIH5QQUdFX01BU0spCiAJCW9iamVjdC0+c3RvcmVfbGltaXQrKzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLmgKaW5kZXggNmQ4ZWU0Ni4uNTk1Y2U0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLmgKQEAgLTIwMiw2ICsyMDIsOCBAQAogZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gYm9vbCBfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBib29sIF9fZnNjYWNoZV9tYXliZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICosCisJCQkJCSBnZnBfdCk7CiAKIC8qKgogICogZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyAtIFJlZ2lzdGVyIGEgZmlsZXN5c3RlbSBhcyBkZXNpcmluZyBjYWNoaW5nIHNlcnZpY2VzCkBAIC02MTUsNCArNjE3LDI5IEBACiAJCV9fZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKIH0KIAorLyoqCisgKiBmc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZSAtIENvbnNpZGVyIHJlbGVhc2luZyBhIHBhZ2UsIGNhbmNlbGxpbmcgYSBzdG9yZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRoYXQgaXMgYmVpbmcgY2FjaGVkLgorICogQGdmcDogVGhlIGdmcCBmbGFncyBwYXNzZWQgdG8gcmVsZWFzZXBhZ2UoKQorICoKKyAqIENvbnNpZGVyIHJlbGVhc2luZyBhIHBhZ2UgZm9yIHRoZSB2bXNjYW4gYWxnb3JpdGhtLCBvbiBiZWhhbGYgb2YgdGhlIG5ldGZzJ3MKKyAqIHJlbGVhc2VwYWdlKCkgY2FsbC4gIEEgc3RvcmFnZSByZXF1ZXN0IG9uIHRoZSBwYWdlIG1heSBjYW5jZWxsZWQgaWYgaXQgaXMKKyAqIG5vdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2Ugbm8gbG9uZ2VyIGhhcyBhIHN0b3JhZ2UgcmVxdWVzdCBvbiBpdCwKKyAqIGFuZCBmYWxzZSBpZiBhIHN0b3JhZ2UgcmVxdWVzdCBpcyBsZWZ0IGluIHBsYWNlLiAgSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhlCisgKiBwYWdlIHdpbGwgaGF2ZSBiZWVuIHBhc3NlZCB0byBmc2NhY2hlX3VuY2FjaGVfcGFnZSgpLiAgSWYgZmFsc2UgaXMgcmV0dXJuZWQKKyAqIHRoZSBwYWdlIGNhbm5vdCBiZSBmcmVlZCB5ZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUKK2Jvb2wgZnNjYWNoZV9tYXliZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJZ2ZwX3QgZ2ZwKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpICYmIFBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlyZXR1cm4gX19mc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShjb29raWUsIHBhZ2UsIGdmcCk7CisJcmV0dXJuIGZhbHNlOworfQorCiAjZW5kaWYgLyogX0xJTlVYX0ZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggNGVjNWU2Ny4uNDdiYmRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC0xMTcsMTIgKzExNywxMiBAQAogCXN0cnVjdCBkZW50cnkJCSpkaXI7CiAJc3RydWN0IHRyYWNlX2V2ZW50CSpldmVudDsKIAlpbnQJCQllbmFibGVkOwotCWludAkJCSgqcmVnZnVuYykodm9pZCAqKTsKLQl2b2lkCQkJKCp1bnJlZ2Z1bmMpKHZvaWQgKik7CisJaW50CQkJKCpyZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CisJdm9pZAkJCSgqdW5yZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJaW50CQkJaWQ7Ci0JaW50CQkJKCpyYXdfaW5pdCkodm9pZCk7Ci0JaW50CQkJKCpzaG93X2Zvcm1hdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcyk7CisJaW50CQkJKCpyYXdfaW5pdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOworCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqLAorCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqKTsKIAlpbnQJCQkoKmRlZmluZV9maWVsZHMpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWZpZWxkczsKIAlpbnQJCQlmaWx0ZXJfYWN0aXZlOwpAQCAtMTMxLDIwICsxMzEsMjAgQEAKIAl2b2lkCQkJKmRhdGE7CiAKIAlhdG9taWNfdAkJcHJvZmlsZV9jb3VudDsKLQlpbnQJCQkoKnByb2ZpbGVfZW5hYmxlKSh2b2lkKTsKLQl2b2lkCQkJKCpwcm9maWxlX2Rpc2FibGUpKHZvaWQpOworCWludAkJCSgqcHJvZmlsZV9lbmFibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKKwl2b2lkCQkJKCpwcm9maWxlX2Rpc2FibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIH07CiAKICNkZWZpbmUgRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUJMjA0OAogCi1leHRlcm4gY2hhcgkJCSp0cmFjZV9wcm9maWxlX2J1ZjsKLWV4dGVybiBjaGFyCQkJKnRyYWNlX3Byb2ZpbGVfYnVmX25taTsKK2V4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1ZjsKK2V4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7CiAKICNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVECQkzMgogI2RlZmluZSBNQVhfRklMVEVSX1NUUl9WQUwJMjU2CS8qIFNob3VsZCBoYW5kbGUgS1NZTV9TWU1CT0xfTEVOICovCiAKIGV4dGVybiB2b2lkIGRlc3Ryb3lfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKLWV4dGVybiBpbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjKTsKK2V4dGVybiBpbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBldmVudF9maWx0ZXIgKmZpbHRlciwgdm9pZCAqcmVjKTsKIGV4dGVybiBpbnQgZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKIAkJCQkJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAogCQkJCQl2b2lkICpyZWMsCkBAIC0xNTcsMTEgKzE1NywxMiBAQAogCUZJTFRFUl9QVFJfU1RSSU5HLAogfTsKIAotZXh0ZXJuIGludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJICAgICAgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgIGludCBvZmZzZXQsIGludCBzaXplLCBpbnQgaXNfc2lnbmVkLAotCQkJICAgICAgaW50IGZpbHRlcl90eXBlKTsKIGV4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY29uc3QgY2hhciAqdHlwZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplLAorCQkJICAgICAgaW50IGlzX3NpZ25lZCwgaW50IGZpbHRlcl90eXBlKTsKK2V4dGVybiBpbnQgdHJhY2VfYWRkX2V2ZW50X2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiB2b2lkIHRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKICNkZWZpbmUgaXNfc2lnbmVkX3R5cGUodHlwZSkJKCgodHlwZSkoLTEpKSA8IDApCiAKQEAgLTE4Niw0ICsxODcsMTMgQEAKIAkJX190cmFjZV9wcmludGsoaXAsIGZtdCwgIyNhcmdzKTsJCQlcCiB9IHdoaWxlICgwKQogCisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKK3N0cnVjdCBwZXJmX2V2ZW50OworZXh0ZXJuIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGUoaW50IGV2ZW50X2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50IGV2ZW50X2lkKTsKK2V4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfc2V0X2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBldmVudF9pZCwKKwkJCQkgICAgIGNoYXIgKmZpbHRlcl9zdHIpOworZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZnJlZV9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmggYi9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggYjgwYzg4ZC4uODFmOTBhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZzMl9vbmRpc2suaApAQCAtODEsNyArODEsMTEgQEAKIAlfX2JlMzIgbWhfdHlwZTsKIAlfX2JlNjQgX19wYWQwOwkJLyogV2FzIGdlbmVyYXRpb24gbnVtYmVyIGluIGdmczEgKi8KIAlfX2JlMzIgbWhfZm9ybWF0OwotCV9fYmUzMiBfX3BhZDE7CQkvKiBXYXMgaW5jYXJuYXRpb24gbnVtYmVyIGluIGdmczEgKi8KKwkvKiBUaGlzIHVuaW9uIGlzIHRvIGtlZXAgdXNlcnNwYWNlIGhhcHB5ICovCisJdW5pb24geworCQlfX2JlMzIgbWhfamlkOwkJLyogV2FzIGluY2FybmF0aW9uIG51bWJlciBpbiBnZnMxICovCisJCV9fYmUzMiBfX3BhZDE7CisJfTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IDZkNTI3ZWUuLmQ1YjM4NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC0xMzksMTAgKzEzOSwzNCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikKKyNpZiBkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkKK2V4dGVybiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2V4aXRfbm9oeih2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJjdV9pcnFfZW50ZXIodm9pZCkKK3sKKwlyY3VfZXhpdF9ub2h6KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfaXJxX2V4aXQodm9pZCkKK3sKKwlyY3VfZW50ZXJfbm9oeigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X25taV9lbnRlcih2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X25taV9leGl0KHZvaWQpCit7Cit9CisKKyNlbHNlCiBleHRlcm4gdm9pZCByY3VfaXJxX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2lycV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X25taV9lbnRlcih2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9ubWlfZXhpdCh2b2lkKTsKKyNlbmRpZgogI2Vsc2UKICMgZGVmaW5lIHJjdV9pcnFfZW50ZXIoKSBkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSByY3VfaXJxX2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCAxMGY2Mjg0Li44NzA5MzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTMxMiw2ICszMTIsNyBAQAogI2RlZmluZSBISURfUVVJUktfTVVMVElfSU5QVVQJCQkweDAwMDAwMDQwCiAjZGVmaW5lIEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTCQkweDAwMDEwMDAwCiAjZGVmaW5lIEhJRF9RVUlSS19GVUxMU1BFRURfSU5URVJWQUwJCTB4MTAwMDAwMDAKKyNkZWZpbmUgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUwkJMHgyMDAwMDAwMAogCiAvKgogICogVGhpcyBpcyB0aGUgZ2xvYmFsIGVudmlyb25tZW50IG9mIHRoZSBwYXJzZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oIGIvaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzZGFlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIF9MSU5VWF9IV19CUkVBS1BPSU5UX0gKKyNkZWZpbmUgX0xJTlVYX0hXX0JSRUFLUE9JTlRfSAorCitlbnVtIHsKKwlIV19CUkVBS1BPSU5UX0xFTl8xID0gMSwKKwlIV19CUkVBS1BPSU5UX0xFTl8yID0gMiwKKwlIV19CUkVBS1BPSU5UX0xFTl80ID0gNCwKKwlIV19CUkVBS1BPSU5UX0xFTl84ID0gOCwKK307CisKK2VudW0geworCUhXX0JSRUFLUE9JTlRfUiA9IDEsCisJSFdfQlJFQUtQT0lOVF9XID0gMiwKKwlIV19CUkVBS1BPSU5UX1ggPSA0LAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKworI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKworLyogQXMgaXQncyBmb3IgaW4ta2VybmVsIG9yIHB0cmFjZSB1c2UsIHdlIHdhbnQgaXQgdG8gYmUgcGlubmVkICovCisjZGVmaW5lIERFRklORV9CUkVBS1BPSU5UX0FUVFIobmFtZSkJXAorc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBuYW1lID0gewkJXAorCS50eXBlID0gUEVSRl9UWVBFX0JSRUFLUE9JTlQsCVwKKwkuc2l6ZSA9IHNpemVvZihuYW1lKSwJCVwKKwkucGlubmVkID0gMSwJCQlcCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfYnJlYWtwb2ludF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCit7CisJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9CUkVBS1BPSU5UOworCWF0dHItPnNpemUgPSBzaXplb2YoKmF0dHIpOworCWF0dHItPnBpbm5lZCA9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBod19icmVha3BvaW50X2FkZHIoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXJldHVybiBicC0+YXR0ci5icF9hZGRyOworfQorCitzdGF0aWMgaW5saW5lIGludCBod19icmVha3BvaW50X3R5cGUoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXJldHVybiBicC0+YXR0ci5icF90eXBlOworfQorCitzdGF0aWMgaW5saW5lIGludCBod19icmVha3BvaW50X2xlbihzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJcmV0dXJuIGJwLT5hdHRyLmJwX2xlbjsKK30KKworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50ICoKK3JlZ2lzdGVyX3VzZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJICAgIHBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQsCisJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCisvKiBGSVhNRTogb25seSBjaGFuZ2UgZnJvbSB0aGUgYXR0ciwgYW5kIGRvbid0IHVucmVnaXN0ZXIgKi8KK2V4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCittb2RpZnlfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCSAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKKwkJCSAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCisvKgorICogS2VybmVsIGJyZWFrcG9pbnRzIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1bGFyIHRocmVhZC4KKyAqLworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50ICoKK3JlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludF9jcHUoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKKwkJCQlwZXJmX2NhbGxiYWNrX3QgdHJpZ2dlcmVkLAorCQkJCWludCBjcHUpOworCitleHRlcm4gc3RydWN0IHBlcmZfZXZlbnQgKioKK3JlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJICAgIHBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQpOworCitleHRlcm4gaW50IHJlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIGludCBfX3JlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqKmNwdV9ldmVudHMpOworCitleHRlcm4gaW50IHJlc2VydmVfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK2V4dGVybiB2b2lkIGZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICpjb3VudGVyX2FyY2hfYnAoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXJldHVybiAmYnAtPmh3LmluZm87Cit9CisKKyNlbHNlIC8qICFDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKgorcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCisJCQkgICAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJeyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGVyZl9ldmVudCAqCittb2RpZnlfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCSAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKKwkJCSAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCXsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKgorcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50X2NwdShzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJCXBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQsCisJCQkJaW50IGNwdSkJCXsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfZXZlbnQgKioKK3JlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJICAgIHBlcmZfY2FsbGJhY2tfdCB0cmlnZ2VyZWQpCXsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgaW50CityZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQl7IHJldHVybiAtRU5PU1lTOyB9CitzdGF0aWMgaW5saW5lIGludAorX19yZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKSAJeyByZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCXsgfQorc3RhdGljIGlubGluZSB2b2lkCit1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqKmNwdV9ldmVudHMpCQl7IH0KK3N0YXRpYyBpbmxpbmUgaW50CityZXNlcnZlX2JwX3Nsb3Qoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQkJCXtyZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApIAkJeyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9wdHJhY2VfaHdfYnJlYWtwb2ludChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJeyB9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqY291bnRlcl9hcmNoX2JwKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfSFdfQlJFQUtQT0lOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1wbnguaCBiL2luY2x1ZGUvbGludXgvaTJjLXBueC5oCmluZGV4IGYxMzI1NWUuLjllYjA3YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLXBueC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLXBueC5oCkBAIC0yMSw3ICsyMSw3IEBACiAJaW50CQkJbW9kZTsJCS8qIEludGVyZmFjZSBtb2RlICovCiAJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7CS8qIEkvTyBjb21wbGV0aW9uICovCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CQkvKiBUaW1lb3V0ICovCi0JY2hhciAqCQkJYnVmOwkJLyogRGF0YSBidWZmZXIgKi8KKwl1OCAqCQkJYnVmOwkJLyogRGF0YSBidWZmZXIgKi8KIAlpbnQJCQlsZW47CQkvKiBMZW5ndGggb2YgZGF0YSBidWZmZXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDU3ZDQxYjAuLjdiNDBjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMzYxLDYgKzM2MSwyNCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCisvKioKKyAqIGkyY19sb2NrX2FkYXB0ZXIgLSBQcmV2ZW50IGFjY2VzcyB0byBhbiBJMkMgYnVzIHNlZ21lbnQKKyAqIEBhZGFwdGVyOiBUYXJnZXQgSTJDIGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfbG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKKy8qKgorICogaTJjX3VubG9ja19hZGFwdGVyIC0gUmVhdXRob3JpemUgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY191bmxvY2tfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKIC8qZmxhZ3MgZm9yIHRoZSBjbGllbnQgc3RydWN0OiAqLwogI2RlZmluZSBJMkNfQ0xJRU5UX1BFQwkweDA0CQkvKiBVc2UgUGFja2V0IEVycm9yIENoZWNraW5nICovCiAjZGVmaW5lIEkyQ19DTElFTlRfVEVOCTB4MTAJCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggMjFhNmY1ZC4uOGQxMGFhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC04MywxNiArODMsMTIgQEAKICNkZWZpbmUgSU5JVF9JRFMKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCiAvKgogICogQmVjYXVzZSBvZiB0aGUgcmVkdWNlZCBzY29wZSBvZiBDQVBfU0VUUENBUCB3aGVuIGZpbGVzeXN0ZW0KICAqIGNhcGFiaWxpdGllcyBhcmUgaW4gZWZmZWN0LCBpdCBpcyBzYWZlIHRvIGFsbG93IENBUF9TRVRQQ0FQIHRvCiAgKiBiZSBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KICAqLwogIyBkZWZpbmUgQ0FQX0lOSVRfQlNFVCAgQ0FQX0ZVTExfU0VUCi0jZWxzZQotIyBkZWZpbmUgQ0FQX0lOSVRfQlNFVCAgQ0FQX0lOSVRfRUZGX1NFVAotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQogI2RlZmluZSBJTklUX1RBU0tfUkNVX1BSRUVNUFQodHNrKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDBjY2ZjMzAuLmMyYjFhN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTEzNzcsNiArMTM3NywxMCBAQAogICogbWV0aG9kczsgZXJhc2UoKSBpcyBvcHRpb25hbC4gc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBuZWVkCiAgKiBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGRyaXZlciBzZXRzIHVwIEZGX0dBSU4gYW5kIEZGX0FVVE9DRU5URVIKICAqIGJpdHMuCisgKgorICogTm90ZSB0aGF0IHBsYXliYWNrKCksIHNldF9nYWluKCkgYW5kIHNldF9hdXRvY2VudGVyKCkgYXJlIGNhbGxlZCB3aXRoCisgKiBkZXYtPmV2ZW50X2xvY2sgc3BpbmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBvZmYgYW5kIHRodXMgbWF5IG5vdAorICogc2xlZXAuCiAgKi8KIHN0cnVjdCBmZl9kZXZpY2UgewogCWludCAoKnVwbG9hZCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA3Y2E3MmI3Li43NWYzZjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTYwMywxMiArNjAzLDYgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfU0hJUlEpCi1leHRlcm4gdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkgeyB9Ci0jZW5kaWYKLQogc3RydWN0IHNlcV9maWxlOwogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKaW5kZXggYjAyYTNmMS4uMDA2YmY0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxZmxhZ3MuaApAQCAtMTI0LDYgKzEyNCw2IEBACiAJdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGZsYWdzKTsJXAogCXJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKTsJCVwKIH0pCi0jZW5kaWYJCS8qIENPTkZJR19YODYgKi8KKyNlbmRpZiAvKiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaCBiL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaAppbmRleCA0YzIxOGVlLi44Njg3YTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBpbnQgbXBfbXJydTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0cnVjdCBza19idWZmX2hlYWQgZnJhZ3M7CS8qIGZyYWdtZW50cyBzbCBsaXN0ICovCisgIHN0cnVjdCBza19idWZmICogZnJhZ3M7CS8qIGZyYWdtZW50cyBzbCBsaXN0IC0tIHVzZSBza2ItPm5leHQgKi8KICAgbG9uZyBmcmFtZXM7CQkJLyogbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgZnJhbWUgbGlzdCAqLwogICB1bnNpZ25lZCBpbnQgc2VxOwkJLyogbGFzdCBwcm9jZXNzZWQgcGFja2V0IHNlcSAjOiBhbnkgcGFja2V0cwogICAJCQkJICogd2l0aCBzbWFsbGVyIHNlcSAjIHdpbGwgYmUgZHJvcHBlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmggYi9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAppbmRleCAxYTljZjc4YmYuLjY4MTFmNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oCisrKyBiL2luY2x1ZGUvbGludXgvamlmZmllcy5oCkBAIC0zMDcsNiArMzA3LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNsb2NrX3RfdG9famlmZmllcyh1bnNpZ25lZCBsb25nIHgpOwogZXh0ZXJuIHU2NCBqaWZmaWVzXzY0X3RvX2Nsb2NrX3QodTY0IHgpOwogZXh0ZXJuIHU2NCBuc2VjX3RvX2Nsb2NrX3QodTY0IHgpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnNlY3NfdG9famlmZmllcyh1NjQgbik7CiAKICNkZWZpbmUgVElNRVNUQU1QX1NJWkUJMzAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZjRlMzE4NC4uM2ZhNGM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVjaGVjay5oPgotI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpAQCAtMjQxLDggKzI0MCw4IEBACiBhc21saW5rYWdlIGludCBwcmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKSBfX2NvbGQ7CiAKLWV4dGVybiBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHByaW50a19yYXRlbGltaXRfc3RhdGU7Ci1leHRlcm4gaW50IHByaW50a19yYXRlbGltaXQodm9pZCk7CitleHRlcm4gaW50IF9fcHJpbnRrX3JhdGVsaW1pdChjb25zdCBjaGFyICpmdW5jKTsKKyNkZWZpbmUgcHJpbnRrX3JhdGVsaW1pdCgpIF9fcHJpbnRrX3JhdGVsaW1pdChfX2Z1bmNfXykKIGV4dGVybiBib29sIHByaW50a190aW1lZF9yYXRlbGltaXQodW5zaWduZWQgbG9uZyAqY2FsbGVyX2ppZmZpZXMsCiAJCQkJICAgdW5zaWduZWQgaW50IGludGVydmFsX21zZWMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggMzQ4ZmE4OC4uYzA1OTA0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMjUsNiArMjUsNyBAQAogCWNwdXRpbWU2NF90IGlvd2FpdDsKIAljcHV0aW1lNjRfdCBzdGVhbDsKIAljcHV0aW1lNjRfdCBndWVzdDsKKwljcHV0aW1lNjRfdCBndWVzdF9uaWNlOwogfTsKIAogc3RydWN0IGtlcm5lbF9zdGF0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggM2E0NmI3Yi4uMWI2NzJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTI5Niw2ICsyOTYsOCBAQAogaW50IGRpc2FibGVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKmtwKTsKIGludCBlbmFibGVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKmtwKTsKIAordm9pZCBkdW1wX2twcm9iZShzdHJ1Y3Qga3Byb2JlICprcCk7CisKICNlbHNlIC8qICFDT05GSUdfS1BST0JFUzogKi8KIAogc3RhdGljIGlubGluZSBpbnQga3Byb2Jlc19idWlsdF9pbih2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21fYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvbHNtX2F1ZGl0LmgKaW5kZXggMTkwYzM3OC4uZjc4ZjgzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21fYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9hdWRpdC5oCkBAIC0yNiwxNCArMjYsMTUgQEAKIAogLyogQXV4aWxpYXJ5IGRhdGEgdG8gdXNlIGluIGdlbmVyYXRpbmcgdGhlIGF1ZGl0IHJlY29yZC4gKi8KIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSB7Ci0JY2hhciAgICB0eXBlOwotI2RlZmluZSBMU01fQVVESVRfREFUQV9GUyAgICAgIDEKLSNkZWZpbmUgTFNNX0FVRElUX0RBVEFfTkVUICAgICAyCi0jZGVmaW5lIExTTV9BVURJVF9EQVRBX0NBUCAgICAgMwotI2RlZmluZSBMU01fQVVESVRfREFUQV9JUEMgICAgIDQKLSNkZWZpbmUgTFNNX0FVRElUX0RBVEFfVEFTSyAgICA1Ci0jZGVmaW5lIExTTV9BVURJVF9EQVRBX0tFWSAgICAgNgotI2RlZmluZSBMU01fQVVESVRfTk9fQVVESVQgICAgIDcKKwljaGFyIHR5cGU7CisjZGVmaW5lIExTTV9BVURJVF9EQVRBX0ZTCTEKKyNkZWZpbmUgTFNNX0FVRElUX0RBVEFfTkVUCTIKKyNkZWZpbmUgTFNNX0FVRElUX0RBVEFfQ0FQCTMKKyNkZWZpbmUgTFNNX0FVRElUX0RBVEFfSVBDCTQKKyNkZWZpbmUgTFNNX0FVRElUX0RBVEFfVEFTSwk1CisjZGVmaW5lIExTTV9BVURJVF9EQVRBX0tFWQk2CisjZGVmaW5lIExTTV9BVURJVF9OT19BVURJVAk3CisjZGVmaW5lIExTTV9BVURJVF9EQVRBX0tNT0QJOAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXVuaW9uIAl7CiAJCXN0cnVjdCB7CkBAIC02Niw2ICs2Nyw3IEBACiAJCQljaGFyICprZXlfZGVzYzsKIAkJfSBrZXlfc3RydWN0OwogI2VuZGlmCisJCWNoYXIgKmttb2RfbmFtZTsKIAl9IHU7CiAJLyogdGhpcyB1bmlvbiBjb250YWlucyBMU00gc3BlY2lmaWMgZGF0YSAqLwogCXVuaW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9yZWd1bGF0b3IuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9yZWd1bGF0b3IuaAppbmRleCBmOTU0NjYzLi45NTVkMzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3JlZ3VsYXRvci5oCkBAIC0xMjEyLDcgKzEyMTIsNyBAQAogI2RlZmluZSBXTTgzMVhfTERPMV9PS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8xX09LICovCiAjZGVmaW5lIFdNODMxWF9MRE8xX09LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfT0sgKi8KIAotI2RlZmluZSBXTTgzMVhfSVNJTktfTUFYX0lTRUwgNTYKLWV4dGVybiBpbnQgd204MzF4X2lzaW5rdl92YWx1ZXNbV004MzFYX0lTSU5LX01BWF9JU0VMXTsKKyNkZWZpbmUgV004MzFYX0lTSU5LX01BWF9JU0VMIDU1CitleHRlcm4gaW50IHdtODMxeF9pc2lua3ZfdmFsdWVzW1dNODMxWF9JU0lOS19NQVhfSVNFTCArIDFdOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCA2NTQ3YzNjLi44MmE5MTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIGludCAoKnBhcmFtX2dldF9mbikoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKIC8qIEZsYWcgYml0cyBmb3Iga2VybmVsX3BhcmFtLmZsYWdzICovCi0jZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMQogI2RlZmluZSBLUEFSQU1fSVNCT09MCQkyCiAKIHN0cnVjdCBrZXJuZWxfcGFyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggNTI5YTA5My4uZDdlMjZlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0zNTgsNiArMzU4LDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KIGV4dGVybiBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIG5ldF9yYXRlbGltaXRfc3RhdGU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTQ5NThjMS4uODEyYTVmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC01NTcsNyArNTU3LDcgQEAKICAqCUNhbGxiYWNrIHVzZXMgd2hlbiB0aGUgdHJhbnNtaXR0ZXIgaGFzIG5vdCBtYWRlIGFueSBwcm9ncmVzcwogICoJZm9yIGRldi0+d2F0Y2hkb2cgdGlja3MuCiAgKgotICogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqZ2V0X3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyAqIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKm5kb19nZXRfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogICoJQ2FsbGVkIHdoZW4gYSB1c2VyIHdhbnRzIHRvIGdldCB0aGUgbmV0d29yayBkZXZpY2UgdXNhZ2UKICAqCXN0YXRpc3RpY3MuIElmIG5vdCBkZWZpbmVkLCB0aGUgY291bnRlcnMgaW4gZGV2LT5zdGF0cyB3aWxsCiAgKgliZSB1c2VkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaCBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKaW5kZXggNzlmZWM2YS4uY2U1MjA0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCkBAIC00MjUsMTUgKzQyNSw2IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBuaWxmc19kYXRfZ3JvdXBfZGVzYyAtIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IKLSAqIEBkZ19uZnJlZXM6IG51bWJlciBvZiBmcmVlIHZpcnR1YWwgYmxvY2sgbnVtYmVycyBpbiBibG9jayBncm91cAotICovCi1zdHJ1Y3QgbmlsZnNfZGF0X2dyb3VwX2Rlc2MgewotCV9fbGUzMiBkZ19uZnJlZXM7Ci19OwotCi0KLS8qKgogICogc3RydWN0IG5pbGZzX3NuYXBzaG90X2xpc3QgLSBzbmFwc2hvdCBsaXN0CiAgKiBAc3NsX25leHQ6IG5leHQgY2hlY2twb2ludCBudW1iZXIgb24gc25hcHNob3QgbGlzdAogICogQHNzbF9wcmV2OiBwcmV2aW91cyBjaGVja3BvaW50IG51bWJlciBvbiBzbmFwc2hvdCBsaXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGY0OTBlN2EuLmRhZWNjYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0zNzksOSArMzc5LDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERQkweDQzOGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEJMHg0MzkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUJMHg0MzljCi0vKiBBTUQgU0IgQ2hpcHNldCAqLwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUJIDB4NzgwYwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSAweDc4MDAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDg1LDYgKzQ4Miw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETV9QQ0lFIDB4MDM2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0ZPVVJfUE9SVF9NT0RFTAkweDI1MgogCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfSUJNCQkweDEwMTQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVAkweDAzZDQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VOSVNZUwkJMHgxMDE4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU5JU1lTX0RNQV9ESVJFQ1RPUiAweDAwMUMKIApAQCAtNTQzLDcgKzU0Myw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMJMHg3NDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzJfQlJJREdFCTB4NzQ1OAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TTUJVUwkweDc4MGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TTUJVUwkweDc4MGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM1X0lERSAgICAweDIwOEYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKQEAgLTU1Myw5ICs1NTMsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VEQyAgICAweDIwOTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VPQyAgICAweDIwOTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSAgICAweDIwOUEKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9WSURFTyAgMHgyMDgxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX0FFUyAgICAweDIwODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUJCTB4NzgwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFCTB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVAkJMHgxMDIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgJMHgyMDAwCkBAIC0xNjMyLDYgKzE2MzMsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MzAJCTB4NjczYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzIJCTB4NjgzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzYJCTB4NjgzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MTIJCTB4Njg3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY5MzMJCTB4NjkzMwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0RGWAkJMHgxMjFhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08JMHgwMDAxCkBAIC0xOTU1LDYgKzE5NTgsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFNFUklBTAkweDAxMDAgLyogMnggMTY1NTAgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19BCTB4MDEwMSAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CCTB4MDEwMiAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQQkweDAxMjAgLyogMnggMTY1NTBBLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19CCTB4MDEyMSAvKiAyeCAxNjU1MEEsIGhhbGYgb2YgNCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EJMHgwMTgwIC8qIDR4IDE2NTUwQSwgaGFsZiBvZiA4IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQgkweDAxODEgLyogNHggMTY1NTBBLCBoYWxmIG9mIDggcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF9QTFVTCTB4MDIwMCAvKiAyeCAxNjY1MCAqLwpAQCAtMjE2Miw2ICsyMTY3LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTc0MjBfMyAgICAgIDB4NzAwRAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3MzAwXzMgICAgICAweDcwMEUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzgwMF8zICAgICAgMHg3MDBGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwICAgICAgIDB4NzAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCAgICAgICAweDcwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAgICAgICAgMHg3MDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3ODAwICAgICAgIDB4NzAxMwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUERDCQkweDE1ZTkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKaW5kZXggN2I3ZmJmNC4uZTNmYjI1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCkBAIC0xMDYsNiArMTA2LDggQEAKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCQk9IDQsCiAJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4JCT0gNSwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSgkJPSA2LAorCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwkJPSA3LAorCVBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUwkJPSA4LAogCiAJUEVSRl9DT1VOVF9TV19NQVgsCQkJLyogbm9uLUFCSSAqLwogfTsKQEAgLTIyNSw2ICsyMjcsNyBAQAogI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1JFU0VUCQlfSU8gKCckJywgMykKICNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19QRVJJT0QJCV9JT1coJyQnLCA0LCB1NjQpCiAjZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfU0VUX09VVFBVVAlfSU8gKCckJywgNSkKKyNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19TRVRfRklMVEVSCV9JT1coJyQnLCA2LCBjaGFyICopCiAKIGVudW0gcGVyZl9jb3VudGVyX2lvY19mbGFncyB7CiAJUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCAyZTZkOTVmLi40M2FkYmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTgsNiArMTgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorI2VuZGlmCisKIC8qCiAgKiBVc2VyLXNwYWNlIEFCSSBiaXRzOgogICovCkBAIC0zMSw2ICszNSw3IEBACiAJUEVSRl9UWVBFX1RSQUNFUE9JTlQJCQk9IDIsCiAJUEVSRl9UWVBFX0hXX0NBQ0hFCQkJPSAzLAogCVBFUkZfVFlQRV9SQVcJCQkJPSA0LAorCVBFUkZfVFlQRV9CUkVBS1BPSU5UCQkJPSA1LAogCiAJUEVSRl9UWVBFX01BWCwJCQkJLyogbm9uLUFCSSAqLwogfTsKQEAgLTEwMiw2ICsxMDcsOCBAQAogCVBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgkJPSA1LAogCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKCQk9IDYsCisJUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTCQk9IDcsCisJUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTCQk9IDgsCiAKIAlQRVJGX0NPVU5UX1NXX01BWCwJCQkvKiBub24tQUJJICovCiB9OwpAQCAtMjA3LDYgKzIxNCwxNSBAQAogCQlfX3UzMgkJd2FrZXVwX2V2ZW50czsJICAvKiB3YWtldXAgZXZlcnkgbiBldmVudHMgKi8KIAkJX191MzIJCXdha2V1cF93YXRlcm1hcms7IC8qIGJ5dGVzIGJlZm9yZSB3YWtldXAgICAqLwogCX07CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7IC8qIEhhcmR3YXJlIGJyZWFrcG9pbnQgaW5mbyAqLworCQkJX191NjQJCWJwX2FkZHI7CisJCQlfX3UzMgkJYnBfdHlwZTsKKwkJCV9fdTMyCQlicF9sZW47CisJCX07CisJfTsKKwogCV9fdTMyCQkJX19yZXNlcnZlZF8yOwogCiAJX191NjQJCQlfX3Jlc2VydmVkXzM7CkBAIC0yMTksOCArMjM1LDkgQEAKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRElTQUJMRQkJX0lPICgnJCcsIDEpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0gJCV9JTyAoJyQnLCAyKQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19SRVNFVAkJX0lPICgnJCcsIDMpCi0jZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1BFUklPRAkJX0lPVygnJCcsIDQsIHU2NCkKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUEVSSU9ECQlfSU9XKCckJywgNCwgX191NjQpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVIJX0lPVygnJCcsIDYsIGNoYXIgKikKIAogZW51bSBwZXJmX2V2ZW50X2lvY19mbGFncyB7CiAJUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLApAQCAtNDcxLDEwICs0ODgsMTUgQEAKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OwogCQl9OwotCQl1bmlvbiB7IC8qIHNvZnR3YXJlICovCi0JCQlhdG9taWM2NF90CWNvdW50OworCQlzdHJ1Y3QgeyAvKiBzb2Z0d2FyZSAqLworCQkJczY0CQlyZW1haW5pbmc7CiAJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwogCQl9OworI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwkJdW5pb24geyAvKiBicmVha3BvaW50ICovCisJCQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50CWluZm87CisJCX07CisjZW5kaWYKIAl9OwogCWF0b21pYzY0X3QJCQlwcmV2X2NvdW50OwogCXU2NAkJCQlzYW1wbGVfcGVyaW9kOwpAQCAtNTQzLDYgKzU2NSwxMCBAQAogCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcGVyZl9wZW5kaW5nX2VudHJ5ICopOwogfTsKIAordHlwZWRlZiB2b2lkICgqcGVyZl9jYWxsYmFja190KShzdHJ1Y3QgcGVyZl9ldmVudCAqLCB2b2lkICopOworCitzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YTsKKwogLyoqCiAgKiBzdHJ1Y3QgcGVyZl9ldmVudCAtIHBlcmZvcm1hbmNlIGV2ZW50IGtlcm5lbCByZXByZXNlbnRhdGlvbjoKICAqLwpAQCAtNTg1LDcgKzYxMSw3IEBACiAJdTY0CQkJCXRzdGFtcF9ydW5uaW5nOwogCXU2NAkJCQl0c3RhbXBfc3RvcHBlZDsKIAotCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyCQlhdHRyOwogCXN0cnVjdCBod19wZXJmX2V2ZW50CQlodzsKIAogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQJKmN0eDsKQEAgLTYzMyw3ICs2NTksMjAgQEAKIAogCXN0cnVjdCBwaWRfbmFtZXNwYWNlCQkqbnM7CiAJdTY0CQkJCWlkOworCisJdm9pZCAoKm92ZXJmbG93X2hhbmRsZXIpKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCWludCBubWksIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKwlzdHJ1Y3QgZXZlbnRfZmlsdGVyCQkqZmlsdGVyOwogI2VuZGlmCisKKwlwZXJmX2NhbGxiYWNrX3QJCQljYWxsYmFjazsKKworCXBlcmZfY2FsbGJhY2tfdAkJCWV2ZW50X2NhbGxiYWNrOworCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiB9OwogCiAvKioKQEAgLTcwNiw3ICs3NDUsNiBAQAogCWludAkJCQlubWk7CiAJaW50CQkJCXNhbXBsZTsKIAlpbnQJCQkJbG9ja2VkOwotCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKIH07CiAKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKQEAgLTczOCw2ICs3NzYsMTQgQEAKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKIAkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CitleHRlcm4gaW50IHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKK2V4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCitwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJCWludCBjcHUsCisJCQkJcGlkX3QgcGlkLAorCQkJCXBlcmZfY2FsbGJhY2tfdCBjYWxsYmFjayk7CitleHRlcm4gdTY0IHBlcmZfZXZlbnRfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJIHU2NCAqZW5hYmxlZCwgdTY0ICpydW5uaW5nKTsKIAogc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgewogCXU2NAkJCQl0eXBlOwpAQCAtODE0LDYgKzg2MCw3IEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwKIAkJCQkgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSk7CitleHRlcm4gdm9pZCBwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSk7CiAKICNpZm5kZWYgcGVyZl9taXNjX2ZsYWdzCiAjZGVmaW5lIHBlcmZfbWlzY19mbGFncyhyZWdzKQkodXNlcl9tb2RlKHJlZ3MpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDogXApAQCAtODI3LDYgKzg3NCw4IEBACiBleHRlcm4gdm9pZCBwZXJmX291dHB1dF9lbmQoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKTsKIGV4dGVybiB2b2lkIHBlcmZfb3V0cHV0X2NvcHkoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAogCQkJICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworZXh0ZXJuIGludCBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkCiBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJeyB9CkBAIC04NDgsMTEgKzg5NywxNSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBwZXJmX3N3X2V2ZW50KHUzMiBldmVudF9pZCwgdTY0IG5yLCBpbnQgbm1pLAogCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikJCQl7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZAorcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCQl7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKQkJCQl7IH0KK3N0YXRpYyBpbmxpbmUgaW50ICBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpICB7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCQl7IH0KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCmluZGV4IDA2NWEzNjUuLjY3NjA4MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaApAQCAtMTQ3LDYgKzE0NywyMCBAQAogCWlmIChvbGQgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXBvc2l4X2FjbF9yZWxlYXNlKG9sZCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqb2xkX2FjY2VzcywgKm9sZF9kZWZhdWx0OworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJb2xkX2FjY2VzcyA9IGlub2RlLT5pX2FjbDsKKwlvbGRfZGVmYXVsdCA9IGlub2RlLT5pX2RlZmF1bHRfYWNsOworCWlub2RlLT5pX2FjbCA9IGlub2RlLT5pX2RlZmF1bHRfYWNsID0gQUNMX05PVF9DQUNIRUQ7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCWlmIChvbGRfYWNjZXNzICE9IEFDTF9OT1RfQ0FDSEVEKQorCQlwb3NpeF9hY2xfcmVsZWFzZShvbGRfYWNjZXNzKTsKKwlpZiAob2xkX2RlZmF1bHQgIT0gQUNMX05PVF9DQUNIRUQpCisJCXBvc2l4X2FjbF9yZWxlYXNlKG9sZF9kZWZhdWx0KTsKK30KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfbm9fYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmVlbXB0LmggYi9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaAppbmRleCA3MmIxYTEwLi4yZTY4MWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByZWVtcHQuaApAQCAtMTA1LDYgKzEwNSwxMSBAQAogICogQHNjaGVkX291dDogd2UndmUganVzdCBiZWVuIHByZWVtcHRlZAogICogICAgbm90aWZpZXI6IHN0cnVjdCBwcmVlbXB0X25vdGlmaWVyIGZvciB0aGUgdGFzayBiZWluZyBwcmVlbXB0ZWQKICAqICAgIG5leHQ6IHRoZSB0YXNrIHRoYXQncyBraWNraW5nIHVzIG91dAorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgc2NoZWRfaW4gYW5kIG91dCBhcmUgY2FsbGVkIHVuZGVyIGRpZmZlcmVudAorICogY29udGV4dHMuICBzY2hlZF9vdXQgaXMgY2FsbGVkIHdpdGggcnEgbG9jayBoZWxkIGFuZCBpcnEgZGlzYWJsZWQKKyAqIHdoaWxlIHNjaGVkX2luIGlzIGNhbGxlZCB3aXRob3V0IHJxIGxvY2sgYW5kIGlycSBlbmFibGVkLiAgVGhpcworICogZGlmZmVyZW5jZSBpcyBpbnRlbnRpb25hbCBhbmQgZGVwZW5kZWQgdXBvbiBieSBpdHMgdXNlcnMuCiAgKi8KIHN0cnVjdCBwcmVlbXB0X29wcyB7CiAJdm9pZCAoKnNjaGVkX2luKShzdHJ1Y3QgcHJlZW1wdF9ub3RpZmllciAqbm90aWZpZXIsIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IDc4YzQ4ODkuLmNlOWE5YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTM3Niw2ICszNzYsMTcgQEAKIAlyZXR1cm4gZmxhZ3MgPj4gX0RRVU9UX1NUQVRFX0ZMQUdTOwogfQogCisjaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCitleHRlcm4gdm9pZCBxdW90YV9zZW5kX3dhcm5pbmcoc2hvcnQgdHlwZSwgdW5zaWduZWQgaW50IGlkLCBkZXZfdCBkZXYsCisJCQkgICAgICAgY29uc3QgY2hhciB3YXJudHlwZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHF1b3RhX3NlbmRfd2FybmluZyhzaG9ydCB0eXBlLCB1bnNpZ25lZCBpbnQgaWQsIGRldl90IGRldiwKKwkJCQkgICAgICBjb25zdCBjaGFyIHdhcm50eXBlKQoreworCXJldHVybjsKK30KKyNlbmRpZiAvKiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgKi8KKwogc3RydWN0IHF1b3RhX2luZm8gewogCXVuc2lnbmVkIGludCBmbGFnczsJCQkvKiBGbGFncyBmb3IgZGlza3F1b3RhcyBvbiB0aGlzIGRldmljZSAqLwogCXN0cnVjdCBtdXRleCBkcWlvX211dGV4OwkJLyogbG9jayBkZXZpY2Ugd2hpbGUgSS9PIGluIHByb2dyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhdGVsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9yYXRlbGltaXQuaAppbmRleCAwMDA0NGI4Li42NjhjZjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhdGVsaW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmF0ZWxpbWl0LmgKQEAgLTEsMjAgKzEsMzEgQEAKICNpZm5kZWYgX0xJTlVYX1JBVEVMSU1JVF9ICiAjZGVmaW5lIF9MSU5VWF9SQVRFTElNSVRfSAotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAKLSNkZWZpbmUgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwgKDUgKiBIWikKLSNkZWZpbmUgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QgMTAKKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisKKyNkZWZpbmUgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwJKDUgKiBIWikKKyNkZWZpbmUgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QJCTEwCiAKIHN0cnVjdCByYXRlbGltaXRfc3RhdGUgewotCWludCBpbnRlcnZhbDsKLQlpbnQgYnVyc3Q7Ci0JaW50IHByaW50ZWQ7Ci0JaW50IG1pc3NlZDsKLQl1bnNpZ25lZCBsb25nIGJlZ2luOworCXNwaW5sb2NrX3QJbG9jazsJCS8qIHByb3RlY3QgdGhlIHN0YXRlICovCisKKwlpbnQJCWludGVydmFsOworCWludAkJYnVyc3Q7CisJaW50CQlwcmludGVkOworCWludAkJbWlzc2VkOworCXVuc2lnbmVkIGxvbmcJYmVnaW47CiB9OwogCi0jZGVmaW5lIERFRklORV9SQVRFTElNSVRfU1RBVEUobmFtZSwgaW50ZXJ2YWwsIGJ1cnN0KQkJXAotCQlzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIG5hbWUgPSB7aW50ZXJ2YWwsIGJ1cnN0LH0KKyNkZWZpbmUgREVGSU5FX1JBVEVMSU1JVF9TVEFURShuYW1lLCBpbnRlcnZhbF9pbml0LCBidXJzdF9pbml0KQkJXAorCQkJCQkJCQkJXAorCXN0cnVjdCByYXRlbGltaXRfc3RhdGUgbmFtZSA9IHsJCQkJCVwKKwkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQobmFtZS5sb2NrKSwJXAorCQkuaW50ZXJ2YWwJPSBpbnRlcnZhbF9pbml0LAkJCVwKKwkJLmJ1cnN0CQk9IGJ1cnN0X2luaXQsCQkJCVwKKwl9CiAKLWV4dGVybiBpbnQgX19yYXRlbGltaXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSAqcnMpOwotI2VuZGlmCitleHRlcm4gaW50IF9fX3JhdGVsaW1pdChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpycywgY29uc3QgY2hhciAqZnVuYyk7CisjZGVmaW5lIF9fcmF0ZWxpbWl0KHN0YXRlKSBfX19yYXRlbGltaXQoc3RhdGUsIF9fZnVuY19fKQorCisjZW5kaWYgLyogX0xJTlVYX1JBVEVMSU1JVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggM2ViZDBiNy4uMjQ0NDBmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNTIsMTEgKzUyLDYgQEAKIH07CiAKIC8qIEV4cG9ydGVkIGNvbW1vbiBpbnRlcmZhY2VzICovCi0jaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKTsKLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotI2RlZmluZSBzeW5jaHJvbml6ZV9yY3Ugc3luY2hyb25pemVfc2NoZWQKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXIodm9pZCk7CkBAIC02NywxMiArNjIsMTEgQEAKIAogLyogSW50ZXJuYWwgdG8ga2VybmVsICovCiBleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCk7Ci1leHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7Ci1leHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpCisjaW5jbHVkZSA8bGludXgvcmN1dGlueS5oPgogI2Vsc2UKICNlcnJvciAiVW5rbm93biBSQ1UgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmE5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uLCB0aGUgQmxvYXR3YXRjaCBlZGl0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwOAorICoKKyAqIEF1dGhvcjogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+CisgKgorICogRm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIHNlZSAtCisgKgkJRG9jdW1lbnRhdGlvbi9SQ1UKKyAqLworI2lmbmRlZiBfX0xJTlVYX1RJTllfSAorI2RlZmluZSBfX0xJTlVYX1RJTllfSAorCisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKwordm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7Cit2b2lkIHJjdV9iaF9xcyhpbnQgY3B1KTsKKworI2RlZmluZSBfX3JjdV9yZWFkX2xvY2soKQlwcmVlbXB0X2Rpc2FibGUoKQorI2RlZmluZSBfX3JjdV9yZWFkX3VubG9jaygpCXByZWVtcHRfZW5hYmxlKCkKKyNkZWZpbmUgX19yY3VfcmVhZF9sb2NrX2JoKCkJbG9jYWxfYmhfZGlzYWJsZSgpCisjZGVmaW5lIF9fcmN1X3JlYWRfdW5sb2NrX2JoKCkJbG9jYWxfYmhfZW5hYmxlKCkKKyNkZWZpbmUgY2FsbF9yY3Vfc2NoZWQJCWNhbGxfcmN1CisKKyNkZWZpbmUgcmN1X2luaXRfc2NoZWQoKQlkbyB7IH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKKworc3RhdGljIGlubGluZSBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcy4KKyAqLworc3RhdGljIGlubGluZSBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYm90dG9tLWhhbGYgZ3JhY2UgcGVyaW9kcy4KKyAqLworc3RhdGljIGlubGluZSBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKQoreworCXJldHVybiAwOworfQorCitleHRlcm4gaW50IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKKworI2RlZmluZSBzeW5jaHJvbml6ZV9yY3Ugc3luY2hyb25pemVfc2NoZWQKKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkKCk7Cit9CisKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKworI2lmZGVmIENPTkZJR19OT19IWgorCitleHRlcm4gdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9leGl0X25vaHoodm9pZCk7CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KKworc3RhdGljIGlubGluZSB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfZXhpdF9ub2h6KHZvaWQpCit7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JjdSh2b2lkKQoreworfQorCisjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggNDZlOWFiMy4uYzkzZWVlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTM0LDE1ICszNCwxNSBAQAogCiBleHRlcm4gdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7CiBleHRlcm4gdm9pZCByY3VfYmhfcXMoaW50IGNwdSk7Ci1leHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOworZXh0ZXJuIHZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKTsKIGV4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAogZXh0ZXJuIHZvaWQgX19yY3VfcmVhZF9sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19yY3VfcmVhZF91bmxvY2sodm9pZCk7CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3JjdSh2b2lkKTsKIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCkBAIC01Nyw3ICs1Nyw3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAotI2RlZmluZSBfX3N5bmNocm9uaXplX3NjaGVkKCkgc3luY2hyb25pemVfcmN1KCkKKyNkZWZpbmUgc3luY2hyb25pemVfcmN1IHN5bmNocm9uaXplX3NjaGVkCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JjdSh2b2lkKQogewpAQCAtNzYsMTggKzc2LDEzIEBACiAKIGV4dGVybiB2b2lkIGNhbGxfcmN1X3NjaGVkKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCSAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQotewotCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOwotfQorZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQodm9pZCkKIHsKIAlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKIH0KIAotZXh0ZXJuIHZvaWQgX19yY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwogCiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggNzVlNmU2MC4uODkxMTVlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTQ1LDcgKzE0NSw2IEBACiAKIAogZXh0ZXJuIHZvaWQgY2FsY19nbG9iYWxfbG9hZCh2b2lkKTsKLWV4dGVybiB1NjQgY3B1X25yX21pZ3JhdGlvbnMoaW50IGNwdSk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9wYXJlbnRfaXAodW5zaWduZWQgbG9uZyBhZGRyKTsKIApAQCAtMTcxLDggKzE3MCw2IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lX3N5bmNfdGhyZXNoOwotCiAvKgogICogVGFzayBzdGF0ZSBiaXRtYXNrLiBOT1RFISBUaGVzZSBiaXRzIGFyZSBhbHNvCiAgKiBlbmNvZGVkIGluIGZzL3Byb2MvYXJyYXkuYzogZ2V0X3Rhc2tfc3RhdGUoKS4KQEAgLTM0OSw3ICszNDYsNiBAQAogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwotYXNtbGlua2FnZSB2b2lkIF9fc2NoZWR1bGUodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCk7CiBleHRlcm4gaW50IG11dGV4X3NwaW5fb25fb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm93bmVyKTsKIApAQCAtNjI4LDYgKzYyNCw5IEBACiAJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAJY3B1dGltZV90IGd0aW1lOwogCWNwdXRpbWVfdCBjZ3RpbWU7CisjaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJY3B1dGltZV90IHByZXZfdXRpbWUsIHByZXZfc3RpbWU7CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3csIGNudmNzdywgY25pdmNzdzsKIAl1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1hal9mbHQsIGNtaW5fZmx0LCBjbWFqX2ZsdDsKIAl1bnNpZ25lZCBsb25nIGluYmxvY2ssIG91YmxvY2ssIGNpbmJsb2NrLCBjb3VibG9jazsKQEAgLTEwMTMsOSArMTAxMiwxMyBAQAogCXJldHVybiB0b19jcHVtYXNrKHNkLT5zcGFuKTsKIH0KIAotZXh0ZXJuIHZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgc3RydWN0IGNwdW1hc2sgKmRvbXNfbmV3LAorZXh0ZXJuIHZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza192YXJfdCBkb21zX25ld1tdLAogCQkJCSAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyX25ldyk7CiAKKy8qIEFsbG9jYXRlIGFuIGFycmF5IG9mIHNjaGVkIGRvbWFpbnMsIGZvciBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygpLiAqLworY3B1bWFza192YXJfdCAqYWxsb2Nfc2NoZWRfZG9tYWlucyh1bnNpZ25lZCBpbnQgbmRvbXMpOwordm9pZCBmcmVlX3NjaGVkX2RvbWFpbnMoY3B1bWFza192YXJfdCBkb21zW10sIHVuc2lnbmVkIGludCBuZG9tcyk7CisKIC8qIFRlc3QgYSBmbGFnIGluIHBhcmVudCBzY2hlZCBkb21haW4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRlc3Rfc2RfcGFyZW50KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgZmxhZykKIHsKQEAgLTEwMzMsNyArMTAzNiw3IEBACiBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgc3RydWN0IGNwdW1hc2sgKmRvbXNfbmV3LAorcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza192YXJfdCBkb21zX25ld1tdLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICpkYXR0cl9uZXcpCiB7CiB9CkBAIC0xMzMxLDcgKzEzMzQsOSBAQAogCiAJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgdXRpbWVzY2FsZWQsIHN0aW1lc2NhbGVkOwogCWNwdXRpbWVfdCBndGltZTsKKyNpZm5kZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAljcHV0aW1lX3QgcHJldl91dGltZSwgcHJldl9zdGltZTsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbnZjc3csIG5pdmNzdzsgLyogY29udGV4dCBzd2l0Y2ggY291bnRzICovCiAJc3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWU7IAkJLyogbW9ub3RvbmljIHRpbWUgKi8KIAlzdHJ1Y3QgdGltZXNwZWMgcmVhbF9zdGFydF90aW1lOwkvKiBib290IGJhc2VkIHRpbWUgKi8KQEAgLTE0MjEsMTcgKzE0MjYsMTcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCXVuc2lnbmVkIGludCBpcnFfZXZlbnRzOwotCWludCBoYXJkaXJxc19lbmFibGVkOwogCXVuc2lnbmVkIGxvbmcgaGFyZGlycV9lbmFibGVfaXA7Ci0JdW5zaWduZWQgaW50IGhhcmRpcnFfZW5hYmxlX2V2ZW50OwogCXVuc2lnbmVkIGxvbmcgaGFyZGlycV9kaXNhYmxlX2lwOworCXVuc2lnbmVkIGludCBoYXJkaXJxX2VuYWJsZV9ldmVudDsKIAl1bnNpZ25lZCBpbnQgaGFyZGlycV9kaXNhYmxlX2V2ZW50OwotCWludCBzb2Z0aXJxc19lbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgc29mdGlycV9kaXNhYmxlX2lwOwotCXVuc2lnbmVkIGludCBzb2Z0aXJxX2Rpc2FibGVfZXZlbnQ7Ci0JdW5zaWduZWQgbG9uZyBzb2Z0aXJxX2VuYWJsZV9pcDsKLQl1bnNpZ25lZCBpbnQgc29mdGlycV9lbmFibGVfZXZlbnQ7CisJaW50IGhhcmRpcnFzX2VuYWJsZWQ7CiAJaW50IGhhcmRpcnFfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIHNvZnRpcnFfZGlzYWJsZV9pcDsKKwl1bnNpZ25lZCBsb25nIHNvZnRpcnFfZW5hYmxlX2lwOworCXVuc2lnbmVkIGludCBzb2Z0aXJxX2Rpc2FibGVfZXZlbnQ7CisJdW5zaWduZWQgaW50IHNvZnRpcnFfZW5hYmxlX2V2ZW50OworCWludCBzb2Z0aXJxc19lbmFibGVkOwogCWludCBzb2Z0aXJxX2NvbnRleHQ7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTE9DS0RFUApAQCAtMTcyMCw5ICsxNzI1LDggQEAKIAkJX19wdXRfdGFza19zdHJ1Y3QodCk7CiB9CiAKLWV4dGVybiBjcHV0aW1lX3QgdGFza191dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwotZXh0ZXJuIGNwdXRpbWVfdCB0YXNrX3N0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci1leHRlcm4gY3B1dGltZV90IHRhc2tfZ3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiB2b2lkIHRhc2tfdGltZXMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHV0aW1lX3QgKnV0LCBjcHV0aW1lX3QgKnN0KTsKK2V4dGVybiB2b2lkIHRocmVhZF9ncm91cF90aW1lcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCAqdXQsIGNwdXRpbWVfdCAqc3QpOwogCiAvKgogICogUGVyIHByb2Nlc3MgZmxhZ3MKQEAgLTIwODYsMTEgKzIwOTAsMTggQEAKIAlyZXR1cm4gaW5mbyA8PSBTRU5EX1NJR19GT1JDRUQ7CiB9CiAKLS8qIFRydWUgaWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrLiAgKi8KLQorLyoKKyAqIFRydWUgaWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrLgorICovCiBzdGF0aWMgaW5saW5lIGludCBvbl9zaWdfc3RhY2sodW5zaWduZWQgbG9uZyBzcCkKIHsKLQlyZXR1cm4gKHNwIC0gY3VycmVudC0+c2FzX3NzX3NwIDwgY3VycmVudC0+c2FzX3NzX3NpemUpOworI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCisJcmV0dXJuIHNwID49IGN1cnJlbnQtPnNhc19zc19zcCAmJgorCQlzcCAtIGN1cnJlbnQtPnNhc19zc19zcCA8IGN1cnJlbnQtPnNhc19zc19zaXplOworI2Vsc2UKKwlyZXR1cm4gc3AgPiBjdXJyZW50LT5zYXNfc3Nfc3AgJiYKKwkJc3AgLSBjdXJyZW50LT5zYXNfc3Nfc3AgPD0gY3VycmVudC0+c2FzX3NzX3NpemU7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2FzX3NzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc3ApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyZWJpdHMuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oCmluZGV4IGQyYzVlZDguLjMzNDA2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oCkBAIC0xLDYgKzEsMTUgQEAKICNpZm5kZWYgX0xJTlVYX1NFQ1VSRUJJVFNfSAogI2RlZmluZSBfTElOVVhfU0VDVVJFQklUU19IIDEKIAorLyogRWFjaCBzZWN1cmVzZXR0aW5nIGlzIGltcGxlbWVudGVkIHVzaW5nIHR3byBiaXRzLiBPbmUgYml0IHNwZWNpZmllcworICAgd2hldGhlciB0aGUgc2V0dGluZyBpcyBvbiBvciBvZmYuIFRoZSBvdGhlciBiaXQgc3BlY2lmeSB3aGV0aGVyIHRoZQorICAgc2V0dGluZyBpcyBsb2NrZWQgb3Igbm90LiBBIHNldHRpbmcgd2hpY2ggaXMgbG9ja2VkIGNhbm5vdCBiZQorICAgY2hhbmdlZCBmcm9tIHVzZXItbGV2ZWwuICovCisjZGVmaW5lIGlzc2VjdXJlX21hc2soWCkJKDEgPDwgKFgpKQorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgaXNzZWN1cmUoWCkJCShpc3NlY3VyZV9tYXNrKFgpICYgY3VycmVudF9jcmVkX3h4eChzZWN1cmViaXRzKSkKKyNlbmRpZgorCiAjZGVmaW5lIFNFQ1VSRUJJVFNfREVGQVVMVCAweDAwMDAwMDAwCiAKIC8qIFdoZW4gc2V0IFVJRCAwIGhhcyBubyBzcGVjaWFsIHByaXZpbGVnZXMuIFdoZW4gdW5zZXQsIHdlIHN1cHBvcnQKQEAgLTEyLDYgKzIxLDkgQEAKICNkZWZpbmUgU0VDVVJFX05PUk9PVAkJCTAKICNkZWZpbmUgU0VDVVJFX05PUk9PVF9MT0NLRUQJCTEgIC8qIG1ha2UgYml0LTAgaW1tdXRhYmxlICovCiAKKyNkZWZpbmUgU0VDQklUX05PUk9PVAkJKGlzc2VjdXJlX21hc2soU0VDVVJFX05PUk9PVCkpCisjZGVmaW5lIFNFQ0JJVF9OT1JPT1RfTE9DS0VECShpc3NlY3VyZV9tYXNrKFNFQ1VSRV9OT1JPT1RfTE9DS0VEKSkKKwogLyogV2hlbiBzZXQsIHNldHVpZCB0by9mcm9tIHVpZCAwIGRvZXMgbm90IHRyaWdnZXIgY2FwYWJpbGl0eS0iZml4dXAiLgogICAgV2hlbiB1bnNldCwgdG8gcHJvdmlkZSBjb21wYXRpYmxpbGl0eSB3aXRoIG9sZCBwcm9ncmFtcyByZWx5aW5nIG9uCiAgICBzZXQqdWlkIHRvIGdhaW4vbG9zZSBwcml2aWxlZ2UsIHRyYW5zaXRpb25zIHRvL2Zyb20gdWlkIDAgY2F1c2UKQEAgLTE5LDYgKzMxLDEwIEBACiAjZGVmaW5lIFNFQ1VSRV9OT19TRVRVSURfRklYVVAJCTIKICNkZWZpbmUgU0VDVVJFX05PX1NFVFVJRF9GSVhVUF9MT0NLRUQJMyAgLyogbWFrZSBiaXQtMiBpbW11dGFibGUgKi8KIAorI2RlZmluZSBTRUNCSVRfTk9fU0VUVUlEX0ZJWFVQCShpc3NlY3VyZV9tYXNrKFNFQ1VSRV9OT19TRVRVSURfRklYVVApKQorI2RlZmluZSBTRUNCSVRfTk9fU0VUVUlEX0ZJWFVQX0xPQ0tFRCBcCisJCQkoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQX0xPQ0tFRCkpCisKIC8qIFdoZW4gc2V0LCBhIHByb2Nlc3MgY2FuIHJldGFpbiBpdHMgY2FwYWJpbGl0aWVzIGV2ZW4gYWZ0ZXIKICAgIHRyYW5zaXRpb25pbmcgdG8gYSBub24tcm9vdCB1c2VyICh0aGUgc2V0LXVpZCBmaXh1cCBzdXBwcmVzc2VkIGJ5CiAgICBiaXQgMikuIEJpdC00IGlzIGNsZWFyZWQgd2hlbiBhIHByb2Nlc3MgY2FsbHMgZXhlYygpOyBzZXR0aW5nIGJvdGgKQEAgLTI3LDEyICs0Myw4IEBACiAjZGVmaW5lIFNFQ1VSRV9LRUVQX0NBUFMJCTQKICNkZWZpbmUgU0VDVVJFX0tFRVBfQ0FQU19MT0NLRUQJCTUgIC8qIG1ha2UgYml0LTQgaW1tdXRhYmxlICovCiAKLS8qIEVhY2ggc2VjdXJlc2V0dGluZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0d28gYml0cy4gT25lIGJpdCBzcGVjaWZpZXMKLSAgIHdoZXRoZXIgdGhlIHNldHRpbmcgaXMgb24gb3Igb2ZmLiBUaGUgb3RoZXIgYml0IHNwZWNpZnkgd2hldGhlciB0aGUKLSAgIHNldHRpbmcgaXMgbG9ja2VkIG9yIG5vdC4gQSBzZXR0aW5nIHdoaWNoIGlzIGxvY2tlZCBjYW5ub3QgYmUKLSAgIGNoYW5nZWQgZnJvbSB1c2VyLWxldmVsLiAqLwotI2RlZmluZSBpc3NlY3VyZV9tYXNrKFgpCSgxIDw8IChYKSkKLSNkZWZpbmUgaXNzZWN1cmUoWCkJCShpc3NlY3VyZV9tYXNrKFgpICYgY3VycmVudF9jcmVkX3h4eChzZWN1cmViaXRzKSkKKyNkZWZpbmUgU0VDQklUX0tFRVBfQ0FQUwkoaXNzZWN1cmVfbWFzayhTRUNVUkVfS0VFUF9DQVBTKSkKKyNkZWZpbmUgU0VDQklUX0tFRVBfQ0FQU19MT0NLRUQgKGlzc2VjdXJlX21hc2soU0VDVVJFX0tFRVBfQ0FQU19MT0NLRUQpKQogCiAjZGVmaW5lIFNFQ1VSRV9BTExfQklUUwkJKGlzc2VjdXJlX21hc2soU0VDVVJFX05PUk9PVCkgfCBcCiAJCQkJIGlzc2VjdXJlX21hc2soU0VDVVJFX05PX1NFVFVJRF9GSVhVUCkgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMjM5ZTQwZC4uNDY2Y2JhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNDQ3LDYgKzQ0NywyMiBAQAogICoJQG5ld19kaXIgY29udGFpbnMgdGhlIHBhdGggc3RydWN0dXJlIGZvciBwYXJlbnQgb2YgdGhlIG5ldyBsaW5rLgogICoJQG5ld19kZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgb2YgdGhlIG5ldyBsaW5rLgogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHBhdGhfY2htb2Q6CisgKglDaGVjayBmb3IgcGVybWlzc2lvbiB0byBjaGFuZ2UgREFDJ3MgcGVybWlzc2lvbiBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5LgorICoJQGRlbnRyeSBjb250YWlucyB0aGUgZGVudHJ5IHN0cnVjdHVyZS4KKyAqCUBtbnQgY29udGFpbnMgdGhlIHZmc21udCBzdHJ1Y3R1cmUuCisgKglAbW9kZSBjb250YWlucyBEQUMncyBtb2RlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHBhdGhfY2hvd246CisgKglDaGVjayBmb3IgcGVybWlzc2lvbiB0byBjaGFuZ2Ugb3duZXIvZ3JvdXAgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeS4KKyAqCUBwYXRoIGNvbnRhaW5zIHRoZSBwYXRoIHN0cnVjdHVyZS4KKyAqCUB1aWQgY29udGFpbnMgbmV3IG93bmVyJ3MgSUQuCisgKglAZ2lkIGNvbnRhaW5zIG5ldyBncm91cCdzIElELgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHBhdGhfY2hyb290OgorICoJQ2hlY2sgZm9yIHBlcm1pc3Npb24gdG8gY2hhbmdlIHJvb3QgZGlyZWN0b3J5LgorICoJQHBhdGggY29udGFpbnMgdGhlIHBhdGggc3RydWN0dXJlLgorICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICogQGlub2RlX3JlYWRsaW5rOgogICoJQ2hlY2sgdGhlIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3ltYm9saWMgbGluay4KICAqCUBkZW50cnkgY29udGFpbnMgdGhlIGRlbnRyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaWxlIGxpbmsuCkBAIC02OTAsNiArNzA2LDcgQEAKICAqIEBrZXJuZWxfbW9kdWxlX3JlcXVlc3Q6CiAgKglBYmlsaXR5IHRvIHRyaWdnZXIgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IHVwY2FsbCB0byB1c2Vyc3BhY2UgZm9yCiAgKgl1c2Vyc3BhY2UgdG8gbG9hZCBhIGtlcm5lbCBtb2R1bGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCUBrbW9kX25hbWUgbmFtZSBvZiB0aGUgbW9kdWxlIHJlcXVlc3RlZCBieSB0aGUga2VybmVsCiAgKglSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLgogICogQHRhc2tfc2V0dWlkOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc2V0dGluZyBvbmUgb3IgbW9yZSBvZiB0aGUgdXNlciBpZGVudGl0eQpAQCAtMTQ4OCw2ICsxNTA1LDEwIEBACiAJCQkgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogCWludCAoKnBhdGhfcmVuYW1lKSAoc3RydWN0IHBhdGggKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgICAgc3RydWN0IHBhdGggKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOworCWludCAoKnBhdGhfY2htb2QpIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICAgbW9kZV90IG1vZGUpOworCWludCAoKnBhdGhfY2hvd24pIChzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpOworCWludCAoKnBhdGhfY2hyb290KSAoc3RydWN0IHBhdGggKnBhdGgpOwogI2VuZGlmCiAKIAlpbnQgKCppbm9kZV9hbGxvY19zZWN1cml0eSkgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMTU1Nyw3ICsxNTc4LDcgQEAKIAl2b2lkICgqY3JlZF90cmFuc2Zlcikoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCk7CiAJaW50ICgqa2VybmVsX2FjdF9hcykoc3RydWN0IGNyZWQgKm5ldywgdTMyIHNlY2lkKTsKIAlpbnQgKCprZXJuZWxfY3JlYXRlX2ZpbGVzX2FzKShzdHJ1Y3QgY3JlZCAqbmV3LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQlpbnQgKCprZXJuZWxfbW9kdWxlX3JlcXVlc3QpKHZvaWQpOworCWludCAoKmtlcm5lbF9tb2R1bGVfcmVxdWVzdCkoY2hhciAqa21vZF9uYW1lKTsKIAlpbnQgKCp0YXNrX3NldHVpZCkgKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncyk7CiAJaW50ICgqdGFza19maXhfc2V0dWlkKSAoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKIAkJCQlpbnQgZmxhZ3MpOwpAQCAtMTgyMiw3ICsxODQzLDcgQEAKIHZvaWQgc2VjdXJpdHlfdHJhbnNmZXJfY3JlZHMoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCk7CiBpbnQgc2VjdXJpdHlfa2VybmVsX2FjdF9hcyhzdHJ1Y3QgY3JlZCAqbmV3LCB1MzIgc2VjaWQpOwogaW50IHNlY3VyaXR5X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGNyZWQgKm5ldywgc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfa2VybmVsX21vZHVsZV9yZXF1ZXN0KHZvaWQpOworaW50IHNlY3VyaXR5X2tlcm5lbF9tb2R1bGVfcmVxdWVzdChjaGFyICprbW9kX25hbWUpOwogaW50IHNlY3VyaXR5X3Rhc2tfc2V0dWlkKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncyk7CiBpbnQgc2VjdXJpdHlfdGFza19maXhfc2V0dWlkKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCiAJCQkgICAgIGludCBmbGFncyk7CkBAIC0yMzg3LDcgKzI0MDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9rZXJuZWxfbW9kdWxlX3JlcXVlc3Qodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2tlcm5lbF9tb2R1bGVfcmVxdWVzdChjaGFyICprbW9kX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTUyLDYgKzI5NzMsMTAgQEAKIAkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogaW50IHNlY3VyaXR5X3BhdGhfcmVuYW1lKHN0cnVjdCBwYXRoICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkJIHN0cnVjdCBwYXRoICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKK2ludCBzZWN1cml0eV9wYXRoX2NobW9kKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQltb2RlX3QgbW9kZSk7CitpbnQgc2VjdXJpdHlfcGF0aF9jaG93bihzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpOworaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KHN0cnVjdCBwYXRoICpwYXRoKTsKICNlbHNlCS8qIENPTkZJR19TRUNVUklUWV9QQVRIICovCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wYXRoX3VubGluayhzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CkBAIC0zMDAxLDYgKzMwMjYsMjMgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcGF0aF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICAgICAgbW9kZV90IG1vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3BhdGhfY2hvd24oc3RydWN0IHBhdGggKnBhdGgsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfUEFUSCAqLwogCiAjaWZkZWYgQ09ORklHX0tFWVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGRmN2IyM2EuLmJjZGQ2NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMzU0LDggKzM1NCw4IEBACiAJCQkJaXB2c19wcm9wZXJ0eToxLAogCQkJCXBlZWtlZDoxLAogCQkJCW5mX3RyYWNlOjE7CisJX19iZTE2CQkJcHJvdG9jb2w6MTY7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFnczEpOwotCV9fYmUxNgkJCXByb3RvY29sOwogCiAJdm9pZAkJCSgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQpAQCAtMzY3LDcgKzM2Nyw2IEBACiAjZW5kaWYKIAogCWludAkJCWlpZjsKLQlfX3UxNgkJCXF1ZXVlX21hcHBpbmc7CiAjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAogCV9fdTE2CQkJdGNfaW5kZXg7CS8qIHRyYWZmaWMgY29udHJvbCBpbmRleCAqLwogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMzc2LDYgKzM3NSw3IEBACiAjZW5kaWYKIAogCWttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFnczIpOworCV9fdTE2CQkJcXVldWVfbWFwcGluZzoxNjsKICNpZmRlZiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRQogCV9fdTgJCQluZGlzY19ub2RldHlwZToyOwogI2VuZGlmCkBAIC0xNzU3LDYgKzE3NTcsOCBAQAogCQkJCQkJICAgICBpbnQgdG9fb2Zmc2V0LAogCQkJCQkJICAgICBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkgICAgICAgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkCSAgICAgICBza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CSAgICAgICBza2Jfa2lsbF9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIF9fd3N1bQkgICAgICAgc2tiX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oIGIvaW5jbHVkZS9saW51eC9zbG93LXdvcmsuaAppbmRleCBiNjVjODg4Li4xMzMzN2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xvdy13b3JrLmgKQEAgLTE3LDEzICsxNywyMCBAQAogI2lmZGVmIENPTkZJR19TTE9XX1dPUksKIAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKIHN0cnVjdCBzbG93X3dvcms7CisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRworc3RydWN0IHNlcV9maWxlOworI2VuZGlmCiAKIC8qCiAgKiBUaGUgb3BlcmF0aW9ucyB1c2VkIHRvIHN1cHBvcnQgc2xvdyB3b3JrIGl0ZW1zCiAgKi8KIHN0cnVjdCBzbG93X3dvcmtfb3BzIHsKKwkvKiBvd25lciAqLworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCiAJLyogZ2V0IGEgcmVmIG9uIGEgd29yayBpdGVtCiAJICogLSByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtdmUgaWYgbm90CiAJICovCkBAIC0zNCw2ICs0MSwxMSBAQAogCiAJLyogZXhlY3V0ZSBhIHdvcmsgaXRlbSAqLwogCXZvaWQgKCpleGVjdXRlKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKKworI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKKwkvKiBkZXNjcmliZSBhIHdvcmsgaXRlbSBmb3IgZGVidWdmcyAqLworCXZvaWQgKCpkZXNjKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOworI2VuZGlmCiB9OwogCiAvKgpAQCAtNDIsMTMgKzU0LDI0IEBACiAgKiAgIHF1ZXVlZAogICovCiBzdHJ1Y3Qgc2xvd193b3JrIHsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CS8qIHRoZSBvd25pbmcgbW9kdWxlICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIFNMT1dfV09SS19QRU5ESU5HCTAJLyogaXRlbSBwZW5kaW5nIChmdXJ0aGVyKSBleGVjdXRpb24gKi8KICNkZWZpbmUgU0xPV19XT1JLX0VYRUNVVElORwkxCS8qIGl0ZW0gY3VycmVudGx5IGV4ZWN1dGluZyAqLwogI2RlZmluZSBTTE9XX1dPUktfRU5RX0RFRkVSUkVECTIJLyogaXRlbSBlbnF1ZXVlIGRlZmVycmVkICovCiAjZGVmaW5lIFNMT1dfV09SS19WRVJZX1NMT1cJMwkvKiBpdGVtIGlzIHZlcnkgc2xvdyAqLworI2RlZmluZSBTTE9XX1dPUktfQ0FOQ0VMTElORwk0CS8qIGl0ZW0gaXMgYmVpbmcgY2FuY2VsbGVkLCBkb24ndCBlbnF1ZXVlICovCisjZGVmaW5lIFNMT1dfV09SS19ERUxBWUVECTUJLyogaXRlbSBpcyBzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmsgd2l0aCBhY3RpdmUgdGltZXIgKi8KIAljb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIHRhYmxlIGZvciB0aGlzIGl0ZW0gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CS8qIGxpbmsgaW4gcXVldWUgKi8KKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCisJc3RydWN0IHRpbWVzcGVjCQltYXJrOwkvKiBqaWZmaWVzIGF0IHdoaWNoIHF1ZXVlZCBvciBleGVjIGJlZ3VuICovCisjZW5kaWYKK307CisKK3N0cnVjdCBkZWxheWVkX3Nsb3dfd29yayB7CisJc3RydWN0IHNsb3dfd29yawl3b3JrOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogfTsKIAogLyoqCkBAIC02Nyw2ICs5MCwyMCBAQAogfQogCiAvKioKKyAqIHNsb3dfd29ya19pbml0IC0gSW5pdGlhbGlzZSBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0KKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIGluaXRpYWxpc2UKKyAqIEBvcHM6IFRoZSBvcGVyYXRpb25zIHRvIHVzZSB0byBoYW5kbGUgdGhlIHNsb3cgd29yayBpdGVtCisgKgorICogSW5pdGlhbGlzZSBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWVkX3Nsb3dfd29ya19pbml0KHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmssCisJCQkJCSAgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wcykKK3sKKwlpbml0X3RpbWVyKCZkd29yay0+dGltZXIpOworCXNsb3dfd29ya19pbml0KCZkd29yay0+d29yaywgb3BzKTsKK30KKworLyoqCiAgKiB2c2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbQogICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gaW5pdGlhbGlzZQogICogQG9wczogVGhlIG9wZXJhdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSB0aGUgc2xvdyB3b3JrIGl0ZW0KQEAgLTgzLDkgKzEyMCw0MCBAQAogCUlOSVRfTElTVF9IRUFEKCZ3b3JrLT5saW5rKTsKIH0KIAorLyoqCisgKiBzbG93X3dvcmtfaXNfcXVldWVkIC0gRGV0ZXJtaW5lIGlmIGEgc2xvdyB3b3JrIGl0ZW0gaXMgb24gdGhlIHdvcmsgcXVldWUKKyAqIHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gdGVzdAorICoKKyAqIERldGVybWluZSBpZiB0aGUgc3BlY2lmaWVkIHNsb3ctd29yayBpdGVtIGlzIG9uIHRoZSB3b3JrIHF1ZXVlLiAgVGhpcworICogcmV0dXJucyB0cnVlIGlmIGl0IGlzIGFjdHVhbGx5IG9uIHRoZSBxdWV1ZS4KKyAqCisgKiBJZiB0aGUgaXRlbSBpcyBleGVjdXRpbmcgYW5kIGhhcyBiZWVuIG1hcmtlZCBmb3IgcmVxdWV1ZSB3aGVuIGV4ZWN1dGlvbgorICogZmluaXNoZXMsIHRoZW4gZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBBbnlvbmUgd2lzaGluZyB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGV4ZWN1dGlvbiBjYW4gd2FpdCBvbiB0aGUKKyAqIFNMT1dfV09SS19FWEVDVVRJTkcgYml0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc2xvd193b3JrX2lzX3F1ZXVlZChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSB3b3JrLT5mbGFnczsKKwlyZXR1cm4gZmxhZ3MgJiBTTE9XX1dPUktfUEVORElORyAmJiAhKGZsYWdzICYgU0xPV19XT1JLX0VYRUNVVElORyk7Cit9CisKIGV4dGVybiBpbnQgc2xvd193b3JrX2VucXVldWUoc3RydWN0IHNsb3dfd29yayAqd29yayk7Ci1leHRlcm4gaW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcih2b2lkKTsKK2V4dGVybiB2b2lkIHNsb3dfd29ya19jYW5jZWwoc3RydWN0IHNsb3dfd29yayAqd29yayk7CitleHRlcm4gaW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKK2V4dGVybiB2b2lkIHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoc3RydWN0IG1vZHVsZSAqb3duZXIpOworCitleHRlcm4gaW50IGRlbGF5ZWRfc2xvd193b3JrX2VucXVldWUoc3RydWN0IGRlbGF5ZWRfc2xvd193b3JrICpkd29yaywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXllZF9zbG93X3dvcmtfY2FuY2VsKHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmspCit7CisJc2xvd193b3JrX2NhbmNlbCgmZHdvcmstPndvcmspOworfQorCitleHRlcm4gYm9vbCBzbG93X3dvcmtfc2xlZXBfdGlsbF90aHJlYWRfbmVlZGVkKHN0cnVjdCBzbG93X3dvcmsgKndvcmssCisJCQkJCSAgICAgICBzaWduZWQgbG9uZyAqX3RpbWVvdXQpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogZXh0ZXJuIGN0bF90YWJsZSBzbG93X3dvcmtfc3lzY3Rsc1tdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggMzljNjRiYS4uN2EwNTcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC03Niw2ICs3Niw5IEBACiB2b2lkIF9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHVpZCwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEsCiAJCQkJaW50IHdhaXQpOwogCitpbnQgc21wX2NhbGxfZnVuY3Rpb25fYW55KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJICB2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KTsKKwogLyoKICAqIEdlbmVyaWMgYW5kIGFyY2ggaGVscGVycwogICovCkBAIC0xMzcsOSArMTQwLDE1IEBACiAjZGVmaW5lIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KCkJCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb25fbWFueShtYXNrLCBmdW5jLCBpbmZvLCB3YWl0KSBcCiAJCQkodXBfc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbykpCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jYWxsX3NpbmdsZV9kYXRhKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jYWxsX3NpbmdsZV9kYXRhKHZvaWQpIHsgfQorCitzdGF0aWMgaW5saW5lIGludAorc21wX2NhbGxfZnVuY3Rpb25fYW55KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB2b2lkICgqZnVuYykodm9pZCAqaW5mbyksCisJCSAgICAgIHZvaWQgKmluZm8sIGludCB3YWl0KQogeworCXJldHVybiBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoMCwgZnVuYywgaW5mbywgd2FpdCk7CiB9CisKICNlbmRpZiAvKiAhU01QICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmgKaW5kZXggODEzYmU1OS4uMmVhMWRkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wX2xvY2suaApAQCAtMjQsOCArMjQsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgX19sb2NrZnVuYyBsb2NrX2tlcm5lbCh2b2lkKQlfX2FjcXVpcmVzKGtlcm5lbF9sb2NrKTsKLWV4dGVybiB2b2lkIF9fbG9ja2Z1bmMgdW5sb2NrX2tlcm5lbCh2b2lkKQlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKTsKK2V4dGVybiB2b2lkIF9fbG9ja2Z1bmMKK19sb2NrX2tlcm5lbChjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK19fYWNxdWlyZXMoa2VybmVsX2xvY2spOworCitleHRlcm4gdm9pZCBfX2xvY2tmdW5jCitfdW5sb2NrX2tlcm5lbChjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK19fcmVsZWFzZXMoa2VybmVsX2xvY2spOworCisjZGVmaW5lIGxvY2tfa2VybmVsKCkgZG8gewkJCQkJXAorCV9sb2NrX2tlcm5lbChfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgdW5sb2NrX2tlcm5lbCgpCWRvIHsJCQkJCVwKKwlfdW5sb2NrX2tlcm5lbChfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKK30gd2hpbGUgKDApCiAKIC8qCiAgKiBWYXJpb3VzIGxlZ2FjeSBkcml2ZXJzIGRvbid0IHJlYWxseSBuZWVkIHRoZSBCS0wgaW4gYSBzcGVjaWZpYwpAQCAtNDEsOCArNTQsOCBAQAogCiAjZWxzZQogCi0jZGVmaW5lIGxvY2tfa2VybmVsKCkJCQkJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHVubG9ja19rZXJuZWwoKQkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgbG9ja19rZXJuZWwoKQorI2RlZmluZSB1bmxvY2tfa2VybmVsKCkKICNkZWZpbmUgcmVsZWFzZV9rZXJuZWxfbG9jayh0YXNrKQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIGN5Y2xlX2tlcm5lbF9sb2NrKCkJCQlkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgcmVhY3F1aXJlX2tlcm5lbF9sb2NrKHRhc2spCQkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKaW5kZXggZjBjYTdhNy4uNzFkY2NmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaApAQCAtNzksOCArNzksNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAotZXh0ZXJuIGludCBfX2xvY2tmdW5jIGdlbmVyaWNfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2NrKTsKLQogLyoKICAqIFB1bGwgdGhlIF9fcmF3KigpIGZ1bmN0aW9ucy9kZWNsYXJhdGlvbnMgKFVQLW5vbmRlYnVnIGRvZXNudCBuZWVkIHRoZW0pOgogICovCkBAIC0xMDIsNyArMTAwLDcgQEAKIAogI2Vsc2UKICMgZGVmaW5lIHNwaW5fbG9ja19pbml0KGxvY2spCQkJCQlcCi0JZG8geyAqKGxvY2spID0gU1BJTl9MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQorCWRvIHsgKihsb2NrKSA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2spOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKQEAgLTExNiw3ICsxMTQsNyBAQAogfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSByd2xvY2tfaW5pdChsb2NrKQkJCQkJXAotCWRvIHsgKihsb2NrKSA9IFJXX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUgKDApCisJZG8geyAqKGxvY2spID0gX19SV19MT0NLX1VOTE9DS0VEKGxvY2spOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobG9jaykJX19yYXdfc3Bpbl9pc19sb2NrZWQoJihsb2NrKS0+cmF3X2xvY2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCmluZGV4IDdhN2UxOGYuLjgyNjRhN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCkBAIC02MCwxMzcgKzYwLDExOCBAQAogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIAkJCQkJCQlfX3JlbGVhc2VzKGxvY2spOwogCi0vKgotICogV2UgaW5saW5lIHRoZSB1bmxvY2sgZnVuY3Rpb25zIGluIHRoZSBub25kZWJ1ZyBjYXNlOgotICovCi0jaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSAmJiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9jawotI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfdW5sb2NrCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fd3JpdGVfdW5sb2NrCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfaXJxCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2tfaXJxCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fd3JpdGVfdW5sb2NrX2lycQotI2VuZGlmCi0KLSNpZm5kZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSwotCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19zcGluX2xvY2sKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSwogI2RlZmluZSBfc3Bpbl9sb2NrKGxvY2spIF9fc3Bpbl9sb2NrKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrCisjaWZkZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sKICNkZWZpbmUgX3JlYWRfbG9jayhsb2NrKSBfX3JlYWRfbG9jayhsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX2xvY2sKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sKICNkZWZpbmUgX3dyaXRlX2xvY2sobG9jaykgX193cml0ZV9sb2NrKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl9sb2NrX2JoCisjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkgKICNkZWZpbmUgX3NwaW5fbG9ja19iaChsb2NrKSBfX3NwaW5fbG9ja19iaChsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfbG9ja19iaAorI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JICiAjZGVmaW5lIF9yZWFkX2xvY2tfYmgobG9jaykgX19yZWFkX2xvY2tfYmgobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2JoCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JICiAjZGVmaW5lIF93cml0ZV9sb2NrX2JoKGxvY2spIF9fd3JpdGVfbG9ja19iaChsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19pcnEKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEKICNkZWZpbmUgX3NwaW5fbG9ja19pcnEobG9jaykgX19zcGluX2xvY2tfaXJxKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2lycQorI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUQogI2RlZmluZSBfcmVhZF9sb2NrX2lycShsb2NrKSBfX3JlYWRfbG9ja19pcnEobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycQorI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEKICNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxKGxvY2spIF9fd3JpdGVfbG9ja19pcnEobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19zcGluX2xvY2tfaXJxc2F2ZQorI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUKICNkZWZpbmUgX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spIF9fc3Bpbl9sb2NrX2lycXNhdmUobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX2xvY2tfaXJxc2F2ZQorI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUKICNkZWZpbmUgX3JlYWRfbG9ja19pcnFzYXZlKGxvY2spIF9fcmVhZF9sb2NrX2lycXNhdmUobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycXNhdmUKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRQogI2RlZmluZSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spIF9fd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spCiAjZW5kaWYKIAotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19MT0NLQlJFQUsgKi8KLQotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl90cnlsb2NrCisjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sKICNkZWZpbmUgX3NwaW5fdHJ5bG9jayhsb2NrKSBfX3NwaW5fdHJ5bG9jayhsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfdHJ5bG9jaworI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLCiAjZGVmaW5lIF9yZWFkX3RyeWxvY2sobG9jaykgX19yZWFkX3RyeWxvY2sobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV90cnlsb2NrCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLCiAjZGVmaW5lIF93cml0ZV90cnlsb2NrKGxvY2spIF9fd3JpdGVfdHJ5bG9jayhsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdHJ5bG9ja19iaAorI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAjZGVmaW5lIF9zcGluX3RyeWxvY2tfYmgobG9jaykgX19zcGluX3RyeWxvY2tfYmgobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9jaworI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sKICNkZWZpbmUgX3NwaW5fdW5sb2NrKGxvY2spIF9fc3Bpbl91bmxvY2sobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9jaworI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sKICNkZWZpbmUgX3JlYWRfdW5sb2NrKGxvY2spIF9fcmVhZF91bmxvY2sobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2sKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSwogI2RlZmluZSBfd3JpdGVfdW5sb2NrKGxvY2spIF9fd3JpdGVfdW5sb2NrKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfYmgKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JICiAjZGVmaW5lIF9zcGluX3VubG9ja19iaChsb2NrKSBfX3NwaW5fdW5sb2NrX2JoKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2tfYmgKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JICiAjZGVmaW5lIF9yZWFkX3VubG9ja19iaChsb2NrKSBfX3JlYWRfdW5sb2NrX2JoKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fd3JpdGVfdW5sb2NrX2JoCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkgKICNkZWZpbmUgX3dyaXRlX3VubG9ja19iaChsb2NrKSBfX3dyaXRlX3VubG9ja19iaChsb2NrKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdW5sb2NrX2lycQorI2lmZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRCiAjZGVmaW5lIF9zcGluX3VubG9ja19pcnEobG9jaykgX19zcGluX3VubG9ja19pcnEobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19pcnEKKyNpZmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUQogI2RlZmluZSBfcmVhZF91bmxvY2tfaXJxKGxvY2spIF9fcmVhZF91bmxvY2tfaXJxKGxvY2spCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fd3JpdGVfdW5sb2NrX2lycQorI2lmZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUQogI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycShsb2NrKSBfX3dyaXRlX3VubG9ja19pcnEobG9jaykKICNlbmRpZgogCi0jaWZkZWYgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9ja19pcnFyZXN0b3JlCisjaWZkZWYgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFCiAjZGVmaW5lIF9zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCiAjZW5kaWYKIAotI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2tfaXJxcmVzdG9yZQorI2lmZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRQogI2RlZmluZSBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgX19yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQogI2VuZGlmCiAKLSNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlCisjaWZkZWYgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRQogI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCiAjZW5kaWYKIAotI2VuZGlmIC8qIENPTkZJR19ERUJVR19TUElOTE9DSyAqLwotCiBzdGF0aWMgaW5saW5lIGludCBfX3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCBhY2EwZWVlLi40NzY1ZDk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtNDgsNiArNDgsNyBAQAogaW50IHNyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApOwogdm9pZCBzcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpIF9fcmVsZWFzZXMoc3ApOwogdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwordm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIGxvbmcgc3JjdV9iYXRjaGVzX2NvbXBsZXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA0ODkwMTllLi5iODUwODg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTYyLDcgKzYyLDcgQEAKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSUkNIUgogZXh0ZXJuIGNoYXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOwogI2VuZGlmCi1leHRlcm4gY2hhciAqIHN0cnN0cmlwKGNoYXIgKik7CitleHRlcm4gY2hhciAqIF9fbXVzdF9jaGVjayBzdHJzdHJpcChjaGFyICopOwogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJTVFIKIGV4dGVybiBjaGFyICogc3Ryc3RyKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IGNkMTVkZjYuLjVlNzgxZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0zMDEsNiArMzAxLDggQEAKICNkZWZpbmUgcG1fbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKKwogI2lmbmRlZiBDT05GSUdfSElCRVJOQVRJT04KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKQogewpAQCAtMzA4LDggKzMxMCwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb25fbGF0ZSh1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKIHsKIH0KLSNlbmRpZgogCi1leHRlcm4gc3RydWN0IG11dGV4IHBtX211dGV4Oworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQorCisjZWxzZQorCisvKiBMZXQgc29tZSBzdWJzeXN0ZW1zIGxpa2UgbWVtb3J5IGhvdGFkZCBleGNsdWRlIGhpYmVybmF0aW9uICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKQoreworCW11dGV4X2xvY2soJnBtX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkKK3sKKwltdXRleF91bmxvY2soJnBtX211dGV4KTsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmggYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAppbmRleCA3M2IxZjFjLi5mZWJlZGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaApAQCAtNyw2ICs3LDggQEAKIHN0cnVjdCBkbWFfYXR0cnM7CiBzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CiAKK2V4dGVybiBpbnQgc3dpb3RsYl9mb3JjZTsKKwogLyoKICAqIE1heGltdW0gYWxsb3dhYmxlIG51bWJlciBvZiBjb250aWd1b3VzIHNsYWJzIHRvIG1hcCwKICAqIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgV2hhdCBpcyB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgPwpAQCAtMjAsOCArMjIsNyBAQAogICovCiAjZGVmaW5lIElPX1RMQl9TSElGVCAxMQogCi1leHRlcm4gdm9pZAotc3dpb3RsYl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KGludCB2ZXJib3NlKTsKIAogZXh0ZXJuIHZvaWQKICpzd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKQEAgLTg4LDQgKzg5LDExIEBACiBleHRlcm4gaW50CiBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKTsKIAorI2lmZGVmIENPTkZJR19TV0lPVExCCitleHRlcm4gdm9pZCBfX2luaXQgc3dpb3RsYl9mcmVlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2lvdGxiX2ZyZWUodm9pZCkgeyB9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc3dpb3RsYl9wcmludF9pbmZvKHZvaWQpOwogI2VuZGlmIC8qIF9fTElOVVhfU1dJT1RMQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggYTk5MGFjZS4uZTc5ZTJmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtOTksMzcgKzk5LDE2IEBACiAjZGVmaW5lIF9fU0NfVEVTVDYodDYsIGE2LCAuLi4pCV9fU0NfVEVTVCh0Nik7IF9fU0NfVEVTVDUoX19WQV9BUkdTX18pCiAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQotI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCi1zdGF0aWMgaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKLXsJCQkJCQkJCQkgICAgICAgXAotCXJldHVybiByZWdfcHJvZl9zeXNjYWxsX2VudGVyKCJzeXMiI3NuYW1lKTsJCQkgICAgICAgXAotfQkJCQkJCQkJCSAgICAgICBcCi0JCQkJCQkJCQkgICAgICAgXAotc3RhdGljIHZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKLXsJCQkJCQkJCQkgICAgICAgXAotCXVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJCSAgICAgICBcCi19Ci0KLSNkZWZpbmUgVFJBQ0VfU1lTX0VYSVRfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCi1zdGF0aWMgaW50IHByb2Zfc3lzZXhpdF9lbmFibGVfIyNzbmFtZSh2b2lkKQkJCQkgICAgICAgXAotewkJCQkJCQkJCSAgICAgICBcCi0JcmV0dXJuIHJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKLX0JCQkJCQkJCQkgICAgICAgXAotCQkJCQkJCQkJICAgICAgIFwKLXN0YXRpYyB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlXyMjc25hbWUodm9pZCkJCQkJICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JdW5yZWdfcHJvZl9zeXNjYWxsX2V4aXQoInN5cyIjc25hbWUpOwkJCQkgICAgICAgXAotfQogCiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFX0lOSVQoc25hbWUpCQkJCSAgICAgICBcCiAJLnByb2ZpbGVfY291bnQgPSBBVE9NSUNfSU5JVCgtMSksCQkJCSAgICAgICBcCi0JLnByb2ZpbGVfZW5hYmxlID0gcHJvZl9zeXNlbnRlcl9lbmFibGVfIyNzbmFtZSwJCQkgICAgICAgXAotCS5wcm9maWxlX2Rpc2FibGUgPSBwcm9mX3N5c2VudGVyX2Rpc2FibGVfIyNzbmFtZSwKKwkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2VudGVyX2VuYWJsZSwJCQkJICAgICAgIFwKKwkucHJvZmlsZV9kaXNhYmxlID0gcHJvZl9zeXNlbnRlcl9kaXNhYmxlLAogCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKIAkucHJvZmlsZV9jb3VudCA9IEFUT01JQ19JTklUKC0xKSwJCQkJICAgICAgIFwKLQkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2V4aXRfZW5hYmxlXyMjc25hbWUsCQkJICAgICAgIFwKLQkucHJvZmlsZV9kaXNhYmxlID0gcHJvZl9zeXNleGl0X2Rpc2FibGVfIyNzbmFtZSwKKwkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2V4aXRfZW5hYmxlLAkJCQkgICAgICAgXAorCS5wcm9maWxlX2Rpc2FibGUgPSBwcm9mX3N5c2V4aXRfZGlzYWJsZSwKICNlbHNlCiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFKHNuYW1lKQogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQpAQCAtMTUzLDc0ICsxMzIsNDYgQEAKICNkZWZpbmUgX19TQ19TVFJfVERFQ0w2KHQsIGEsIC4uLikJI3QsIF9fU0NfU1RSX1RERUNMNShfX1ZBX0FSR1NfXykKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCi0Jc3RydWN0IHRyYWNlX2V2ZW50IGVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJCVwKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZW50ZXIsCQlcCiAJfTsJCQkJCQkJCVwKLQlzdGF0aWMgaW50IGluaXRfZW50ZXJfIyNzbmFtZSh2b2lkKQkJCQlcCi0JewkJCQkJCQkJXAotCQlpbnQgbnVtLCBpZDsJCQkJCQlcCi0JCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucigic3lzIiNzbmFtZSk7CQkJXAotCQlpZiAobnVtIDwgMCkJCQkJCQlcCi0JCQlyZXR1cm4gLUVOT1NZUzsJCQkJCVwKLQkJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSk7XAotCQlpZiAoIWlkKQkJCQkJCVwKLQkJCXJldHVybiAtRU5PREVWOwkJCQkJXAotCQlldmVudF9lbnRlcl8jI3NuYW1lLmlkID0gaWQ7CQkJCVwKLQkJc2V0X3N5c2NhbGxfZW50ZXJfaWQobnVtLCBpZCk7CQkJCVwKLQkJSU5JVF9MSVNUX0hFQUQoJmV2ZW50X2VudGVyXyMjc25hbWUuZmllbGRzKTsJCVwKLQkJcmV0dXJuIDA7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlUUkFDRV9TWVNfRU5URVJfUFJPRklMRShzbmFtZSk7CQkJCQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAogCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCiAJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCiAJICBldmVudF9lbnRlcl8jI3NuYW1lID0gewkJCQkJXAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZW50ZXIiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAotCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZldmVudF9zeXNjYWxsX2VudGVyLAkJXAotCQkucmF3X2luaXQJCT0gaW5pdF9lbnRlcl8jI3NuYW1lLAkJXAorCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKKwkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKIAkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZW50ZXJfZm9ybWF0LAkJXAogCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKIAkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyLAlcCi0JCS5kYXRhCQkJPSAic3lzIiNzbmFtZSwJCQlcCisJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAkJVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkJCQlcCiAJfQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfZXhpdF8jI3NuYW1lOwkJXAotCXN0cnVjdCB0cmFjZV9ldmVudCBleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJCVwKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewlcCiAJCS50cmFjZSAgICAgICAgICAgICAgICAgID0gcHJpbnRfc3lzY2FsbF9leGl0LAkJXAogCX07CQkJCQkJCQlcCi0Jc3RhdGljIGludCBpbml0X2V4aXRfIyNzbmFtZSh2b2lkKQkJCQlcCi0JewkJCQkJCQkJXAotCQlpbnQgbnVtLCBpZDsJCQkJCQlcCi0JCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucigic3lzIiNzbmFtZSk7CQkJXAotCQlpZiAobnVtIDwgMCkJCQkJCQlcCi0JCQlyZXR1cm4gLUVOT1NZUzsJCQkJCVwKLQkJaWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lKTtcCi0JCWlmICghaWQpCQkJCQkJXAotCQkJcmV0dXJuIC1FTk9ERVY7CQkJCQlcCi0JCWV2ZW50X2V4aXRfIyNzbmFtZS5pZCA9IGlkOwkJCQlcCi0JCXNldF9zeXNjYWxsX2V4aXRfaWQobnVtLCBpZCk7CQkJCVwKLQkJSU5JVF9MSVNUX0hFQUQoJmV2ZW50X2V4aXRfIyNzbmFtZS5maWVsZHMpOwkJXAotCQlyZXR1cm4gMDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCVRSQUNFX1NZU19FWElUX1BST0ZJTEUoc25hbWUpOwkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKIAkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJXAogCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAogCSAgZXZlbnRfZXhpdF8jI3NuYW1lID0gewkJCQkJXAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZXhpdCIjc25hbWUsCQlcCiAJCS5zeXN0ZW0gICAgICAgICAgICAgICAgID0gInN5c2NhbGxzIiwJCQlcCi0JCS5ldmVudCAgICAgICAgICAgICAgICAgID0gJmV2ZW50X3N5c2NhbGxfZXhpdCwJCVwKLQkJLnJhd19pbml0CQk9IGluaXRfZXhpdF8jI3NuYW1lLAkJXAorCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSwJXAorCQkucmF3X2luaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlLAkJXAogCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9leGl0X2Zvcm1hdCwJCVwKIAkJLmRlZmluZV9maWVsZHMJCT0gc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXAogCQkudW5yZWdmdW5jCQk9IHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXAotCQkuZGF0YQkJCT0gInN5cyIjc25hbWUsCQkJXAorCQkuZGF0YQkJCT0gKHZvaWQgKikmX19zeXNjYWxsX21ldGFfIyNzbmFtZSxcCiAJCVRSQUNFX1NZU19FWElUX1BST0ZJTEVfSU5JVChzbmFtZSkJCQlcCiAJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggZmMwYmYzZS4uNTdlNjM1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDEqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMSpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCi0JCQkJfCAxKlNEX1BSRUZFUl9MT0NBTAkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAogCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RwbS5oIGIvaW5jbHVkZS9saW51eC90cG0uaAppbmRleCAzMzM4YjNmLi5hYzVkMWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RwbS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHBtLmgKQEAgLTI3LDkgKzI3LDE2IEBACiAgKi8KICNkZWZpbmUJVFBNX0FOWV9OVU0gMHhGRkZGCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UQ0dfVFBNKQorI2lmIGRlZmluZWQoQ09ORklHX1RDR19UUE0pIHx8IGRlZmluZWQoQ09ORklHX1RDR19UUE1fTU9EVUxFKQogCiBleHRlcm4gaW50IHRwbV9wY3JfcmVhZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1Zik7CiBleHRlcm4gaW50IHRwbV9wY3JfZXh0ZW5kKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB0cG1fcGNyX3JlYWQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpIHsKKwlyZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHRwbV9wY3JfZXh0ZW5kKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKSB7CisJcmV0dXJuIC1FTk9ERVY7Cit9CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKaW5kZXggYzEzNGRkMS4uMDkwNzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCkBAIC03LDcgKzcsNyBAQAogCiAvKgogICogVHJhY2Ugc2VxdWVuY2VzIGFyZSB1c2VkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gY2FsbCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucwotICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUuCisgKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UgKHVwIHRvIGEgbWF4IG9mIFBBR0VfU0laRSkuCiAgKi8KIAogc3RydWN0IHRyYWNlX3NlcSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IDJhYWM4YTguLmY1OTYwNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0yODAsNiArMjgwLDEyIEBACiAgKiBUUkFDRV9FVkVOVF9GTiB0byBwZXJmb3JtIGFueSAodW4pcmVnaXN0cmF0aW9uIHdvcmsuCiAgKi8KIAorI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQkJXAorCURFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJXAorCURFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorCiAjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCBzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIAlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKICNkZWZpbmUgVFJBQ0VfRVZFTlRfRk4obmFtZSwgcHJvdG8sIGFyZ3MsIHN0cnVjdCwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCmluZGV4IGVhNzIyNmEuLjA5NWUxMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT185UF9ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogTWF4aW11bSBudW1iZXIgb2YgdmlydGlvIGNoYW5uZWxzIHBlciBwYXJ0aXRpb24gKDEgZm9yIG5vdykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCAwOWQ3MzAwLi4xNDE4ZjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX0JBTExPT05fSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIFRoZSBmZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIGJhbGxvb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKaW5kZXggMTVjYjY2Ni4uZmQyOTRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBGZWF0dXJlIGJpdHMgKi8KQEAgLTEzLDExICsxNCw4IEBACiAjZGVmaW5lIFZJUlRJT19CTEtfRl9STwkJNQkvKiBEaXNrIGlzIHJlYWQtb25seSAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KLSNkZWZpbmUgVklSVElPX0JMS19GX0lERU5USUZZCTgJLyogQVRBIElERU5USUZZIHN1cHBvcnRlZCAqLwogI2RlZmluZSBWSVJUSU9fQkxLX0ZfRkxVU0gJOQkvKiBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQgKi8KIAotI2RlZmluZSBWSVJUSU9fQkxLX0lEX0JZVEVTCShzaXplb2YoX191MTZbMjU2XSkpCS8qIElERU5USUZZIERBVEEgKi8KLQogc3RydWN0IHZpcnRpb19ibGtfY29uZmlnIHsKIAkvKiBUaGUgY2FwYWNpdHkgKGluIDUxMi1ieXRlIHNlY3RvcnMpLiAqLwogCV9fdTY0IGNhcGFjaXR5OwpAQCAtMzMsNyArMzEsNiBAQAogCX0gZ2VvbWV0cnk7CiAJLyogYmxvY2sgc2l6ZSBvZiBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9CTEtfU0laRSkgKi8KIAlfX3UzMiBibGtfc2l6ZTsKLQlfX3U4IGlkZW50aWZ5W1ZJUlRJT19CTEtfSURfQllURVNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBiNWY1MTk4Li5mZTg4NTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2RlZmluZSBfTElOVVhfVklSVElPX0NPTlNPTEVfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIC8qIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbwogICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggMWY0MTczNC4uMDg1ZTQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTMsNiArMyw3IEBACiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKaW5kZXggNDgxMjFjMy4uYzRkNWRlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fcm5nLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fUk5HX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19STkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCmluZGV4IDdhZmNhMGQuLjdmZmExMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTcwLDggKzcwLDggQEAKICNkZWZpbmUgVlRfRVZFTlRfVU5CTEFOSwkweDAwMDQJLyogU2NyZWVuIHVuYmxhbmsgKi8KICNkZWZpbmUgVlRfRVZFTlRfUkVTSVpFCQkweDAwMDgJLyogUmVzaXplIGRpc3BsYXkgKi8KICNkZWZpbmUgVlRfTUFYX0VWRU5UCQkweDAwMEYKLQl1bnNpZ25lZCBpbnQgb2xkOwkJLyogT2xkIGNvbnNvbGUgKi8KLQl1bnNpZ25lZCBpbnQgbmV3OwkJLyogTmV3IGNvbnNvbGUgKGlmIGNoYW5naW5nKSAqLworCXVuc2lnbmVkIGludCBvbGRldjsJCS8qIE9sZCBjb25zb2xlICovCisJdW5zaWduZWQgaW50IG5ld2V2OwkJLyogTmV3IGNvbnNvbGUgKGlmIGNoYW5naW5nKSAqLwogCXVuc2lnbmVkIGludCBwYWRbNF07CQkvKiBQYWRkaW5nIGZvciBleHBhbnNpb24gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDdlZjBjN2IuLmNmMjRjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjA3LDYgKzIwNyw3IEBACiAKIGV4dGVybiB2b2lkIGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yayk7CiAKIGV4dGVybiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGUyNjgxMjIuLmZiMDBiMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0xNTksOCArMTU5LDcgQEAKICAqIEBxaWQ6IHRoZSAmcDlfcWlkIHNlcnZlciBpZGVudGlmaWVyIHRoaXMgaGFuZGxlIHBvaW50cyB0bwogICogQGlvdW5pdDogdGhlIHNlcnZlciByZXBvcnRlZCBtYXhpbXVtIHRyYW5zYWN0aW9uIHNpemUgZm9yIHRoaXMgZmlsZQogICogQHVpZDogdGhlIG51bWVyaWMgdWlkIG9mIHRoZSBsb2NhbCB1c2VyIHdobyBvd25zIHRoaXMgaGFuZGxlCi0gKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKHVudXNlZD8pCi0gKiBAcmRpcl9mcG9zOiB0cmFja3Mgb2Zmc2V0IG9mIGZpbGUgcG9zaXRpb24gd2hlbiByZWFkaW5nIGRpcmVjdG9yeSBjb250ZW50cworICogQHJkaXI6IHJlYWRkaXIgYWNjb3VudGluZyBzdHJ1Y3R1cmUgKGFsbG9jYXRlZCBvbiBkZW1hbmQpCiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtMTc0LDkgKzE3Myw5IEBACiAJc3RydWN0IHA5X3FpZCBxaWQ7CiAJdTMyIGlvdW5pdDsKIAl1aWRfdCB1aWQ7Ci0Jdm9pZCAqYXV4OwogCi0JaW50IHJkaXJfZnBvczsKKwl2b2lkICpyZGlyOworCiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAppbmRleCBiNjNiODBmLi5mOTNhZDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaApAQCAtMTMwLDExICsxMzAsMTEgQEAKIAlfX3UxNgkJCXR3X251bTsKIAlrbWVtY2hlY2tfYml0ZmllbGRfYmVnaW4oZmxhZ3MpOwogCS8qIEFuZCB0aGVzZSBhcmUgb3Vycy4gKi8KLQlfX3U4CQkJdHdfaXB2Nm9ubHk6MSwKLQkJCQl0d190cmFuc3BhcmVudDoxOwotCS8qIDE0IGJpdHMgaG9sZSwgdHJ5IHRvIHBhY2sgKi8KKwl1bnNpZ25lZCBpbnQJCXR3X2lwdjZvbmx5ICAgICA6IDEsCisJCQkJdHdfdHJhbnNwYXJlbnQgIDogMSwKKwkJCQl0d19wYWQJCTogMTQsCS8qIDE0IGJpdHMgaG9sZSAqLworCQkJCXR3X2lwdjZfb2Zmc2V0ICA6IDE2OwogCWttZW1jaGVja19iaXRmaWVsZF9lbmQoZmxhZ3MpOwotCV9fdTE2CQkJdHdfaXB2Nl9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwkJdHdfdHRkOwogCXN0cnVjdCBpbmV0X2JpbmRfYnVja2V0CSp0d190YjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQl0d19kZWF0aF9ub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfZmliLmggYi9pbmNsdWRlL25ldC9pcF9maWIuaAppbmRleCBlZjkxZmU5Li40ZDIyZmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcF9maWIuaApAQCAtMjEwLDcgKzIxMCw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjRfcG9saWN5W107CiBleHRlcm4gdm9pZAkJaXBfZmliX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGZpYl92YWxpZGF0ZV9zb3VyY2UoX19iZTMyIHNyYywgX19iZTMyIGRzdCwgdTggdG9zLCBpbnQgb2lmLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsIHUzMiAqaXRhZyk7CisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwKKwkJCSAgICAgICB1MzIgKml0YWcsIHUzMiBtYXJrKTsKIGV4dGVybiB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwLAogCQkJICAgICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA0NjY4NTliLi45OThjMzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTEyODMsNiArMTI4MywxMiBAQAogICoKICAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHdpdGggdGhlIGFtcGR1X2FjdGlvbigpIGNhbGxiYWNrIGluCiAgKiAmc3RydWN0IGllZWU4MDIxMV9vcHMgdG8gaW5kaWNhdGUgd2hpY2ggYWN0aW9uIGlzIG5lZWRlZC4KKyAqCisgKiBOb3RlIHRoYXQgZHJpdmVycyBNVVNUIGJlIGFibGUgdG8gZGVhbCB3aXRoIGEgVFggYWdncmVnYXRpb24KKyAqIHNlc3Npb24gYmVpbmcgc3RvcHBlZCBldmVuIGJlZm9yZSB0aGV5IE9LJ2VkIHN0YXJ0aW5nIGl0IGJ5CisgKiBjYWxsaW5nIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihfaXJxc2FmZSksIGJlY2F1c2UgdGhlIHBlZXIKKyAqIG1pZ2h0IHJlY2VpdmUgdGhlIGFkZEJBIGZyYW1lIGFuZCBzZW5kIGEgZGVsQkEgcmlnaHQgYXdheSEKKyAqCiAgKiBASUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOiBzdGFydCBSeCBhZ2dyZWdhdGlvbgogICogQElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOiBzdG9wIFJ4IGFnZ3JlZ2F0aW9uCiAgKiBASUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOiBzdGFydCBUeCBhZ2dyZWdhdGlvbgpAQCAtMTY2OSw2ICsxNjc1LDggQEAKICAqIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGllZWU4MDIxMV9yeF9pcnFzYWZlKCkgbWF5IG5vdCBiZSBtaXhlZCBmb3IgYQogICogc2luZ2xlIGhhcmR3YXJlLgogICoKKyAqIE5vdGUgdGhhdCByaWdodCBub3csIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4KKyAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb24KICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCBjYmRkNjI4Li41Y2Y3MjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0yNTUsMTEgKzI1NSw5IEBACiB9CiAKIC8qIFRoZXNlIGFyZSBmb3IgTkFULiAgSWNreS4gKi8KLS8qIFVwZGF0ZSBUQ1Agd2luZG93IHRyYWNraW5nIGRhdGEgd2hlbiBOQVQgbWFuZ2xlcyB0aGUgcGFja2V0ICovCi1leHRlcm4gdm9pZCBuZl9jb25udHJhY2tfdGNwX3VwZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBpbnQgZGlyLAotCQkJCSAgICBzMTYgb2Zmc2V0KTsKK2V4dGVybiBzMTYgKCpuZl9jdF9uYXRfb2Zmc2V0KShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKKwkJCSAgICAgICB1MzIgc2VxKTsKIAogLyogRmFrZSBjb25udHJhY2sgZW50cnkgZm9yIHVudHJhY2tlZCBjb25uZWN0aW9ucyAqLwogZXh0ZXJuIHN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaAppbmRleCAyMzdhOTYxLi40MjIyMjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmgKQEAgLTMyLDQgKzMyLDggQEAKICAqIHRvIHBvcnQgY3QtPm1hc3Rlci0+c2F2ZWRfcHJvdG8uICovCiBleHRlcm4gdm9pZCBuZl9uYXRfZm9sbG93X21hc3RlcihzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKKworZXh0ZXJuIHMxNiBuZl9uYXRfZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCisJCQkgICAgIHUzMiBzZXEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDZlNWYwZTAuLjBhNDc0NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC04OTMsNyArODkzLDYgQEAKIAkgKi8KIAkvKiBSVE8JICAgICAgIDogVGhlIGN1cnJlbnQgcmV0cmFuc21pc3Npb24gdGltZW91dCB2YWx1ZS4gICovCiAJdW5zaWduZWQgbG9uZyBydG87Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3J0bzsKIAogCV9fdTMyIHJ0dDsJCS8qIFRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IFJUVC4JICovCiAKQEAgLTE5ODAsNyArMTk3OSw3IEBACiB2b2lkIHNjdHBfYXNzb2NfZGVsX25vbnByaW1hcnlfcGVlcnMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwogaW50IHNjdHBfYXNzb2Nfc2V0X2JpbmRfYWRkcl9mcm9tX2VwKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCi0JCQkJICAgICBnZnBfdCk7CisJCQkJICAgICBzY3RwX3Njb3BlX3QsIGdmcF90KTsKIGludCBzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9jb29raWUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkJIHN0cnVjdCBzY3RwX2Nvb2tpZSosCiAJCQkJCSBnZnBfdCBnZnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDE2MjE5MzUuLjlmOTYzOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIyNiwxMiArMjI2LDEyIEBACiAjZGVmaW5lIHNrX3Byb3QJCQlfX3NrX2NvbW1vbi5za2NfcHJvdAogI2RlZmluZSBza19uZXQJCQlfX3NrX2NvbW1vbi5za2NfbmV0CiAJa21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKGZsYWdzKTsKLQl1bnNpZ25lZCBjaGFyCQlza19zaHV0ZG93biA6IDIsCi0JCQkJc2tfbm9fY2hlY2sgOiAyLAotCQkJCXNrX3VzZXJsb2NrcyA6IDQ7CisJdW5zaWduZWQgaW50CQlza19zaHV0ZG93biAgOiAyLAorCQkJCXNrX25vX2NoZWNrICA6IDIsCisJCQkJc2tfdXNlcmxvY2tzIDogNCwKKwkJCQlza19wcm90b2NvbCAgOiA4LAorCQkJCXNrX3R5cGUgICAgICA6IDE2OwogCWttZW1jaGVja19iaXRmaWVsZF9lbmQoZmxhZ3MpOwotCXVuc2lnbmVkIGNoYXIJCXNrX3Byb3RvY29sOwotCXVuc2lnbmVkIHNob3J0CQlza190eXBlOwogCWludAkJCXNrX3JjdmJ1ZjsKIAlzb2NrZXRfbG9ja190CQlza19sb2NrOwogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jcy5oIGIvaW5jbHVkZS9wY21jaWEvY3MuaAppbmRleCA5MDQ0NjhhLi5hZmMyYmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKQEAgLTE1LDYgKzE1LDEwIEBACiAjaWZuZGVmIF9MSU5VWF9DU19ICiAjZGVmaW5lIF9MSU5VWF9DU19ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjZW5kaWYKKwogLyogRm9yIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciAqLwogdHlwZWRlZiBzdHJ1Y3QgY29uZl9yZWdfdCB7CiAgICAgdV9jaGFyCUZ1bmN0aW9uOwpAQCAtMTExLDExICsxMTUsOSBAQAogCiAvKiBGb3IgUmVxdWVzdElSUSBhbmQgUmVsZWFzZUlSUSAqLwogdHlwZWRlZiBzdHJ1Y3QgaXJxX3JlcV90IHsKLSAgICB1X2ludAlBdHRyaWJ1dGVzOwotICAgIHVfaW50CUFzc2lnbmVkSVJROwotICAgIHVfaW50CUlSUUluZm8xLCBJUlFJbmZvMjsgLyogSVJRSW5mbzIgaXMgaWdub3JlZCAqLwotICAgIHZvaWQJKkhhbmRsZXI7Ci0gICAgdm9pZAkqSW5zdGFuY2U7CisJdV9pbnQJCUF0dHJpYnV0ZXM7CisJdV9pbnQJCUFzc2lnbmVkSVJROworCWlycV9oYW5kbGVyX3QJSGFuZGxlcjsKIH0gaXJxX3JlcV90OwogCiAvKiBBdHRyaWJ1dGVzIGZvciBSZXF1ZXN0SVJRIGFuZCBSZWxlYXNlSVJRICovCkBAIC0xMjUsNyArMTI3LDcgQEAKICNkZWZpbmUgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HCTB4MDIKICNkZWZpbmUgSVJRX0ZPUkNFRF9QVUxTRQkJMHgwNAogI2RlZmluZSBJUlFfRklSU1RfU0hBUkVECQkweDA4Ci0jZGVmaW5lIElSUV9IQU5ETEVfUFJFU0VOVAkJMHgxMAorLy8jZGVmaW5lIElSUV9IQU5ETEVfUFJFU0VOVAkJMHgxMAogI2RlZmluZSBJUlFfUFVMU0VfQUxMT0NBVEVECQkweDEwMAogCiAvKiBCaXRzIGluIElSUUluZm8xIGZpZWxkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oIGIvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaAppbmRleCAzMTU5NjVhLi5mNWUzYjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKQEAgLTI2LDggKzI2LDcgQEAKIHR5cGVkZWYgdV9jaGFyCWNpc2RhdGFfdDsKIHR5cGVkZWYgdV9zaG9ydAlwYWdlX3Q7CiAKLXN0cnVjdCB3aW5kb3dfdDsKLXR5cGVkZWYgc3RydWN0IHdpbmRvd190ICp3aW5kb3dfaGFuZGxlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgd2luZG93X2hhbmRsZV90OwogCiBzdHJ1Y3QgcmVnaW9uX3Q7CiB0eXBlZGVmIHN0cnVjdCByZWdpb25fdCAqbWVtb3J5X2hhbmRsZV90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZHMuaCBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKaW5kZXggYTJiZTgwYi4uZDQwM2MxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZHMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC0zNCw2ICszNCw3IEBACiBzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKIHN0cnVjdCBwY21jaWFfZGV2aWNlOwogc3RydWN0IGNvbmZpZ190Oworc3RydWN0IG5ldF9kZXZpY2U7CiAKIC8qIGR5bmFtaWMgZGV2aWNlIElEcyBmb3IgUENNQ0lBIGRldmljZSBkcml2ZXJzLiBTZWUKICAqIERvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci50eHQgZm9yIGRldGFpbHMuCkBAIC0xMzcsNjUgKzEzOCwzOSBAQAogI2RlZmluZSB0b19wY21jaWFfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgZGV2KQogI2RlZmluZSB0b19wY21jaWFfZHJ2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNtY2lhX2RyaXZlciwgZHJ2KQogCi0vKiBkZXByZWNhdGVkIC0tIGRvbid0IHVzZSEgKi8KLSNkZWZpbmUgaGFuZGxlX3RvX2RldihoYW5kbGUpIChoYW5kbGUtPmRldikKIAotCi0vKiAoZGVwcmVjYXRlZCkgZXJyb3IgcmVwb3J0aW5nIGJ5IFBDTUNJQSBkZXZpY2VzLiBVc2UgZGV2X3ByaW50aygpCi0gKiBvciBkZXZfZGJnKCkgZGlyZWN0bHkgaW4gdGhlIGRyaXZlciwgd2l0aG91dCByZWZlcnJpbmcgdG8gcGNtY2lhX2Vycm9yX2Z1bmMoKQotICogYW5kL29yIHBjbWNpYV9lcnJvcl9yZXQoKSBmb3IgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ28gYXdheSBzb29uLgorLyoKKyAqIENJUyBhY2Nlc3MuCisgKgorICogUGxlYXNlIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBhY2Nlc3MgQ0lTIHR1cGxlczoKKyAqIC0gcGNtY2lhX2dldF90dXBsZSgpCisgKiAtIHBjbWNpYV9sb29wX3R1cGxlKCkKKyAqIC0gcGNtY2lhX2dldF9tYWNfZnJvbV9jaXMoKQorICoKKyAqIFRvIHBhcnNlIGEgdHVwbGVfdCwgcGNtY2lhX3BhcnNlX3R1cGxlKCkgZXhpc3RzLiBJdHMgaW50ZXJmYWNlCisgKiBtaWdodCBjaGFuZ2UgaW4gZnV0dXJlLgogICovCi1lbnVtIHNlcnZpY2UgewotICAgIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgQWRkU29ja2V0U2VydmljZXMsCi0gICAgQWRqdXN0UmVzb3VyY2VJbmZvLCBDaGVja0VyYXNlUXVldWUsIENsb3NlTWVtb3J5LCBDb3B5TWVtb3J5LAotICAgIERlcmVnaXN0ZXJDbGllbnQsIERlcmVnaXN0ZXJFcmFzZVF1ZXVlLCBHZXRDYXJkU2VydmljZXNJbmZvLAotICAgIEdldENsaWVudEluZm8sIEdldENvbmZpZ3VyYXRpb25JbmZvLCBHZXRFdmVudE1hc2ssCi0gICAgR2V0Rmlyc3RDbGllbnQsIEdldEZpcnN0UGFydGlvbiwgR2V0Rmlyc3RSZWdpb24sIEdldEZpcnN0VHVwbGUsCi0gICAgR2V0TmV4dENsaWVudCwgR2V0TmV4dFBhcnRpdGlvbiwgR2V0TmV4dFJlZ2lvbiwgR2V0TmV4dFR1cGxlLAotICAgIEdldFN0YXR1cywgR2V0VHVwbGVEYXRhLCBNYXBMb2dTb2NrZXQsIE1hcExvZ1dpbmRvdywgTWFwTWVtUGFnZSwKLSAgICBNYXBQaHlTb2NrZXQsIE1hcFBoeVdpbmRvdywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgTW9kaWZ5V2luZG93LAotICAgIE9wZW5NZW1vcnksIFBhcnNlVHVwbGUsIFJlYWRNZW1vcnksIFJlZ2lzdGVyQ2xpZW50LAotICAgIFJlZ2lzdGVyRXJhc2VRdWV1ZSwgUmVnaXN0ZXJNVEQsIFJlZ2lzdGVyVGltZXIsCi0gICAgUmVsZWFzZUNvbmZpZ3VyYXRpb24sIFJlbGVhc2VFeGNsdXNpdmUsIFJlbGVhc2VJTywgUmVsZWFzZUlSUSwKLSAgICBSZWxlYXNlU29ja2V0TWFzaywgUmVsZWFzZVdpbmRvdywgUmVwbGFjZVNvY2tldFNlcnZpY2VzLAotICAgIFJlcXVlc3RDb25maWd1cmF0aW9uLCBSZXF1ZXN0RXhjbHVzaXZlLCBSZXF1ZXN0SU8sIFJlcXVlc3RJUlEsCi0gICAgUmVxdWVzdFNvY2tldE1hc2ssIFJlcXVlc3RXaW5kb3csIFJlc2V0Q2FyZCwgUmV0dXJuU1NFbnRyeSwKLSAgICBTZXRFdmVudE1hc2ssIFNldFJlZ2lvbiwgVmFsaWRhdGVDSVMsIFZlbmRvclNwZWNpZmljLAotICAgIFdyaXRlTWVtb3J5LCBCaW5kRGV2aWNlLCBCaW5kTVRELCBSZXBvcnRFcnJvciwKLSAgICBTdXNwZW5kQ2FyZCwgUmVzdW1lQ2FyZCwgRWplY3RDYXJkLCBJbnNlcnRDYXJkLCBSZXBsYWNlQ0lTLAotICAgIEdldEZpcnN0V2luZG93LCBHZXROZXh0V2luZG93LCBHZXRNZW1QYWdlCi19OwotY29uc3QgY2hhciAqcGNtY2lhX2Vycm9yX2Z1bmMoaW50IGZ1bmMpOwotY29uc3QgY2hhciAqcGNtY2lhX2Vycm9yX3JldChpbnQgcmV0KTsKIAotI2RlZmluZSBjc19lcnJvcihwX2RldiwgZnVuYywgcmV0KQkJCVwKLQl7CQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcF9kZXYtPmRldiwJXAotCQkJICAgIiVzIDogJXNcbiIsCQkJXAotCQkJICAgcGNtY2lhX2Vycm9yX2Z1bmMoZnVuYyksCVwKLQkJCSAgIHBjbWNpYV9lcnJvcl9yZXQocmV0KSk7CVwKLQl9CisvKiBnZXQgdGhlIHZlcnkgZmlyc3QgQ0lTIGVudHJ5IG9mIHR5cGUgQGNvZGUuIE5vdGUgdGhhdCBidWYgaXMgcG9pbnRlcgorICogdG8gdTggKmJ1ZjsgYW5kIHRoYXQgeW91IG5lZWQgdG8ga2ZyZWUoYnVmKSBhZnRlcndhcmRzLiAqLworc2l6ZV90IHBjbWNpYV9nZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjaXNkYXRhX3QgY29kZSwKKwkJCXU4ICoqYnVmKTsKIAotLyogQ0lTIGFjY2Vzcy4KLSAqIFVzZSB0aGUgcGNtY2lhXyogdmVyc2lvbnMgaW4gUENNQ0lBIGRyaXZlcnMKLSAqLworLyogbG9vcCBvdmVyIENJUyBlbnRyaWVzICovCitpbnQgcGNtY2lhX2xvb3BfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjaXNkYXRhX3QgY29kZSwKKwkJICAgICAgaW50ICgqbG9vcF90dXBsZSkgKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkJIHR1cGxlX3QgKnR1cGxlLAorCQkJCQkgdm9pZCAqcHJpdl9kYXRhKSwKKwkJICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKKworLyogZ2V0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIENJU1RQTF9GVU5DRSAqLworaW50IHBjbWNpYV9nZXRfbWFjX2Zyb21fY2lzKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworCisvKiBwYXJzZSBhIHR1cGxlX3QgKi8KIGludCBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKTsKIAotaW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCSAgIHR1cGxlX3QgKnR1cGxlKTsKLSNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShwX2RldiwgdHVwbGUpIFwKLQkJcGNjYXJkX2dldF9maXJzdF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCi0KLWludCBwY2NhcmRfZ2V0X25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKLQkJCSAgdHVwbGVfdCAqdHVwbGUpOwotI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUocF9kZXYsIHR1cGxlKSBcCi0JCXBjY2FyZF9nZXRfbmV4dF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCi0KLWludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKLSNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkgXAotCQlwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocF9kZXYtPnNvY2tldCwgdHVwbGUpCi0KLQogLyogbG9vcCBDSVMgZW50cmllcyBmb3IgdmFsaWQgY29uZmlndXJhdGlvbiAqLwogaW50IHBjbWNpYV9sb29wX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCSAgICAgICBpbnQJKCpjb25mX2NoZWNrKQkoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LApAQCAtMjIxLDEyICsxOTYsMTEgQEAKIGludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKIAkJCQkgY29uZmlnX3JlcV90ICpyZXEpOwogCi1pbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICoqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLAoraW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLAogCQkJICB3aW5kb3dfaGFuZGxlX3QgKndoKTsKLWludCBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luZG93X2hhbmRsZV90IHdpbik7Ci0KLWludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwotaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdpbik7CitpbnQgcGNtY2lhX21hcF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbmRvd19oYW5kbGVfdCB3aW4sCisJCQltZW1yZXFfdCAqcmVxKTsKIAogaW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIG1vZGNvbmZfdCAqbW9kKTsKIHZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCBkNjk2YTY5Li43YzIzYmU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTEwNywxNSArMTA3LDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CiB9IGlvX3dpbmRvd190OwogCi0jZGVmaW5lIFdJTkRPV19NQUdJQwkweEIzNUMKLXR5cGVkZWYgc3RydWN0IHdpbmRvd190IHsKLQl1X3Nob3J0CQkJbWFnaWM7Ci0JdV9zaG9ydAkJCWluZGV4OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpoYW5kbGU7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgCSpzb2NrOwotCXBjY2FyZF9tZW1fbWFwCQljdGw7Ci19IHdpbmRvd190OwotCiAvKiBNYXhpbXVtIG51bWJlciBvZiBJTyB3aW5kb3dzIHBlciBzb2NrZXQgKi8KICNkZWZpbmUgTUFYX0lPX1dJTiAyCiAKQEAgLTE1NSw3ICsxNDYsNyBAQAogCQl1X2ludAkJCUNvbmZpZzsKIAl9IGlycTsKIAlpb193aW5kb3dfdAkJCWlvW01BWF9JT19XSU5dOwotCXdpbmRvd190CQkJd2luW01BWF9XSU5dOworCXBjY2FyZF9tZW1fbWFwCQkJd2luW01BWF9XSU5dOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNpc19jYWNoZTsKIAlzaXplX3QJCQkJZmFrZV9jaXNfbGVuOwogCXU4CQkJCSpmYWtlX2NpczsKQEAgLTE3Miw3ICsxNjMsNyBAQAogCXVfaW50CQkJCWlycV9tYXNrOwogCXVfaW50CQkJCW1hcF9zaXplOwogCXVfaW50CQkJCWlvX29mZnNldDsKLQl1X2NoYXIJCQkJcGNpX2lycTsKKwl1X2ludAkJCQlwY2lfaXJxOwogCXN0cnVjdCBwY2lfZGV2ICoJCWNiX2RldjsKIAogCkBAIC0yNjIsNiArMjUzLDggQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KIAl2b2lkCQkJCSpkcml2ZXJfZGF0YTsKKwkvKiBzdGF0dXMgb2YgdGhlIGNhcmQgZHVyaW5nIHJlc3VtZSBmcm9tIGEgc3lzdGVtIHNsZWVwIHN0YXRlICovCisJaW50CQkJCXJlc3VtZV9zdGF0dXM7CiB9OwogCiAKQEAgLTI4MCw2ICsyNzMsOCBAQAogCiAvKiBzb2NrZXQgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIGNhbGxiYWNrcyBpbiB0aGVpciAuZHJ2IHN0cnVjdCAqLwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9lYXJseV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKiBzb2NrZXQgZHJpdmVycyB1c2UgdGhpcyBjYWxsYmFjayBpbiB0aGVpciBJUlEgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCA5YWY0OGNiLi5mMDk3YWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTQ1LDYgKzE0NSw3IEBACiAJdW5zaWduZWQgcmV0cnlfaHdlcnJvcjoxOwkvKiBSZXRyeSBIQVJEV0FSRV9FUlJPUiAqLwogCXVuc2lnbmVkIGxhc3Rfc2VjdG9yX2J1ZzoxOwkvKiBkbyBub3QgdXNlIG11bHRpc2VjdG9yIGFjY2Vzc2VzIG9uCiAJCQkJCSAgIFNEX0xBU1RfQlVHR1lfU0VDVE9SUyAqLworCXVuc2lnbmVkIGlzX3Zpc2libGU6MTsJLyogaXMgdGhlIGRldmljZSB2aXNpYmxlIGluIHN5c2ZzICovCiAKIAlERUNMQVJFX0JJVE1BUChzdXBwb3J0ZWRfZXZlbnRzLCBTREVWX0VWVF9NQVhCSVRTKTsgLyogc3VwcG9ydGVkIGV2ZW50cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsJLyogYXNzZXJ0ZWQgZXZlbnRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggNmU3MjhiMS4uNDc5NDFmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNzk3LDMwICs3OTcsMjMgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0X3R5cGUpCiB7Ci0Jc3dpdGNoICh0YXJnZXRfdHlwZSkgewotCWNhc2UgMToKLQkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OKQotCQkJcmV0dXJuIHRhcmdldF90eXBlOwotCWNhc2UgMjoKLQkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OKQotCQkJcmV0dXJuIHRhcmdldF90eXBlOwotCWNhc2UgMzoKLQkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKQotCQkJcmV0dXJuIHRhcmdldF90eXBlOwotCX0KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYXBbXSA9IHsgMCwKKwkJCQkgICAgICAgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTiB9OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIGNhcFt0YXJnZXRfdHlwZV0gPyB0YXJnZXRfdHlwZSA6IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgaW50IHRhcmdldF90eXBlKQogewogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQotCXN3aXRjaCAodGFyZ2V0X3R5cGUpIHsKLQljYXNlIDA6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTjsKLQljYXNlIDE6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTjsKLQljYXNlIDI6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESVhfVFlQRTJfUFJPVEVDVElPTjsKLQljYXNlIDM6IHJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBTSE9TVF9ESVhfVFlQRTNfUFJPVEVDVElPTjsKLQl9CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FwW10gPSB7IFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElYX1RZUEUyX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OIH07CisKKwlyZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgY2FwW3RhcmdldF90eXBlXTsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZGVmaW5lX3RyYWNlLmgKaW5kZXggMmE0YjNiZi4uNWFjZmIxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oCkBAIC0zMSw2ICszMSwxNCBAQAogCQlhc3NpZ24sIHByaW50LCByZWcsIHVucmVnKQkJCVwKIAlERUZJTkVfVFJBQ0VfRk4obmFtZSwgcmVnLCB1bnJlZykKIAorI3VuZGVmIERFRklORV9FVkVOVAorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKSBcCisJREVGSU5FX1RSQUNFKG5hbWUpCisKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKKwlERUZJTkVfVFJBQ0UobmFtZSkKKwogI3VuZGVmIERFQ0xBUkVfVFJBQ0UKICNkZWZpbmUgREVDTEFSRV9UUkFDRShuYW1lLCBwcm90bywgYXJncykJXAogCURFRklORV9UUkFDRShuYW1lKQpAQCAtNjMsNiArNzEsOSBAQAogCiAjdW5kZWYgVFJBQ0VfRVZFTlQKICN1bmRlZiBUUkFDRV9FVkVOVF9GTgorI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKKyN1bmRlZiBERUZJTkVfRVZFTlQKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICN1bmRlZiBUUkFDRV9IRUFERVJfTVVMVElfUkVBRAogCiAvKiBPbmx5IHVuZGVmIHdoYXQgd2UgZGVmaW5lZCBpbiB0aGlzIGZpbGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2JrbC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmtsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmNzJkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2JrbC5oCkBAIC0wLDAgKzEsNjEgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGJrbAorCisjaWYgIWRlZmluZWQoX1RSQUNFX0JLTF9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfQktMX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworVFJBQ0VfRVZFTlQobG9ja19rZXJuZWwsCisKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSksCisKKwlUUF9BUkdTKGZ1bmMsIGZpbGUsIGxpbmUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJaW50LAkJZGVwdGgJCQkpCisJCV9fZmllbGRfZXh0KAljb25zdCBjaGFyICosCWZ1bmMsIEZJTFRFUl9QVFJfU1RSSU5HCSkKKwkJX19maWVsZF9leHQoCWNvbnN0IGNoYXIgKiwJZmlsZSwgRklMVEVSX1BUUl9TVFJJTkcJKQorCQlfX2ZpZWxkKAlpbnQsCQlsaW5lCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJLyogV2Ugd2FudCB0byByZWNvcmQgdGhlIGxvY2tfZGVwdGggYWZ0ZXIgbG9jayBpcyBhY3F1aXJlZCAqLworCQlfX2VudHJ5LT5kZXB0aCA9IGN1cnJlbnQtPmxvY2tfZGVwdGggKyAxOworCQlfX2VudHJ5LT5mdW5jID0gZnVuYzsKKwkJX19lbnRyeS0+ZmlsZSA9IGZpbGU7CisJCV9fZW50cnktPmxpbmUgPSBsaW5lOworCSksCisKKwlUUF9wcmludGsoImRlcHRoPSVkIGZpbGU6bGluZT0lczolZCBmdW5jPSVzKCkiLCBfX2VudHJ5LT5kZXB0aCwKKwkJICBfX2VudHJ5LT5maWxlLCBfX2VudHJ5LT5saW5lLCBfX2VudHJ5LT5mdW5jKQorKTsKKworVFJBQ0VfRVZFTlQodW5sb2NrX2tlcm5lbCwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSwKKworCVRQX0FSR1MoZnVuYywgZmlsZSwgbGluZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGludCwJCWRlcHRoCQkpCisJCV9fZmllbGQoY29uc3QgY2hhciAqLAlmdW5jCQkpCisJCV9fZmllbGQoY29uc3QgY2hhciAqLAlmaWxlCQkpCisJCV9fZmllbGQoaW50LAkJbGluZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGVwdGggPSBjdXJyZW50LT5sb2NrX2RlcHRoOworCQlfX2VudHJ5LT5mdW5jID0gZnVuYzsKKwkJX19lbnRyeS0+ZmlsZSA9IGZpbGU7CisJCV9fZW50cnktPmxpbmUgPSBsaW5lOworCSksCisKKwlUUF9wcmludGsoImRlcHRoPSVkIGZpbGU6bGluZT0lczolZCBmdW5jPSVzKCkiLCBfX2VudHJ5LT5kZXB0aCwKKwkJICBfX2VudHJ5LT5maWxlLCBfX2VudHJ5LT5saW5lLCBfX2VudHJ5LT5mdW5jKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9CS0xfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCmluZGV4IDAwNDA1YjUuLjVmYjcyNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaApAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKLVRSQUNFX0VWRU5UKGJsb2NrX3JxX2Fib3J0LAorREVDTEFSRV9FVkVOVF9DTEFTUyhibG9ja19ycV93aXRoX2Vycm9yLAogCiAJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCiAKQEAgLTQwLDcgKzQwLDI4IEBACiAJCSAgX19lbnRyeS0+bnJfc2VjdG9yLCBfX2VudHJ5LT5lcnJvcnMpCiApOwogCi1UUkFDRV9FVkVOVChibG9ja19ycV9pbnNlcnQsCitERUZJTkVfRVZFTlQoYmxvY2tfcnFfd2l0aF9lcnJvciwgYmxvY2tfcnFfYWJvcnQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKworCVRQX0FSR1MocSwgcnEpCispOworCitERUZJTkVfRVZFTlQoYmxvY2tfcnFfd2l0aF9lcnJvciwgYmxvY2tfcnFfcmVxdWV1ZSwKKworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCisJVFBfQVJHUyhxLCBycSkKKyk7CisKK0RFRklORV9FVkVOVChibG9ja19ycV93aXRoX2Vycm9yLCBibG9ja19ycV9jb21wbGV0ZSwKKworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCisJVFBfQVJHUyhxLCBycSkKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoYmxvY2tfcnEsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKIApAQCAtNzQsMTAyICs5NSwxOCBAQAogCQkgIF9fZW50cnktPm5yX3NlY3RvciwgX19lbnRyeS0+Y29tbSkKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX3JxX2lzc3VlLAorREVGSU5FX0VWRU5UKGJsb2NrX3JxLCBibG9ja19ycV9pbnNlcnQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKIAotCVRQX0FSR1MocSwgcnEpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggIGRldl90LAlkZXYJCQkpCi0JCV9fZmllbGQoICBzZWN0b3JfdCwJc2VjdG9yCQkJKQotCQlfX2ZpZWxkKCAgdW5zaWduZWQgaW50LAlucl9zZWN0b3IJCSkKLQkJX19maWVsZCggIHVuc2lnbmVkIGludCwJYnl0ZXMJCQkpCi0JCV9fYXJyYXkoICBjaGFyLAkJcndicywJNgkJKQotCQlfX2FycmF5KCAgY2hhciwJCWNvbW0sICAgVEFTS19DT01NX0xFTiAgICkKLQkJX19keW5hbWljX2FycmF5KCBjaGFyLAljbWQsCWJsa19jbWRfYnVmX2xlbihycSkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CSAgID0gcnEtPnJxX2Rpc2sgPyBkaXNrX2RldnQocnEtPnJxX2Rpc2spIDogMDsKLQkJX19lbnRyeS0+c2VjdG9yICAgID0gYmxrX3BjX3JlcXVlc3QocnEpID8gMCA6IGJsa19ycV9wb3MocnEpOwotCQlfX2VudHJ5LT5ucl9zZWN0b3IgPSBibGtfcGNfcmVxdWVzdChycSkgPyAwIDogYmxrX3JxX3NlY3RvcnMocnEpOwotCQlfX2VudHJ5LT5ieXRlcyAgICAgPSBibGtfcGNfcmVxdWVzdChycSkgPyBibGtfcnFfYnl0ZXMocnEpIDogMDsKLQotCQlibGtfZmlsbF9yd2JzX3JxKF9fZW50cnktPnJ3YnMsIHJxKTsKLQkJYmxrX2R1bXBfY21kKF9fZ2V0X3N0cihjbWQpLCBycSk7Ci0JCW1lbWNweShfX2VudHJ5LT5jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkpLAotCi0JVFBfcHJpbnRrKCIlZCwlZCAlcyAldSAoJXMpICVsbHUgKyAldSBbJXNdIiwKLQkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAotCQkgIF9fZW50cnktPnJ3YnMsIF9fZW50cnktPmJ5dGVzLCBfX2dldF9zdHIoY21kKSwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnNlY3RvciwKLQkJICBfX2VudHJ5LT5ucl9zZWN0b3IsIF9fZW50cnktPmNvbW0pCisJVFBfQVJHUyhxLCBycSkKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX3JxX3JlcXVldWUsCitERUZJTkVfRVZFTlQoYmxvY2tfcnEsIGJsb2NrX3JxX2lzc3VlLAogCiAJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCiAKLQlUUF9BUkdTKHEsIHJxKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoICBkZXZfdCwJZGV2CQkJKQotCQlfX2ZpZWxkKCAgc2VjdG9yX3QsCXNlY3RvcgkJCSkKLQkJX19maWVsZCggIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCQkpCi0JCV9fZmllbGQoICBpbnQsCQllcnJvcnMJCQkpCi0JCV9fYXJyYXkoICBjaGFyLAkJcndicywJNgkJKQotCQlfX2R5bmFtaWNfYXJyYXkoIGNoYXIsCWNtZCwJYmxrX2NtZF9idWZfbGVuKHJxKQkpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5kZXYJICAgPSBycS0+cnFfZGlzayA/IGRpc2tfZGV2dChycS0+cnFfZGlzaykgOiAwOwotCQlfX2VudHJ5LT5zZWN0b3IgICAgPSBibGtfcGNfcmVxdWVzdChycSkgPyAwIDogYmxrX3JxX3BvcyhycSk7Ci0JCV9fZW50cnktPm5yX3NlY3RvciA9IGJsa19wY19yZXF1ZXN0KHJxKSA/IDAgOiBibGtfcnFfc2VjdG9ycyhycSk7Ci0JCV9fZW50cnktPmVycm9ycwkgICA9IHJxLT5lcnJvcnM7Ci0KLQkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7Ci0JCWJsa19kdW1wX2NtZChfX2dldF9zdHIoY21kKSwgcnEpOwotCSksCi0KLQlUUF9wcmludGsoIiVkLCVkICVzICglcykgJWxsdSArICV1IFslZF0iLAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCi0JCSAgX19lbnRyeS0+cndicywgX19nZXRfc3RyKGNtZCksCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5zZWN0b3IsCi0JCSAgX19lbnRyeS0+bnJfc2VjdG9yLCBfX2VudHJ5LT5lcnJvcnMpCi0pOwotCi1UUkFDRV9FVkVOVChibG9ja19ycV9jb21wbGV0ZSwKLQotCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCi0JVFBfQVJHUyhxLCBycSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKCAgZGV2X3QsCWRldgkJCSkKLQkJX19maWVsZCggIHNlY3Rvcl90LAlzZWN0b3IJCQkpCi0JCV9fZmllbGQoICB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkJKQotCQlfX2ZpZWxkKCAgaW50LAkJZXJyb3JzCQkJKQotCQlfX2FycmF5KCAgY2hhciwJCXJ3YnMsCTYJCSkKLQkJX19keW5hbWljX2FycmF5KCBjaGFyLAljbWQsCWJsa19jbWRfYnVmX2xlbihycSkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CSAgID0gcnEtPnJxX2Rpc2sgPyBkaXNrX2RldnQocnEtPnJxX2Rpc2spIDogMDsKLQkJX19lbnRyeS0+c2VjdG9yICAgID0gYmxrX3BjX3JlcXVlc3QocnEpID8gMCA6IGJsa19ycV9wb3MocnEpOwotCQlfX2VudHJ5LT5ucl9zZWN0b3IgPSBibGtfcGNfcmVxdWVzdChycSkgPyAwIDogYmxrX3JxX3NlY3RvcnMocnEpOwotCQlfX2VudHJ5LT5lcnJvcnMgICAgPSBycS0+ZXJyb3JzOwotCi0JCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOwotCQlibGtfZHVtcF9jbWQoX19nZXRfc3RyKGNtZCksIHJxKTsKLQkpLAotCi0JVFBfcHJpbnRrKCIlZCwlZCAlcyAoJXMpICVsbHUgKyAldSBbJWRdIiwKLQkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAotCQkgIF9fZW50cnktPnJ3YnMsIF9fZ2V0X3N0cihjbWQpLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+c2VjdG9yLAotCQkgIF9fZW50cnktPm5yX3NlY3RvciwgX19lbnRyeS0+ZXJyb3JzKQorCVRQX0FSR1MocSwgcnEpCiApOwogCiBUUkFDRV9FVkVOVChibG9ja19iaW9fYm91bmNlLApAQCAtMjI4LDcgKzE2NSw3IEBACiAJCSAgX19lbnRyeS0+bnJfc2VjdG9yLCBfX2VudHJ5LT5lcnJvcikKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX2Jpb19iYWNrbWVyZ2UsCitERUNMQVJFX0VWRU5UX0NMQVNTKGJsb2NrX2JpbywKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAogCkBAIC0yNTYsNjMgKzE5MywyOCBAQAogCQkgIF9fZW50cnktPm5yX3NlY3RvciwgX19lbnRyeS0+Y29tbSkKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX2Jpb19mcm9udG1lcmdlLAorREVGSU5FX0VWRU5UKGJsb2NrX2JpbywgYmxvY2tfYmlvX2JhY2ttZXJnZSwKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAogCi0JVFBfQVJHUyhxLCBiaW8pLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggZGV2X3QsCQlkZXYJCQkpCi0JCV9fZmllbGQoIHNlY3Rvcl90LAlzZWN0b3IJCQkpCi0JCV9fZmllbGQoIHVuc2lnbmVkLAlucl9zZWN0b3IJCSkKLQkJX19hcnJheSggY2hhciwJCXJ3YnMsCTYJCSkKLQkJX19hcnJheSggY2hhciwJCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CQk9IGJpby0+YmlfYmRldi0+YmRfZGV2OwotCQlfX2VudHJ5LT5zZWN0b3IJCT0gYmlvLT5iaV9zZWN0b3I7Ci0JCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJpby0+Ymlfc2l6ZSA+PiA5OwotCQlibGtfZmlsbF9yd2JzKF9fZW50cnktPnJ3YnMsIGJpby0+YmlfcncsIGJpby0+Ymlfc2l6ZSk7Ci0JCW1lbWNweShfX2VudHJ5LT5jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkpLAotCi0JVFBfcHJpbnRrKCIlZCwlZCAlcyAlbGx1ICsgJXUgWyVzXSIsCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+cndicywKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnNlY3RvciwKLQkJICBfX2VudHJ5LT5ucl9zZWN0b3IsIF9fZW50cnktPmNvbW0pCisJVFBfQVJHUyhxLCBiaW8pCiApOwogCi1UUkFDRV9FVkVOVChibG9ja19iaW9fcXVldWUsCitERUZJTkVfRVZFTlQoYmxvY2tfYmlvLCBibG9ja19iaW9fZnJvbnRtZXJnZSwKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAogCi0JVFBfQVJHUyhxLCBiaW8pLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggZGV2X3QsCQlkZXYJCQkpCi0JCV9fZmllbGQoIHNlY3Rvcl90LAlzZWN0b3IJCQkpCi0JCV9fZmllbGQoIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCQkpCi0JCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CQkpCi0JCV9fYXJyYXkoIGNoYXIsCQljb21tLAlUQVNLX0NPTU1fTEVOCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgkJPSBiaW8tPmJpX2JkZXYtPmJkX2RldjsKLQkJX19lbnRyeS0+c2VjdG9yCQk9IGJpby0+Ymlfc2VjdG9yOwotCQlfX2VudHJ5LT5ucl9zZWN0b3IJPSBiaW8tPmJpX3NpemUgPj4gOTsKLQkJYmxrX2ZpbGxfcndicyhfX2VudHJ5LT5yd2JzLCBiaW8tPmJpX3J3LCBiaW8tPmJpX3NpemUpOwotCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JKSwKLQotCVRQX3ByaW50aygiJWQsJWQgJXMgJWxsdSArICV1IFslc10iLAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPnJ3YnMsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5zZWN0b3IsCi0JCSAgX19lbnRyeS0+bnJfc2VjdG9yLCBfX2VudHJ5LT5jb21tKQorCVRQX0FSR1MocSwgYmlvKQogKTsKIAotVFJBQ0VfRVZFTlQoYmxvY2tfZ2V0cnEsCitERUZJTkVfRVZFTlQoYmxvY2tfYmlvLCBibG9ja19iaW9fcXVldWUsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKworCVRQX0FSR1MocSwgYmlvKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhibG9ja19nZXRfcnEsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAogCkBAIC0zNDEsMzMgKzI0MywxOCBAQAogCQkgIF9fZW50cnktPm5yX3NlY3RvciwgX19lbnRyeS0+Y29tbSkKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX3NsZWVwcnEsCitERUZJTkVfRVZFTlQoYmxvY2tfZ2V0X3JxLCBibG9ja19nZXRycSwKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydyksCiAKLQlUUF9BUkdTKHEsIGJpbywgcncpLAorCVRQX0FSR1MocSwgYmlvLCBydykKKyk7CiAKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKCBkZXZfdCwJCWRldgkJCSkKLQkJX19maWVsZCggc2VjdG9yX3QsCXNlY3RvcgkJCSkKLQkJX19maWVsZCggdW5zaWduZWQgaW50LAlucl9zZWN0b3IJCSkKLQkJX19hcnJheSggY2hhciwJCXJ3YnMsCTYJCSkKLQkJX19hcnJheSggY2hhciwJCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQotCSksCitERUZJTkVfRVZFTlQoYmxvY2tfZ2V0X3JxLCBibG9ja19zbGVlcHJxLAogCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgkJPSBiaW8gPyBiaW8tPmJpX2JkZXYtPmJkX2RldiA6IDA7Ci0JCV9fZW50cnktPnNlY3RvcgkJPSBiaW8gPyBiaW8tPmJpX3NlY3RvciA6IDA7Ci0JCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJpbyA/IGJpby0+Ymlfc2l6ZSA+PiA5IDogMDsKLQkJYmxrX2ZpbGxfcndicyhfX2VudHJ5LT5yd2JzLAotCQkJICAgIGJpbyA/IGJpby0+YmlfcncgOiAwLCBfX2VudHJ5LT5ucl9zZWN0b3IpOwotCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAogCi0JVFBfcHJpbnRrKCIlZCwlZCAlcyAlbGx1ICsgJXUgWyVzXSIsCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+cndicywKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnNlY3RvciwKLQkJICBfX2VudHJ5LT5ucl9zZWN0b3IsIF9fZW50cnktPmNvbW0pCisJVFBfQVJHUyhxLCBiaW8sIHJ3KQogKTsKIAogVFJBQ0VfRVZFTlQoYmxvY2tfcGx1ZywKQEAgLTM4Nyw3ICsyNzQsNyBAQAogCVRQX3ByaW50aygiWyVzXSIsIF9fZW50cnktPmNvbW0pCiApOwogCi1UUkFDRV9FVkVOVChibG9ja191bnBsdWdfdGltZXIsCitERUNMQVJFX0VWRU5UX0NMQVNTKGJsb2NrX3VucGx1ZywKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKIApAQCAtNDA2LDIzICsyOTMsMTggQEAKIAlUUF9wcmludGsoIlslc10gJWQiLCBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5ucl9ycSkKICk7CiAKLVRSQUNFX0VWRU5UKGJsb2NrX3VucGx1Z19pbywKK0RFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1Z190aW1lciwKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKIAotCVRQX0FSR1MocSksCisJVFBfQVJHUyhxKQorKTsKIAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoIGludCwJCW5yX3JxCQkJKQotCQlfX2FycmF5KCBjaGFyLAkJY29tbSwJVEFTS19DT01NX0xFTgkpCi0JKSwKK0RFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1Z19pbywKIAotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5ucl9ycQk9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCiAKLQlUUF9wcmludGsoIlslc10gJWQiLCBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5ucl9ycSkKKwlUUF9BUkdTKHEpCiApOwogCiBUUkFDRV9FVkVOVChibG9ja19zcGxpdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAppbmRleCBkMDk1NTBiLi4zMThmNzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCkBAIC05MCw3ICs5MCw3IEBACiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmRpciwgX19lbnRyeS0+bW9kZSkKICk7CiAKLVRSQUNFX0VWRU5UKGV4dDRfd3JpdGVfYmVnaW4sCitERUNMQVJFX0VWRU5UX0NMQVNTKGV4dDRfX3dyaXRlX2JlZ2luLAogCiAJVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbiwKIAkJIHVuc2lnbmVkIGludCBmbGFncyksCkBAIC0xMTgsNyArMTE4LDIzIEBACiAJCSAgX19lbnRyeS0+cG9zLCBfX2VudHJ5LT5sZW4sIF9fZW50cnktPmZsYWdzKQogKTsKIAotVFJBQ0VfRVZFTlQoZXh0NF9vcmRlcmVkX3dyaXRlX2VuZCwKK0RFRklORV9FVkVOVChleHQ0X193cml0ZV9iZWdpbiwgZXh0NF93cml0ZV9iZWdpbiwKKworCVRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4sCisJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpLAorCisJVFBfQVJHUyhpbm9kZSwgcG9zLCBsZW4sIGZsYWdzKQorKTsKKworREVGSU5FX0VWRU5UKGV4dDRfX3dyaXRlX2JlZ2luLCBleHQ0X2RhX3dyaXRlX2JlZ2luLAorCisJVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbiwKKwkJIHVuc2lnbmVkIGludCBmbGFncyksCisKKwlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgZmxhZ3MpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGV4dDRfX3dyaXRlX2VuZCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJdW5zaWduZWQgaW50IGNvcGllZCksCiAKQEAgLTE0NSw1NyArMTYxLDM2IEBACiAJCSAgX19lbnRyeS0+cG9zLCBfX2VudHJ5LT5sZW4sIF9fZW50cnktPmNvcGllZCkKICk7CiAKLVRSQUNFX0VWRU5UKGV4dDRfd3JpdGViYWNrX3dyaXRlX2VuZCwKK0RFRklORV9FVkVOVChleHQ0X193cml0ZV9lbmQsIGV4dDRfb3JkZXJlZF93cml0ZV9lbmQsCisKIAlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkgdW5zaWduZWQgaW50IGNvcGllZCksCiAKLQlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCi0JCV9fZmllbGQoCWlub190LAlpbm8JCQkpCi0JCV9fZmllbGQoCWxvZmZfdCwJcG9zCQkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIGxlbgkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIGNvcGllZAkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CT0gaW5vZGUtPmlfc2ItPnNfZGV2OwotCQlfX2VudHJ5LT5pbm8JPSBpbm9kZS0+aV9pbm87Ci0JCV9fZW50cnktPnBvcwk9IHBvczsKLQkJX19lbnRyeS0+bGVuCT0gbGVuOwotCQlfX2VudHJ5LT5jb3BpZWQJPSBjb3BpZWQ7Ci0JKSwKLQotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgcG9zICVsbHUgbGVuICV1IGNvcGllZCAldSIsCi0JCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAotCQkgIF9fZW50cnktPnBvcywgX19lbnRyeS0+bGVuLCBfX2VudHJ5LT5jb3BpZWQpCisJVFBfQVJHUyhpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCkKICk7CiAKLVRSQUNFX0VWRU5UKGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQsCitERUZJTkVfRVZFTlQoZXh0NF9fd3JpdGVfZW5kLCBleHQ0X3dyaXRlYmFja193cml0ZV9lbmQsCisKIAlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkgdW5zaWduZWQgaW50IGNvcGllZCksCi0JVFBfQVJHUyhpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCksCiAKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQotCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQotCQlfX2ZpZWxkKAlsb2ZmX3QsCXBvcwkJCSkKLQkJX19maWVsZCgJdW5zaWduZWQgaW50LCBsZW4JCSkKLQkJX19maWVsZCgJdW5zaWduZWQgaW50LCBjb3BpZWQJCSkKLQkpLAorCVRQX0FSR1MoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpCispOwogCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgk9IGlub2RlLT5pX3NiLT5zX2RldjsKLQkJX19lbnRyeS0+aW5vCT0gaW5vZGUtPmlfaW5vOwotCQlfX2VudHJ5LT5wb3MJPSBwb3M7Ci0JCV9fZW50cnktPmxlbgk9IGxlbjsKLQkJX19lbnRyeS0+Y29waWVkCT0gY29waWVkOwotCSksCitERUZJTkVfRVZFTlQoZXh0NF9fd3JpdGVfZW5kLCBleHQ0X2pvdXJuYWxsZWRfd3JpdGVfZW5kLAogCi0JVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBwb3MgJWxsdSBsZW4gJXUgY29waWVkICV1IiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCi0JCSAgX19lbnRyeS0+cG9zLCBfX2VudHJ5LT5sZW4sIF9fZW50cnktPmNvcGllZCkKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgdW5zaWduZWQgaW50IGNvcGllZCksCisKKwlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKQorKTsKKworREVGSU5FX0VWRU5UKGV4dDRfX3dyaXRlX2VuZCwgZXh0NF9kYV93cml0ZV9lbmQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgdW5zaWduZWQgaW50IGNvcGllZCksCisKKwlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKQogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF93cml0ZXBhZ2UsCkBAIC0zMzcsNjAgKzMzMiw2IEBACiAJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKLVRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfYmVnaW4sCi0JVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbiwKLQkJCXVuc2lnbmVkIGludCBmbGFncyksCi0KLQlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgZmxhZ3MpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKLQkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKLQkJX19maWVsZCgJbG9mZl90LAlwb3MJCQkpCi0JCV9fZmllbGQoCXVuc2lnbmVkIGludCwgbGVuCQkpCi0JCV9fZmllbGQoCXVuc2lnbmVkIGludCwgZmxhZ3MJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgk9IGlub2RlLT5pX3NiLT5zX2RldjsKLQkJX19lbnRyeS0+aW5vCT0gaW5vZGUtPmlfaW5vOwotCQlfX2VudHJ5LT5wb3MJPSBwb3M7Ci0JCV9fZW50cnktPmxlbgk9IGxlbjsKLQkJX19lbnRyeS0+ZmxhZ3MJPSBmbGFnczsKLQkpLAotCi0JVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBwb3MgJWxsdSBsZW4gJXUgZmxhZ3MgJXUiLAotCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKLQkJICBfX2VudHJ5LT5wb3MsIF9fZW50cnktPmxlbiwgX19lbnRyeS0+ZmxhZ3MpCi0pOwotCi1UUkFDRV9FVkVOVChleHQ0X2RhX3dyaXRlX2VuZCwKLQlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJdW5zaWduZWQgaW50IGNvcGllZCksCi0KLQlUUF9BUkdTKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCi0JCV9fZmllbGQoCWlub190LAlpbm8JCQkpCi0JCV9fZmllbGQoCWxvZmZfdCwJcG9zCQkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIGxlbgkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIGNvcGllZAkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CT0gaW5vZGUtPmlfc2ItPnNfZGV2OwotCQlfX2VudHJ5LT5pbm8JPSBpbm9kZS0+aV9pbm87Ci0JCV9fZW50cnktPnBvcwk9IHBvczsKLQkJX19lbnRyeS0+bGVuCT0gbGVuOwotCQlfX2VudHJ5LT5jb3BpZWQJPSBjb3BpZWQ7Ci0JKSwKLQotCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgcG9zICVsbHUgbGVuICV1IGNvcGllZCAldSIsCi0JCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAotCQkgIF9fZW50cnktPnBvcywgX19lbnRyeS0+bGVuLCBfX2VudHJ5LT5jb3BpZWQpCi0pOwotCiBUUkFDRV9FVkVOVChleHQ0X2Rpc2NhcmRfYmxvY2tzLAogCVRQX1BST1RPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbG9uZyBibGssCiAJCQl1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pcnEuaAppbmRleCBiODlmOWRiLi4wZTRjZmI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pcnEuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9pcnEuaApAQCAtNDgsNyArNDgsNyBAQAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgYWN0aW9uLT5uYW1lKTsKIAkpLAogCi0JVFBfcHJpbnRrKCJpcnE9JWQgaGFuZGxlcj0lcyIsIF9fZW50cnktPmlycSwgX19nZXRfc3RyKG5hbWUpKQorCVRQX3ByaW50aygiaXJxPSVkIG5hbWU9JXMiLCBfX2VudHJ5LT5pcnEsIF9fZ2V0X3N0cihuYW1lKSkKICk7CiAKIC8qKgpAQCAtNzgsMTAgKzc4LDI4IEBACiAJCV9fZW50cnktPnJldAk9IHJldDsKIAkpLAogCi0JVFBfcHJpbnRrKCJpcnE9JWQgcmV0dXJuPSVzIiwKKwlUUF9wcmludGsoImlycT0lZCByZXQ9JXMiLAogCQkgIF9fZW50cnktPmlycSwgX19lbnRyeS0+cmV0ID8gImhhbmRsZWQiIDogInVuaGFuZGxlZCIpCiApOwogCitERUNMQVJFX0VWRU5UX0NMQVNTKHNvZnRpcnEsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgsIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdmVjKSwKKworCVRQX0FSR1MoaCwgdmVjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJdmVjCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dmVjID0gKGludCkoaCAtIHZlYyk7CisJKSwKKworCVRQX3ByaW50aygidmVjPSVkIFthY3Rpb249JXNdIiwgX19lbnRyeS0+dmVjLAorCQkgIHNob3dfc29mdGlycV9uYW1lKF9fZW50cnktPnZlYykpCispOworCiAvKioKICAqIHNvZnRpcnFfZW50cnkgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBzb2Z0aXJxIGhhbmRsZXIKICAqIEBoOiBwb2ludGVyIHRvIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbgpAQCAtOTMsMjIgKzExMSwxMSBAQAogICogbnVtYmVyLiBBbHNvLCB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgc29mdGlycV9leGl0IHRyYWNlcG9pbnQKICAqIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHNvZnRpcnEgbGF0ZW5jeS4KICAqLwotVFJBQ0VfRVZFTlQoc29mdGlycV9lbnRyeSwKK0RFRklORV9FVkVOVChzb2Z0aXJxLCBzb2Z0aXJxX2VudHJ5LAogCiAJVFBfUFJPVE8oc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoLCBzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnZlYyksCiAKLQlUUF9BUkdTKGgsIHZlYyksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAlpbnQsCXZlYwkJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPnZlYyA9IChpbnQpKGggLSB2ZWMpOwotCSksCi0KLQlUUF9wcmludGsoInNvZnRpcnE9JWQgYWN0aW9uPSVzIiwgX19lbnRyeS0+dmVjLAotCQkgIHNob3dfc29mdGlycV9uYW1lKF9fZW50cnktPnZlYykpCisJVFBfQVJHUyhoLCB2ZWMpCiApOwogCiAvKioKQEAgLTEyMiwyMiArMTI5LDExIEBACiAgKiBjb21iaW5hdGlvbiB3aXRoIHRoZSBzb2Z0aXJxX2VudHJ5IHRyYWNlcG9pbnQgd2UgY2FuIGRldGVybWluZSB0aGUgc29mdGlycQogICogbGF0ZW5jeS4KICAqLwotVFJBQ0VfRVZFTlQoc29mdGlycV9leGl0LAorREVGSU5FX0VWRU5UKHNvZnRpcnEsIHNvZnRpcnFfZXhpdCwKIAogCVRQX1BST1RPKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCwgc3RydWN0IHNvZnRpcnFfYWN0aW9uICp2ZWMpLAogCi0JVFBfQVJHUyhoLCB2ZWMpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJaW50LAl2ZWMJCQkpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT52ZWMgPSAoaW50KShoIC0gdmVjKTsKLQkpLAotCi0JVFBfcHJpbnRrKCJzb2Z0aXJxPSVkIGFjdGlvbj0lcyIsIF9fZW50cnktPnZlYywKLQkJICBzaG93X3NvZnRpcnFfbmFtZShfX2VudHJ5LT52ZWMpKQorCVRQX0FSR1MoaCwgdmVjKQogKTsKIAogI2VuZGlmIC8qICBfVFJBQ0VfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCAzYzYwYjc1Li45NmIzNzBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC0zMCw3ICszMCw3IEBACiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT5yZXN1bHQpCiApOwogCi1UUkFDRV9FVkVOVChqYmQyX3N0YXJ0X2NvbW1pdCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoamJkMl9jb21taXQsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiksCiAKQEAgLTUzLDczICs1MywzMiBAQAogCQkgIF9fZW50cnktPnN5bmNfY29tbWl0KQogKTsKIAotVFJBQ0VfRVZFTlQoamJkMl9jb21taXRfbG9ja2luZywKK0RFRklORV9FVkVOVChqYmQyX2NvbW1pdCwgamJkMl9zdGFydF9jb21taXQsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiksCiAKLQlUUF9BUkdTKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQotCQlfX2ZpZWxkKAljaGFyLAlzeW5jX2NvbW1pdAkJICApCi0JCV9fZmllbGQoCWludCwJdHJhbnNhY3Rpb24JCSAgKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CQk9IGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXY7Ci0JCV9fZW50cnktPnN5bmNfY29tbWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdDsKLQkJX19lbnRyeS0+dHJhbnNhY3Rpb24JPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCSksCi0KLQlUUF9wcmludGsoImRldiAlcyB0cmFuc2FjdGlvbiAlZCBzeW5jICVkIiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRyYW5zYWN0aW9uLAotCQkgIF9fZW50cnktPnN5bmNfY29tbWl0KQorCVRQX0FSR1Moam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKQogKTsKIAotVFJBQ0VfRVZFTlQoamJkMl9jb21taXRfZmx1c2hpbmcsCitERUZJTkVfRVZFTlQoamJkMl9jb21taXQsIGpiZDJfY29tbWl0X2xvY2tpbmcsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiksCiAKLQlUUF9BUkdTKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQotCQlfX2ZpZWxkKAljaGFyLAlzeW5jX2NvbW1pdAkJICApCi0JCV9fZmllbGQoCWludCwJdHJhbnNhY3Rpb24JCSAgKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ZGV2CQk9IGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXY7Ci0JCV9fZW50cnktPnN5bmNfY29tbWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdDsKLQkJX19lbnRyeS0+dHJhbnNhY3Rpb24JPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCSksCi0KLQlUUF9wcmludGsoImRldiAlcyB0cmFuc2FjdGlvbiAlZCBzeW5jICVkIiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRyYW5zYWN0aW9uLAotCQkgIF9fZW50cnktPnN5bmNfY29tbWl0KQorCVRQX0FSR1Moam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKQogKTsKIAotVFJBQ0VfRVZFTlQoamJkMl9jb21taXRfbG9nZ2luZywKK0RFRklORV9FVkVOVChqYmQyX2NvbW1pdCwgamJkMl9jb21taXRfZmx1c2hpbmcsCiAKIAlUUF9QUk9UTyhqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiksCiAKLQlUUF9BUkdTKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiksCisJVFBfQVJHUyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pCispOwogCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKLQkJX19maWVsZCgJY2hhciwJc3luY19jb21taXQJCSAgKQotCQlfX2ZpZWxkKAlpbnQsCXRyYW5zYWN0aW9uCQkgICkKLQkpLAorREVGSU5FX0VWRU5UKGpiZDJfY29tbWl0LCBqYmQyX2NvbW1pdF9sb2dnaW5nLAogCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgkJPSBqb3VybmFsLT5qX2ZzX2Rldi0+YmRfZGV2OwotCQlfX2VudHJ5LT5zeW5jX2NvbW1pdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zeW5jaHJvbm91c19jb21taXQ7Ci0JCV9fZW50cnktPnRyYW5zYWN0aW9uCT0gY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZDsKLQkpLAorCVRQX1BST1RPKGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqY29tbWl0X3RyYW5zYWN0aW9uKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIHRyYW5zYWN0aW9uICVkIHN5bmMgJWQiLAotCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dHJhbnNhY3Rpb24sCi0JCSAgX19lbnRyeS0+c3luY19jb21taXQpCisJVFBfQVJHUyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pCiApOwogCiBUUkFDRV9FVkVOVChqYmQyX2VuZF9jb21taXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmgKaW5kZXggZWFmNDZiZC4uM2FkY2EwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva21lbS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ttZW0uaApAQCAtNDQsNyArNDQsNyBAQAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9NT1ZBQkxFLAkJIkdGUF9NT1ZBQkxFIn0JCVwKIAkpIDogIkdGUF9OT1dBSVQiCiAKLVRSQUNFX0VWRU5UKGttYWxsb2MsCitERUNMQVJFX0VWRU5UX0NMQVNTKGttZW1fYWxsb2MsCiAKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKIAkJIGNvbnN0IHZvaWQgKnB0ciwKQEAgLTc4LDQxICs3OCwyMyBAQAogCQlzaG93X2dmcF9mbGFncyhfX2VudHJ5LT5nZnBfZmxhZ3MpKQogKTsKIAotVFJBQ0VfRVZFTlQoa21lbV9jYWNoZV9hbGxvYywKK0RFRklORV9FVkVOVChrbWVtX2FsbG9jLCBrbWFsbG9jLAogCi0JVFBfUFJPVE8odW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCSBjb25zdCB2b2lkICpwdHIsCi0JCSBzaXplX3QgYnl0ZXNfcmVxLAotCQkgc2l6ZV90IGJ5dGVzX2FsbG9jLAotCQkgZ2ZwX3QgZ2ZwX2ZsYWdzKSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwgY29uc3Qgdm9pZCAqcHRyLAorCQkgc2l6ZV90IGJ5dGVzX3JlcSwgc2l6ZV90IGJ5dGVzX2FsbG9jLCBnZnBfdCBnZnBfZmxhZ3MpLAogCi0JVFBfQVJHUyhjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywgZ2ZwX2ZsYWdzKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWNhbGxfc2l0ZQkpCi0JCV9fZmllbGQoCWNvbnN0IHZvaWQgKiwJcHRyCQkpCi0JCV9fZmllbGQoCXNpemVfdCwJCWJ5dGVzX3JlcQkpCi0JCV9fZmllbGQoCXNpemVfdCwJCWJ5dGVzX2FsbG9jCSkKLQkJX19maWVsZCgJZ2ZwX3QsCQlnZnBfZmxhZ3MJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+Y2FsbF9zaXRlCT0gY2FsbF9zaXRlOwotCQlfX2VudHJ5LT5wdHIJCT0gcHRyOwotCQlfX2VudHJ5LT5ieXRlc19yZXEJPSBieXRlc19yZXE7Ci0JCV9fZW50cnktPmJ5dGVzX2FsbG9jCT0gYnl0ZXNfYWxsb2M7Ci0JCV9fZW50cnktPmdmcF9mbGFncwk9IGdmcF9mbGFnczsKLQkpLAotCi0JVFBfcHJpbnRrKCJjYWxsX3NpdGU9JWx4IHB0cj0lcCBieXRlc19yZXE9JXp1IGJ5dGVzX2FsbG9jPSV6dSBnZnBfZmxhZ3M9JXMiLAotCQlfX2VudHJ5LT5jYWxsX3NpdGUsCi0JCV9fZW50cnktPnB0ciwKLQkJX19lbnRyeS0+Ynl0ZXNfcmVxLAotCQlfX2VudHJ5LT5ieXRlc19hbGxvYywKLQkJc2hvd19nZnBfZmxhZ3MoX19lbnRyeS0+Z2ZwX2ZsYWdzKSkKKwlUUF9BUkdTKGNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MpCiApOwogCi1UUkFDRV9FVkVOVChrbWFsbG9jX25vZGUsCitERUZJTkVfRVZFTlQoa21lbV9hbGxvYywga21lbV9jYWNoZV9hbGxvYywKKworCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLCBjb25zdCB2b2lkICpwdHIsCisJCSBzaXplX3QgYnl0ZXNfcmVxLCBzaXplX3QgYnl0ZXNfYWxsb2MsIGdmcF90IGdmcF9mbGFncyksCisKKwlUUF9BUkdTKGNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGttZW1fYWxsb2Nfbm9kZSwKIAogCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAogCQkgY29uc3Qgdm9pZCAqcHRyLApAQCAtMTUwLDQ1ICsxMzIsMjUgQEAKIAkJX19lbnRyeS0+bm9kZSkKICk7CiAKLVRSQUNFX0VWRU5UKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSwKK0RFRklORV9FVkVOVChrbWVtX2FsbG9jX25vZGUsIGttYWxsb2Nfbm9kZSwKIAotCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkgY29uc3Qgdm9pZCAqcHRyLAotCQkgc2l6ZV90IGJ5dGVzX3JlcSwKLQkJIHNpemVfdCBieXRlc19hbGxvYywKLQkJIGdmcF90IGdmcF9mbGFncywKLQkJIGludCBub2RlKSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwgY29uc3Qgdm9pZCAqcHRyLAorCQkgc2l6ZV90IGJ5dGVzX3JlcSwgc2l6ZV90IGJ5dGVzX2FsbG9jLAorCQkgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSksCiAKLQlUUF9BUkdTKGNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIG5vZGUpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJY2FsbF9zaXRlCSkKLQkJX19maWVsZCgJY29uc3Qgdm9pZCAqLAlwdHIJCSkKLQkJX19maWVsZCgJc2l6ZV90LAkJYnl0ZXNfcmVxCSkKLQkJX19maWVsZCgJc2l6ZV90LAkJYnl0ZXNfYWxsb2MJKQotCQlfX2ZpZWxkKAlnZnBfdCwJCWdmcF9mbGFncwkpCi0JCV9fZmllbGQoCWludCwJCW5vZGUJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmNhbGxfc2l0ZQk9IGNhbGxfc2l0ZTsKLQkJX19lbnRyeS0+cHRyCQk9IHB0cjsKLQkJX19lbnRyeS0+Ynl0ZXNfcmVxCT0gYnl0ZXNfcmVxOwotCQlfX2VudHJ5LT5ieXRlc19hbGxvYwk9IGJ5dGVzX2FsbG9jOwotCQlfX2VudHJ5LT5nZnBfZmxhZ3MJPSBnZnBfZmxhZ3M7Ci0JCV9fZW50cnktPm5vZGUJCT0gbm9kZTsKLQkpLAotCi0JVFBfcHJpbnRrKCJjYWxsX3NpdGU9JWx4IHB0cj0lcCBieXRlc19yZXE9JXp1IGJ5dGVzX2FsbG9jPSV6dSBnZnBfZmxhZ3M9JXMgbm9kZT0lZCIsCi0JCV9fZW50cnktPmNhbGxfc2l0ZSwKLQkJX19lbnRyeS0+cHRyLAotCQlfX2VudHJ5LT5ieXRlc19yZXEsCi0JCV9fZW50cnktPmJ5dGVzX2FsbG9jLAotCQlzaG93X2dmcF9mbGFncyhfX2VudHJ5LT5nZnBfZmxhZ3MpLAotCQlfX2VudHJ5LT5ub2RlKQorCVRQX0FSR1MoY2FsbF9zaXRlLCBwdHIsIGJ5dGVzX3JlcSwgYnl0ZXNfYWxsb2MsIGdmcF9mbGFncywgbm9kZSkKICk7CiAKLVRSQUNFX0VWRU5UKGtmcmVlLAorREVGSU5FX0VWRU5UKGttZW1fYWxsb2Nfbm9kZSwga21lbV9jYWNoZV9hbGxvY19ub2RlLAorCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsIGNvbnN0IHZvaWQgKnB0ciwKKwkJIHNpemVfdCBieXRlc19yZXEsIHNpemVfdCBieXRlc19hbGxvYywKKwkJIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpLAorCisJVFBfQVJHUyhjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywgZ2ZwX2ZsYWdzLCBub2RlKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhrbWVtX2ZyZWUsCiAKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwgY29uc3Qgdm9pZCAqcHRyKSwKIApAQCAtMjA3LDIzICsxNjksMTggQEAKIAlUUF9wcmludGsoImNhbGxfc2l0ZT0lbHggcHRyPSVwIiwgX19lbnRyeS0+Y2FsbF9zaXRlLCBfX2VudHJ5LT5wdHIpCiApOwogCi1UUkFDRV9FVkVOVChrbWVtX2NhY2hlX2ZyZWUsCitERUZJTkVfRVZFTlQoa21lbV9mcmVlLCBrZnJlZSwKIAogCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLCBjb25zdCB2b2lkICpwdHIpLAogCi0JVFBfQVJHUyhjYWxsX3NpdGUsIHB0ciksCisJVFBfQVJHUyhjYWxsX3NpdGUsIHB0cikKKyk7CiAKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAljYWxsX3NpdGUJKQotCQlfX2ZpZWxkKAljb25zdCB2b2lkICosCXB0cgkJKQotCSksCitERUZJTkVfRVZFTlQoa21lbV9mcmVlLCBrbWVtX2NhY2hlX2ZyZWUsCiAKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+Y2FsbF9zaXRlCT0gY2FsbF9zaXRlOwotCQlfX2VudHJ5LT5wdHIJCT0gcHRyOwotCSksCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsIGNvbnN0IHZvaWQgKnB0ciksCiAKLQlUUF9wcmludGsoImNhbGxfc2l0ZT0lbHggcHRyPSVwIiwgX19lbnRyeS0+Y2FsbF9zaXRlLCBfX2VudHJ5LT5wdHIpCisJVFBfQVJHUyhjYWxsX3NpdGUsIHB0cikKICk7CiAKIFRSQUNFX0VWRU5UKG1tX3BhZ2VfZnJlZV9kaXJlY3QsCkBAIC0yOTksNyArMjU2LDcgQEAKIAkJc2hvd19nZnBfZmxhZ3MoX19lbnRyeS0+Z2ZwX2ZsYWdzKSkKICk7CiAKLVRSQUNFX0VWRU5UKG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQsCitERUNMQVJFX0VWRU5UX0NMQVNTKG1tX3BhZ2UsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpLAogCkBAIC0zMjUsMjkgKzI4MiwyMiBAQAogCQlfX2VudHJ5LT5vcmRlciA9PSAwKQogKTsKIAotVFJBQ0VfRVZFTlQobW1fcGFnZV9wY3B1X2RyYWluLAorREVGSU5FX0VWRU5UKG1tX3BhZ2UsIG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQsCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpLAorCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSksCisKKwlUUF9BUkdTKHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSkKKyk7CisKK0RFRklORV9FVkVOVF9QUklOVChtbV9wYWdlLCBtbV9wYWdlX3BjcHVfZHJhaW4sCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpLAogCiAJVFBfQVJHUyhwYWdlLCBvcmRlciwgbWlncmF0ZXR5cGUpLAogCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJKQotCQlfX2ZpZWxkKAlpbnQsCQlvcmRlcgkJKQotCQlfX2ZpZWxkKAlpbnQsCQltaWdyYXRldHlwZQkpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5wYWdlCQk9IHBhZ2U7Ci0JCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOwotCQlfX2VudHJ5LT5taWdyYXRldHlwZQk9IG1pZ3JhdGV0eXBlOwotCSksCi0KIAlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBvcmRlcj0lZCBtaWdyYXRldHlwZT0lZCIsCi0JCV9fZW50cnktPnBhZ2UsCi0JCXBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAotCQlfX2VudHJ5LT5vcmRlciwKLQkJX19lbnRyeS0+bWlncmF0ZXR5cGUpCisJCV9fZW50cnktPnBhZ2UsIHBhZ2VfdG9fcGZuKF9fZW50cnktPnBhZ2UpLAorCQlfX2VudHJ5LT5vcmRlciwgX19lbnRyeS0+bWlncmF0ZXR5cGUpCiApOwogCiBUUkFDRV9FVkVOVChtbV9wYWdlX2FsbG9jX2V4dGZyYWcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrZGVwLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gaW5jbHVkZS90cmFjZS9ldmVudHMvbG9ja2RlcC5oCnJlbmFtZSB0byBpbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKaW5kZXggYmNmMWQyMC4uYTg3MGJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaApAQCAtMSw4ICsxLDggQEAKICN1bmRlZiBUUkFDRV9TWVNURU0KLSNkZWZpbmUgVFJBQ0VfU1lTVEVNIGxvY2tkZXAKKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGxvY2sKIAotI2lmICFkZWZpbmVkKF9UUkFDRV9MT0NLREVQX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCi0jZGVmaW5lIF9UUkFDRV9MT0NLREVQX0gKKyNpZiAhZGVmaW5lZChfVFJBQ0VfTE9DS19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfTE9DS19ICiAKICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgpAQCAtOTAsNyArOTAsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9UUkFDRV9MT0NLREVQX0ggKi8KKyNlbmRpZiAvKiBfVFJBQ0VfTE9DS19IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwogI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWNlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWVlNzc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWNlLmgKQEAgLTAsMCArMSw2OSBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gbWNlCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfTUNFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9NQ0VfSAorCisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgorCitUUkFDRV9FVkVOVChtY2VfcmVjb3JkLAorCisJVFBfUFJPVE8oc3RydWN0IG1jZSAqbSksCisKKwlUUF9BUkdTKG0pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdTY0LAkJbWNnY2FwCQkpCisJCV9fZmllbGQoCXU2NCwJCW1jZ3N0YXR1cwkpCisJCV9fZmllbGQoCXU4LAkJYmFuawkJKQorCQlfX2ZpZWxkKAl1NjQsCQlzdGF0dXMJCSkKKwkJX19maWVsZCgJdTY0LAkJYWRkcgkJKQorCQlfX2ZpZWxkKAl1NjQsCQltaXNjCQkpCisJCV9fZmllbGQoCXU2NCwJCWlwCQkpCisJCV9fZmllbGQoCXU4LAkJY3MJCSkKKwkJX19maWVsZCgJdTY0LAkJdHNjCQkpCisJCV9fZmllbGQoCXU2NCwJCXdhbGx0aW1lCSkKKwkJX19maWVsZCgJdTMyLAkJY3B1CQkpCisJCV9fZmllbGQoCXUzMiwJCWNwdWlkCQkpCisJCV9fZmllbGQoCXUzMiwJCWFwaWNpZAkJKQorCQlfX2ZpZWxkKAl1MzIsCQlzb2NrZXRpZAkpCisJCV9fZmllbGQoCXU4LAkJY3B1dmVuZG9yCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm1jZ2NhcAkJPSBtLT5tY2djYXA7CisJCV9fZW50cnktPm1jZ3N0YXR1cwk9IG0tPm1jZ3N0YXR1czsKKwkJX19lbnRyeS0+YmFuawkJPSBtLT5iYW5rOworCQlfX2VudHJ5LT5zdGF0dXMJCT0gbS0+c3RhdHVzOworCQlfX2VudHJ5LT5hZGRyCQk9IG0tPmFkZHI7CisJCV9fZW50cnktPm1pc2MJCT0gbS0+bWlzYzsKKwkJX19lbnRyeS0+aXAJCT0gbS0+aXA7CisJCV9fZW50cnktPmNzCQk9IG0tPmNzOworCQlfX2VudHJ5LT50c2MJCT0gbS0+dHNjOworCQlfX2VudHJ5LT53YWxsdGltZQk9IG0tPnRpbWU7CisJCV9fZW50cnktPmNwdQkJPSBtLT5leHRjcHU7CisJCV9fZW50cnktPmNwdWlkCQk9IG0tPmNwdWlkOworCQlfX2VudHJ5LT5hcGljaWQJCT0gbS0+YXBpY2lkOworCQlfX2VudHJ5LT5zb2NrZXRpZAk9IG0tPnNvY2tldGlkOworCQlfX2VudHJ5LT5jcHV2ZW5kb3IJPSBtLT5jcHV2ZW5kb3I7CisJKSwKKworCVRQX3ByaW50aygiQ1BVOiAlZCwgTUNHYy9zOiAlbGx4LyVsbHgsIE1DJWQ6ICUwMTZMeCwgQUREUi9NSVNDOiAlMDE2THgvJTAxNkx4LCBSSVA6ICUwMng6PCUwMTZMeD4sIFRTQzogJWxseCwgUFJPQ0VTU09SOiAldToleCwgVElNRTogJWxsdSwgU09DS0VUOiAldSwgQVBJQzogJXgiLAorCQlfX2VudHJ5LT5jcHUsCisJCV9fZW50cnktPm1jZ2NhcCwgX19lbnRyeS0+bWNnc3RhdHVzLAorCQlfX2VudHJ5LT5iYW5rLCBfX2VudHJ5LT5zdGF0dXMsCisJCV9fZW50cnktPmFkZHIsIF9fZW50cnktPm1pc2MsCisJCV9fZW50cnktPmNzLCBfX2VudHJ5LT5pcCwKKwkJX19lbnRyeS0+dHNjLAorCQlfX2VudHJ5LT5jcHV2ZW5kb3IsIF9fZW50cnktPmNwdWlkLAorCQlfX2VudHJ5LT53YWxsdGltZSwKKwkJX19lbnRyeS0+c29ja2V0aWQsCisJCV9fZW50cnktPmFwaWNpZCkKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfTUNFX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tb2R1bGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21vZHVsZS5oCmluZGV4IDg0MTYwZmIuLjRiMGY0OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21vZHVsZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21vZHVsZS5oCkBAIC01MSw3ICs1MSw3IEBACiAJVFBfcHJpbnRrKCIlcyIsIF9fZ2V0X3N0cihuYW1lKSkKICk7CiAKLVRSQUNFX0VWRU5UKG1vZHVsZV9nZXQsCitERUNMQVJFX0VWRU5UX0NMQVNTKG1vZHVsZV9yZWZjbnQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgaXAsIGludCByZWZjbnQpLAogCkBAIC03MywyNiArNzMsMTggQEAKIAkJICBfX2dldF9zdHIobmFtZSksICh2b2lkICopX19lbnRyeS0+aXAsIF9fZW50cnktPnJlZmNudCkKICk7CiAKLVRSQUNFX0VWRU5UKG1vZHVsZV9wdXQsCitERUZJTkVfRVZFTlQobW9kdWxlX3JlZmNudCwgbW9kdWxlX2dldCwKIAogCVRQX1BST1RPKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBpcCwgaW50IHJlZmNudCksCiAKLQlUUF9BUkdTKG1vZCwgaXAsIHJlZmNudCksCisJVFBfQVJHUyhtb2QsIGlwLCByZWZjbnQpCispOwogCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJaXAJCSkKLQkJX19maWVsZCgJaW50LAkJcmVmY250CQkpCi0JCV9fc3RyaW5nKAluYW1lLAkJbW9kLT5uYW1lCSkKLQkpLAorREVGSU5FX0VWRU5UKG1vZHVsZV9yZWZjbnQsIG1vZHVsZV9wdXQsCiAKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+aXAJPSBpcDsKLQkJX19lbnRyeS0+cmVmY250CT0gcmVmY250OwotCQlfX2Fzc2lnbl9zdHIobmFtZSwgbW9kLT5uYW1lKTsKLQkpLAorCVRQX1BST1RPKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBpcCwgaW50IHJlZmNudCksCiAKLQlUUF9wcmludGsoIiVzIGNhbGxfc2l0ZT0lcGYgcmVmY250PSVkIiwKLQkJICBfX2dldF9zdHIobmFtZSksICh2b2lkICopX19lbnRyeS0+aXAsIF9fZW50cnktPnJlZmNudCkKKwlUUF9BUkdTKG1vZCwgaXAsIHJlZmNudCkKICk7CiAKIFRSQUNFX0VWRU5UKG1vZHVsZV9yZXF1ZXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Bvd2VyLmgKaW5kZXggZWE2ZDU3OS4uYzRlZmU5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oCkBAIC0xNiw5ICsxNiw3IEBACiB9OwogI2VuZGlmCiAKLQotCi1UUkFDRV9FVkVOVChwb3dlcl9zdGFydCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MocG93ZXIsCiAKIAlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN0YXRlKSwKIApAQCAtMzcsNiArMzUsMjAgQEAKIAlUUF9wcmludGsoInR5cGU9JWx1IHN0YXRlPSVsdSIsICh1bnNpZ25lZCBsb25nKV9fZW50cnktPnR5cGUsICh1bnNpZ25lZCBsb25nKV9fZW50cnktPnN0YXRlKQogKTsKIAorREVGSU5FX0VWRU5UKHBvd2VyLCBwb3dlcl9zdGFydCwKKworCVRQX1BST1RPKHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAorCisJVFBfQVJHUyh0eXBlLCBzdGF0ZSkKKyk7CisKK0RFRklORV9FVkVOVChwb3dlciwgcG93ZXJfZnJlcXVlbmN5LAorCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisKKwlUUF9BUkdTKHR5cGUsIHN0YXRlKQorKTsKKwogVFJBQ0VfRVZFTlQocG93ZXJfZW5kLAogCiAJVFBfUFJPVE8oaW50IGR1bW15KSwKQEAgLTU1LDI2ICs2Nyw2IEBACiAKICk7CiAKLQotVFJBQ0VfRVZFTlQocG93ZXJfZnJlcXVlbmN5LAotCi0JVFBfUFJPVE8odW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCi0KLQlUUF9BUkdTKHR5cGUsIHN0YXRlKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoCXU2NCwJCXR5cGUJCSkKLQkJX19maWVsZCgJdTY0LAkJc3RhdGUJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPnR5cGUgPSB0eXBlOwotCQlfX2VudHJ5LT5zdGF0ZSA9IHN0YXRlOwotCSksCi0KLQlUUF9wcmludGsoInR5cGU9JWx1IHN0YXRlPSVsdSIsICh1bnNpZ25lZCBsb25nKV9fZW50cnktPnR5cGUsICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5zdGF0ZSkKLSk7Ci0KICNlbmRpZiAvKiBfVFJBQ0VfUE9XRVJfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCmluZGV4IDQwNjljNDMuLmNmY2ViMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaApAQCAtMjYsNyArMjYsNyBAQAogCQlfX2VudHJ5LT5waWQJPSB0LT5waWQ7CiAJKSwKIAotCVRQX3ByaW50aygidGFzayAlczolZCIsIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCkKKwlUUF9wcmludGsoImNvbW09JXMgcGlkPSVkIiwgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkKQogKTsKIAogLyoKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJX19lbnRyeS0+cmV0CT0gcmV0OwogCSksCiAKLQlUUF9wcmludGsoInJldCAlZCIsIF9fZW50cnktPnJldCkKKwlUUF9wcmludGsoInJldD0lZCIsIF9fZW50cnktPnJldCkKICk7CiAKIC8qCkBAIC03Myw3ICs3Myw3IEBACiAJCV9fZW50cnktPnByaW8JPSBwLT5wcmlvOwogCSksCiAKLQlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCisJVFBfcHJpbnRrKCJjb21tPSVzIHBpZD0lZCBwcmlvPSVkIiwKIAkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCiApOwogCkBAIC04Myw3ICs4Myw3IEBACiAgKiAoTk9URTogdGhlICdycScgYXJndW1lbnQgaXMgbm90IHVzZWQgYnkgZ2VuZXJpYyB0cmFjZSBldmVudHMsCiAgKiAgICAgICAgYnV0IHVzZWQgYnkgdGhlIGxhdGVuY3kgdHJhY2VyIHBsdWdpbi4gKQogICovCi1UUkFDRV9FVkVOVChzY2hlZF93YWtldXAsCitERUNMQVJFX0VWRU5UX0NMQVNTKHNjaGVkX3dha2V1cF90ZW1wbGF0ZSwKIAogCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAogCkBAIC05NCw3ICs5NCw3IEBACiAJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCiAJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKIAkJX19maWVsZCgJaW50LAlzdWNjZXNzCQkJKQotCQlfX2ZpZWxkKAlpbnQsCWNwdQkJCSkKKwkJX19maWVsZCgJaW50LAl0YXJnZXRfY3B1CQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMTAyLDQ2ICsxMDIsMjcgQEAKIAkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKIAkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOwogCQlfX2VudHJ5LT5zdWNjZXNzCT0gc3VjY2VzczsKLQkJX19lbnRyeS0+Y3B1CQk9IHRhc2tfY3B1KHApOworCQlfX2VudHJ5LT50YXJnZXRfY3B1CT0gdGFza19jcHUocCk7CiAJKSwKIAotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIHN1Y2Nlc3M9JWQgWyUwM2RdIiwKKwlUUF9wcmludGsoImNvbW09JXMgcGlkPSVkIHByaW89JWQgc3VjY2Vzcz0lZCB0YXJnZXRfY3B1PSUwM2QiLAogCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKLQkJICBfX2VudHJ5LT5zdWNjZXNzLCBfX2VudHJ5LT5jcHUpCisJCSAgX19lbnRyeS0+c3VjY2VzcywgX19lbnRyeS0+dGFyZ2V0X2NwdSkKICk7CiAKK0RFRklORV9FVkVOVChzY2hlZF93YWtldXBfdGVtcGxhdGUsIHNjaGVkX3dha2V1cCwKKwkgICAgIFRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAorCSAgICAgVFBfQVJHUyhycSwgcCwgc3VjY2VzcykpOworCiAvKgogICogVHJhY2Vwb2ludCBmb3Igd2FraW5nIHVwIGEgbmV3IHRhc2s6CiAgKgogICogKE5PVEU6IHRoZSAncnEnIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGJ5IGdlbmVyaWMgdHJhY2UgZXZlbnRzLAogICogICAgICAgIGJ1dCB1c2VkIGJ5IHRoZSBsYXRlbmN5IHRyYWNlciBwbHVnaW4uICkKICAqLwotVFJBQ0VfRVZFTlQoc2NoZWRfd2FrZXVwX25ldywKLQotCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAotCi0JVFBfQVJHUyhycSwgcCwgc3VjY2VzcyksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKLQkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKLQkJX19maWVsZCgJaW50LAlwcmlvCQkJKQotCQlfX2ZpZWxkKAlpbnQsCXN1Y2Nlc3MJCQkpCi0JCV9fZmllbGQoCWludCwJY3B1CQkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwotCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOwotCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87Ci0JCV9fZW50cnktPnN1Y2Nlc3MJPSBzdWNjZXNzOwotCQlfX2VudHJ5LT5jcHUJCT0gdGFza19jcHUocCk7Ci0JKSwKLQotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIHN1Y2Nlc3M9JWQgWyUwM2RdIiwKLQkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8sCi0JCSAgX19lbnRyeS0+c3VjY2VzcywgX19lbnRyeS0+Y3B1KQotKTsKK0RFRklORV9FVkVOVChzY2hlZF93YWtldXBfdGVtcGxhdGUsIHNjaGVkX3dha2V1cF9uZXcsCisJICAgICBUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKSwKKwkgICAgIFRQX0FSR1MocnEsIHAsIHN1Y2Nlc3MpKTsKIAogLyoKICAqIFRyYWNlcG9pbnQgZm9yIHRhc2sgc3dpdGNoZXMsIHBlcmZvcm1lZCBieSB0aGUgc2NoZWR1bGVyOgpAQCAtMTc2LDcgKzE1Nyw3IEBACiAJCV9fZW50cnktPm5leHRfcHJpbwk9IG5leHQtPnByaW87CiAJKSwKIAotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdICglcykgPT0+ICVzOiVkIFslZF0iLAorCVRQX3ByaW50aygicHJldl9jb21tPSVzIHByZXZfcGlkPSVkIHByZXZfcHJpbz0lZCBwcmV2X3N0YXRlPSVzID09PiBuZXh0X2NvbW09JXMgbmV4dF9waWQ9JWQgbmV4dF9wcmlvPSVkIiwKIAkJX19lbnRyeS0+cHJldl9jb21tLCBfX2VudHJ5LT5wcmV2X3BpZCwgX19lbnRyeS0+cHJldl9wcmlvLAogCQlfX2VudHJ5LT5wcmV2X3N0YXRlID8KIAkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPnByZXZfc3RhdGUsICJ8IiwKQEAgLTIxMSw2MCArMTkyLDQ3IEBACiAJCV9fZW50cnktPmRlc3RfY3B1CT0gZGVzdF9jcHU7CiAJKSwKIAotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIGZyb206ICVkICB0bzogJWQiLAorCVRQX3ByaW50aygiY29tbT0lcyBwaWQ9JWQgcHJpbz0lZCBvcmlnX2NwdT0lZCBkZXN0X2NwdT0lZCIsCiAJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvLAogCQkgIF9fZW50cnktPm9yaWdfY3B1LCBfX2VudHJ5LT5kZXN0X2NwdSkKICk7CiAKK0RFQ0xBUkVfRVZFTlRfQ0xBU1Moc2NoZWRfcHJvY2Vzc190ZW1wbGF0ZSwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisKKwlUUF9BUkdTKHApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCSksCisKKwlUUF9wcmludGsoImNvbW09JXMgcGlkPSVkIHByaW89JWQiLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKKyk7CisKIC8qCiAgKiBUcmFjZXBvaW50IGZvciBmcmVlaW5nIGEgdGFzazoKICAqLwotVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc19mcmVlLAotCi0JVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQotCVRQX0FSR1MocCksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKLQkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKLQkJX19maWVsZCgJaW50LAlwcmlvCQkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwotCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOwotCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87Ci0JKSwKLQotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKLQkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCi0pOworREVGSU5FX0VWRU5UKHNjaGVkX3Byb2Nlc3NfdGVtcGxhdGUsIHNjaGVkX3Byb2Nlc3NfZnJlZSwKKwkgICAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJICAgICBUUF9BUkdTKHApKTsKKwkgICAgIAogCiAvKgogICogVHJhY2Vwb2ludCBmb3IgYSB0YXNrIGV4aXRpbmc6CiAgKi8KLVRSQUNFX0VWRU5UKHNjaGVkX3Byb2Nlc3NfZXhpdCwKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0KLQlUUF9BUkdTKHApLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCi0JCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCi0JCV9fZmllbGQoCWludCwJcHJpbwkJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKLQkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOwotCSksCi0KLQlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCi0JCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvKQotKTsKK0RFRklORV9FVkVOVChzY2hlZF9wcm9jZXNzX3RlbXBsYXRlLCBzY2hlZF9wcm9jZXNzX2V4aXQsCisJICAgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCSAgICAgVFBfQVJHUyhwKSk7CiAKIC8qCiAgKiBUcmFjZXBvaW50IGZvciBhIHdhaXRpbmcgdGFzazoKQEAgLTI4Nyw3ICsyNTUsNyBAQAogCQlfX2VudHJ5LT5wcmlvCQk9IGN1cnJlbnQtPnByaW87CiAJKSwKIAotCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIiwKKwlUUF9wcmludGsoImNvbW09JXMgcGlkPSVkIHByaW89JWQiLAogCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKICk7CiAKQEAgLTMxNCw0NiArMjgyLDE2IEBACiAJCV9fZW50cnktPmNoaWxkX3BpZAk9IGNoaWxkLT5waWQ7CiAJKSwKIAotCVRQX3ByaW50aygicGFyZW50ICVzOiVkICBjaGlsZCAlczolZCIsCisJVFBfcHJpbnRrKCJjb21tPSVzIHBpZD0lZCBjaGlsZF9jb21tPSVzIGNoaWxkX3BpZD0lZCIsCiAJCV9fZW50cnktPnBhcmVudF9jb21tLCBfX2VudHJ5LT5wYXJlbnRfcGlkLAogCQlfX2VudHJ5LT5jaGlsZF9jb21tLCBfX2VudHJ5LT5jaGlsZF9waWQpCiApOwogCiAvKgotICogVHJhY2Vwb2ludCBmb3Igc2VuZGluZyBhIHNpZ25hbDoKLSAqLwotVFJBQ0VfRVZFTlQoc2NoZWRfc2lnbmFsX3NlbmQsCi0KLQlUUF9QUk9UTyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAotCi0JVFBfQVJHUyhzaWcsIHApLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJaW50LAlzaWcJCQkpCi0JCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQotCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwotCQlfX2VudHJ5LT5waWQJPSBwLT5waWQ7Ci0JCV9fZW50cnktPnNpZwk9IHNpZzsKLQkpLAotCi0JVFBfcHJpbnRrKCJzaWc6ICVkICB0YXNrICVzOiVkIiwKLQkJICBfX2VudHJ5LT5zaWcsIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCkKLSk7Ci0KLS8qCiAgKiBYWFggdGhlIGJlbG93IHNjaGVkX3N0YXQgdHJhY2Vwb2ludHMgb25seSBhcHBseSB0byBTQ0hFRF9PVEhFUi9CQVRDSC9JRExFCiAgKiAgICAgYWRkaW5nIHNjaGVkX3N0YXQgc3VwcG9ydCB0byBTQ0hFRF9GSUZPL1JSIHdvdWxkIGJlIHdlbGNvbWUuCiAgKi8KLQotLyoKLSAqIFRyYWNlcG9pbnQgZm9yIGFjY291bnRpbmcgd2FpdCB0aW1lICh0aW1lIHRoZSB0YXNrIGlzIHJ1bm5hYmxlCi0gKiBidXQgbm90IGFjdHVhbGx5IHJ1bm5pbmcgZHVlIHRvIHNjaGVkdWxlciBjb250ZW50aW9uKS4KLSAqLwotVFJBQ0VfRVZFTlQoc2NoZWRfc3RhdF93YWl0LAorREVDTEFSRV9FVkVOVF9DTEFTUyhzY2hlZF9zdGF0X3RlbXBsYXRlLAogCiAJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBkZWxheSksCiAKQEAgLTM3NCwxMSArMzEyLDM2IEBACiAJCV9fcGVyZl9jb3VudChkZWxheSk7CiAJKSwKIAotCVRQX3ByaW50aygidGFzazogJXM6JWQgd2FpdDogJUx1IFtuc10iLAorCVRQX3ByaW50aygiY29tbT0lcyBwaWQ9JWQgZGVsYXk9JUx1IFtuc10iLAogCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5kZWxheSkKICk7CiAKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGFjY291bnRpbmcgd2FpdCB0aW1lICh0aW1lIHRoZSB0YXNrIGlzIHJ1bm5hYmxlCisgKiBidXQgbm90IGFjdHVhbGx5IHJ1bm5pbmcgZHVlIHRvIHNjaGVkdWxlciBjb250ZW50aW9uKS4KKyAqLworREVGSU5FX0VWRU5UKHNjaGVkX3N0YXRfdGVtcGxhdGUsIHNjaGVkX3N0YXRfd2FpdCwKKwkgICAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZGVsYXkpLAorCSAgICAgVFBfQVJHUyh0c2ssIGRlbGF5KSk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIHNsZWVwIHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgbm90IHJ1bm5hYmxlLAorICogaW5jbHVkaW5nIGlvd2FpdCwgc2VlIGJlbG93KS4KKyAqLworREVGSU5FX0VWRU5UKHNjaGVkX3N0YXRfdGVtcGxhdGUsIHNjaGVkX3N0YXRfc2xlZXAsCisJICAgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGRlbGF5KSwKKwkgICAgIFRQX0FSR1ModHNrLCBkZWxheSkpOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgYWNjb3VudGluZyBpb3dhaXQgdGltZSAodGltZSB0aGUgdGFzayBpcyBub3QgcnVubmFibGUKKyAqIGR1ZSB0byB3YWl0aW5nIG9uIElPIHRvIGNvbXBsZXRlKS4KKyAqLworREVGSU5FX0VWRU5UKHNjaGVkX3N0YXRfdGVtcGxhdGUsIHNjaGVkX3N0YXRfaW93YWl0LAorCSAgICAgVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBkZWxheSksCisJICAgICBUUF9BUkdTKHRzaywgZGVsYXkpKTsKKwogLyoKICAqIFRyYWNlcG9pbnQgZm9yIGFjY291bnRpbmcgcnVudGltZSAodGltZSB0aGUgdGFzayBpcyBleGVjdXRpbmcKICAqIG9uIGEgQ1BVKS4KQEAgLTQwNiw3MiArMzY5LDEyIEBACiAJCV9fcGVyZl9jb3VudChydW50aW1lKTsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0YXNrOiAlczolZCBydW50aW1lOiAlTHUgW25zXSwgdnJ1bnRpbWU6ICVMdSBbbnNdIiwKKwlUUF9wcmludGsoImNvbW09JXMgcGlkPSVkIHJ1bnRpbWU9JUx1IFtuc10gdnJ1bnRpbWU9JUx1IFtuc10iLAogCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5ydW50aW1lLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT52cnVudGltZSkKICk7CiAKLS8qCi0gKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIHNsZWVwIHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgbm90IHJ1bm5hYmxlLAotICogaW5jbHVkaW5nIGlvd2FpdCwgc2VlIGJlbG93KS4KLSAqLwotVFJBQ0VfRVZFTlQoc2NoZWRfc3RhdF9zbGVlcCwKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZGVsYXkpLAotCi0JVFBfQVJHUyh0c2ssIGRlbGF5KSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoIGNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQotCQlfX2ZpZWxkKCBwaWRfdCwJcGlkCQkJKQotCQlfX2ZpZWxkKCB1NjQsCWRlbGF5CQkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JCV9fZW50cnktPnBpZAk9IHRzay0+cGlkOwotCQlfX2VudHJ5LT5kZWxheQk9IGRlbGF5OwotCSkKLQlUUF9wZXJmX2Fzc2lnbigKLQkJX19wZXJmX2NvdW50KGRlbGF5KTsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0YXNrOiAlczolZCBzbGVlcDogJUx1IFtuc10iLAotCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5kZWxheSkKLSk7Ci0KLS8qCi0gKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIGlvd2FpdCB0aW1lICh0aW1lIHRoZSB0YXNrIGlzIG5vdCBydW5uYWJsZQotICogZHVlIHRvIHdhaXRpbmcgb24gSU8gdG8gY29tcGxldGUpLgotICovCi1UUkFDRV9FVkVOVChzY2hlZF9zdGF0X2lvd2FpdCwKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZGVsYXkpLAotCi0JVFBfQVJHUyh0c2ssIGRlbGF5KSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoIGNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQotCQlfX2ZpZWxkKCBwaWRfdCwJcGlkCQkJKQotCQlfX2ZpZWxkKCB1NjQsCWRlbGF5CQkJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JCV9fZW50cnktPnBpZAk9IHRzay0+cGlkOwotCQlfX2VudHJ5LT5kZWxheQk9IGRlbGF5OwotCSkKLQlUUF9wZXJmX2Fzc2lnbigKLQkJX19wZXJmX2NvdW50KGRlbGF5KTsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0YXNrOiAlczolZCBpb3dhaXQ6ICVMdSBbbnNdIiwKLQkJCV9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+ZGVsYXkpCi0pOwotCiAjZW5kaWYgLyogX1RSQUNFX1NDSEVEX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zaWduYWwuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTBiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zaWduYWwuaApAQCAtMCwwICsxLDE3MyBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gc2lnbmFsCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfU0lHTkFMX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyNkZWZpbmUgVFBfU1RPUkVfU0lHSU5GTyhfX2VudHJ5LCBpbmZvKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChpbmZvID09IFNFTkRfU0lHX05PSU5GTykgewkJCVwKKwkJCV9fZW50cnktPmVycm5vCT0gMDsJCQlcCisJCQlfX2VudHJ5LT5jb2RlCT0gU0lfVVNFUjsJCVwKKwkJfSBlbHNlIGlmIChpbmZvID09IFNFTkRfU0lHX1BSSVYpIHsJCVwKKwkJCV9fZW50cnktPmVycm5vCT0gMDsJCQlcCisJCQlfX2VudHJ5LT5jb2RlCT0gU0lfS0VSTkVMOwkJXAorCQl9IGVsc2UgewkJCQkJXAorCQkJX19lbnRyeS0+ZXJybm8JPSBpbmZvLT5zaV9lcnJubzsJXAorCQkJX19lbnRyeS0+Y29kZQk9IGluZm8tPnNpX2NvZGU7CVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIHNpZ25hbF9nZW5lcmF0ZSAtIGNhbGxlZCB3aGVuIGEgc2lnbmFsIGlzIGdlbmVyYXRlZAorICogQHNpZzogc2lnbmFsIG51bWJlcgorICogQGluZm86IHBvaW50ZXIgdG8gc3RydWN0IHNpZ2luZm8KKyAqIEB0YXNrOiBwb2ludGVyIHRvIHN0cnVjdCB0YXNrX3N0cnVjdAorICoKKyAqIEN1cnJlbnQgcHJvY2VzcyBzZW5kcyBhICdzaWcnIHNpZ25hbCB0byAndGFzaycgcHJvY2VzcyB3aXRoCisgKiAnaW5mbycgc2lnaW5mby4gSWYgJ2luZm8nIGlzIFNFTkRfU0lHX05PSU5GTyBvciBTRU5EX1NJR19QUklWLAorICogJ2luZm8nIGlzIG5vdCBhIHBvaW50ZXIgYW5kIHlvdSBjYW4ndCBhY2Nlc3MgaXRzIGZpZWxkLiBJbnN0ZWFkLAorICogU0VORF9TSUdfTk9JTkZPIG1lYW5zIHRoYXQgc2lfY29kZSBpcyBTSV9VU0VSLCBhbmQgU0VORF9TSUdfUFJJVgorICogbWVhbnMgdGhhdCBzaV9jb2RlIGlzIFNJX0tFUk5FTC4KKyAqLworVFJBQ0VfRVZFTlQoc2lnbmFsX2dlbmVyYXRlLAorCisJVFBfUFJPVE8oaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayksCisKKwlUUF9BUkdTKHNpZywgaW5mbywgdGFzayksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCXNpZwkJCSkKKwkJX19maWVsZCgJaW50LAllcnJubwkJCSkKKwkJX19maWVsZCgJaW50LAljb2RlCQkJKQorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnNpZwk9IHNpZzsKKwkJVFBfU1RPUkVfU0lHSU5GTyhfX2VudHJ5LCBpbmZvKTsKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHRhc2stPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJPSB0YXNrLT5waWQ7CisJKSwKKworCVRQX3ByaW50aygic2lnPSVkIGVycm5vPSVkIGNvZGU9JWQgY29tbT0lcyBwaWQ9JWQiLAorCQkgIF9fZW50cnktPnNpZywgX19lbnRyeS0+ZXJybm8sIF9fZW50cnktPmNvZGUsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkKQorKTsKKworLyoqCisgKiBzaWduYWxfZGVsaXZlciAtIGNhbGxlZCB3aGVuIGEgc2lnbmFsIGlzIGRlbGl2ZXJlZAorICogQHNpZzogc2lnbmFsIG51bWJlcgorICogQGluZm86IHBvaW50ZXIgdG8gc3RydWN0IHNpZ2luZm8KKyAqIEBrYTogcG9pbnRlciB0byBzdHJ1Y3Qga19zaWdhY3Rpb24KKyAqCisgKiBBICdzaWcnIHNpZ25hbCBpcyBkZWxpdmVyZWQgdG8gY3VycmVudCBwcm9jZXNzIHdpdGggJ2luZm8nIHNpZ2luZm8sCisgKiBhbmQgaXQgd2lsbCBiZSBoYW5kbGVkIGJ5ICdrYScuIGthLT5zYS5zYV9oYW5kbGVyIGNhbiBiZSBTSUdfSUdOIG9yCisgKiBTSUdfREZMLgorICogTm90ZSB0aGF0IHNvbWUgc2lnbmFscyByZXBvcnRlZCBieSBzaWduYWxfZ2VuZXJhdGUgdHJhY2Vwb2ludCBjYW4gYmUKKyAqIGxvc3QsIGlnbm9yZWQgb3IgbW9kaWZpZWQgKGJ5IGRlYnVnZ2VyKSBiZWZvcmUgaGl0dGluZyB0aGlzIHRyYWNlcG9pbnQuCisgKiBUaGlzIG1lYW5zLCB0aGlzIGNhbiBzaG93IHdoaWNoIHNpZ25hbHMgYXJlIGFjdHVhbGx5IGRlbGl2ZXJlZCwgYnV0CisgKiBtYXRjaGluZyBnZW5lcmF0ZWQgc2lnbmFscyBhbmQgZGVsaXZlcmVkIHNpZ25hbHMgbWF5IG5vdCBiZSBjb3JyZWN0LgorICovCitUUkFDRV9FVkVOVChzaWduYWxfZGVsaXZlciwKKworCVRQX1BST1RPKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthKSwKKworCVRQX0FSR1Moc2lnLCBpbmZvLCBrYSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCQlzaWcJCSkKKwkJX19maWVsZCgJaW50LAkJZXJybm8JCSkKKwkJX19maWVsZCgJaW50LAkJY29kZQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlzYV9oYW5kbGVyCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJc2FfZmxhZ3MJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2lnCT0gc2lnOworCQlUUF9TVE9SRV9TSUdJTkZPKF9fZW50cnksIGluZm8pOworCQlfX2VudHJ5LT5zYV9oYW5kbGVyCT0gKHVuc2lnbmVkIGxvbmcpa2EtPnNhLnNhX2hhbmRsZXI7CisJCV9fZW50cnktPnNhX2ZsYWdzCT0ga2EtPnNhLnNhX2ZsYWdzOworCSksCisKKwlUUF9wcmludGsoInNpZz0lZCBlcnJubz0lZCBjb2RlPSVkIHNhX2hhbmRsZXI9JWx4IHNhX2ZsYWdzPSVseCIsCisJCSAgX19lbnRyeS0+c2lnLCBfX2VudHJ5LT5lcnJubywgX19lbnRyeS0+Y29kZSwKKwkJICBfX2VudHJ5LT5zYV9oYW5kbGVyLCBfX2VudHJ5LT5zYV9mbGFncykKKyk7CisKKy8qKgorICogc2lnbmFsX292ZXJmbG93X2ZhaWwgLSBjYWxsZWQgd2hlbiBzaWduYWwgcXVldWUgaXMgb3ZlcmZsb3cKKyAqIEBzaWc6IHNpZ25hbCBudW1iZXIKKyAqIEBncm91cDogc2lnbmFsIHRvIHByb2Nlc3MgZ3JvdXAgb3Igbm90IChib29sKQorICogQGluZm86IHBvaW50ZXIgdG8gc3RydWN0IHNpZ2luZm8KKyAqCisgKiBLZXJuZWwgZmFpbHMgdG8gZ2VuZXJhdGUgJ3NpZycgc2lnbmFsIHdpdGggJ2luZm8nIHNpZ2luZm8sIGJlY2F1c2UKKyAqIHNpZ2luZm8gcXVldWUgaXMgb3ZlcmZsb3csIGFuZCB0aGUgc2lnbmFsIGlzIGRyb3BwZWQuCisgKiAnZ3JvdXAnIGlzIG5vdCAwIGlmIHRoZSBzaWduYWwgd2lsbCBiZSBzZW50IHRvIGEgcHJvY2VzcyBncm91cC4KKyAqICdzaWcnIGlzIGFsd2F5cyBvbmUgb2YgUlQgc2lnbmFscy4KKyAqLworVFJBQ0VfRVZFTlQoc2lnbmFsX292ZXJmbG93X2ZhaWwsCisKKwlUUF9QUk9UTyhpbnQgc2lnLCBpbnQgZ3JvdXAsIHN0cnVjdCBzaWdpbmZvICppbmZvKSwKKworCVRQX0FSR1Moc2lnLCBncm91cCwgaW5mbyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCXNpZwkpCisJCV9fZmllbGQoCWludCwJZ3JvdXAJKQorCQlfX2ZpZWxkKAlpbnQsCWVycm5vCSkKKwkJX19maWVsZCgJaW50LAljb2RlCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnNpZwk9IHNpZzsKKwkJX19lbnRyeS0+Z3JvdXAJPSBncm91cDsKKwkJVFBfU1RPUkVfU0lHSU5GTyhfX2VudHJ5LCBpbmZvKTsKKwkpLAorCisJVFBfcHJpbnRrKCJzaWc9JWQgZ3JvdXA9JWQgZXJybm89JWQgY29kZT0lZCIsCisJCSAgX19lbnRyeS0+c2lnLCBfX2VudHJ5LT5ncm91cCwgX19lbnRyeS0+ZXJybm8sIF9fZW50cnktPmNvZGUpCispOworCisvKioKKyAqIHNpZ25hbF9sb3NlX2luZm8gLSBjYWxsZWQgd2hlbiBzaWdpbmZvIGlzIGxvc3QKKyAqIEBzaWc6IHNpZ25hbCBudW1iZXIKKyAqIEBncm91cDogc2lnbmFsIHRvIHByb2Nlc3MgZ3JvdXAgb3Igbm90IChib29sKQorICogQGluZm86IHBvaW50ZXIgdG8gc3RydWN0IHNpZ2luZm8KKyAqCisgKiBLZXJuZWwgZ2VuZXJhdGVzICdzaWcnIHNpZ25hbCBidXQgbG9zZXMgJ2luZm8nIHNpZ2luZm8sIGJlY2F1c2Ugc2lnaW5mbworICogcXVldWUgaXMgb3ZlcmZsb3cuCisgKiAnZ3JvdXAnIGlzIG5vdCAwIGlmIHRoZSBzaWduYWwgd2lsbCBiZSBzZW50IHRvIGEgcHJvY2VzcyBncm91cC4KKyAqICdzaWcnIGlzIGFsd2F5cyBvbmUgb2Ygbm9uLVJUIHNpZ25hbHMuCisgKi8KK1RSQUNFX0VWRU5UKHNpZ25hbF9sb3NlX2luZm8sCisKKwlUUF9QUk9UTyhpbnQgc2lnLCBpbnQgZ3JvdXAsIHN0cnVjdCBzaWdpbmZvICppbmZvKSwKKworCVRQX0FSR1Moc2lnLCBncm91cCwgaW5mbyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCXNpZwkpCisJCV9fZmllbGQoCWludCwJZ3JvdXAJKQorCQlfX2ZpZWxkKAlpbnQsCWVycm5vCSkKKwkJX19maWVsZCgJaW50LAljb2RlCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnNpZwk9IHNpZzsKKwkJX19lbnRyeS0+Z3JvdXAJPSBncm91cDsKKwkJVFBfU1RPUkVfU0lHSU5GTyhfX2VudHJ5LCBpbmZvKTsKKwkpLAorCisJVFBfcHJpbnRrKCJzaWc9JWQgZ3JvdXA9JWQgZXJybm89JWQgY29kZT0lZCIsCisJCSAgX19lbnRyeS0+c2lnLCBfX2VudHJ5LT5ncm91cCwgX19lbnRyeS0+ZXJybm8sIF9fZW50cnktPmNvZGUpCispOworI2VuZGlmIC8qIF9UUkFDRV9TSUdOQUxfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeXNjYWxscy5oCmluZGV4IDM5N2RmZjIuLmZiNzI2YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3lzY2FsbHMuaApAQCAtMSw1ICsxLDYgQEAKICN1bmRlZiBUUkFDRV9TWVNURU0KLSNkZWZpbmUgVFJBQ0VfU1lTVEVNIHN5c2NhbGxzCisjZGVmaW5lIFRSQUNFX1NZU1RFTSByYXdfc3lzY2FsbHMKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHN5c2NhbGxzCiAKICNpZiAhZGVmaW5lZChfVFJBQ0VfRVZFTlRTX1NZU0NBTExTX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCiAjZGVmaW5lIF9UUkFDRV9FVkVOVFNfU1lTQ0FMTFNfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKaW5kZXggMTg0NGM0OC4uZTVjZTg3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90aW1lci5oCkBAIC0yNiw3ICsyNiw3IEBACiAJCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CiAJKSwKIAotCVRQX3ByaW50aygidGltZXIgJXAiLCBfX2VudHJ5LT50aW1lcikKKwlUUF9wcmludGsoInRpbWVyPSVwIiwgX19lbnRyeS0+dGltZXIpCiApOwogCiAvKioKQEAgLTU0LDcgKzU0LDcgQEAKIAkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CiAJKSwKIAotCVRQX3ByaW50aygidGltZXIgJXA6IGZ1bmMgJXBmLCBleHBpcmVzICVsdSwgdGltZW91dCAlbGQiLAorCVRQX3ByaW50aygidGltZXI9JXAgZnVuY3Rpb249JXBmIGV4cGlyZXM9JWx1IFt0aW1lb3V0PSVsZF0iLAogCQkgIF9fZW50cnktPnRpbWVyLCBfX2VudHJ5LT5mdW5jdGlvbiwgX19lbnRyeS0+ZXhwaXJlcywKIAkJICAobG9uZylfX2VudHJ5LT5leHBpcmVzIC0gX19lbnRyeS0+bm93KQogKTsKQEAgLTgxLDcgKzgxLDcgQEAKIAkJX19lbnRyeS0+bm93CQk9IGppZmZpZXM7CiAJKSwKIAotCVRQX3ByaW50aygidGltZXIgJXA6IG5vdyAlbHUiLCBfX2VudHJ5LT50aW1lciwgX19lbnRyeS0+bm93KQorCVRQX3ByaW50aygidGltZXI9JXAgbm93PSVsdSIsIF9fZW50cnktPnRpbWVyLCBfX2VudHJ5LT5ub3cpCiApOwogCiAvKioKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQlfX2VudHJ5LT50aW1lcgk9IHRpbWVyOwogCSksCiAKLQlUUF9wcmludGsoInRpbWVyICVwIiwgX19lbnRyeS0+dGltZXIpCisJVFBfcHJpbnRrKCJ0aW1lcj0lcCIsIF9fZW50cnktPnRpbWVyKQogKTsKIAogLyoqCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0aW1lciAlcCIsIF9fZW50cnktPnRpbWVyKQorCVRQX3ByaW50aygidGltZXI9JXAiLCBfX2VudHJ5LT50aW1lcikKICk7CiAKIC8qKgpAQCAtMTQwLDI0ICsxNDAsMjQgQEAKICAqLwogVFJBQ0VfRVZFTlQoaHJ0aW1lcl9pbml0LAogCi0JVFBfUFJPVE8oc3RydWN0IGhydGltZXIgKnRpbWVyLCBjbG9ja2lkX3QgY2xvY2tpZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciwgY2xvY2tpZF90IGNsb2NraWQsCiAJCSBlbnVtIGhydGltZXJfbW9kZSBtb2RlKSwKIAotCVRQX0FSR1ModGltZXIsIGNsb2NraWQsIG1vZGUpLAorCVRQX0FSR1MoaHJ0aW1lciwgY2xvY2tpZCwgbW9kZSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKCB2b2lkICosCQl0aW1lcgkJKQorCQlfX2ZpZWxkKCB2b2lkICosCQlocnRpbWVyCQkpCiAJCV9fZmllbGQoIGNsb2NraWRfdCwJCWNsb2NraWQJCSkKIAkJX19maWVsZCggZW51bSBocnRpbWVyX21vZGUsCW1vZGUJCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPnRpbWVyCQk9IHRpbWVyOworCQlfX2VudHJ5LT5ocnRpbWVyCT0gaHJ0aW1lcjsKIAkJX19lbnRyeS0+Y2xvY2tpZAk9IGNsb2NraWQ7CiAJCV9fZW50cnktPm1vZGUJCT0gbW9kZTsKIAkpLAogCi0JVFBfcHJpbnRrKCJocnRpbWVyICVwLCBjbG9ja2lkICVzLCBtb2RlICVzIiwgX19lbnRyeS0+dGltZXIsCisJVFBfcHJpbnRrKCJocnRpbWVyPSVwIGNsb2NraWQ9JXMgbW9kZT0lcyIsIF9fZW50cnktPmhydGltZXIsCiAJCSAgX19lbnRyeS0+Y2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/CiAJCQkiQ0xPQ0tfUkVBTFRJTUUiIDogIkNMT0NLX01PTk9UT05JQyIsCiAJCSAgX19lbnRyeS0+bW9kZSA9PSBIUlRJTUVSX01PREVfQUJTID8KQEAgLTE3MCwyNiArMTcwLDI2IEBACiAgKi8KIFRSQUNFX0VWRU5UKGhydGltZXJfc3RhcnQsCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKSwKIAotCVRQX0FSR1ModGltZXIpLAorCVRQX0FSR1MoaHJ0aW1lciksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCQkpCisJCV9fZmllbGQoIHZvaWQgKiwJaHJ0aW1lcgkJKQogCQlfX2ZpZWxkKCB2b2lkICosCWZ1bmN0aW9uCSkKIAkJX19maWVsZCggczY0LAkJZXhwaXJlcwkJKQogCQlfX2ZpZWxkKCBzNjQsCQlzb2Z0ZXhwaXJlcwkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT50aW1lcgkJPSB0aW1lcjsKLQkJX19lbnRyeS0+ZnVuY3Rpb24JPSB0aW1lci0+ZnVuY3Rpb247Ci0JCV9fZW50cnktPmV4cGlyZXMJPSBocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKS50djY0OwotCQlfX2VudHJ5LT5zb2Z0ZXhwaXJlcwk9IGhydGltZXJfZ2V0X3NvZnRleHBpcmVzKHRpbWVyKS50djY0OworCQlfX2VudHJ5LT5ocnRpbWVyCT0gaHJ0aW1lcjsKKwkJX19lbnRyeS0+ZnVuY3Rpb24JPSBocnRpbWVyLT5mdW5jdGlvbjsKKwkJX19lbnRyeS0+ZXhwaXJlcwk9IGhydGltZXJfZ2V0X2V4cGlyZXMoaHJ0aW1lcikudHY2NDsKKwkJX19lbnRyeS0+c29mdGV4cGlyZXMJPSBocnRpbWVyX2dldF9zb2Z0ZXhwaXJlcyhocnRpbWVyKS50djY0OwogCSksCiAKLQlUUF9wcmludGsoImhydGltZXIgJXAsIGZ1bmMgJXBmLCBleHBpcmVzICVsbHUsIHNvZnRleHBpcmVzICVsbHUiLAotCQkgIF9fZW50cnktPnRpbWVyLCBfX2VudHJ5LT5mdW5jdGlvbiwKKwlUUF9wcmludGsoImhydGltZXI9JXAgZnVuY3Rpb249JXBmIGV4cGlyZXM9JWxsdSBzb2Z0ZXhwaXJlcz0lbGx1IiwKKwkJICBfX2VudHJ5LT5ocnRpbWVyLCBfX2VudHJ5LT5mdW5jdGlvbiwKIAkJICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKChrdGltZV90KSB7CiAJCQkJICAudHY2NCA9IF9fZW50cnktPmV4cGlyZXMgfSksCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucygoa3RpbWVfdCkgewpAQCAtMjA2LDIzICsyMDYsMjIgQEAKICAqLwogVFJBQ0VfRVZFTlQoaHJ0aW1lcl9leHBpcmVfZW50cnksCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgKm5vdyksCisJVFBfUFJPVE8oc3RydWN0IGhydGltZXIgKmhydGltZXIsIGt0aW1lX3QgKm5vdyksCiAKLQlUUF9BUkdTKHRpbWVyLCBub3cpLAorCVRQX0FSR1MoaHJ0aW1lciwgbm93KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoIHZvaWQgKiwJdGltZXIJKQorCQlfX2ZpZWxkKCB2b2lkICosCWhydGltZXIJKQogCQlfX2ZpZWxkKCBzNjQsCQlub3cJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKLQkJX19lbnRyeS0+bm93CT0gbm93LT50djY0OworCQlfX2VudHJ5LT5ocnRpbWVyCT0gaHJ0aW1lcjsKKwkJX19lbnRyeS0+bm93CQk9IG5vdy0+dHY2NDsKIAkpLAogCi0JVFBfcHJpbnRrKCJocnRpbWVyICVwLCBub3cgJWxsdSIsIF9fZW50cnktPnRpbWVyLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsKLQkJCQkgIC50djY0ID0gX19lbnRyeS0+bm93IH0pKQorCVRQX3ByaW50aygiaHJ0aW1lcj0lcCBub3c9JWxsdSIsIF9fZW50cnktPmhydGltZXIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucygoa3RpbWVfdCkgeyAudHY2NCA9IF9fZW50cnktPm5vdyB9KSkKICApOwogCiAvKioKQEAgLTIzNCw0MCArMjMzLDQwIEBACiAgKi8KIFRSQUNFX0VWRU5UKGhydGltZXJfZXhwaXJlX2V4aXQsCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpLAorCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKSwKIAotCVRQX0FSR1ModGltZXIpLAorCVRQX0FSR1MoaHJ0aW1lciksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKCB2b2lkICosCXRpbWVyCSkKKwkJX19maWVsZCggdm9pZCAqLAlocnRpbWVyCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPnRpbWVyCT0gdGltZXI7CisJCV9fZW50cnktPmhydGltZXIJPSBocnRpbWVyOwogCSksCiAKLQlUUF9wcmludGsoImhydGltZXIgJXAiLCBfX2VudHJ5LT50aW1lcikKKwlUUF9wcmludGsoImhydGltZXI9JXAiLCBfX2VudHJ5LT5ocnRpbWVyKQogKTsKIAogLyoqCiAgKiBocnRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGlzIGNhbmNlbGVkCi0gKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqIEBocnRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCBocnRpbWVyCiAgKi8KIFRSQUNFX0VWRU5UKGhydGltZXJfY2FuY2VsLAogCi0JVFBfUFJPVE8oc3RydWN0IGhydGltZXIgKnRpbWVyKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciksCiAKLQlUUF9BUkdTKHRpbWVyKSwKKwlUUF9BUkdTKGhydGltZXIpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggdm9pZCAqLAl0aW1lcgkpCisJCV9fZmllbGQoIHZvaWQgKiwJaHJ0aW1lcgkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT50aW1lcgk9IHRpbWVyOworCQlfX2VudHJ5LT5ocnRpbWVyCT0gaHJ0aW1lcjsKIAkpLAogCi0JVFBfcHJpbnRrKCJocnRpbWVyICVwIiwgX19lbnRyeS0+dGltZXIpCisJVFBfcHJpbnRrKCJocnRpbWVyPSVwIiwgX19lbnRyeS0+aHJ0aW1lcikKICk7CiAKIC8qKgpAQCAtMzAyLDcgKzMwMSw3IEBACiAJCV9fZW50cnktPmludGVydmFsX3VzZWMJPSB2YWx1ZS0+aXRfaW50ZXJ2YWwudHZfdXNlYzsKIAkpLAogCi0JVFBfcHJpbnRrKCJ3aGljaCAlZCwgZXhwaXJlcyAlbHUsIGl0X3ZhbHVlICVsdS4lbHUsIGl0X2ludGVydmFsICVsdS4lbHUiLAorCVRQX3ByaW50aygid2hpY2g9JWQgZXhwaXJlcz0lbHUgaXRfdmFsdWU9JWx1LiVsdSBpdF9pbnRlcnZhbD0lbHUuJWx1IiwKIAkJICBfX2VudHJ5LT53aGljaCwgX19lbnRyeS0+ZXhwaXJlcywKIAkJICBfX2VudHJ5LT52YWx1ZV9zZWMsIF9fZW50cnktPnZhbHVlX3VzZWMsCiAJCSAgX19lbnRyeS0+aW50ZXJ2YWxfc2VjLCBfX2VudHJ5LT5pbnRlcnZhbF91c2VjKQpAQCAtMzMyLDcgKzMzMSw3IEBACiAJCV9fZW50cnktPnBpZAk9IHBpZF9ucihwaWQpOwogCSksCiAKLQkgICAgVFBfcHJpbnRrKCJ3aGljaCAlZCwgcGlkICVkLCBub3cgJWx1IiwgX19lbnRyeS0+d2hpY2gsCisJICAgIFRQX3ByaW50aygid2hpY2g9JWQgcGlkPSVkIG5vdz0lbHUiLCBfX2VudHJ5LT53aGljaCwKIAkJICAgICAgKGludCkgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5ub3cpCiApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93b3JrcXVldWUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oCmluZGV4IGU0NjEyZGIuLmQ2Yzk3NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCi1UUkFDRV9FVkVOVCh3b3JrcXVldWVfaW5zZXJ0aW9uLAorREVDTEFSRV9FVkVOVF9DTEFTUyh3b3JrcXVldWUsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSwKIApAQCAtMzAsMjYgKzMwLDE4IEBACiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCi1UUkFDRV9FVkVOVCh3b3JrcXVldWVfZXhlY3V0aW9uLAorREVGSU5FX0VWRU5UKHdvcmtxdWV1ZSwgd29ya3F1ZXVlX2luc2VydGlvbiwKIAogCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspLAogCi0JVFBfQVJHUyh3cV90aHJlYWQsIHdvcmspLAorCVRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKQorKTsKIAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoY2hhciwJCXRocmVhZF9jb21tLAlUQVNLX0NPTU1fTEVOKQotCQlfX2ZpZWxkKHBpZF90LAkJdGhyZWFkX3BpZCkKLQkJX19maWVsZCh3b3JrX2Z1bmNfdCwJZnVuYykKLQkpLAorREVGSU5FX0VWRU5UKHdvcmtxdWV1ZSwgd29ya3F1ZXVlX2V4ZWN1dGlvbiwKIAotCVRQX2Zhc3RfYXNzaWduKAotCQltZW1jcHkoX19lbnRyeS0+dGhyZWFkX2NvbW0sIHdxX3RocmVhZC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JCV9fZW50cnktPnRocmVhZF9waWQJPSB3cV90aHJlYWQtPnBpZDsKLQkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwotCSksCisJVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwZiIsIF9fZW50cnktPnRocmVhZF9jb21tLAotCQlfX2VudHJ5LT50aHJlYWRfcGlkLCBfX2VudHJ5LT5mdW5jKQorCVRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKQogKTsKIAogLyogVHJhY2UgdGhlIGNyZWF0aW9uIG9mIG9uZSB3b3JrcXVldWUgdGhyZWFkIG9uIGEgY3B1ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBjYzBkOTY2Li5kMWIzZGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTE4LDYgKzE4LDI2IEBACiAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2VfZXZlbnQuaD4KIAorLyoKKyAqIERFQ0xBUkVfRVZFTlRfQ0xBU1MgY2FuIGJlIHVzZWQgdG8gYWRkIGEgZ2VuZXJpYyBmdW5jdGlvbgorICogaGFuZGxlcnMgZm9yIGV2ZW50cy4gVGhhdCBpcywgaWYgYWxsIGV2ZW50cyBoYXZlIHRoZSBzYW1lCisgKiBwYXJhbWV0ZXJzIGFuZCBqdXN0IGhhdmUgZGlzdGluY3QgdHJhY2UgcG9pbnRzLgorICogRWFjaCB0cmFjZXBvaW50IGNhbiBiZSBkZWZpbmVkIHdpdGggREVGSU5FX0VWRU5UIGFuZCB0aGF0CisgKiB3aWxsIG1hcCB0aGUgREVDTEFSRV9FVkVOVF9DTEFTUyB0byB0aGUgdHJhY2Vwb2ludC4KKyAqCisgKiBUUkFDRV9FVkVOVCBpcyBhIG9uZSB0byBvbmUgbWFwcGluZyBiZXR3ZWVuIHRyYWNlcG9pbnQgYW5kIHRlbXBsYXRlLgorICovCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQobmFtZSwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpIFwKKwlERUNMQVJFX0VWRU5UX0NMQVNTKG5hbWUsCQkJICAgICAgIFwKKwkJCSAgICAgUEFSQU1TKHByb3RvKSwJCSAgICAgICBcCisJCQkgICAgIFBBUkFNUyhhcmdzKSwJCSAgICAgICBcCisJCQkgICAgIFBBUkFNUyh0c3RydWN0KSwJCSAgICAgICBcCisJCQkgICAgIFBBUkFNUyhhc3NpZ24pLAkJICAgICAgIFwKKwkJCSAgICAgUEFSQU1TKHByaW50KSk7CQkgICAgICAgXAorCURFRklORV9FVkVOVChuYW1lLCBuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpOworCisKICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCXR5cGUJaXRlbTsKIApAQCAtMzYsMTUgKzU2LDIxIEBACiAjdW5kZWYgVFBfU1RSVUNUX19lbnRyeQogI2RlZmluZSBUUF9TVFJVQ1RfX2VudHJ5KGFyZ3MuLi4pIGFyZ3MKIAotI3VuZGVmIFRSQUNFX0VWRU5UCi0jZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCi0Jc3RydWN0IGZ0cmFjZV9yYXdfIyNuYW1lIHsJCQkJXAotCQlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OwkJCVwKLQkJdHN0cnVjdAkJCQkJCVwKLQkJY2hhcgkJCV9fZGF0YVswXTsJCVwKLQl9OwkJCQkJCQlcCisjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUworI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNuYW1lIHsJCQkJCVwKKwkJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsJCQkJXAorCQl0c3RydWN0CQkJCQkJCVwKKwkJY2hhcgkJCV9fZGF0YVswXTsJCQlcCisJfTsKKyN1bmRlZiBERUZJTkVfRVZFTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNuYW1lCiAKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKKwlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKwogI3VuZGVmIF9fY3BwYXJnCiAjZGVmaW5lIF9fY3BwYXJnKGFyZy4uLikgYXJnCiAKQEAgLTg5LDEyICsxMTUsMTkgQEAKICN1bmRlZiBfX3N0cmluZwogI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKIAotI3VuZGVmIFRSQUNFX0VWRU5UCi0jZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQkJXAorI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAogCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXyMjY2FsbCB7CQkJCVwKIAkJdHN0cnVjdDsJCQkJCQlcCiAJfTsKIAorI3VuZGVmIERFRklORV9FVkVOVAorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQorCisjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCisjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCisJREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCisKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCiAvKgpAQCAtMTIwLDkgKzE1MywxMCBAQAogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJXAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCVwKIAkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLCBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSkpOwlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSksCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKHR5cGUpKTsJXAogCWlmICghcmV0KQkJCQkJCQlcCiAJCXJldHVybiAwOwogCkBAIC0xMzIsMTkgKzE2NiwyMSBAQAogI3VuZGVmIF9fYXJyYXkKICNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQkJXAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCQlcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCiAJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pKTsJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gMDsKIAogI3VuZGVmIF9fZHluYW1pY19hcnJheQogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6X19kYXRhX2xvYyAiICN0eXBlICJbXSAiICNpdGVtICI7XHQiXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCSAgICAgICBcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAkgICAgICAgXAogCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwJICAgICAgIFwKIAkJCQkJX19kYXRhX2xvY18jI2l0ZW0pLAkJICAgICAgIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5fX2RhdGFfbG9jXyMjaXRlbSkpOyBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKIAlpZiAoIXJldCkJCQkJCQkJICAgICAgIFwKIAkJcmV0dXJuIDA7CiAKQEAgLTE1OSw3ICsxOTUsNyBAQAogI3VuZGVmIF9fZ2V0X3N0cgogCiAjdW5kZWYgVFBfcHJpbnRrCi0jZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICIlcywgJXNcbiIsICNmbXQsIF9fc3RyaW5naWZ5KGFyZ3MpCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiVzXCIsICVzXG4iLCBmbXQsIF9fc3RyaW5naWZ5KGFyZ3MpCiAKICN1bmRlZiBUUF9mYXN0X2Fzc2lnbgogI2RlZmluZSBUUF9mYXN0X2Fzc2lnbihhcmdzLi4uKSBhcmdzCkBAIC0xNjcsMTcgKzIwMyw1MCBAQAogI3VuZGVmIFRQX3BlcmZfYXNzaWduCiAjZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCiAKLSN1bmRlZiBUUkFDRV9FVkVOVAotI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgZnVuYywgcHJpbnQpCQlcCisjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUworI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJXAogc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAotCQkgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCitmdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCVwKKwkJCSAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAogCWludCByZXQgPSAwOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdHN0cnVjdDsJCQkJCQkJXAogCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCisJCSAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgcmV0ID0gMDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyNjYWxsKHVudXNlZCwgcyk7CQkJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyN1bmRlZiBERUZJTkVfRVZFTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykKKworI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAorI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKK3N0YXRpYyBpbnQJCQkJCQkJCVwKK2Z0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKKwkJICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorewkJCQkJCQkJCVwKKwlpbnQgcmV0ID0gMDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyN0ZW1wbGF0ZSh1bnVzZWQsIHMpOwkJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiByZXQ7CQkJCQkJXAorCQkJCQkJCQkJXAogCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldDsJCQkJCQkJXApAQCAtMjUyLDEzICszMjEsNTUgQEAKIAkJZnRyYWNlX3ByaW50X3N5bWJvbHNfc2VxKHAsIHZhbHVlLCBzeW1ib2xzKTsJCVwKIAl9KQogCi0jdW5kZWYgVFJBQ0VfRVZFTlQKLSNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCQlcCisjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUworI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitmdHJhY2VfcmF3X291dHB1dF9pZF8jI2NhbGwoaW50IGV2ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLAkJXAorCQkJICAgIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICpmaWVsZDsJCQkJXAorCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CQkJCQlcCisJc3RydWN0IHRyYWNlX3NlcSAqcDsJCQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWVudHJ5ID0gaXRlci0+ZW50OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoZW50cnktPnR5cGUgIT0gZXZlbnRfaWQpIHsJCQkJCVwKKwkJV0FSTl9PTl9PTkNFKDEpOwkJCQkJXAorCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJZmllbGQgPSAodHlwZW9mKGZpZWxkKSllbnRyeTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlwID0gJmdldF9jcHVfdmFyKGZ0cmFjZV9ldmVudF9zZXEpOwkJCQlcCisJdHJhY2Vfc2VxX2luaXQocCk7CQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAiLCBuYW1lKTsJCQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIHByaW50KTsJCQlcCisJcHV0X2NwdSgpOwkJCQkJCQlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsJCQkJCVwKK30KKworI3VuZGVmIERFRklORV9FVkVOVAorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQkJCVwKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK2Z0cmFjZV9yYXdfb3V0cHV0XyMjbmFtZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gZnRyYWNlX3Jhd19vdXRwdXRfaWRfIyN0ZW1wbGF0ZShldmVudF8jI25hbWUuaWQsCQlcCisJCQkJCSAgICAgICAjbmFtZSwgaXRlciwgZmxhZ3MpOwlcCit9CisKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncywgcHJpbnQpCQlcCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF8jI2NhbGwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CQkJCVwKLQlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmZpZWxkOwkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyN0ZW1wbGF0ZSAqZmllbGQ7CQkJCVwKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwkJCQkJXAogCXN0cnVjdCB0cmFjZV9zZXEgKnA7CQkJCQkJXAogCWludCByZXQ7CQkJCQkJCVwKQEAgLTI3NCwxNCArMzg1LDE2IEBACiAJCQkJCQkJCQlcCiAJcCA9ICZnZXRfY3B1X3ZhcihmdHJhY2VfZXZlbnRfc2VxKTsJCQkJXAogCXRyYWNlX3NlcV9pbml0KHApOwkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICNjYWxsICI6ICIgcHJpbnQpOwkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogIiwgI2NhbGwpOwkJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgcHJpbnQpOwkJCVwKIAlwdXRfY3B1KCk7CQkJCQkJCVwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQkJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwkJCQkJXAogfQotCQorCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogI3VuZGVmIF9fZmllbGRfZXh0CkBAIC0zMTUsOCArNDI4LDggQEAKICN1bmRlZiBfX3N0cmluZwogI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKIAotI3VuZGVmIFRSQUNFX0VWRU5UCi0jZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJCVwKKyN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCisjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCiBzdGF0aWMgaW50CQkJCQkJCQlcCiBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQlcCiB7CQkJCQkJCQkJXApAQCAtMzMyLDYgKzQ0NSwxMyBAQAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KIAorI3VuZGVmIERFRklORV9FVkVOVAorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQorCisjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCisjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCisJREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCisKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCiAvKgpAQCAtMzU4LDEwICs0NzgsMTAgQEAKIAlfX2RhdGFfc2l6ZSArPSAobGVuKSAqIHNpemVvZih0eXBlKTsKIAogI3VuZGVmIF9fc3RyaW5nCi0jZGVmaW5lIF9fc3RyaW5nKGl0ZW0sIHNyYykgX19keW5hbWljX2FycmF5KGNoYXIsIGl0ZW0sIHN0cmxlbihzcmMpICsgMSkgICAgICAgXAorI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCBzdHJsZW4oc3JjKSArIDEpCiAKLSN1bmRlZiBUUkFDRV9FVkVOVAotI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJCVwKKyN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCisjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIHN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgKl9fZGF0YV9vZmZzZXRzLCBwcm90bykgICAgICAgXAogewkJCQkJCQkJCVwKQEAgLTM3Myw2ICs0OTMsMTMgQEAKIAlyZXR1cm4gX19kYXRhX3NpemU7CQkJCQkJXAogfQogCisjdW5kZWYgREVGSU5FX0VWRU5UCisjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MpCisKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKKwlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKwogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQpAQCAtMzk0LDIxICs1MjEsMjggQEAKICAqCiAgKi8KIAotI3VuZGVmIFRSQUNFX0VWRU5UCi0jZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQkJXAorI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkKKworI3VuZGVmIERFRklORV9FVkVOVAorI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90byk7CQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjbmFtZShwcm90byk7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCh2b2lkKQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAogewkJCQkJCQkJCVwKLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CQlcCisJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjbmFtZShmdHJhY2VfcHJvZmlsZV8jI25hbWUpOwkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNjYWxsKHZvaWQpCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKIHsJCQkJCQkJCQlcCi0JdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKTsJCQlcCisJdW5yZWdpc3Rlcl90cmFjZV8jI25hbWUoZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKTsJCQlcCiB9CiAKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKKwlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKwogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKICNlbmRpZgpAQCAtNDIzLDcgKzU1Nyw3IEBACiAgKglldmVudF90cmFjZV9wcmludGsoX1JFVF9JUF8sICI8Y2FsbD46ICIgPGZtdD4pOwogICogfQogICoKLSAqIHN0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4oc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpCiAgKiB7CiAgKglpbnQgcmV0OwogICoKQEAgLTQzNCw3ICs1NjgsNyBAQAogICoJcmV0dXJuIHJldDsKICAqIH0KICAqCi0gKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHZvaWQpCisgKiBzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX2V2ZW50XzxjYWxsPik7CiAgKiB9CkBAIC00NjksNyArNjAzLDcgQEAKICAqCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7CiAgKiB9CiAgKgotICogc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF88Y2FsbD4odm9pZCkKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJaW50IHJldDsKICAqCkBAIC00ODAsNyArNjE0LDcgQEAKICAqCXJldHVybiByZXQ7CiAgKiB9CiAgKgotICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkKICAqIHsKICAqCXVucmVnaXN0ZXJfdHJhY2VfPGNhbGw+KGZ0cmFjZV9yYXdfZXZlbnRfPGNhbGw+KTsKICAqIH0KQEAgLTQ4OSw3ICs2MjMsNyBAQAogICoJLnRyYWNlCQkJPSBmdHJhY2VfcmF3X291dHB1dF88Y2FsbD4sIDwtLSBzdGFnZSAyCiAgKiB9OwogICoKLSAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XzxjYWxsPih2b2lkKQorICogc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfPGNhbGw+KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQogICogewogICoJaW50IGlkOwogICoKQEAgLTU0NywxNSArNjgxLDEzIEBACiAjZGVmaW5lIF9fYXNzaWduX3N0cihkc3QsIHNyYykJCQkJCQlcCiAJc3RyY3B5KF9fZ2V0X3N0cihkc3QpLCBzcmMpOwogCi0jdW5kZWYgVFJBQ0VfRVZFTlQKLSNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCQlcCisjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUworI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjY2FsbDsJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJCVwKK3N0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwgXAorCQkJCSAgICAgICBwcm90bykJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XAotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF8jI2NhbGw7CQlcCiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsJCQkJCVwKQEAgLTU2OSw3ICs3MDEsNyBAQAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJCQkJCQkJCQlcCiAJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwJCVwKLQkJCQkgZXZlbnRfIyNjYWxsLmlkLAkJCVwKKwkJCQkgZXZlbnRfY2FsbC0+aWQsCQkJXAogCQkJCSBzaXplb2YoKmVudHJ5KSArIF9fZGF0YV9zaXplLAkJXAogCQkJCSBpcnFfZmxhZ3MsIHBjKTsJCQlcCiAJaWYgKCFldmVudCkJCQkJCQkJXApAQCAtNTg0LDkgKzcxNiwxNyBAQAogCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGV2ZW50X2NhbGwsIGVudHJ5LCBldmVudCkpIFwKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwJCVwKIAkJCQkJCSAgZXZlbnQsIGlycV9mbGFncywgcGMpOyBcCit9CisKKyN1bmRlZiBERUZJTkVfRVZFTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQkJXAorewkJCQkJCQkJCVwKKwlmdHJhY2VfcmF3X2V2ZW50X2lkXyMjdGVtcGxhdGUoJmV2ZW50XyMjY2FsbCwgYXJncyk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwodm9pZCAqcHRyKQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKIHsJCQkJCQkJCQlcCiAJaW50IHJldDsJCQkJCQkJXAogCQkJCQkJCQkJXApAQCAtNTk3LDcgKzczNyw3IEBACiAJcmV0dXJuIHJldDsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHZvaWQgKnB0cikJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCiB7CQkJCQkJCQkJXAogCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCkBAIC02MDYsNyArNzQ2LDcgQEAKIAkudHJhY2UJCQk9IGZ0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbCwJCVwKIH07CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCiB7CQkJCQkJCQkJXAogCWludCBpZDsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYxNiw3ICs3NTYsMzYgQEAKIAlldmVudF8jI2NhbGwuaWQgPSBpZDsJCQkJCQlcCiAJSU5JVF9MSVNUX0hFQUQoJmV2ZW50XyMjY2FsbC5maWVsZHMpOwkJCQlcCiAJcmV0dXJuIDA7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCit9CisKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKKwlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKworI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCisKKyN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCisjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCisKKyN1bmRlZiBERUZJTkVfRVZFTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCisJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCisJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKKwkuZXZlbnQJCQk9ICZmdHJhY2VfZXZlbnRfdHlwZV8jI2NhbGwsCQlcCisJLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwsCQlcCisJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAorCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKKwkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI3RlbXBsYXRlLAkJXAorCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjdGVtcGxhdGUsCVwKKwlfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCit9CisKKyN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKKyNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncywgcHJpbnQpCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKQEAgLTYyOCw3ICs3OTcsNyBAQAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCiAJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKLQkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCisJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KIApAQCAtNjQ2LDYgKzgxNSw3IEBACiAgKglzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfPGNhbGw+OwogICoJZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CiAgKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OworICoJc3RydWN0IHBlcmZfdHJhY2VfYnVmICp0cmFjZV9idWY7CiAgKgl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CiAgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKICAqCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwpAQCAtNjcwLDE0ICs4NDAsMjUgQEAKICAqCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogICoKICAqCWlmIChpbl9ubWkoKSkKLSAqCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworICoJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwogICoJZWxzZQotICoJCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmKTsKKyAqCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwogICoKLSAqCWlmICghcmF3X2RhdGEpCisgKglpZiAoIXRyYWNlX2J1ZikKICAqCQlnb3RvIGVuZDsKICAqCi0gKglyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBfX2NwdSk7CisgKgl0cmFjZV9idWYgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKKyAqCisgKiAJLy8gQXZvaWQgcmVjdXJzaW9uIGZyb20gcGVyZiB0aGF0IGNvdWxkIG1lc3MgdXAgdGhlIGJ1ZmZlcgorICogCWlmICh0cmFjZV9idWYtPnJlY3Vyc2lvbisrKQorICoJCWdvdG8gZW5kX3JlY3Vyc2lvbjsKKyAqCisgKiAJcmF3X2RhdGEgPSB0cmFjZV9idWYtPmJ1ZjsKKyAqCisgKgkvLyBNYWtlIHJlY3Vyc2lvbiB1cGRhdGUgdmlzaWJsZSBiZWZvcmUgZW50ZXJpbmcgcGVyZl90cF9ldmVudAorICoJLy8gc28gdGhhdCB3ZSBwcm90ZWN0IGZyb20gcGVyZiByZWN1cnNpb25zLgorICoKKyAqCWJhcnJpZXIoKTsKICAqCiAgKgkvL3plcm8gZGVhZCBieXRlcyBmcm9tIGFsaWdubWVudCB0byBhdm9pZCBzdGFjayBsZWFrIHRvIHVzZXJzcGFjZToKICAqCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKQEAgLTcwNCwyMSArODg1LDI2IEBACiAjdW5kZWYgX19wZXJmX2NvdW50CiAjZGVmaW5lIF9fcGVyZl9jb3VudChjKSBfX2NvdW50ID0gKGMpCiAKLSN1bmRlZiBUUkFDRV9FVkVOVAotI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCQkJXAorI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorc3RhdGljIHZvaWQJCQkJCQkJCVwKK2Z0cmFjZV9wcm9maWxlX3RlbXBsXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwsCVwKKwkJCSAgICBwcm90bykJCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsIF9fbWF5YmVfdW51c2VkIF9fZGF0YV9vZmZzZXRzO1wKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwkJXAotCWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50LCB1NjQsIHU2NCwgdm9pZCAqLCBpbnQpOwlcCisJZXh0ZXJuIGludCBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpOwkJXAorCWV4dGVybiB2b2lkIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpOwlcCisJZXh0ZXJuIHZvaWQgcGVyZl90cF9ldmVudChpbnQsIHU2NCwgdTY0LCB2b2lkICosIGludCk7CQlcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICplbnRyeTsJCQkJXAogCXU2NCBfX2FkZHIgPSAwLCBfX2NvdW50ID0gMTsJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsJCQkJCVwKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsJCQkJCVwKIAlpbnQgX19lbnRyeV9zaXplOwkJCQkJCVwKIAlpbnQgX19kYXRhX3NpemU7CQkJCQkJXAorCWNoYXIgKnRyYWNlX2J1ZjsJCQkJCQlcCiAJY2hhciAqcmF3X2RhdGE7CQkJCQkJCVwKIAlpbnQgX19jcHU7CQkJCQkJCVwKKwlpbnQgcmN0eDsJCQkJCQkJXAogCWludCBwYzsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlwYyA9IHByZWVtcHRfY291bnQoKTsJCQkJCQlcCkBAIC03MzMsMTcgKzkxOSwyMiBAQAogCQlyZXR1cm47CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwkJCQkJXAorCQkJCQkJCQkJXAorCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7CQkJXAorCWlmIChyY3R4IDwgMCkJCQkJCQkJXAorCQlnb3RvIGVuZF9yZWN1cnNpb247CQkJCQlcCisJCQkJCQkJCQlcCiAJX19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CQkJCQlcCiAJCQkJCQkJCQlcCiAJaWYgKGluX25taSgpKQkJCQkJCQlcCi0JCXJhd19kYXRhID0gcmN1X2RlcmVmZXJlbmNlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CQlcCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwlcCiAJZWxzZQkJCQkJCQkJXAotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zik7CQlcCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CQlcCiAJCQkJCQkJCQlcCi0JaWYgKCFyYXdfZGF0YSkJCQkJCQkJXAorCWlmICghdHJhY2VfYnVmKQkJCQkJCQlcCiAJCWdvdG8gZW5kOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHJhd19kYXRhLCBfX2NwdSk7CQkJXAorCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7CQkJXAogCQkJCQkJCQkJXAogCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsJCVwKIAllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilyYXdfZGF0YTsJCQlcCkBAIC03NTksMTAgKzk1MCwyNSBAQAogCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCiAJCQkJCQkJCQlcCiBlbmQ6CQkJCQkJCQkJXAorCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CQkJXAorZW5kX3JlY3Vyc2lvbjoJCQkJCQkJCVwKIAlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwkJCQkJXAogCQkJCQkJCQkJXAogfQogCisjdW5kZWYgREVGSU5FX0VWRU5UCisjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQkJXAorewkJCQkJCQkJXAorCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF8jI2NhbGw7CVwKKwkJCQkJCQkJXAorCWZ0cmFjZV9wcm9maWxlX3RlbXBsXyMjdGVtcGxhdGUoZXZlbnRfY2FsbCwgYXJncyk7CVwKK30KKworI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAorI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJXAorCURFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKICNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3Bvd2VyLmggYi9pbmNsdWRlL3RyYWNlL3Bvd2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjA0NjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS90cmFjZS9wb3dlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfVFJBQ0VfUE9XRVJfSAotI2RlZmluZSBfVFJBQ0VfUE9XRVJfSAotCi0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+Ci0KLWVudW0gewotCVBPV0VSX05PTkUgPSAwLAotCVBPV0VSX0NTVEFURSA9IDEsCi0JUE9XRVJfUFNUQVRFID0gMiwKLX07Ci0KLXN0cnVjdCBwb3dlcl90cmFjZSB7Ci0Ja3RpbWVfdAkJCXN0YW1wOwotCWt0aW1lX3QJCQllbmQ7Ci0JaW50CQkJdHlwZTsKLQlpbnQJCQlzdGF0ZTsKLX07Ci0KLURFQ0xBUkVfVFJBQ0UocG93ZXJfc3RhcnQsCi0JVFBfUFJPVE8oc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCi0JICAgICAgVFBfQVJHUyhpdCwgdHlwZSwgc3RhdGUpKTsKLQotREVDTEFSRV9UUkFDRShwb3dlcl9tYXJrLAotCVRQX1BST1RPKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAotCSAgICAgIFRQX0FSR1MoaXQsIHR5cGUsIHN0YXRlKSk7Ci0KLURFQ0xBUkVfVFJBQ0UocG93ZXJfZW5kLAotCVRQX1BST1RPKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpLAotCSAgICAgIFRQX0FSR1MoaXQpKTsKLQotI2VuZGlmIC8qIF9UUkFDRV9QT1dFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaCBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCmluZGV4IDVkYzI4M2IuLjk2MWZkYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCkBAIC0xMiw1MSArMTIsNDggQEAKICAqIEEgc3lzY2FsbCBlbnRyeSBpbiB0aGUgZnRyYWNlIHN5c2NhbGxzIGFycmF5LgogICoKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzeXNjYWxsCisgKiBAc3lzY2FsbF9ucjogbnVtYmVyIG9mIHRoZSBzeXNjYWxsCiAgKiBAbmJfYXJnczogbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgdGFrZXMKICAqIEB0eXBlczogbGlzdCBvZiB0eXBlcyBhcyBzdHJpbmdzCiAgKiBAYXJnczogbGlzdCBvZiBhcmdzIGFzIHN0cmluZ3MgKGFyZ3NbaV0gbWF0Y2hlcyB0eXBlc1tpXSkKLSAqIEBlbnRlcl9pZDogYXNzb2NpYXRlZCBmdHJhY2UgZW50ZXIgZXZlbnQgaWQKLSAqIEBleGl0X2lkOiBhc3NvY2lhdGVkIGZ0cmFjZSBleGl0IGV2ZW50IGlkCiAgKiBAZW50ZXJfZXZlbnQ6IGFzc29jaWF0ZWQgc3lzY2FsbF9lbnRlciB0cmFjZSBldmVudAogICogQGV4aXRfZXZlbnQ6IGFzc29jaWF0ZWQgc3lzY2FsbF9leGl0IHRyYWNlIGV2ZW50CiAgKi8KIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIHsKIAljb25zdCBjaGFyCSpuYW1lOworCWludAkJc3lzY2FsbF9ucjsKIAlpbnQJCW5iX2FyZ3M7CiAJY29uc3QgY2hhcgkqKnR5cGVzOwogCWNvbnN0IGNoYXIJKiphcmdzOwotCWludAkJZW50ZXJfaWQ7Ci0JaW50CQlleGl0X2lkOwogCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICplbnRlcl9ldmVudDsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV4aXRfZXZlbnQ7CiB9OwogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKTsKLWV4dGVybiBpbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpOwotdm9pZCBzZXRfc3lzY2FsbF9lbnRlcl9pZChpbnQgbnVtLCBpbnQgaWQpOwotdm9pZCBzZXRfc3lzY2FsbF9leGl0X2lkKGludCBudW0sIGludCBpZCk7Ci1leHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50IGV2ZW50X3N5c2NhbGxfZW50ZXI7Ci1leHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50IGV2ZW50X3N5c2NhbGxfZXhpdDsKLWV4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIodm9pZCAqcHRyKTsKLWV4dGVybiB2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIodm9pZCAqcHRyKTsKLWV4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCh2b2lkICpwdHIpOwotZXh0ZXJuIHZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0KHZvaWQgKnB0cik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpOworZXh0ZXJuIGludCBpbml0X3N5c2NhbGxfdHJhY2Uoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKKwogZXh0ZXJuIGludCBzeXNjYWxsX2VudGVyX2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCiAJCQkJc3RydWN0IHRyYWNlX3NlcSAqcyk7CiBleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAogCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOwogZXh0ZXJuIGludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGV4dGVybiBpbnQgc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiB2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOworZXh0ZXJuIHZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitleHRlcm4gaW50CitmdHJhY2VfZm9ybWF0X3N5c2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpOwogZW51bSBwcmludF9saW5lX3QgcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCi1pbnQgcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKTsKLXZvaWQgdW5yZWdfcHJvZl9zeXNjYWxsX2VudGVyKGNoYXIgKm5hbWUpOwotaW50IHJlZ19wcm9mX3N5c2NhbGxfZXhpdChjaGFyICpuYW1lKTsKLXZvaWQgdW5yZWdfcHJvZl9zeXNjYWxsX2V4aXQoY2hhciAqbmFtZSk7CitpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK3ZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitpbnQgcHJvZl9zeXNleGl0X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwordm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDA5YzVjNjQuLjllZTc3ODIgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgQVVESVRTWVNDQUxMCiAJYm9vbCAiRW5hYmxlIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBQUEM2NCB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjR8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjQgfHwgU1VQRVJIKQogCWRlZmF1bHQgeSBpZiBTRUNVUklUWV9TRUxJTlVYCiAJaGVscAogCSAgRW5hYmxlIGxvdy1vdmVyaGVhZCBzeXN0ZW0tY2FsbCBhdWRpdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0CkBAIC0zMzQsNiArMzM0LDE1IEBACiAJICBpcyBhbHNvIHJlcXVpcmVkLiAgSXQgYWxzbyBzY2FsZXMgZG93biBuaWNlbHkgdG8KIAkgIHNtYWxsZXIgc3lzdGVtcy4KIAorY29uZmlnIFRJTllfUkNVCisJYm9vbCAiVVAtb25seSBzbWFsbC1tZW1vcnktZm9vdHByaW50IFJDVSIKKwlkZXBlbmRzIG9uICFTTVAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gdGhhdCBpcworCSAgZGVzaWduZWQgZm9yIFVQIHN5c3RlbXMgZnJvbSB3aGljaCByZWFsLXRpbWUgcmVzcG9uc2UKKwkgIGlzIG5vdCByZXF1aXJlZC4gIFRoaXMgb3B0aW9uIGdyZWF0bHkgcmVkdWNlcyB0aGUKKwkgIG1lbW9yeSBmb290cHJpbnQgb2YgUkNVLgorCiBlbmRjaG9pY2UKIAogY29uZmlnIFJDVV9UUkFDRQpAQCAtNjA2LDcgKzYxNSw3IEBACiAJYm9vbAogCiBjb25maWcgU1lTRlNfREVQUkVDQVRFRF9WMgotCWJvb2wgInJlbW92ZSBzeXNmcyBmZWF0dXJlcyB3aGljaCBtYXkgY29uZnVzZSBvbGQgdXNlcnNwYWNlIHRvb2xzIgorCWJvb2wgImVuYWJsZSBkZXByZWNhdGVkIHN5c2ZzIGZlYXR1cmVzIHdoaWNoIG1heSBjb25mdXNlIG9sZCB1c2Vyc3BhY2UgdG9vbHMiCiAJZGVwZW5kcyBvbiBTWVNGUwogCWRlZmF1bHQgbgogCXNlbGVjdCBTWVNGU19ERVBSRUNBVEVECkBAIC05MzcsNyArOTQ2LDcgQEAKIAkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdmFyaW91cyBwZXJmb3JtYW5jZSBldmVudHMgcHJvdmlkZWQKIAkgIGJ5IHNvZnR3YXJlIGFuZCBoYXJkd2FyZS4KIAotCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWxkLWluIG9yIHZpYSB0aGUKKwkgIFNvZnR3YXJlIGV2ZW50cyBhcmUgc3VwcG9ydGVkIGVpdGhlciBidWlsdC1pbiBvciB2aWEgdGhlCiAJICB1c2Ugb2YgZ2VuZXJpYyB0cmFjZXBvaW50cy4KIAogCSAgTW9zdCBtb2Rlcm4gQ1BVcyBzdXBwb3J0IHBlcmZvcm1hbmNlIGV2ZW50cyB2aWEgcGVyZm9ybWFuY2UKQEAgLTk0OSw3ICs5NTgsNyBAQAogCSAgdXNlZCB0byBwcm9maWxlIHRoZSBjb2RlIHRoYXQgcnVucyBvbiB0aGF0IENQVS4KIAogCSAgVGhlIExpbnV4IFBlcmZvcm1hbmNlIEV2ZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZgotCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGNldmVudCBhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCisJICB0aGVzZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgZXZlbnQgY2FwYWJpbGl0aWVzLCBhdmFpbGFibGUgdmlhIGEKIAkgIHN5c3RlbSBjYWxsIGFuZCB1c2VkIGJ5IHRoZSAicGVyZiIgdXRpbGl0eSBpbiB0b29scy9wZXJmLy4gSXQKIAkgIHByb3ZpZGVzIHBlciB0YXNrIGFuZCBwZXIgQ1BVIGNvdW50ZXJzLCBhbmQgaXQgcHJvdmlkZXMgZXZlbnQKIAkgIGNhcGFiaWxpdGllcyBvbiB0b3Agb2YgdGhvc2UuCkBAIC0xMDk4LDYgKzExMDcsMTYgQEAKIAogCSAgU2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dC4KIAorY29uZmlnIFNMT1dfV09SS19ERUJVRworCWJvb2wgIlNsb3cgd29yayBkZWJ1Z2dpbmcgdGhyb3VnaCBkZWJ1Z2ZzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU0xPV19XT1JLICYmIERFQlVHX0ZTCisJaGVscAorCSAgRGlzcGxheSB0aGUgY29udGVudHMgb2YgdGhlIHNsb3cgd29yayBydW4gcXVldWUgdGhyb3VnaCBkZWJ1Z2ZzLAorCSAgaW5jbHVkaW5nIGl0ZW1zIGN1cnJlbnRseSBleGVjdXRpbmcuCisKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQuCisKIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVApAQCAtMTIxMCwzICsxMjI5LDQgQEAKIGNvbmZpZyBQUkVFTVBUX05PVElGSUVSUwogCWJvb2wKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5sb2NrcyIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNTk4OGRlYi4uNDA1MWQ3NSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCiAvKgogICogVW5rbm93biBib290IG9wdGlvbnMgZ2V0IGhhbmRlZCB0byBpbml0LCB1bmxlc3MgdGhleSBsb29rIGxpa2UKLSAqIGZhaWxlZCBwYXJhbWV0ZXJzCisgKiB1bnVzZWQgcGFyYW1ldGVycyAobW9kcHJvYmUgd2lsbCBmaW5kIHRoZW0gaW4gL3Byb2MvY21kbGluZSkuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHVua25vd25fYm9vdG9wdGlvbihjaGFyICpwYXJhbSwgY2hhciAqdmFsKQogewpAQCAtMjcyLDE0ICsyNzIsOSBAQAogCWlmIChvYnNvbGV0ZV9jaGVja3NldHVwKHBhcmFtKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIFByZWVtcHRpdmUgbWFpbnRlbmFuY2UgZm9yICJ3aHkgZGlkbid0IG15IG1pc3NwZWxsZWQgY29tbWFuZAotCSAqIGxpbmUgd29yaz8iCi0JICovCi0JaWYgKHN0cmNocihwYXJhbSwgJy4nKSAmJiAoIXZhbCB8fCBzdHJjaHIocGFyYW0sICcuJykgPCB2YWwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBib290IG9wdGlvbiBgJXMnOiBpZ25vcmluZ1xuIiwgcGFyYW0pOworCS8qIFVudXNlZCBtb2R1bGUgcGFyYW1ldGVyLiAqLworCWlmIChzdHJjaHIocGFyYW0sICcuJykgJiYgKCF2YWwgfHwgc3RyY2hyKHBhcmFtLCAnLicpIDwgdmFsKSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJaWYgKHBhbmljX2xhdGVyKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmxvY2tzIGIva2VybmVsL0tjb25maWcubG9ja3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjOTJmYgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9LY29uZmlnLmxvY2tzCkBAIC0wLDAgKzEsMjAyIEBACisjCisjIFRoZSBBUkNIX0lOTElORSBmb28gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2VsZWN0IGlnbm9yZXMgImRlcGVuZHMgb24iCisjCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLCisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0JICisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0lSUQorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFCisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0sKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9TUElOX1VOTE9DS19CSAorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUQorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUKKwlib29sCisKKworY29uZmlnIEFSQ0hfSU5MSU5FX1JFQURfVFJZTE9DSworCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1JFQURfTE9DSworCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1JFQURfTE9DS19CSAorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1JFQURfTE9DS19JUlEKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRQorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1JFQURfVU5MT0NLCisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfUkVBRF9VTkxPQ0tfQkgKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9SRUFEX1VOTE9DS19JUlEKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFCisJYm9vbAorCisKK2NvbmZpZyBBUkNIX0lOTElORV9XUklURV9UUllMT0NLCisJYm9vbAorCitjb25maWcgQVJDSF9JTkxJTkVfV1JJVEVfTE9DSworCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1dSSVRFX0xPQ0tfQkgKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9XUklURV9MT0NLX0lSUQorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRQorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DSworCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19CSAorCWJvb2wKKworY29uZmlnIEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEKKwlib29sCisKK2NvbmZpZyBBUkNIX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRQorCWJvb2wKKworIworIyBsb2NrXyogZnVuY3Rpb25zIGFyZSBpbmxpbmVkIHdoZW46CisjICAgLSBERUJVR19TUElOTE9DSz1uIGFuZCBHRU5FUklDX0xPQ0tCUkVBSz1uIGFuZCBBUkNIX0lOTElORV8qTE9DSz15CisjCisjIHRyeWxvY2tfKiBmdW5jdGlvbnMgYXJlIGlubGluZWQgd2hlbjoKKyMgICAtIERFQlVHX1NQSU5MT0NLPW4gYW5kIEFSQ0hfSU5MSU5FXypMT0NLPXkKKyMKKyMgdW5sb2NrIGFuZCB1bmxvY2tfaXJxIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCB3aGVuOgorIyAgIC0gREVCVUdfU1BJTkxPQ0s9biBhbmQgQVJDSF9JTkxJTkVfKkxPQ0s9eQorIyAgb3IKKyMgICAtIERFQlVHX1NQSU5MT0NLPW4gYW5kIFBSRUVNUFQ9bgorIworIyB1bmxvY2tfYmggYW5kIHVubG9ja19pcnFyZXN0b3JlIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCB3aGVuOgorIyAgIC0gREVCVUdfU1BJTkxPQ0s9biBhbmQgQVJDSF9JTkxJTkVfKkxPQ0s9eQorIworCitjb25maWcgSU5MSU5FX1NQSU5fVFJZTE9DSworCWRlZl9ib29sICFERUJVR19TUElOTE9DSyAmJiBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKKworY29uZmlnIElOTElORV9TUElOX1RSWUxPQ0tfQkgKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICisKK2NvbmZpZyBJTkxJTkVfU1BJTl9MT0NLCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICFHRU5FUklDX0xPQ0tCUkVBSyAmJiBBUkNIX0lOTElORV9TUElOX0xPQ0sKKworY29uZmlnIElOTElORV9TUElOX0xPQ0tfQkgKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgIUdFTkVSSUNfTE9DS0JSRUFLICYmIFwKKwkJIEFSQ0hfSU5MSU5FX1NQSU5fTE9DS19CSAorCitjb25maWcgSU5MSU5FX1NQSU5fTE9DS19JUlEKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgIUdFTkVSSUNfTE9DS0JSRUFLICYmIFwKKwkJIEFSQ0hfSU5MSU5FX1NQSU5fTE9DS19JUlEKKworY29uZmlnIElOTElORV9TUElOX0xPQ0tfSVJRU0FWRQorCWRlZl9ib29sICFERUJVR19TUElOTE9DSyAmJiAhR0VORVJJQ19MT0NLQlJFQUsgJiYgXAorCQkgQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUKKworY29uZmlnIElOTElORV9TUElOX1VOTE9DSworCWRlZl9ib29sICFERUJVR19TUElOTE9DSyAmJiAoIVBSRUVNUFQgfHwgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0spCisKK2NvbmZpZyBJTkxJTkVfU1BJTl9VTkxPQ0tfQkgKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfQkgKKworY29uZmlnIElOTElORV9TUElOX1VOTE9DS19JUlEKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgKCFQUkVFTVBUIHx8IEFSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLX0JIKQorCitjb25maWcgSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRQorCisKK2NvbmZpZyBJTkxJTkVfUkVBRF9UUllMT0NLCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmIEFSQ0hfSU5MSU5FX1JFQURfVFJZTE9DSworCitjb25maWcgSU5MSU5FX1JFQURfTE9DSworCWRlZl9ib29sICFERUJVR19TUElOTE9DSyAmJiAhR0VORVJJQ19MT0NLQlJFQUsgJiYgQVJDSF9JTkxJTkVfUkVBRF9MT0NLCisKK2NvbmZpZyBJTkxJTkVfUkVBRF9MT0NLX0JICisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICFHRU5FUklDX0xPQ0tCUkVBSyAmJiBcCisJCSBBUkNIX0lOTElORV9SRUFEX0xPQ0tfQkgKKworY29uZmlnIElOTElORV9SRUFEX0xPQ0tfSVJRCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICFHRU5FUklDX0xPQ0tCUkVBSyAmJiBcCisJCSBBUkNIX0lOTElORV9SRUFEX0xPQ0tfSVJRCisKK2NvbmZpZyBJTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgIUdFTkVSSUNfTE9DS0JSRUFLICYmIFwKKwkJIEFSQ0hfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFCisKK2NvbmZpZyBJTkxJTkVfUkVBRF9VTkxPQ0sKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgKCFQUkVFTVBUIHx8IEFSQ0hfSU5MSU5FX1JFQURfVU5MT0NLKQorCitjb25maWcgSU5MSU5FX1JFQURfVU5MT0NLX0JICisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmIEFSQ0hfSU5MSU5FX1JFQURfVU5MT0NLX0JICisKK2NvbmZpZyBJTkxJTkVfUkVBRF9VTkxPQ0tfSVJRCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICghUFJFRU1QVCB8fCBBUkNIX0lOTElORV9SRUFEX1VOTE9DS19CSCkKKworY29uZmlnIElOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmIEFSQ0hfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUKKworCitjb25maWcgSU5MSU5FX1dSSVRFX1RSWUxPQ0sKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgQVJDSF9JTkxJTkVfV1JJVEVfVFJZTE9DSworCitjb25maWcgSU5MSU5FX1dSSVRFX0xPQ0sKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgIUdFTkVSSUNfTE9DS0JSRUFLICYmIEFSQ0hfSU5MSU5FX1dSSVRFX0xPQ0sKKworY29uZmlnIElOTElORV9XUklURV9MT0NLX0JICisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICFHRU5FUklDX0xPQ0tCUkVBSyAmJiBcCisJCSBBUkNIX0lOTElORV9XUklURV9MT0NLX0JICisKK2NvbmZpZyBJTkxJTkVfV1JJVEVfTE9DS19JUlEKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgIUdFTkVSSUNfTE9DS0JSRUFLICYmIFwKKwkJIEFSQ0hfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRCisKK2NvbmZpZyBJTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmICFHRU5FUklDX0xPQ0tCUkVBSyAmJiBcCisJCSBBUkNIX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUKKworY29uZmlnIElOTElORV9XUklURV9VTkxPQ0sKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgKCFQUkVFTVBUIHx8IEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DSykKKworY29uZmlnIElOTElORV9XUklURV9VTkxPQ0tfQkgKKwlkZWZfYm9vbCAhREVCVUdfU1BJTkxPQ0sgJiYgQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLX0JICisKK2NvbmZpZyBJTkxJTkVfV1JJVEVfVU5MT0NLX0lSUQorCWRlZl9ib29sICFERUJVR19TUElOTE9DSyAmJiAoIVBSRUVNUFQgfHwgQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLX0JIKQorCitjb25maWcgSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFCisJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmIEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFCisKK2NvbmZpZyBNVVRFWF9TUElOX09OX09XTkVSCisJZGVmX2Jvb2wgU01QICYmICFERUJVR19NVVRFWEVTICYmICFIQVZFX0RFRkFVTFRfTk9fU1BJTl9NVVRFWEVTCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYjhkNGNkOC4uOTgyYzUwZSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogQ0ZMQUdTX1JFTU9WRV9ydG11dGV4LWRlYnVnLm8gPSAtcGcKIENGTEFHU19SRU1PVkVfY2dyb3VwLWRlYnVnLm8gPSAtcGcKIENGTEFHU19SRU1PVkVfc2NoZWRfY2xvY2subyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9wZXJmX2V2ZW50Lm8gPSAtcGcKIGVuZGlmCiAKIG9iai0kKENPTkZJR19GUkVFWkVSKSArPSBmcmVlemVyLm8KQEAgLTgyLDYgKzgzLDcgQEAKIG9iai0kKENPTkZJR19UUkVFX1JDVSkgKz0gcmN1dHJlZS5vCiBvYmotJChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgKz0gcmN1dHJlZS5vCiBvYmotJChDT05GSUdfVFJFRV9SQ1VfVFJBQ0UpICs9IHJjdXRyZWVfdHJhY2Uubworb2JqLSQoQ09ORklHX1RJTllfUkNVKSArPSByY3V0aW55Lm8KIG9iai0kKENPTkZJR19SRUxBWSkgKz0gcmVsYXkubwogb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gdXRzbmFtZV9zeXNjdGwubwogb2JqLSQoQ09ORklHX1RBU0tfREVMQVlfQUNDVCkgKz0gZGVsYXlhY2N0Lm8KQEAgLTk0LDcgKzk2LDkgQEAKIG9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfU01QKSArPSBzY2hlZF9jcHVwcmkubwogb2JqLSQoQ09ORklHX1NMT1dfV09SSykgKz0gc2xvdy13b3JrLm8KK29iai0kKENPTkZJR19TTE9XX1dPUktfREVCVUcpICs9IHNsb3ctd29yay1kZWJ1Z2ZzLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSArPSBod19icmVha3BvaW50Lm8KIAogaWZuZXEgKCQoQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUikseSkKICMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgPGFsYW5AbGludXhjYXJlLmNvbS5hdT4sIHRoZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBpcwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggNGUxNzA0MS4uN2Y4NzZlNiAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0yOSw3ICsyOSw2IEBACiBFWFBPUlRfU1lNQk9MKF9fY2FwX2Z1bGxfc2V0KTsKIEVYUE9SVF9TWU1CT0woX19jYXBfaW5pdF9lZmZfc2V0KTsKIAotI2lmZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUwogaW50IGZpbGVfY2Fwc19lbmFibGVkID0gMTsKIAogc3RhdGljIGludCBfX2luaXQgZmlsZV9jYXBzX2Rpc2FibGUoY2hhciAqc3RyKQpAQCAtMzgsNyArMzcsNiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgibm9fZmlsZV9jYXBzIiwgZmlsZV9jYXBzX2Rpc2FibGUpOwotI2VuZGlmCiAKIC8qCiAgKiBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBsaWJjYXAgYXJlIGF2YWlsYWJsZSBmcm9tOgpAQCAtMTY5LDggKzE2Nyw4IEBACiAJa2VybmVsX2NhcF90IHBFLCBwSSwgcFA7CiAKIAlyZXQgPSBjYXBfdmFsaWRhdGVfbWFnaWMoaGVhZGVyLCAmdG9jb3B5KTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7CisJaWYgKChkYXRhcHRyID09IE5VTEwpIHx8IChyZXQgIT0gMCkpCisJCXJldHVybiAoKGRhdGFwdHIgPT0gTlVMTCkgJiYgKHJldCA9PSAtRUlOVkFMKSkgPyAwIDogcmV0OwogCiAJaWYgKGdldF91c2VyKHBpZCwgJmhlYWRlci0+cGlkKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMzgsNyArMjM2LDcgQEAKIFNZU0NBTExfREVGSU5FMihjYXBzZXQsIGNhcF91c2VyX2hlYWRlcl90LCBoZWFkZXIsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCwgZGF0YSkKIHsKIAlzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCBrZGF0YVtfS0VSTkVMX0NBUEFCSUxJVFlfVTMyU107Ci0JdW5zaWduZWQgaSwgdG9jb3B5OworCXVuc2lnbmVkIGksIHRvY29weSwgY29weWJ5dGVzOwogCWtlcm5lbF9jYXBfdCBpbmhlcml0YWJsZSwgcGVybWl0dGVkLCBlZmZlY3RpdmU7CiAJc3RydWN0IGNyZWQgKm5ldzsKIAlpbnQgcmV0OwpAQCAtMjU1LDggKzI1MywxMSBAQAogCWlmIChwaWQgIT0gMCAmJiBwaWQgIT0gdGFza19waWRfdm5yKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZrZGF0YSwgZGF0YSwKLQkJCSAgIHRvY29weSAqIHNpemVvZihzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCkpKQorCWNvcHlieXRlcyA9IHRvY29weSAqIHNpemVvZihzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCk7CisJaWYgKGNvcHlieXRlcyA+IHNpemVvZihrZGF0YSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZrZGF0YSwgZGF0YSwgY29weWJ5dGVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdG9jb3B5OyBpKyspIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBjYTgzYjczLi4wMjQ5ZjRiIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xNzEwLDE0ICsxNzEwLDEzIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJYnVmZmVyW25ieXRlc10gPSAwOyAgICAgLyogbnVsLXRlcm1pbmF0ZSAqLwotCXN0cnN0cmlwKGJ1ZmZlcik7CiAJaWYgKGNmdC0+d3JpdGVfdTY0KSB7Ci0JCXU2NCB2YWwgPSBzaW1wbGVfc3RydG91bGwoYnVmZmVyLCAmZW5kLCAwKTsKKwkJdTY0IHZhbCA9IHNpbXBsZV9zdHJ0b3VsbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKIAkJaWYgKCplbmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dmFsID0gY2Z0LT53cml0ZV91NjQoY2dycCwgY2Z0LCB2YWwpOwogCX0gZWxzZSB7Ci0JCXM2NCB2YWwgPSBzaW1wbGVfc3RydG9sbChidWZmZXIsICZlbmQsIDApOworCQlzNjQgdmFsID0gc2ltcGxlX3N0cnRvbGwoc3Ryc3RyaXAoYnVmZmVyKSwgJmVuZCwgMCk7CiAJCWlmICgqZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHZhbCA9IGNmdC0+d3JpdGVfczY0KGNncnAsIGNmdCwgdmFsKTsKQEAgLTE3NTMsOCArMTc1Miw3IEBACiAJfQogCiAJYnVmZmVyW25ieXRlc10gPSAwOyAgICAgLyogbnVsLXRlcm1pbmF0ZSAqLwotCXN0cnN0cmlwKGJ1ZmZlcik7Ci0JcmV0dmFsID0gY2Z0LT53cml0ZV9zdHJpbmcoY2dycCwgY2Z0LCBidWZmZXIpOworCXJldHZhbCA9IGNmdC0+d3JpdGVfc3RyaW5nKGNncnAsIGNmdCwgc3Ryc3RyaXAoYnVmZmVyKSk7CiAJaWYgKCFyZXR2YWwpCiAJCXJldHZhbCA9IG5ieXRlczsKIG91dDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCBiNWNiNDY5Li4zY2YyMTgzIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC01MzcsOCArNTM3LDcgQEAKICAqCWVsZW1lbnQgb2YgdGhlIHBhcnRpdGlvbiAob25lIHNjaGVkIGRvbWFpbikgdG8gYmUgcGFzc2VkIHRvCiAgKglwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygpLgogICovCi0vKiBGSVhNRTogc2VlIHRoZSBGSVhNRSBpbiBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygpICovCi1zdGF0aWMgaW50IGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoc3RydWN0IGNwdW1hc2sgKipkb21haW5zLAorc3RhdGljIGludCBnZW5lcmF0ZV9zY2hlZF9kb21haW5zKGNwdW1hc2tfdmFyX3QgKipkb21haW5zLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICoqYXR0cmlidXRlcykKIHsKIAlMSVNUX0hFQUQocSk7CQkvKiBxdWV1ZSBvZiBjcHVzZXRzIHRvIGJlIHNjYW5uZWQgKi8KQEAgLTU0Niw3ICs1NDUsNyBAQAogCXN0cnVjdCBjcHVzZXQgKipjc2E7CS8qIGFycmF5IG9mIGFsbCBjcHVzZXQgcHRycyAqLwogCWludCBjc247CQkvKiBob3cgbWFueSBjcHVzZXQgcHRycyBpbiBjc2Egc28gZmFyICovCiAJaW50IGksIGosIGs7CQkvKiBpbmRpY2VzIGZvciBwYXJ0aXRpb24gZmluZGluZyBsb29wcyAqLwotCXN0cnVjdCBjcHVtYXNrICpkb21zOwkvKiByZXN1bHRpbmcgcGFydGl0aW9uOyBpLmUuIHNjaGVkIGRvbWFpbnMgKi8KKwljcHVtYXNrX3Zhcl90ICpkb21zOwkvKiByZXN1bHRpbmcgcGFydGl0aW9uOyBpLmUuIHNjaGVkIGRvbWFpbnMgKi8KIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyOyAgLyogYXR0cmlidXRlcyBmb3IgY3VzdG9tIGRvbWFpbnMgKi8KIAlpbnQgbmRvbXMgPSAwOwkJLyogbnVtYmVyIG9mIHNjaGVkIGRvbWFpbnMgaW4gcmVzdWx0ICovCiAJaW50IG5zbG90OwkJLyogbmV4dCBlbXB0eSBkb21zW10gc3RydWN0IGNwdW1hc2sgc2xvdCAqLwpAQCAtNTU3LDcgKzU1Niw4IEBACiAKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSA5OSUgb2Ygc3lzdGVtcyB3aXRoIG9uZSwgZnVsbCwgc2NoZWQgZG9tYWluICovCiAJaWYgKGlzX3NjaGVkX2xvYWRfYmFsYW5jZSgmdG9wX2NwdXNldCkpIHsKLQkJZG9tcyA9IGttYWxsb2MoY3B1bWFza19zaXplKCksIEdGUF9LRVJORUwpOworCQluZG9tcyA9IDE7CisJCWRvbXMgPSBhbGxvY19zY2hlZF9kb21haW5zKG5kb21zKTsKIAkJaWYgKCFkb21zKQogCQkJZ290byBkb25lOwogCkBAIC01NjYsOSArNTY2LDggQEAKIAkJCSpkYXR0ciA9IFNEX0FUVFJfSU5JVDsKIAkJCXVwZGF0ZV9kb21haW5fYXR0cl90cmVlKGRhdHRyLCAmdG9wX2NwdXNldCk7CiAJCX0KLQkJY3B1bWFza19jb3B5KGRvbXMsIHRvcF9jcHVzZXQuY3B1c19hbGxvd2VkKTsKKwkJY3B1bWFza19jb3B5KGRvbXNbMF0sIHRvcF9jcHVzZXQuY3B1c19hbGxvd2VkKTsKIAotCQluZG9tcyA9IDE7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYzNiw3ICs2MzUsNyBAQAogCSAqIE5vdyB3ZSBrbm93IGhvdyBtYW55IGRvbWFpbnMgdG8gY3JlYXRlLgogCSAqIENvbnZlcnQgPGNzbiwgY3NhPiB0byA8bmRvbXMsIGRvbXM+IGFuZCBwb3B1bGF0ZSBjcHUgbWFza3MuCiAJICovCi0JZG9tcyA9IGttYWxsb2MobmRvbXMgKiBjcHVtYXNrX3NpemUoKSwgR0ZQX0tFUk5FTCk7CisJZG9tcyA9IGFsbG9jX3NjaGVkX2RvbWFpbnMobmRvbXMpOwogCWlmICghZG9tcykKIAkJZ290byBkb25lOwogCkBAIC02NTYsNyArNjU1LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZHAgPSBkb21zICsgbnNsb3Q7CisJCWRwID0gZG9tc1tuc2xvdF07CiAKIAkJaWYgKG5zbG90ID09IG5kb21zKSB7CiAJCQlzdGF0aWMgaW50IHdhcm5pbmdzID0gMTA7CkBAIC03MTgsNyArNzE3LDcgQEAKIHN0YXRpYyB2b2lkIGRvX3JlYnVpbGRfc2NoZWRfZG9tYWlucyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHI7Ci0Jc3RydWN0IGNwdW1hc2sgKmRvbXM7CisJY3B1bWFza192YXJfdCAqZG9tczsKIAlpbnQgbmRvbXM7CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKQEAgLTIwNTIsNyArMjA1MSw3IEBACiAJCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqdW51c2VkX2NwdSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHI7Ci0Jc3RydWN0IGNwdW1hc2sgKmRvbXM7CisJY3B1bWFza192YXJfdCAqZG9tczsKIAlpbnQgbmRvbXM7CiAKIAlzd2l0Y2ggKHBoYXNlKSB7CkBAIC0yNTM3LDE1ICsyNTM2LDkgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1BST0NfUElEX0NQVVNFVCAqLwogCi0vKiBEaXNwbGF5IHRhc2sgY3B1c19hbGxvd2VkLCBtZW1zX2FsbG93ZWQgaW4gL3Byb2MvPHBpZD4vc3RhdHVzIGZpbGUuICovCisvKiBEaXNwbGF5IHRhc2sgbWVtc19hbGxvd2VkIGluIC9wcm9jLzxwaWQ+L3N0YXR1cyBmaWxlLiAqLwogdm9pZCBjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWQ6XHQiKTsKLQlzZXFfY3B1bWFzayhtLCAmdGFzay0+Y3B1c19hbGxvd2VkKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCXNlcV9wcmludGYobSwgIkNwdXNfYWxsb3dlZF9saXN0Olx0Iik7Ci0Jc2VxX2NwdW1hc2tfbGlzdChtLCAmdGFzay0+Y3B1c19hbGxvd2VkKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCXNlcV9wcmludGYobSwgIk1lbXNfYWxsb3dlZDpcdCIpOwogCXNlcV9ub2RlbWFzayhtLCAmdGFzay0+bWVtc19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZTYxODkxZi4uODBhZTk0MSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMTEwLDkgKzExMSw5IEBACiAJCSAqIFdlIHdvbid0IGV2ZXIgZ2V0IGhlcmUgZm9yIHRoZSBncm91cCBsZWFkZXIsIHNpbmNlIGl0CiAJCSAqIHdpbGwgaGF2ZSBiZWVuIHRoZSBsYXN0IHJlZmVyZW5jZSBvbiB0aGUgc2lnbmFsX3N0cnVjdC4KIAkJICovCi0JCXNpZy0+dXRpbWUgPSBjcHV0aW1lX2FkZChzaWctPnV0aW1lLCB0YXNrX3V0aW1lKHRzaykpOwotCQlzaWctPnN0aW1lID0gY3B1dGltZV9hZGQoc2lnLT5zdGltZSwgdGFza19zdGltZSh0c2spKTsKLQkJc2lnLT5ndGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+Z3RpbWUsIHRhc2tfZ3RpbWUodHNrKSk7CisJCXNpZy0+dXRpbWUgPSBjcHV0aW1lX2FkZChzaWctPnV0aW1lLCB0c2stPnV0aW1lKTsKKwkJc2lnLT5zdGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsIHRzay0+c3RpbWUpOworCQlzaWctPmd0aW1lID0gY3B1dGltZV9hZGQoc2lnLT5ndGltZSwgdHNrLT5ndGltZSk7CiAJCXNpZy0+bWluX2ZsdCArPSB0c2stPm1pbl9mbHQ7CiAJCXNpZy0+bWFqX2ZsdCArPSB0c2stPm1hal9mbHQ7CiAJCXNpZy0+bnZjc3cgKz0gdHNrLT5udmNzdzsKQEAgLTM1OSwxMCArMzYwLDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7CiAKLQlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkgeworCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfU0lELCBwaWQpOwotCQlwcm9jX3NpZF9jb25uZWN0b3IoY3Vycik7Ci0JfQogCiAJaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwaWQpOwpAQCAtOTgwLDYgKzk3OSwxMCBAQAogCXByb2NfZXhpdF9jb25uZWN0b3IodHNrKTsKIAogCS8qCisJICogRklYTUU6IGRvIHRoYXQgb25seSB3aGVuIG5lZWRlZCwgdXNpbmcgc2NoZWRfZXhpdCB0cmFjZXBvaW50CisJICovCisJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKKwkvKgogCSAqIEZsdXNoIGluaGVyaXRlZCBjb3VudGVycyB0byB0aGUgcGFyZW50IC0gYmVmb3JlIHRoZSBwYXJlbnQKIAkgKiBnZXRzIHdva2VuIHVwIGJ5IGNoaWxkLWV4aXQgbm90aWZpY2F0aW9ucy4KIAkgKi8KQEAgLTEyMDcsNiArMTIxMCw3IEBACiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCQl1bnNpZ25lZCBsb25nIG1heHJzczsKKwkJY3B1dGltZV90IHRndXRpbWUsIHRnc3RpbWU7CiAKIAkJLyoKIAkJICogVGhlIHJlc291cmNlIGNvdW50ZXJzIGZvciB0aGUgZ3JvdXAgbGVhZGVyIGFyZSBpbiBpdHMKQEAgLTEyMjIsMjAgKzEyMjYsMjMgQEAKIAkJICogbmVlZCB0byBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gcGFyZW50LT5zaWduYWwgZmllbGRzLAogCQkgKiBhcyBvdGhlciB0aHJlYWRzIGluIHRoZSBwYXJlbnQgZ3JvdXAgY2FuIGJlIHJpZ2h0CiAJCSAqIGhlcmUgcmVhcGluZyBvdGhlciBjaGlsZHJlbiBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKgorCQkgKiBXZSB1c2UgdGhyZWFkX2dyb3VwX3RpbWVzKCkgdG8gZ2V0IHRpbWVzIGZvciB0aGUgdGhyZWFkCisJCSAqIGdyb3VwLCB3aGljaCBjb25zb2xpZGF0ZXMgdGltZXMgZm9yIGFsbCB0aHJlYWRzIGluIHRoZQorCQkgKiBncm91cCBpbmNsdWRpbmcgdGhlIGdyb3VwIGxlYWRlci4KIAkJICovCisJCXRocmVhZF9ncm91cF90aW1lcyhwLCAmdGd1dGltZSwgJnRnc3RpbWUpOwogCQlzcGluX2xvY2tfaXJxKCZwLT5yZWFsX3BhcmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCXBzaWcgPSBwLT5yZWFsX3BhcmVudC0+c2lnbmFsOwogCQlzaWcgPSBwLT5zaWduYWw7CiAJCXBzaWctPmN1dGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jdXRpbWUsCi0JCQljcHV0aW1lX2FkZChwLT51dGltZSwKLQkJCWNwdXRpbWVfYWRkKHNpZy0+dXRpbWUsCi0JCQkJICAgIHNpZy0+Y3V0aW1lKSkpOworCQkJY3B1dGltZV9hZGQodGd1dGltZSwKKwkJCQkgICAgc2lnLT5jdXRpbWUpKTsKIAkJcHNpZy0+Y3N0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmNzdGltZSwKLQkJCWNwdXRpbWVfYWRkKHAtPnN0aW1lLAotCQkJY3B1dGltZV9hZGQoc2lnLT5zdGltZSwKLQkJCQkgICAgc2lnLT5jc3RpbWUpKSk7CisJCQljcHV0aW1lX2FkZCh0Z3N0aW1lLAorCQkJCSAgICBzaWctPmNzdGltZSkpOwogCQlwc2lnLT5jZ3RpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y2d0aW1lLAogCQkJY3B1dGltZV9hZGQocC0+Z3RpbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA0YzIwZmZmLi4zZDZmMTIxIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAlpbnQgY3B1OwogCWludCB0b3RhbCA9IDA7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQl0b3RhbCArPSBwZXJfY3B1KHByb2Nlc3NfY291bnRzLCBjcHUpOwogCiAJcmV0dXJuIHRvdGFsOwpAQCAtODg0LDYgKzg4NCw5IEBACiAJc2lnLT51dGltZSA9IHNpZy0+c3RpbWUgPSBzaWctPmN1dGltZSA9IHNpZy0+Y3N0aW1lID0gY3B1dGltZV96ZXJvOwogCXNpZy0+Z3RpbWUgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5jZ3RpbWUgPSBjcHV0aW1lX3plcm87CisjaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJc2lnLT5wcmV2X3V0aW1lID0gc2lnLT5wcmV2X3N0aW1lID0gY3B1dGltZV96ZXJvOworI2VuZGlmCiAJc2lnLT5udmNzdyA9IHNpZy0+bml2Y3N3ID0gc2lnLT5jbnZjc3cgPSBzaWctPmNuaXZjc3cgPSAwOwogCXNpZy0+bWluX2ZsdCA9IHNpZy0+bWFqX2ZsdCA9IHNpZy0+Y21pbl9mbHQgPSBzaWctPmNtYWpfZmx0ID0gMDsKIAlzaWctPmluYmxvY2sgPSBzaWctPm91YmxvY2sgPSBzaWctPmNpbmJsb2NrID0gc2lnLT5jb3VibG9jayA9IDA7CkBAIC0xMDY2LDggKzEwNjksMTAgQEAKIAlwLT5ndGltZSA9IGNwdXRpbWVfemVybzsKIAlwLT51dGltZXNjYWxlZCA9IGNwdXRpbWVfemVybzsKIAlwLT5zdGltZXNjYWxlZCA9IGNwdXRpbWVfemVybzsKKyNpZm5kZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlwLT5wcmV2X3V0aW1lID0gY3B1dGltZV96ZXJvOwogCXAtPnByZXZfc3RpbWUgPSBjcHV0aW1lX3plcm87CisjZW5kaWYKIAogCXAtPmRlZmF1bHRfdGltZXJfc2xhY2tfbnMgPSBjdXJyZW50LT50aW1lcl9zbGFja19uczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCA0OTQ5ZDMzLi5mYjY1ZTgyIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMTUwLDcgKzE1MCw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Z1dGV4KHVuaW9uIGZ1dGV4X2tleSAqa2V5MSwgdW5pb24gZnV0ZXhfa2V5ICprZXkyKQogewotCXJldHVybiAoa2V5MS0+Ym90aC53b3JkID09IGtleTItPmJvdGgud29yZAorCXJldHVybiAoa2V5MSAmJiBrZXkyCisJCSYmIGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKIAkJJiYga2V5MS0+Ym90aC5wdHIgPT0ga2V5Mi0+Ym90aC5wdHIKIAkJJiYga2V5MS0+Ym90aC5vZmZzZXQgPT0ga2V5Mi0+Ym90aC5vZmZzZXQpOwogfQpAQCAtMTAyOCw3ICsxMDI5LDYgQEAKIHZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSwKIAkJCSAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCiB7Ci0JZHJvcF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKIAlnZXRfZnV0ZXhfa2V5X3JlZnMoa2V5KTsKIAlxLT5rZXkgPSAqa2V5OwogCkBAIC0xMjI2LDYgKzEyMjYsNyBAQAogCQkgKi8KIAkJaWYgKHJldCA9PSAxKSB7CiAJCQlXQVJOX09OKHBpX3N0YXRlKTsKKwkJCWRyb3BfY291bnQrKzsKIAkJCXRhc2tfY291bnQrKzsKIAkJCXJldCA9IGdldF9mdXRleF92YWx1ZV9sb2NrZWQoJmN1cnZhbDIsIHVhZGRyMik7CiAJCQlpZiAoIXJldCkKQEAgLTEzMDQsNiArMTMwNSw3IEBACiAJCQlpZiAocmV0ID09IDEpIHsKIAkJCQkvKiBXZSBnb3QgdGhlIGxvY2suICovCiAJCQkJcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHRoaXMsICZrZXkyLCBoYjIpOworCQkJCWRyb3BfY291bnQrKzsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAocmV0KSB7CiAJCQkJLyogLUVERUFETEsgKi8KQEAgLTE3OTEsNiArMTc5Myw3IEBACiAJCQkJCSAgICAgY3VycmVudC0+dGltZXJfc2xhY2tfbnMpOwogCX0KIAorcmV0cnk6CiAJLyogUHJlcGFyZSB0byB3YWl0IG9uIHVhZGRyLiAqLwogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAodWFkZHIsIHZhbCwgZnNoYXJlZCwgJnEsICZoYik7CiAJaWYgKHJldCkKQEAgLTE4MDgsOSArMTgxMSwxNCBAQAogCQlnb3RvIG91dF9wdXRfa2V5OwogCiAJLyoKLQkgKiBXZSBleHBlY3Qgc2lnbmFsX3BlbmRpbmcoY3VycmVudCksIGJ1dCBhbm90aGVyIHRocmVhZCBtYXkKLQkgKiBoYXZlIGhhbmRsZWQgaXQgZm9yIHVzIGFscmVhZHkuCisJICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgd2UgbWlnaHQgYmUgdGhlCisJICogdmljdGltIG9mIGEgc3B1cmlvdXMgd2FrZXVwIGFzIHdlbGwuCiAJICovCisJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CisJCWdvdG8gcmV0cnk7CisJfQorCiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWlmICghYWJzX3RpbWUpCiAJCWdvdG8gb3V0X3B1dF9rZXk7CkBAIC0yMTE4LDkgKzIxMjYsMTEgQEAKIAkJICovCiAJCXBsaXN0X2RlbCgmcS0+bGlzdCwgJnEtPmxpc3QucGxpc3QpOwogCisJCS8qIEhhbmRsZSBzcHVyaW91cyB3YWtldXBzIGdyYWNlZnVsbHkgKi8KKwkJcmV0ID0gLUVXT1VMREJMT0NLOwogCQlpZiAodGltZW91dCAmJiAhdGltZW91dC0+dGFzaykKIAkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXQgPSAtRVJFU1RBUlROT0lOVFI7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHVuZ190YXNrLmMgYi9rZXJuZWwvaHVuZ190YXNrLmMKaW5kZXggZDRlODQxNy4uMGM2NDJkNSAxMDA2NDQKLS0tIGEva2VybmVsL2h1bmdfdGFzay5jCisrKyBiL2tlcm5lbC9odW5nX3Rhc2suYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZG9fZWFjaF90aHJlYWQoZywgdCkgewotCQlpZiAoIS0tbWF4X2NvdW50KQorCQlpZiAoIW1heF9jb3VudC0tKQogCQkJZ290byB1bmxvY2s7CiAJCWlmICghLS1iYXRjaF9jb3VudCkgewogCQkJYmF0Y2hfY291bnQgPSBIVU5HX1RBU0tfQkFUQ0hJTkc7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjVlZTE2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsYW4gU3Rlcm4KKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqCisgKiBUaGFua3MgdG8gSW5nbyBNb2xuYXIgZm9yIGhpcyBtYW55IHN1Z2dlc3Rpb25zLgorICoKKyAqIEF1dGhvcnM6IEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+CisgKiAgICAgICAgICBLLlByYXNhZCA8cHJhc2FkQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqICAgICAgICAgIEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogSFdfYnJlYWtwb2ludDogYSB1bmlmaWVkIGtlcm5lbC91c2VyLXNwYWNlIGhhcmR3YXJlIGJyZWFrcG9pbnQgZmFjaWxpdHksCisgKiB1c2luZyB0aGUgQ1BVJ3MgZGVidWcgcmVnaXN0ZXJzLgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhcmNoLWluZGVwZW5kZW50IHJvdXRpbmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CisKKy8qCisgKiBDb25zdHJhaW50cyBkYXRhCisgKi8KKworLyogTnVtYmVyIG9mIHBpbm5lZCBjcHUgYnJlYWtwb2ludHMgaW4gYSBjcHUgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIG5yX2NwdV9icF9waW5uZWQpOworCisvKiBOdW1iZXIgb2YgcGlubmVkIHRhc2sgYnJlYWtwb2ludHMgaW4gYSBjcHUgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHRhc2tfYnBfcGlubmVkW0hCUF9OVU1dKTsKKworLyogTnVtYmVyIG9mIG5vbi1waW5uZWQgY3B1L3Rhc2sgYnJlYWtwb2ludHMgaW4gYSBjcHUgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIG5yX2JwX2ZsZXhpYmxlKTsKKworLyogR2F0aGVyIHRoZSBudW1iZXIgb2YgdG90YWwgcGlubmVkIGFuZCB1bi1waW5uZWQgYnAgaW4gYSBjcHVzZXQgKi8KK3N0cnVjdCBicF9idXN5X3Nsb3RzIHsKKwl1bnNpZ25lZCBpbnQgcGlubmVkOworCXVuc2lnbmVkIGludCBmbGV4aWJsZTsKK307CisKKy8qIFNlcmlhbGl6ZSBhY2Nlc3NlcyB0byB0aGUgYWJvdmUgY29uc3RyYWludHMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgobnJfYnBfbXV0ZXgpOworCisvKgorICogUmVwb3J0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwaW5uZWQgYnJlYWtwb2ludHMgYSB0YXNrCisgKiBoYXZlIGluIHRoaXMgY3B1CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3Rhc2tfYnBfcGlubmVkKGludCBjcHUpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50ICp0c2tfcGlubmVkID0gcGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KTsKKworCWZvciAoaSA9IEhCUF9OVU0gLTE7IGkgPj0gMDsgaS0tKSB7CisJCWlmICh0c2tfcGlubmVkW2ldID4gMCkKKwkJCXJldHVybiBpICsgMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIHBpbm5lZC91bi1waW5uZWQgYnJlYWtwb2ludHMgd2UgaGF2ZSBpbgorICogYSBnaXZlbiBjcHUgKGNwdSA+IC0xKSBvciBpbiBhbGwgb2YgdGhlbSAoY3B1ID0gLTEpLgorICovCitzdGF0aWMgdm9pZCBmZXRjaF9icF9idXN5X3Nsb3RzKHN0cnVjdCBicF9idXN5X3Nsb3RzICpzbG90cywgaW50IGNwdSkKK3sKKwlpZiAoY3B1ID49IDApIHsKKwkJc2xvdHMtPnBpbm5lZCA9IHBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZCwgY3B1KTsKKwkJc2xvdHMtPnBpbm5lZCArPSBtYXhfdGFza19icF9waW5uZWQoY3B1KTsKKwkJc2xvdHMtPmZsZXhpYmxlID0gcGVyX2NwdShucl9icF9mbGV4aWJsZSwgY3B1KTsKKworCQlyZXR1cm47CisJfQorCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJdW5zaWduZWQgaW50IG5yOworCisJCW5yID0gcGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCBjcHUpOworCQluciArPSBtYXhfdGFza19icF9waW5uZWQoY3B1KTsKKworCQlpZiAobnIgPiBzbG90cy0+cGlubmVkKQorCQkJc2xvdHMtPnBpbm5lZCA9IG5yOworCisJCW5yID0gcGVyX2NwdShucl9icF9mbGV4aWJsZSwgY3B1KTsKKworCQlpZiAobnIgPiBzbG90cy0+ZmxleGlibGUpCisJCQlzbG90cy0+ZmxleGlibGUgPSBucjsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBwaW5uZWQgYnJlYWtwb2ludCBmb3IgdGhlIGdpdmVuIHRhc2sgaW4gb3VyIGNvbnN0cmFpbnQgdGFibGUKKyAqLworc3RhdGljIHZvaWQgdG9nZ2xlX2JwX3Rhc2tfc2xvdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNwdSwgYm9vbCBlbmFibGUpCit7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdHNrLT5wZXJmX2V2ZW50X2N0eHA7CisJdW5zaWduZWQgaW50ICp0c2tfcGlubmVkOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChXQVJOX09OQ0UoIWN0eCwgIk5vIHBlcmYgY29udGV4dCBmb3IgdGhpcyB0YXNrIikpCisJCXJldHVybjsKKworCWxpc3QgPSAmY3R4LT5ldmVudF9saXN0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBUaGUgY3VycmVudCBicmVha3BvaW50IGNvdW50ZXIgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0CisJICogYXQgdGhlIG9wZW4oKSBjYWxsYmFjayB0aW1lCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShicCwgbGlzdCwgZXZlbnRfZW50cnkpIHsKKwkJaWYgKGJwLT5hdHRyLnR5cGUgPT0gUEVSRl9UWVBFX0JSRUFLUE9JTlQpCisJCQljb3VudCsrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOworCisJaWYgKFdBUk5fT05DRShjb3VudCA8IDAsICJObyBicmVha3BvaW50IGNvdW50ZXIgZm91bmQgaW4gdGhlIGNvdW50ZXIgbGlzdCIpKQorCQlyZXR1cm47CisKKwl0c2tfcGlubmVkID0gcGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KTsKKwlpZiAoZW5hYmxlKSB7CisJCXRza19waW5uZWRbY291bnRdKys7CisJCWlmIChjb3VudCA+IDApCisJCQl0c2tfcGlubmVkW2NvdW50LTFdLS07CisJfSBlbHNlIHsKKwkJdHNrX3Bpbm5lZFtjb3VudF0tLTsKKwkJaWYgKGNvdW50ID4gMCkKKwkJCXRza19waW5uZWRbY291bnQtMV0rKzsKKwl9Cit9CisKKy8qCisgKiBBZGQvcmVtb3ZlIHRoZSBnaXZlbiBicmVha3BvaW50IGluIG91ciBjb25zdHJhaW50IHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkIHRvZ2dsZV9icF9zbG90KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgYm9vbCBlbmFibGUpCit7CisJaW50IGNwdSA9IGJwLT5jcHU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBicC0+Y3R4LT50YXNrOworCisJLyogUGlubmVkIGNvdW50ZXIgdGFzayBwcm9maWxpbmcgKi8KKwlpZiAodHNrKSB7CisJCWlmIChjcHUgPj0gMCkgeworCQkJdG9nZ2xlX2JwX3Rhc2tfc2xvdCh0c2ssIGNwdSwgZW5hYmxlKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQkJdG9nZ2xlX2JwX3Rhc2tfc2xvdCh0c2ssIGNwdSwgZW5hYmxlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFBpbm5lZCBjb3VudGVyIGNwdSBwcm9maWxpbmcgKi8KKwlpZiAoZW5hYmxlKQorCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsIGJwLT5jcHUpKys7CisJZWxzZQorCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsIGJwLT5jcHUpLS07Cit9CisKKy8qCisgKiBDb250cmFpbnRzIHRvIGNoZWNrIGJlZm9yZSBhbGxvd2luZyB0aGlzIG5ldyBicmVha3BvaW50IGNvdW50ZXI6CisgKgorICogID09IE5vbi1waW5uZWQgY291bnRlciA9PSAoQ29uc2lkZXJlZCBhcyBwaW5uZWQgZm9yIG5vdykKKyAqCisgKiAgIC0gSWYgYXR0YWNoZWQgdG8gYSBzaW5nbGUgY3B1LCBjaGVjazoKKyAqCisgKiAgICAgICAocGVyX2NwdShucl9icF9mbGV4aWJsZSwgY3B1KSB8fCAocGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCBjcHUpCisgKiAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KSkpKSA8IEhCUF9OVU0KKyAqCisgKiAgICAgICAtPiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBub24tcGlubmVkIGNvdW50ZXJzIGluIHRoaXMgY3B1LCBpdCBtZWFucworICogICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhIGZyZWUgc2xvdCBmb3IgdGhlbS4KKyAqICAgICAgICAgIE90aGVyd2lzZSwgd2UgY2hlY2sgdGhhdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVyIHRhc2sKKyAqICAgICAgICAgIGJyZWFrcG9pbnRzIChmb3IgdGhpcyBjcHUpIHBsdXMgdGhlIG51bWJlciBvZiBwZXIgY3B1IGJyZWFrcG9pbnQKKyAqICAgICAgICAgIChmb3IgdGhpcyBjcHUpIGRvZXNuJ3QgY292ZXIgZXZlcnkgcmVnaXN0ZXJzLgorICoKKyAqICAgLSBJZiBhdHRhY2hlZCB0byBldmVyeSBjcHVzLCBjaGVjazoKKyAqCisgKiAgICAgICAocGVyX2NwdShucl9icF9mbGV4aWJsZSwgKikgfHwgKG1heChwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsICopKQorICogICAgICAgICAgICsgbWF4KHBlcl9jcHUodGFza19icF9waW5uZWQsICopKSkpIDwgSEJQX05VTQorICoKKyAqICAgICAgIC0+IFRoaXMgaXMgcm91Z2hseSB0aGUgc2FtZSwgZXhjZXB0IHdlIGNoZWNrIHRoZSBudW1iZXIgb2YgcGVyIGNwdQorICogICAgICAgICAgYnAgZm9yIGV2ZXJ5IGNwdSBhbmQgd2Uga2VlcCB0aGUgbWF4IG9uZS4gU2FtZSBmb3IgdGhlIHBlciB0YXNrcworICogICAgICAgICAgYnJlYWtwb2ludHMuCisgKgorICoKKyAqID09IFBpbm5lZCBjb3VudGVyID09CisgKgorICogICAtIElmIGF0dGFjaGVkIHRvIGEgc2luZ2xlIGNwdSwgY2hlY2s6CisgKgorICogICAgICAgKChwZXJfY3B1KG5yX2JwX2ZsZXhpYmxlLCBjcHUpID4gMSkgKyBwZXJfY3B1KG5yX2NwdV9icF9waW5uZWQsIGNwdSkKKyAqICAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgY3B1KSkpIDwgSEJQX05VTQorICoKKyAqICAgICAgIC0+IFNhbWUgY2hlY2tzIGFzIGJlZm9yZS4gQnV0IG5vdyB0aGUgbnJfYnBfZmxleGlibGUsIGlmIGFueSwgbXVzdCBrZWVwCisgKiAgICAgICAgICBvbmUgcmVnaXN0ZXIgYXQgbGVhc3QgKG9yIHRoZXkgd2lsbCBuZXZlciBiZSBmZWQpLgorICoKKyAqICAgLSBJZiBhdHRhY2hlZCB0byBldmVyeSBjcHVzLCBjaGVjazoKKyAqCisgKiAgICAgICAoKHBlcl9jcHUobnJfYnBfZmxleGlibGUsICopID4gMSkgKyBtYXgocGVyX2NwdShucl9jcHVfYnBfcGlubmVkLCAqKSkKKyAqICAgICAgICAgICAgKyBtYXgocGVyX2NwdSh0YXNrX2JwX3Bpbm5lZCwgKikpKSA8IEhCUF9OVU0KKyAqLworaW50IHJlc2VydmVfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGJwX2J1c3lfc2xvdHMgc2xvdHMgPSB7MH07CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZucl9icF9tdXRleCk7CisKKwlmZXRjaF9icF9idXN5X3Nsb3RzKCZzbG90cywgYnAtPmNwdSk7CisKKwkvKiBGbGV4aWJsZSBjb3VudGVycyBuZWVkIHRvIGtlZXAgYXQgbGVhc3Qgb25lIHNsb3QgKi8KKwlpZiAoc2xvdHMucGlubmVkICsgKCEhc2xvdHMuZmxleGlibGUpID09IEhCUF9OVU0pIHsKKwkJcmV0ID0gLUVOT1NQQzsKKwkJZ290byBlbmQ7CisJfQorCisJdG9nZ2xlX2JwX3Nsb3QoYnAsIHRydWUpOworCitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZucl9icF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlbGVhc2VfYnBfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJbXV0ZXhfbG9jaygmbnJfYnBfbXV0ZXgpOworCisJdG9nZ2xlX2JwX3Nsb3QoYnAsIGZhbHNlKTsKKworCW11dGV4X3VubG9jaygmbnJfYnBfbXV0ZXgpOworfQorCisKK2ludCBfX3JlZ2lzdGVyX3BlcmZfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJaW50IHJldDsKKworCXJldCA9IHJlc2VydmVfYnBfc2xvdChicCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogUHRyYWNlIGJyZWFrcG9pbnRzIGNhbiBiZSB0ZW1wb3JhcnkgcGVyZiBldmVudHMgb25seQorCSAqIG1lYW50IHRvIHJlc2VydmUgYSBzbG90LiBJbiB0aGlzIGNhc2UsIGl0IGlzIGNyZWF0ZWQgZGlzYWJsZWQgYW5kCisJICogd2UgZG9uJ3Qgd2FudCB0byBjaGVjayB0aGUgcGFyYW1zIHJpZ2h0IG5vdyAoYXMgd2UgcHV0IGEgbnVsbCBhZGRyKQorCSAqIEJ1dCBwZXJmIHRvb2xzIGNyZWF0ZSBldmVudHMgYXMgZGlzYWJsZWQgYW5kIHdlIHdhbnQgdG8gY2hlY2sKKwkgKiB0aGUgcGFyYW1zIGZvciB0aGVtLgorCSAqIFRoaXMgaXMgYSBxdWljayBoYWNrIHRoYXQgd2lsbCBiZSByZW1vdmVkIHNvb24sIG9uY2Ugd2UgcmVtb3ZlCisJICogdGhlIHRtcCBicmVha3BvaW50cyBmcm9tIHB0cmFjZQorCSAqLworCWlmICghYnAtPmF0dHIuZGlzYWJsZWQgfHwgYnAtPmNhbGxiYWNrID09IHBlcmZfYnBfZXZlbnQpCisJCXJldCA9IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKGJwLCBicC0+Y3R4LT50YXNrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWJwLT5jYWxsYmFjayA9IHBlcmZfYnBfZXZlbnQ7CisKKwlyZXR1cm4gX19yZWdpc3Rlcl9wZXJmX2h3X2JyZWFrcG9pbnQoYnApOworfQorCisvKioKKyAqIHJlZ2lzdGVyX3VzZXJfaHdfYnJlYWtwb2ludCAtIHJlZ2lzdGVyIGEgaGFyZHdhcmUgYnJlYWtwb2ludCBmb3IgdXNlciBzcGFjZQorICogQGF0dHI6IGJyZWFrcG9pbnQgYXR0cmlidXRlcworICogQHRyaWdnZXJlZDogY2FsbGJhY2sgdG8gdHJpZ2dlciB3aGVuIHdlIGhpdCB0aGUgYnJlYWtwb2ludAorICogQHRzazogcG9pbnRlciB0byAndGFza19zdHJ1Y3QnIG9mIHRoZSBwcm9jZXNzIHRvIHdoaWNoIHRoZSBhZGRyZXNzIGJlbG9uZ3MKKyAqLworc3RydWN0IHBlcmZfZXZlbnQgKgorcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCisJCQkgICAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoYXR0ciwgLTEsIHRzay0+cGlkLCB0cmlnZ2VyZWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KTsKKworLyoqCisgKiBtb2RpZnlfdXNlcl9od19icmVha3BvaW50IC0gbW9kaWZ5IGEgdXNlci1zcGFjZSBoYXJkd2FyZSBicmVha3BvaW50CisgKiBAYnA6IHRoZSBicmVha3BvaW50IHN0cnVjdHVyZSB0byBtb2RpZnkKKyAqIEBhdHRyOiBuZXcgYnJlYWtwb2ludCBhdHRyaWJ1dGVzCisgKiBAdHJpZ2dlcmVkOiBjYWxsYmFjayB0byB0cmlnZ2VyIHdoZW4gd2UgaGl0IHRoZSBicmVha3BvaW50CisgKiBAdHNrOiBwb2ludGVyIHRvICd0YXNrX3N0cnVjdCcgb2YgdGhlIHByb2Nlc3MgdG8gd2hpY2ggdGhlIGFkZHJlc3MgYmVsb25ncworICovCitzdHJ1Y3QgcGVyZl9ldmVudCAqCittb2RpZnlfdXNlcl9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKKwkJCSAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCwKKwkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJLyoKKwkgKiBGSVhNRTogZG8gaXQgd2l0aG91dCB1bnJlZ2lzdGVyaW5nCisJICogLSBXZSBkb24ndCB3YW50IHRvIGxvc2Ugb3VyIHNsb3QKKwkgKiAtIElmIHRoZSBuZXcgYnAgaXMgaW5jb3JyZWN0LCBkb24ndCBsb3NlIHRoZSBvbGRlciBvbmUKKwkgKi8KKwl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoYnApOworCisJcmV0dXJuIHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKGF0dHIsIC0xLCB0c2stPnBpZCwgdHJpZ2dlcmVkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQpOworCisvKioKKyAqIHVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCAtIHVucmVnaXN0ZXIgYSB1c2VyLXNwYWNlIGhhcmR3YXJlIGJyZWFrcG9pbnQKKyAqIEBicDogdGhlIGJyZWFrcG9pbnQgc3RydWN0dXJlIHRvIHVucmVnaXN0ZXIKKyAqLwordm9pZCB1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWlmICghYnApCisJCXJldHVybjsKKwlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKGJwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCk7CisKKy8qKgorICogcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50IC0gcmVnaXN0ZXIgYSB3aWRlIGJyZWFrcG9pbnQgaW4gdGhlIGtlcm5lbAorICogQGF0dHI6IGJyZWFrcG9pbnQgYXR0cmlidXRlcworICogQHRyaWdnZXJlZDogY2FsbGJhY2sgdG8gdHJpZ2dlciB3aGVuIHdlIGhpdCB0aGUgYnJlYWtwb2ludAorICoKKyAqIEByZXR1cm4gYSBzZXQgb2YgcGVyX2NwdSBwb2ludGVycyB0byBwZXJmIGV2ZW50cworICovCitzdHJ1Y3QgcGVyZl9ldmVudCAqKgorcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsCisJCQkgICAgcGVyZl9jYWxsYmFja190IHRyaWdnZXJlZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqKmNwdV9ldmVudHMsICoqcGV2ZW50LCAqYnA7CisJbG9uZyBlcnI7CisJaW50IGNwdTsKKworCWNwdV9ldmVudHMgPSBhbGxvY19wZXJjcHUodHlwZW9mKCpjcHVfZXZlbnRzKSk7CisJaWYgKCFjcHVfZXZlbnRzKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcGV2ZW50ID0gcGVyX2NwdV9wdHIoY3B1X2V2ZW50cywgY3B1KTsKKwkJYnAgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihhdHRyLCBjcHUsIC0xLCB0cmlnZ2VyZWQpOworCisJCSpwZXZlbnQgPSBicDsKKworCQlpZiAoSVNfRVJSKGJwKSkgeworCQkJZXJyID0gUFRSX0VSUihicCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlyZXR1cm4gY3B1X2V2ZW50czsKKworZmFpbDoKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBldmVudCA9IHBlcl9jcHVfcHRyKGNwdV9ldmVudHMsIGNwdSk7CisJCWlmIChJU19FUlIoKnBldmVudCkpCisJCQlicmVhazsKKwkJdW5yZWdpc3Rlcl9od19icmVha3BvaW50KCpwZXZlbnQpOworCX0KKwlmcmVlX3BlcmNwdShjcHVfZXZlbnRzKTsKKwkvKiByZXR1cm4gdGhlIGVycm9yIGlmIGFueSAqLworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQpOworCisvKioKKyAqIHVucmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50IC0gdW5yZWdpc3RlciBhIHdpZGUgYnJlYWtwb2ludCBpbiB0aGUga2VybmVsCisgKiBAY3B1X2V2ZW50czogdGhlIHBlciBjcHUgc2V0IG9mIGV2ZW50cyB0byB1bnJlZ2lzdGVyCisgKi8KK3ZvaWQgdW5yZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKipjcHVfZXZlbnRzKQoreworCWludCBjcHU7CisJc3RydWN0IHBlcmZfZXZlbnQgKipwZXZlbnQ7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBldmVudCA9IHBlcl9jcHVfcHRyKGNwdV9ldmVudHMsIGNwdSk7CisJCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCgqcGV2ZW50KTsKKwl9CisJZnJlZV9wZXJjcHUoY3B1X2V2ZW50cyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25iID0geworCS5ub3RpZmllcl9jYWxsID0gaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeSwKKwkvKiB3ZSBuZWVkIHRvIGJlIG5vdGlmaWVkIGZpcnN0ICovCisJLnByaW9yaXR5ID0gMHg3ZmZmZmZmZgorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9od19icmVha3BvaW50KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25iKTsKK30KK2NvcmVfaW5pdGNhbGwoaW5pdF9od19icmVha3BvaW50KTsKKworCitzdHJ1Y3QgcG11IHBlcmZfb3BzX2JwID0geworCS5lbmFibGUJCT0gYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQsCisJLmRpc2FibGUJPSBhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50LAorCS5yZWFkCQk9IGh3X2JyZWFrcG9pbnRfcG11X3JlYWQsCisJLnVudGhyb3R0bGUJPSBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlCit9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCBjMTY2MDE5Li5iYTU2NmMyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMTY2LDExICsxNjYsMTEgQEAKIEVYUE9SVF9TWU1CT0woc2V0X2lycV9kYXRhKTsKIAogLyoqCi0gKglzZXRfaXJxX2RhdGEgLSBzZXQgaXJxIHR5cGUgZGF0YSBmb3IgYW4gaXJxCisgKglzZXRfaXJxX21zaSAtIHNldCBNU0kgZGVzY3JpcHRvciBkYXRhIGZvciBhbiBpcnEKICAqCUBpcnE6CUludGVycnVwdCBudW1iZXIKICAqCUBlbnRyeToJUG9pbnRlciB0byBNU0kgZGVzY3JpcHRvciBkYXRhCiAgKgotICoJU2V0IHRoZSBoYXJkd2FyZSBpcnEgY29udHJvbGxlciBkYXRhIGZvciBhbiBpcnEKKyAqCVNldCB0aGUgTVNJIGRlc2NyaXB0b3IgZW50cnkgZm9yIGFuIGlycQogICovCiBpbnQgc2V0X2lycV9tc2kodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9kZXNjICplbnRyeSkKIHsKQEAgLTU5MCw3ICs1OTAsNyBAQAogfQogCiAvKioKLSAqCWhhbmRsZV9wZXJjcHVfSVJRIC0gUGVyIENQVSBsb2NhbCBpcnEgaGFuZGxlcgorICoJaGFuZGxlX3BlcmNwdV9pcnEgLSBQZXIgQ1BVIGxvY2FsIGlycSBoYW5kbGVyCiAgKglAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgogICoJQGRlc2M6CXRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRpb24gc3RydWN0dXJlIGZvciB0aGlzIGlycQogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggNjkyMzYzZC4uMDgzMjE0NSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiBzdGF0aWMgaW50IGRlZmF1bHRfYWZmaW5pdHlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVmYXVsdF9hZmZpbml0eV9zaG93LCBOVUxMKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGVmYXVsdF9hZmZpbml0eV9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmYXVsdF9hZmZpbml0eV9wcm9jX2ZvcHMgPSB7CkBAIC0xNDgsMTggKzE0OCwyOCBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgaW50IGlycV9zcHVyaW91c19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaXJxX3NwdXJpb3VzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoKGxvbmcpIGRhdGEpOwotCXJldHVybiBzcHJpbnRmKHBhZ2UsICJjb3VudCAldVxuIgotCQkJICAgICAidW5oYW5kbGVkICV1XG4iCi0JCQkgICAgICJsYXN0X3VuaGFuZGxlZCAldSBtc1xuIiwKLQkJCWRlc2MtPmlycV9jb3VudCwKLQkJCWRlc2MtPmlycXNfdW5oYW5kbGVkLAotCQkJamlmZmllc190b19tc2VjcyhkZXNjLT5sYXN0X3VuaGFuZGxlZCkpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKChsb25nKSBtLT5wcml2YXRlKTsKKworCXNlcV9wcmludGYobSwgImNvdW50ICV1XG4iICJ1bmhhbmRsZWQgJXVcbiIgImxhc3RfdW5oYW5kbGVkICV1IG1zXG4iLAorCQkgICBkZXNjLT5pcnFfY291bnQsIGRlc2MtPmlycXNfdW5oYW5kbGVkLAorCQkgICBqaWZmaWVzX3RvX21zZWNzKGRlc2MtPmxhc3RfdW5oYW5kbGVkKSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXJxX3NwdXJpb3VzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaXJxX3NwdXJpb3VzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlycV9zcHVyaW91c19wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gaXJxX3NwdXJpb3VzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogI2RlZmluZSBNQVhfTkFNRUxFTiAxMjgKIAogc3RhdGljIGludCBuYW1lX3VuaXF1ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXdfYWN0aW9uKQpAQCAtMjA0LDcgKzIxNCw2IEBACiB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJaWYgKCFyb290X2lycV9kaXIgfHwgKGRlc2MtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSB8fCBkZXNjLT5kaXIpCiAJCXJldHVybjsKQEAgLTIxNCw2ICsyMjMsOCBAQAogCiAJLyogY3JlYXRlIC9wcm9jL2lycS8xMjM0ICovCiAJZGVzYy0+ZGlyID0gcHJvY19ta2RpcihuYW1lLCByb290X2lycV9kaXIpOworCWlmICghZGVzYy0+ZGlyKQorCQlyZXR1cm47CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogY3JlYXRlIC9wcm9jL2lycS88aXJxPi9zbXBfYWZmaW5pdHkgKi8KQEAgLTIyMSwxMSArMjMyLDggQEAKIAkJCSAmaXJxX2FmZmluaXR5X3Byb2NfZm9wcywgKHZvaWQgKikobG9uZylpcnEpOwogI2VuZGlmCiAKLQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzcHVyaW91cyIsIDA0NDQsIGRlc2MtPmRpcik7Ci0JaWYgKGVudHJ5KSB7Ci0JCWVudHJ5LT5kYXRhID0gKHZvaWQgKikobG9uZylpcnE7Ci0JCWVudHJ5LT5yZWFkX3Byb2MgPSBpcnFfc3B1cmlvdXNfcmVhZDsKLQl9CisJcHJvY19jcmVhdGVfZGF0YSgic3B1cmlvdXMiLCAwNDQ0LCBkZXNjLT5kaXIsCisJCQkgJmlycV9zcHVyaW91c19wcm9jX2ZvcHMsICh2b2lkICopKGxvbmcpaXJxKTsKIH0KIAogI3VuZGVmIE1BWF9OQU1FTEVOCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggMTE0ZTcwNC4uMjJiMGE2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJcmV0dXJuIG9rOwogfQogCi1zdGF0aWMgdm9pZCBwb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKQorc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwpAQCAtMTIxLDI1ICsxMjEsMTUgQEAKIAkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKIAkJCWNvbnRpbnVlOwogCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQotfQotCi1zdGF0aWMgdm9pZCBwb2xsX3NwdXJpb3VzX2lycXModW5zaWduZWQgbG9uZyBkdW1teSkKLXsKLQlwb2xsX2FsbF9zaGFyZWRfaXJxcygpOwogCiAJbW9kX3RpbWVyKCZwb2xsX3NwdXJpb3VzX2lycV90aW1lciwKIAkJICBqaWZmaWVzICsgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwpOwogfQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCi12b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpCi17Ci0JcG9sbF9hbGxfc2hhcmVkX2lycXMoKTsKLX0KLSNlbmRpZgotCiAvKgogICogSWYgOTksOTAwIG9mIHRoZSBwcmV2aW91cyAxMDAsMDAwIGludGVycnVwdHMgaGF2ZSBub3QgYmVlbiBoYW5kbGVkCiAgKiB0aGVuIGFzc3VtZSB0aGF0IHRoZSBJUlEgaXMgc3R1Y2sgaW4gc29tZSBtYW5uZXIuIERyb3AgYSBkaWFnbm9zdGljCmRpZmYgLS1naXQgYS9rZXJuZWwva2FsbHN5bXMuYyBiL2tlcm5lbC9rYWxsc3ltcy5jCmluZGV4IDhiNmI4YjYuLjhlNTI4OGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rYWxsc3ltcy5jCisrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCkBAIC0xODEsNiArMTgxLDcgQEAKIAl9CiAJcmV0dXJuIG1vZHVsZV9rYWxsc3ltc19sb29rdXBfbmFtZShuYW1lKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGthbGxzeW1zX2xvb2t1cF9uYW1lKTsKIAogaW50IGthbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG1vZHVsZSAqLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpLApkaWZmIC0tZ2l0IGEva2VybmVsL2tnZGIuYyBiL2tlcm5lbC9rZ2RiLmMKaW5kZXggOTE0N2EzMS4uN2Q3MDE0NiAxMDA2NDQKLS0tIGEva2VybmVsL2tnZGIuYworKysgYi9rZXJuZWwva2dkYi5jCkBAIC04NzAsNyArODcwLDcgQEAKIAogCS8qCiAJICogQWxsIHRocmVhZHMgdGhhdCBkb24ndCBoYXZlIGRlYnVnZ2VyaW5mbyBzaG91bGQgYmUKLQkgKiBpbiBfX3NjaGVkdWxlKCkgc2xlZXBpbmcsIHNpbmNlIGFsbCBvdGhlciBDUFVzCisJICogaW4gc2NoZWR1bGUoKSBzbGVlcGluZywgc2luY2UgYWxsIG90aGVyIENQVXMKIAkgKiBhcmUgaW4ga2dkYl93YWl0LCBhbmQgdGh1cyBoYXZlIGRlYnVnZ2VyaW5mby4KIAkgKi8KIAlpZiAobG9jYWxfZGVidWdnZXJpbmZvKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCA5ZmNiNTNhLi4yNWIxMDMxIDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTgwLDE2ICs4MCwxNiBAQAogI2RlZmluZSBNQVhfS01PRF9DT05DVVJSRU5UIDUwCS8qIENvbXBsZXRlbHkgYXJiaXRyYXJ5IHZhbHVlIC0gS0FPICovCiAJc3RhdGljIGludCBrbW9kX2xvb3BfbXNnOwogCi0JcmV0ID0gc2VjdXJpdHlfa2VybmVsX21vZHVsZV9yZXF1ZXN0KCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJcmV0ID0gdnNucHJpbnRmKG1vZHVsZV9uYW1lLCBNT0RVTEVfTkFNRV9MRU4sIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCWlmIChyZXQgPj0gTU9EVUxFX05BTUVfTEVOKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAorCXJldCA9IHNlY3VyaXR5X2tlcm5lbF9tb2R1bGVfcmVxdWVzdChtb2R1bGVfbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIElmIG1vZHByb2JlIG5lZWRzIGEgc2VydmljZSB0aGF0IGlzIGluIGEgbW9kdWxlLCB3ZSBnZXQgYSByZWN1cnNpdmUKIAkgKiBsb29wLiAgTGltaXQgdGhlIG51bWJlciBvZiBydW5uaW5nIGttb2QgdGhyZWFkcyB0byBtYXhfdGhyZWFkcy8yIG9yCiAJICogTUFYX0tNT0RfQ09OQ1VSUkVOVCwgd2hpY2hldmVyIGlzIHRoZSBzbWFsbGVyLiAgQSBjbGVhbmVyIG1ldGhvZApkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNTI0MGQ3NS4uZTUzNDJhMyAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC05MCw2ICs5MCw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlX2JsYWNrcG9pbnQga3Byb2JlX2JsYWNrbGlzdFtdID0gewogCXsicHJlZW1wdF9zY2hlZHVsZSIsfSwKKwl7Im5hdGl2ZV9nZXRfZGVidWdyZWciLH0sCisJeyJpcnFfZW50cmllc19zdGFydCIsfSwKKwl7ImNvbW1vbl9pbnRlcnJ1cHQiLH0sCiAJe05VTEx9ICAgIC8qIFRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTY3Myw2ICs2NzYsNDAgQEAKIAlyZXR1cm4gKGtwcm9iZV9vcGNvZGVfdCAqKSgoKGNoYXIgKilhZGRyKSArIHAtPm9mZnNldCk7CiB9CiAKKy8qIENoZWNrIHBhc3NlZCBrcHJvYmUgaXMgdmFsaWQgYW5kIHJldHVybiBrcHJvYmUgaW4ga3Byb2JlX3RhYmxlLiAqLworc3RhdGljIHN0cnVjdCBrcHJvYmUgKiBfX2twcm9iZXMgX19nZXRfdmFsaWRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IGtwcm9iZSAqb2xkX3AsICpsaXN0X3A7CisKKwlvbGRfcCA9IGdldF9rcHJvYmUocC0+YWRkcik7CisJaWYgKHVubGlrZWx5KCFvbGRfcCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKHAgIT0gb2xkX3ApIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGlzdF9wLCAmb2xkX3AtPmxpc3QsIGxpc3QpCisJCQlpZiAobGlzdF9wID09IHApCisJCQkvKiBrcHJvYmUgcCBpcyBhIHZhbGlkIHByb2JlICovCisJCQkJZ290byB2YWxpZDsKKwkJcmV0dXJuIE5VTEw7CisJfQordmFsaWQ6CisJcmV0dXJuIG9sZF9wOworfQorCisvKiBSZXR1cm4gZXJyb3IgaWYgdGhlIGtwcm9iZSBpcyBiZWluZyByZS1yZWdpc3RlcmVkICovCitzdGF0aWMgaW5saW5lIGludCBjaGVja19rcHJvYmVfcmVyZWcoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga3Byb2JlICpvbGRfcDsKKworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CisJb2xkX3AgPSBfX2dldF92YWxpZF9rcHJvYmUocCk7CisJaWYgKG9sZF9wKQorCQlyZXQgPSAtRUlOVkFMOworCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgX19rcHJvYmVzIHJlZ2lzdGVyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewogCWludCByZXQgPSAwOwpAQCAtNjg1LDYgKzcyMiwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlwLT5hZGRyID0gYWRkcjsKIAorCXJldCA9IGNoZWNrX2twcm9iZV9yZXJlZyhwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSB8fAogCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikpIHsKQEAgLTc1NCwyNiArNzk1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2twcm9iZSk7CiAKLS8qIENoZWNrIHBhc3NlZCBrcHJvYmUgaXMgdmFsaWQgYW5kIHJldHVybiBrcHJvYmUgaW4ga3Byb2JlX3RhYmxlLiAqLwotc3RhdGljIHN0cnVjdCBrcHJvYmUgKiBfX2twcm9iZXMgX19nZXRfdmFsaWRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCi17Ci0Jc3RydWN0IGtwcm9iZSAqb2xkX3AsICpsaXN0X3A7Ci0KLQlvbGRfcCA9IGdldF9rcHJvYmUocC0+YWRkcik7Ci0JaWYgKHVubGlrZWx5KCFvbGRfcCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHAgIT0gb2xkX3ApIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGlzdF9wLCAmb2xkX3AtPmxpc3QsIGxpc3QpCi0JCQlpZiAobGlzdF9wID09IHApCi0JCQkvKiBrcHJvYmUgcCBpcyBhIHZhbGlkIHByb2JlICovCi0JCQkJZ290byB2YWxpZDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotdmFsaWQ6Ci0JcmV0dXJuIG9sZF9wOwotfQotCiAvKgogICogVW5yZWdpc3RlciBhIGtwcm9iZSB3aXRob3V0IGEgc2NoZWR1bGVyIHN5bmNocm9uaXphdGlvbi4KICAqLwpAQCAtMTAxNCw5ICsxMDM1LDkgQEAKIAkvKiBQcmUtYWxsb2NhdGUgbWVtb3J5IGZvciBtYXgga3JldHByb2JlIGluc3RhbmNlcyAqLwogCWlmIChycC0+bWF4YWN0aXZlIDw9IDApIHsKICNpZmRlZiBDT05GSUdfUFJFRU1QVAotCQlycC0+bWF4YWN0aXZlID0gbWF4KDEwLCAyICogTlJfQ1BVUyk7CisJCXJwLT5tYXhhY3RpdmUgPSBtYXgoMTAsIDIgKiBudW1fcG9zc2libGVfY3B1cygpKTsKICNlbHNlCi0JCXJwLT5tYXhhY3RpdmUgPSBOUl9DUFVTOworCQlycC0+bWF4YWN0aXZlID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKICNlbmRpZgogCX0KIAlzcGluX2xvY2tfaW5pdCgmcnAtPmxvY2spOwpAQCAtMTE0MSw2ICsxMTYyLDEzIEBACiAJYXJjaF9yZW1vdmVfa3Byb2JlKHApOwogfQogCit2b2lkIF9fa3Byb2JlcyBkdW1wX2twcm9iZShzdHJ1Y3Qga3Byb2JlICprcCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJEdW1waW5nIGtwcm9iZTpcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIk5hbWU6ICVzXG5BZGRyZXNzOiAlcFxuT2Zmc2V0OiAleFxuIiwKKwkgICAgICAga3AtPnN5bWJvbF9uYW1lLCBrcC0+YWRkciwga3AtPm9mZnNldCk7Cit9CisKIC8qIE1vZHVsZSBub3RpZmllciBjYWxsIGJhY2ssIGNoZWNraW5nIGtwcm9iZXMgb24gdGhlIG1vZHVsZSAqLwogc3RhdGljIGludCBfX2twcm9iZXMga3Byb2Jlc19tb2R1bGVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDVmZTcwOTkuLmFiN2FlNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTUwLDI5ICsxNTAsNiBAQAogRVhQT1JUX1NZTUJPTChrdGhyZWFkX2NyZWF0ZSk7CiAKIC8qKgotICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgotICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCi0gKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCi0gKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKLSAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KLSAqLwotdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KLQlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfdGFza19jcHUoaywgY3B1KTsKLQlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7Ci0Jay0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCi0vKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzgxNWFjMWQuLmY1ZGNkMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgImxvY2tkZXBfaW50ZXJuYWxzLmgiCiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9sb2NrZGVwLmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2xvY2suaD4KIAogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCiBpbnQgcHJvdmVfbG9ja2luZyA9IDE7CkBAIC0xNDIsNiArMTQyLDExIEBACiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzW01BWF9MT0NLREVQX0tFWVNdLCBsb2NrX3N0YXRzKTsKIAorc3RhdGljIGlubGluZSB1NjQgbG9ja3N0YXRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKIHN0YXRpYyBpbnQgbG9ja19wb2ludCh1bnNpZ25lZCBsb25nIHBvaW50c1tdLCB1bnNpZ25lZCBsb25nIGlwKQogewogCWludCBpOwpAQCAtMTU4LDcgKzE2Myw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHM2NCB0aW1lKQorc3RhdGljIHZvaWQgbG9ja190aW1lX2luYyhzdHJ1Y3QgbG9ja190aW1lICpsdCwgdTY0IHRpbWUpCiB7CiAJaWYgKHRpbWUgPiBsdC0+bWF4KQogCQlsdC0+bWF4ID0gdGltZTsKQEAgLTIzNCwxMiArMjM5LDEyIEBACiBzdGF0aWMgdm9pZCBsb2NrX3JlbGVhc2VfaG9sZHRpbWUoc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCiB7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwotCXM2NCBob2xkdGltZTsKKwl1NjQgaG9sZHRpbWU7CiAKIAlpZiAoIWxvY2tfc3RhdCkKIAkJcmV0dXJuOwogCi0JaG9sZHRpbWUgPSBzY2hlZF9jbG9jaygpIC0gaGxvY2stPmhvbGR0aW1lX3N0YW1wOworCWhvbGR0aW1lID0gbG9ja3N0YXRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKIAogCXN0YXRzID0gZ2V0X2xvY2tfc3RhdHMoaGxvY2tfY2xhc3MoaGxvY2spKTsKIAlpZiAoaGxvY2stPnJlYWQpCkBAIC0yNzkyLDcgKzI3OTcsNyBAQAogCWhsb2NrLT5yZWZlcmVuY2VzID0gcmVmZXJlbmNlczsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gMDsKLQlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAjZW5kaWYKIAogCWlmIChjaGVjayA9PSAyICYmICFtYXJrX2lycWZsYWdzKGN1cnIsIGhsb2NrKSkKQEAgLTMzMjIsNyArMzMyNyw3IEBACiAJaWYgKGhsb2NrLT5pbnN0YW5jZSAhPSBsb2NrKQogCQlyZXR1cm47CiAKLQlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAKIAljb250ZW50aW9uX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbnRpb25fcG9pbnQsIGlwKTsKIAljb250ZW5kaW5nX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbmRpbmdfcG9pbnQsCkBAIC0zMzQ1LDggKzMzNTAsNyBAQAogCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCAqcHJldl9obG9jazsKIAlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGRlcHRoOwotCXU2NCBub3c7Ci0JczY0IHdhaXR0aW1lID0gMDsKKwl1NjQgbm93LCB3YWl0dGltZSA9IDA7CiAJaW50IGksIGNwdTsKIAogCWRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKQEAgLTMzNzQsNyArMzM3OCw3IEBACiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaWYgKGhsb2NrLT53YWl0dGltZV9zdGFtcCkgewotCQlub3cgPSBzY2hlZF9jbG9jaygpOworCQlub3cgPSBsb2Nrc3RhdF9jbG9jaygpOwogCQl3YWl0dGltZSA9IG5vdyAtIGhsb2NrLT53YWl0dGltZV9zdGFtcDsKIAkJaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gbm93OwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA4YjdkODgwLi41ODQyYTcxIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xMTg3LDcgKzExODcsOCBAQAogCiAJLyogQ291bnQgbG9hZGVkIHNlY3Rpb25zIGFuZCBhbGxvY2F0ZSBzdHJ1Y3R1cmVzICovCiAJZm9yIChpID0gMDsgaSA8IG5zZWN0OyBpKyspCi0JCWlmIChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKQorCQlpZiAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQworCQkgICAgJiYgc2VjaGRyc1tpXS5zaF9zaXplKQogCQkJbmxvYWRlZCsrOwogCXNpemVbMF0gPSBBTElHTihzaXplb2YoKnNlY3RfYXR0cnMpCiAJCQkrIG5sb2FkZWQgKiBzaXplb2Yoc2VjdF9hdHRycy0+YXR0cnNbMF0pLApAQCAtMTIwNyw2ICsxMjA4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykgewogCQlpZiAoISAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCiAJCQljb250aW51ZTsKKwkJaWYgKCFzZWNoZHJzW2ldLnNoX3NpemUpCisJCQljb250aW51ZTsKIAkJc2F0dHItPmFkZHJlc3MgPSBzZWNoZHJzW2ldLnNoX2FkZHI7CiAJCXNhdHRyLT5uYW1lID0ga3N0cmR1cChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLAogCQkJCQlHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggOTQ3YjNhZC4uNjMyZjA0YyAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTE0OCw4ICsxNDgsOCBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIGlwKTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0hBVkVfREVGQVVMVF9OT19TUElOX01VVEVYRVMpCisKKyNpZmRlZiBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUgogCS8qCiAJICogT3B0aW1pc3RpYyBzcGlubmluZy4KIAkgKgpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCA2MWQ1YWE1Li5hY2QyNGU3IDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNTU4LDcgKzU1OCw3IEBACiAKIHN0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChkaWVfY2hhaW4pOwogCi1pbnQgbm90cmFjZSBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKK2ludCBub3RyYWNlIF9fa3Byb2JlcyBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKIAkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKIHsKIAlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA5ZGE1OGVhLi5kNjU2YzI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yMTgsMTUgKzIxOCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOwotCiAJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKIAkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLwogCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7Ci0JCWtwLT5mbGFncyB8PSBLUEFSQU1fS01BTExPQ0VEOwogCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrcC0+YXJnKQorCQlpZiAoISooY2hhciAqKilrcC0+YXJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlCiAJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOwpAQCAtMzA0LDYgKzMwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LAogCQkgICAgICAgdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAogCQkgICAgICAgaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKKwkJICAgICAgIHUxNiBmbGFncywKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbnVtKQogewogCWludCByZXQ7CkBAIC0zMTMsNiArMzEwLDcgQEAKIAkvKiBHZXQgdGhlIG5hbWUgcmlnaHQgZm9yIGVycm9ycy4gKi8KIAlrcC5uYW1lID0gbmFtZTsKIAlrcC5hcmcgPSBlbGVtOworCWtwLmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBObyBlcXVhbHMgc2lnbj8gKi8KIAlpZiAoIXZhbCkgewpAQCAtMzU4LDcgKzM1Niw4IEBACiAJdW5zaWduZWQgaW50IHRlbXBfbnVtOwogCiAJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIDEsIGFyci0+bWF4LCBhcnItPmVsZW0sCi0JCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKKwkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBrcC0+ZmxhZ3MsCisJCQkgICBhcnItPm51bSA/OiAmdGVtcF9udW0pOwogfQogCiBpbnQgcGFyYW1fYXJyYXlfZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC02MDUsMTEgKzYwNCw3IEBACiAKIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWlmIChwYXJhbXNbaV0uZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBmcmVlIGttYWxsb2NlZCBjaGFycCBwYXJhbWV0ZXJzLiAgSXQgZG9lc24ndC4gKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDlkMGI1YzYuLjZiN2RkYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogCiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKQEAgLTI0NCw2ICsyNDYsNDkgQEAKIAlwdXRfY3R4KGN0eCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IHBlcmZfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHJlY29yZCBvZiB0aGUgY3VycmVudCB0aW1lIGluIGEgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2NvbnRleHRfdGltZShzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJdTY0IG5vdyA9IHBlcmZfY2xvY2soKTsKKworCWN0eC0+dGltZSArPSBub3cgLSBjdHgtPnRpbWVzdGFtcDsKKwljdHgtPnRpbWVzdGFtcCA9IG5vdzsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgdG90YWxfdGltZV9lbmFibGVkIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgZmllbGRzIGZvciBhIGV2ZW50LgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfZXZlbnRfdGltZXMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CisJdTY0IHJ1bl9lbmQ7CisKKwlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSB8fAorCSAgICBldmVudC0+Z3JvdXBfbGVhZGVyLT5zdGF0ZSA8IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCisJCXJldHVybjsKKworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJcnVuX2VuZCA9IGN0eC0+dGltZTsKKwllbHNlCisJCXJ1bl9lbmQgPSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CisKKwlldmVudC0+dG90YWxfdGltZV9lbmFibGVkID0gcnVuX2VuZCAtIGV2ZW50LT50c3RhbXBfZW5hYmxlZDsKKworCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJcnVuX2VuZCA9IGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKKwllbHNlCisJCXJ1bl9lbmQgPSBjdHgtPnRpbWU7CisKKwlldmVudC0+dG90YWxfdGltZV9ydW5uaW5nID0gcnVuX2VuZCAtIGV2ZW50LT50c3RhbXBfcnVubmluZzsKK30KKwogLyoKICAqIEFkZCBhIGV2ZW50IGZyb20gdGhlIGxpc3RzIGZvciBpdHMgY29udGV4dC4KICAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBhbmQgY3R4LT5sb2NrIGhlbGQuCkBAIC0yOTIsNiArMzM3LDE4IEBACiAJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpCiAJCWV2ZW50LT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzLS07CiAKKwl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOworCisJLyoKKwkgKiBJZiBldmVudCB3YXMgaW4gZXJyb3Igc3RhdGUsIHRoZW4ga2VlcCBpdAorCSAqIHRoYXQgd2F5LCBvdGhlcndpc2UgYm9ndXMgY291bnRzIHdpbGwgYmUKKwkgKiByZXR1cm5lZCBvbiByZWFkKCkuIFRoZSBvbmx5IHdheSB0byBnZXQgb3V0CisJICogb2YgZXJyb3Igc3RhdGUgaXMgYnkgZXhwbGljaXQgcmUtZW5hYmxpbmcKKwkgKiBvZiB0aGUgZXZlbnQKKwkgKi8KKwlpZiAoZXZlbnQtPnN0YXRlID4gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGOworCiAJLyoKIAkgKiBJZiB0aGlzIHdhcyBhIGdyb3VwIGV2ZW50IHdpdGggc2libGluZyBldmVudHMgdGhlbgogCSAqIHVwZ3JhZGUgdGhlIHNpYmxpbmdzIHRvIHNpbmdsZXRvbiBldmVudHMgYnkgYWRkaW5nIHRoZW0KQEAgLTQ0NSw1MCArNTAyLDExIEBACiAJICogY2FuIHJlbW92ZSB0aGUgZXZlbnQgc2FmZWx5LCBpZiB0aGUgY2FsbCBhYm92ZSBkaWQgbm90CiAJICogc3VjY2VlZC4KIAkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmV2ZW50LT5ncm91cF9lbnRyeSkpIHsKKwlpZiAoIWxpc3RfZW1wdHkoJmV2ZW50LT5ncm91cF9lbnRyeSkpCiAJCWxpc3RfZGVsX2V2ZW50KGV2ZW50LCBjdHgpOwotCX0KIAlzcGluX3VubG9ja19pcnEoJmN0eC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgdGhlIHJlY29yZCBvZiB0aGUgY3VycmVudCB0aW1lIGluIGEgY29udGV4dC4KLSAqLwotc3RhdGljIHZvaWQgdXBkYXRlX2NvbnRleHRfdGltZShzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCi17Ci0JdTY0IG5vdyA9IHBlcmZfY2xvY2soKTsKLQotCWN0eC0+dGltZSArPSBub3cgLSBjdHgtPnRpbWVzdGFtcDsKLQljdHgtPnRpbWVzdGFtcCA9IG5vdzsKLX0KLQotLyoKLSAqIFVwZGF0ZSB0aGUgdG90YWxfdGltZV9lbmFibGVkIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgZmllbGRzIGZvciBhIGV2ZW50LgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfZXZlbnRfdGltZXMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7Ci0JdTY0IHJ1bl9lbmQ7Ci0KLQlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSB8fAotCSAgICBldmVudC0+Z3JvdXBfbGVhZGVyLT5zdGF0ZSA8IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCi0JCXJldHVybjsKLQotCWV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgPSBjdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX2VuYWJsZWQ7Ci0KLQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCi0JCXJ1bl9lbmQgPSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7Ci0JZWxzZQotCQlydW5fZW5kID0gY3R4LT50aW1lOwotCi0JZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBldmVudC0+dHN0YW1wX3J1bm5pbmc7Ci19Ci0KIC8qCiAgKiBVcGRhdGUgdG90YWxfdGltZV9lbmFibGVkIGFuZCB0b3RhbF90aW1lX3J1bm5pbmcgZm9yIGFsbCBldmVudHMgaW4gYSBncm91cC4KICAqLwpAQCAtMTAzMSwxMCArMTA0OSwxMCBAQAogCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAogCXBlcmZfZGlzYWJsZSgpOwotCWlmIChjdHgtPm5yX2FjdGl2ZSkKKwlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCiAJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKLQorCX0KIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKIAlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKQEAgLTEwNTksOCArMTA3Nyw2IEBACiAJCSYmICFjdHgxLT5waW5fY291bnQgJiYgIWN0eDItPnBpbl9jb3VudDsKIH0KIAotc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3JlYWQodm9pZCAqZXZlbnQpOwotCiBzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfc3luY19zdGF0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpuZXh0X2V2ZW50KQogewpAQCAtMTA3OCw4ICsxMDk0LDggQEAKIAkgKi8KIAlzd2l0Y2ggKGV2ZW50LT5zdGF0ZSkgewogCWNhc2UgUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU6Ci0JCV9fcGVyZl9ldmVudF9yZWFkKGV2ZW50KTsKLQkJYnJlYWs7CisJCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOworCQkvKiBmYWxsLXRocm91Z2ggKi8KIAogCWNhc2UgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRToKIAkJdXBkYXRlX2V2ZW50X3RpbWVzKGV2ZW50KTsKQEAgLTExMTgsNiArMTEzNCw4IEBACiAJaWYgKCFjdHgtPm5yX3N0YXQpCiAJCXJldHVybjsKIAorCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKKwogCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5ldmVudF9saXN0LAogCQkJCSAgIHN0cnVjdCBwZXJmX2V2ZW50LCBldmVudF9lbnRyeSk7CiAKQEAgLTExNjEsOCArMTE3OSw2IEBACiAJaWYgKGxpa2VseSghY3R4IHx8ICFjcHVjdHgtPnRhc2tfY3R4KSkKIAkJcmV0dXJuOwogCi0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCiAJcmN1X3JlYWRfbG9jaygpOwogCXBhcmVudCA9IHJjdV9kZXJlZmVyZW5jZShjdHgtPnBhcmVudF9jdHgpOwogCW5leHRfY3R4ID0gbmV4dC0+cGVyZl9ldmVudF9jdHhwOwpAQCAtMTM1NSw3ICsxMzcxLDcgQEAKIAl1NjQgaW50ZXJydXB0cywgZnJlcTsKIAogCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgewogCQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQogCQkJY29udGludWU7CiAKQEAgLTE1MTUsNyArMTUzMSw2IEBACiAJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGluZm87CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgdGFzayBjb250ZXh0LCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMKQEAgLTE1MjcsMTIgKzE1NDIsMTIgQEAKIAlpZiAoY3R4LT50YXNrICYmIGNwdWN0eC0+dGFza19jdHggIT0gY3R4KQogCQlyZXR1cm47CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGN0eC0+aXNfYWN0aXZlKQotCQl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7Ci0JZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CisJc3Bpbl9sb2NrKCZjdHgtPmxvY2spOworCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogfQogCiBzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC0xNTQ1LDcgKzE1NjAsMTMgQEAKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGV2ZW50LT5vbmNwdSwKIAkJCQkJIF9fcGVyZl9ldmVudF9yZWFkLCBldmVudCwgMSk7CiAJfSBlbHNlIGlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmxvY2ssIGZsYWdzKTsKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCQl1cGRhdGVfZXZlbnRfdGltZXMoZXZlbnQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKQEAgLTE2NTgsNiArMTY3OSw4IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCiBzdGF0aWMgdm9pZCBmcmVlX2V2ZW50X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwpAQCAtMTY2NSw2ICsxNjg4LDcgQEAKIAlldmVudCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGVyZl9ldmVudCwgcmN1X2hlYWQpOwogCWlmIChldmVudC0+bnMpCiAJCXB1dF9waWRfbnMoZXZlbnQtPm5zKTsKKwlwZXJmX2V2ZW50X2ZyZWVfZmlsdGVyKGV2ZW50KTsKIAlrZnJlZShldmVudCk7CiB9CiAKQEAgLTE2OTYsMTYgKzE3MjAsMTAgQEAKIAljYWxsX3JjdSgmZXZlbnQtPnJjdV9oZWFkLCBmcmVlX2V2ZW50X3JjdSk7CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZpbGUgaXMgZ29uZS4KLSAqLwotc3RhdGljIGludCBwZXJmX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitpbnQgcGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCiAJV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CiAJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CiAJcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0KGV2ZW50KTsKQEAgLTE3MjAsNiArMTczOCwxOSBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZmlsZSBpcyBnb25lLgorICovCitzdGF0aWMgaW50IHBlcmZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJcmV0dXJuIHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoZXZlbnQpOworfQogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfcmVhZF9zaXplKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTE3NDYsOTEgKzE3NzcsOTQgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIHU2NCBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQordTY0IHBlcmZfZXZlbnRfcmVhZF92YWx1ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCAqZW5hYmxlZCwgdTY0ICpydW5uaW5nKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpjaGlsZDsKIAl1NjQgdG90YWwgPSAwOwogCisJKmVuYWJsZWQgPSAwOworCSpydW5uaW5nID0gMDsKKworCW11dGV4X2xvY2soJmV2ZW50LT5jaGlsZF9tdXRleCk7CiAJdG90YWwgKz0gcGVyZl9ldmVudF9yZWFkKGV2ZW50KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZXZlbnQtPmNoaWxkX2xpc3QsIGNoaWxkX2xpc3QpCisJKmVuYWJsZWQgKz0gZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZCArCisJCQlhdG9taWM2NF9yZWFkKCZldmVudC0+Y2hpbGRfdG90YWxfdGltZV9lbmFibGVkKTsKKwkqcnVubmluZyArPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKKwkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmV2ZW50LT5jaGlsZF9saXN0LCBjaGlsZF9saXN0KSB7CiAJCXRvdGFsICs9IHBlcmZfZXZlbnRfcmVhZChjaGlsZCk7CisJCSplbmFibGVkICs9IGNoaWxkLT50b3RhbF90aW1lX2VuYWJsZWQ7CisJCSpydW5uaW5nICs9IGNoaWxkLT50b3RhbF90aW1lX3J1bm5pbmc7CisJfQorCW11dGV4X3VubG9jaygmZXZlbnQtPmNoaWxkX211dGV4KTsKIAogCXJldHVybiB0b3RhbDsKIH0KLQotc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfZW50cnkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAotCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKLXsKLQlpbnQgbiA9IDAsIGNvdW50ID0gMDsKLQl1NjQgdmFsdWVzWzJdOwotCi0JdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoZXZlbnQpOwotCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQotCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoZXZlbnQpOwotCi0JY291bnQgPSBuICogc2l6ZW9mKHU2NCk7Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZiwgdmFsdWVzLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIGNvdW50OwotfQorRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9ldmVudF9yZWFkX3ZhbHVlKTsKIAogc3RhdGljIGludCBwZXJmX2V2ZW50X3JlYWRfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSAgIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlciwgKnN1YjsKLQlpbnQgbiA9IDAsIHNpemUgPSAwLCBlcnIgPSAtRUZBVUxUOwotCXU2NCB2YWx1ZXNbM107CisJaW50IG4gPSAwLCBzaXplID0gMCwgcmV0ID0gLUVGQVVMVDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBsZWFkZXItPmN0eDsKKwl1NjQgdmFsdWVzWzVdOworCXU2NCBjb3VudCwgZW5hYmxlZCwgcnVubmluZzsKKworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCWNvdW50ID0gcGVyZl9ldmVudF9yZWFkX3ZhbHVlKGxlYWRlciwgJmVuYWJsZWQsICZydW5uaW5nKTsKIAogCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7Ci0JaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKSB7Ci0JCXZhbHVlc1tuKytdID0gbGVhZGVyLT50b3RhbF90aW1lX2VuYWJsZWQgKwotCQkJYXRvbWljNjRfcmVhZCgmbGVhZGVyLT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBsZWFkZXItPnRvdGFsX3RpbWVfcnVubmluZyArCi0JCQlhdG9taWM2NF9yZWFkKCZsZWFkZXItPmNoaWxkX3RvdGFsX3RpbWVfcnVubmluZyk7Ci0JfQorCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkKKwkJdmFsdWVzW24rK10gPSBlbmFibGVkOworCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORykKKwkJdmFsdWVzW24rK10gPSBydW5uaW5nOworCXZhbHVlc1tuKytdID0gY291bnQ7CisJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCisJCXZhbHVlc1tuKytdID0gcHJpbWFyeV9ldmVudF9pZChsZWFkZXIpOwogCiAJc2l6ZSA9IG4gKiBzaXplb2YodTY0KTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYnVmLCB2YWx1ZXMsIHNpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwkJZ290byB1bmxvY2s7CiAKLQllcnIgPSBwZXJmX2V2ZW50X3JlYWRfZW50cnkobGVhZGVyLCByZWFkX2Zvcm1hdCwgYnVmICsgc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlzaXplICs9IGVycjsKKwlyZXQgPSBzaXplOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJZXJyID0gcGVyZl9ldmVudF9yZWFkX2VudHJ5KHN1YiwgcmVhZF9mb3JtYXQsCi0JCQkJYnVmICsgc2l6ZSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJbiA9IDA7CiAKLQkJc2l6ZSArPSBlcnI7CisJCXZhbHVlc1tuKytdID0gcGVyZl9ldmVudF9yZWFkX3ZhbHVlKHN1YiwgJmVuYWJsZWQsICZydW5uaW5nKTsKKwkJaWYgKHJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCisJCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQoc3ViKTsKKworCQlzaXplID0gbiAqIHNpemVvZih1NjQpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgcmV0LCB2YWx1ZXMsIHNpemUpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQlyZXQgKz0gc2l6ZTsKIAl9Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKIAotCXJldHVybiBzaXplOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9yZWFkX29uZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJIHU2NCByZWFkX2Zvcm1hdCwgY2hhciBfX3VzZXIgKmJ1ZikKIHsKKwl1NjQgZW5hYmxlZCwgcnVubmluZzsKIAl1NjQgdmFsdWVzWzRdOwogCWludCBuID0gMDsKIAotCXZhbHVlc1tuKytdID0gcGVyZl9ldmVudF9yZWFkX3ZhbHVlKGV2ZW50KTsKLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpIHsKLQkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9lbmFibGVkICsKLQkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX2VuYWJsZWQpOwotCX0KLQlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpIHsKLQkJdmFsdWVzW24rK10gPSBldmVudC0+dG90YWxfdGltZV9ydW5uaW5nICsKLQkJCWF0b21pYzY0X3JlYWQoJmV2ZW50LT5jaGlsZF90b3RhbF90aW1lX3J1bm5pbmcpOwotCX0KKwl2YWx1ZXNbbisrXSA9IHBlcmZfZXZlbnRfcmVhZF92YWx1ZShldmVudCwgJmVuYWJsZWQsICZydW5uaW5nKTsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpCisJCXZhbHVlc1tuKytdID0gZW5hYmxlZDsKKwlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCisJCXZhbHVlc1tuKytdID0gcnVubmluZzsKIAlpZiAocmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKIAkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKGV2ZW50KTsKIApAQCAtMTg2MSwxMiArMTg5NSwxMCBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAogCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKLQltdXRleF9sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOwogCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0dST1VQKQogCQlyZXQgPSBwZXJmX2V2ZW50X3JlYWRfZ3JvdXAoZXZlbnQsIHJlYWRfZm9ybWF0LCBidWYpOwogCWVsc2UKIAkJcmV0ID0gcGVyZl9ldmVudF9yZWFkX29uZShldmVudCwgcmVhZF9mb3JtYXQsIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5NzQsNyArMjAwNiw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBvdXRwdXRfZmQpOworc3RhdGljIGludCBwZXJmX2V2ZW50X3NldF9vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgb3V0cHV0X2ZkKTsKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCBfX3VzZXIgKmFyZyk7CiAKIHN0YXRpYyBsb25nIHBlcmZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjAwMiw2ICsyMDM1LDkgQEAKIAljYXNlIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQ6CiAJCXJldHVybiBwZXJmX2V2ZW50X3NldF9vdXRwdXQoZXZlbnQsIGFyZyk7CiAKKwljYXNlIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVI6CisJCXJldHVybiBwZXJmX2V2ZW50X3NldF9maWx0ZXIoZXZlbnQsICh2b2lkIF9fdXNlciAqKWFyZyk7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CkBAIC0yMTc0LDYgKzIyMTAsNyBAQAogCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKIAkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKKwlrZnJlZShkYXRhKTsKIH0KIAogI2Vsc2UKQEAgLTIyMTQsNiArMjI1MSw3IEBACiAJCXBlcmZfbW1hcF91bm1hcmtfcGFnZShiYXNlICsgKGkgKiBQQUdFX1NJWkUpKTsKIAogCXZmcmVlKGJhc2UpOworCWtmcmVlKGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKQEAgLTIzMDcsNyArMjM0NSw3IEBACiAJfQogCiAJaWYgKCFkYXRhLT53YXRlcm1hcmspCi0JCWRhdGEtPndhdGVybWFyayA9IG1heF90KGxvbmcsIFBBR0VfU0laRSwgbWF4X3NpemUgLyAyKTsKKwkJZGF0YS0+d2F0ZXJtYXJrID0gbWF4X3NpemUgLyAyOwogCiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOwpAQCAtMjMxOSw3ICsyMzU3LDYgQEAKIAogCWRhdGEgPSBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCBwZXJmX21tYXBfZGF0YSwgcmN1X2hlYWQpOwogCXBlcmZfbW1hcF9kYXRhX2ZyZWUoZGF0YSk7Ci0Ja2ZyZWUoZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX3JlbGVhc2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMjY2NiwyMCArMjcwMywyMSBAQAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfbG9jayhzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gaGFuZGxlLT5kYXRhOwotCWludCBjcHU7CisJaW50IGN1ciwgY3B1ID0gZ2V0X2NwdSgpOwogCiAJaGFuZGxlLT5sb2NrZWQgPSAwOwogCi0JbG9jYWxfaXJxX3NhdmUoaGFuZGxlLT5mbGFncyk7Ci0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWZvciAoOzspIHsKKwkJY3VyID0gYXRvbWljX2NtcHhjaGcoJmRhdGEtPmxvY2ssIC0xLCBjcHUpOworCQlpZiAoY3VyID09IC0xKSB7CisJCQloYW5kbGUtPmxvY2tlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3VyID09IGNwdSkKKwkJCWJyZWFrOwogCi0JaWYgKGluX25taSgpICYmIGF0b21pY19yZWFkKCZkYXRhLT5sb2NrKSA9PSBjcHUpCi0JCXJldHVybjsKLQotCXdoaWxlIChhdG9taWNfY21weGNoZygmZGF0YS0+bG9jaywgLTEsIGNwdSkgIT0gLTEpCiAJCWNwdV9yZWxheCgpOwotCi0JaGFuZGxlLT5sb2NrZWQgPSAxOworCX0KIH0KIAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfdW5sb2NrKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKQEAgLTI3MjUsNyArMjc2Myw3IEBACiAJaWYgKGF0b21pY194Y2hnKCZkYXRhLT53YWtldXAsIDApKQogCQlwZXJmX291dHB1dF93YWtldXAoaGFuZGxlKTsKIG91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShoYW5kbGUtPmZsYWdzKTsKKwlwdXRfY3B1KCk7CiB9CiAKIHZvaWQgcGVyZl9vdXRwdXRfY29weShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCkBAIC0zMjM2LDE1ICszMjc0LDEwIEBACiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goZXZlbnQpKQogCQkJcGVyZl9ldmVudF90YXNrX291dHB1dChldmVudCwgdGFza19ldmVudCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Rhc2tfZXZlbnQoc3RydWN0IHBlcmZfdGFza19ldmVudCAqdGFza19ldmVudCkKQEAgLTMyNTIsMTEgKzMyODUsMTEgQEAKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2tfZXZlbnQtPnRhc2tfY3R4OwogCisJcmN1X3JlYWRfbG9jaygpOwogCWNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlwZXJmX2V2ZW50X3Rhc2tfY3R4KCZjcHVjdHgtPmN0eCwgdGFza19ldmVudCk7CiAJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKCFjdHgpCiAJCWN0eCA9IHJjdV9kZXJlZmVyZW5jZSh0YXNrX2V2ZW50LT50YXNrLT5wZXJmX2V2ZW50X2N0eHApOwogCWlmIChjdHgpCkBAIC0zMzQ4LDE1ICszMzgxLDEwIEBACiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBsaXN0X2VtcHR5KCZjdHgtPmV2ZW50X2xpc3QpKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CiAJCWlmIChwZXJmX2V2ZW50X2NvbW1fbWF0Y2goZXZlbnQpKQogCQkJcGVyZl9ldmVudF9jb21tX291dHB1dChldmVudCwgY29tbV9ldmVudCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NvbW1fZXZlbnQoc3RydWN0IHBlcmZfY29tbV9ldmVudCAqY29tbV9ldmVudCkKQEAgLTMzNjcsNyArMzM5NSw3IEBACiAJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogCiAJbWVtc2V0KGNvbW0sIDAsIHNpemVvZihjb21tKSk7Ci0Jc3RybmNweShjb21tLCBjb21tX2V2ZW50LT50YXNrLT5jb21tLCBzaXplb2YoY29tbSkpOworCXN0cmxjcHkoY29tbSwgY29tbV9ldmVudC0+dGFzay0+Y29tbSwgc2l6ZW9mKGNvbW0pKTsKIAlzaXplID0gQUxJR04oc3RybGVuKGNvbW0pKzEsIHNpemVvZih1NjQpKTsKIAogCWNvbW1fZXZlbnQtPmNvbW0gPSBjb21tOwpAQCAtMzM3NSwxMSArMzQwMywxMSBAQAogCiAJY29tbV9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUgPSBzaXplb2YoY29tbV9ldmVudC0+ZXZlbnRfaWQpICsgc2l6ZTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcGVyZl9ldmVudF9jb21tX2N0eCgmY3B1Y3R4LT5jdHgsIGNvbW1fZXZlbnQpOwogCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCS8qCiAJICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKIAkgKiBldmVudHMgZW5kcyB1cCBpbi4KQEAgLTM0NzIsMTUgKzM1MDAsMTAgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAKLQlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9SVU5OSU5HIHx8IGxpc3RfZW1wdHkoJmN0eC0+ZXZlbnRfbGlzdCkpCi0JCXJldHVybjsKLQotCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKIAkJaWYgKHBlcmZfZXZlbnRfbW1hcF9tYXRjaChldmVudCwgbW1hcF9ldmVudCkpCiAJCQlwZXJmX2V2ZW50X21tYXBfb3V0cHV0KGV2ZW50LCBtbWFwX2V2ZW50KTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfbW1hcF9ldmVudChzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50KQpAQCAtMzUzNiwxMSArMzU1OSwxMSBAQAogCiAJbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUgPSBzaXplb2YobW1hcF9ldmVudC0+ZXZlbnRfaWQpICsgc2l6ZTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcGVyZl9ldmVudF9tbWFwX2N0eCgmY3B1Y3R4LT5jdHgsIG1tYXBfZXZlbnQpOwogCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCS8qCiAJICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKIAkgKiBldmVudHMgZW5kcyB1cCBpbi4KQEAgLTM2NzksNyArMzcwMiwxMSBAQAogCQkJcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKIAl9CiAKLQlwZXJmX2V2ZW50X291dHB1dChldmVudCwgbm1pLCBkYXRhLCByZWdzKTsKKwlpZiAoZXZlbnQtPm92ZXJmbG93X2hhbmRsZXIpCisJCWV2ZW50LT5vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBubWksIGRhdGEsIHJlZ3MpOworCWVsc2UKKwkJcGVyZl9ldmVudF9vdXRwdXQoZXZlbnQsIG5taSwgZGF0YSwgcmVncyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzI0LDE2ICszNzUxLDE2IEBACiAJcmV0dXJuIG5yOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LAogCQkJCSAgICBpbnQgbm1pLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKIAkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IHRocm90dGxlID0gMDsKLQl1NjQgb3ZlcmZsb3c7CiAKIAlkYXRhLT5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0Jb3ZlcmZsb3cgPSBwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChldmVudCk7CisJaWYgKCFvdmVyZmxvdykKKwkJb3ZlcmZsb3cgPSBwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChldmVudCk7CiAKIAlpZiAoaHdjLT5pbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKQogCQlyZXR1cm47CkBAIC0zNzY2LDE0ICszNzkzLDE5IEBACiAKIAlhdG9taWM2NF9hZGQobnIsICZldmVudC0+Y291bnQpOwogCi0JaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpCi0JCXJldHVybjsKLQogCWlmICghcmVncykKIAkJcmV0dXJuOwogCi0JaWYgKCFhdG9taWM2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKLQkJcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCBubWksIGRhdGEsIHJlZ3MpOworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm47CisKKwlpZiAobnIgPT0gMSAmJiBod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSAmJiAhZXZlbnQtPmF0dHIuZnJlcSkKKwkJcmV0dXJuIHBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgMSwgbm1pLCBkYXRhLCByZWdzKTsKKworCWlmIChhdG9taWM2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKKwkJcmV0dXJuOworCisJcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCBubWksIGRhdGEsIHJlZ3MpOwogfQogCiBzdGF0aWMgaW50IHBlcmZfc3dldmVudF9pc19jb3VudGluZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC0zODA2LDI1ICszODM4LDQ0IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgcGVyZl90cF9ldmVudF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpOworCitzdGF0aWMgaW50IHBlcmZfZXhjbHVkZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAocmVncykgeworCQlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyICYmIHVzZXJfbW9kZShyZWdzKSkKKwkJCXJldHVybiAxOworCisJCWlmIChldmVudC0+YXR0ci5leGNsdWRlX2tlcm5lbCAmJiAhdXNlcl9tb2RlKHJlZ3MpKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGVyZl9zd2V2ZW50X21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQllbnVtIHBlcmZfdHlwZV9pZCB0eXBlLAotCQkJCXUzMiBldmVudF9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisJCQkJdTMyIGV2ZW50X2lkLAorCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmICghcGVyZl9zd2V2ZW50X2lzX2NvdW50aW5nKGV2ZW50KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSB0eXBlKQogCQlyZXR1cm4gMDsKKwogCWlmIChldmVudC0+YXR0ci5jb25maWcgIT0gZXZlbnRfaWQpCiAJCXJldHVybiAwOwogCi0JaWYgKHJlZ3MpIHsKLQkJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlciAmJiB1c2VyX21vZGUocmVncykpCi0JCQlyZXR1cm4gMDsKKwlpZiAocGVyZl9leGNsdWRlX2V2ZW50KGV2ZW50LCByZWdzKSkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfa2VybmVsICYmICF1c2VyX21vZGUocmVncykpCi0JCQlyZXR1cm4gMDsKLQl9CisJaWYgKGV2ZW50LT5hdHRyLnR5cGUgPT0gUEVSRl9UWVBFX1RSQUNFUE9JTlQgJiYKKwkgICAgIXBlcmZfdHBfZXZlbnRfbWF0Y2goZXZlbnQsIGRhdGEpKQorCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQpAQCAtMzgzNyw0OSArMzg4OCw1OSBAQAogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgbGlzdF9lbXB0eSgmY3R4LT5ldmVudF9saXN0KSkKLQkJcmV0dXJuOwotCi0JcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgewotCQlpZiAocGVyZl9zd2V2ZW50X21hdGNoKGV2ZW50LCB0eXBlLCBldmVudF9pZCwgcmVncykpCisJCWlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCBkYXRhLCByZWdzKSkKIAkJCXBlcmZfc3dldmVudF9hZGQoZXZlbnQsIG5yLCBubWksIGRhdGEsIHJlZ3MpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGludCAqcGVyZl9zd2V2ZW50X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCitpbnQgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKQogeworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJaW50IHJjdHg7CisKIAlpZiAoaW5fbm1pKCkpCi0JCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bM107CisJCXJjdHggPSAzOworCWVsc2UgaWYgKGluX2lycSgpKQorCQlyY3R4ID0gMjsKKwllbHNlIGlmIChpbl9zb2Z0aXJxKCkpCisJCXJjdHggPSAxOworCWVsc2UKKwkJcmN0eCA9IDA7CiAKLQlpZiAoaW5faXJxKCkpCi0JCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMl07CisJaWYgKGNwdWN0eC0+cmVjdXJzaW9uW3JjdHhdKSB7CisJCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCQlyZXR1cm4gLTE7CisJfQogCi0JaWYgKGluX3NvZnRpcnEoKSkKLQkJcmV0dXJuICZjcHVjdHgtPnJlY3Vyc2lvblsxXTsKKwljcHVjdHgtPnJlY3Vyc2lvbltyY3R4XSsrOworCWJhcnJpZXIoKTsKIAotCXJldHVybiAmY3B1Y3R4LT5yZWN1cnNpb25bMF07CisJcmV0dXJuIHJjdHg7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KTsKKwordm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KQoreworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKKwliYXJyaWVyKCk7CisJY3B1Y3R4LT5yZWN1cnNpb25bcmN0eF0tLTsKKwlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQpOwogCiBzdGF0aWMgdm9pZCBkb19wZXJmX3N3X2V2ZW50KGVudW0gcGVyZl90eXBlX2lkIHR5cGUsIHUzMiBldmVudF9pZCwKIAkJCQkgICAgdTY0IG5yLCBpbnQgbm1pLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKIAkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZnZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQlpbnQgKnJlY3Vyc2lvbiA9IHBlcmZfc3dldmVudF9yZWN1cnNpb25fY29udGV4dChjcHVjdHgpOworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwogCi0JaWYgKCpyZWN1cnNpb24pCi0JCWdvdG8gb3V0OwotCi0JKCpyZWN1cnNpb24pKys7Ci0JYmFycmllcigpOwotCisJY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJcmN1X3JlYWRfbG9jaygpOwogCXBlcmZfc3dldmVudF9jdHhfZXZlbnQoJmNwdWN0eC0+Y3R4LCB0eXBlLCBldmVudF9pZCwKIAkJCQkgbnIsIG5taSwgZGF0YSwgcmVncyk7Ci0JcmN1X3JlYWRfbG9jaygpOwogCS8qCiAJICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKIAkgKiBldmVudHMgZW5kcyB1cCBpbi4KQEAgLTM4ODgsMjMgKzM5NDksMjQgQEAKIAlpZiAoY3R4KQogCQlwZXJmX3N3ZXZlbnRfY3R4X2V2ZW50KGN0eCwgdHlwZSwgZXZlbnRfaWQsIG5yLCBubWksIGRhdGEsIHJlZ3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCi0JYmFycmllcigpOwotCSgqcmVjdXJzaW9uKS0tOwotCi1vdXQ6Ci0JcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiB9CiAKIHZvaWQgX19wZXJmX3N3X2V2ZW50KHUzMiBldmVudF9pZCwgdTY0IG5yLCBpbnQgbm1pLAogCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikKIHsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0gewotCQkuYWRkciA9IGFkZHIsCi0JfTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCWludCByY3R4OwogCi0JZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfU09GVFdBUkUsIGV2ZW50X2lkLCBuciwgbm1pLAotCQkJCSZkYXRhLCByZWdzKTsKKwlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOworCWlmIChyY3R4IDwgMCkKKwkJcmV0dXJuOworCisJZGF0YS5hZGRyID0gYWRkcjsKKwlkYXRhLnJhdyAgPSBOVUxMOworCisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfU09GVFdBUkUsIGV2ZW50X2lkLCBuciwgbm1pLCAmZGF0YSwgcmVncyk7CisKKwlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC0zOTQ5LDYgKzQwMTEsNyBAQAogCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOwogCiAJZGF0YS5hZGRyID0gMDsKKwlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKIAlyZWdzID0gZ2V0X2lycV9yZWdzKCk7CiAJLyoKIAkgKiBJbiBjYXNlIHdlIGV4Y2x1ZGUga2VybmVsIElQcyBvciBhcmUgc29tZWhvdyBub3QgaW4gaW50ZXJydXB0CkBAIC0zOTU5LDggKzQwMjIsOSBAQAogCQlyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOwogCiAJaWYgKHJlZ3MpIHsKLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKLQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOworCQlpZiAoIShldmVudC0+YXR0ci5leGNsdWRlX2lkbGUgJiYgY3VycmVudC0+cGlkID09IDApKQorCQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKIAl9CiAKIAlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBldmVudC0+aHcuc2FtcGxlX3BlcmlvZCk7CkBAIC0zOTY5LDYgKzQwMzMsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCXU2NCBwZXJpb2Q7CisKKwkJaWYgKGh3Yy0+cmVtYWluaW5nKSB7CisJCQlpZiAoaHdjLT5yZW1haW5pbmcgPCAwKQorCQkJCXBlcmlvZCA9IDEwMDAwOworCQkJZWxzZQorCQkJCXBlcmlvZCA9IGh3Yy0+cmVtYWluaW5nOworCQkJaHdjLT5yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJfQorCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKKwkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAorCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJa3RpbWVfdCByZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcik7CisJCWh3Yy0+cmVtYWluaW5nID0ga3RpbWVfdG9fbnMocmVtYWluaW5nKTsKKworCQlocnRpbWVyX2NhbmNlbCgmaHdjLT5ocnRpbWVyKTsKKwl9Cit9CisKIC8qCiAgKiBTb2Z0d2FyZSBldmVudDogY3B1IHdhbGwgdGltZSBjbG9jawogICovCkBAIC0zOTkxLDIyICs0MDkxLDE0IEBACiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHVfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAljcHVfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQpOwogfQogCkBAIC00MDQzLDIyICs0MTM1LDE1IEBACiAJbm93ID0gZXZlbnQtPmN0eC0+dGltZTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwotCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJdTY0IHBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAotCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCi0JCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7Ci0JfQorCisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRhc2tfY2xvY2tfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpCi0JCWhydGltZXJfY2FuY2VsKCZldmVudC0+aHcuaHJ0aW1lcik7CisJcGVyZl9zd2V2ZW50X2NhbmNlbF9ocnRpbWVyKGV2ZW50KTsKIAl0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBldmVudC0+Y3R4LT50aW1lKTsKIAogfQpAQCAtNDA4Niw2ICs0MTcxLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsCiAJCQkgIGludCBlbnRyeV9zaXplKQogewpAQCAtNDEwNCwxMyArNDE5MCwyMSBAQAogCWlmICghcmVncykKIAkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKIAorCS8qIFRyYWNlIGV2ZW50cyBhbHJlYWR5IHByb3RlY3RlZCBhZ2FpbnN0IHJlY3Vyc2lvbiAqLwogCWRvX3BlcmZfc3dfZXZlbnQoUEVSRl9UWVBFX1RSQUNFUE9JTlQsIGV2ZW50X2lkLCBjb3VudCwgMSwKIAkJCQkmZGF0YSwgcmVncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RwX2V2ZW50KTsKIAotZXh0ZXJuIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGUoaW50KTsKLWV4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGUoaW50KTsKK3N0YXRpYyBpbnQgcGVyZl90cF9ldmVudF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEpCit7CisJdm9pZCAqcmVjb3JkID0gZGF0YS0+cmF3LT5kYXRhOworCisJaWYgKGxpa2VseSghZXZlbnQtPmZpbHRlcikgfHwgZmlsdGVyX21hdGNoX3ByZWRzKGV2ZW50LT5maWx0ZXIsIHJlY29yZCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiBzdGF0aWMgdm9pZCB0cF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewpAQCAtNDEzNSwxMSArNDIyOSw5OSBAQAogCiAJcmV0dXJuICZwZXJmX29wc19nZW5lcmljOwogfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfc2V0X2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgX191c2VyICphcmcpCit7CisJY2hhciAqZmlsdGVyX3N0cjsKKwlpbnQgcmV0OworCisJaWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX1RSQUNFUE9JTlQpCisJCXJldHVybiAtRUlOVkFMOworCisJZmlsdGVyX3N0ciA9IHN0cm5kdXBfdXNlcihhcmcsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihmaWx0ZXJfc3RyKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmlsdGVyX3N0cik7CisKKwlyZXQgPSBmdHJhY2VfcHJvZmlsZV9zZXRfZmlsdGVyKGV2ZW50LCBldmVudC0+YXR0ci5jb25maWcsIGZpbHRlcl9zdHIpOworCisJa2ZyZWUoZmlsdGVyX3N0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJZnRyYWNlX3Byb2ZpbGVfZnJlZV9maWx0ZXIoZXZlbnQpOworfQorCiAjZWxzZQorCitzdGF0aWMgaW50IHBlcmZfdHBfZXZlbnRfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhKQoreworCXJldHVybiAxOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSAqdHBfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KKworc3RhdGljIGludCBwZXJmX2V2ZW50X3NldF9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkIF9fdXNlciAqYXJnKQoreworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCitzdGF0aWMgdm9pZCBicF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJlbGVhc2VfYnBfc2xvdChldmVudCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICpicF9wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCWludCBlcnI7CisJLyoKKwkgKiBUaGUgYnJlYWtwb2ludCBpcyBhbHJlYWR5IGZpbGxlZCBpZiB3ZSBoYXZlbid0IGNyZWF0ZWQgdGhlIGNvdW50ZXIKKwkgKiB0aHJvdWdoIHBlcmYgc3lzY2FsbAorCSAqIEZJWE1FOiBtYW5hZ2UgdG8gZ2V0IHRyaWdlcnJlZCB0byBOVUxMIGlmIGl0IGNvbWVzIGZyb20gc3lzY2FsbHMKKwkgKi8KKwlpZiAoIWJwLT5jYWxsYmFjaykKKwkJZXJyID0gcmVnaXN0ZXJfcGVyZl9od19icmVha3BvaW50KGJwKTsKKwllbHNlCisJCWVyciA9IF9fcmVnaXN0ZXJfcGVyZl9od19icmVha3BvaW50KGJwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJYnAtPmRlc3Ryb3kgPSBicF9wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKKwlyZXR1cm4gJnBlcmZfb3BzX2JwOworfQorCit2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIHNhbXBsZTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGRhdGE7CisKKwlzYW1wbGUuYWRkciA9IGJwLT5hdHRyLmJwX2FkZHI7CisKKwlpZiAoIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpCisJCXBlcmZfc3dldmVudF9hZGQoYnAsIDEsIDEsICZzYW1wbGUsIHJlZ3MpOworfQorI2Vsc2UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11ICpicF9wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXJldHVybiBOVUxMOworfQorCit2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpyZWdzKQoreworfQogI2VuZGlmCiAKIGF0b21pY190IHBlcmZfc3dldmVudF9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKQEAgLTQxODYsNiArNDM2OCw4IEBACiAJY2FzZSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSjoKIAljYXNlIFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFUzoKIAljYXNlIFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlM6CisJY2FzZSBQRVJGX0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFM6CisJY2FzZSBQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFM6CiAJCWlmICghZXZlbnQtPnBhcmVudCkgewogCQkJYXRvbWljX2luYygmcGVyZl9zd2V2ZW50X2VuYWJsZWRbZXZlbnRfaWRdKTsKIAkJCWV2ZW50LT5kZXN0cm95ID0gc3dfcGVyZl9ldmVudF9kZXN0cm95OwpAQCAtNDIwNiw2ICs0MzkwLDcgQEAKIAkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAogCQkgICBzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCQkgICBzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50LAorCQkgICBwZXJmX2NhbGxiYWNrX3QgY2FsbGJhY2ssCiAJCSAgIGdmcF90IGdmcGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCBwbXUgKnBtdTsKQEAgLTQyNDgsNiArNDQzMywxMSBAQAogCiAJZXZlbnQtPnN0YXRlCQk9IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU7CiAKKwlpZiAoIWNhbGxiYWNrICYmIHBhcmVudF9ldmVudCkKKwkJY2FsbGJhY2sgPSBwYXJlbnRfZXZlbnQtPmNhbGxiYWNrOworCQorCWV2ZW50LT5jYWxsYmFjawk9IGNhbGxiYWNrOworCiAJaWYgKGF0dHItPmRpc2FibGVkKQogCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKIApAQCAtNDI4Miw2ICs0NDcyLDExIEBACiAJCXBtdSA9IHRwX3BlcmZfZXZlbnRfaW5pdChldmVudCk7CiAJCWJyZWFrOwogCisJY2FzZSBQRVJGX1RZUEVfQlJFQUtQT0lOVDoKKwkJcG11ID0gYnBfcGVyZl9ldmVudF9pbml0KGV2ZW50KTsKKwkJYnJlYWs7CisKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTQzOTQsNyArNDU4OSw3IEBACiAJZ290byBvdXQ7CiB9CiAKLWludCBwZXJmX2V2ZW50X3NldF9vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgb3V0cHV0X2ZkKQorc3RhdGljIGludCBwZXJmX2V2ZW50X3NldF9vdXRwdXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgb3V0cHV0X2ZkKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpvdXRwdXRfZXZlbnQgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpvdXRwdXRfZmlsZSA9IE5VTEw7CkBAIC00NTI0LDcgKzQ3MTksNyBAQAogCX0KIAogCWV2ZW50ID0gcGVyZl9ldmVudF9hbGxvYygmYXR0ciwgY3B1LCBjdHgsIGdyb3VwX2xlYWRlciwKLQkJCQkgICAgIE5VTEwsIEdGUF9LRVJORUwpOworCQkJCSAgICAgTlVMTCwgTlVMTCwgR0ZQX0tFUk5FTCk7CiAJZXJyID0gUFRSX0VSUihldmVudCk7CiAJaWYgKElTX0VSUihldmVudCkpCiAJCWdvdG8gZXJyX3B1dF9jb250ZXh0OwpAQCAtNDU3Miw2ICs0NzY3LDYwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcgorICoKKyAqIEBhdHRyOiBhdHRyaWJ1dGVzIG9mIHRoZSBjb3VudGVyIHRvIGNyZWF0ZQorICogQGNwdTogY3B1IGluIHdoaWNoIHRoZSBjb3VudGVyIGlzIGJvdW5kCisgKiBAcGlkOiB0YXNrIHRvIHByb2ZpbGUKKyAqLworc3RydWN0IHBlcmZfZXZlbnQgKgorcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwgaW50IGNwdSwKKwkJCQkgcGlkX3QgcGlkLCBwZXJmX2NhbGxiYWNrX3QgY2FsbGJhY2spCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBHZXQgdGhlIHRhcmdldCBjb250ZXh0ICh0YXNrIG9yIHBlcmNwdSk6CisJICovCisKKwljdHggPSBmaW5kX2dldF9jb250ZXh0KHBpZCwgY3B1KTsKKwlpZiAoSVNfRVJSKGN0eCkpIHsKKwkJZXJyID0gUFRSX0VSUihjdHgpOworCQlnb3RvIGVycl9leGl0OworCX0KKworCWV2ZW50ID0gcGVyZl9ldmVudF9hbGxvYyhhdHRyLCBjcHUsIGN0eCwgTlVMTCwKKwkJCQkgICAgIE5VTEwsIGNhbGxiYWNrLCBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKGV2ZW50KSkgeworCQllcnIgPSBQVFJfRVJSKGV2ZW50KTsKKwkJZ290byBlcnJfcHV0X2NvbnRleHQ7CisJfQorCisJZXZlbnQtPmZpbHAgPSBOVUxMOworCVdBUk5fT05fT05DRShjdHgtPnBhcmVudF9jdHgpOworCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOworCXBlcmZfaW5zdGFsbF9pbl9jb250ZXh0KGN0eCwgZXZlbnQsIGNwdSk7CisJKytjdHgtPmdlbmVyYXRpb247CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKKworCWV2ZW50LT5vd25lciA9IGN1cnJlbnQ7CisJZ2V0X3Rhc2tfc3RydWN0KGN1cnJlbnQpOworCW11dGV4X2xvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5vd25lcl9lbnRyeSwgJmN1cnJlbnQtPnBlcmZfZXZlbnRfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5wZXJmX2V2ZW50X211dGV4KTsKKworCXJldHVybiBldmVudDsKKworIGVycl9wdXRfY29udGV4dDoKKwlwdXRfY3R4KGN0eCk7CisgZXJyX2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKTsKKwogLyoKICAqIGluaGVyaXQgYSBldmVudCBmcm9tIHBhcmVudCB0YXNrIHRvIGNoaWxkIHRhc2s6CiAgKi8KQEAgLTQ1OTcsNyArNDg0Niw3IEBACiAJY2hpbGRfZXZlbnQgPSBwZXJmX2V2ZW50X2FsbG9jKCZwYXJlbnRfZXZlbnQtPmF0dHIsCiAJCQkJCSAgIHBhcmVudF9ldmVudC0+Y3B1LCBjaGlsZF9jdHgsCiAJCQkJCSAgIGdyb3VwX2xlYWRlciwgcGFyZW50X2V2ZW50LAotCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJCQkJICAgTlVMTCwgR0ZQX0tFUk5FTCk7CiAJaWYgKElTX0VSUihjaGlsZF9ldmVudCkpCiAJCXJldHVybiBjaGlsZF9ldmVudDsKIAlnZXRfY3R4KGNoaWxkX2N0eCk7CkBAIC00NjE1LDYgKzQ4NjQsOCBAQAogCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkKIAkJY2hpbGRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPSBwYXJlbnRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CiAKKwljaGlsZF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlciA9IHBhcmVudF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlcjsKKwogCS8qCiAJICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgogCSAqLwpAQCAtNDcwNCw3ICs0OTU1LDYgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50X2V2ZW50OwogCi0JdXBkYXRlX2V2ZW50X3RpbWVzKGNoaWxkX2V2ZW50KTsKIAlwZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoY2hpbGRfZXZlbnQpOwogCiAJcGFyZW50X2V2ZW50ID0gY2hpbGRfZXZlbnQtPnBhcmVudDsKQEAgLTQ3NTYsNiArNTAwNiw3IEBACiAJICogdGhlIGV2ZW50cyBmcm9tIGl0LgogCSAqLwogCXVuY2xvbmVfY3R4KGNoaWxkX2N0eCk7CisJdXBkYXRlX2NvbnRleHRfdGltZShjaGlsZF9jdHgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaWxkX2N0eC0+bG9jaywgZmxhZ3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwppbmRleCAwNGIzYTgzLi4wNGE5ZTkwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKKysrIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCkBAIC02OTMsMjEgKzY5MywyMiBAQAogCS8qIFRoZSBzbmFwc2hvdCBkZXZpY2Ugc2hvdWxkIG5vdCBiZSBvcGVuZWQgd2hpbGUgd2UncmUgcnVubmluZyAqLwogCWlmICghYXRvbWljX2FkZF91bmxlc3MoJnNuYXBzaG90X2RldmljZV9hdmFpbGFibGUsIC0xLCAwKSkgewogCQllcnJvciA9IC1FQlVTWTsKKwkJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOwogCQlnb3RvIFVubG9jazsKIAl9CiAKIAlwbV9wcmVwYXJlX2NvbnNvbGUoKTsKIAllcnJvciA9IHBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUkVTVE9SRV9QUkVQQVJFKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gRmluaXNoOworCQlnb3RvIGNsb3NlX2ZpbmlzaDsKIAogCWVycm9yID0gdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gRmluaXNoOworCQlnb3RvIGNsb3NlX2ZpbmlzaDsKIAogCXByX2RlYnVnKCJQTTogUHJlcGFyaW5nIHByb2Nlc3NlcyBmb3IgcmVzdG9yZS5cbiIpOwogCWVycm9yID0gcHJlcGFyZV9wcm9jZXNzZXMoKTsKQEAgLTcxOSw2ICs3MjAsNyBAQAogCXByX2RlYnVnKCJQTTogUmVhZGluZyBoaWJlcm5hdGlvbiBpbWFnZS5cbiIpOwogCiAJZXJyb3IgPSBzd3N1c3BfcmVhZCgmZmxhZ3MpOworCXN3c3VzcF9jbG9zZShGTU9ERV9SRUFEKTsKIAlpZiAoIWVycm9yKQogCQloaWJlcm5hdGlvbl9yZXN0b3JlKGZsYWdzICYgU0ZfUExBVEZPUk1fTU9ERSk7CiAKQEAgLTczNyw2ICs3MzksOSBAQAogCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOwogCXByX2RlYnVnKCJQTTogUmVzdW1lIGZyb20gZGlzayBmYWlsZWQuXG4iKTsKIAlyZXR1cm4gZXJyb3I7CitjbG9zZV9maW5pc2g6CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOworCWdvdG8gRmluaXNoOwogfQogCiBsYXRlX2luaXRjYWxsKHNvZnR3YXJlX3Jlc3VtZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKaW5kZXggMTdkOGJiMS4uMjU1OTZlNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwpAQCAtMTksNyArMTksNyBAQAogICogVGhlIHRpbWUgaXQgdGFrZXMgaXMgc3lzdGVtLXNwZWNpZmljIHRob3VnaCwgc28gd2hlbiB3ZSB0ZXN0IHRoaXMKICAqIGR1cmluZyBzeXN0ZW0gYm9vdHVwIHdlIGFsbG93IGEgTE9UIG9mIHRpbWUuCiAgKi8KLSNkZWZpbmUgVEVTVF9TVVNQRU5EX1NFQ09ORFMJNQorI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwkxMAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXNwZW5kX3Rlc3Rfc3RhcnRfdGltZTsKIApAQCAtNDksNyArNDksOCBAQAogCSAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGlzc3Vlcy4gIFRoZSBzdGFjayBkdW1wIG9mIGEgV0FSTl9PTgogCSAqIGlzIG1vcmUgbGlrZWx5IHRvIGdldCB0aGUgcmlnaHQgYXR0ZW50aW9uIHRoYW4gYSBwcmludGsuLi4KIAkgKi8KLQlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwgIkNvbXBvbmVudDogJXNcbiIsIGxhYmVsKTsKKwlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwKKwkgICAgICJDb21wb25lbnQ6ICVzLCB0aW1lOiAldVxuIiwgbGFiZWwsIG1zZWMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggYjEwMWNkYy4uODkwZjZiMSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC0zMTQsNyArMzE0LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbTsKIAlpbnQgcmV0OwotCWludCBlcnJvciA9IDA7CiAJaW50IG5yX3BhZ2VzOwogCWludCBlcnIyOwogCXN0cnVjdCBiaW8gKmJpbzsKQEAgLTMyOSwyNiArMzI4LDI3IEBACiAJbnJfcGFnZXMgPSAwOwogCWJpbyA9IE5VTEw7CiAJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7Ci0JZG8geworCXdoaWxlICgxKSB7CiAJCXJldCA9IHNuYXBzaG90X3JlYWRfbmV4dChzbmFwc2hvdCwgUEFHRV9TSVpFKTsKLQkJaWYgKHJldCA+IDApIHsKLQkJCWVycm9yID0gc3dhcF93cml0ZV9wYWdlKGhhbmRsZSwgZGF0YV9vZigqc25hcHNob3QpLAotCQkJCQkJJmJpbyk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIShucl9wYWdlcyAlIG0pKQotCQkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7Ci0JCQlucl9wYWdlcysrOwotCQl9Ci0JfSB3aGlsZSAocmV0ID4gMCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQlyZXQgPSBzd2FwX3dyaXRlX3BhZ2UoaGFuZGxlLCBkYXRhX29mKCpzbmFwc2hvdCksICZiaW8pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWlmICghKG5yX3BhZ2VzICUgbSkpCisJCQlwcmludGsoIlxiXGJcYlxiJTNkJSUiLCBucl9wYWdlcyAvIG0pOworCQlucl9wYWdlcysrOworCX0KIAllcnIyID0gd2FpdF9vbl9iaW9fY2hhaW4oJmJpbyk7CiAJZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IGVycjI7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIXJldCkKKwkJcmV0ID0gZXJyMjsKKwlpZiAoIXJldCkKIAkJcHJpbnRrKCJcYlxiXGJcYmRvbmVcbiIpOworCWVsc2UKKwkJcHJpbnRrKCJcbiIpOwogCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3dyaXRlLCAiV3JvdGUiKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01MzYsNyArNTM2LDggQEAKIAkJc25hcHNob3Rfd3JpdGVfZmluYWxpemUoc25hcHNob3QpOwogCQlpZiAoIXNuYXBzaG90X2ltYWdlX2xvYWRlZChzbmFwc2hvdCkpCiAJCQllcnJvciA9IC1FTk9EQVRBOwotCX0KKwl9IGVsc2UKKwkJcHJpbnRrKCJcbiIpOwogCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIG5yX3RvX3JlYWQsICJSZWFkIik7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTcyLDggKzU3Myw2IEBACiAJCWVycm9yID0gbG9hZF9pbWFnZSgmaGFuZGxlLCAmc25hcHNob3QsIGhlYWRlci0+cGFnZXMgLSAxKTsKIAlyZWxlYXNlX3N3YXBfcmVhZGVyKCZoYW5kbGUpOwogCi0JYmxrZGV2X3B1dChyZXN1bWVfYmRldiwgRk1PREVfUkVBRCk7Ci0KIAlpZiAoIWVycm9yKQogCQlwcl9kZWJ1ZygiUE06IEltYWdlIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCWVsc2UKQEAgLTU5Niw3ICs1OTUsNyBAQAogCQllcnJvciA9IGJpb19yZWFkX3BhZ2Uoc3dzdXNwX3Jlc3VtZV9ibG9jaywKIAkJCQkJc3dzdXNwX2hlYWRlciwgTlVMTCk7CiAJCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKKwkJCWdvdG8gcHV0OwogCiAJCWlmICghbWVtY21wKFNXU1VTUF9TSUcsIHN3c3VzcF9oZWFkZXItPnNpZywgMTApKSB7CiAJCQltZW1jcHkoc3dzdXNwX2hlYWRlci0+c2lnLCBzd3N1c3BfaGVhZGVyLT5vcmlnX3NpZywgMTApOwpAQCAtNjA0LDggKzYwMywxMCBAQAogCQkJZXJyb3IgPSBiaW9fd3JpdGVfcGFnZShzd3N1c3BfcmVzdW1lX2Jsb2NrLAogCQkJCQkJc3dzdXNwX2hlYWRlciwgTlVMTCk7CiAJCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVycm9yID0gLUVJTlZBTDsKIAkJfQorCitwdXQ6CiAJCWlmIChlcnJvcikKIAkJCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYsIEZNT0RFX1JFQUQpOwogCQllbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggZjM4YjA3Zi4uYjVhYzRkOSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0xMzc2LDExICsxMzc3LDExIEBACiAgKi8KIERFRklORV9SQVRFTElNSVRfU1RBVEUocHJpbnRrX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7CiAKLWludCBwcmludGtfcmF0ZWxpbWl0KHZvaWQpCitpbnQgX19wcmludGtfcmF0ZWxpbWl0KGNvbnN0IGNoYXIgKmZ1bmMpCiB7Ci0JcmV0dXJuIF9fcmF0ZWxpbWl0KCZwcmludGtfcmF0ZWxpbWl0X3N0YXRlKTsKKwlyZXR1cm4gX19fcmF0ZWxpbWl0KCZwcmludGtfcmF0ZWxpbWl0X3N0YXRlLCBmdW5jKTsKIH0KLUVYUE9SVF9TWU1CT0wocHJpbnRrX3JhdGVsaW1pdCk7CitFWFBPUlRfU1lNQk9MKF9fcHJpbnRrX3JhdGVsaW1pdCk7CiAKIC8qKgogICogcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCAtIGNhbGxlci1jb250cm9sbGVkIHByaW50ayByYXRlbGltaXRpbmcKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwZGF0ZS5jIGIva2VybmVsL3JjdXBkYXRlLmMKaW5kZXggNDAwMTgzMy4uOWI3ZmQ0NyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXBkYXRlLmMKKysrIGIva2VybmVsL3JjdXBkYXRlLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7CkBAIC01Myw4ICs1Miw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfbG9ja19tYXApOwogI2VuZGlmCiAKLWludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwotCiAvKgogICogQXdha2VuIHRoZSBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXplX3JjdSgpIGluc3RhbmNlIG5vdyB0aGF0IGEKICAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KQEAgLTY2LDEyMiArNjMsMyBAQAogCXJjdSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcmN1X3N5bmNocm9uaXplLCBoZWFkKTsKIAljb21wbGV0ZSgmcmN1LT5jb21wbGV0aW9uKTsKIH0KLQotI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCi0KLS8qKgotICogc3luY2hyb25pemVfcmN1IC0gd2FpdCB1bnRpbCBhIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KLSAqCi0gKiBDb250cm9sIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgc29tZSB0aW1lIGFmdGVyIGEgZnVsbCBncmFjZQotICogcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyBSQ1UKLSAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKLSAqIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKSwKLSAqIGFuZCBtYXkgYmUgbmVzdGVkLgotICovCi12b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKQotewotCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OwotCi0JaWYgKCFyY3Vfc2NoZWR1bGVyX2FjdGl2ZSkKLQkJcmV0dXJuOwotCi0JaW5pdF9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7Ci0JLyogV2lsbCB3YWtlIG1lIGFmdGVyIFJDVSBmaW5pc2hlZC4gKi8KLQljYWxsX3JjdSgmcmN1LmhlYWQsIHdha2VtZV9hZnRlcl9yY3UpOwotCS8qIFdhaXQgZm9yIGl0LiAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7Ci0KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KLQotLyoqCi0gKiBzeW5jaHJvbml6ZV9zY2hlZCAtIHdhaXQgdW50aWwgYW4gcmN1LXNjaGVkIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KLSAqCi0gKiBDb250cm9sIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgc29tZSB0aW1lIGFmdGVyIGEgZnVsbCByY3Utc2NoZWQKLSAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZCwgaW4gb3RoZXIgd29yZHMgYWZ0ZXIgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcKLSAqIHJjdS1zY2hlZCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuICAgVGhlc2UgcmVhZC1zaWRlCi0gKiBjcml0aWNhbCBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2tfc2NoZWQoKSBhbmQKLSAqIHJjdV9yZWFkX3VubG9ja19zY2hlZCgpLCBhbmQgbWF5IGJlIG5lc3RlZC4gIE5vdGUgdGhhdCBwcmVlbXB0X2Rpc2FibGUoKSwKLSAqIGxvY2FsX2lycV9kaXNhYmxlKCksIGFuZCBzbyBvbiBtYXkgYmUgdXNlZCBpbiBwbGFjZSBvZgotICogcmN1X3JlYWRfbG9ja19zY2hlZCgpLgotICoKLSAqIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJlZW1wdF9kaXNhYmxlIGNvZGUgc2VxdWVuY2VzLCBpbmNsdWRpbmcgTk1JIGFuZAotICogaGFyZHdhcmUtaW50ZXJydXB0IGhhbmRsZXJzLCBpbiBwcm9ncmVzcyBvbiBlbnRyeSB3aWxsIGhhdmUgY29tcGxldGVkCi0gKiBiZWZvcmUgdGhpcyBwcmltaXRpdmUgcmV0dXJucy4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKLSAqIHNvZnRpcnEgaGFuZGxlcnMgd2lsbCBoYXZlIGNvbXBsZXRlZCwgc2luY2UgaW4gc29tZSBrZXJuZWxzLCB0aGVzZQotICogaGFuZGxlcnMgY2FuIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQsIGFuZCBjYW4gYmxvY2suCi0gKgotICogVGhpcyBwcmltaXRpdmUgcHJvdmlkZXMgdGhlIGd1YXJhbnRlZXMgbWFkZSBieSB0aGUgKG5vdyByZW1vdmVkKQotICogc3luY2hyb25pemVfa2VybmVsKCkgQVBJLiAgSW4gY29udHJhc3QsIHN5bmNocm9uaXplX3JjdSgpIG9ubHkKLSAqIGd1YXJhbnRlZXMgdGhhdCByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbnMgd2lsbCBoYXZlIGNvbXBsZXRlZC4KLSAqIEluICJjbGFzc2ljIFJDVSIsIHRoZXNlIHR3byBndWFyYW50ZWVzIGhhcHBlbiB0byBiZSBvbmUgYW5kCi0gKiB0aGUgc2FtZSwgYnV0IGNhbiBkaWZmZXIgaW4gcmVhbHRpbWUgUkNVIGltcGxlbWVudGF0aW9ucy4KLSAqLwotdm9pZCBzeW5jaHJvbml6ZV9zY2hlZCh2b2lkKQotewotCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OwotCi0JaWYgKHJjdV9ibG9ja2luZ19pc19ncCgpKQotCQlyZXR1cm47Ci0KLQlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKLQkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLwotCWNhbGxfcmN1X3NjaGVkKCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7Ci0JLyogV2FpdCBmb3IgaXQuICovCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc2NoZWQpOwotCi0vKioKLSAqIHN5bmNocm9uaXplX3JjdV9iaCAtIHdhaXQgdW50aWwgYW4gcmN1X2JoIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KLSAqCi0gKiBDb250cm9sIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgc29tZSB0aW1lIGFmdGVyIGEgZnVsbCByY3VfYmggZ3JhY2UKLSAqIHBlcmlvZCBoYXMgZWxhcHNlZCwgaW4gb3RoZXIgd29yZHMgYWZ0ZXIgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgcmN1X2JoCi0gKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuICBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0gKiBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCksCi0gKiBhbmQgbWF5IGJlIG5lc3RlZC4KLSAqLwotdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmgodm9pZCkKLXsKLQlzdHJ1Y3QgcmN1X3N5bmNocm9uaXplIHJjdTsKLQotCWlmIChyY3VfYmxvY2tpbmdfaXNfZ3AoKSkKLQkJcmV0dXJuOwotCi0JaW5pdF9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7Ci0JLyogV2lsbCB3YWtlIG1lIGFmdGVyIFJDVSBmaW5pc2hlZC4gKi8KLQljYWxsX3JjdV9iaCgmcmN1LmhlYWQsIHdha2VtZV9hZnRlcl9yY3UpOwotCS8qIFdhaXQgZm9yIGl0LiAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9iaCk7Ci0KLXN0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCi17Ci0JcmV0dXJuIHJjdV9jcHVfbm90aWZ5KHNlbGYsIGFjdGlvbiwgaGNwdSk7Ci19Ci0KLXZvaWQgX19pbml0IHJjdV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlfX3JjdV9pbml0KCk7Ci0JY3B1X25vdGlmaWVyKHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnLCAwKTsKLQotCS8qCi0JICogV2UgZG9uJ3QgbmVlZCBwcm90ZWN0aW9uIGFnYWluc3QgQ1BVLWhvdHBsdWcgaGVyZSBiZWNhdXNlCi0JICogdGhpcyBpcyBjYWxsZWQgZWFybHkgaW4gYm9vdCwgYmVmb3JlIGVpdGhlciBpbnRlcnJ1cHRzCi0JICogb3IgdGhlIHNjaGVkdWxlciBhcmUgb3BlcmF0aW9uYWwuCi0JICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlyY3VfYmFycmllcl9jcHVfaG90cGx1ZyhOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZylpKTsKLX0KLQotdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCi17Ci0JV0FSTl9PTihudW1fb25saW5lX2NwdXMoKSAhPSAxKTsKLQlXQVJOX09OKG5yX2NvbnRleHRfc3dpdGNoZXMoKSA+IDApOwotCXJjdV9zY2hlZHVsZXJfYWN0aXZlID0gMTsKLX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55LmMgYi9rZXJuZWwvcmN1dGlueS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmQ5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcmN1dGlueS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24sIHRoZSBCbG9hdHdhdGNoIGVkaXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA4CisgKgorICogQXV0aG9yOiBQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiBGb3IgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gc2VlIC0KKyAqCQlEb2N1bWVudGF0aW9uL1JDVQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisKKy8qIEdsb2JhbCBjb250cm9sIHZhcmlhYmxlcyBmb3IgcmN1cGRhdGUgY2FsbGJhY2sgbWVjaGFuaXNtLiAqLworc3RydWN0IHJjdV9jdHJsYmxrIHsKKwlzdHJ1Y3QgcmN1X2hlYWQgKnJjdWNibGlzdDsJLyogTGlzdCBvZiBwZW5kaW5nIGNhbGxiYWNrcyAoQ0JzKS4gKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgKipkb25ldGFpbDsJLyogLT5uZXh0IHBvaW50ZXIgb2YgbGFzdCAiZG9uZSIgQ0IuICovCisJc3RydWN0IHJjdV9oZWFkICoqY3VydGFpbDsJLyogLT5uZXh0IHBvaW50ZXIgb2YgbGFzdCBDQi4gKi8KK307CisKKy8qIERlZmluaXRpb24gZm9yIHJjdXBkYXRlIGNvbnRyb2wgYmxvY2suICovCitzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0geworCS5kb25ldGFpbAk9ICZyY3VfY3RybGJsay5yY3VjYmxpc3QsCisJLmN1cnRhaWwJPSAmcmN1X2N0cmxibGsucmN1Y2JsaXN0LAorfTsKKworc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfYmhfY3RybGJsayA9IHsKKwkuZG9uZXRhaWwJPSAmcmN1X2JoX2N0cmxibGsucmN1Y2JsaXN0LAorCS5jdXJ0YWlsCT0gJnJjdV9iaF9jdHJsYmxrLnJjdWNibGlzdCwKK307CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKworc3RhdGljIGxvbmcgcmN1X2R5bnRpY2tzX25lc3RpbmcgPSAxOworCisvKgorICogRW50ZXIgZHludGlja3MtaWRsZSBtb2RlLCB3aGljaCBpcyBhbiBleHRlbmRlZCBxdWllc2NlbnQgc3RhdGUKKyAqIGlmIHdlIGhhdmUgZnVsbHkgZW50ZXJlZCB0aGF0IG1vZGUgKGkuZS4sIGlmIHRoZSBuZXcgdmFsdWUgb2YKKyAqIGR5bnRpY2tzX25lc3RpbmcgaXMgemVybykuCisgKi8KK3ZvaWQgcmN1X2VudGVyX25vaHoodm9pZCkKK3sKKwlpZiAoLS1yY3VfZHludGlja3NfbmVzdGluZyA9PSAwKQorCQlyY3Vfc2NoZWRfcXMoMCk7IC8qIGltcGxpZXMgcmN1X2JoX3FzY3RyX2luYygwKSAqLworfQorCisvKgorICogRXhpdCBkeW50aWNrcy1pZGxlIG1vZGUsIHNvIHRoYXQgd2UgYXJlIG5vIGxvbmdlciBpbiBhbiBleHRlbmRlZAorICogcXVpZXNjZW50IHN0YXRlLgorICovCit2b2lkIHJjdV9leGl0X25vaHoodm9pZCkKK3sKKwlyY3VfZHludGlja3NfbmVzdGluZysrOworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciByY3VfcXNjdHJfaW5jKCkgYW5kIHJjdV9iaF9xc2N0cl9pbmMoKS4KKyAqIEFsc28gZGlzYWJsZSBpcnFzIHRvIGF2b2lkIGNvbmZ1c2lvbiBkdWUgdG8gaW50ZXJydXB0IGhhbmRsZXJzCisgKiBpbnZva2luZyBjYWxsX3JjdSgpLgorICovCitzdGF0aWMgaW50IHJjdV9xc2N0cl9oZWxwKHN0cnVjdCByY3VfY3RybGJsayAqcmNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHJjcC0+cmN1Y2JsaXN0ICE9IE5VTEwgJiYKKwkgICAgcmNwLT5kb25ldGFpbCAhPSByY3AtPmN1cnRhaWwpIHsKKwkJcmNwLT5kb25ldGFpbCA9IHJjcC0+Y3VydGFpbDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gMTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWNvcmQgYW4gcmN1IHF1aWVzY2VudCBzdGF0ZS4gIEFuZCBhbiByY3VfYmggcXVpZXNjZW50IHN0YXRlIHdoaWxlIHdlCisgKiBhcmUgYXQgaXQsIGdpdmVuIHRoYXQgYW55IHJjdSBxdWllc2NlbnQgc3RhdGUgaXMgYWxzbyBhbiByY3VfYmgKKyAqIHF1aWVzY2VudCBzdGF0ZS4gIFVzZSAiKyIgaW5zdGVhZCBvZiAifHwiIHRvIGRlZmVhdCBzaG9ydCBjaXJjdWl0aW5nLgorICovCit2b2lkIHJjdV9zY2hlZF9xcyhpbnQgY3B1KQoreworCWlmIChyY3VfcXNjdHJfaGVscCgmcmN1X2N0cmxibGspICsgcmN1X3FzY3RyX2hlbHAoJnJjdV9iaF9jdHJsYmxrKSkKKwkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7Cit9CisKKy8qCisgKiBSZWNvcmQgYW4gcmN1X2JoIHF1aWVzY2VudCBzdGF0ZS4KKyAqLwordm9pZCByY3VfYmhfcXMoaW50IGNwdSkKK3sKKwlpZiAocmN1X3FzY3RyX2hlbHAoJnJjdV9iaF9jdHJsYmxrKSkKKwkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgdGhlIHNjaGVkdWxpbmctY2xvY2sgaW50ZXJydXB0IGNhbWUgZnJvbSBhbiBleHRlbmRlZAorICogcXVpZXNjZW50IHN0YXRlLCBhbmQsIGlmIHNvLCB0ZWxsIFJDVSBhYm91dCBpdC4KKyAqLwordm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQoreworCWlmICh1c2VyIHx8CisJICAgIChpZGxlX2NwdShjcHUpICYmCisJICAgICAhaW5fc29mdGlycSgpICYmCisJICAgICBoYXJkaXJxX2NvdW50KCkgPD0gKDEgPDwgSEFSRElSUV9TSElGVCkpKQorCQlyY3Vfc2NoZWRfcXMoY3B1KTsKKwllbHNlIGlmICghaW5fc29mdGlycSgpKQorCQlyY3VfYmhfcXMoY3B1KTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdGhhdCBvcGVyYXRlcyBvbiB0aGUKKyAqIHNwZWNpZmllZCByY3VfY3RybGtibGsgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKK3sKKwlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJZiBubyBSQ1UgY2FsbGJhY2tzIHJlYWR5IHRvIGludm9rZSwganVzdCByZXR1cm4uICovCisJaWYgKCZyY3AtPnJjdWNibGlzdCA9PSByY3AtPmRvbmV0YWlsKQorCQlyZXR1cm47CisKKwkvKiBNb3ZlIHRoZSByZWFkeS10by1pbnZva2UgY2FsbGJhY2tzIHRvIGEgbG9jYWwgbGlzdC4gKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbGlzdCA9IHJjcC0+cmN1Y2JsaXN0OworCXJjcC0+cmN1Y2JsaXN0ID0gKnJjcC0+ZG9uZXRhaWw7CisJKnJjcC0+ZG9uZXRhaWwgPSBOVUxMOworCWlmIChyY3AtPmN1cnRhaWwgPT0gcmNwLT5kb25ldGFpbCkKKwkJcmNwLT5jdXJ0YWlsID0gJnJjcC0+cmN1Y2JsaXN0OworCXJjcC0+ZG9uZXRhaWwgPSAmcmNwLT5yY3VjYmxpc3Q7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyogSW52b2tlIHRoZSBjYWxsYmFja3Mgb24gdGhlIGxvY2FsIGxpc3QuICovCisJd2hpbGUgKGxpc3QpIHsKKwkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCXByZWZldGNoKG5leHQpOworCQlsaXN0LT5mdW5jKGxpc3QpOworCQlsaXN0ID0gbmV4dDsKKwl9Cit9CisKKy8qCisgKiBJbnZva2UgYW55IGNhbGxiYWNrcyB3aG9zZSBncmFjZSBwZXJpb2QgaGFzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdW51c2VkKQoreworCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3VfY3RybGJsayk7CisJX19yY3VfcHJvY2Vzc19jYWxsYmFja3MoJnJjdV9iaF9jdHJsYmxrKTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIHRvIGVsYXBzZS4gIEJ1dCBpdCBpcyBpbGxlZ2FsIHRvIGludm9rZQorICogc3luY2hyb25pemVfc2NoZWQoKSBmcm9tIHdpdGhpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKiBUaGVyZWZvcmUsIGFueSBsZWdhbCBjYWxsIHRvIHN5bmNocm9uaXplX3NjaGVkKCkgaXMgYSBxdWllc2NlbnQKKyAqIHN0YXRlLCBhbmQgc28gb24gYSBVUCBzeXN0ZW0sIHN5bmNocm9uaXplX3NjaGVkKCkgbmVlZCBkbyBub3RoaW5nLgorICogRGl0dG8gZm9yIHN5bmNocm9uaXplX3JjdV9iaCgpLiAgKEJ1dCBMYWkgSmlhbmdzaGFuIHBvaW50cyBvdXQgdGhlCisgKiBiZW5lZml0cyBvZiBkb2luZyBtaWdodF9zbGVlcCgpIHRvIHJlZHVjZSBsYXRlbmN5LikKKyAqCisgKiBDb29sLCBodWg/ICAoRHVlIHRvIEpvc2ggVHJpcGxldHQuKQorICoKKyAqIEJ1dCB3ZSB3YW50IHRvIG1ha2UgdGhpcyBhIHN0YXRpYyBpbmxpbmUgbGF0ZXIuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfc2NoZWQodm9pZCkKK3sKKwljb25kX3Jlc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NjaGVkKTsKKwordm9pZCBzeW5jaHJvbml6ZV9yY3VfYmgodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2JoKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY2FsbF9yY3UoKSBhbmQgY2FsbF9yY3VfYmgoKS4KKyAqLworc3RhdGljIHZvaWQgX19jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCisJCSAgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpLAorCQkgICAgICAgc3RydWN0IHJjdV9jdHJsYmxrICpyY3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhlYWQtPmZ1bmMgPSBmdW5jOworCWhlYWQtPm5leHQgPSBOVUxMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSpyY3AtPmN1cnRhaWwgPSBoZWFkOworCXJjcC0+Y3VydGFpbCA9ICZoZWFkLT5uZXh0OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFBvc3QgYW4gUkNVIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGVuZCBvZiBhbiBSQ1UgZ3JhY2UKKyAqIHBlcmlvZC4gIEJ1dCBzaW5jZSB3ZSBoYXZlIGJ1dCBvbmUgQ1BVLCB0aGF0IHdvdWxkIGJlIGFmdGVyIGFueQorICogcXVpZXNjZW50IHN0YXRlLgorICovCit2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKK3sKKwlfX2NhbGxfcmN1KGhlYWQsIGZ1bmMsICZyY3VfY3RybGJsayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CisKKy8qCisgKiBQb3N0IGFuIFJDVSBib3R0b20taGFsZiBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIGFueSBzdWJzZXF1ZW50CisgKiBxdWllc2NlbnQgc3RhdGUuCisgKi8KK3ZvaWQgY2FsbF9yY3VfYmgoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKQoreworCV9fY2FsbF9yY3UoaGVhZCwgZnVuYywgJnJjdV9iaF9jdHJsYmxrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1X2JoKTsKKwordm9pZCByY3VfYmFycmllcih2b2lkKQoreworCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OworCisJaW5pdF9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7CisJLyogV2lsbCB3YWtlIG1lIGFmdGVyIFJDVSBmaW5pc2hlZC4gKi8KKwljYWxsX3JjdSgmcmN1LmhlYWQsIHdha2VtZV9hZnRlcl9yY3UpOworCS8qIFdhaXQgZm9yIGl0LiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyKTsKKwordm9pZCByY3VfYmFycmllcl9iaCh2b2lkKQoreworCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OworCisJaW5pdF9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7CisJLyogV2lsbCB3YWtlIG1lIGFmdGVyIFJDVSBmaW5pc2hlZC4gKi8KKwljYWxsX3JjdV9iaCgmcmN1LmhlYWQsIHdha2VtZV9hZnRlcl9yY3UpOworCS8qIFdhaXQgZm9yIGl0LiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX2JoKTsKKwordm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKQoreworCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OworCisJaW5pdF9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7CisJLyogV2lsbCB3YWtlIG1lIGFmdGVyIFJDVSBmaW5pc2hlZC4gKi8KKwljYWxsX3JjdV9zY2hlZCgmcmN1LmhlYWQsIHdha2VtZV9hZnRlcl9yY3UpOworCS8qIFdhaXQgZm9yIGl0LiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKKwordm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKK3sKKwlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCA2OTdjMGEwLi5hNjIxYTY3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTMyNyw2ICszMjcsMTEgQEAKIAkJY3VyX29wcy0+ZGVmZXJyZWRfZnJlZShycCk7CiB9CiAKK3N0YXRpYyBpbnQgcmN1X25vX2NvbXBsZXRlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9kZWZlcnJlZF9mcmVlKHN0cnVjdCByY3VfdG9ydHVyZSAqcCkKIHsKIAljYWxsX3JjdSgmcC0+cnRvcnRfcmN1LCByY3VfdG9ydHVyZV9jYik7CkBAIC0zODgsNiArMzkzLDIxIEBACiAJLm5hbWUJCT0gInJjdV9zeW5jIgogfTsKIAorc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X2V4cGVkaXRlZF9vcHMgPSB7CisJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAorCS5jbGVhbnVwCT0gTlVMTCwKKwkucmVhZGxvY2sJPSByY3VfdG9ydHVyZV9yZWFkX2xvY2ssCisJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KKwkucmVhZHVubG9jawk9IHJjdV90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5jb21wbGV0ZWQJPSByY3Vfbm9fY29tcGxldGVkLAorCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAorCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQsCisJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5zdGF0cwkJPSBOVUxMLAorCS5pcnFfY2FwYWJsZQk9IDEsCisJLm5hbWUJCT0gInJjdV9leHBlZGl0ZWQiCit9OworCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIHJjdV9iaCB0b3J0dXJlIHRlc3RpbmcuCiAgKi8KQEAgLTU0Nyw2ICs1NjcsMjUgQEAKIAkubmFtZQkJPSAic3JjdSIKIH07CiAKK3N0YXRpYyB2b2lkIHNyY3VfdG9ydHVyZV9zeW5jaHJvbml6ZV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgmc3JjdV9jdGwpOworfQorCitzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X2V4cGVkaXRlZF9vcHMgPSB7CisJLmluaXQJCT0gc3JjdV90b3J0dXJlX2luaXQsCisJLmNsZWFudXAJPSBzcmN1X3RvcnR1cmVfY2xlYW51cCwKKwkucmVhZGxvY2sJPSBzcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAorCS5yZWFkX2RlbGF5CT0gc3JjdV9yZWFkX2RlbGF5LAorCS5yZWFkdW5sb2NrCT0gc3JjdV90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5jb21wbGV0ZWQJPSBzcmN1X3RvcnR1cmVfY29tcGxldGVkLAorCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAorCS5zeW5jCQk9IHNyY3VfdG9ydHVyZV9zeW5jaHJvbml6ZV9leHBlZGl0ZWQsCisJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5zdGF0cwkJPSBzcmN1X3RvcnR1cmVfc3RhdHMsCisJLm5hbWUJCT0gInNyY3VfZXhwZWRpdGVkIgorfTsKKwogLyoKICAqIERlZmluaXRpb25zIGZvciBzY2hlZCB0b3J0dXJlIHRlc3RpbmcuCiAgKi8KQEAgLTU2MiwxMSArNjAxLDYgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCi1zdGF0aWMgaW50IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHJjdV9zY2hlZF90b3J0dXJlX2RlZmVycmVkX2ZyZWUoc3RydWN0IHJjdV90b3J0dXJlICpwKQogewogCWNhbGxfcmN1X3NjaGVkKCZwLT5ydG9ydF9yY3UsIHJjdV90b3J0dXJlX2NiKTsKQEAgLTU4Myw3ICs2MTcsNyBAQAogCS5yZWFkbG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF9sb2NrLAogCS5yZWFkX2RlbGF5CT0gcmN1X3JlYWRfZGVsYXksICAvKiBqdXN0IHJldXNlIHJjdSdzIHZlcnNpb24uICovCiAJLnJlYWR1bmxvY2sJPSBzY2hlZF90b3J0dXJlX3JlYWRfdW5sb2NrLAotCS5jb21wbGV0ZWQJPSBzY2hlZF90b3J0dXJlX2NvbXBsZXRlZCwKKwkuY29tcGxldGVkCT0gcmN1X25vX2NvbXBsZXRlZCwKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zY2hlZF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc2NoZWRfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyX3NjaGVkLApAQCAtNTkyLDEzICs2MjYsMTMgQEAKIAkubmFtZQkJPSAic2NoZWQiCiB9OwogCi1zdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzY2hlZF9vcHNfc3luYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNjaGVkX3N5bmNfb3BzID0gewogCS5pbml0CQk9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKIAkuY2xlYW51cAk9IE5VTEwsCiAJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KIAkucmVhZHVubG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZAk9IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkLAorCS5jb21wbGV0ZWQJPSByY3Vfbm9fY29tcGxldGVkLAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHNjaGVkX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLApAQCAtNjEyLDcgKzY0Niw3IEBACiAJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KIAkucmVhZHVubG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZAk9IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkLAorCS5jb21wbGV0ZWQJPSByY3Vfbm9fY29tcGxldGVkLAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCwKIAkuY2JfYmFycmllcgk9IE5VTEwsCkBAIC0xMDk3LDkgKzExMzEsMTAgQEAKIAlpbnQgY3B1OwogCWludCBmaXJzdGVyciA9IDA7CiAJc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKnRvcnR1cmVfb3BzW10gPQotCQl7ICZyY3Vfb3BzLCAmcmN1X3N5bmNfb3BzLCAmcmN1X2JoX29wcywgJnJjdV9iaF9zeW5jX29wcywKLQkJICAmc2NoZWRfZXhwZWRpdGVkX29wcywKLQkJICAmc3JjdV9vcHMsICZzY2hlZF9vcHMsICZzY2hlZF9vcHNfc3luYywgfTsKKwkJeyAmcmN1X29wcywgJnJjdV9zeW5jX29wcywgJnJjdV9leHBlZGl0ZWRfb3BzLAorCQkgICZyY3VfYmhfb3BzLCAmcmN1X2JoX3N5bmNfb3BzLAorCQkgICZzcmN1X29wcywgJnNyY3VfZXhwZWRpdGVkX29wcywKKwkJICAmc2NoZWRfb3BzLCAmc2NoZWRfc3luY19vcHMsICZzY2hlZF9leHBlZGl0ZWRfb3BzLCB9OwogCiAJbXV0ZXhfbG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCkBAIC0xMTEwLDggKzExNDUsMTIgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKHRvcnR1cmVfb3BzKSkgewotCQlwcmludGsoS0VSTl9BTEVSVCAicmN1dG9ydHVyZTogaW52YWxpZCB0b3J0dXJlIHR5cGU6IFwiJXNcIlxuIiwKKwkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdS10b3J0dXJlOiBpbnZhbGlkIHRvcnR1cmUgdHlwZTogXCIlc1wiXG4iLAogCQkgICAgICAgdG9ydHVyZV90eXBlKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdS10b3J0dXJlIHR5cGVzOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b3J0dXJlX29wcyk7IGkrKykKKwkJCXByaW50ayhLRVJOX0FMRVJUICIgJXMiLCB0b3J0dXJlX29wc1tpXS0+bmFtZSk7CisJCXByaW50ayhLRVJOX0FMRVJUICJcbiIpOwogCQltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNzA1ZjAyYS4uNTNhZTk1OSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC00NiwyMCArNDYsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCiAvKiBEYXRhIHN0cnVjdHVyZXMuICovCiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X25vZGVfY2xhc3NbTlVNX1JDVV9MVkxTXTsKKwogI2RlZmluZSBSQ1VfU1RBVEVfSU5JVElBTElaRVIobmFtZSkgeyBcCiAJLmxldmVsID0geyAmbmFtZS5ub2RlWzBdIH0sIFwKIAkubGV2ZWxjbnQgPSB7IFwKIAkJTlVNX1JDVV9MVkxfMCwgIC8qIHJvb3Qgb2YgaGllcmFyY2h5LiAqLyBcCiAJCU5VTV9SQ1VfTFZMXzEsIFwKIAkJTlVNX1JDVV9MVkxfMiwgXAotCQlOVU1fUkNVX0xWTF8zLCAvKiA9PSBNQVhfUkNVX0xWTFMgKi8gXAorCQlOVU1fUkNVX0xWTF8zLCBcCisJCU5VTV9SQ1VfTFZMXzQsIC8qID09IE1BWF9SQ1VfTFZMUyAqLyBcCiAJfSwgXAotCS5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVCwgXAorCS5zaWduYWxlZCA9IFJDVV9HUF9JRExFLCBcCiAJLmdwbnVtID0gLTMwMCwgXAogCS5jb21wbGV0ZWQgPSAtMzAwLCBcCiAJLm9ub2ZmbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKQEAgLTc3LDYgKzgxLDggQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAorc3RhdGljIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OworCiAKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCkBAIC05OCw3ICsxMDQsNyBAQAogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCiAJcmRwID0gJnBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSk7Ci0JcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IHJkcC0+Y29tcGxldGVkOworCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmdwbnVtIC0gMTsKIAliYXJyaWVyKCk7CiAJcmRwLT5wYXNzZWRfcXVpZXNjID0gMTsKIAlyY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CkBAIC0xMDksNyArMTE1LDcgQEAKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAogCXJkcCA9ICZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpOwotCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKKwlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcmRwLT5ncG51bSAtIDE7CiAJYmFycmllcigpOwogCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7CiB9CkBAIC0zMzUsMjggKzM0MSw5IEBACiAJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIH0KIAotLyoKLSAqIFJlY29yZCB0aGUgc3BlY2lmaWVkICJjb21wbGV0ZWQiIHZhbHVlLCB3aGljaCBpcyBsYXRlciB1c2VkIHRvIHZhbGlkYXRlCi0gKiBkeW50aWNrcyBjb3VudGVyIG1hbmlwdWxhdGlvbnMuICBTcGVjaWZ5ICJyc3AtPmNvbXBsZXRlZCAtIDEiIHRvCi0gKiB1bmNvbmRpdGlvbmFsbHkgaW52YWxpZGF0ZSBhbnkgZnV0dXJlIGR5bnRpY2tzIG1hbmlwdWxhdGlvbnMgKHdoaWNoIGlzCi0gKiB1c2VmdWwgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGdyYWNlIHBlcmlvZCkuCi0gKi8KLXN0YXRpYyB2b2lkIGR5bnRpY2tfcmVjb3JkX2NvbXBsZXRlZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGxvbmcgY29tcCkKLXsKLQlyc3AtPmR5bnRpY2tzX2NvbXBsZXRlZCA9IGNvbXA7Ci19Ci0KICNpZmRlZiBDT05GSUdfU01QCiAKIC8qCi0gKiBSZWNhbGwgdGhlIHByZXZpb3VzbHkgcmVjb3JkZWQgdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gZm9yIGR5bnRpY2tzLgotICovCi1zdGF0aWMgbG9uZyBkeW50aWNrX3JlY2FsbF9jb21wbGV0ZWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQotewotCXJldHVybiByc3AtPmR5bnRpY2tzX2NvbXBsZXRlZDsKLX0KLQotLyoKICAqIFNuYXBzaG90IHRoZSBzcGVjaWZpZWQgQ1BVJ3MgZHludGlja3MgY291bnRlciBzbyB0aGF0IHdlIGNhbiBsYXRlcgogICogY3JlZGl0IHRoZW0gd2l0aCBhbiBpbXBsaWNpdCBxdWllc2NlbnQgc3RhdGUuICBSZXR1cm4gMSBpZiB0aGlzIENQVQogICogaXMgaW4gZHludGlja3MgaWRsZSBtb2RlLCB3aGljaCBpcyBhbiBleHRlbmRlZCBxdWllc2NlbnQgc3RhdGUuCkBAIC00MTksMjQgKzQwNiw4IEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAotc3RhdGljIHZvaWQgZHludGlja19yZWNvcmRfY29tcGxldGVkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgbG9uZyBjb21wKQotewotfQotCiAjaWZkZWYgQ09ORklHX1NNUAogCi0vKgotICogSWYgdGhlcmUgYXJlIG5vIGR5bnRpY2tzLCB0aGVuIHRoZSBvbmx5IHdheSB0aGF0IGEgQ1BVIGNhbiBwYXNzaXZlbHkKLSAqIGJlIGluIGEgcXVpZXNjZW50IHN0YXRlIGlzIHRvIGJlIG9mZmxpbmUuICBVbmxpa2UgZHludGlja3MgaWRsZSwgd2hpY2gKLSAqIGlzIGEgcG9pbnQgaW4gdGltZSBkdXJpbmcgdGhlIHByaW9yIChhbHJlYWR5IGZpbmlzaGVkKSBncmFjZSBwZXJpb2QsCi0gKiBhbiBvZmZsaW5lIENQVSBpcyBhbHdheXMgaW4gYSBxdWllc2NlbnQgc3RhdGUsIGFuZCB0aHVzIGNhbiBiZQotICogdW5jb25kaXRpb25hbGx5IGFwcGxpZWQuICBTbyBqdXN0IHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBsb25nIGR5bnRpY2tfcmVjYWxsX2NvbXBsZXRlZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci0JcmV0dXJuIHJzcC0+Y29tcGxldGVkOwotfQotCiBzdGF0aWMgaW50IGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCXJldHVybiAwOwpAQCAtNTUzLDEzICs1MjQsMzMgQEAKIC8qCiAgKiBVcGRhdGUgQ1BVLWxvY2FsIHJjdV9kYXRhIHN0YXRlIHRvIHJlY29yZCB0aGUgbmV3bHkgbm90aWNlZCBncmFjZSBwZXJpb2QuCiAgKiBUaGlzIGlzIHVzZWQgYm90aCB3aGVuIHdlIHN0YXJ0ZWQgdGhlIGdyYWNlIHBlcmlvZCBhbmQgd2hlbiB3ZSBub3RpY2UKLSAqIHRoYXQgc29tZW9uZSBlbHNlIHN0YXJ0ZWQgdGhlIGdyYWNlIHBlcmlvZC4KKyAqIHRoYXQgc29tZW9uZSBlbHNlIHN0YXJ0ZWQgdGhlIGdyYWNlIHBlcmlvZC4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZQorICogLT5sb2NrIG9mIHRoZSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IENQVSwKKyAqICBhbmQgbXVzdCBoYXZlIGlycXMgZGlzYWJsZWQuCiAgKi8KK3N0YXRpYyB2b2lkIF9fbm90ZV9uZXdfZ3BudW0oc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJaWYgKHJkcC0+Z3BudW0gIT0gcm5wLT5ncG51bSkgeworCQlyZHAtPnFzX3BlbmRpbmcgPSAxOworCQlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOworCQlyZHAtPmdwbnVtID0gcm5wLT5ncG51bTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG5vdGVfbmV3X2dwbnVtKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7Ci0JcmRwLT5xc19wZW5kaW5nID0gMTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOwotCXJkcC0+Z3BudW0gPSByc3AtPmdwbnVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJjdV9ub2RlICpybnA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcm5wID0gcmRwLT5teW5vZGU7CisJaWYgKHJkcC0+Z3BudW0gPT0gQUNDRVNTX09OQ0Uocm5wLT5ncG51bSkgfHwgLyogb3V0c2lkZSBsb2NrLiAqLworCSAgICAhc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHJldHJ5IGxhdGVyLiAqLworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisJX19ub3RlX25ld19ncG51bShyc3AsIHJucCwgcmRwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTU4MywzMSArNTc0LDU5IEBACiB9CiAKIC8qCi0gKiBTdGFydCBhIG5ldyBSQ1UgZ3JhY2UgcGVyaW9kIGlmIHdhcnJhbnRlZCwgcmUtaW5pdGlhbGl6aW5nIHRoZSBoaWVyYXJjaHkKLSAqIGluIHByZXBhcmF0aW9uIGZvciBkZXRlY3RpbmcgdGhlIG5leHQgZ3JhY2UgcGVyaW9kLiAgVGhlIGNhbGxlciBtdXN0IGhvbGQKLSAqIHRoZSByb290IG5vZGUncyAtPmxvY2ssIHdoaWNoIGlzIHJlbGVhc2VkIGJlZm9yZSByZXR1cm4uICBIYXJkIGlycXMgbXVzdAotICogYmUgZGlzYWJsZWQuCisgKiBBZHZhbmNlIHRoaXMgQ1BVJ3MgY2FsbGJhY2tzLCBidXQgb25seSBpZiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QKKyAqIGhhcyBlbmRlZC4gIFRoaXMgbWF5IGJlIGNhbGxlZCBvbmx5IGZyb20gdGhlIENQVSB0byB3aG9tIHRoZSByZHAKKyAqIGJlbG9uZ3MuICBJbiBhZGRpdGlvbiwgdGhlIGNvcnJlc3BvbmRpbmcgbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmUncworICogLT5sb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLCB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkCi1yY3Vfc3RhcnRfZ3Aoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotCV9fcmVsZWFzZXMocmN1X2dldF9yb290KHJzcCktPmxvY2spCitfX3JjdV9wcm9jZXNzX2dwX2VuZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0Jc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKwkvKiBEaWQgYW5vdGhlciBncmFjZSBwZXJpb2QgZW5kPyAqLworCWlmIChyZHAtPmNvbXBsZXRlZCAhPSBybnAtPmNvbXBsZXRlZCkgewogCi0JaWYgKCFjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCS8qIEFkdmFuY2UgY2FsbGJhY2tzLiAgTm8gaGFybSBpZiBsaXN0IGVtcHR5LiAqLworCQlyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX1dBSVRfVEFJTF07CisJCXJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXTsKKwkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOworCisJCS8qIFJlbWVtYmVyIHRoYXQgd2Ugc2F3IHRoaXMgZ3JhY2UtcGVyaW9kIGNvbXBsZXRpb24uICovCisJCXJkcC0+Y29tcGxldGVkID0gcm5wLT5jb21wbGV0ZWQ7CisJfQorfQorCisvKgorICogQWR2YW5jZSB0aGlzIENQVSdzIGNhbGxiYWNrcywgYnV0IG9ubHkgaWYgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisgKiBoYXMgZW5kZWQuICBUaGlzIG1heSBiZSBjYWxsZWQgb25seSBmcm9tIHRoZSBDUFUgdG8gd2hvbSB0aGUgcmRwCisgKiBiZWxvbmdzLgorICovCitzdGF0aWMgdm9pZAorcmN1X3Byb2Nlc3NfZ3BfZW5kKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlybnAgPSByZHAtPm15bm9kZTsKKwlpZiAocmRwLT5jb21wbGV0ZWQgPT0gQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpIHx8IC8qIG91dHNpZGUgbG9jay4gKi8KKwkgICAgIXNwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCByZXRyeSBsYXRlci4gKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQorCV9fcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcm5wLCByZHApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworfQogCi0JLyogQWR2YW5jZSB0byBhIG5ldyBncmFjZSBwZXJpb2QgYW5kIGluaXRpYWxpemUgc3RhdGUuICovCi0JcnNwLT5ncG51bSsrOwotCVdBUk5fT05fT05DRShyc3AtPnNpZ25hbGVkID09IFJDVV9HUF9JTklUKTsKLQlyc3AtPnNpZ25hbGVkID0gUkNVX0dQX0lOSVQ7IC8qIEhvbGQgb2ZmIGZvcmNlX3F1aWVzY2VudF9zdGF0ZS4gKi8KLQlyc3AtPmppZmZpZXNfZm9yY2VfcXMgPSBqaWZmaWVzICsgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKLQlyZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShyc3ApOwotCWR5bnRpY2tfcmVjb3JkX2NvbXBsZXRlZChyc3AsIHJzcC0+Y29tcGxldGVkIC0gMSk7Ci0Jbm90ZV9uZXdfZ3BudW0ocnNwLCByZHApOworLyoKKyAqIERvIHBlci1DUFUgZ3JhY2UtcGVyaW9kIGluaXRpYWxpemF0aW9uIGZvciBydW5uaW5nIENQVS4gIFRoZSBjYWxsZXIKKyAqIG11c3QgaG9sZCB0aGUgbG9jayBvZiB0aGUgbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0bworICogdGhpcyBDUFUuCisgKi8KK3N0YXRpYyB2b2lkCityY3Vfc3RhcnRfZ3BfcGVyX2NwdShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3sKKwkvKiBQcmlvciBncmFjZSBwZXJpb2QgZW5kZWQsIHNvIGFkdmFuY2UgY2FsbGJhY2tzIGZvciBjdXJyZW50IENQVS4gKi8KKwlfX3JjdV9wcm9jZXNzX2dwX2VuZChyc3AsIHJucCwgcmRwKTsKIAogCS8qCiAJICogQmVjYXVzZSB0aGlzIENQVSBqdXN0IG5vdyBzdGFydGVkIHRoZSBuZXcgZ3JhY2UgcGVyaW9kLCB3ZSBrbm93CkBAIC02MjMsMTIgKzY0Miw1OSBAQAogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKIAlyZHAtPm54dHRhaWxbUkNVX1dBSVRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CiAKKwkvKiBTZXQgc3RhdGUgc28gdGhhdCB0aGlzIENQVSB3aWxsIGRldGVjdCB0aGUgbmV4dCBxdWllc2NlbnQgc3RhdGUuICovCisJX19ub3RlX25ld19ncG51bShyc3AsIHJucCwgcmRwKTsKK30KKworLyoKKyAqIFN0YXJ0IGEgbmV3IFJDVSBncmFjZSBwZXJpb2QgaWYgd2FycmFudGVkLCByZS1pbml0aWFsaXppbmcgdGhlIGhpZXJhcmNoeQorICogaW4gcHJlcGFyYXRpb24gZm9yIGRldGVjdGluZyB0aGUgbmV4dCBncmFjZSBwZXJpb2QuICBUaGUgY2FsbGVyIG11c3QgaG9sZAorICogdGhlIHJvb3Qgbm9kZSdzIC0+bG9jaywgd2hpY2ggaXMgcmVsZWFzZWQgYmVmb3JlIHJldHVybi4gIEhhcmQgaXJxcyBtdXN0CisgKiBiZSBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQKK3JjdV9zdGFydF9ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKK3sKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKworCWlmICghY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKSB7CisJCWlmIChybnAtPmNvbXBsZXRlZCA9PSByc3AtPmNvbXBsZXRlZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CSAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKworCQkvKgorCQkgKiBQcm9wYWdhdGUgbmV3IC0+Y29tcGxldGVkIHZhbHVlIHRvIHJjdV9ub2RlIHN0cnVjdHVyZXMKKwkJICogc28gdGhhdCBvdGhlciBDUFVzIGRvbid0IGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgc3RhcnQKKwkJICogb2YgdGhlIG5leHQgZ3JhY2UgcGVyaW9kIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzLgorCQkgKi8KKwkJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgeworCQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKKwkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJfQorCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBZHZhbmNlIHRvIGEgbmV3IGdyYWNlIHBlcmlvZCBhbmQgaW5pdGlhbGl6ZSBzdGF0ZS4gKi8KKwlyc3AtPmdwbnVtKys7CisJV0FSTl9PTl9PTkNFKHJzcC0+c2lnbmFsZWQgPT0gUkNVX0dQX0lOSVQpOworCXJzcC0+c2lnbmFsZWQgPSBSQ1VfR1BfSU5JVDsgLyogSG9sZCBvZmYgZm9yY2VfcXVpZXNjZW50X3N0YXRlLiAqLworCXJzcC0+amlmZmllc19mb3JjZV9xcyA9IGppZmZpZXMgKyBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTOworCXJlY29yZF9ncF9zdGFsbF9jaGVja190aW1lKHJzcCk7CisKIAkvKiBTcGVjaWFsLWNhc2UgdGhlIGNvbW1vbiBzaW5nbGUtbGV2ZWwgY2FzZS4gKi8KIAlpZiAoTlVNX1JDVV9OT0RFUyA9PSAxKSB7CiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOworCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwogCQlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgT0suICovCisJCXJjdV9zdGFydF9ncF9wZXJfY3B1KHJzcCwgcm5wLCByZHApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTY1Nyw2OSArNzIzLDUwIEBACiAJICogaXJxcyBkaXNhYmxlZC4KIAkgKi8KIAlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOworCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQorCQkJcmN1X3N0YXJ0X2dwX3Blcl9jcHUocnNwLCBybnAsIHJkcCk7CisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKKwlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKwlzcGluX2xvY2soJnJucC0+bG9jayk7CQkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBub3cgT0suICovCisJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiAvKgotICogQWR2YW5jZSB0aGlzIENQVSdzIGNhbGxiYWNrcywgYnV0IG9ubHkgaWYgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCi0gKiBoYXMgZW5kZWQuICBUaGlzIG1heSBiZSBjYWxsZWQgb25seSBmcm9tIHRoZSBDUFUgdG8gd2hvbSB0aGUgcmRwCi0gKiBiZWxvbmdzLgorICogUmVwb3J0IGEgZnVsbCBzZXQgb2YgcXVpZXNjZW50IHN0YXRlcyB0byB0aGUgc3BlY2lmaWVkIHJjdV9zdGF0ZQorICogZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIGludm9sdmVzIGNsZWFuaW5nIHVwIGFmdGVyIHRoZSBwcmlvciBncmFjZQorICogcGVyaW9kIGFuZCBsZXR0aW5nIHJjdV9zdGFydF9ncCgpIHN0YXJ0IHVwIHRoZSBuZXh0IGdyYWNlIHBlcmlvZAorICogaWYgb25lIGlzIG5lZWRlZC4gIE5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgaG9sZCBybnAtPmxvY2ssIGFzCisgKiByZXF1aXJlZCBieSByY3Vfc3RhcnRfZ3AoKSwgd2hpY2ggd2lsbCByZWxlYXNlIGl0LgogICovCi1zdGF0aWMgdm9pZAotcmN1X3Byb2Nlc3NfZ3BfZW5kKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCi17Ci0JbG9uZyBjb21wbGV0ZWRfc25hcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNvbXBsZXRlZF9zbmFwID0gQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpOyAgLyogb3V0c2lkZSBvZiBsb2NrLiAqLwotCi0JLyogRGlkIGFub3RoZXIgZ3JhY2UgcGVyaW9kIGVuZD8gKi8KLQlpZiAocmRwLT5jb21wbGV0ZWQgIT0gY29tcGxldGVkX3NuYXApIHsKLQotCQkvKiBBZHZhbmNlIGNhbGxiYWNrcy4gIE5vIGhhcm0gaWYgbGlzdCBlbXB0eS4gKi8KLQkJcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdOwotCQlyZHAtPm54dHRhaWxbUkNVX1dBSVRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF07Ci0JCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKLQotCQkvKiBSZW1lbWJlciB0aGF0IHdlIHNhdyB0aGlzIGdyYWNlLXBlcmlvZCBjb21wbGV0aW9uLiAqLwotCQlyZHAtPmNvbXBsZXRlZCA9IGNvbXBsZXRlZF9zbmFwOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBDbGVhbiB1cCBhZnRlciB0aGUgcHJpb3IgZ3JhY2UgcGVyaW9kIGFuZCBsZXQgcmN1X3N0YXJ0X2dwKCkgc3RhcnQgdXAKLSAqIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCBpZiBvbmUgaXMgbmVlZGVkLiAgTm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdAotICogaG9sZCBybnAtPmxvY2ssIGFzIHJlcXVpcmVkIGJ5IHJjdV9zdGFydF9ncCgpLCB3aGljaCB3aWxsIHJlbGVhc2UgaXQuCi0gKi8KLXN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2tfZmluaXNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyB2b2lkIHJjdV9yZXBvcnRfcXNfcnNwKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIAlfX3JlbGVhc2VzKHJjdV9nZXRfcm9vdChyc3ApLT5sb2NrKQogewogCVdBUk5fT05fT05DRSghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpOwogCXJzcC0+Y29tcGxldGVkID0gcnNwLT5ncG51bTsKLQlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwlyc3AtPnNpZ25hbGVkID0gUkNVX0dQX0lETEU7CiAJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm9vdCBub2RlJ3Mgcm5wLT5sb2NrLiAqLwogfQogCiAvKgotICogU2ltaWxhciB0byBjcHVfcXVpZXQoKSwgZm9yIHdoaWNoIGl0IGlzIGEgaGVscGVyIGZ1bmN0aW9uLiAgQWxsb3dzCi0gKiBhIGdyb3VwIG9mIENQVXMgdG8gYmUgcXVpZXRlZCBhdCBvbmUgZ28sIHRob3VnaCBhbGwgdGhlIENQVXMgaW4gdGhlCi0gKiBncm91cCBtdXN0IGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlLgotICogVGhhdCBzdHJ1Y3R1cmUncyBsb2NrIG11c3QgYmUgaGVsZCB1cG9uIGVudHJ5LCBhbmQgaXQgaXMgcmVsZWFzZWQKLSAqIGJlZm9yZSByZXR1cm4uCisgKiBTaW1pbGFyIHRvIHJjdV9yZXBvcnRfcXNfcmRwKCksIGZvciB3aGljaCBpdCBpcyBhIGhlbHBlciBmdW5jdGlvbi4KKyAqIEFsbG93cyBxdWllc2NlbnQgc3RhdGVzIGZvciBhIGdyb3VwIG9mIENQVXMgdG8gYmUgcmVwb3J0ZWQgYXQgb25lIGdvCisgKiB0byB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZSwgdGhvdWdoIGFsbCB0aGUgQ1BVcyBpbiB0aGUgZ3JvdXAKKyAqIG11c3QgYmUgcmVwcmVzZW50ZWQgYnkgdGhlIHNhbWUgcmN1X25vZGUgc3RydWN0dXJlICh3aGljaCBuZWVkIG5vdCBiZQorICogYSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZSwgdGhvdWdoIGl0IG9mdGVuIHdpbGwgYmUpLiAgVGhhdCBzdHJ1Y3R1cmUncworICogbG9jayBtdXN0IGJlIGhlbGQgdXBvbiBlbnRyeSwgYW5kIGl0IGlzIHJlbGVhc2VkIGJlZm9yZSByZXR1cm4uCiAgKi8KIHN0YXRpYyB2b2lkCi1jcHVfcXVpZXRfbXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorcmN1X3JlcG9ydF9xc19ybnAodW5zaWduZWQgbG9uZyBtYXNrLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCSAgc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJX19yZWxlYXNlcyhybnAtPmxvY2spCiB7CiAJc3RydWN0IHJjdV9ub2RlICpybnBfYzsKQEAgLTc1NSwyMSArODAyLDIzIEBACiAKIAkvKgogCSAqIEdldCBoZXJlIGlmIHdlIGFyZSB0aGUgbGFzdCBDUFUgdG8gcGFzcyB0aHJvdWdoIGEgcXVpZXNjZW50Ci0JICogc3RhdGUgZm9yIHRoaXMgZ3JhY2UgcGVyaW9kLiAgSW52b2tlIGNwdV9xdWlldF9tc2tfZmluaXNoKCkKKwkgKiBzdGF0ZSBmb3IgdGhpcyBncmFjZSBwZXJpb2QuICBJbnZva2UgcmN1X3JlcG9ydF9xc19yc3AoKQogCSAqIHRvIGNsZWFuIHVwIGFuZCBzdGFydCB0aGUgbmV4dCBncmFjZSBwZXJpb2QgaWYgb25lIGlzIG5lZWRlZC4KIAkgKi8KLQljcHVfcXVpZXRfbXNrX2ZpbmlzaChyc3AsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCXJjdV9yZXBvcnRfcXNfcnNwKHJzcCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2suICovCiB9CiAKIC8qCi0gKiBSZWNvcmQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLCB3aGljaCBtdXN0IGVpdGhlciBiZQotICogdGhlIGN1cnJlbnQgQ1BVLiAgVGhlIGxhc3Rjb21wIGFyZ3VtZW50IGlzIHVzZWQgdG8gbWFrZSBzdXJlIHdlIGFyZQotICogc3RpbGwgaW4gdGhlIGdyYWNlIHBlcmlvZCBvZiBpbnRlcmVzdC4gIFdlIGRvbid0IHdhbnQgdG8gZW5kIHRoZSBjdXJyZW50Ci0gKiBncmFjZSBwZXJpb2QgYmFzZWQgb24gcXVpZXNjZW50IHN0YXRlcyBkZXRlY3RlZCBpbiBhbiBlYXJsaWVyIGdyYWNlCi0gKiBwZXJpb2QhCisgKiBSZWNvcmQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVIHRvIHRoYXQgQ1BVJ3MgcmN1X2RhdGEKKyAqIHN0cnVjdHVyZS4gIFRoaXMgbXVzdCBiZSBlaXRoZXIgY2FsbGVkIGZyb20gdGhlIHNwZWNpZmllZCBDUFUsIG9yCisgKiBjYWxsZWQgd2hlbiB0aGUgc3BlY2lmaWVkIENQVSBpcyBrbm93biB0byBiZSBvZmZsaW5lIChhbmQgd2hlbiBpdCBpcworICogYWxzbyBrbm93biB0aGF0IG5vIG90aGVyIENQVSBpcyBjb25jdXJyZW50bHkgdHJ5aW5nIHRvIGhlbHAgdGhlIG9mZmxpbmUKKyAqIENQVSkuICBUaGUgbGFzdGNvbXAgYXJndW1lbnQgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgYXJlIHN0aWxsIGluIHRoZQorICogZ3JhY2UgcGVyaW9kIG9mIGludGVyZXN0LiAgV2UgZG9uJ3Qgd2FudCB0byBlbmQgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisgKiBiYXNlZCBvbiBxdWllc2NlbnQgc3RhdGVzIGRldGVjdGVkIGluIGFuIGVhcmxpZXIgZ3JhY2UgcGVyaW9kIQogICovCiBzdGF0aWMgdm9pZAotY3B1X3F1aWV0KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHAsIGxvbmcgbGFzdGNvbXApCityY3VfcmVwb3J0X3FzX3JkcChpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwLCBsb25nIGxhc3Rjb21wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwpAQCAtNzc3LDE1ICs4MjYsMTUgQEAKIAogCXJucCA9IHJkcC0+bXlub2RlOwogCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQlpZiAobGFzdGNvbXAgIT0gQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpKSB7CisJaWYgKGxhc3Rjb21wICE9IHJucC0+Y29tcGxldGVkKSB7CiAKIAkJLyoKIAkJICogU29tZW9uZSBiZWF0IHVzIHRvIGl0IGZvciB0aGlzIGdyYWNlIHBlcmlvZCwgc28gbGVhdmUuCiAJCSAqIFRoZSByYWNlIHdpdGggR1Agc3RhcnQgaXMgcmVzb2x2ZWQgYnkgdGhlIGZhY3QgdGhhdCB3ZQogCQkgKiBob2xkIHRoZSBsZWFmIHJjdV9ub2RlIGxvY2ssIHNvIHRoYXQgdGhlIHBlci1DUFUgYml0cwogCQkgKiBjYW5ub3QgeWV0IGJlIGluaXRpYWxpemVkIC0tIHNvIHdlIHdvdWxkIHNpbXBseSBmaW5kIG91cgotCQkgKiBDUFUncyBiaXQgYWxyZWFkeSBjbGVhcmVkIGluIGNwdV9xdWlldF9tc2soKSBpZiB0aGlzIHJhY2UKLQkJICogb2NjdXJyZWQuCisJCSAqIENQVSdzIGJpdCBhbHJlYWR5IGNsZWFyZWQgaW4gcmN1X3JlcG9ydF9xc19ybnAoKSBpZiB0aGlzCisJCSAqIHJhY2Ugb2NjdXJyZWQuCiAJCSAqLwogCQlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOwkvKiB0cnkgYWdhaW4gbGF0ZXIhICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwpAQCAtODAzLDcgKzg1Miw3IEBACiAJCSAqLwogCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CiAKLQkJY3B1X3F1aWV0X21zayhtYXNrLCByc3AsIHJucCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2sgKi8KKwkJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgcnNwLCBybnAsIGZsYWdzKTsgLyogcmxzZXMgcm5wLT5sb2NrICovCiAJfQogfQogCkBAIC04MzQsOCArODgzLDExIEBACiAJaWYgKCFyZHAtPnBhc3NlZF9xdWllc2MpCiAJCXJldHVybjsKIAotCS8qIFRlbGwgUkNVIHdlIGFyZSBkb25lIChidXQgY3B1X3F1aWV0KCkgd2lsbCBiZSB0aGUganVkZ2Ugb2YgdGhhdCkuICovCi0JY3B1X3F1aWV0KHJkcC0+Y3B1LCByc3AsIHJkcCwgcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCk7CisJLyoKKwkgKiBUZWxsIFJDVSB3ZSBhcmUgZG9uZSAoYnV0IHJjdV9yZXBvcnRfcXNfcmRwKCkgd2lsbCBiZSB0aGUKKwkgKiBqdWRnZSBvZiB0aGF0KS4KKwkgKi8KKwlyY3VfcmVwb3J0X3FzX3JkcChyZHAtPmNwdSwgcnNwLCByZHAsIHJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQpOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC04OTUsOCArOTQ3LDggQEAKIHN0YXRpYyB2b2lkIF9fcmN1X29mZmxpbmVfY3B1KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgbGFzdGNvbXA7CiAJdW5zaWduZWQgbG9uZyBtYXNrOworCWludCBuZWVkX3JlcG9ydCA9IDA7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtjcHVdOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCkBAIC05MTAsMTcgKzk2MiwzMiBAQAogCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucC0+cXNtYXNraW5pdCAmPSB+bWFzazsKIAkJaWYgKHJucC0+cXNtYXNraW5pdCAhPSAwKSB7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlpZiAocm5wICE9IHJkcC0+bXlub2RlKQorCQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJCWJyZWFrOwogCQl9Ci0JCXJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CisJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCisJCQluZWVkX3JlcG9ydCA9IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CisJCWVsc2UKKwkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKIAl9IHdoaWxlIChybnAgIT0gTlVMTCk7Ci0JbGFzdGNvbXAgPSByc3AtPmNvbXBsZXRlZDsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJLyoKKwkgKiBXZSBzdGlsbCBob2xkIHRoZSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZSBsb2NrIGhlcmUsIGFuZAorCSAqIGlycXMgYXJlIHN0aWxsIGRpc2FibGVkLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBzdWJ0ZXJmdWdlIGlzCisJICogYmVjYXVzZSBpbnZva2luZyByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKCkgd2l0aCAtPm9ub2ZmbG9jaworCSAqIGhlbGQgbGVhZHMgdG8gZGVhZGxvY2suCisJICovCisJc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcm5wID0gcmRwLT5teW5vZGU7CisJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19OT1JNX0dQKQorCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOworCWVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19FWFBfR1ApCisJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7CiAKIAlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOwogfQpAQCAtOTU4LDcgKzEwMjUsNyBAQAogICogSW52b2tlIGFueSBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBtYWRlIGl0IHRvIHRoZSBlbmQgb2YgdGhlaXIgZ3JhY2UKICAqIHBlcmlvZC4gIFRob3R0bGUgYXMgc3BlY2lmaWVkIGJ5IHJkcC0+YmxpbWl0LgogICovCi1zdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3VfaGVhZCAqbmV4dCwgKmxpc3QsICoqdGFpbDsKQEAgLTEwMTEsNiArMTA3OCwxMyBAQAogCWlmIChyZHAtPmJsaW1pdCA9PSBMT05HX01BWCAmJiByZHAtPnFsZW4gPD0gcWxvd21hcmspCiAJCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCisJLyogUmVzZXQgLT5xbGVuX2xhc3RfZnFzX2NoZWNrIHRyaWdnZXIgaWYgZW5vdWdoIENCcyBoYXZlIGRyYWluZWQuICovCisJaWYgKHJkcC0+cWxlbiA9PSAwICYmIHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayAhPSAwKSB7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOworCX0gZWxzZSBpZiAocmRwLT5xbGVuIDwgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrIC0gcWhpbWFyaykKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOworCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogUmUtcmFpc2UgdGhlIFJDVSBzb2Z0aXJxIGlmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVtYWluaW5nLiAqLwpAQCAtMTA4NSw3ICsxMTU5LDcgQEAKIAlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCW1hc2sgPSAwOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChyc3AtPmNvbXBsZXRlZCAhPSBsYXN0Y29tcCkgeworCQlpZiAocm5wLT5jb21wbGV0ZWQgIT0gbGFzdGNvbXApIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTEwOTksMTAgKzExNzMsMTAgQEAKIAkJCWlmICgocm5wLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKIAkJCQltYXNrIHw9IGJpdDsKIAkJfQotCQlpZiAobWFzayAhPSAwICYmIHJzcC0+Y29tcGxldGVkID09IGxhc3Rjb21wKSB7CisJCWlmIChtYXNrICE9IDAgJiYgcm5wLT5jb21wbGV0ZWQgPT0gbGFzdGNvbXApIHsKIAotCQkJLyogY3B1X3F1aWV0X21zaygpIHJlbGVhc2VzIHJucC0+bG9jay4gKi8KLQkJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKKwkJCS8qIHJjdV9yZXBvcnRfcXNfcm5wKCkgcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCQkJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwpAQCAtMTEyMCw2ICsxMTk0LDcgQEAKIAlsb25nIGxhc3Rjb21wOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAJdTggc2lnbmFsZWQ7CisJdTggZm9yY2Vub3c7CiAKIAlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm47ICAvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZm9yY2UuICovCkBAIC0xMTMyLDE5ICsxMjA3LDIwIEBACiAJCWdvdG8gdW5sb2NrX3JldDsgLyogbm8gZW1lcmdlbmN5IGFuZCBkb25lIHJlY2VudGx5LiAqLwogCXJzcC0+bl9mb3JjZV9xcysrOwogCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQlsYXN0Y29tcCA9IHJzcC0+Y29tcGxldGVkOworCWxhc3Rjb21wID0gcnNwLT5ncG51bSAtIDE7CiAJc2lnbmFsZWQgPSByc3AtPnNpZ25hbGVkOwogCXJzcC0+amlmZmllc19mb3JjZV9xcyA9IGppZmZpZXMgKyBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTOwotCWlmIChsYXN0Y29tcCA9PSByc3AtPmdwbnVtKSB7CisJaWYoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19uZ3ArKzsKIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CiAJCWdvdG8gdW5sb2NrX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCiAJfQogCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwogCXN3aXRjaCAoc2lnbmFsZWQpIHsKKwljYXNlIFJDVV9HUF9JRExFOgogCWNhc2UgUkNVX0dQX0lOSVQ6CiAKLQkJYnJlYWs7IC8qIGdyYWNlIHBlcmlvZCBzdGlsbCBpbml0aWFsaXppbmcsIGlnbm9yZS4gKi8KKwkJYnJlYWs7IC8qIGdyYWNlIHBlcmlvZCBpZGxlIG9yIGluaXRpYWxpemluZywgaWdub3JlLiAqLwogCiAJY2FzZSBSQ1VfU0FWRV9EWU5USUNLOgogCkBAIC0xMTU1LDIwICsxMjMxLDI5IEBACiAJCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgbGFzdGNvbXAsCiAJCQkJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKSkKIAkJCWdvdG8gdW5sb2NrX3JldDsKKwkJLyogZmFsbCBpbnRvIG5leHQgY2FzZS4gKi8KKworCWNhc2UgUkNVX1NBVkVfQ09NUExFVEVEOgogCiAJCS8qIFVwZGF0ZSBzdGF0ZSwgcmVjb3JkIGNvbXBsZXRpb24gY291bnRlci4gKi8KKwkJZm9yY2Vub3cgPSAwOwogCQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JCWlmIChsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCkgeworCQlpZiAobGFzdGNvbXAgKyAxID09IHJzcC0+Z3BudW0gJiYKKwkJICAgIGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkICYmCisJCSAgICByc3AtPnNpZ25hbGVkID09IHNpZ25hbGVkKSB7CiAJCQlyc3AtPnNpZ25hbGVkID0gUkNVX0ZPUkNFX1FTOwotCQkJZHludGlja19yZWNvcmRfY29tcGxldGVkKHJzcCwgbGFzdGNvbXApOworCQkJcnNwLT5jb21wbGV0ZWRfZnFzID0gbGFzdGNvbXA7CisJCQlmb3JjZW5vdyA9IHNpZ25hbGVkID09IFJDVV9TQVZFX0NPTVBMRVRFRDsKIAkJfQogCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQkJYnJlYWs7CisJCWlmICghZm9yY2Vub3cpCisJCQlicmVhazsKKwkJLyogZmFsbCBpbnRvIG5leHQgY2FzZS4gKi8KIAogCWNhc2UgUkNVX0ZPUkNFX1FTOgogCiAJCS8qIENoZWNrIGR5bnRpY2staWRsZSBzdGF0ZSwgc2VuZCBJUEkgdG8gbGFnZ2FydHMuICovCi0JCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgZHludGlja19yZWNhbGxfY29tcGxldGVkKHJzcCksCisJCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgcnNwLT5jb21wbGV0ZWRfZnFzLAogCQkJCQlyY3VfaW1wbGljaXRfZHludGlja3NfcXMpKQogCQkJZ290byB1bmxvY2tfcmV0OwogCkBAIC0xMjI0LDcgKzEzMDksNyBAQAogCX0KIAogCS8qIElmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVhZHksIGludm9rZSB0aGVtLiAqLwotCXJjdV9kb19iYXRjaChyZHApOworCXJjdV9kb19iYXRjaChyc3AsIHJkcCk7CiB9CiAKIC8qCkBAIC0xMjg4LDEwICsxMzczLDIwIEBACiAJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLwogCX0KIAotCS8qIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuICovCi0JaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcWhpbWFyaykpIHsKKwkvKgorCSAqIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuCisJICogRW5mb3JjZSBoeXN0ZXJlc2lzLCBhbmQgZG9uJ3QgaW52b2tlIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpCisJICogaWYgc29tZSBvdGhlciBDUFUgaGFzIHJlY2VudGx5IGRvbmUgc28uICBBbHNvLCBkb24ndCBib3RoZXIKKwkgKiBpbnZva2luZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpZiB0aGUgbmV3bHkgZW5xdWV1ZWQgY2FsbGJhY2sKKwkgKiBpcyB0aGUgb25seSBvbmUgd2FpdGluZyBmb3IgYSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUuCisJICovCisJaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICsgcWhpbWFyaykpIHsKIAkJcmRwLT5ibGltaXQgPSBMT05HX01BWDsKLQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJCWlmIChyc3AtPm5fZm9yY2VfcXMgPT0gcmRwLT5uX2ZvcmNlX3FzX3NuYXAgJiYKKwkJICAgICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gIT0gaGVhZCkKKwkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOwogCX0gZWxzZSBpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTEzMTUsNiArMTQxMCw2OCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3VfYmgpOwogCisvKioKKyAqIHN5bmNocm9uaXplX3NjaGVkIC0gd2FpdCB1bnRpbCBhbiByY3Utc2NoZWQgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIHJjdS1zY2hlZAorICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZworICogcmN1LXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gICBUaGVzZSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9ja19zY2hlZCgpIGFuZAorICogcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCksIGFuZCBtYXkgYmUgbmVzdGVkLiAgTm90ZSB0aGF0IHByZWVtcHRfZGlzYWJsZSgpLAorICogbG9jYWxfaXJxX2Rpc2FibGUoKSwgYW5kIHNvIG9uIG1heSBiZSB1c2VkIGluIHBsYWNlIG9mCisgKiByY3VfcmVhZF9sb2NrX3NjaGVkKCkuCisgKgorICogVGhpcyBtZWFucyB0aGF0IGFsbCBwcmVlbXB0X2Rpc2FibGUgY29kZSBzZXF1ZW5jZXMsIGluY2x1ZGluZyBOTUkgYW5kCisgKiBoYXJkd2FyZS1pbnRlcnJ1cHQgaGFuZGxlcnMsIGluIHByb2dyZXNzIG9uIGVudHJ5IHdpbGwgaGF2ZSBjb21wbGV0ZWQKKyAqIGJlZm9yZSB0aGlzIHByaW1pdGl2ZSByZXR1cm5zLiAgSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdAorICogc29mdGlycSBoYW5kbGVycyB3aWxsIGhhdmUgY29tcGxldGVkLCBzaW5jZSBpbiBzb21lIGtlcm5lbHMsIHRoZXNlCisgKiBoYW5kbGVycyBjYW4gcnVuIGluIHByb2Nlc3MgY29udGV4dCwgYW5kIGNhbiBibG9jay4KKyAqCisgKiBUaGlzIHByaW1pdGl2ZSBwcm92aWRlcyB0aGUgZ3VhcmFudGVlcyBtYWRlIGJ5IHRoZSAobm93IHJlbW92ZWQpCisgKiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBBUEkuICBJbiBjb250cmFzdCwgc3luY2hyb25pemVfcmN1KCkgb25seQorICogZ3VhcmFudGVlcyB0aGF0IHJjdV9yZWFkX2xvY2soKSBzZWN0aW9ucyB3aWxsIGhhdmUgY29tcGxldGVkLgorICogSW4gImNsYXNzaWMgUkNVIiwgdGhlc2UgdHdvIGd1YXJhbnRlZXMgaGFwcGVuIHRvIGJlIG9uZSBhbmQKKyAqIHRoZSBzYW1lLCBidXQgY2FuIGRpZmZlciBpbiByZWFsdGltZSBSQ1UgaW1wbGVtZW50YXRpb25zLgorICovCit2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpCit7CisJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CisKKwlpZiAocmN1X2Jsb2NraW5nX2lzX2dwKCkpCisJCXJldHVybjsKKworCWluaXRfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworCS8qIFdpbGwgd2FrZSBtZSBhZnRlciBSQ1UgZmluaXNoZWQuICovCisJY2FsbF9yY3Vfc2NoZWQoJnJjdS5oZWFkLCB3YWtlbWVfYWZ0ZXJfcmN1KTsKKwkvKiBXYWl0IGZvciBpdC4gKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zY2hlZCk7CisKKy8qKgorICogc3luY2hyb25pemVfcmN1X2JoIC0gd2FpdCB1bnRpbCBhbiByY3VfYmggZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIHJjdV9iaCBncmFjZQorICogcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyByY3VfYmgKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKSwKKyAqIGFuZCBtYXkgYmUgbmVzdGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKQoreworCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OworCisJaWYgKHJjdV9ibG9ja2luZ19pc19ncCgpKQorCQlyZXR1cm47CisKKwlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKKwkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLworCWNhbGxfcmN1X2JoKCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7CisJLyogV2FpdCBmb3IgaXQuICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2JoKTsKKwogLyoKICAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1tZWRpYXRlIFJDVS1yZWxhdGVkIHdvcmsgdG8gYmUgZG9uZQogICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG9mIFJDVSwgcmV0dXJuaW5nIDEgaWYgc28uCkBAIC0xMzI0LDYgKzE0ODEsOCBAQAogICovCiBzdGF0aWMgaW50IF9fcmN1X3BlbmRpbmcoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOworCiAJcmRwLT5uX3JjdV9wZW5kaW5nKys7CiAKIAkvKiBDaGVjayBmb3IgQ1BVIHN0YWxscywgaWYgZW5hYmxlZC4gKi8KQEAgLTEzNDgsMTMgKzE1MDcsMTMgQEAKIAl9CiAKIAkvKiBIYXMgYW5vdGhlciBSQ1UgZ3JhY2UgcGVyaW9kIGNvbXBsZXRlZD8gICovCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSAhPSByZHAtPmNvbXBsZXRlZCkgeyAvKiBvdXRzaWRlIGxvY2sgKi8KKwlpZiAoQUNDRVNTX09OQ0Uocm5wLT5jb21wbGV0ZWQpICE9IHJkcC0+Y29tcGxldGVkKSB7IC8qIG91dHNpZGUgbG9jayAqLwogCQlyZHAtPm5fcnBfZ3BfY29tcGxldGVkKys7CiAJCXJldHVybiAxOwogCX0KIAogCS8qIEhhcyBhIG5ldyBSQ1UgZ3JhY2UgcGVyaW9kIHN0YXJ0ZWQ/ICovCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pICE9IHJkcC0+Z3BudW0pIHsgLyogb3V0c2lkZSBsb2NrICovCisJaWYgKEFDQ0VTU19PTkNFKHJucC0+Z3BudW0pICE9IHJkcC0+Z3BudW0pIHsgLyogb3V0c2lkZSBsb2NrICovCiAJCXJkcC0+bl9ycF9ncF9zdGFydGVkKys7CiAJCXJldHVybiAxOwogCX0KQEAgLTEzOTcsNiArMTU1NiwyMSBAQAogCSAgICAgICByY3VfcHJlZW1wdF9uZWVkc19jcHUoY3B1KTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlcidzIGluaXRpYWxpemF0aW9uCisgKiBwcm9jZXNzLiAgQmVmb3JlIHRoaXMgaXMgY2FsbGVkLCB0aGUgaWRsZSB0YXNrIG1pZ2h0IGNvbnRhaW4KKyAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgKGR1cmluZyB3aGljaCB0aW1lLCB0aGlzIGlkbGUKKyAqIHRhc2sgaXMgYm9vdGluZyB0aGUgc3lzdGVtKS4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUKKyAqIGlkbGUgdGFza3MgYXJlIHByb2hpYml0ZWQgZnJvbSBjb250YWluaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zLgorICovCit2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKK3sKKwlXQVJOX09OKG51bV9vbmxpbmVfY3B1cygpICE9IDEpOworCVdBUk5fT04obnJfY29udGV4dF9zd2l0Y2hlcygpID4gMCk7CisJcmN1X3NjaGVkdWxlcl9hY3RpdmUgPSAxOworfQorCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKIHN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKQEAgLTE1MDgsMjEgKzE2ODIsMTggQEAKIHJjdV9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHByZWVtcHRhYmxlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBsYXN0Y29tcDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtjcHVdOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKIAkvKiBTZXQgdXAgbG9jYWwgc3RhdGUsIGVuc3VyaW5nIGNvbnNpc3RlbnQgdmlldyBvZiBnbG9iYWwgc3RhdGUuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCWxhc3Rjb21wID0gcnNwLT5jb21wbGV0ZWQ7Ci0JcmRwLT5jb21wbGV0ZWQgPSBsYXN0Y29tcDsKLQlyZHAtPmdwbnVtID0gbGFzdGNvbXA7CiAJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsgIC8qIFdlIGNvdWxkIGJlIHJhY2luZyB3aXRoIG5ldyBHUCwgKi8KIAlyZHAtPnFzX3BlbmRpbmcgPSAxOwkgLyogIHNvIHNldCB1cCB0byByZXNwb25kIHRvIGN1cnJlbnQgR1AuICovCiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwogCXJkcC0+cHJlZW1wdGFibGUgPSBwcmVlbXB0YWJsZTsKLQlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gbGFzdGNvbXAgLSAxOworCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIApAQCAtMTU0Miw2ICsxNzEzLDExIEBACiAJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPnFzbWFza2luaXQgfD0gbWFzazsKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKKwkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkgeworCQkJcmRwLT5ncG51bSA9IHJucC0+Y29tcGxldGVkOyAvKiBpZiBHUCBpbiBwcm9ncmVzcy4uLiAqLworCQkJcmRwLT5jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZDsKKwkJCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZCAtIDE7CisJCX0KIAkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwgJiYgIShybnAtPnFzbWFza2luaXQgJiBtYXNrKSk7CkBAIC0xNTU5LDggKzE3MzUsOCBAQAogLyoKICAqIEhhbmRsZSBDUFUgb25saW5lL29mZmxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cy4KICAqLwotaW50IF9fY3B1aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQorc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CiAKQEAgLTE2NDcsOCArMTgyMyw4IEBACiAJCWNwdXN0cmlkZSAqPSByc3AtPmxldmVsc3ByZWFkW2ldOwogCQlybnAgPSByc3AtPmxldmVsW2ldOwogCQlmb3IgKGogPSAwOyBqIDwgcnNwLT5sZXZlbGNudFtpXTsgaisrLCBybnArKykgewotCQkJaWYgKHJucCAhPSByY3VfZ2V0X3Jvb3QocnNwKSkKLQkJCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOworCQkJbG9ja2RlcF9zZXRfY2xhc3MoJnJucC0+bG9jaywgJnJjdV9ub2RlX2NsYXNzW2ldKTsKIAkJCXJucC0+Z3BudW0gPSAwOwogCQkJcm5wLT5xc21hc2sgPSAwOwogCQkJcm5wLT5xc21hc2tpbml0ID0gMDsKQEAgLTE2NjksOSArMTg0NSwxMCBAQAogCQkJcm5wLT5sZXZlbCA9IGk7CiAJCQlJTklUX0xJU1RfSEVBRCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdKTsKIAkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbMV0pOworCQkJSU5JVF9MSVNUX0hFQUQoJnJucC0+YmxvY2tlZF90YXNrc1syXSk7CisJCQlJTklUX0xJU1RfSEVBRCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzNdKTsKIAkJfQogCX0KLQlzcGluX2xvY2tfaW5pdCgmcmN1X2dldF9yb290KHJzcCktPmxvY2spOwogfQogCiAvKgpAQCAtMTY5NywxNiArMTg3NCwzMCBAQAogCX0gXAogfSB3aGlsZSAoMCkKIAotdm9pZCBfX2luaXQgX19yY3VfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKKwlpbnQgaTsKKwogCXJjdV9ib290dXBfYW5ub3VuY2UoKTsKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCXByaW50ayhLRVJOX0lORk8gIlJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxlZCBDUFVzIGlzIGVuYWJsZWQuXG4iKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKyNpZiBOVU1fUkNVX0xWTF80ICE9IDAKKwlwcmludGsoS0VSTl9JTkZPICJFeHBlcmltZW50YWwgZm91ci1sZXZlbCBoaWVyYXJjaHkgaXMgZW5hYmxlZC5cbiIpOworI2VuZGlmIC8qICNpZiBOVU1fUkNVX0xWTF80ICE9IDAgKi8KIAlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9zY2hlZF9zdGF0ZSwgcmN1X3NjaGVkX2RhdGEpOwogCVJDVV9JTklUX0ZMQVZPUigmcmN1X2JoX3N0YXRlLCByY3VfYmhfZGF0YSk7CiAJX19yY3VfaW5pdF9wcmVlbXB0KCk7CiAJb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOworCisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIHByb3RlY3Rpb24gYWdhaW5zdCBDUFUtaG90cGx1ZyBoZXJlIGJlY2F1c2UKKwkgKiB0aGlzIGlzIGNhbGxlZCBlYXJseSBpbiBib290LCBiZWZvcmUgZWl0aGVyIGludGVycnVwdHMKKwkgKiBvciB0aGUgc2NoZWR1bGVyIGFyZSBvcGVyYXRpb25hbC4KKwkgKi8KKwljcHVfbm90aWZpZXIocmN1X2NwdV9ub3RpZnksIDApOworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJcmN1X2NwdV9ub3RpZnkoTlVMTCwgQ1BVX1VQX1BSRVBBUkUsICh2b2lkICopKGxvbmcpaSk7CiB9CiAKICNpbmNsdWRlICJyY3V0cmVlX3BsdWdpbi5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggYjQwYWM1Ny4uZDJhMDA0NiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC0zNCwxMCArMzQsMTEgQEAKICAqIEluIHByYWN0aWNlLCB0aGlzIGhhcyBub3QgYmVlbiB0ZXN0ZWQsIHNvIHRoZXJlIGlzIHByb2JhYmx5IHNvbWUKICAqIGJ1ZyBzb21ld2hlcmUuCiAgKi8KLSNkZWZpbmUgTUFYX1JDVV9MVkxTIDMKKyNkZWZpbmUgTUFYX1JDVV9MVkxTIDQKICNkZWZpbmUgUkNVX0ZBTk9VVAkgICAgICAoQ09ORklHX1JDVV9GQU5PVVQpCiAjZGVmaW5lIFJDVV9GQU5PVVRfU1EJICAgICAgKFJDVV9GQU5PVVQgKiBSQ1VfRkFOT1VUKQogI2RlZmluZSBSQ1VfRkFOT1VUX0NVQkUJICAgICAgKFJDVV9GQU5PVVRfU1EgKiBSQ1VfRkFOT1VUKQorI2RlZmluZSBSQ1VfRkFOT1VUX0ZPVVJUSCAgICAgKFJDVV9GQU5PVVRfQ1VCRSAqIFJDVV9GQU5PVVQpCiAKICNpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVQKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMQpAQCAtNDUsMjMgKzQ2LDMzIEBACiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoTlJfQ1BVUykKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIDAKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIDAKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF80CSAgICAgIDAKICNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF9TUQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAyCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVCkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIChOUl9DUFVTKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgMAorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzQJICAgICAgMAogI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX0NVQkUKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMwogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfU1EpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVCkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIE5SX0NQVVMKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF80CSAgICAgIDAKKyNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF9GT1VSVEgKKyMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgNAorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfQ1VCRSkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUX1NRKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfNAkgICAgICBOUl9DUFVTCiAjZWxzZQogIyBlcnJvciAiQ09ORklHX1JDVV9GQU5PVVQgaW5zdWZmaWNpZW50IGZvciBOUl9DUFVTIgogI2VuZGlmIC8qICNpZiAoTlJfQ1BVUykgPD0gUkNVX0ZBTk9VVCAqLwogCi0jZGVmaW5lIFJDVV9TVU0gKE5VTV9SQ1VfTFZMXzAgKyBOVU1fUkNVX0xWTF8xICsgTlVNX1JDVV9MVkxfMiArIE5VTV9SQ1VfTFZMXzMpCisjZGVmaW5lIFJDVV9TVU0gKE5VTV9SQ1VfTFZMXzAgKyBOVU1fUkNVX0xWTF8xICsgTlVNX1JDVV9MVkxfMiArIE5VTV9SQ1VfTFZMXzMgKyBOVU1fUkNVX0xWTF80KQogI2RlZmluZSBOVU1fUkNVX05PREVTIChSQ1VfU1VNIC0gTlJfQ1BVUykKIAogLyoKQEAgLTg0LDE0ICs5NSwyMSBAQAogCWxvbmcJZ3BudW07CQkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KKwlsb25nCWNvbXBsZXRlZDsJLyogTGFzdCBncmFjZSBwZXJpb2QgY29tcGxldGVkIGZvciB0aGlzIG5vZGUuICovCisJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCisJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCiAJCQkJLyogIG9yZGVyIGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZCB0byBwcm9jZWVkLiovCiAJCQkJLyogIEluIGxlYWYgcmN1X25vZGUsIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvICovCiAJCQkJLyogIGFuIHJjdV9kYXRhIHN0cnVjdHVyZSwgb3RoZXJ3aXNlLCBlYWNoICovCiAJCQkJLyogIGJpdCBjb3JyZXNwb25kcyB0byBhIGNoaWxkIHJjdV9ub2RlICovCiAJCQkJLyogIHN0cnVjdHVyZS4gKi8KKwl1bnNpZ25lZCBsb25nIGV4cG1hc2s7CS8qIEdyb3VwcyB0aGF0IGhhdmUgLT5ibG9ja2VkX3Rhc2tzW10gKi8KKwkJCQkvKiAgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGRyYWluIHRvIGFsbG93IHRoZSAqLworCQkJCS8qICBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgdG8gKi8KKwkJCQkvKiAgY29tcGxldGUgKG9ubHkgZm9yIFRSRUVfUFJFRU1QVF9SQ1UpLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNraW5pdDsKLQkJCQkvKiBQZXItR1AgaW5pdGlhbGl6YXRpb24gZm9yIHFzbWFzay4gKi8KKwkJCQkvKiBQZXItR1AgaW5pdGlhbCB2YWx1ZSBmb3IgcXNtYXNrICYgZXhwbWFzay4gKi8KIAl1bnNpZ25lZCBsb25nIGdycG1hc2s7CS8qIE1hc2sgdG8gYXBwbHkgdG8gcGFyZW50IHFzbWFzay4gKi8KIAkJCQkvKiAgT25seSBvbmUgYml0IHdpbGwgYmUgc2V0IGluIHRoaXMgbWFzay4gKi8KIAlpbnQJZ3JwbG87CQkvKiBsb3dlc3QtbnVtYmVyZWQgQ1BVIG9yIGdyb3VwIGhlcmUuICovCkBAIC05OSw3ICsxMTcsNyBAQAogCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCiAJdTgJbGV2ZWw7CQkvKiByb290IGlzIGF0IGxldmVsIDAuICovCiAJc3RydWN0IHJjdV9ub2RlICpwYXJlbnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBibG9ja2VkX3Rhc2tzWzJdOworCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tlZF90YXNrc1s0XTsKIAkJCQkvKiBUYXNrcyBibG9ja2VkIGluIFJDVSByZWFkLXNpZGUgY3JpdHNlY3QuICovCiAJCQkJLyogIEdyYWNlIHBlcmlvZCBudW1iZXIgKC0+Z3BudW0pIHggYmxvY2tlZCAqLwogCQkJCS8qICBieSB0YXNrcyBvbiB0aGUgKHggJiAweDEpIGVsZW1lbnQgb2YgdGhlICovCkBAIC0xMTQsNiArMTMyLDIxIEBACiAJZm9yICgocm5wKSA9ICYocnNwKS0+bm9kZVswXTsgXAogCSAgICAgKHJucCkgPCAmKHJzcCktPm5vZGVbTlVNX1JDVV9OT0RFU107IChybnApKyspCiAKKy8qCisgKiBEbyBhIGJyZWFkdGgtZmlyc3Qgc2NhbiBvZiB0aGUgbm9uLWxlYWYgcmN1X25vZGUgc3RydWN0dXJlcyBmb3IgdGhlCisgKiBzcGVjaWZpZWQgcmN1X3N0YXRlIHN0cnVjdHVyZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHNpbmdsZXRvbgorICogcmN1X25vZGUgdHJlZSB3aXRoIGJ1dCBvbmUgcmN1X25vZGUgc3RydWN0dXJlLCB0aGlzIGxvb3AgaXMgYSBuby1vcC4KKyAqLworI2RlZmluZSByY3VfZm9yX2VhY2hfbm9ubGVhZl9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIFwKKwlmb3IgKChybnApID0gJihyc3ApLT5ub2RlWzBdOyBcCisJICAgICAocm5wKSA8IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgKHJucCkrKykKKworLyoKKyAqIFNjYW4gdGhlIGxlYXZlcyBvZiB0aGUgcmN1X25vZGUgaGllcmFyY2h5IGZvciB0aGUgc3BlY2lmaWVkIHJjdV9zdGF0ZQorICogc3RydWN0dXJlLiAgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgc2luZ2xldG9uIHJjdV9ub2RlIHRyZWUgd2l0aCBidXQKKyAqIG9uZSByY3Vfbm9kZSBzdHJ1Y3R1cmUsIHRoaXMgbG9vcCAtd2lsbC0gdmlzaXQgdGhlIHJjdV9ub2RlIHN0cnVjdHVyZS4KKyAqIEl0IGlzIHN0aWxsIGEgbGVhZiBub2RlLCBldmVuIGlmIGl0IGlzIGFsc28gdGhlIHJvb3Qgbm9kZS4KKyAqLwogI2RlZmluZSByY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSBcCiAJZm9yICgocm5wKSA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAogCSAgICAgKHJucCkgPCAmKHJzcCktPm5vZGVbTlVNX1JDVV9OT0RFU107IChybnApKyspCkBAIC0xNjcsNiArMjAwLDEwIEBACiAJc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWxbUkNVX05FWFRfU0laRV07CiAJbG9uZwkJcWxlbjsJCS8qICMgb2YgcXVldWVkIGNhbGxiYWNrcyAqLworCWxvbmcJCXFsZW5fbGFzdF9mcXNfY2hlY2s7CisJCQkJCS8qIHFsZW4gYXQgbGFzdCBjaGVjayBmb3IgUVMgZm9yY2luZyAqLworCXVuc2lnbmVkIGxvbmcJbl9mb3JjZV9xc19zbmFwOworCQkJCQkvKiBkaWQgb3RoZXIgQ1BVIGZvcmNlIFFTIHJlY2VudGx5PyAqLwogCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTE5NywxMyArMjM0LDE1IEBACiB9OwogCiAvKiBWYWx1ZXMgZm9yIHNpZ25hbGVkIGZpZWxkIGluIHN0cnVjdCByY3Vfc3RhdGUuICovCi0jZGVmaW5lIFJDVV9HUF9JTklUCQkwCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KLSNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkxCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLwotI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTIJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCisjZGVmaW5lIFJDVV9HUF9JRExFCQkwCS8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi8KKyNkZWZpbmUgUkNVX0dQX0lOSVQJCTEJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLworI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTIJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCisjZGVmaW5lIFJDVV9TQVZFX0NPTVBMRVRFRAkzCS8qIE5lZWQgdG8gc2F2ZSByc3AtPmNvbXBsZXRlZC4gKi8KKyNkZWZpbmUgUkNVX0ZPUkNFX1FTCQk0CS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLwogI2lmZGVmIENPTkZJR19OT19IWgogI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0RZTlRJQ0sKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLSNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfRk9SQ0VfUVMKKyNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9DT01QTEVURUQKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKICNkZWZpbmUgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUwkgMwkvKiBmb3IgcnNwLT5qaWZmaWVzX2ZvcmNlX3FzICovCkBAIC0yNDEsNyArMjgwLDcgQEAKIAlsb25nCWdwbnVtOwkJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KIAlsb25nCWNvbXBsZXRlZDsJCQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLwogCi0JLyogRW5kICBvZiBmaWVsZHMgZ3VhcmRlZCBieSByb290IHJjdV9ub2RlJ3MgbG9jay4gKi8KKwkvKiBFbmQgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCiAKIAlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCiAJCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAgQWxzbyAqLwpAQCAtMjU1LDYgKzI5NCw4IEBACiAJbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLwogCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KIAkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLworCWxvbmcJY29tcGxldGVkX2ZxczsJCQkvKiBWYWx1ZSBvZiBjb21wbGV0ZWQgQCBzbmFwLiAqLworCQkJCQkJLyogIFByb3RlY3RlZCBieSBmcXNsb2NrLiAqLwogCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCiAJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCiAJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzOwkJLyogTnVtYmVyIG9mIGNhbGxzIHRvICovCkBAIC0yNjksMTEgKzMxMCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgamlmZmllc19zdGFsbDsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gY2hlY2sgKi8KIAkJCQkJCS8qICBmb3IgQ1BVIHN0YWxscy4gKi8KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLSNpZmRlZiBDT05GSUdfTk9fSFoKLQlsb25nIGR5bnRpY2tzX2NvbXBsZXRlZDsJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBAIHNuYXAuICovCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogfTsKIAorLyogUmV0dXJuIHZhbHVlcyBmb3IgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcygpLiAqLworCisjZGVmaW5lIFJDVV9PRkxfVEFTS1NfTk9STV9HUAkweDEJCS8qIFRhc2tzIGJsb2NraW5nIG5vcm1hbCAqLworCQkJCQkJLyogIEdQIHdlcmUgbW92ZWQgdG8gcm9vdC4gKi8KKyNkZWZpbmUgUkNVX09GTF9UQVNLU19FWFBfR1AJMHgyCQkvKiBUYXNrcyBibG9ja2luZyBleHBlZGl0ZWQgKi8KKwkJCQkJCS8qICBHUCB3ZXJlIG1vdmVkIHRvIHJvb3QuICovCisKICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFCiAKIC8qCkBAIC0yOTMsMjMgKzMzOCwzMCBAQAogI2Vsc2UgLyogI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOworc3RhdGljIHZvaWQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKTsKIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KTsKIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyB2b2lkIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfY3B1KGludCBjcHUpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpOwogdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOworI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorc3RhdGljIHZvaWQgcmN1X3JlcG9ydF9leHBfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnApOworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgKi8KIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRfcGVuZGluZyhpbnQgY3B1KTsKIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRfbmVlZHNfY3B1KGludCBjcHUpOwogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IGMwY2I3ODMuLjM3ZmJjY2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0yNCwxNiArMjQsMTkgQEAKICAqCSAgIFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAogc3RydWN0IHJjdV9zdGF0ZSByY3VfcHJlZW1wdF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfcHJlZW1wdF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9wcmVlbXB0X2RhdGEpOwogCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAoc3RydWN0IHJjdV9ub2RlICpybnApOworCiAvKgogICogVGVsbCB0aGVtIHdoYXQgUkNVIHRoZXkgYXJlIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIkV4cGVyaW1lbnRhbCBwcmVlbXB0YWJsZSBoaWVyYXJjaGljYWwgUkNVIGltcGxlbWVudGF0aW9uLlxuIik7CkBAIC02Nyw3ICs3MCw3IEBACiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9xcyhpbnQgY3B1KQogewogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gcmRwLT5jb21wbGV0ZWQ7CisJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IHJkcC0+Z3BudW0gLSAxOwogCWJhcnJpZXIoKTsKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogfQpAQCAtMTU3LDE0ICsxNjAsNTggQEAKICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOworCWludCBwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CisKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pIHx8CisJICAgICAgICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2UgKyAyXSk7CiB9CiAKKy8qCisgKiBSZWNvcmQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIGFsbCB0YXNrcyB0aGF0IHdlcmUgcHJldmlvdXNseSBxdWV1ZWQKKyAqIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlIGFuZCB0aGF0IHdlcmUgYmxvY2tpbmcgdGhlIGN1cnJlbnQKKyAqIFJDVSBncmFjZSBwZXJpb2QuICBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc3BlY2lmaWVkIHJucC0+bG9jayB3aXRoCisgKiBpcnFzIGRpc2FibGVkLCBhbmQgdGhpcyBsb2NrIGlzIHJlbGVhc2VkIHVwb24gcmV0dXJuLCBidXQgaXJxcyByZW1haW4KKyAqIGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCV9fcmVsZWFzZXMocm5wLT5sb2NrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucF9wOworCisJaWYgKHJucC0+cXNtYXNrICE9IDAgfHwgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsgIC8qIFN0aWxsIG5lZWQgbW9yZSBxdWllc2NlbnQgc3RhdGVzISAqLworCX0KKworCXJucF9wID0gcm5wLT5wYXJlbnQ7CisJaWYgKHJucF9wID09IE5VTEwpIHsKKwkJLyoKKwkJICogRWl0aGVyIHRoZXJlIGlzIG9ubHkgb25lIHJjdV9ub2RlIGluIHRoZSB0cmVlLAorCQkgKiBvciB0YXNrcyB3ZXJlIGtpY2tlZCB1cCB0byByb290IHJjdV9ub2RlIGR1ZSB0bworCQkgKiBDUFVzIGdvaW5nIG9mZmxpbmUuCisJCSAqLworCQlyY3VfcmVwb3J0X3FzX3JzcCgmcmN1X3ByZWVtcHRfc3RhdGUsIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlcG9ydCB1cCB0aGUgcmVzdCBvZiB0aGUgaGllcmFyY2h5LiAqLworCW1hc2sgPSBybnAtPmdycG1hc2s7CisJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXNwaW5fbG9jaygmcm5wX3AtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgJnJjdV9wcmVlbXB0X3N0YXRlLCBybnBfcCwgZmxhZ3MpOworfQorCisvKgorICogSGFuZGxlIHNwZWNpYWwgY2FzZXMgZHVyaW5nIHJjdV9yZWFkX3VubG9jaygpLCBzdWNoIGFzIG5lZWRpbmcgdG8KKyAqIG5vdGlmeSBSQ1UgY29yZSBwcm9jZXNzaW5nIG9yIHRhc2sgaGF2aW5nIGJsb2NrZWQgZHVyaW5nIHRoZSBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCiBzdGF0aWMgdm9pZCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJaW50IGVtcHR5OworCWludCBlbXB0eV9leHA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG1hc2s7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAJaW50IHNwZWNpYWw7CiAKQEAgLTIwNywzNiArMjU0LDMwIEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9CiAJCWVtcHR5ID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApOworCQllbXB0eV9leHAgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApOworCQlzbXBfbWIoKTsgLyogZW5zdXJlIGV4cGVkaXRlZCBmYXN0cGF0aCBzZWVzIGVuZCBvZiBSQ1UgYy1zLiAqLwogCQlsaXN0X2RlbF9pbml0KCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CiAJCXQtPnJjdV9ibG9ja2VkX25vZGUgPSBOVUxMOwogCiAJCS8qCiAJCSAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IHRhc2sgb24gdGhlIGN1cnJlbnQgbGlzdCwgYW5kIGlmCiAJCSAqIHdlIGFyZW4ndCB3YWl0aW5nIG9uIGFueSBDUFVzLCByZXBvcnQgdGhlIHF1aWVzY2VudCBzdGF0ZS4KLQkJICogTm90ZSB0aGF0IGJvdGggY3B1X3F1aWV0X21za19maW5pc2goKSBhbmQgY3B1X3F1aWV0X21zaygpCi0JCSAqIGRyb3Agcm5wLT5sb2NrIGFuZCByZXN0b3JlIGlycS4KKwkJICogTm90ZSB0aGF0IHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSByZWxlYXNlcyBybnAtPmxvY2suCiAJCSAqLwotCQlpZiAoIWVtcHR5ICYmIHJucC0+cXNtYXNrID09IDAgJiYKLQkJICAgICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKLQotCQkJaWYgKHJucC0+cGFyZW50ID09IE5VTEwpIHsKLQkJCQkvKiBPbmx5IG9uZSByY3Vfbm9kZSBpbiB0aGUgdHJlZS4gKi8KLQkJCQljcHVfcXVpZXRfbXNrX2ZpbmlzaCgmcmN1X3ByZWVtcHRfc3RhdGUsIGZsYWdzKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkvKiBSZXBvcnQgdXAgdGhlIHJlc3Qgb2YgdGhlIGhpZXJhcmNoeS4gKi8KLQkJCW1hc2sgPSBybnAtPmdycG1hc2s7CisJCWlmIChlbXB0eSkKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQkJcm5wX3AgPSBybnAtPnBhcmVudDsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZybnBfcC0+bG9jaywgZmxhZ3MpOwotCQkJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKLQkJCWNwdV9xdWlldF9tc2sobWFzaywgJnJjdV9wcmVlbXB0X3N0YXRlLCBybnBfcCwgZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOworCQllbHNlCisJCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOworCisJCS8qCisJCSAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IHRhc2sgb24gdGhlIGV4cGVkaXRlZCBsaXN0cywKKwkJICogdGhlbiB3ZSBuZWVkIHRvIHJlcG9ydCB1cCB0aGUgcmN1X25vZGUgaGllcmFyY2h5LgorCQkgKi8KKwkJaWYgKCFlbXB0eV9leHAgJiYgIXJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKSkKKwkJCXJjdV9yZXBvcnRfZXhwX3JucCgmcmN1X3ByZWVtcHRfc3RhdGUsIHJucCk7CisJfSBlbHNlIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qCkBAIC0zMDMsMjYgKzM0NCwzNCBAQAogICogcmN1X25vZGUuICBUaGUgcmVhc29uIGZvciBub3QganVzdCBtb3ZpbmcgdGhlbSB0byB0aGUgaW1tZWRpYXRlCiAgKiBwYXJlbnQgaXMgdG8gcmVtb3ZlIHRoZSBuZWVkIGZvciByY3VfcmVhZF91bmxvY2tfc3BlY2lhbCgpIHRvCiAgKiBtYWtlIG1vcmUgdGhhbiB0d28gYXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgdGFyZ2V0IHJjdV9ub2RlJ3MgbG9jay4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3ZXJlIHRhc2tzIGJsb2NraW5nIHRoZSBjdXJyZW50IFJDVSBncmFjZQorICogcGVyaW9kLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UKKyAqIHBlcmlvZCBvbiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KICAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBybnAtPmxvY2sgd2l0aCBpcnFzIGRpc2FibGVkLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwX3Jvb3Q7CisJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHA7CiAKIAlpZiAocm5wID09IHJucF9yb290KSB7CiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKLQkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCisJCXJldHVybiAwOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQogCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKIAkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKLQkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1sxXSkpKTsKKwkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1sxXSkgfHwKKwkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1syXSkgfHwKKwkJICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1szXSkpKTsKIAogCS8qCiAJICogTW92ZSB0YXNrcyB1cCB0byByb290IHJjdV9ub2RlLiAgUmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZQpAQCAtMzMwLDcgKzM3OSwxMSBAQAogCSAqIHJjdV9ub2RlcyBpbiB0ZXJtcyBvZiBncF9udW0gdmFsdWUuICBUaGlzIGZhY3QgYWxsb3dzIHVzIHRvCiAJICogbW92ZSB0aGUgYmxvY2tlZF90YXNrc1tdIGFycmF5IGRpcmVjdGx5LCBlbGVtZW50IGJ5IGVsZW1lbnQuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkKKwkJcmV0dmFsIHw9IFJDVV9PRkxfVEFTS1NfTk9STV9HUDsKKwlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApKQorCQlyZXR2YWwgfD0gUkNVX09GTF9UQVNLU19FWFBfR1A7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbaV07CiAJCWxwX3Jvb3QgPSAmcm5wX3Jvb3QtPmJsb2NrZWRfdGFza3NbaV07CiAJCXdoaWxlICghbGlzdF9lbXB0eShscCkpIHsKQEAgLTM0Miw2ICszOTUsNyBAQAogCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgpAQCAtMzkyLDYgKzQ0NiwxODYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAorLyoqCisgKiBzeW5jaHJvbml6ZV9yY3UgLSB3YWl0IHVudGlsIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIGdyYWNlCisgKiBwZXJpb2QgaGFzIGVsYXBzZWQsIGluIG90aGVyIHdvcmRzIGFmdGVyIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIFJDVQorICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGhhdmUgY29tcGxldGVkLiAgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMgYXJlIGRlbGltaXRlZCBieSByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpLAorICogYW5kIG1heSBiZSBuZXN0ZWQuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpCit7CisJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CisKKwlpZiAoIXJjdV9zY2hlZHVsZXJfYWN0aXZlKQorCQlyZXR1cm47CisKKwlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKKwkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLworCWNhbGxfcmN1KCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7CisJLyogV2FpdCBmb3IgaXQuICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHN5bmNfcmN1X3ByZWVtcHRfZXhwX3dxKTsKK3N0YXRpYyBsb25nIHN5bmNfcmN1X3ByZWVtcHRfZXhwX2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChzeW5jX3JjdV9wcmVlbXB0X2V4cF9tdXRleCk7CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlcmUgYXJlIGFueSB0YXNrcyBpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9ucyBibG9ja2luZyB0aGUgY3VycmVudCBwcmVlbXB0aWJsZS1SQ1UgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZC4KKyAqIElmIHRoZXJlIGlzIG5vIHByZWVtcHRpYmxlLVJDVSBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIGN1cnJlbnRseSBpbgorICogcHJvZ3Jlc3MsIHJldHVybnMgemVybyB1bmNvbmRpdGlvbmFsbHkuCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1syXSkgfHwKKwkgICAgICAgIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1szXSk7Cit9CisKKy8qCisgKiByZXR1cm4gbm9uLXplcm8gaWYgdGhlcmUgaXMgbm8gUkNVIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MKKyAqIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZSwgaW4gb3RoZXIgd29yZHMsIGlmIGFsbCBDUFVzIGFuZAorICogdGFza3MgY292ZXJlZCBieSB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZSBoYXZlIGRvbmUgdGhlaXIgYml0CisgKiBmb3IgdGhlIGN1cnJlbnQgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZC4gIFdvcmtzIG9ubHkgZm9yIHByZWVtcHRpYmxlCisgKiBSQ1UgLS0gb3RoZXIgUkNVIGltcGxlbWVudGF0aW9uIHVzZSBvdGhlciBtZWFucy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHN5bmNfcmN1X3ByZWVtcHRfZXhwX211dGV4LgorICovCitzdGF0aWMgaW50IHN5bmNfcmN1X3ByZWVtcHRfZXhwX2RvbmUoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJcmV0dXJuICFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCkgJiYKKwkgICAgICAgQUNDRVNTX09OQ0Uocm5wLT5leHBtYXNrKSA9PSAwOworfQorCisvKgorICogUmVwb3J0IHRoZSBleGl0IGZyb20gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGZvciB0aGUgbGFzdCB0YXNrCisgKiB0aGF0IHF1ZXVlZCBpdHNlbGYgZHVyaW5nIG9yIGJlZm9yZSB0aGUgY3VycmVudCBleHBlZGl0ZWQgcHJlZW1wdGlibGUtUkNVCisgKiBncmFjZSBwZXJpb2QuICBUaGlzIGV2ZW50IGlzIHJlcG9ydGVkIGVpdGhlciB0byB0aGUgcmN1X25vZGUgc3RydWN0dXJlIG9uCisgKiB3aGljaCB0aGUgdGFzayB3YXMgcXVldWVkIG9yIHRvIG9uZSBvZiB0aGF0IHJjdV9ub2RlIHN0cnVjdHVyZSdzIGFuY2VzdG9ycywKKyAqIHJlY3Vyc2l2ZWx5IHVwIHRoZSB0cmVlLiAgKENhbG0gZG93biwgY2FsbSBkb3duLCB3ZSBkbyB0aGUgcmVjdXJzaW9uCisgKiBpdGVyYXRpdmVseSEpCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBzeW5jX3JjdV9wcmVlbXB0X2V4cF9tdXRleC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3JlcG9ydF9leHBfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJZm9yICg7OykgeworCQlpZiAoIXN5bmNfcmN1X3ByZWVtcHRfZXhwX2RvbmUocm5wKSkKKwkJCWJyZWFrOworCQlpZiAocm5wLT5wYXJlbnQgPT0gTlVMTCkgeworCQkJd2FrZV91cCgmc3luY19yY3VfcHJlZW1wdF9leHBfd3EpOworCQkJYnJlYWs7CisJCX0KKwkJbWFzayA9IHJucC0+Z3JwbWFzazsKKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCXJucCA9IHJucC0+cGFyZW50OworCQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQlybnAtPmV4cG1hc2sgJj0gfm1hc2s7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworfQorCisvKgorICogU25hcHNob3QgdGhlIHRhc2tzIGJsb2NraW5nIHRoZSBuZXdseSBzdGFydGVkIHByZWVtcHRpYmxlLVJDVSBleHBlZGl0ZWQKKyAqIGdyYWNlIHBlcmlvZCBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuICBJZiB0aGVyZSBhcmUgbm8gc3VjaAorICogdGFza3MsIHJlcG9ydCBpdCB1cCB0aGUgcmN1X25vZGUgaGllcmFyY2h5LgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc3luY19yY3VfcHJlZW1wdF9leHBfbXV0ZXggYW5kIHJzcC0+b25vZmZsb2NrLgorICovCitzdGF0aWMgdm9pZAorc3luY19yY3VfcHJlZW1wdF9leHBfaW5pdChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCWludCBtdXN0X3dhaXQ7CisKKwlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnJucC0+YmxvY2tlZF90YXNrc1swXSwgJnJucC0+YmxvY2tlZF90YXNrc1syXSk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzFdLCAmcm5wLT5ibG9ja2VkX3Rhc2tzWzNdKTsKKwltdXN0X3dhaXQgPSByY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCk7CisJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJaWYgKCFtdXN0X3dhaXQpCisJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBleHBlZGl0ZSBpdC4gIFRoZSBiYXNpYyBpZGVhCisgKiBpcyB0byBpbnZva2Ugc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCkgdG8gcHVzaCBhbGwgdGhlIHRhc2tzIHRvCisgKiB0aGUgLT5ibG9ja2VkX3Rhc2tzW10gbGlzdHMsIG1vdmUgYWxsIGVudHJpZXMgZnJvbSB0aGUgZmlyc3Qgc2V0IG9mCisgKiAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cyB0byB0aGUgc2Vjb25kIHNldCwgYW5kIGZpbmFsbHkgd2FpdCBmb3IgdGhpcworICogc2Vjb25kIHNldCB0byBkcmFpbi4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKKwlzdHJ1Y3QgcmN1X3N0YXRlICpyc3AgPSAmcmN1X3ByZWVtcHRfc3RhdGU7CisJbG9uZyBzbmFwOworCWludCB0cnljb3VudCA9IDA7CisKKwlzbXBfbWIoKTsgLyogQ2FsbGVyJ3MgbW9kaWZpY2F0aW9ucyBzZWVuIGZpcnN0IGJ5IG90aGVyIENQVXMuICovCisJc25hcCA9IEFDQ0VTU19PTkNFKHN5bmNfcmN1X3ByZWVtcHRfZXhwX2NvdW50KSArIDE7CisJc21wX21iKCk7IC8qIEFib3ZlIGFjY2VzcyBjYW5ub3QgYmxlZWQgaW50byBjcml0aWNhbCBzZWN0aW9uLiAqLworCisJLyoKKwkgKiBBY3F1aXJlIGxvY2ssIGZhbGxpbmcgYmFjayB0byBzeW5jaHJvbml6ZV9yY3UoKSBpZiB0b28gbWFueQorCSAqIGxvY2stYWNxdWlzaXRpb24gZmFpbHVyZXMuICBPZiBjb3Vyc2UsIGlmIHNvbWVvbmUgZG9lcyB0aGUKKwkgKiBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIGZvciB1cywganVzdCBsZWF2ZS4KKwkgKi8KKwl3aGlsZSAoIW11dGV4X3RyeWxvY2soJnN5bmNfcmN1X3ByZWVtcHRfZXhwX211dGV4KSkgeworCQlpZiAodHJ5Y291bnQrKyA8IDEwKQorCQkJdWRlbGF5KHRyeWNvdW50ICogbnVtX29ubGluZV9jcHVzKCkpOworCQllbHNlIHsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgoQUNDRVNTX09OQ0Uoc3luY19yY3VfcHJlZW1wdF9leHBfY291bnQpIC0gc25hcCkgPiAwKQorCQkJZ290byBtYl9yZXQ7IC8qIE90aGVycyBkaWQgb3VyIHdvcmsgZm9yIHVzLiAqLworCX0KKwlpZiAoKEFDQ0VTU19PTkNFKHN5bmNfcmN1X3ByZWVtcHRfZXhwX2NvdW50KSAtIHNuYXApID4gMCkKKwkJZ290byB1bmxvY2tfbWJfcmV0OyAvKiBPdGhlcnMgZGlkIG91ciB3b3JrIGZvciB1cy4gKi8KKworCS8qIGZvcmNlIGFsbCBSQ1UgcmVhZGVycyBvbnRvIGJsb2NrZWRfdGFza3NbXS4gKi8KKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCisJLyogSW5pdGlhbGl6ZSAtPmV4cG1hc2sgZm9yIGFsbCBub24tbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLiAqLworCXJjdV9mb3JfZWFjaF9ub25sZWFmX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgeworCQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcm5wLT5leHBtYXNrID0gcm5wLT5xc21hc2tpbml0OworCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJfQorCisJLyogU25hcHNob3QgY3VycmVudCBzdGF0ZSBvZiAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cy4gKi8KKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKQorCQlzeW5jX3JjdV9wcmVlbXB0X2V4cF9pbml0KHJzcCwgcm5wKTsKKwlpZiAoTlVNX1JDVV9OT0RFUyA+IDEpCisJCXN5bmNfcmN1X3ByZWVtcHRfZXhwX2luaXQocnNwLCByY3VfZ2V0X3Jvb3QocnNwKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCisJLyogV2FpdCBmb3Igc25hcHNob3R0ZWQgLT5ibG9ja2VkX3Rhc2tzW10gbGlzdHMgdG8gZHJhaW4uICovCisJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisJd2FpdF9ldmVudChzeW5jX3JjdV9wcmVlbXB0X2V4cF93cSwKKwkJICAgc3luY19yY3VfcHJlZW1wdF9leHBfZG9uZShybnApKTsKKworCS8qIENsZWFuIHVwIGFuZCBleGl0LiAqLworCXNtcF9tYigpOyAvKiBlbnN1cmUgZXhwZWRpdGVkIEdQIHNlZW4gYmVmb3JlIGNvdW50ZXIgaW5jcmVtZW50LiAqLworCUFDQ0VTU19PTkNFKHN5bmNfcmN1X3ByZWVtcHRfZXhwX2NvdW50KSsrOwordW5sb2NrX21iX3JldDoKKwltdXRleF91bmxvY2soJnN5bmNfcmN1X3ByZWVtcHRfZXhwX211dGV4KTsKK21iX3JldDoKKwlzbXBfbWIoKTsgLyogZW5zdXJlIHN1YnNlcXVlbnQgYWN0aW9uIHNlZW4gYWZ0ZXIgZ3JhY2UgcGVyaW9kLiAqLworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBwcmVlbXB0YWJsZS1SQ1UtcmVsYXRlZCB3b3JrCiAgKiB0byBiZSBkb25lLgpAQCAtNDY0LDcgKzY5OCw3IEBACiAvKgogICogVGVsbCB0aGVtIHdoYXQgUkNVIHRoZXkgYXJlIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIkhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50YXRpb24uXG4iKTsKIH0KQEAgLTQ5NSw2ICs3MjksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCisvKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbm8gcXVpZXRpbmcgb2YgdGFza3MuICovCitzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAogLyoKQEAgLTUyMSwxMiArNzY1LDE1IEBACiAKIC8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQotICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgYW5kCisgKiBzdWNoIG5vbi1leGlzdGVudCB0YXNrcyBjYW5ub3QgcG9zc2libHkgaGF2ZSBiZWVuIGJsb2NraW5nIHRoZSBjdXJyZW50CisgKiBncmFjZSBwZXJpb2QuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NjUsNiArODEyLDMwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBtYWtlIGl0IGhhcHBlbiBxdWlja2x5LgorICogQnV0IGJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgaXMgbmV2ZXIgYW55IG5lZWQgdG8KKyAqIHJlcG9ydCBvbiB0YXNrcyBwcmVlbXB0ZWQgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBkdXJpbmcKKyAqIGV4cGVkaXRlZCBSQ1UgZ3JhY2UgcGVyaW9kcy4KKyAqLworc3RhdGljIHZvaWQgcmN1X3JlcG9ydF9leHBfcm5wKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJcmV0dXJuOworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgd29yayB0byBkby4KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwppbmRleCA0YjMxYzc3Li45ZDJjODg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKQEAgLTE1NSwxMiArMTU1LDE1IEBACiAKIHN0YXRpYyB2b2lkIHByaW50X29uZV9yY3Vfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7CisJbG9uZyBncG51bTsKIAlpbnQgbGV2ZWwgPSAwOworCWludCBwaGFzZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAorCWdwbnVtID0gcnNwLT5ncG51bTsKIAlzZXFfcHJpbnRmKG0sICJjPSVsZCBnPSVsZCBzPSVkIGpmcT0lbGQgaj0leCAiCiAJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHUgb3FsZW49JWxkXG4iLAotCQkgICByc3AtPmNvbXBsZXRlZCwgcnNwLT5ncG51bSwgcnNwLT5zaWduYWxlZCwKKwkJICAgcnNwLT5jb21wbGV0ZWQsIGdwbnVtLCByc3AtPnNpZ25hbGVkLAogCQkgICAobG9uZykocnNwLT5qaWZmaWVzX2ZvcmNlX3FzIC0gamlmZmllcyksCiAJCSAgIChpbnQpKGppZmZpZXMgJiAweGZmZmYpLAogCQkgICByc3AtPm5fZm9yY2VfcXMsIHJzcC0+bl9mb3JjZV9xc19uZ3AsCkBAIC0xNzEsOCArMTc0LDEzIEBACiAJCQlzZXFfcHV0cyhtLCAiXG4iKTsKIAkJCWxldmVsID0gcm5wLT5sZXZlbDsKIAkJfQotCQlzZXFfcHJpbnRmKG0sICIlbHgvJWx4ICVkOiVkIF4lZCAgICAiLAorCQlwaGFzZSA9IGdwbnVtICYgMHgxOworCQlzZXFfcHJpbnRmKG0sICIlbHgvJWx4ICVjJWM+JWMlYyAlZDolZCBeJWQgICAgIiwKIAkJCSAgIHJucC0+cXNtYXNrLCBybnAtPnFzbWFza2luaXQsCisJCQkgICAiVC4iW2xpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pXSwKKwkJCSAgICJFLiJbbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlICsgMl0pXSwKKwkJCSAgICJULiJbbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWyFwaGFzZV0pXSwKKwkJCSAgICJFLiJbbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWyFwaGFzZSArIDJdKV0sCiAJCQkgICBybnAtPmdycGxvLCBybnAtPmdycGhpLCBybnAtPmdycG51bSk7CiAJfQogCXNlcV9wdXRzKG0sICJcbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA4ZDI1YmUwLi5hYTMxMjQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMzA5LDYgKzMwOSw4IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFza19ncm91cF9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQogewpAQCAtMzE2LDcgKzMxOCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAjaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKICMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQogI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCkBAIC01MzQsMTQgKzUzNSwxMiBAQAogCSNkZWZpbmUgQ1BVX0xPQURfSURYX01BWCA1CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKICNpZmRlZiBDT05GSUdfTk9fSFoKLQl1bnNpZ25lZCBsb25nIGxhc3RfdGlja19zZWVuOwogCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKICNlbmRpZgogCS8qIGNhcHR1cmUgbG9hZCBmcm9tICphbGwqIHRhc2tzIG9uIHRoaXMgY3B1OiAqLwogCXN0cnVjdCBsb2FkX3dlaWdodCBsb2FkOwogCXVuc2lnbmVkIGxvbmcgbnJfbG9hZF91cGRhdGVzOwogCXU2NCBucl9zd2l0Y2hlczsKLQl1NjQgbnJfbWlncmF0aW9uc19pbjsKIAogCXN0cnVjdCBjZnNfcnEgY2ZzOwogCXN0cnVjdCBydF9ycSBydDsKQEAgLTU5MCw2ICs1ODksOCBAQAogCiAJdTY0IHJ0X2F2ZzsKIAl1NjQgYWdlX3N0YW1wOworCXU2NCBpZGxlX3N0YW1wOworCXU2NCBhdmdfaWRsZTsKICNlbmRpZgogCiAJLyogY2FsY19sb2FkIHJlbGF0ZWQgZmllbGRzICovCkBAIC02NzYsNiArNjc3LDcgQEAKIAogLyoqCiAgKiBydW5xdWV1ZV9pc19sb2NrZWQKKyAqIEBjcHU6IHRoZSBwcm9jZXNzb3IgaW4gcXVlc3Rpb24uCiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGNwdSBydW5xdWV1ZSBpcyBsb2NrZWQuCiAgKiBUaGlzIGludGVyZmFjZSBhbGxvd3MgcHJpbnRrIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZSBsb2NrCkBAIC03NzAsNyArNzcyLDcgQEAKIAlpZiAoIXNjaGVkX2ZlYXRfbmFtZXNbaV0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0xNTYzLDExICsxNTY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAKLXN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgcnFfd2VpZ2h0W05SX0NQVVNdOwotfTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEsIHVwZGF0ZV9zaGFyZXNfZGF0YSk7CitzdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nICp1cGRhdGVfc2hhcmVzX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwogCkBAIC0xNTc3LDEyICsxNTc1LDEyIEBACiBzdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2Rfc2hhcmVzLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNkX3JxX3dlaWdodCwKLQkJCQkgICAgc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkKQorCQkJCSAgICB1bnNpZ25lZCBsb25nICp1c2RfcnFfd2VpZ2h0KQogewogCXVuc2lnbmVkIGxvbmcgc2hhcmVzLCBycV93ZWlnaHQ7CiAJaW50IGJvb3N0ID0gMDsKIAotCXJxX3dlaWdodCA9IHVzZC0+cnFfd2VpZ2h0W2NwdV07CisJcnFfd2VpZ2h0ID0gdXNkX3JxX3dlaWdodFtjcHVdOwogCWlmICghcnFfd2VpZ2h0KSB7CiAJCWJvb3N0ID0gMTsKIAkJcnFfd2VpZ2h0ID0gTklDRV8wX0xPQUQ7CkBAIC0xNjE3LDcgKzE2MTUsNyBAQAogc3RhdGljIGludCB0Z19zaGFyZXNfdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgd2VpZ2h0LCBycV93ZWlnaHQgPSAwLCBzaGFyZXMgPSAwOwotCXN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgKnVzZDsKKwl1bnNpZ25lZCBsb25nICp1c2RfcnFfd2VpZ2h0OwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwpAQCAtMTYyNiwxMSArMTYyNCwxMSBAQAogCQlyZXR1cm4gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1c2QgPSAmX19nZXRfY3B1X3Zhcih1cGRhdGVfc2hhcmVzX2RhdGEpOworCXVzZF9ycV93ZWlnaHQgPSBwZXJfY3B1X3B0cih1cGRhdGVfc2hhcmVzX2RhdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKSB7CiAJCXdlaWdodCA9IHRnLT5jZnNfcnFbaV0tPmxvYWQud2VpZ2h0OwotCQl1c2QtPnJxX3dlaWdodFtpXSA9IHdlaWdodDsKKwkJdXNkX3JxX3dlaWdodFtpXSA9IHdlaWdodDsKIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIHRhc2tzIG9uIHRoZSBjcHUgcHJldGVuZCB0aGVyZQpAQCAtMTY1MSw3ICsxNjQ5LDcgQEAKIAkJc2hhcmVzID0gdGctPnNoYXJlczsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpCi0JCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkKTsKKwkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2RfcnFfd2VpZ2h0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMTk5NSw2ICsxOTkzLDM5IEBACiAJCXAtPnNjaGVkX2NsYXNzLT5wcmlvX2NoYW5nZWQocnEsIHAsIG9sZHByaW8sIHJ1bm5pbmcpOwogfQogCisvKioKKyAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KKyAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgorICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAorICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCisgKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCisgKgorICogRnVuY3Rpb24gbGl2ZXMgaGVyZSBpbnN0ZWFkIG9mIGt0aHJlYWQuYyBiZWNhdXNlIGl0IG1lc3NlcyB3aXRoCisgKiBzY2hlZHVsZXIgaW50ZXJuYWxzIHdoaWNoIHJlcXVpcmUgbG9ja2luZy4KKyAqLwordm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLworCWlmICghd2FpdF90YXNrX2luYWN0aXZlKHAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKKwlzZXRfdGFza19jcHUocCwgY3B1KTsKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGt0aHJlYWRfYmluZCk7CisKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogSXMgdGhpcyB0YXNrIGxpa2VseSBjYWNoZS1ob3Q6CkBAIC0yMDA3LDcgKzIwMzgsNyBAQAogCS8qCiAJICogQnVkZHkgY2FuZGlkYXRlcyBhcmUgY2FjaGUgaG90OgogCSAqLwotCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYKKwlpZiAoc2NoZWRfZmVhdChDQUNIRV9IT1RfQlVERFkpICYmIHRoaXNfcnEoKS0+bnJfcnVubmluZyAmJgogCQkJKCZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bmV4dCB8fAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwpAQCAtMjA0OCw3ICsyMDc5LDYgQEAKICNlbmRpZgogCWlmIChvbGRfY3B1ICE9IG5ld19jcHUpIHsKIAkJcC0+c2UubnJfbWlncmF0aW9ucysrOwotCQluZXdfcnEtPm5yX21pZ3JhdGlvbnNfaW4rKzsKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCQlpZiAodGFza19ob3QocCwgb2xkX3JxLT5jbG9jaywgTlVMTCkpCiAJCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZDJfbWlncmF0aW9ucyk7CkBAIC0yMDg1LDYgKzIxMTUsNyBAQAogCSAqIGl0IGlzIHN1ZmZpY2llbnQgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFzaydzIGNwdSBmaWVsZC4KIAkgKi8KIAlpZiAoIXAtPnNlLm9uX3JxICYmICF0YXNrX3J1bm5pbmcocnEsIHApKSB7CisJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCXNldF90YXNrX2NwdShwLCBkZXN0X2NwdSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTIzMTEsNyArMjM0Miw3IEBACiB7CiAJaW50IGNwdSwgb3JpZ19jcHUsIHRoaXNfY3B1LCBzdWNjZXNzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBycSAqcnE7CisJc3RydWN0IHJxICpycSwgKm9yaWdfcnE7CiAKIAlpZiAoIXNjaGVkX2ZlYXQoU1lOQ19XQUtFVVBTKSkKIAkJd2FrZV9mbGFncyAmPSB+V0ZfU1lOQzsKQEAgLTIzMTksNyArMjM1MCw3IEBACiAJdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAKIAlzbXBfd21iKCk7Ci0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwlycSA9IG9yaWdfcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCWlmICghKHAtPnN0YXRlICYgc3RhdGUpKQogCQlnb3RvIG91dDsKQEAgLTIzNDYsMTAgKzIzNzcsMTUgQEAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogCWNwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX1dBS0UsIHdha2VfZmxhZ3MpOwotCWlmIChjcHUgIT0gb3JpZ19jcHUpCisJaWYgKGNwdSAhPSBvcmlnX2NwdSkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJxID0gY3B1X3JxKGNwdSk7CisJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCXNldF90YXNrX2NwdShwLCBjcHUpOwotCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwogCVdBUk5fT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwogCWNwdSA9IHRhc2tfY3B1KHApOwogCkBAIC0yNDA2LDYgKzI0NDIsMTcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXApCiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXAocnEsIHApOworCisJaWYgKHVubGlrZWx5KHJxLT5pZGxlX3N0YW1wKSkgeworCQl1NjQgZGVsdGEgPSBycS0+Y2xvY2sgLSBycS0+aWRsZV9zdGFtcDsKKwkJdTY0IG1heCA9IDIqc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0OworCisJCWlmIChkZWx0YSA+IG1heCkKKwkJCXJxLT5hdmdfaWRsZSA9IG1heDsKKwkJZWxzZQorCQkJdXBkYXRlX2F2ZygmcnEtPmF2Z19pZGxlLCBkZWx0YSk7CisJCXJxLT5pZGxlX3N0YW1wID0gMDsKKwl9CiAjZW5kaWYKIG91dDoKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKQEAgLTI1MTEsNiArMjU1OCw3IEBACiB2b2lkIHNjaGVkX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY2xvbmVfZmxhZ3MpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJX19zY2hlZF9mb3JrKHApOwogCkBAIC0yNTQ3LDcgKzI1OTUsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJY3B1ID0gcC0+c2NoZWRfY2xhc3MtPnNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfRk9SSywgMCk7CiAjZW5kaWYKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdXBkYXRlX3JxX2Nsb2NrKGNwdV9ycShjcHUpKTsKIAlzZXRfdGFza19jcHUocCwgY3B1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRFNUQVRTKSB8fCBkZWZpbmVkKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpCiAJaWYgKGxpa2VseShzY2hlZF9pbmZvX29uKCkpKQpAQCAtMjgxNCwxNCArMjg2NSwxNCBAQAogCSAqLwogCWFyY2hfc3RhcnRfY29udGV4dF9zd2l0Y2gocHJldik7CiAKLQlpZiAodW5saWtlbHkoIW1tKSkgeworCWlmIChsaWtlbHkoIW1tKSkgewogCQluZXh0LT5hY3RpdmVfbW0gPSBvbGRtbTsKIAkJYXRvbWljX2luYygmb2xkbW0tPm1tX2NvdW50KTsKIAkJZW50ZXJfbGF6eV90bGIob2xkbW0sIG5leHQpOwogCX0gZWxzZQogCQlzd2l0Y2hfbW0ob2xkbW0sIG1tLCBuZXh0KTsKIAotCWlmICh1bmxpa2VseSghcHJldi0+bW0pKSB7CisJaWYgKGxpa2VseSghcHJldi0+bW0pKSB7CiAJCXByZXYtPmFjdGl2ZV9tbSA9IE5VTEw7CiAJCXJxLT5wcmV2X21tID0gb2xkbW07CiAJfQpAQCAtMjk4NCwxNSArMzAzNSw2IEBACiB9CiAKIC8qCi0gKiBFeHRlcm5hbGx5IHZpc2libGUgcGVyLWNwdSBzY2hlZHVsZXIgc3RhdGlzdGljczoKLSAqIGNwdV9ucl9taWdyYXRpb25zKGNwdSkgLSBudW1iZXIgb2YgbWlncmF0aW9ucyBpbnRvIHRoYXQgY3B1Ci0gKi8KLXU2NCBjcHVfbnJfbWlncmF0aW9ucyhpbnQgY3B1KQotewotCXJldHVybiBjcHVfcnEoY3B1KS0+bnJfbWlncmF0aW9uc19pbjsKLX0KLQotLyoKICAqIFVwZGF0ZSBycS0+Y3B1X2xvYWRbXSBzdGF0aXN0aWNzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGV2ZXJ5CiAgKiBzY2hlZHVsZXIgdGljayAoVElDS19OU0VDKS4KICAqLwpAQCAtMzY1Niw2ICszNjk4LDcgQEAKIAogLyoqCiAgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgogICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CkBAIC00MDkxLDcgKzQxMzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKIAotCWNwdW1hc2tfc2V0YWxsKGNwdXMpOworCWNwdW1hc2tfY29weShjcHVzLCBjcHVfb25saW5lX21hc2spOwogCiAJLyoKIAkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCkBAIC00MjU0LDcgKzQyOTcsNyBAQAogCWludCBhbGxfcGlubmVkID0gMDsKIAlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwogCi0JY3B1bWFza19zZXRhbGwoY3B1cyk7CisJY3B1bWFza19jb3B5KGNwdXMsIGNwdV9vbmxpbmVfbWFzayk7CiAKIAkvKgogCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKQEAgLTQzOTQsNiArNDQzNywxMSBAQAogCWludCBwdWxsZWRfdGFzayA9IDA7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7CiAKKwl0aGlzX3JxLT5pZGxlX3N0YW1wID0gdGhpc19ycS0+Y2xvY2s7CisKKwlpZiAodGhpc19ycS0+YXZnX2lkbGUgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpCisJCXJldHVybjsKKwogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKIApAQCAtNDQwOCw4ICs0NDU2LDEwIEBACiAJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7CiAJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKIAkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKLQkJaWYgKHB1bGxlZF90YXNrKQorCQlpZiAocHVsbGVkX3Rhc2spIHsKKwkJCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSAwOwogCQkJYnJlYWs7CisJCX0KIAl9CiAJaWYgKHB1bGxlZF90YXNrIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgdGhpc19ycS0+bmV4dF9iYWxhbmNlKSkgewogCQkvKgpAQCAtNTAxMSw4ICs1MDYxLDEzIEBACiAJcC0+Z3RpbWUgPSBjcHV0aW1lX2FkZChwLT5ndGltZSwgY3B1dGltZSk7CiAKIAkvKiBBZGQgZ3Vlc3QgdGltZSB0byBjcHVzdGF0LiAqLwotCWNwdXN0YXQtPnVzZXIgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPnVzZXIsIHRtcCk7Ci0JY3B1c3RhdC0+Z3Vlc3QgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPmd1ZXN0LCB0bXApOworCWlmIChUQVNLX05JQ0UocCkgPiAwKSB7CisJCWNwdXN0YXQtPm5pY2UgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPm5pY2UsIHRtcCk7CisJCWNwdXN0YXQtPmd1ZXN0X25pY2UgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPmd1ZXN0X25pY2UsIHRtcCk7CisJfSBlbHNlIHsKKwkJY3B1c3RhdC0+dXNlciA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+dXNlciwgdG1wKTsKKwkJY3B1c3RhdC0+Z3Vlc3QgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPmd1ZXN0LCB0bXApOworCX0KIH0KIAogLyoKQEAgLTUxMjcsNjEgKzUxODIsODcgQEAKICAqIFVzZSBwcmVjaXNlIHBsYXRmb3JtIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlOgogICovCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKLWNwdXRpbWVfdCB0YXNrX3V0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3ZvaWQgdGFza190aW1lcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCAqdXQsIGNwdXRpbWVfdCAqc3QpCiB7Ci0JcmV0dXJuIHAtPnV0aW1lOworCSp1dCA9IHAtPnV0aW1lOworCSpzdCA9IHAtPnN0aW1lOwogfQogCi1jcHV0aW1lX3QgdGFza19zdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit2b2lkIHRocmVhZF9ncm91cF90aW1lcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCAqdXQsIGNwdXRpbWVfdCAqc3QpCiB7Ci0JcmV0dXJuIHAtPnN0aW1lOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKworCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKworCSp1dCA9IGNwdXRpbWUudXRpbWU7CisJKnN0ID0gY3B1dGltZS5zdGltZTsKIH0KICNlbHNlCi1jcHV0aW1lX3QgdGFza191dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCisKKyNpZm5kZWYgbnNlY3NfdG9fY3B1dGltZQorIyBkZWZpbmUgbnNlY3NfdG9fY3B1dGltZShfX25zZWNzKQluc2Vjc190b19qaWZmaWVzKF9fbnNlY3MpCisjZW5kaWYKKwordm9pZCB0YXNrX3RpbWVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1dGltZV90ICp1dCwgY3B1dGltZV90ICpzdCkKIHsKLQljbG9ja190IHV0aW1lID0gY3B1dGltZV90b19jbG9ja190KHAtPnV0aW1lKSwKLQkJdG90YWwgPSB1dGltZSArIGNwdXRpbWVfdG9fY2xvY2tfdChwLT5zdGltZSk7Ci0JdTY0IHRlbXA7CisJY3B1dGltZV90IHJ0aW1lLCB1dGltZSA9IHAtPnV0aW1lLCB0b3RhbCA9IGNwdXRpbWVfYWRkKHV0aW1lLCBwLT5zdGltZSk7CiAKIAkvKgogCSAqIFVzZSBDRlMncyBwcmVjaXNlIGFjY291bnRpbmc6CiAJICovCi0JdGVtcCA9ICh1NjQpbnNlY190b19jbG9ja190KHAtPnNlLnN1bV9leGVjX3J1bnRpbWUpOworCXJ0aW1lID0gbnNlY3NfdG9fY3B1dGltZShwLT5zZS5zdW1fZXhlY19ydW50aW1lKTsKIAogCWlmICh0b3RhbCkgewotCQl0ZW1wICo9IHV0aW1lOworCQl1NjQgdGVtcDsKKworCQl0ZW1wID0gKHU2NCkocnRpbWUgKiB1dGltZSk7CiAJCWRvX2Rpdih0ZW1wLCB0b3RhbCk7Ci0JfQotCXV0aW1lID0gKGNsb2NrX3QpdGVtcDsKLQotCXAtPnByZXZfdXRpbWUgPSBtYXgocC0+cHJldl91dGltZSwgY2xvY2tfdF90b19jcHV0aW1lKHV0aW1lKSk7Ci0JcmV0dXJuIHAtPnByZXZfdXRpbWU7Ci19Ci0KLWNwdXRpbWVfdCB0YXNrX3N0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQljbG9ja190IHN0aW1lOworCQl1dGltZSA9IChjcHV0aW1lX3QpdGVtcDsKKwl9IGVsc2UKKwkJdXRpbWUgPSBydGltZTsKIAogCS8qCi0JICogVXNlIENGUydzIHByZWNpc2UgYWNjb3VudGluZy4gKHdlIHN1YnRyYWN0IHV0aW1lIGZyb20KLQkgKiB0aGUgdG90YWwsIHRvIG1ha2Ugc3VyZSB0aGUgdG90YWwgb2JzZXJ2ZWQgYnkgdXNlcnNwYWNlCi0JICogZ3Jvd3MgbW9ub3RvbmljYWxseSAtIGFwcHMgcmVseSBvbiB0aGF0KToKKwkgKiBDb21wYXJlIHdpdGggcHJldmlvdXMgdmFsdWVzLCB0byBrZWVwIG1vbm90b25pY2l0eToKIAkgKi8KLQlzdGltZSA9IG5zZWNfdG9fY2xvY2tfdChwLT5zZS5zdW1fZXhlY19ydW50aW1lKSAtCi0JCQljcHV0aW1lX3RvX2Nsb2NrX3QodGFza191dGltZShwKSk7CisJcC0+cHJldl91dGltZSA9IG1heChwLT5wcmV2X3V0aW1lLCB1dGltZSk7CisJcC0+cHJldl9zdGltZSA9IG1heChwLT5wcmV2X3N0aW1lLCBjcHV0aW1lX3N1YihydGltZSwgcC0+cHJldl91dGltZSkpOwogCi0JaWYgKHN0aW1lID49IDApCi0JCXAtPnByZXZfc3RpbWUgPSBtYXgocC0+cHJldl9zdGltZSwgY2xvY2tfdF90b19jcHV0aW1lKHN0aW1lKSk7CisJKnV0ID0gcC0+cHJldl91dGltZTsKKwkqc3QgPSBwLT5wcmV2X3N0aW1lOworfQogCi0JcmV0dXJuIHAtPnByZXZfc3RpbWU7CisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzaWdsb2NrIGhlbGQuCisgKi8KK3ZvaWQgdGhyZWFkX2dyb3VwX3RpbWVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1dGltZV90ICp1dCwgY3B1dGltZV90ICpzdCkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gcC0+c2lnbmFsOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwljcHV0aW1lX3QgcnRpbWUsIHV0aW1lLCB0b3RhbDsKKworCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKworCXRvdGFsID0gY3B1dGltZV9hZGQoY3B1dGltZS51dGltZSwgY3B1dGltZS5zdGltZSk7CisJcnRpbWUgPSBuc2Vjc190b19jcHV0aW1lKGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSk7CisKKwlpZiAodG90YWwpIHsKKwkJdTY0IHRlbXA7CisKKwkJdGVtcCA9ICh1NjQpKHJ0aW1lICogY3B1dGltZS51dGltZSk7CisJCWRvX2Rpdih0ZW1wLCB0b3RhbCk7CisJCXV0aW1lID0gKGNwdXRpbWVfdCl0ZW1wOworCX0gZWxzZQorCQl1dGltZSA9IHJ0aW1lOworCisJc2lnLT5wcmV2X3V0aW1lID0gbWF4KHNpZy0+cHJldl91dGltZSwgdXRpbWUpOworCXNpZy0+cHJldl9zdGltZSA9IG1heChzaWctPnByZXZfc3RpbWUsCisJCQkgICAgICBjcHV0aW1lX3N1YihydGltZSwgc2lnLT5wcmV2X3V0aW1lKSk7CisKKwkqdXQgPSBzaWctPnByZXZfdXRpbWU7CisJKnN0ID0gc2lnLT5wcmV2X3N0aW1lOwogfQogI2VuZGlmCiAKLWlubGluZSBjcHV0aW1lX3QgdGFza19ndGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHAtPmd0aW1lOwotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgdGltZXIgY29kZSwgd2l0aCBIWiBmcmVxdWVuY3kuCiAgKiBXZSBjYWxsIGl0IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KQEAgLTU0NDYsNyArNTUyNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjaGVkdWxlKTsKIAotI2lmZGVmIENPTkZJR19TTVAKKyNpZmRlZiBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUgogLyoKICAqIExvb2sgb3V0ISAib3duZXIiIGlzIGFuIGVudGlyZWx5IHNwZWN1bGF0aXZlIHBvaW50ZXIKICAqIGFjY2VzcyBhbmQgbm90IHJlbGlhYmxlLgpAQCAtNjE0MCwyMiArNjIyMSwxNCBAQAogCUJVR19PTihwLT5zZS5vbl9ycSk7CiAKIAlwLT5wb2xpY3kgPSBwb2xpY3k7Ci0Jc3dpdGNoIChwLT5wb2xpY3kpIHsKLQljYXNlIFNDSEVEX05PUk1BTDoKLQljYXNlIFNDSEVEX0JBVENIOgotCWNhc2UgU0NIRURfSURMRToKLQkJcC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKLQkJYnJlYWs7Ci0JY2FzZSBTQ0hFRF9GSUZPOgotCWNhc2UgU0NIRURfUlI6Ci0JCXAtPnNjaGVkX2NsYXNzID0gJnJ0X3NjaGVkX2NsYXNzOwotCQlicmVhazsKLQl9Ci0KIAlwLT5ydF9wcmlvcml0eSA9IHByaW87CiAJcC0+bm9ybWFsX3ByaW8gPSBub3JtYWxfcHJpbyhwKTsKIAkvKiB3ZSBhcmUgaG9sZGluZyBwLT5waV9sb2NrIGFscmVhZHkgKi8KIAlwLT5wcmlvID0gcnRfbXV0ZXhfZ2V0cHJpbyhwKTsKKwlpZiAocnRfcHJpbyhwLT5wcmlvKSkKKwkJcC0+c2NoZWRfY2xhc3MgPSAmcnRfc2NoZWRfY2xhc3M7CisJZWxzZQorCQlwLT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCXNldF9sb2FkX3dlaWdodChwKTsKIH0KIApAQCAtNjkwMCw3ICs2OTczLDcgQEAKIAkvKgogCSAqIE9ubHkgc2hvdyBsb2NrcyBpZiBhbGwgdGFza3MgYXJlIGR1bXBlZDoKIAkgKi8KLQlpZiAoc3RhdGVfZmlsdGVyID09IC0xKQorCWlmICghc3RhdGVfZmlsdGVyKQogCQlkZWJ1Z19zaG93X2FsbF9sb2NrcygpOwogfQogCkBAIC03NzA1LDYgKzc3NzgsMTYgQEAKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCitzdGF0aWMgX19yZWFkX21vc3RseSBpbnQgc2NoZWRfZG9tYWluX2RlYnVnX2VuYWJsZWQ7CisKK3N0YXRpYyBpbnQgX19pbml0IHNjaGVkX2RvbWFpbl9kZWJ1Z19zZXR1cChjaGFyICpzdHIpCit7CisJc2NoZWRfZG9tYWluX2RlYnVnX2VuYWJsZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgic2NoZWRfZGVidWciLCBzY2hlZF9kb21haW5fZGVidWdfc2V0dXApOworCiBzdGF0aWMgaW50IHNjaGVkX2RvbWFpbl9kZWJ1Z19vbmUoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUsIGludCBsZXZlbCwKIAkJCQkgIHN0cnVjdCBjcHVtYXNrICpncm91cG1hc2spCiB7CkBAIC03NzkxLDYgKzc4NzQsOSBAQAogCWNwdW1hc2tfdmFyX3QgZ3JvdXBtYXNrOwogCWludCBsZXZlbCA9IDA7CiAKKwlpZiAoIXNjaGVkX2RvbWFpbl9kZWJ1Z19lbmFibGVkKQorCQlyZXR1cm47CisKIAlpZiAoIXNkKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJDUFUlZCBhdHRhY2hpbmcgTlVMTCBzY2hlZC1kb21haW4uXG4iLCBjcHUpOwogCQlyZXR1cm47CkBAIC03ODcwLDYgKzc5NTYsOCBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX3Jvb3Rkb21haW4oc3RydWN0IHJvb3RfZG9tYWluICpyZCkKIHsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworCiAJY3B1cHJpX2NsZWFudXAoJnJkLT5jcHVwcmkpOwogCiAJZnJlZV9jcHVtYXNrX3ZhcihyZC0+cnRvX21hc2spOwpAQCAtODAxMCw2ICs4MDk4LDcgQEAKIC8qIFNldHVwIHRoZSBtYXNrIG9mIGNwdXMgY29uZmlndXJlZCBmb3IgaXNvbGF0ZWQgZG9tYWlucyAqLwogc3RhdGljIGludCBfX2luaXQgaXNvbGF0ZWRfY3B1X3NldHVwKGNoYXIgKnN0cikKIHsKKwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwKTsKIAljcHVsaXN0X3BhcnNlKHN0ciwgY3B1X2lzb2xhdGVkX21hcCk7CiAJcmV0dXJuIDE7CiB9CkBAIC04ODQ2LDcgKzg5MzUsNyBAQAogCXJldHVybiBfX2J1aWxkX3NjaGVkX2RvbWFpbnMoY3B1X21hcCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1bWFzayAqZG9tc19jdXI7CS8qIGN1cnJlbnQgc2NoZWQgZG9tYWlucyAqLworc3RhdGljIGNwdW1hc2tfdmFyX3QgKmRvbXNfY3VyOwkvKiBjdXJyZW50IHNjaGVkIGRvbWFpbnMgKi8KIHN0YXRpYyBpbnQgbmRvbXNfY3VyOwkJLyogbnVtYmVyIG9mIHNjaGVkIGRvbWFpbnMgaW4gJ2RvbXNfY3VyJyAqLwogc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqZGF0dHJfY3VyOwogCQkJCS8qIGF0dHJpYnVlcyBvZiBjdXN0b20gZG9tYWlucyBpbiAnZG9tc19jdXInICovCkBAIC04ODY4LDYgKzg5NTcsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorY3B1bWFza192YXJfdCAqYWxsb2Nfc2NoZWRfZG9tYWlucyh1bnNpZ25lZCBpbnQgbmRvbXMpCit7CisJaW50IGk7CisJY3B1bWFza192YXJfdCAqZG9tczsKKworCWRvbXMgPSBrbWFsbG9jKHNpemVvZigqZG9tcykgKiBuZG9tcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkb21zKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbmRvbXM7IGkrKykgeworCQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkb21zW2ldLCBHRlBfS0VSTkVMKSkgeworCQkJZnJlZV9zY2hlZF9kb21haW5zKGRvbXMsIGkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIGRvbXM7Cit9CisKK3ZvaWQgZnJlZV9zY2hlZF9kb21haW5zKGNwdW1hc2tfdmFyX3QgZG9tc1tdLCB1bnNpZ25lZCBpbnQgbmRvbXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5kb21zOyBpKyspCisJCWZyZWVfY3B1bWFza192YXIoZG9tc1tpXSk7CisJa2ZyZWUoZG9tcyk7Cit9CisKIC8qCiAgKiBTZXQgdXAgc2NoZWR1bGVyIGRvbWFpbnMgYW5kIGdyb3Vwcy4gQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGhvdHBsdWcgbG9jay4KICAqIEZvciBub3cgdGhpcyBqdXN0IGV4Y2x1ZGVzIGlzb2xhdGVkIGNwdXMsIGJ1dCBjb3VsZCBiZSB1c2VkIHRvCkBAIC04ODc5LDEyICs4OTkzLDEyIEBACiAKIAlhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3koKTsKIAluZG9tc19jdXIgPSAxOwotCWRvbXNfY3VyID0ga21hbGxvYyhjcHVtYXNrX3NpemUoKSwgR0ZQX0tFUk5FTCk7CisJZG9tc19jdXIgPSBhbGxvY19zY2hlZF9kb21haW5zKG5kb21zX2N1cik7CiAJaWYgKCFkb21zX2N1cikKLQkJZG9tc19jdXIgPSBmYWxsYmFja19kb21zOwotCWNwdW1hc2tfYW5kbm90KGRvbXNfY3VyLCBjcHVfbWFwLCBjcHVfaXNvbGF0ZWRfbWFwKTsKKwkJZG9tc19jdXIgPSAmZmFsbGJhY2tfZG9tczsKKwljcHVtYXNrX2FuZG5vdChkb21zX2N1clswXSwgY3B1X21hcCwgY3B1X2lzb2xhdGVkX21hcCk7CiAJZGF0dHJfY3VyID0gTlVMTDsKLQllcnIgPSBidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfY3VyKTsKKwllcnIgPSBidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfY3VyWzBdKTsKIAlyZWdpc3Rlcl9zY2hlZF9kb21haW5fc3lzY3RsKCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtODkzNCwxOSArOTA0OCwxOSBAQAogICogZG9tc19uZXdbXSB0byB0aGUgY3VycmVudCBzY2hlZCBkb21haW4gcGFydGl0aW9uaW5nLCBkb21zX2N1cltdLgogICogSXQgZGVzdHJveXMgZWFjaCBkZWxldGVkIGRvbWFpbiBhbmQgYnVpbGRzIGVhY2ggbmV3IGRvbWFpbi4KICAqCi0gKiAnZG9tc19uZXcnIGlzIGFuIGFycmF5IG9mIGNwdW1hc2sncyBvZiBsZW5ndGggJ25kb21zX25ldycuCisgKiAnZG9tc19uZXcnIGlzIGFuIGFycmF5IG9mIGNwdW1hc2tfdmFyX3QncyBvZiBsZW5ndGggJ25kb21zX25ldycuCiAgKiBUaGUgbWFza3MgZG9uJ3QgaW50ZXJzZWN0IChkb24ndCBvdmVybGFwLikgV2Ugc2hvdWxkIHNldHVwIG9uZQogICogc2NoZWQgZG9tYWluIGZvciBlYWNoIG1hc2suIENQVXMgbm90IGluIGFueSBvZiB0aGUgY3B1bWFza3Mgd2lsbAogICogbm90IGJlIGxvYWQgYmFsYW5jZWQuIElmIHRoZSBzYW1lIGNwdW1hc2sgYXBwZWFycyBib3RoIGluIHRoZQogICogY3VycmVudCAnZG9tc19jdXInIGRvbWFpbnMgYW5kIGluIHRoZSBuZXcgJ2RvbXNfbmV3Jywgd2UgY2FuIGxlYXZlCiAgKiBpdCBhcyBpdCBpcy4KICAqCi0gKiBUaGUgcGFzc2VkIGluICdkb21zX25ldycgc2hvdWxkIGJlIGttYWxsb2MnZC4gVGhpcyByb3V0aW5lIHRha2VzCi0gKiBvd25lcnNoaXAgb2YgaXQgYW5kIHdpbGwga2ZyZWUgaXQgd2hlbiBkb25lIHdpdGggaXQuIElmIHRoZSBjYWxsZXIKLSAqIGZhaWxlZCB0aGUga21hbGxvYyBjYWxsLCB0aGVuIGl0IGNhbiBwYXNzIGluIGRvbXNfbmV3ID09IE5VTEwgJiYKLSAqIG5kb21zX25ldyA9PSAxLCBhbmQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKSB3aWxsIGZhbGxiYWNrIHRvCi0gKiB0aGUgc2luZ2xlIHBhcnRpdGlvbiAnZmFsbGJhY2tfZG9tcycsIGl0IGFsc28gZm9yY2VzIHRoZSBkb21haW5zCi0gKiB0byBiZSByZWJ1aWx0LgorICogVGhlIHBhc3NlZCBpbiAnZG9tc19uZXcnIHNob3VsZCBiZSBhbGxvY2F0ZWQgdXNpbmcKKyAqIGFsbG9jX3NjaGVkX2RvbWFpbnMuICBUaGlzIHJvdXRpbmUgdGFrZXMgb3duZXJzaGlwIG9mIGl0IGFuZCB3aWxsCisgKiBmcmVlX3NjaGVkX2RvbWFpbnMgaXQgd2hlbiBkb25lIHdpdGggaXQuIElmIHRoZSBjYWxsZXIgZmFpbGVkIHRoZQorICogYWxsb2MgY2FsbCwgdGhlbiBpdCBjYW4gcGFzcyBpbiBkb21zX25ldyA9PSBOVUxMICYmIG5kb21zX25ldyA9PSAxLAorICogYW5kIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkgd2lsbCBmYWxsYmFjayB0byB0aGUgc2luZ2xlIHBhcnRpdGlvbgorICogJ2ZhbGxiYWNrX2RvbXMnLCBpdCBhbHNvIGZvcmNlcyB0aGUgZG9tYWlucyB0byBiZSByZWJ1aWx0LgogICoKICAqIElmIGRvbXNfbmV3ID09IE5VTEwgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGNwdV9vbmxpbmVfbWFzay4KICAqIG5kb21zX25ldyA9PSAwIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBkZXN0cm95aW5nIGV4aXN0aW5nIGRvbWFpbnMsCkBAIC04OTU0LDggKzkwNjgsNyBAQAogICoKICAqIENhbGwgd2l0aCBob3RwbHVnIGxvY2sgaGVsZAogICovCi0vKiBGSVhNRTogQ2hhbmdlIHRvIHN0cnVjdCBjcHVtYXNrICpkb21zX25ld1tdICovCi12b2lkIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKGludCBuZG9tc19uZXcsIHN0cnVjdCBjcHVtYXNrICpkb21zX25ldywKK3ZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza192YXJfdCBkb21zX25ld1tdLAogCQkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmRhdHRyX25ldykKIHsKIAlpbnQgaSwgaiwgbjsKQEAgLTg5NzQsNDAgKzkwODcsNDAgQEAKIAkvKiBEZXN0cm95IGRlbGV0ZWQgZG9tYWlucyAqLwogCWZvciAoaSA9IDA7IGkgPCBuZG9tc19jdXI7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgbiAmJiAhbmV3X3RvcG9sb2d5OyBqKyspIHsKLQkJCWlmIChjcHVtYXNrX2VxdWFsKCZkb21zX2N1cltpXSwgJmRvbXNfbmV3W2pdKQorCQkJaWYgKGNwdW1hc2tfZXF1YWwoZG9tc19jdXJbaV0sIGRvbXNfbmV3W2pdKQogCQkJICAgICYmIGRhdHRyc19lcXVhbChkYXR0cl9jdXIsIGksIGRhdHRyX25ldywgaikpCiAJCQkJZ290byBtYXRjaDE7CiAJCX0KIAkJLyogbm8gbWF0Y2ggLSBhIGN1cnJlbnQgc2NoZWQgZG9tYWluIG5vdCBpbiBuZXcgZG9tc19uZXdbXSAqLwotCQlkZXRhY2hfZGVzdHJveV9kb21haW5zKGRvbXNfY3VyICsgaSk7CisJCWRldGFjaF9kZXN0cm95X2RvbWFpbnMoZG9tc19jdXJbaV0pOwogbWF0Y2gxOgogCQk7CiAJfQogCiAJaWYgKGRvbXNfbmV3ID09IE5VTEwpIHsKIAkJbmRvbXNfY3VyID0gMDsKLQkJZG9tc19uZXcgPSBmYWxsYmFja19kb21zOwotCQljcHVtYXNrX2FuZG5vdCgmZG9tc19uZXdbMF0sIGNwdV9vbmxpbmVfbWFzaywgY3B1X2lzb2xhdGVkX21hcCk7CisJCWRvbXNfbmV3ID0gJmZhbGxiYWNrX2RvbXM7CisJCWNwdW1hc2tfYW5kbm90KGRvbXNfbmV3WzBdLCBjcHVfb25saW5lX21hc2ssIGNwdV9pc29sYXRlZF9tYXApOwogCQlXQVJOX09OX09OQ0UoZGF0dHJfbmV3KTsKIAl9CiAKIAkvKiBCdWlsZCBuZXcgZG9tYWlucyAqLwogCWZvciAoaSA9IDA7IGkgPCBuZG9tc19uZXc7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgbmRvbXNfY3VyICYmICFuZXdfdG9wb2xvZ3k7IGorKykgewotCQkJaWYgKGNwdW1hc2tfZXF1YWwoJmRvbXNfbmV3W2ldLCAmZG9tc19jdXJbal0pCisJCQlpZiAoY3B1bWFza19lcXVhbChkb21zX25ld1tpXSwgZG9tc19jdXJbal0pCiAJCQkgICAgJiYgZGF0dHJzX2VxdWFsKGRhdHRyX25ldywgaSwgZGF0dHJfY3VyLCBqKSkKIAkJCQlnb3RvIG1hdGNoMjsKIAkJfQogCQkvKiBubyBtYXRjaCAtIGFkZCBhIG5ldyBkb21zX25ldyAqLwotCQlfX2J1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19uZXcgKyBpLAorCQlfX2J1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19uZXdbaV0sCiAJCQkJCWRhdHRyX25ldyA/IGRhdHRyX25ldyArIGkgOiBOVUxMKTsKIG1hdGNoMjoKIAkJOwogCX0KIAogCS8qIFJlbWVtYmVyIHRoZSBuZXcgc2NoZWQgZG9tYWlucyAqLwotCWlmIChkb21zX2N1ciAhPSBmYWxsYmFja19kb21zKQotCQlrZnJlZShkb21zX2N1cik7CisJaWYgKGRvbXNfY3VyICE9ICZmYWxsYmFja19kb21zKQorCQlmcmVlX3NjaGVkX2RvbWFpbnMoZG9tc19jdXIsIG5kb21zX2N1cik7CiAJa2ZyZWUoZGF0dHJfY3VyKTsJLyoga2ZyZWUoTlVMTCkgaXMgc2FmZSAqLwogCWRvbXNfY3VyID0gZG9tc19uZXc7CiAJZGF0dHJfY3VyID0gZGF0dHJfbmV3OwpAQCAtOTMyOSwxMCArOTQ0Miw2IEBACiAjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKIAlhbGxvY19zaXplICs9IG51bV9wb3NzaWJsZV9jcHVzKCkgKiBjcHVtYXNrX3NpemUoKTsKICNlbmRpZgotCS8qCi0JICogQXMgc2NoZWRfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmUgcGFnZV9hbGxvYyBpcyBzZXR1cCwKLQkgKiB3ZSB1c2UgYWxsb2NfYm9vdG1lbSgpLgotCSAqLwogCWlmIChhbGxvY19zaXplKSB7CiAJCXB0ciA9ICh1bnNpZ25lZCBsb25nKWt6YWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX05PV0FJVCk7CiAKQEAgLTk0MDEsNiArOTUxMCwxMCBAQAogI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCiAKKyNpZiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICYmIGRlZmluZWQgQ09ORklHX1NNUAorCXVwZGF0ZV9zaGFyZXNfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KG5yX2NwdV9pZHMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCQkJCSAgICBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKSk7CisjZW5kaWYKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgcnEgKnJxOwogCkBAIC05NDgzLDYgKzk1OTYsOCBAQAogCQlycS0+Y3B1ID0gaTsKIAkJcnEtPm9ubGluZSA9IDA7CiAJCXJxLT5taWdyYXRpb25fdGhyZWFkID0gTlVMTDsKKwkJcnEtPmlkbGVfc3RhbXAgPSAwOworCQlycS0+YXZnX2lkbGUgPSAyKnN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKIAkJSU5JVF9MSVNUX0hFQUQoJnJxLT5taWdyYXRpb25fcXVldWUpOwogCQlycV9hdHRhY2hfcm9vdChycSwgJmRlZl9yb290X2RvbWFpbik7CiAjZW5kaWYKQEAgLTk1MjYsMTMgKzk2NDEsMTUgQEAKIAljdXJyZW50LT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCiAJLyogQWxsb2NhdGUgdGhlIG5vaHpfY3B1X21hc2sgaWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KLQlhbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCiAjaWZkZWYgQ09ORklHX05PX0haCi0JYWxsb2NfY3B1bWFza192YXIoJm5vaHouY3B1X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAJYWxsb2NfY3B1bWFza192YXIoJm5vaHouaWxiX2dycF9ub2h6X21hc2ssIEdGUF9OT1dBSVQpOwogI2VuZGlmCi0JYWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOworCS8qIE1heSBiZSBhbGxvY2F0ZWQgYXQgaXNvbGNwdXMgY21kbGluZSBwYXJzZSB0aW1lICovCisJaWYgKGNwdV9pc29sYXRlZF9tYXAgPT0gTlVMTCkKKwkJemFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKICNlbmRpZiAvKiBTTVAgKi8KIAogCXBlcmZfZXZlbnRfaW5pdCgpOwpAQCAtMTA4NjIsNiArMTA5NzksNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCX0KIAlyY3VfZXhwZWRpdGVkX3N0YXRlID0gUkNVX0VYUEVESVRFRF9TVEFURV9JRExFOworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZF9jb3VudCsrOwogCW11dGV4X3VubG9jaygmcmN1X3NjaGVkX2V4cGVkaXRlZF9tdXRleCk7CiAJcHV0X29ubGluZV9jcHVzKCk7CiAJaWYgKG5lZWRfZnVsbF9zeW5jKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCBlZmI4NDQwLi42OTg4Y2YwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZGVidWcuYworKysgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwpAQCAtMjg1LDEyICsyODUsMTYgQEAKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAjZGVmaW5lIFAobikgU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVkXG4iLCAjbiwgcnEtPm4pOworI2RlZmluZSBQNjQobikgU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVMZFxuIiwgI24sIHJxLT5uKTsKIAogCVAoeWxkX2NvdW50KTsKIAogCVAoc2NoZWRfc3dpdGNoKTsKIAlQKHNjaGVkX2NvdW50KTsKIAlQKHNjaGVkX2dvaWRsZSk7CisjaWZkZWYgQ09ORklHX1NNUAorCVA2NChhdmdfaWRsZSk7CisjZW5kaWYKIAogCVAodHR3dV9jb3VudCk7CiAJUCh0dHd1X2xvY2FsKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDRlNzc3YjQuLmY2MTgzN2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtODIyLDYgKzgyMiwyNiBAQAogCQkgKiByZS1lbGVjdGVkIGR1ZSB0byBidWRkeSBmYXZvdXJzLgogCQkgKi8KIAkJY2xlYXJfYnVkZGllcyhjZnNfcnEsIGN1cnIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBhIHRhc2sgdGhhdCBtaXNzZWQgd2FrZXVwIHByZWVtcHRpb24gYnkgYQorCSAqIG5hcnJvdyBtYXJnaW4gZG9lc24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnVsbCBzbGljZS4KKwkgKiBUaGlzIGFsc28gbWl0aWdhdGVzIGJ1ZGR5IGluZHVjZWQgbGF0ZW5jaWVzIHVuZGVyIGxvYWQuCisJICovCisJaWYgKCFzY2hlZF9mZWF0KFdBS0VVUF9QUkVFTVBUKSkKKwkJcmV0dXJuOworCisJaWYgKGRlbHRhX2V4ZWMgPCBzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KQorCQlyZXR1cm47CisKKwlpZiAoY2ZzX3JxLT5ucl9ydW5uaW5nID4gMSkgeworCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCQlzNjQgZGVsdGEgPSBjdXJyLT52cnVudGltZSAtIHNlLT52cnVudGltZTsKKworCQlpZiAoZGVsdGEgPiBpZGVhbF9ydW50aW1lKQorCQkJcmVzY2hlZF90YXNrKHJxX29mKGNmc19ycSktPmN1cnIpOwogCX0KIH0KIApAQCAtODYxLDEyICs4ODEsMTggQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwaWNrX25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmxlZnQgPSBzZTsKIAotCWlmIChjZnNfcnEtPm5leHQgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bmV4dCwgc2UpIDwgMSkKLQkJcmV0dXJuIGNmc19ycS0+bmV4dDsKKwlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIGxlZnQpIDwgMSkKKwkJc2UgPSBjZnNfcnEtPm5leHQ7CiAKLQlpZiAoY2ZzX3JxLT5sYXN0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPmxhc3QsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPmxhc3Q7CisJLyoKKwkgKiBQcmVmZXIgbGFzdCBidWRkeSwgdHJ5IHRvIHJldHVybiB0aGUgQ1BVIHRvIGEgcHJlZW1wdGVkIHRhc2suCisJICovCisJaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBsZWZ0KSA8IDEpCisJCXNlID0gY2ZzX3JxLT5sYXN0OworCisJY2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTsKIAogCXJldHVybiBzZTsKIH0KQEAgLTEzMTksNiArMTM0NSwzNyBAQAogfQogCiAvKgorICogVHJ5IGFuZCBsb2NhdGUgYW4gaWRsZSBDUFUgaW4gdGhlIHNjaGVkX2RvbWFpbi4KKyAqLworc3RhdGljIGludAorc2VsZWN0X2lkbGVfc2libGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGFyZ2V0KQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IHByZXZfY3B1ID0gdGFza19jcHUocCk7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoaXMgZG9tYWluIHNwYW5zIGJvdGggY3B1IGFuZCBwcmV2X2NwdSAoc2VlIHRoZSBTRF9XQUtFX0FGRklORQorCSAqIHRlc3QgaW4gc2VsZWN0X3Rhc2tfcnFfZmFpcikgYW5kIHRoZSBwcmV2X2NwdSBpcyBpZGxlIHRoZW4gdGhhdCdzCisJICogYWx3YXlzIGEgYmV0dGVyIHRhcmdldCB0aGFuIHRoZSBjdXJyZW50IGNwdS4KKwkgKi8KKwlpZiAodGFyZ2V0ID09IGNwdSAmJiAhY3B1X3JxKHByZXZfY3B1KS0+Y2ZzLm5yX3J1bm5pbmcpCisJCXJldHVybiBwcmV2X2NwdTsKKworCS8qCisJICogT3RoZXJ3aXNlLCBpdGVyYXRlIHRoZSBkb21haW4gYW5kIGZpbmQgYW4gZWxlZ2libGUgaWRsZSBjcHUuCisJICovCisJZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9kb21haW5fc3BhbihzZCksICZwLT5jcHVzX2FsbG93ZWQpIHsKKwkJaWYgKCFjcHVfcnEoaSktPmNmcy5ucl9ydW5uaW5nKSB7CisJCQl0YXJnZXQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdGFyZ2V0OworfQorCisvKgogICogc2NoZWRfYmFsYW5jZV9zZWxmOiBiYWxhbmNlIHRoZSBjdXJyZW50IHRhc2sgKHJ1bm5pbmcgb24gY3B1KSBpbiBkb21haW5zCiAgKiB0aGF0IGhhdmUgdGhlICdmbGFnJyBmbGFnIHNldC4gSW4gcHJhY3RpY2UsIHRoaXMgaXMgU0RfQkFMQU5DRV9GT1JLIGFuZAogICogU0RfQkFMQU5DRV9FWEVDLgpAQCAtMTM3MiwxMSArMTQyOSwzNSBAQAogCQkJCXdhbnRfc2QgPSAwOwogCQl9CiAKLQkJaWYgKHdhbnRfYWZmaW5lICYmICh0bXAtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpICYmCi0JCSAgICBjcHVtYXNrX3Rlc3RfY3B1KHByZXZfY3B1LCBzY2hlZF9kb21haW5fc3Bhbih0bXApKSkgeworCQkvKgorCQkgKiBXaGlsZSBpdGVyYXRpbmcgdGhlIGRvbWFpbnMgbG9va2luZyBmb3IgYSBzcGFubmluZworCQkgKiBXQUtFX0FGRklORSBkb21haW4sIGFkanVzdCB0aGUgYWZmaW5lIHRhcmdldCB0byBhbnkgaWRsZSBjcHUKKwkJICogaW4gY2FjaGUgc2hhcmluZyBkb21haW5zIGFsb25nIHRoZSB3YXkuCisJCSAqLworCQlpZiAod2FudF9hZmZpbmUpIHsKKwkJCWludCB0YXJnZXQgPSAtMTsKIAotCQkJYWZmaW5lX3NkID0gdG1wOwotCQkJd2FudF9hZmZpbmUgPSAwOworCQkJLyoKKwkJCSAqIElmIGJvdGggY3B1IGFuZCBwcmV2X2NwdSBhcmUgcGFydCBvZiB0aGlzIGRvbWFpbiwKKwkJCSAqIGNwdSBpcyBhIHZhbGlkIFNEX1dBS0VfQUZGSU5FIHRhcmdldC4KKwkJCSAqLworCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUocHJldl9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHRtcCkpKQorCQkJCXRhcmdldCA9IGNwdTsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlJ3MgYW4gaWRsZSBzaWJsaW5nIGluIHRoaXMgZG9tYWluLCBtYWtlIHRoYXQKKwkJCSAqIHRoZSB3YWtlX2FmZmluZSB0YXJnZXQgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBjcHUuCisJCQkgKi8KKwkJCWlmICh0bXAtPmZsYWdzICYgU0RfUFJFRkVSX1NJQkxJTkcpCisJCQkJdGFyZ2V0ID0gc2VsZWN0X2lkbGVfc2libGluZyhwLCB0bXAsIHRhcmdldCk7CisKKwkJCWlmICh0YXJnZXQgPj0gMCkgeworCQkJCWlmICh0bXAtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpIHsKKwkJCQkJYWZmaW5lX3NkID0gdG1wOworCQkJCQl3YW50X2FmZmluZSA9IDA7CisJCQkJfQorCQkJCWNwdSA9IHRhcmdldDsKKwkJCX0KIAkJfQogCiAJCWlmICghd2FudF9zZCAmJiAhd2FudF9hZmZpbmUpCkBAIC0xNTY4LDYgKzE2NDksNyBAQAogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnItPnNlLCAqcHNlID0gJnAtPnNlOwogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnIpOwogCWludCBzeW5jID0gd2FrZV9mbGFncyAmIFdGX1NZTkM7CisJaW50IHNjYWxlID0gY2ZzX3JxLT5ucl9ydW5uaW5nID49IHNjaGVkX25yX2xhdGVuY3k7CiAKIAl1cGRhdGVfY3VycihjZnNfcnEpOwogCkBAIC0xNTgyLDE4ICsxNjY0LDcgQEAKIAlpZiAodW5saWtlbHkoc2UgPT0gcHNlKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsIG9uIHRoZQotCSAqIHJxLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHdha2V1cCBnZXRzIGludGVybGVhdmVkIHdpdGggc2NoZWR1bGUgb24KLQkgKiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKSBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbgotCSAqIGRyb3AgdGhlIHJxIGxvY2suCi0JICoKLQkgKiBBbHNvLCBkdXJpbmcgZWFybHkgYm9vdCB0aGUgaWRsZSB0aHJlYWQgaXMgaW4gdGhlIGZhaXIgY2xhc3MsIGZvcgotCSAqIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIHRoZSBpZGxlIHRocmVhZC4KLQkgKi8KLQlpZiAoc2NoZWRfZmVhdChMQVNUX0JVRERZKSAmJiBsaWtlbHkoc2UtPm9uX3JxICYmIGN1cnIgIT0gcnEtPmlkbGUpKQotCQlzZXRfbGFzdF9idWRkeShzZSk7Ci0JaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCisJaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgc2NhbGUgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCiAJCXNldF9uZXh0X2J1ZGR5KHBzZSk7CiAKIAkvKgpAQCAtMTYzOSw4ICsxNzEwLDIyIEBACiAKIAlCVUdfT04oIXBzZSk7CiAKLQlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpCisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKSB7CiAJCXJlc2NoZWRfdGFzayhjdXJyKTsKKwkJLyoKKwkJICogT25seSBzZXQgdGhlIGJhY2t3YXJkIGJ1ZGR5IHdoZW4gdGhlIGN1cnJlbnQgdGFzayBpcyBzdGlsbAorCQkgKiBvbiB0aGUgcnEuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgd2FrZXVwIGdldHMgaW50ZXJsZWF2ZWQKKwkJICogd2l0aCBzY2hlZHVsZSBvbiB0aGUgLT5wcmVfc2NoZWR1bGUoKSBvciBpZGxlX2JhbGFuY2UoKQorCQkgKiBwb2ludCwgZWl0aGVyIG9mIHdoaWNoIGNhbiAqIGRyb3AgdGhlIHJxIGxvY2suCisJCSAqCisJCSAqIEFsc28sIGR1cmluZyBlYXJseSBib290IHRoZSBpZGxlIHRocmVhZCBpcyBpbiB0aGUgZmFpciBjbGFzcywKKwkJICogZm9yIG9idmlvdXMgcmVhc29ucyBpdHMgYSBiYWQgaWRlYSB0byBzY2hlZHVsZSBiYWNrIHRvIGl0LgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCFzZS0+b25fcnEgfHwgY3VyciA9PSBycS0+aWRsZSkpCisJCQlyZXR1cm47CisJCWlmIChzY2hlZF9mZWF0KExBU1RfQlVERFkpICYmIHNjYWxlICYmIGVudGl0eV9pc190YXNrKHNlKSkKKwkJCXNldF9sYXN0X2J1ZGR5KHNlKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX2ZhaXIoc3RydWN0IHJxICpycSkKQEAgLTE2NDksMjEgKzE3MzQsMTEgQEAKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSAmcnEtPmNmczsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKIAotCWlmICh1bmxpa2VseSghY2ZzX3JxLT5ucl9ydW5uaW5nKSkKKwlpZiAoIWNmc19ycS0+bnJfcnVubmluZykKIAkJcmV0dXJuIE5VTEw7CiAKIAlkbyB7CiAJCXNlID0gcGlja19uZXh0X2VudGl0eShjZnNfcnEpOwotCQkvKgotCQkgKiBJZiBzZSB3YXMgYSBidWRkeSwgY2xlYXIgaXQgc28gdGhhdCBpdCB3aWxsIGhhdmUgdG8gZWFybgotCQkgKiB0aGUgZmF2b3VyIGFnYWluLgotCQkgKgotCQkgKiBJZiBzZSB3YXMgbm90IGEgYnVkZHksIGNsZWFyIHRoZSBidWRkaWVzIGJlY2F1c2UgbmVpdGhlcgotCQkgKiB3YXMgZWxlZ2libGUgdG8gcnVuLCBsZXQgdGhlbSBlYXJuIGl0IGFnYWluLgotCQkgKgotCQkgKiBJT1cuIHVuY29uZGl0aW9uYWxseSBjbGVhciBidWRkaWVzLgotCQkgKi8KLQkJX19jbGVhcl9idWRkaWVzKGNmc19ycSwgTlVMTCk7CiAJCXNldF9uZXh0X2VudGl0eShjZnNfcnEsIHNlKTsKIAkJY2ZzX3JxID0gZ3JvdXBfY2ZzX3JxKHNlKTsKIAl9IHdoaWxlIChjZnNfcnEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBhNGQ3OTBjLi41YzVmZWYzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTE1MywyOSArMTE1MywxMiBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgbG9jYWxfY3B1X21hc2spOwogCi1zdGF0aWMgaW5saW5lIGludCBwaWNrX29wdGltYWxfY3B1KGludCB0aGlzX2NwdSwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQlpbnQgZmlyc3Q7Ci0KLQkvKiAidGhpc19jcHUiIGlzIGNoZWFwZXIgdG8gcHJlZW1wdCB0aGFuIGEgcmVtb3RlIHByb2Nlc3NvciAqLwotCWlmICgodGhpc19jcHUgIT0gLTEpICYmIGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsIG1hc2spKQotCQlyZXR1cm4gdGhpc19jcHU7Ci0KLQlmaXJzdCA9IGNwdW1hc2tfZmlyc3QobWFzayk7Ci0JaWYgKGZpcnN0IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIGZpcnN0OwotCi0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW50IGZpbmRfbG93ZXN0X3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAlzdHJ1Y3QgY3B1bWFzayAqbG93ZXN0X21hc2sgPSBfX2dldF9jcHVfdmFyKGxvY2FsX2NwdV9tYXNrKTsKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGNwdSAgICAgID0gdGFza19jcHUodGFzayk7Ci0JY3B1bWFza192YXJfdCBkb21haW5fbWFzazsKIAogCWlmICh0YXNrLT5ydC5ucl9jcHVzX2FsbG93ZWQgPT0gMSkKIAkJcmV0dXJuIC0xOyAvKiBObyBvdGhlciB0YXJnZXRzIHBvc3NpYmxlICovCkBAIC0xMTk4LDI4ICsxMTgxLDI2IEBACiAJICogT3RoZXJ3aXNlLCB3ZSBjb25zdWx0IHRoZSBzY2hlZF9kb21haW5zIHNwYW4gbWFwcyB0byBmaWd1cmUKIAkgKiBvdXQgd2hpY2ggY3B1IGlzIGxvZ2ljYWxseSBjbG9zZXN0IHRvIG91ciBob3QgY2FjaGUgZGF0YS4KIAkgKi8KLQlpZiAodGhpc19jcHUgPT0gY3B1KQotCQl0aGlzX2NwdSA9IC0xOyAvKiBTa2lwIHRoaXNfY3B1IG9wdCBpZiB0aGUgc2FtZSAqLworCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgbG93ZXN0X21hc2spKQorCQl0aGlzX2NwdSA9IC0xOyAvKiBTa2lwIHRoaXNfY3B1IG9wdCBpZiBub3QgYW1vbmcgbG93ZXN0ICovCiAKLQlpZiAoYWxsb2NfY3B1bWFza192YXIoJmRvbWFpbl9tYXNrLCBHRlBfQVRPTUlDKSkgewotCQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQkJaWYgKHNkLT5mbGFncyAmIFNEX1dBS0VfQUZGSU5FKSB7Ci0JCQkJaW50IGJlc3RfY3B1OworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CisJCWlmIChzZC0+ZmxhZ3MgJiBTRF9XQUtFX0FGRklORSkgeworCQkJaW50IGJlc3RfY3B1OwogCi0JCQkJY3B1bWFza19hbmQoZG9tYWluX21hc2ssCi0JCQkJCSAgICBzY2hlZF9kb21haW5fc3BhbihzZCksCi0JCQkJCSAgICBsb3dlc3RfbWFzayk7CisJCQkvKgorCQkJICogInRoaXNfY3B1IiBpcyBjaGVhcGVyIHRvIHByZWVtcHQgdGhhbiBhCisJCQkgKiByZW1vdGUgcHJvY2Vzc29yLgorCQkJICovCisJCQlpZiAodGhpc19jcHUgIT0gLTEgJiYKKwkJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQorCQkJCXJldHVybiB0aGlzX2NwdTsKIAotCQkJCWJlc3RfY3B1ID0gcGlja19vcHRpbWFsX2NwdSh0aGlzX2NwdSwKLQkJCQkJCQkgICAgZG9tYWluX21hc2spOwotCi0JCQkJaWYgKGJlc3RfY3B1ICE9IC0xKSB7Ci0JCQkJCWZyZWVfY3B1bWFza192YXIoZG9tYWluX21hc2spOwotCQkJCQlyZXR1cm4gYmVzdF9jcHU7Ci0JCQkJfQotCQkJfQorCQkJYmVzdF9jcHUgPSBjcHVtYXNrX2ZpcnN0X2FuZChsb3dlc3RfbWFzaywKKwkJCQkJCSAgICAgc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKKwkJCWlmIChiZXN0X2NwdSA8IG5yX2NwdV9pZHMpCisJCQkJcmV0dXJuIGJlc3RfY3B1OwogCQl9Ci0JCWZyZWVfY3B1bWFza192YXIoZG9tYWluX21hc2spOwogCX0KIAogCS8qCkBAIC0xMjI3LDcgKzEyMDgsMTMgQEAKIAkgKiBqdXN0IGdpdmUgdGhlIGNhbGxlciAqc29tZXRoaW5nKiB0byB3b3JrIHdpdGggZnJvbSB0aGUgY29tcGF0aWJsZQogCSAqIGxvY2F0aW9ucy4KIAkgKi8KLQlyZXR1cm4gcGlja19vcHRpbWFsX2NwdSh0aGlzX2NwdSwgbG93ZXN0X21hc2spOworCWlmICh0aGlzX2NwdSAhPSAtMSkKKwkJcmV0dXJuIHRoaXNfY3B1OworCisJY3B1ID0gY3B1bWFza19hbnkobG93ZXN0X21hc2spOworCWlmIChjcHUgPCBucl9jcHVfaWRzKQorCQlyZXR1cm4gY3B1OworCXJldHVybiAtMTsKIH0KIAogLyogV2lsbCBsb2NrIHRoZSBycSBpdCBmaW5kcyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDY3MDUzMjAuLjZiOTgyZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIyLDEyICsyMiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbGZkLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgotI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQxLDYgKzQzLDggQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzaWdxdWV1ZV9jYWNoZXA7CiAKK2ludCBwcmludF9mYXRhbF9zaWduYWxzIF9fcmVhZF9tb3N0bHk7CisKIHN0YXRpYyB2b2lkIF9fdXNlciAqc2lnX2hhbmRsZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgc2lnKQogewogCXJldHVybiB0LT5zaWdoYW5kLT5hY3Rpb25bc2lnIC0gMV0uc2Euc2FfaGFuZGxlcjsKQEAgLTE1OSw3ICsxNjMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgaSwgKnMsICptLCB4OwogCWludCBzaWcgPSAwOwotCQorCiAJcyA9IHBlbmRpbmctPnNpZ25hbC5zaWc7CiAJbSA9IG1hc2stPnNpZzsKIAlzd2l0Y2ggKF9OU0lHX1dPUkRTKSB7CkBAIC0xODQsMTcgKzE4OCwzMSBAQAogCQkJc2lnID0gZmZ6KH54KSArIDE7CiAJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiBzaWc7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9kcm9wcGVkX3NpZ25hbChpbnQgc2lnKQoreworCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCAxMCk7CisKKwlpZiAoIXByaW50X2ZhdGFsX3NpZ25hbHMpCisJCXJldHVybjsKKworCWlmICghX19yYXRlbGltaXQoJnJhdGVsaW1pdF9zdGF0ZSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzLyVkOiByZWFjaGVkIFJMSU1JVF9TSUdQRU5ESU5HLCBkcm9wcGVkIHNpZ25hbCAlZFxuIiwKKwkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHNpZyk7Cit9CisKIC8qCiAgKiBhbGxvY2F0ZSBhIG5ldyBzaWduYWwgcXVldWUgcmVjb3JkCiAgKiAtIHRoaXMgbWF5IGJlIGNhbGxlZCB3aXRob3V0IGxvY2tzIGlmIGFuZCBvbmx5IGlmIHQgPT0gY3VycmVudCwgb3RoZXJ3aXNlIGFuCiAgKiAgIGFwcG9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgdG8gc3RvcCB0aGUgdGFyZ2V0IHRhc2sgZnJvbSBleGl0aW5nCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2lncXVldWUgKl9fc2lncXVldWVfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBnZnBfdCBmbGFncywKLQkJCQkJIGludCBvdmVycmlkZV9ybGltaXQpCitzdGF0aWMgc3RydWN0IHNpZ3F1ZXVlICoKK19fc2lncXVldWVfYWxsb2MoaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0LCBnZnBfdCBmbGFncywgaW50IG92ZXJyaWRlX3JsaW1pdCkKIHsKIAlzdHJ1Y3Qgc2lncXVldWUgKnEgPSBOVUxMOwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKQEAgLTIwNywxMCArMjI1LDE1IEBACiAJICovCiAJdXNlciA9IGdldF91aWQoX190YXNrX2NyZWQodCktPnVzZXIpOwogCWF0b21pY19pbmMoJnVzZXItPnNpZ3BlbmRpbmcpOworCiAJaWYgKG92ZXJyaWRlX3JsaW1pdCB8fAogCSAgICBhdG9taWNfcmVhZCgmdXNlci0+c2lncGVuZGluZykgPD0KLQkJCXQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU0lHUEVORElOR10ucmxpbV9jdXIpCisJCQl0LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NJR1BFTkRJTkddLnJsaW1fY3VyKSB7CiAJCXEgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ3F1ZXVlX2NhY2hlcCwgZmxhZ3MpOworCX0gZWxzZSB7CisJCXByaW50X2Ryb3BwZWRfc2lnbmFsKHNpZyk7CisJfQorCiAJaWYgKHVubGlrZWx5KHEgPT0gTlVMTCkpIHsKIAkJYXRvbWljX2RlYygmdXNlci0+c2lncGVuZGluZyk7CiAJCWZyZWVfdWlkKHVzZXIpOwpAQCAtODM0LDcgKzg1Nyw3IEBACiAJc3RydWN0IHNpZ3F1ZXVlICpxOwogCWludCBvdmVycmlkZV9ybGltaXQ7CiAKLQl0cmFjZV9zY2hlZF9zaWduYWxfc2VuZChzaWcsIHQpOworCXRyYWNlX3NpZ25hbF9nZW5lcmF0ZShzaWcsIGluZm8sIHQpOwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0LT5zaWdoYW5kLT5zaWdsb2NrKTsKIApAQCAtODY5LDcgKzg5Miw3IEBACiAJZWxzZQogCQlvdmVycmlkZV9ybGltaXQgPSAwOwogCi0JcSA9IF9fc2lncXVldWVfYWxsb2ModCwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PVFJBQ0tfRkFMU0VfUE9TSVRJVkUsCisJcSA9IF9fc2lncXVldWVfYWxsb2Moc2lnLCB0LCBHRlBfQVRPTUlDIHwgX19HRlBfTk9UUkFDS19GQUxTRV9QT1NJVElWRSwKIAkJb3ZlcnJpZGVfcmxpbWl0KTsKIAlpZiAocSkgewogCQlsaXN0X2FkZF90YWlsKCZxLT5saXN0LCAmcGVuZGluZy0+bGlzdCk7CkBAIC04OTYsMTIgKzkxOSwyMSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgaWYgKCFpc19zaV9zcGVjaWFsKGluZm8pKSB7Ci0JCWlmIChzaWcgPj0gU0lHUlRNSU4gJiYgaW5mby0+c2lfY29kZSAhPSBTSV9VU0VSKQotCQkvKgotCQkgKiBRdWV1ZSBvdmVyZmxvdywgYWJvcnQuICBXZSBtYXkgYWJvcnQgaWYgdGhlIHNpZ25hbCB3YXMgcnQKLQkJICogYW5kIHNlbnQgYnkgdXNlciB1c2luZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBraWxsKCkuCi0JCSAqLworCQlpZiAoc2lnID49IFNJR1JUTUlOICYmIGluZm8tPnNpX2NvZGUgIT0gU0lfVVNFUikgeworCQkJLyoKKwkJCSAqIFF1ZXVlIG92ZXJmbG93LCBhYm9ydC4gIFdlIG1heSBhYm9ydCBpZiB0aGUKKwkJCSAqIHNpZ25hbCB3YXMgcnQgYW5kIHNlbnQgYnkgdXNlciB1c2luZyBzb21ldGhpbmcKKwkJCSAqIG90aGVyIHRoYW4ga2lsbCgpLgorCQkJICovCisJCQl0cmFjZV9zaWduYWxfb3ZlcmZsb3dfZmFpbChzaWcsIGdyb3VwLCBpbmZvKTsKIAkJCXJldHVybiAtRUFHQUlOOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBzaWxlbnQgbG9zcyBvZiBpbmZvcm1hdGlvbi4gIFdlIHN0aWxsCisJCQkgKiBzZW5kIHRoZSBzaWduYWwsIGJ1dCB0aGUgKmluZm8gYml0cyBhcmUgbG9zdC4KKwkJCSAqLworCQkJdHJhY2Vfc2lnbmFsX2xvc2VfaW5mbyhzaWcsIGdyb3VwLCBpbmZvKTsKKwkJfQogCX0KIAogb3V0X3NldDoKQEAgLTkyNSw4ICs5NTcsNiBAQAogCXJldHVybiBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgdCwgZ3JvdXAsIGZyb21fYW5jZXN0b3JfbnMpOwogfQogCi1pbnQgcHJpbnRfZmF0YWxfc2lnbmFsczsKLQogc3RhdGljIHZvaWQgcHJpbnRfZmF0YWxfc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lnbnIpCiB7CiAJcHJpbnRrKCIlcy8lZDogcG90ZW50aWFsbHkgdW5leHBlY3RlZCBmYXRhbCBzaWduYWwgJWQuXG4iLApAQCAtMTI5MywxOSArMTMyMywxOSBAQAogICogVGhlc2UgZnVuY3Rpb25zIHN1cHBvcnQgc2VuZGluZyBzaWduYWxzIHVzaW5nIHByZWFsbG9jYXRlZCBzaWdxdWV1ZQogICogc3RydWN0dXJlcy4gIFRoaXMgaXMgbmVlZGVkICJiZWNhdXNlIHJlYWx0aW1lIGFwcGxpY2F0aW9ucyBjYW5ub3QKICAqIGFmZm9yZCB0byBsb3NlIG5vdGlmaWNhdGlvbnMgb2YgYXN5bmNocm9ub3VzIGV2ZW50cywgbGlrZSB0aW1lcgotICogZXhwaXJhdGlvbnMgb3IgSS9PIGNvbXBsZXRpb25zIi4gIEluIHRoZSBjYXNlIG9mIFBvc2l4IFRpbWVycyAKKyAqIGV4cGlyYXRpb25zIG9yIEkvTyBjb21wbGV0aW9ucyIuICBJbiB0aGUgY2FzZSBvZiBQb3NpeCBUaW1lcnMKICAqIHdlIGFsbG9jYXRlIHRoZSBzaWdxdWV1ZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgdGltZXJfY3JlYXRlLiAgSWYgdGhpcwogICogYWxsb2NhdGlvbiBmYWlscyB3ZSBhcmUgYWJsZSB0byByZXBvcnQgdGhlIGZhaWx1cmUgdG8gdGhlIGFwcGxpY2F0aW9uCiAgKiB3aXRoIGFuIEVBR0FJTiBlcnJvci4KICAqLwotIAogc3RydWN0IHNpZ3F1ZXVlICpzaWdxdWV1ZV9hbGxvYyh2b2lkKQogewotCXN0cnVjdCBzaWdxdWV1ZSAqcTsKKwlzdHJ1Y3Qgc2lncXVldWUgKnEgPSBfX3NpZ3F1ZXVlX2FsbG9jKC0xLCBjdXJyZW50LCBHRlBfS0VSTkVMLCAwKTsKIAotCWlmICgocSA9IF9fc2lncXVldWVfYWxsb2MoY3VycmVudCwgR0ZQX0tFUk5FTCwgMCkpKQorCWlmIChxKQogCQlxLT5mbGFncyB8PSBTSUdRVUVVRV9QUkVBTExPQzsKLQlyZXR1cm4ocSk7CisKKwlyZXR1cm4gcTsKIH0KIAogdm9pZCBzaWdxdWV1ZV9mcmVlKHN0cnVjdCBzaWdxdWV1ZSAqcSkKQEAgLTE4MzksNiArMTg2OSw5IEBACiAJCQlrYSA9ICZzaWdoYW5kLT5hY3Rpb25bc2lnbnItMV07CiAJCX0KIAorCQkvKiBUcmFjZSBhY3R1YWxseSBkZWxpdmVyZWQgc2lnbmFscy4gKi8KKwkJdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc2lnbnIsIGluZm8sIGthKTsKKwogCQlpZiAoa2EtPnNhLnNhX2hhbmRsZXIgPT0gU0lHX0lHTikgLyogRG8gbm90aGluZy4gICovCiAJCQljb250aW51ZTsKIAkJaWYgKGthLT5zYS5zYV9oYW5kbGVyICE9IFNJR19ERkwpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbG93LXdvcmstZGVidWdmcy5jIGIva2VybmVsL3Nsb3ctd29yay1kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1YzQzNgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zbG93LXdvcmstZGVidWdmcy5jCkBAIC0wLDAgKzEsMjI3IEBACisvKiBTbG93IHdvcmsgZGVidWdnaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgInNsb3ctd29yay5oIgorCisjZGVmaW5lIElURVJBVE9SX1NISUZUCQkoQklUU19QRVJfTE9ORyAtIDQpCisjZGVmaW5lIElURVJBVE9SX1NFTEVDVE9SCSgweGZVTCA8PCBJVEVSQVRPUl9TSElGVCkKKyNkZWZpbmUgSVRFUkFUT1JfQ09VTlRFUgkofklURVJBVE9SX1NFTEVDVE9SKQorCit2b2lkIHNsb3dfd29ya19uZXdfdGhyZWFkX2Rlc2Moc3RydWN0IHNsb3dfd29yayAqd29yaywgc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wdXRzKG0sICJTbG93LXdvcms6IE5ldyB0aHJlYWQiKTsKK30KKworLyoKKyAqIFJlbmRlciB0aGUgdGltZSBtYXJrIGZpZWxkIG9uIGEgd29yayBpdGVtIGludG8gYSA1LWNoYXIgdGltZSB3aXRoIHVuaXRzIHBsdXMKKyAqIGEgc3BhY2UKKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX3ByaW50X21hcmsoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCB0aW1lc3BlYyBub3csIGRpZmY7CisKKwlub3cgPSBDVVJSRU5UX1RJTUU7CisJZGlmZiA9IHRpbWVzcGVjX3N1Yihub3csIHdvcmstPm1hcmspOworCisJaWYgKGRpZmYudHZfc2VjIDwgMCkKKwkJc2VxX3B1dHMobSwgIiAgLXZlICIpOworCWVsc2UgaWYgKGRpZmYudHZfc2VjID09IDAgJiYgZGlmZi50dl9uc2VjIDwgMTAwMCkKKwkJc2VxX3ByaW50ZihtLCAiJTNsdW5zICIsIGRpZmYudHZfbnNlYyk7CisJZWxzZSBpZiAoZGlmZi50dl9zZWMgPT0gMCAmJiBkaWZmLnR2X25zZWMgPCAxMDAwMDAwKQorCQlzZXFfcHJpbnRmKG0sICIlM2x1dXMgIiwgZGlmZi50dl9uc2VjIC8gMTAwMCk7CisJZWxzZSBpZiAoZGlmZi50dl9zZWMgPT0gMCAmJiBkaWZmLnR2X25zZWMgPCAxMDAwMDAwMDAwKQorCQlzZXFfcHJpbnRmKG0sICIlM2x1bXMgIiwgZGlmZi50dl9uc2VjIC8gMTAwMDAwMCk7CisJZWxzZSBpZiAoZGlmZi50dl9zZWMgPD0gMSkKKwkJc2VxX3B1dHMobSwgIiAgIDFzICIpOworCWVsc2UgaWYgKGRpZmYudHZfc2VjIDwgNjApCisJCXNlcV9wcmludGYobSwgIiU0bHVzICIsIGRpZmYudHZfc2VjKTsKKwllbHNlIGlmIChkaWZmLnR2X3NlYyA8IDYwICogNjApCisJCXNlcV9wcmludGYobSwgIiU0bHVtICIsIGRpZmYudHZfc2VjIC8gNjApOworCWVsc2UgaWYgKGRpZmYudHZfc2VjIDwgNjAgKiA2MCAqIDI0KQorCQlzZXFfcHJpbnRmKG0sICIlNGx1aCAiLCBkaWZmLnR2X3NlYyAvIDM2MDApOworCWVsc2UKKwkJc2VxX3B1dHMobSwgImV4Y2VzICIpOworfQorCisvKgorICogRGVzY3JpYmUgYSBzbG93IHdvcmsgaXRlbSBmb3IgZGVidWdmcworICovCitzdGF0aWMgaW50IHNsb3dfd29ya19ydW5xdWV1ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrOworCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSB2OworCXVuc2lnbmVkIGxvbmcgaWQ7CisKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKSB2KSB7CisJY2FzZSAxOgorCQlzZXFfcHV0cyhtLCAiVEhSIFBJRCAgIElURU0gQUREUiAgICAgICAgRkwgTUFSSyAgREVTQ1xuIik7CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJc2VxX3B1dHMobSwgIj09PSA9PT09PSA9PT09PT09PT09PT09PT09ID09ID09PT09ID09PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKworCWNhc2UgMyAuLi4gMyArIFNMT1dfV09SS19USFJFQURfTElNSVQgLSAxOgorCQlpZCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKworCQlyZWFkX2xvY2soJnNsb3dfd29ya19leGVjc19sb2NrKTsKKwkJd29yayA9IHNsb3dfd29ya19leGVjc1tpZF07CisJCWlmICh3b3JrKSB7CisJCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKworCQkJc2VxX3ByaW50ZihtLCAiJTNsdSAlNWQgJTE2cCAlMmx4ICIsCisJCQkJICAgaWQsIHNsb3dfd29ya19waWRzW2lkXSwgd29yaywgd29yay0+ZmxhZ3MpOworCQkJc2xvd193b3JrX3ByaW50X21hcmsobSwgd29yayk7CisKKwkJCWlmICh3b3JrLT5vcHMtPmRlc2MpCisJCQkJd29yay0+b3BzLT5kZXNjKHdvcmssIG0pOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CisJCX0KKwkJcmVhZF91bmxvY2soJnNsb3dfd29ya19leGVjc19sb2NrKTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQl3b3JrID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc2xvd193b3JrLCBsaW5rKTsKKwkJc2VxX3ByaW50ZihtLCAiJTNzICAgICAtICUxNnAgJTJseCAiLAorCQkJICAgd29yay0+ZmxhZ3MgJiBTTE9XX1dPUktfVkVSWV9TTE9XID8gInZzcSIgOiAic3EiLAorCQkJICAgd29yaywgd29yay0+ZmxhZ3MpOworCQlzbG93X3dvcmtfcHJpbnRfbWFyayhtLCB3b3JrKTsKKworCQlpZiAod29yay0+b3BzLT5kZXNjKQorCQkJd29yay0+b3BzLT5kZXNjKHdvcmssIG0pOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogbWFwIHRoZSBpdGVyYXRvciB0byBhIHdvcmsgaXRlbQorICovCitzdGF0aWMgdm9pZCAqc2xvd193b3JrX3J1bnF1ZXVlX2luZGV4KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpfcG9zKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJdW5zaWduZWQgbG9uZyBjb3VudCwgaWQ7CisKKwlzd2l0Y2ggKCpfcG9zID4+IElURVJBVE9SX1NISUZUKSB7CisJY2FzZSAweDA6CisJCWlmICgqX3BvcyA9PSAwKQorCQkJKl9wb3MgPSAxOworCQlpZiAoKl9wb3MgPCAzKQorCQkJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpfcG9zOworCQlpZiAoKl9wb3MgPCAzICsgU0xPV19XT1JLX1RIUkVBRF9MSU1JVCkKKwkJCWZvciAoaWQgPSAqX3BvcyAtIDM7CisJCQkgICAgIGlkIDwgU0xPV19XT1JLX1RIUkVBRF9MSU1JVDsKKwkJCSAgICAgaWQrKywgKCpfcG9zKSsrKQorCQkJCWlmIChzbG93X3dvcmtfZXhlY3NbaWRdKQorCQkJCQlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykgKl9wb3M7CisJCSpfcG9zID0gMHgxVUwgPDwgSVRFUkFUT1JfU0hJRlQ7CisKKwljYXNlIDB4MToKKwkJY291bnQgPSAqX3BvcyAmIElURVJBVE9SX0NPVU5URVI7CisJCWxpc3RfZm9yX2VhY2gocCwgJnNsb3dfd29ya19xdWV1ZSkgeworCQkJaWYgKGNvdW50ID09IDApCisJCQkJcmV0dXJuIHA7CisJCQljb3VudC0tOworCQl9CisJCSpfcG9zID0gMHgyVUwgPDwgSVRFUkFUT1JfU0hJRlQ7CisKKwljYXNlIDB4MjoKKwkJY291bnQgPSAqX3BvcyAmIElURVJBVE9SX0NPVU5URVI7CisJCWxpc3RfZm9yX2VhY2gocCwgJnZzbG93X3dvcmtfcXVldWUpIHsKKwkJCWlmIChjb3VudCA9PSAwKQorCQkJCXJldHVybiBwOworCQkJY291bnQtLTsKKwkJfQorCQkqX3BvcyA9IDB4M1VMIDw8IElURVJBVE9SX1NISUZUOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKgorICogc2V0IHVwIHRoZSBpdGVyYXRvciB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGZpcnN0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKnNsb3dfd29ya19ydW5xdWV1ZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqX3BvcykKK3sKKwlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJcmV0dXJuIHNsb3dfd29ya19ydW5xdWV1ZV9pbmRleChtLCBfcG9zKTsKK30KKworLyoKKyAqIG1vdmUgdG8gdGhlIG5leHQgbGluZQorICovCitzdGF0aWMgdm9pZCAqc2xvd193b3JrX3J1bnF1ZXVlX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCA9IHY7CisJdW5zaWduZWQgbG9uZyBzZWxlY3RvciA9ICpfcG9zID4+IElURVJBVE9SX1NISUZUOworCisJKCpfcG9zKSsrOworCXN3aXRjaCAoc2VsZWN0b3IpIHsKKwljYXNlIDB4MDoKKwkJcmV0dXJuIHNsb3dfd29ya19ydW5xdWV1ZV9pbmRleChtLCBfcG9zKTsKKworCWNhc2UgMHgxOgorCQlpZiAoKl9wb3MgPj4gSVRFUkFUT1JfU0hJRlQgPT0gMHgxKSB7CisJCQlwID0gcC0+bmV4dDsKKwkJCWlmIChwICE9ICZzbG93X3dvcmtfcXVldWUpCisJCQkJcmV0dXJuIHA7CisJCX0KKwkJKl9wb3MgPSAweDJVTCA8PCBJVEVSQVRPUl9TSElGVDsKKwkJcCA9ICZ2c2xvd193b3JrX3F1ZXVlOworCisJY2FzZSAweDI6CisJCWlmICgqX3BvcyA+PiBJVEVSQVRPUl9TSElGVCA9PSAweDIpIHsKKwkJCXAgPSBwLT5uZXh0OworCQkJaWYgKHAgIT0gJnZzbG93X3dvcmtfcXVldWUpCisJCQkJcmV0dXJuIHA7CisJCX0KKwkJKl9wb3MgPSAweDNVTCA8PCBJVEVSQVRPUl9TSElGVDsKKworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworLyoKKyAqIGNsZWFuIHVwIGFmdGVyIHJlYWRpbmcKKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX3J1bnF1ZXVlX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXNwaW5fdW5sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsb3dfd29ya19ydW5xdWV1ZV9vcHMgPSB7CisJLnN0YXJ0CQk9IHNsb3dfd29ya19ydW5xdWV1ZV9zdGFydCwKKwkuc3RvcAkJPSBzbG93X3dvcmtfcnVucXVldWVfc3RvcCwKKwkubmV4dAkJPSBzbG93X3dvcmtfcnVucXVldWVfbmV4dCwKKwkuc2hvdwkJPSBzbG93X3dvcmtfcnVucXVldWVfc2hvdywKK307CisKKy8qCisgKiBvcGVuICIvc3lzL2tlcm5lbC9kZWJ1Zy9zbG93X3dvcmsvcnVucXVldWUiIHRvIGxpc3QgcXVldWUgY29udGVudHMKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfcnVucXVldWVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNsb3dfd29ya19ydW5xdWV1ZV9vcHMpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNsb3dfd29ya19ydW5xdWV1ZV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzbG93X3dvcmtfcnVucXVldWVfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbG93LXdvcmsuYyBiL2tlcm5lbC9zbG93LXdvcmsuYwppbmRleCAwZDMxMTM1Li4wMDg4OWJkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2xvdy13b3JrLmMKKysrIGIva2VybmVsL3Nsb3ctd29yay5jCkBAIC0xNiwxMSArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jZGVmaW5lIFNMT1dfV09SS19DVUxMX1RJTUVPVVQgKDUgKiBIWikJLyogY3VsbCB0aHJlYWRzIDVzIGFmdGVyIHJ1bm5pbmcgb3V0IG9mCi0JCQkJCSAqIHRoaW5ncyB0byBkbyAqLwotI2RlZmluZSBTTE9XX1dPUktfT09NX1RJTUVPVVQgKDUgKiBIWikJLyogY2FuJ3Qgc3RhcnQgbmV3IHRocmVhZHMgZm9yIDVzIGFmdGVyCi0JCQkJCSAqIE9PTSAqLworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlICJzbG93LXdvcmsuaCIKIAogc3RhdGljIHZvaWQgc2xvd193b3JrX2N1bGxfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHNsb3dfd29ya19vb21fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKQEAgLTQ2LDcgKzQzLDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIHN0YXRpYyBjb25zdCBpbnQgc2xvd193b3JrX21pbl9taW5fdGhyZWFkcyA9IDI7Ci1zdGF0aWMgaW50IHNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPSAyNTU7CitzdGF0aWMgaW50IHNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPSBTTE9XX1dPUktfVEhSRUFEX0xJTUlUOwogc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWluX3ZzbG93ID0gMTsKIHN0YXRpYyBjb25zdCBpbnQgc2xvd193b3JrX21heF92c2xvdyA9IDk5OwogCkBAIC05OCw2ICs5NSw1NiBAQAogc3RhdGljIHN0cnVjdCBzbG93X3dvcmsgc2xvd193b3JrX25ld190aHJlYWQ7IC8qIG5ldyB0aHJlYWQgc3RhcnRlciAqLwogCiAvKgorICogc2xvdyB3b3JrIElEIGFsbG9jYXRpb24gKHVzZSBzbG93X3dvcmtfcXVldWVfbG9jaykKKyAqLworc3RhdGljIERFQ0xBUkVfQklUTUFQKHNsb3dfd29ya19pZHMsIFNMT1dfV09SS19USFJFQURfTElNSVQpOworCisvKgorICogVW5yZWdpc3RyYXRpb24gdHJhY2tpbmcgdG8gcHJldmVudCBwdXRfcmVmKCkgZnJvbSBkaXNhcHBlYXJpbmcgZHVyaW5nIG1vZHVsZQorICogdW5sb2FkCisgKi8KKyNpZmRlZiBDT05GSUdfTU9EVUxFUworc3RhdGljIHN0cnVjdCBtb2R1bGUgKnNsb3dfd29ya190aHJlYWRfcHJvY2Vzc2luZ1tTTE9XX1dPUktfVEhSRUFEX0xJTUlUXTsKK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlICpzbG93X3dvcmtfdW5yZWdfbW9kdWxlOworc3RhdGljIHN0cnVjdCBzbG93X3dvcmsgKnNsb3dfd29ya191bnJlZ193b3JrX2l0ZW07CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc2xvd193b3JrX3VucmVnX3dxKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoc2xvd193b3JrX3VucmVnX3N5bmNfbG9jayk7CisKK3N0YXRpYyB2b2lkIHNsb3dfd29ya19zZXRfdGhyZWFkX3Byb2Nlc3NpbmcoaW50IGlkLCBzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCWlmICh3b3JrKQorCQlzbG93X3dvcmtfdGhyZWFkX3Byb2Nlc3NpbmdbaWRdID0gd29yay0+b3duZXI7Cit9CitzdGF0aWMgdm9pZCBzbG93X3dvcmtfZG9uZV90aHJlYWRfcHJvY2Vzc2luZyhpbnQgaWQsIHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gc2xvd193b3JrX3RocmVhZF9wcm9jZXNzaW5nW2lkXTsKKworCXNsb3dfd29ya190aHJlYWRfcHJvY2Vzc2luZ1tpZF0gPSBOVUxMOworCXNtcF9tYigpOworCWlmIChzbG93X3dvcmtfdW5yZWdfd29ya19pdGVtID09IHdvcmsgfHwKKwkgICAgc2xvd193b3JrX3VucmVnX21vZHVsZSA9PSBtb2R1bGUpCisJCXdha2VfdXBfYWxsKCZzbG93X3dvcmtfdW5yZWdfd3EpOworfQorc3RhdGljIHZvaWQgc2xvd193b3JrX2NsZWFyX3RocmVhZF9wcm9jZXNzaW5nKGludCBpZCkKK3sKKwlzbG93X3dvcmtfdGhyZWFkX3Byb2Nlc3NpbmdbaWRdID0gTlVMTDsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfc2V0X3RocmVhZF9wcm9jZXNzaW5nKGludCBpZCwgc3RydWN0IHNsb3dfd29yayAqd29yaykge30KK3N0YXRpYyB2b2lkIHNsb3dfd29ya19kb25lX3RocmVhZF9wcm9jZXNzaW5nKGludCBpZCwgc3RydWN0IHNsb3dfd29yayAqd29yaykge30KK3N0YXRpYyB2b2lkIHNsb3dfd29ya19jbGVhcl90aHJlYWRfcHJvY2Vzc2luZyhpbnQgaWQpIHt9CisjZW5kaWYKKworLyoKKyAqIERhdGEgZm9yIHRyYWNraW5nIGN1cnJlbnRseSBleGVjdXRpbmcgaXRlbXMgZm9yIGluZGljYXRpb24gdGhyb3VnaCAvcHJvYworICovCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRworc3RydWN0IHNsb3dfd29yayAqc2xvd193b3JrX2V4ZWNzW1NMT1dfV09SS19USFJFQURfTElNSVRdOworcGlkX3Qgc2xvd193b3JrX3BpZHNbU0xPV19XT1JLX1RIUkVBRF9MSU1JVF07CitERUZJTkVfUldMT0NLKHNsb3dfd29ya19leGVjc19sb2NrKTsKKyNlbmRpZgorCisvKgogICogVGhlIHF1ZXVlcyBvZiB3b3JrIGl0ZW1zIGFuZCB0aGUgbG9jayBnb3Zlcm5pbmcgYWNjZXNzIHRvIHRoZW0uICBUaGVzZSBhcmUKICAqIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgQ1BVcy4gIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBoYXZlIHBlci1DUFUgcXVldWVzCiAgKiBhcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgYmVhcnMgbm8gcmVsYXRpb24gdG8gdGhlIG51bWJlciBvZiBDUFVzLgpAQCAtMTA1LDkgKzE1MiwxOCBAQAogICogVGhlcmUgYXJlIHR3byBxdWV1ZXMgb2Ygd29yayBpdGVtczogb25lIGZvciBzbG93IHdvcmsgaXRlbXMsIGFuZCBvbmUgZm9yCiAgKiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KICAqLwotc3RhdGljIExJU1RfSEVBRChzbG93X3dvcmtfcXVldWUpOwotc3RhdGljIExJU1RfSEVBRCh2c2xvd193b3JrX3F1ZXVlKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xvd193b3JrX3F1ZXVlX2xvY2spOworTElTVF9IRUFEKHNsb3dfd29ya19xdWV1ZSk7CitMSVNUX0hFQUQodnNsb3dfd29ya19xdWV1ZSk7CitERUZJTkVfU1BJTkxPQ0soc2xvd193b3JrX3F1ZXVlX2xvY2spOworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdHdvIHdhaXQgcXVldWVzIHRoYXQgZ2V0IHBpbmdlZCB3aGVuIGEgd29yayBpdGVtIGlzIHBsYWNlZAorICogb24gYW4gZW1wdHkgcXVldWUuICBUaGVzZSBhbGxvdyB3b3JrIGl0ZW1zIHRoYXQgYXJlIGhvZ2dpbmcgYSB0aHJlYWQgYnkKKyAqIHNsZWVwaW5nIGluIGEgd2F5IHRoYXQgY291bGQgYmUgZGVmZXJyZWQgdG8geWllbGQgdGhlaXIgdGhyZWFkIGFuZCBlbnF1ZXVlCisgKiB0aGVtc2VsdmVzLgorICovCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh2c2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uKTsKIAogLyoKICAqIFRoZSB0aHJlYWQgY29udHJvbHMuICBBIHZhcmlhYmxlIHVzZWQgdG8gc2lnbmFsIHRvIHRoZSB0aHJlYWRzIHRoYXQgdGhleQpAQCAtMTI2LDYgKzE4MiwyMCBAQAogc3RhdGljIGludCBzbG93X3dvcmtfdXNlcl9jb3VudDsKIHN0YXRpYyBERUZJTkVfTVVURVgoc2xvd193b3JrX3VzZXJfbG9jayk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNsb3dfd29ya19nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJaWYgKHdvcmstPm9wcy0+Z2V0X3JlZikKKwkJcmV0dXJuIHdvcmstPm9wcy0+Z2V0X3JlZih3b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd193b3JrX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlpZiAod29yay0+b3BzLT5wdXRfcmVmKQorCQl3b3JrLT5vcHMtPnB1dF9yZWYod29yayk7Cit9CisKIC8qCiAgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSB0aHJlYWRzIGluIHRoZSBwb29sIHRoYXQgYXJlCiAgKiBwZXJtaXR0ZWQgdG8gcHJvY2VzcyB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KQEAgLTE0OSw3ICsyMTksNyBAQAogICogQXR0ZW1wdCB0byBleGVjdXRlIHN0dWZmIHF1ZXVlZCBvbiBhIHNsb3cgdGhyZWFkLiAgUmV0dXJuIHRydWUgaWYgd2UgbWFuYWdlZAogICogaXQsIGZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvLgogICovCi1zdGF0aWMgYm9vbCBzbG93X3dvcmtfZXhlY3V0ZSh2b2lkKQorc3RhdGljIG5vaW5saW5lIGJvb2wgc2xvd193b3JrX2V4ZWN1dGUoaW50IGlkKQogewogCXN0cnVjdCBzbG93X3dvcmsgKndvcmsgPSBOVUxMOwogCXVuc2lnbmVkIHZzbWF4OwpAQCAtMTg2LDYgKzI1NiwxMyBAQAogCX0gZWxzZSB7CiAJCXZlcnlfc2xvdyA9IGZhbHNlOyAvKiBhdm9pZCB0aGUgY29tcGlsZXIgd2FybmluZyAqLwogCX0KKworCXNsb3dfd29ya19zZXRfdGhyZWFkX3Byb2Nlc3NpbmcoaWQsIHdvcmspOworCWlmICh3b3JrKSB7CisJCXNsb3dfd29ya19tYXJrX3RpbWUod29yayk7CisJCXNsb3dfd29ya19iZWdpbl9leGVjKGlkLCB3b3JrKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKIAogCWlmICghd29yaykKQEAgLTE5NCwxMiArMjcxLDE5IEBACiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpCiAJCUJVRygpOwogCi0Jd29yay0+b3BzLT5leGVjdXRlKHdvcmspOworCS8qIGRvbid0IGV4ZWN1dGUgaWYgdGhlIHdvcmsgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY2FuY2VsbGVkICovCisJaWYgKCF0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKKwkJd29yay0+b3BzLT5leGVjdXRlKHdvcmspOwogCiAJaWYgKHZlcnlfc2xvdykKIAkJYXRvbWljX2RlYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOwogCWNsZWFyX2JpdF91bmxvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKTsKIAorCS8qIHdha2UgdXAgYW55b25lIHdhaXRpbmcgZm9yIHRoaXMgd29yayB0byBiZSBjb21wbGV0ZSAqLworCXdha2VfdXBfYml0KCZ3b3JrLT5mbGFncywgU0xPV19XT1JLX0VYRUNVVElORyk7CisKKwlzbG93X3dvcmtfZW5kX2V4ZWMoaWQsIHdvcmspOworCiAJLyogaWYgc29tZW9uZSB0cmllZCB0byBlbnF1ZXVlIHRoZSBpdGVtIHdoaWxzdCB3ZSB3ZXJlIGV4ZWN1dGluZyBpdCwKIAkgKiB0aGVuIGl0J2xsIGJlIGxlZnQgdW5lbnF1ZXVlZCB0byBhdm9pZCBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0bwogCSAqIGV4ZWN1dGUgaXQgc2ltdWx0YW5lb3VzbHkKQEAgLTIxOSw3ICszMDMsMTAgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CiAJfQogCi0Jd29yay0+b3BzLT5wdXRfcmVmKHdvcmspOworCS8qIHNvcnQgb3V0IHRoZSByYWNlIGJldHdlZW4gbW9kdWxlIHVubG9hZGluZyBhbmQgcHV0X3JlZigpICovCisJc2xvd193b3JrX3B1dF9yZWYod29yayk7CisJc2xvd193b3JrX2RvbmVfdGhyZWFkX3Byb2Nlc3NpbmcoaWQsIHdvcmspOworCiAJcmV0dXJuIHRydWU7CiAKIGF1dG9fcmVxdWV1ZToKQEAgLTIyNywxNSArMzE0LDYxIEBACiAJICogLSB3ZSB0cmFuc2ZlciBvdXIgcmVmIG9uIHRoZSBpdGVtIGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIHF1ZXVlCiAJICogLSBkb24ndCB3YWtlIGFub3RoZXIgdGhyZWFkIHVwIGFzIHdlJ3JlIGF3YWtlIGFscmVhZHkKIAkgKi8KKwlzbG93X3dvcmtfbWFya190aW1lKHdvcmspOwogCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKQogCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmdnNsb3dfd29ya19xdWV1ZSk7CiAJZWxzZQogCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmc2xvd193b3JrX3F1ZXVlKTsKIAlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwlzbG93X3dvcmtfY2xlYXJfdGhyZWFkX3Byb2Nlc3NpbmcoaWQpOwogCXJldHVybiB0cnVlOwogfQogCiAvKioKKyAqIHNsb3dfd29ya19zbGVlcF90aWxsX3RocmVhZF9uZWVkZWQgLSBTbGVlcCB0aWxsIHRocmVhZCBuZWVkZWQgYnkgb3RoZXIgd29yaworICogd29yazogVGhlIHdvcmsgaXRlbSB1bmRlciBleGVjdXRpb24gdGhhdCB3YW50cyB0byBzbGVlcAorICogX3RpbWVvdXQ6IFNjaGVkdWxlciBzbGVlcCB0aW1lb3V0CisgKgorICogQWxsb3cgYSByZXF1ZXVlYWJsZSB3b3JrIGl0ZW0gdG8gc2xlZXAgb24gYSBzbG93LXdvcmsgcHJvY2Vzc29yIHRocmVhZCB1bnRpbAorICogdGhhdCB0aHJlYWQgaXMgbmVlZGVkIHRvIGRvIHNvbWUgb3RoZXIgd29yayBvciB0aGUgc2xlZXAgaXMgaW50ZXJydXB0ZWQgYnkKKyAqIHNvbWUgb3RoZXIgZXZlbnQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHNldCB1cCBhIHdha2UgdXAgZXZlbnQgYmVmb3JlIGNhbGxpbmcgdGhpcyBhbmQgbXVzdCBoYXZlIHNldAorICogdGhlIGFwcHJvcHJpYXRlIHNsZWVwIG1vZGUgKHN1Y2ggYXMgVEFTS19VTklOVEVSUlVQVElCTEUpIGFuZCB0ZXN0ZWQgaXRzIG93bgorICogY29uZGl0aW9uIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYXMgbm8gdGVzdCBpcyBtYWRlIGhlcmUuCisgKgorICogRmFsc2UgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXMgbm90aGluZyBvbiB0aGUgcXVldWU7IHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlCisgKiB3b3JrIGl0ZW0gc2hvdWxkIGJlIHJlcXVldWVkCisgKi8KK2Jvb2wgc2xvd193b3JrX3NsZWVwX3RpbGxfdGhyZWFkX25lZWRlZChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLAorCQkJCQlzaWduZWQgbG9uZyAqX3RpbWVvdXQpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndmb193cTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZTsKKworCURFRklORV9XQUlUKHdhaXQpOworCisJaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpIHsKKwkJd2ZvX3dxID0gJnZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247CisJCXF1ZXVlID0gJnZzbG93X3dvcmtfcXVldWU7CisJfSBlbHNlIHsKKwkJd2ZvX3dxID0gJnNsb3dfd29ya19xdWV1ZV93YWl0c19mb3Jfb2NjdXBhdGlvbjsKKwkJcXVldWUgPSAmc2xvd193b3JrX3F1ZXVlOworCX0KKworCWlmICghbGlzdF9lbXB0eShxdWV1ZSkpCisJCXJldHVybiB0cnVlOworCisJYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHdmb193cSwgJndhaXQpOworCWlmIChsaXN0X2VtcHR5KHF1ZXVlKSkKKwkJKl90aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCgqX3RpbWVvdXQpOworCWZpbmlzaF93YWl0KHdmb193cSwgJndhaXQpOworCisJcmV0dXJuICFsaXN0X2VtcHR5KHF1ZXVlKTsKK30KK0VYUE9SVF9TWU1CT0woc2xvd193b3JrX3NsZWVwX3RpbGxfdGhyZWFkX25lZWRlZCk7CisKKy8qKgogICogc2xvd193b3JrX2VucXVldWUgLSBTY2hlZHVsZSBhIHNsb3cgd29yayBpdGVtIGZvciBwcm9jZXNzaW5nCiAgKiBAd29yazogVGhlIHdvcmsgaXRlbSB0byBxdWV1ZQogICoKQEAgLTI2MCwxNiArMzkzLDIyIEBACiAgKiBhbGxvd2VkIHRvIHBpY2sgaXRlbXMgdG8gZXhlY3V0ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHZlcnkgc2xvdyBpdGVtcyB3b24ndAogICogb3Zlcmx5IGJsb2NrIG9uZXMgdGhhdCBhcmUganVzdCBvcmRpbmFyaWx5IHNsb3cuCiAgKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1FQUdBSU4gaWYgbm90LgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1FQUdBSU4gaWYgbm90IChvciAtRUNBTkNFTEVEIGlmIGNhbmNlbGxlZCB3b3JrIGlzCisgKiBhdHRlbXB0ZWQgcXVldWVkKQogICovCiBpbnQgc2xvd193b3JrX2VucXVldWUoc3RydWN0IHNsb3dfd29yayAqd29yaykKIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd2ZvX3dxOworCXN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKKwkJcmV0dXJuIC1FQ0FOQ0VMRUQ7CiAKIAlCVUdfT04oc2xvd193b3JrX3VzZXJfY291bnQgPD0gMCk7CiAJQlVHX09OKCF3b3JrKTsKIAlCVUdfT04oIXdvcmstPm9wcyk7Ci0JQlVHX09OKCF3b3JrLT5vcHMtPmdldF9yZWYpOwogCiAJLyogd2hlbiBob25vdXJpbmcgYW4gZW5xdWV1ZSByZXF1ZXN0LCB3ZSBvbmx5IHByb21pc2UgdGhhdCB3ZSB3aWxsIHJ1bgogCSAqIHRoZSB3b3JrIGZ1bmN0aW9uIGluIHRoZSBmdXR1cmU7IHdlIGRvIG5vdCBwcm9taXNlIHRvIHJ1biBpdCBvbmNlCkBAIC0yODAsOCArNDE5LDE5IEBACiAJICogbWFpbnRhaW5pbmcgb3VyIHByb21pc2UKIAkgKi8KIAlpZiAoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoU0xPV19XT1JLX1ZFUllfU0xPVywgJndvcmstPmZsYWdzKSkgeworCQkJd2ZvX3dxID0gJnZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247CisJCQlxdWV1ZSA9ICZ2c2xvd193b3JrX3F1ZXVlOworCQl9IGVsc2UgeworCQkJd2ZvX3dxID0gJnNsb3dfd29ya19xdWV1ZV93YWl0c19mb3Jfb2NjdXBhdGlvbjsKKwkJCXF1ZXVlID0gJnNsb3dfd29ya19xdWV1ZTsKKwkJfQorCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwogCisJCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkpCisJCQlnb3RvIGNhbmNlbGxlZDsKKwogCQkvKiB3ZSBwcm9taXNlIHRoYXQgd2Ugd2lsbCBub3QgYXR0ZW1wdCB0byBleGVjdXRlIHRoZSB3b3JrCiAJCSAqIGZ1bmN0aW9uIGluIG1vcmUgdGhhbiBvbmUgdGhyZWFkIHNpbXVsdGFuZW91c2x5CiAJCSAqCkBAIC0yOTksMjUgKzQ0OSwyMjEgQEAKIAkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykpIHsKIAkJCXNldF9iaXQoU0xPV19XT1JLX0VOUV9ERUZFUlJFRCwgJndvcmstPmZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCWlmICh3b3JrLT5vcHMtPmdldF9yZWYod29yaykgPCAwKQotCQkJCWdvdG8gY2FudF9nZXRfcmVmOwotCQkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpCi0JCQkJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgJnZzbG93X3dvcmtfcXVldWUpOwotCQkJZWxzZQotCQkJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZzbG93X3dvcmtfcXVldWUpOworCQkJcmV0ID0gc2xvd193b3JrX2dldF9yZWYod29yayk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCXNsb3dfd29ya19tYXJrX3RpbWUod29yayk7CisJCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCBxdWV1ZSk7CiAJCQl3YWtlX3VwKCZzbG93X3dvcmtfdGhyZWFkX3dxKTsKKworCQkJLyogaWYgc29tZW9uZSB3aG8gY291bGQgYmUgcmVxdWV1ZWQgaXMgc2xlZXBpbmcgb24gYQorCQkJICogdGhyZWFkLCB0aGVuIGFzayB0aGVtIHRvIHlpZWxkIHRoZWlyIHRocmVhZCAqLworCQkJaWYgKHdvcmstPmxpbmsucHJldiA9PSBxdWV1ZSkKKwkJCQl3YWtlX3VwKHdmb193cSk7CiAJCX0KIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIAotY2FudF9nZXRfcmVmOgorY2FuY2VsbGVkOgorCXJldCA9IC1FQ0FOQ0VMRUQ7CitmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfZW5xdWV1ZSk7CiAKK3N0YXRpYyBpbnQgc2xvd193b3JrX3dhaXQodm9pZCAqd29yZCkKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHNsb3dfd29ya19jYW5jZWwgLSBDYW5jZWwgYSBzbG93IHdvcmsgaXRlbQorICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gY2FuY2VsCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbmNlbCBhIHByZXZpb3VzbHkgZW5xdWV1ZWQgd29yayBpdGVtLiBJZiB3ZSBjYW5ub3QKKyAqIGNhbmNlbCB0aGUgd29yayBpdGVtLCBpdCBpcyBndWFyZW50ZWVkIHRvIGhhdmUgcnVuIHdoZW4gdGhpcyBmdW5jdGlvbgorICogcmV0dXJucy4KKyAqLwordm9pZCBzbG93X3dvcmtfY2FuY2VsKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJYm9vbCB3YWl0ID0gdHJ1ZSwgcHV0ID0gZmFsc2U7CisKKwlzZXRfYml0KFNMT1dfV09SS19DQU5DRUxMSU5HLCAmd29yay0+ZmxhZ3MpOworCXNtcF9tYigpOworCisJLyogaWYgdGhlIHdvcmsgaXRlbSBpcyBhIGRlbGF5ZWQgd29yayBpdGVtIHdpdGggYW4gYWN0aXZlIHRpbWVyLCB3ZQorCSAqIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHRpbWVyIHRvIGZpbmlzaCBfYmVmb3JlXyBnZXR0aW5nIHRoZSBzcGlubG9jaywKKwkgKiBsZXN0IHdlIGRlYWRsb2NrIGFnYWluc3QgdGhlIHRpbWVyIHJvdXRpbmUKKwkgKgorCSAqIHRoZSB0aW1lciByb3V0aW5lIHdpbGwgbGVhdmUgREVMQVlFRCBzZXQgaWYgaXQgbm90aWNlcyB0aGUKKwkgKiBDQU5DRUxMSU5HIGZsYWcgaW4gdGltZQorCSAqLworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfREVMQVlFRCwgJndvcmstPmZsYWdzKSkgeworCQlzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmsgKmR3b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmssIHdvcmspOworCQlkZWxfdGltZXJfc3luYygmZHdvcmstPnRpbWVyKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisKKwlpZiAodGVzdF9iaXQoU0xPV19XT1JLX0RFTEFZRUQsICZ3b3JrLT5mbGFncykpIHsKKwkJLyogdGhlIHRpbWVyIHJvdXRpbmUgYWJvcnRlZCBvciBuZXZlciBoYXBwZW5lZCwgc28gd2UgYXJlIGxlZnQKKwkJICogaG9sZGluZyB0aGUgdGltZXIncyByZWZlcmVuY2Ugb24gdGhlIGl0ZW0gYW5kIHNob3VsZCBqdXN0CisJCSAqIGRyb3AgdGhlIHBlbmRpbmcgZmxhZyBhbmQgd2FpdCBmb3IgYW55IG9uZ29pbmcgZXhlY3V0aW9uIHRvCisJCSAqIGZpbmlzaCAqLworCQlzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmsgKmR3b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmssIHdvcmspOworCisJCUJVR19PTih0aW1lcl9wZW5kaW5nKCZkd29yay0+dGltZXIpKTsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5saW5rKSk7CisKKwkJY2xlYXJfYml0KFNMT1dfV09SS19ERUxBWUVELCAmd29yay0+ZmxhZ3MpOworCQlwdXQgPSB0cnVlOworCQljbGVhcl9iaXQoU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncyk7CisKKwl9IGVsc2UgaWYgKHRlc3RfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpICYmCisJCSAgICFsaXN0X2VtcHR5KCZ3b3JrLT5saW5rKSkgeworCQkvKiB0aGUgbGluayBpbiB0aGUgcGVuZGluZyBxdWV1ZSBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgaXRlbQorCQkgKiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlICovCisJCWxpc3RfZGVsX2luaXQoJndvcmstPmxpbmspOworCQl3YWl0ID0gZmFsc2U7CisJCXB1dCA9IHRydWU7CisJCWNsZWFyX2JpdChTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKTsKKworCX0gZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNMT1dfV09SS19FTlFfREVGRVJSRUQsICZ3b3JrLT5mbGFncykpIHsKKwkJLyogdGhlIGV4ZWN1dG9yIGlzIGhvbGRpbmcgb3VyIG9ubHkgcmVmZXJlbmNlIG9uIHRoZSBpdGVtLCBzbworCQkgKiB3ZSBtZXJlbHkgbmVlZCB0byB3YWl0IGZvciBpdCB0byBmaW5pc2ggZXhlY3V0aW5nICovCisJCWNsZWFyX2JpdChTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKworCS8qIHRoZSBFWEVDVVRJTkcgZmxhZyBpcyBzZXQgYnkgdGhlIGV4ZWN1dG9yIHdoaWxzdCB0aGUgc3BpbmxvY2sgaXMgc2V0CisJICogYW5kIGJlZm9yZSB0aGUgaXRlbSBpcyBkZXF1ZXVlZCAtIHNvIGFzc3VtaW5nIHRoZSBhYm92ZSBkb2Vzbid0CisJICogYWN0dWFsbHkgZGVxdWV1ZSBpdCwgc2ltcGx5IHdhaXRpbmcgZm9yIHRoZSBFWEVDVVRJTkcgZmxhZyB0byBiZQorCSAqIHJlbGVhc2VkIGhlcmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQgKi8KKwlpZiAod2FpdCkKKwkJd2FpdF9vbl9iaXQoJndvcmstPmZsYWdzLCBTTE9XX1dPUktfRVhFQ1VUSU5HLCBzbG93X3dvcmtfd2FpdCwKKwkJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwljbGVhcl9iaXQoU0xPV19XT1JLX0NBTkNFTExJTkcsICZ3b3JrLT5mbGFncyk7CisJaWYgKHB1dCkKKwkJc2xvd193b3JrX3B1dF9yZWYod29yayk7Cit9CitFWFBPUlRfU1lNQk9MKHNsb3dfd29ya19jYW5jZWwpOworCisvKgorICogSGFuZGxlIGV4cGlyeSBvZiB0aGUgZGVsYXkgdGltZXIsIGluZGljYXRpbmcgdGhhdCBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0KKyAqIHNob3VsZCBub3cgYmUgcXVldWVkIGlmIG5vdCBjYW5jZWxsZWQKKyAqLworc3RhdGljIHZvaWQgZGVsYXllZF9zbG93X3dvcmtfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXdhaXRfcXVldWVfaGVhZF90ICp3Zm9fd3E7CisJc3RydWN0IGxpc3RfaGVhZCAqcXVldWU7CisJc3RydWN0IHNsb3dfd29yayAqd29yayA9IChzdHJ1Y3Qgc2xvd193b3JrICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHF1ZXVlZCA9IGZhbHNlLCBwdXQgPSBmYWxzZSwgZmlyc3QgPSBmYWxzZTsKKworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKSB7CisJCXdmb193cSA9ICZ2c2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uOworCQlxdWV1ZSA9ICZ2c2xvd193b3JrX3F1ZXVlOworCX0gZWxzZSB7CisJCXdmb193cSA9ICZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247CisJCXF1ZXVlID0gJnNsb3dfd29ya19xdWV1ZTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkpIHsKKwkJY2xlYXJfYml0KFNMT1dfV09SS19ERUxBWUVELCAmd29yay0+ZmxhZ3MpOworCisJCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKSB7CisJCQkvKiB3ZSBkaXNjYXJkIHRoZSByZWZlcmVuY2UgdGhlIHRpbWVyIHdhcyBob2xkaW5nIGluCisJCQkgKiBmYXZvdXIgb2YgdGhlIG9uZSB0aGUgZXhlY3V0b3IgaG9sZHMgKi8KKwkJCXNldF9iaXQoU0xPV19XT1JLX0VOUV9ERUZFUlJFRCwgJndvcmstPmZsYWdzKTsKKwkJCXB1dCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlzbG93X3dvcmtfbWFya190aW1lKHdvcmspOworCQkJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgcXVldWUpOworCQkJcXVldWVkID0gdHJ1ZTsKKwkJCWlmICh3b3JrLT5saW5rLnByZXYgPT0gcXVldWUpCisJCQkJZmlyc3QgPSB0cnVlOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlpZiAocHV0KQorCQlzbG93X3dvcmtfcHV0X3JlZih3b3JrKTsKKwlpZiAoZmlyc3QpCisJCXdha2VfdXAod2ZvX3dxKTsKKwlpZiAocXVldWVkKQorCQl3YWtlX3VwKCZzbG93X3dvcmtfdGhyZWFkX3dxKTsKK30KKworLyoqCisgKiBkZWxheWVkX3Nsb3dfd29ya19lbnF1ZXVlIC0gU2NoZWR1bGUgYSBkZWxheWVkIHNsb3cgd29yayBpdGVtIGZvciBwcm9jZXNzaW5nCisgKiBAZHdvcms6IFRoZSBkZWxheWVkIHdvcmsgaXRlbSB0byBxdWV1ZQorICogQGRlbGF5OiBXaGVuIHRvIHN0YXJ0IGV4ZWN1dGluZyB0aGUgd29yaywgaW4gamlmZmllcyBmcm9tIG5vdworICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBzbG93X3dvcmtfZW5xdWV1ZSgpLCBidXQgaXQgYWRkcyBhIGRlbGF5IGJlZm9yZSB0aGUgd29yaworICogaXMgYWN0dWFsbHkgcXVldWVkIGZvciBwcm9jZXNzaW5nLgorICoKKyAqIFRoZSBpdGVtIGNhbiBoYXZlIGRlbGF5ZWQgcHJvY2Vzc2luZyByZXF1ZXN0ZWQgb24gaXQgd2hpbHN0IGl0IGlzIGJlaW5nCisgKiBleGVjdXRlZC4gIFRoZSBkZWxheSB3aWxsIGJlZ2luIGltbWVkaWF0ZWx5LCBhbmQgaWYgaXQgZXhwaXJlcyBiZWZvcmUgdGhlCisgKiBpdGVtIGZpbmlzaGVzIGV4ZWN1dGluZywgdGhlIGl0ZW0gd2lsbCBiZSBwbGFjZWQgYmFjayBvbiB0aGUgcXVldWUgd2hlbiBpdAorICogaGFzIGRvbmUgZXhlY3V0aW5nLgorICovCitpbnQgZGVsYXllZF9zbG93X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmsgKmR3b3JrLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSkKK3sKKwlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrID0gJmR3b3JrLT53b3JrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmIChkZWxheSA9PSAwKQorCQlyZXR1cm4gc2xvd193b3JrX2VucXVldWUoJmR3b3JrLT53b3JrKTsKKworCUJVR19PTihzbG93X3dvcmtfdXNlcl9jb3VudCA8PSAwKTsKKwlCVUdfT04oIXdvcmspOworCUJVR19PTighd29yay0+b3BzKTsKKworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKKwkJcmV0dXJuIC1FQ0FOQ0VMRUQ7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodGVzdF9iaXQoU0xPV19XT1JLX0NBTkNFTExJTkcsICZ3b3JrLT5mbGFncykpCisJCQlnb3RvIGNhbmNlbGxlZDsKKworCQkvKiB0aGUgdGltZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpbHN0IGl0IGlzIHBlbmRpbmcgKi8KKwkJcmV0ID0gd29yay0+b3BzLT5nZXRfcmVmKHdvcmspOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2FudF9nZXRfcmVmOworCisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNMT1dfV09SS19ERUxBWUVELCAmd29yay0+ZmxhZ3MpKQorCQkJQlVHKCk7CisJCWR3b3JrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGRlbGF5OworCQlkd29yay0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB3b3JrOworCQlkd29yay0+dGltZXIuZnVuY3Rpb24gPSBkZWxheWVkX3Nsb3dfd29ya190aW1lcjsKKwkJYWRkX3RpbWVyKCZkd29yay0+dGltZXIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIDA7CisKK2NhbmNlbGxlZDoKKwlyZXQgPSAtRUNBTkNFTEVEOworY2FudF9nZXRfcmVmOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZGVsYXllZF9zbG93X3dvcmtfZW5xdWV1ZSk7CisKIC8qCiAgKiBTY2hlZHVsZSBhIGN1bGwgb2YgdGhlIHRocmVhZCBwb29sIGF0IHNvbWUgdGltZSBpbiB0aGUgbmVhciBmdXR1cmUKICAqLwpAQCAtMzY4LDEzICs3MTQsMjMgQEAKICAqLwogc3RhdGljIGludCBzbG93X3dvcmtfdGhyZWFkKHZvaWQgKl9kYXRhKQogewotCWludCB2c21heDsKKwlpbnQgdnNtYXgsIGlkOwogCiAJREVGSU5FX1dBSVQod2FpdCk7CiAKIAlzZXRfZnJlZXphYmxlKCk7CiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtNSk7CiAKKwkvKiBhbGxvY2F0ZSBvdXJzZWx2ZXMgYW4gSUQgKi8KKwlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHNsb3dfd29ya19pZHMsIFNMT1dfV09SS19USFJFQURfTElNSVQpOworCUJVR19PTihpZCA8IDAgfHwgaWQgPj0gU0xPV19XT1JLX1RIUkVBRF9MSU1JVCk7CisJX19zZXRfYml0KGlkLCBzbG93X3dvcmtfaWRzKTsKKwlzbG93X3dvcmtfc2V0X3RocmVhZF9waWQoaWQsIGN1cnJlbnQtPnBpZCk7CisJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisKKwlzcHJpbnRmKGN1cnJlbnQtPmNvbW0sICJrc2xvd2QlMDN1IiwgaWQpOworCiAJZm9yICg7OykgewogCQl2c21heCA9IHZzbG93X3dvcmtfcHJvcG9ydGlvbjsKIAkJdnNtYXggKj0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOwpAQCAtMzk1LDcgKzc1MSw3IEBACiAJCXZzbWF4ICo9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKIAkJdnNtYXggLz0gMTAwOwogCi0JCWlmIChzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJiBzbG93X3dvcmtfZXhlY3V0ZSgpKSB7CisJCWlmIChzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJiBzbG93X3dvcmtfZXhlY3V0ZShpZCkpIHsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJaWYgKGxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkgJiYKIAkJCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgpAQCAtNDEyLDYgKzc2OCwxMSBAQAogCQkJYnJlYWs7CiAJfQogCisJc3Bpbl9sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOworCXNsb3dfd29ya19zZXRfdGhyZWFkX3BpZChpZCwgMCk7CisJX19jbGVhcl9iaXQoaWQsIHNsb3dfd29ya19pZHMpOworCXNwaW5fdW5sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOworCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNsb3dfd29ya190aHJlYWRfY291bnQpKQogCQljb21wbGV0ZV9hbmRfZXhpdCgmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCwgMCk7CiAJcmV0dXJuIDA7CkBAIC00MjcsMjEgKzc4OCw2IEBACiB9CiAKIC8qCi0gKiBHZXQgYSByZWZlcmVuY2Ugb24gc2xvdyB3b3JrIHRocmVhZCBzdGFydGVyCi0gKi8KLXN0YXRpYyBpbnQgc2xvd193b3JrX25ld190aHJlYWRfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQotewotCXJldHVybiAwOwotfQotCi0vKgotICogRHJvcCBhIHJlZmVyZW5jZSBvbiBzbG93IHdvcmsgdGhyZWFkIHN0YXJ0ZXIKLSAqLwotc3RhdGljIHZvaWQgc2xvd193b3JrX25ld190aHJlYWRfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQotewotfQotCi0vKgogICogU3RhcnQgYSBuZXcgc2xvdyB3b3JrIHRocmVhZAogICovCiBzdGF0aWMgdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCkBAIC00NzUsOSArODIxLDExIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBzbG93X3dvcmtfbmV3X3RocmVhZF9vcHMgPSB7Ci0JLmdldF9yZWYJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9nZXRfcmVmLAotCS5wdXRfcmVmCT0gc2xvd193b3JrX25ld190aHJlYWRfcHV0X3JlZiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmV4ZWN1dGUJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlLAorI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKKwkuZGVzYwkJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9kZXNjLAorI2VuZGlmCiB9OwogCiAvKgpAQCAtNTQ2LDEyICs4OTQsMTMgQEAKIAogLyoqCiAgKiBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlciAtIFJlZ2lzdGVyIGEgdXNlciBvZiB0aGUgZmFjaWxpdHkKKyAqIEBtb2R1bGU6IFRoZSBtb2R1bGUgYWJvdXQgdG8gbWFrZSB1c2Ugb2YgdGhlIGZhY2lsaXR5CiAgKgogICogUmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eSwgc3RhcnRpbmcgdXAgdGhlIGluaXRpYWwgdGhyZWFkcyBpZiB0aGVyZQogICogYXJlbid0IGFueSBvdGhlciB1c2VycyBhdCB0aGlzIHBvaW50LiAgVGhpcyB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yCiAgKiBhbiBlcnJvciBpZiBub3QuCiAgKi8KLWludCBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcih2b2lkKQoraW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJaW50IGxvb3A7CkBAIC01OTgsMTQgKzk0Nyw4MSBAQAogfQogRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcik7CiAKKy8qCisgKiB3YWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgaXRlbXMgZnJvbSB0aGUgY2FsbGluZyBtb2R1bGUgdG8gY29tcGxldGUKKyAqIC0gbm90ZSB0aGF0IG1vcmUgaXRlbXMgbWF5IGJlIHF1ZXVlZCB3aGlsc3Qgd2UncmUgd2FpdGluZworICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfd2FpdF9mb3JfaXRlbXMoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQoreworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJREVDTEFSRV9XQUlUUVVFVUUobXlzZWxmLCBjdXJyZW50KTsKKwlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrOworCWludCBsb29wOworCisJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VucmVnX3N5bmNfbG9jayk7CisJYWRkX3dhaXRfcXVldWUoJnNsb3dfd29ya191bnJlZ193cSwgJm15c2VsZik7CisKKwlmb3IgKDs7KSB7CisJCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKworCQkvKiBmaXJzdCBvZiBhbGwsIHdlIHdhaXQgZm9yIHRoZSBsYXN0IHF1ZXVlZCBpdGVtIGluIGVhY2ggbGlzdAorCQkgKiB0byBiZSBwcm9jZXNzZWQgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHdvcmssICZ2c2xvd193b3JrX3F1ZXVlLCBsaW5rKSB7CisJCQlpZiAod29yay0+b3duZXIgPT0gbW9kdWxlKSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJCXNsb3dfd29ya191bnJlZ193b3JrX2l0ZW0gPSB3b3JrOworCQkJCWdvdG8gZG9fd2FpdDsKKwkJCX0KKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uod29yaywgJnNsb3dfd29ya19xdWV1ZSwgbGluaykgeworCQkJaWYgKHdvcmstPm93bmVyID09IG1vZHVsZSkgeworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCQlzbG93X3dvcmtfdW5yZWdfd29ya19pdGVtID0gd29yazsKKwkJCQlnb3RvIGRvX3dhaXQ7CisJCQl9CisJCX0KKworCQkvKiB0aGVuIHdlIHdhaXQgZm9yIHRoZSBpdGVtcyBiZWluZyBwcm9jZXNzZWQgdG8gZmluaXNoICovCisJCXNsb3dfd29ya191bnJlZ19tb2R1bGUgPSBtb2R1bGU7CisJCXNtcF9tYigpOworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgU0xPV19XT1JLX1RIUkVBRF9MSU1JVDsgbG9vcCsrKSB7CisJCQlpZiAoc2xvd193b3JrX3RocmVhZF9wcm9jZXNzaW5nW2xvb3BdID09IG1vZHVsZSkKKwkJCQlnb3RvIGRvX3dhaXQ7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJCWJyZWFrOyAvKiBva2F5LCB3ZSdyZSBkb25lICovCisKKwlkb193YWl0OgorCQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwkJc2NoZWR1bGUoKTsKKwkJc2xvd193b3JrX3VucmVnX3dvcmtfaXRlbSA9IE5VTEw7CisJCXNsb3dfd29ya191bnJlZ19tb2R1bGUgPSBOVUxMOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCZzbG93X3dvcmtfdW5yZWdfd3EsICZteXNlbGYpOworCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VucmVnX3N5bmNfbG9jayk7CisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KK30KKwogLyoqCiAgKiBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyIC0gVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5CisgKiBAbW9kdWxlOiBUaGUgbW9kdWxlIHdob3NlIGl0ZW1zIHNob3VsZCBiZSBjbGVhcmVkCiAgKgogICogVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5LCBraWxsaW5nIGFsbCB0aGUgdGhyZWFkcyBpZiB0aGlzIHdhcyB0aGUKICAqIGxhc3Qgb25lLgorICoKKyAqIFRoaXMgd2FpdHMgZm9yIGFsbCB0aGUgd29yayBpdGVtcyBiZWxvbmdpbmcgdG8gdGhlIG5vbWluYXRlZCBtb2R1bGUgdG8gZ28KKyAqIGF3YXkgYmVmb3JlIHByb2NlZWRpbmcuCiAgKi8KLXZvaWQgc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcih2b2lkKQordm9pZCBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKIHsKKwkvKiBmaXJzdCBvZiBhbGwsIHdhaXQgZm9yIGFsbCBvdXRzdGFuZGluZyBpdGVtcyBmcm9tIHRoZSBjYWxsaW5nIG1vZHVsZQorCSAqIHRvIGNvbXBsZXRlICovCisJaWYgKG1vZHVsZSkKKwkJc2xvd193b3JrX3dhaXRfZm9yX2l0ZW1zKG1vZHVsZSk7CisKKwkvKiB0aGVuIHdlIGNhbiBhY3R1YWxseSBnbyBhYm91dCBzaHV0dGluZyBkb3duIHRoZSBmYWNpbGl0eSBpZiBuZWVkCisJICogYmUgKi8KIAltdXRleF9sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKIAogCUJVR19PTihzbG93X3dvcmtfdXNlcl9jb3VudCA8PSAwKTsKQEAgLTYzOSw2ICsxMDU1LDE2IEBACiAJaWYgKHNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPCBucl9jcHVzICogMikKIAkJc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IG5yX2NwdXMgKiAyOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRworCXsKKwkJc3RydWN0IGRlbnRyeSAqZGJkaXI7CisKKwkJZGJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNsb3dfd29yayIsIE5VTEwpOworCQlpZiAoZGJkaXIgJiYgIUlTX0VSUihkYmRpcikpCisJCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJydW5xdWV1ZSIsIFNfSUZSRUcgfCAwNDAwLCBkYmRpciwKKwkJCQkJICAgIE5VTEwsICZzbG93X3dvcmtfcnVucXVldWVfZm9wcyk7CisJfQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbG93LXdvcmsuaCBiL2tlcm5lbC9zbG93LXdvcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFmM2M1Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3Nsb3ctd29yay5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIFNsb3cgd29yayBwcml2YXRlIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgU0xPV19XT1JLX0NVTExfVElNRU9VVCAoNSAqIEhaKQkvKiBjdWxsIHRocmVhZHMgNXMgYWZ0ZXIgcnVubmluZyBvdXQgb2YKKwkJCQkJICogdGhpbmdzIHRvIGRvICovCisjZGVmaW5lIFNMT1dfV09SS19PT01fVElNRU9VVCAoNSAqIEhaKQkvKiBjYW4ndCBzdGFydCBuZXcgdGhyZWFkcyBmb3IgNXMgYWZ0ZXIKKwkJCQkJICogT09NICovCisKKyNkZWZpbmUgU0xPV19XT1JLX1RIUkVBRF9MSU1JVAkyNTUJLyogYWJzIG1heGltdW0gbnVtYmVyIG9mIHNsb3ctd29yayB0aHJlYWRzICovCisKKy8qCisgKiBzbG93LXdvcmsuYworICovCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRworZXh0ZXJuIHN0cnVjdCBzbG93X3dvcmsgKnNsb3dfd29ya19leGVjc1tdOworZXh0ZXJuIHBpZF90IHNsb3dfd29ya19waWRzW107CitleHRlcm4gcndsb2NrX3Qgc2xvd193b3JrX2V4ZWNzX2xvY2s7CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc2xvd193b3JrX3F1ZXVlOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdnNsb3dfd29ya19xdWV1ZTsKK2V4dGVybiBzcGlubG9ja190IHNsb3dfd29ya19xdWV1ZV9sb2NrOworCisvKgorICogc2xvdy13b3JrLWRlYnVnZnMuYworICovCisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2xvd193b3JrX3J1bnF1ZXVlX2ZvcHM7CisKK2V4dGVybiB2b2lkIHNsb3dfd29ya19uZXdfdGhyZWFkX2Rlc2Moc3RydWN0IHNsb3dfd29yayAqLCBzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisjZW5kaWYKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19zZXRfdGhyZWFkX3BpZChpbnQgaWQsIHBpZF90IHBpZCkKK3sKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX1BST0MKKwlzbG93X3dvcmtfcGlkc1tpZF0gPSBwaWQ7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19tYXJrX3RpbWUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLX1BST0MKKwl3b3JrLT5tYXJrID0gQ1VSUkVOVF9USU1FOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbG93X3dvcmtfYmVnaW5fZXhlYyhpbnQgaWQsIHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19QUk9DCisJc2xvd193b3JrX2V4ZWNzW2lkXSA9IHdvcms7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19lbmRfZXhlYyhpbnQgaWQsIHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisjaWZkZWYgQ09ORklHX1NMT1dfV09SS19QUk9DCisJd3JpdGVfbG9jaygmc2xvd193b3JrX2V4ZWNzX2xvY2spOworCXNsb3dfd29ya19leGVjc1tpZF0gPSBOVUxMOworCXdyaXRlX3VubG9jaygmc2xvd193b3JrX2V4ZWNzX2xvY2spOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc21wLmMgYi9rZXJuZWwvc21wLmMKaW5kZXggYzlkMWM3OC4uYThjNzYwNiAxMDA2NDQKLS0tIGEva2VybmVsL3NtcC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtMjY1LDkgKzI2NSw3IEBACiAgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCiAgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCiAgKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4gTm90ZSB0aGF0IEB3YWl0Ci0gKiB3aWxsIGJlIGltcGxpY2l0bHkgdHVybmVkIG9uIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlcywgc2luY2UKLSAqIHdlIGZhbGwgYmFjayB0byBvbi1zdGFjayBhbGxvY2F0aW9uLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4KICAqLwogaW50IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1LCB2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAogCQkJICAgICBpbnQgd2FpdCkKQEAgLTMyMSw2ICszMTksNTEgQEAKIH0KIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKIAorLyoKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uX2FueSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGFueSBvZiB0aGUgZ2l2ZW4gY3B1cworICogQG1hc2s6IFRoZSBtYXNrIG9mIGNwdXMgaXQgY2FuIHJ1biBvbi4KKyAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgorICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgorICogQHdhaXQ6IElmIHRydWUsIHdhaXQgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlIChpZiBubyBjcHVzIHdlcmUgb25saW5lKS4KKyAqIE5vdGUgdGhhdCBAd2FpdCB3aWxsIGJlIGltcGxpY2l0bHkgdHVybmVkIG9uIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlcywKKyAqIHNpbmNlIHdlIGZhbGwgYmFjayB0byBvbi1zdGFjayBhbGxvY2F0aW9uLgorICoKKyAqIFNlbGVjdGlvbiBwcmVmZXJlbmNlOgorICoJMSkgY3VycmVudCBjcHUgaWYgaW4gQG1hc2sKKyAqCTIpIGFueSBjcHUgb2YgY3VycmVudCBub2RlIGlmIGluIEBtYXNrCisgKgkzKSBhbnkgb3RoZXIgb25saW5lIGNwdSBpbiBAbWFzaworICovCitpbnQgc21wX2NhbGxfZnVuY3Rpb25fYW55KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkJICB2b2lkICgqZnVuYykodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCB3YWl0KQoreworCXVuc2lnbmVkIGludCBjcHU7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrOworCWludCByZXQ7CisKKwkvKiBUcnkgZm9yIHNhbWUgQ1BVIChjaGVhcGVzdCkgKi8KKwljcHUgPSBnZXRfY3B1KCk7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtYXNrKSkKKwkJZ290byBjYWxsOworCisJLyogVHJ5IGZvciBzYW1lIG5vZGUuICovCisJbm9kZW1hc2sgPSBjcHVtYXNrX29mX25vZGUoY3B1KTsKKwlmb3IgKGNwdSA9IGNwdW1hc2tfZmlyc3RfYW5kKG5vZGVtYXNrLCBtYXNrKTsgY3B1IDwgbnJfY3B1X2lkczsKKwkgICAgIGNwdSA9IGNwdW1hc2tfbmV4dF9hbmQoY3B1LCBub2RlbWFzaywgbWFzaykpIHsKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCWdvdG8gY2FsbDsKKwl9CisKKwkvKiBBbnkgb25saW5lIHdpbGwgZG86IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSBoYW5kbGVzIG5yX2NwdV9pZHMuICovCisJY3B1ID0gY3B1bWFza19hbnlfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CitjYWxsOgorCXJldCA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGZ1bmMsIGluZm8sIHdhaXQpOworCXB1dF9jcHUoKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc21wX2NhbGxfZnVuY3Rpb25fYW55KTsKKwogLyoqCiAgKiBfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpOiBSdW4gYSBmdW5jdGlvbiBvbiBhbm90aGVyIENQVQogICogQGNwdTogVGhlIENQVSB0byBydW4gb24uCkBAIC0zNTUsOSArMzk4LDcgQEAKICAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkCiAgKiAgICAgICAgb24gb3RoZXIgQ1BVcy4KICAqCi0gKiBJZiBAd2FpdCBpcyB0cnVlLCB0aGVuIHJldHVybnMgb25jZSBAZnVuYyBoYXMgcmV0dXJuZWQuIE5vdGUgdGhhdCBAd2FpdAotICogd2lsbCBiZSBpbXBsaWNpdGx5IHR1cm5lZCBvbiBpbiBjYXNlIG9mIGFsbG9jYXRpb24gZmFpbHVyZXMsIHNpbmNlCi0gKiB3ZSBmYWxsIGJhY2sgdG8gb24tc3RhY2sgYWxsb2NhdGlvbi4KKyAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZC4KICAqCiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLiBQcmVlbXB0aW9uCkBAIC00NDMsOCArNDg0LDcgQEAKICAqIFJldHVybnMgMC4KICAqCiAgKiBJZiBAd2FpdCBpcyB0cnVlLCB0aGVuIHJldHVybnMgb25jZSBAZnVuYyBoYXMgcmV0dXJuZWQ7IG90aGVyd2lzZQotICogaXQgcmV0dXJucyBqdXN0IGJlZm9yZSB0aGUgdGFyZ2V0IGNwdSBjYWxscyBAZnVuYy4gSW4gY2FzZSBvZiBhbGxvY2F0aW9uCi0gKiBmYWlsdXJlLCBAd2FpdCB3aWxsIGJlIGltcGxpY2l0bHkgdHVybmVkIG9uLgorICogaXQgcmV0dXJucyBqdXN0IGJlZm9yZSB0aGUgdGFyZ2V0IGNwdSBjYWxscyBAZnVuYy4KICAqCiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggZjg3NDllNS4uMjE5MzlkOSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0zMDIsOSArMzAyLDkgQEAKIAlpZiAoIWluX2ludGVycnVwdCgpICYmIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKQogCQlpbnZva2Vfc29mdGlycSgpOwogCisJcmN1X2lycV9leGl0KCk7CiAjaWZkZWYgQ09ORklHX05PX0haCiAJLyogTWFrZSBzdXJlIHRoYXQgdGltZXIgd2hlZWwgdXBkYXRlcyBhcmUgcHJvcGFnYXRlZCAqLwotCXJjdV9pcnFfZXhpdCgpOwogCWlmIChpZGxlX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpICYmICFpbl9pbnRlcnJ1cHQoKSAmJiAhbmVlZF9yZXNjaGVkKCkpCiAJCXRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soMCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zcGlubG9jay5jIGIva2VybmVsL3NwaW5sb2NrLmMKaW5kZXggNWRkYWI3My4uNDFlMDQyMiAxMDA2NDQKLS0tIGEva2VybmVsL3NwaW5sb2NrLmMKKysrIGIva2VybmVsL3NwaW5sb2NrLmMKQEAgLTIxLDE0NSArMjEsMjggQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jaWZuZGVmIF9zcGluX3RyeWxvY2sKLWludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19zcGluX3RyeWxvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9zcGluX3RyeWxvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgX3JlYWRfdHJ5bG9jawotaW50IF9fbG9ja2Z1bmMgX3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlyZXR1cm4gX19yZWFkX3RyeWxvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX3RyeWxvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgX3dyaXRlX3RyeWxvY2sKLWludCBfX2xvY2tmdW5jIF93cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQotewotCXJldHVybiBfX3dyaXRlX3RyeWxvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF93cml0ZV90cnlsb2NrKTsKLSNlbmRpZgotCiAvKgogICogSWYgbG9ja2RlcCBpcyBlbmFibGVkIHRoZW4gd2UgdXNlIHRoZSBub24tcHJlZW1wdGlvbiBzcGluLW9wcwogICogZXZlbiBvbiBDT05GSUdfUFJFRU1QVCwgYmVjYXVzZSBsb2NrZGVwIGFzc3VtZXMgdGhhdCBpbnRlcnJ1cHRzIGFyZQogICogbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZSAod2hpY2ggdGhlIHByZWVtcHQtc3Bpbi1vcHMgZG8pOgogICovCiAjaWYgIWRlZmluZWQoQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKQotCi0jaWZuZGVmIF9yZWFkX2xvY2sKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQotewotCV9fcmVhZF9sb2NrKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfcmVhZF9sb2NrKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9zcGluX2xvY2tfaXJxc2F2ZQotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxc2F2ZShzcGlubG9ja190ICpsb2NrKQotewotCXJldHVybiBfX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmUpOwotI2VuZGlmCi0KLSNpZm5kZWYgX3NwaW5fbG9ja19pcnEKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQotewotCV9fc3Bpbl9sb2NrX2lycShsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19pcnEpOwotI2VuZGlmCi0KLSNpZm5kZWYgX3NwaW5fbG9ja19iaAotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKLXsKLQlfX3NwaW5fbG9ja19iaChsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19iaCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBfcmVhZF9sb2NrX2lycXNhdmUKLXVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fcmVhZF9sb2NrX2lycXNhdmUobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfaXJxc2F2ZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBfcmVhZF9sb2NrX2lycQotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQotewotCV9fcmVhZF9sb2NrX2lycShsb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnEpOwotI2VuZGlmCi0KLSNpZm5kZWYgX3JlYWRfbG9ja19iaAotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCi17Ci0JX19yZWFkX2xvY2tfYmgobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfYmgpOwotI2VuZGlmCi0KLSNpZm5kZWYgX3dyaXRlX2xvY2tfaXJxc2F2ZQotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi17Ci0JcmV0dXJuIF9fd3JpdGVfbG9ja19pcnFzYXZlKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19pcnFzYXZlKTsKLSNlbmRpZgotCi0jaWZuZGVmIF93cml0ZV9sb2NrX2lycQotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX2xvY2tfaXJxKGxvY2spOwotfQotRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19pcnEpOwotI2VuZGlmCi0KLSNpZm5kZWYgX3dyaXRlX2xvY2tfYmgKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19iaChyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX2xvY2tfYmgobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrX2JoKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9zcGluX2xvY2sKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JX19zcGluX2xvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9zcGluX2xvY2spOwotI2VuZGlmCi0KLSNpZm5kZWYgX3dyaXRlX2xvY2sKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKLXsKLQlfX3dyaXRlX2xvY2sobG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrKTsKLSNlbmRpZgotCi0jZWxzZSAvKiBDT05GSUdfUFJFRU1QVDogKi8KLQogLyoKKyAqIFRoZSBfX2xvY2tfZnVuY3Rpb24gaW5saW5lcyBhcmUgdGFrZW4gZnJvbQorICogaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKKyAqLworI2Vsc2UKKy8qCisgKiBXZSBidWlsZCB0aGUgX19sb2NrX2Z1bmN0aW9uIGlubGluZXMgaGVyZS4gVGhleSBhcmUgdG9vIGxhcmdlIGZvcgorICogaW5saW5pbmcgYWxsIG92ZXIgdGhlIHBsYWNlLCBidXQgaGVyZSBpcyBvbmx5IG9uZSB1c2VyIHBlciBmdW5jdGlvbgorICogd2hpY2ggZW1iZWRkcyB0aGVtIGludG8gdGhlIGNhbGxpbmcgX2xvY2tfZnVuY3Rpb24gYmVsb3cuCisgKgogICogVGhpcyBjb3VsZCBiZSBhIGxvbmctaGVsZCBsb2NrLiBXZSBib3RoIHByZXBhcmUgdG8gc3BpbiBmb3IgYSBsb25nCiAgKiB0aW1lIChtYWtpbmcgX3RoaXNfIENQVSBwcmVlbXB0YWJsZSBpZiBwb3NzaWJsZSksIGFuZCB3ZSBhbHNvIHNpZ25hbAogICogdG93YXJkcyB0aGF0IG90aGVyIENQVSB0aGF0IGl0IHNob3VsZCBicmVhayB0aGUgbG9jayBBU0FQLgotICoKLSAqIChXZSBkbyB0aGlzIGluIGEgZnVuY3Rpb24gYmVjYXVzZSBpbmxpbmluZyBpdCB3b3VsZCBiZSBleGNlc3NpdmUuKQogICovCi0KICNkZWZpbmUgQlVJTERfTE9DS19PUFMob3AsIGxvY2t0eXBlKQkJCQkJXAotdm9pZCBfX2xvY2tmdW5jIF8jI29wIyNfbG9jayhsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAordm9pZCBfX2xvY2tmdW5jIF9fIyNvcCMjX2xvY2sobG9ja3R5cGUjI190ICpsb2NrKQkJCVwKIHsJCQkJCQkJCQlcCiAJZm9yICg7OykgewkJCQkJCQlcCiAJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXApAQCAtMTc1LDkgKzU4LDcgQEAKIAkobG9jayktPmJyZWFrX2xvY2sgPSAwOwkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1FWFBPUlRfU1lNQk9MKF8jI29wIyNfbG9jayk7CQkJCQkJXAotCQkJCQkJCQkJXAotdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF8jI29wIyNfbG9ja19pcnFzYXZlKGxvY2t0eXBlIyNfdCAqbG9jaykJXAordW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9fIyNvcCMjX2xvY2tfaXJxc2F2ZShsb2NrdHlwZSMjX3QgKmxvY2spCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0xOTgsMTYgKzc5LDEyIEBACiAJcmV0dXJuIGZsYWdzOwkJCQkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotRVhQT1JUX1NZTUJPTChfIyNvcCMjX2xvY2tfaXJxc2F2ZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi12b2lkIF9fbG9ja2Z1bmMgXyMjb3AjI19sb2NrX2lycShsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAordm9pZCBfX2xvY2tmdW5jIF9fIyNvcCMjX2xvY2tfaXJxKGxvY2t0eXBlIyNfdCAqbG9jaykJCQlcCiB7CQkJCQkJCQkJXAogCV8jI29wIyNfbG9ja19pcnFzYXZlKGxvY2spOwkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLUVYUE9SVF9TWU1CT0woXyMjb3AjI19sb2NrX2lycSk7CQkJCQlcCi0JCQkJCQkJCQlcCi12b2lkIF9fbG9ja2Z1bmMgXyMjb3AjI19sb2NrX2JoKGxvY2t0eXBlIyNfdCAqbG9jaykJCQlcCit2b2lkIF9fbG9ja2Z1bmMgX18jI29wIyNfbG9ja19iaChsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAogewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTIyMCwyMyArOTcsMjEgQEAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CQkJCQkJXAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCQkJCVwKIH0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1FWFBPUlRfU1lNQk9MKF8jI29wIyNfbG9ja19iaCkKIAogLyoKICAqIEJ1aWxkIHByZWVtcHRpb24tZnJpZW5kbHkgdmVyc2lvbnMgb2YgdGhlIGZvbGxvd2luZwogICogbG9jay1zcGlubmluZyBmdW5jdGlvbnM6CiAgKgotICogICAgICAgICBfW3NwaW58cmVhZHx3cml0ZV1fbG9jaygpCi0gKiAgICAgICAgIF9bc3BpbnxyZWFkfHdyaXRlXV9sb2NrX2lycSgpCi0gKiAgICAgICAgIF9bc3BpbnxyZWFkfHdyaXRlXV9sb2NrX2lycXNhdmUoKQotICogICAgICAgICBfW3NwaW58cmVhZHx3cml0ZV1fbG9ja19iaCgpCisgKiAgICAgICAgIF9fW3NwaW58cmVhZHx3cml0ZV1fbG9jaygpCisgKiAgICAgICAgIF9fW3NwaW58cmVhZHx3cml0ZV1fbG9ja19pcnEoKQorICogICAgICAgICBfX1tzcGlufHJlYWR8d3JpdGVdX2xvY2tfaXJxc2F2ZSgpCisgKiAgICAgICAgIF9fW3NwaW58cmVhZHx3cml0ZV1fbG9ja19iaCgpCiAgKi8KIEJVSUxEX0xPQ0tfT1BTKHNwaW4sIHNwaW5sb2NrKTsKIEJVSUxEX0xPQ0tfT1BTKHJlYWQsIHJ3bG9jayk7CiBCVUlMRF9MT0NLX09QUyh3cml0ZSwgcndsb2NrKTsKIAotI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAKQEAgLTI0OCw3ICsxMjMsOCBAQAogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX25lc3RlZCk7CiAKLXVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssCisJCQkJCQkgICBpbnQgc3ViY2xhc3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjcyLDcgKzE0OCwxMjcgQEAKIAogI2VuZGlmCiAKLSNpZm5kZWYgX3NwaW5fdW5sb2NrCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLCitpbnQgX19sb2NrZnVuYyBfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fc3Bpbl90cnlsb2NrKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfc3Bpbl90cnlsb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLCitpbnQgX19sb2NrZnVuYyBfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3JlYWRfdHJ5bG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3JlYWRfdHJ5bG9jayk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sKK2ludCBfX2xvY2tmdW5jIF93cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3dyaXRlX3RyeWxvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF93cml0ZV90cnlsb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLCit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3JlYWRfbG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3JlYWRfbG9jayk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fc3Bpbl9sb2NrX2lycXNhdmUobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxc2F2ZSk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQoreworCV9fc3Bpbl9sb2NrX2lycShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkgKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCit7CisJX19zcGluX2xvY2tfYmgobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfYmgpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRQordW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gX19yZWFkX2xvY2tfaXJxc2F2ZShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnFzYXZlKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCV9fcmVhZF9sb2NrX2lycShsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkgKK3ZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQoreworCV9fcmVhZF9sb2NrX2JoKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfcmVhZF9sb2NrX2JoKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFCit1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKK3sKKwlyZXR1cm4gX193cml0ZV9sb2NrX2lycXNhdmUobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrX2lycXNhdmUpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUQordm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3dyaXRlX2xvY2tfaXJxKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19pcnEpOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JICit2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJX193cml0ZV9sb2NrX2JoKGxvY2spOworfQorRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19iaCk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3NwaW5fbG9jayhsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3NwaW5fbG9jayk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sKK3ZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlfX3dyaXRlX2xvY2sobG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX3NwaW5fdW5sb2NrKGxvY2spOwpAQCAtMjgwLDcgKzI3Niw3IEBACiBFWFBPUlRfU1lNQk9MKF9zcGluX3VubG9jayk7CiAjZW5kaWYKIAotI2lmbmRlZiBfd3JpdGVfdW5sb2NrCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLCiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlfX3dyaXRlX3VubG9jayhsb2NrKTsKQEAgLTI4OCw3ICsyODQsNyBAQAogRVhQT1JUX1NZTUJPTChfd3JpdGVfdW5sb2NrKTsKICNlbmRpZgogCi0jaWZuZGVmIF9yZWFkX3VubG9jaworI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrKHJ3bG9ja190ICpsb2NrKQogewogCV9fcmVhZF91bmxvY2sobG9jayk7CkBAIC0yOTYsNyArMjkyLDcgQEAKIEVYUE9SVF9TWU1CT0woX3JlYWRfdW5sb2NrKTsKICNlbmRpZgogCi0jaWZuZGVmIF9zcGluX3VubG9ja19pcnFyZXN0b3JlCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRQogdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19pcnFyZXN0b3JlKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJX19zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKQEAgLTMwNCw3ICszMDAsNyBAQAogRVhQT1JUX1NZTUJPTChfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSk7CiAjZW5kaWYKIAotI2lmbmRlZiBfc3Bpbl91bmxvY2tfaXJxCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRCiB2b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQogewogCV9fc3Bpbl91bmxvY2tfaXJxKGxvY2spOwpAQCAtMzEyLDcgKzMwOCw3IEBACiBFWFBPUlRfU1lNQk9MKF9zcGluX3VubG9ja19pcnEpOwogI2VuZGlmCiAKLSNpZm5kZWYgX3NwaW5fdW5sb2NrX2JoCisjaWZuZGVmIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkgKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlfX3NwaW5fdW5sb2NrX2JoKGxvY2spOwpAQCAtMzIwLDcgKzMxNiw3IEBACiBFWFBPUlRfU1lNQk9MKF9zcGluX3VubG9ja19iaCk7CiAjZW5kaWYKIAotI2lmbmRlZiBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZQorI2lmbmRlZiBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUKIHZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwpAQCAtMzI4LDcgKzMyNCw3IEBACiBFWFBPUlRfU1lNQk9MKF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKTsKICNlbmRpZgogCi0jaWZuZGVmIF9yZWFkX3VubG9ja19pcnEKKyNpZm5kZWYgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEKIHZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQogewogCV9fcmVhZF91bmxvY2tfaXJxKGxvY2spOwpAQCAtMzM2LDcgKzMzMiw3IEBACiBFWFBPUlRfU1lNQk9MKF9yZWFkX3VubG9ja19pcnEpOwogI2VuZGlmCiAKLSNpZm5kZWYgX3JlYWRfdW5sb2NrX2JoCisjaWZuZGVmIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkgKIHZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCiB7CiAJX19yZWFkX3VubG9ja19iaChsb2NrKTsKQEAgLTM0NCw3ICszNDAsNyBAQAogRVhQT1JUX1NZTUJPTChfcmVhZF91bmxvY2tfYmgpOwogI2VuZGlmCiAKLSNpZm5kZWYgX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUKIHZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CkBAIC0zNTIsNyArMzQ4LDcgQEAKIEVYUE9SVF9TWU1CT0woX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKTsKICNlbmRpZgogCi0jaWZuZGVmIF93cml0ZV91bmxvY2tfaXJxCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUQogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQogewogCV9fd3JpdGVfdW5sb2NrX2lycShsb2NrKTsKQEAgLTM2MCw3ICszNTYsNyBAQAogRVhQT1JUX1NZTUJPTChfd3JpdGVfdW5sb2NrX2lycSk7CiAjZW5kaWYKIAotI2lmbmRlZiBfd3JpdGVfdW5sb2NrX2JoCisjaWZuZGVmIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JICiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKIHsKIAlfX3dyaXRlX3VubG9ja19iaChsb2NrKTsKQEAgLTM2OCw3ICszNjQsNyBAQAogRVhQT1JUX1NZTUJPTChfd3JpdGVfdW5sb2NrX2JoKTsKICNlbmRpZgogCi0jaWZuZGVmIF9zcGluX3RyeWxvY2tfYmgKKyNpZm5kZWYgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIGludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlyZXR1cm4gX19zcGluX3RyeWxvY2tfYmgobG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3JjdS5jIGIva2VybmVsL3NyY3UuYwppbmRleCBiMGFlZWFmLi44MThkN2Q5IDEwMDY0NAotLS0gYS9rZXJuZWwvc3JjdS5jCisrKyBiL2tlcm5lbC9zcmN1LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAlzcC0+cGVyX2NwdV9yZWYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5KTsKIAlyZXR1cm4gKHNwLT5wZXJfY3B1X3JlZiA/IDAgOiAtRU5PTUVNKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3QpOwogCiAvKgogICogc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHggLS0gcmV0dXJucyBhcHByb3hpbWF0ZSBudW1iZXIgb2YgcmVhZGVycwpAQCAtOTcsNiArOTgsNyBAQAogCWZyZWVfcGVyY3B1KHNwLT5wZXJfY3B1X3JlZik7CiAJc3AtPnBlcl9jcHVfcmVmID0gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNsZWFudXBfc3JjdV9zdHJ1Y3QpOwogCiAvKioKICAqIHNyY3VfcmVhZF9sb2NrIC0gcmVnaXN0ZXIgYSBuZXcgcmVhZGVyIGZvciBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCkBAIC0xMTgsNiArMTIwLDcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiBpZHg7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfbG9jayk7CiAKIC8qKgogICogc3JjdV9yZWFkX3VubG9jayAtIHVucmVnaXN0ZXIgYSBvbGQgcmVhZGVyIGZyb20gYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgpAQCAtMTM2LDIyICsxMzksMTIgQEAKIAlwZXJfY3B1X3B0cihzcC0+cGVyX2NwdV9yZWYsIHNtcF9wcm9jZXNzb3JfaWQoKSktPmNbaWR4XS0tOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfdW5sb2NrKTsKIAotLyoqCi0gKiBzeW5jaHJvbml6ZV9zcmN1IC0gd2FpdCBmb3IgcHJpb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwtc2VjdGlvbiBjb21wbGV0aW9uCi0gKiBAc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCi0gKgotICogRmxpcCB0aGUgY29tcGxldGVkIGNvdW50ZXIsIGFuZCB3YWl0IGZvciB0aGUgb2xkIGNvdW50IHRvIGRyYWluIHRvIHplcm8uCi0gKiBBcyB3aXRoIGNsYXNzaWMgUkNVLCB0aGUgdXBkYXRlciBtdXN0IHVzZSBzb21lIHNlcGFyYXRlIG1lYW5zIG9mCi0gKiBzeW5jaHJvbml6aW5nIGNvbmN1cnJlbnQgdXBkYXRlcy4gIENhbiBibG9jazsgbXVzdCBiZSBjYWxsZWQgZnJvbQotICogcHJvY2VzcyBjb250ZXh0LgotICoKLSAqIE5vdGUgdGhhdCBpdCBpcyBpbGxlZ2FsIHRvIGNhbGwgc3luY2hvcm5pemVfc3JjdSgpIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKLSAqIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb247IGRvaW5nIHNvIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgotICogSG93ZXZlciwgaXQgaXMgcGVyZmVjdGx5IGxlZ2FsIHRvIGNhbGwgc3luY2hyb25pemVfc3JjdSgpIG9uIG9uZQotICogc3JjdV9zdHJ1Y3QgZnJvbSBzb21lIG90aGVyIHNyY3Vfc3RydWN0J3MgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBzeW5jaHJvbml6ZV9zcmN1KCkgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkuCiAgKi8KLXZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQordm9pZCBfX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgdm9pZCAoKnN5bmNfZnVuYykodm9pZCkpCiB7CiAJaW50IGlkeDsKIApAQCAtMTczLDcgKzE2Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOyAgLyogRm9yY2UgbWVtb3J5IGJhcnJpZXIgb24gYWxsIENQVXMuICovCisJc3luY19mdW5jKCk7ICAvKiBGb3JjZSBtZW1vcnkgYmFycmllciBvbiBhbGwgQ1BVcy4gKi8KIAogCS8qCiAJICogVGhlIHByZWNlZGluZyBzeW5jaHJvbml6ZV9zY2hlZCgpIGVuc3VyZXMgdGhhdCBhbnkgQ1BVIHRoYXQKQEAgLTE5MCw3ICsxODMsNyBAQAogCWlkeCA9IHNwLT5jb21wbGV0ZWQgJiAweDE7CiAJc3AtPmNvbXBsZXRlZCsrOwogCi0Jc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEZvcmNlIG1lbW9yeSBiYXJyaWVyIG9uIGFsbCBDUFVzLiAqLworCXN5bmNfZnVuYygpOyAgLyogRm9yY2UgbWVtb3J5IGJhcnJpZXIgb24gYWxsIENQVXMuICovCiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQsIGJlY2F1c2Ugb2YgdGhlIHByZWNlZGluZyBzeW5jaHJvbml6ZV9zY2hlZCgpLApAQCAtMjAzLDcgKzE5Niw3IEBACiAJd2hpbGUgKHNyY3VfcmVhZGVyc19hY3RpdmVfaWR4KHNwLCBpZHgpKQogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CiAKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOyAgLyogRm9yY2UgbWVtb3J5IGJhcnJpZXIgb24gYWxsIENQVXMuICovCisJc3luY19mdW5jKCk7ICAvKiBGb3JjZSBtZW1vcnkgYmFycmllciBvbiBhbGwgQ1BVcy4gKi8KIAogCS8qCiAJICogVGhlIHByZWNlZGluZyBzeW5jaHJvbml6ZV9zY2hlZCgpIGZvcmNlcyBhbGwgc3JjdV9yZWFkX3VubG9jaygpCkBAIC0yMzcsNiArMjMwLDQ3IEBACiB9CiAKIC8qKgorICogc3luY2hyb25pemVfc3JjdSAtIHdhaXQgZm9yIHByaW9yIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsLXNlY3Rpb24gY29tcGxldGlvbgorICogQHNwOiBzcmN1X3N0cnVjdCB3aXRoIHdoaWNoIHRvIHN5bmNocm9uaXplLgorICoKKyAqIEZsaXAgdGhlIGNvbXBsZXRlZCBjb3VudGVyLCBhbmQgd2FpdCBmb3IgdGhlIG9sZCBjb3VudCB0byBkcmFpbiB0byB6ZXJvLgorICogQXMgd2l0aCBjbGFzc2ljIFJDVSwgdGhlIHVwZGF0ZXIgbXVzdCB1c2Ugc29tZSBzZXBhcmF0ZSBtZWFucyBvZgorICogc3luY2hyb25pemluZyBjb25jdXJyZW50IHVwZGF0ZXMuICBDYW4gYmxvY2s7IG11c3QgYmUgY2FsbGVkIGZyb20KKyAqIHByb2Nlc3MgY29udGV4dC4KKyAqCisgKiBOb3RlIHRoYXQgaXQgaXMgaWxsZWdhbCB0byBjYWxsIHN5bmNocm9uaXplX3NyY3UoKSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisgKiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uOyBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jay4KKyAqIEhvd2V2ZXIsIGl0IGlzIHBlcmZlY3RseSBsZWdhbCB0byBjYWxsIHN5bmNocm9uaXplX3NyY3UoKSBvbiBvbmUKKyAqIHNyY3Vfc3RydWN0IGZyb20gc29tZSBvdGhlciBzcmN1X3N0cnVjdCdzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCit2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlfX3N5bmNocm9uaXplX3NyY3Uoc3AsIHN5bmNocm9uaXplX3NjaGVkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpOworCisvKioKKyAqIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkIC0gbGlrZSBzeW5jaHJvbml6ZV9zcmN1LCBidXQgbGVzcyBwYXRpZW50CisgKiBAc3A6IHNyY3Vfc3RydWN0IHdpdGggd2hpY2ggdG8gc3luY2hyb25pemUuCisgKgorICogRmxpcCB0aGUgY29tcGxldGVkIGNvdW50ZXIsIGFuZCB3YWl0IGZvciB0aGUgb2xkIGNvdW50IHRvIGRyYWluIHRvIHplcm8uCisgKiBBcyB3aXRoIGNsYXNzaWMgUkNVLCB0aGUgdXBkYXRlciBtdXN0IHVzZSBzb21lIHNlcGFyYXRlIG1lYW5zIG9mCisgKiBzeW5jaHJvbml6aW5nIGNvbmN1cnJlbnQgdXBkYXRlcy4gIENhbiBibG9jazsgbXVzdCBiZSBjYWxsZWQgZnJvbQorICogcHJvY2VzcyBjb250ZXh0LgorICoKKyAqIE5vdGUgdGhhdCBpdCBpcyBpbGxlZ2FsIHRvIGNhbGwgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKQorICogZnJvbSB0aGUgY29ycmVzcG9uZGluZyBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uOyBkb2luZyBzbworICogd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suICBIb3dldmVyLCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwgdG8gY2FsbAorICogc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKSBvbiBvbmUgc3JjdV9zdHJ1Y3QgZnJvbSBzb21lIG90aGVyCisgKiBzcmN1X3N0cnVjdCdzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCit2b2lkIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJX19zeW5jaHJvbml6ZV9zcmN1KHNwLCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQpOworCisvKioKICAqIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQgLSByZXR1cm4gYmF0Y2hlcyBjb21wbGV0ZWQuCiAgKiBAc3A6IHNyY3Vfc3RydWN0IG9uIHdoaWNoIHRvIHJlcG9ydCBiYXRjaCBjb21wbGV0aW9uLgogICoKQEAgLTI0OCwxMCArMjgyLDQgQEAKIHsKIAlyZXR1cm4gc3AtPmNvbXBsZXRlZDsKIH0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF9sb2NrKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF91bmxvY2spOwotRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhdGNoZXNfY29tcGxldGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyNTU0NzVkLi45OTY4YzVmIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC05MTEsMTYgKzkxMSwxNSBAQAogCiB2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICp0bXMpCiB7Ci0Jc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwotCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKKwljcHV0aW1lX3QgdGd1dGltZSwgdGdzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQl0aHJlYWRfZ3JvdXBfY3B1dGltZShjdXJyZW50LCAmY3B1dGltZSk7CiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdGhyZWFkX2dyb3VwX3RpbWVzKGN1cnJlbnQsICZ0Z3V0aW1lLCAmdGdzdGltZSk7CiAJY3V0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jdXRpbWU7CiAJY3N0aW1lID0gY3VycmVudC0+c2lnbmFsLT5jc3RpbWU7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQl0bXMtPnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnV0aW1lKTsKLQl0bXMtPnRtc19zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lLnN0aW1lKTsKKwl0bXMtPnRtc191dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdCh0Z3V0aW1lKTsKKwl0bXMtPnRtc19zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdCh0Z3N0aW1lKTsKIAl0bXMtPnRtc19jdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3V0aW1lKTsKIAl0bXMtPnRtc19jc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3N0aW1lKTsKIH0KQEAgLTExMTAsNiArMTEwOSw4IEBACiAJZXJyID0gc2Vzc2lvbjsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoZXJyID4gMCkKKwkJcHJvY19zaWRfY29ubmVjdG9yKGdyb3VwX2xlYWRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTMzNiwxNiArMTMzNywxNCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7Ci0Jc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCWNwdXRpbWVfdCB0Z3V0aW1lLCB0Z3N0aW1lLCB1dGltZSwgc3RpbWU7CiAJdW5zaWduZWQgbG9uZyBtYXhyc3MgPSAwOwogCiAJbWVtc2V0KChjaGFyICopIHIsIDAsIHNpemVvZiAqcik7CiAJdXRpbWUgPSBzdGltZSA9IGNwdXRpbWVfemVybzsKIAogCWlmICh3aG8gPT0gUlVTQUdFX1RIUkVBRCkgewotCQl1dGltZSA9IHRhc2tfdXRpbWUoY3VycmVudCk7Ci0JCXN0aW1lID0gdGFza19zdGltZShjdXJyZW50KTsKKwkJdGFza190aW1lcyhjdXJyZW50LCAmdXRpbWUsICZzdGltZSk7CiAJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShwLCByKTsKIAkJbWF4cnNzID0gcC0+c2lnbmFsLT5tYXhyc3M7CiAJCWdvdG8gb3V0OwpAQCAtMTM3MSw5ICsxMzcwLDkgQEAKIAkJCQlicmVhazsKIAogCQljYXNlIFJVU0FHRV9TRUxGOgotCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOwotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgY3B1dGltZS51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF90aW1lcyhwLCAmdGd1dGltZSwgJnRnc3RpbWUpOworCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdGd1dGltZSk7CisJCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0Z3N0aW1lKTsKIAkJCXItPnJ1X252Y3N3ICs9IHAtPnNpZ25hbC0+bnZjc3c7CiAJCQlyLT5ydV9uaXZjc3cgKz0gcC0+c2lnbmFsLT5uaXZjc3c7CiAJCQlyLT5ydV9taW5mbHQgKz0gcC0+c2lnbmFsLT5taW5fZmx0OwpAQCAtMTU0NiwyNCArMTU0NSwzNyBAQAogCQkJaWYgKGFyZzQgfCBhcmc1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3dpdGNoIChhcmcyKSB7Ci0JCQljYXNlIDA6CisJCQljYXNlIFBSX01DRV9LSUxMX0NMRUFSOgogCQkJCWlmIChhcmczICE9IDApCiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfUFJPQ0VTUzsKIAkJCQlicmVhazsKLQkJCWNhc2UgMToKKwkJCWNhc2UgUFJfTUNFX0tJTExfU0VUOgogCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9QUk9DRVNTOwotCQkJCWlmIChhcmczICE9IDApCisJCQkJaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfRUFSTFkpCiAJCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9FQVJMWTsKLQkJCQllbHNlCisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9MQVRFKQogCQkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX0VBUkxZOworCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfREVGQVVMVCkKKwkJCQkJY3VycmVudC0+ZmxhZ3MgJj0KKwkJCQkJCX4oUEZfTUNFX0VBUkxZfFBGX01DRV9QUk9DRVNTKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCisJCWNhc2UgUFJfTUNFX0tJTExfR0VUOgorCQkJaWYgKGFyZzIgfCBhcmczIHwgYXJnNCB8IGFyZzUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfUFJPQ0VTUykKKwkJCQllcnJvciA9IChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9FQVJMWSkgPworCQkJCQlQUl9NQ0VfS0lMTF9FQVJMWSA6IFBSX01DRV9LSUxMX0xBVEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBQUl9NQ0VfS0lMTF9ERUZBVUxUOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCAwZDk0OWM1Li40ZGJmOTNhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgpAQCAtMTU4LDYgKzE1OSw4IEBACiBleHRlcm4gaW50IHVuYWxpZ25lZF9kdW1wX3N0YWNrOwogI2VuZGlmCiAKK2V4dGVybiBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHByaW50a19yYXRlbGltaXRfc3RhdGU7CisKICNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwogZXh0ZXJuIGludCBtYXhfbG9ja19kZXB0aDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bF9jaGVjay5jIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCmluZGV4IGIzODQyM2MuLmI2ZTdhYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYworKysgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKQEAgLTE1MjEsNyArMTUyMSw3IEBACiAJCQlpZiAoIXRhYmxlLT5jdGxfbmFtZSAmJiB0YWJsZS0+c3RyYXRlZ3kpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiU3RyYXRlZ3kgd2l0aG91dCBjdGxfbmFtZSIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIAkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY19oYW5kbGVyIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDJlMmU0NjkuLjgwNDc5ODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtNjYyLDYgKzY2MiwzNiBAQAogI2VuZGlmCiB9CiAKKy8qKgorICogbnNlY3NfdG9famlmZmllcyAtIENvbnZlcnQgbnNlY3MgaW4gdTY0IHRvIGppZmZpZXMKKyAqCisgKiBAbjoJbnNlY3MgaW4gdTY0CisgKgorICogVW5saWtlIHttLHV9c2Vjc190b19qaWZmaWVzLCB0eXBlIG9mIGlucHV0IGlzIG5vdCB1bnNpZ25lZCBpbnQgYnV0IHU2NC4KKyAqIEFuZCB0aGlzIGRvZXNuJ3QgcmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZAorICogZm9yIHNjaGVkdWxlciwgbm90IGZvciB1c2UgaW4gZGV2aWNlIGRyaXZlcnMgdG8gY2FsY3VsYXRlIHRpbWVvdXQgdmFsdWUuCisgKgorICogbm90ZToKKyAqICAgTlNFQ19QRVJfU0VDID0gMTBeOSA9ICg1XjkgKiAyXjkpID0gKDE5NTMxMjUgKiA1MTIpCisgKiAgIFVMTE9OR19NQVggbnMgPSAxODQ0Njc0NDA3My43MDk1NTE2MTUgc2VjcyA9IGFib3V0IDU4NCB5ZWFycworICovCit1bnNpZ25lZCBsb25nIG5zZWNzX3RvX2ppZmZpZXModTY0IG4pCit7CisjaWYgKE5TRUNfUEVSX1NFQyAlIEhaKSA9PSAwCisJLyogQ29tbW9uIGNhc2UsIEhaID0gMTAwLCAxMjgsIDIwMCwgMjUwLCAyNTYsIDUwMCwgNTEyLCAxMDAwIGV0Yy4gKi8KKwlyZXR1cm4gZGl2X3U2NChuLCBOU0VDX1BFUl9TRUMgLyBIWik7CisjZWxpZiAoSFogJSA1MTIpID09IDAKKwkvKiBvdmVyZmxvdyBhZnRlciAyOTIgeWVhcnMgaWYgSFogPSAxMDI0ICovCisJcmV0dXJuIGRpdl91NjQobiAqIEhaIC8gNTEyLCBOU0VDX1BFUl9TRUMgLyA1MTIpOworI2Vsc2UKKwkvKgorCSAqIEdlbmVyaWMgY2FzZSAtIG9wdGltaXplZCBmb3IgY2FzZXMgd2hlcmUgSFogaXMgYSBtdWx0aXBsZSBvZiAzLgorCSAqIG92ZXJmbG93IGFmdGVyIDY0Ljk5IHllYXJzLCBleGFjdCBmb3IgSFogPSA2MCwgNzIsIDkwLCAxMjAgZXRjLgorCSAqLworCXJldHVybiBkaXZfdTY0KG4gKiA5LCAoOXVsbCAqIE5TRUNfUEVSX1NFQyArIEhaIC8gMikgLyBIWik7CisjZW5kaWYKK30KKwogI2lmIChCSVRTX1BFUl9MT05HIDwgNjQpCiB1NjQgZ2V0X2ppZmZpZXNfNjQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggYjQxNjUxMi4uZDAwNjU1NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTMzOSw2ICszMzksMjcgQEAKIAkgIHBvd2VyIG1hbmFnZW1lbnQgZGVjaXNpb25zLCBzcGVjaWZpY2FsbHkgdGhlIEMtc3RhdGUgYW5kIFAtc3RhdGUKIAkgIGJlaGF2aW9yLgogCitjb25maWcgS1NZTV9UUkFDRVIKKwlib29sICJUcmFjZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3Mgb24ga2VybmVsIG1lbW9yeSBsb2NhdGlvbnMiCisJZGVwZW5kcyBvbiBIQVZFX0hXX0JSRUFLUE9JTlQKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIFRoaXMgdHJhY2VyIGhlbHBzIGZpbmQgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvbiBhbnkgZ2l2ZW4ga2VybmVsCisJICBzeW1ib2wgaS5lLiAvcHJvYy9rYWxsc3ltcy4KKworY29uZmlnIFBST0ZJTEVfS1NZTV9UUkFDRVIKKwlib29sICJQcm9maWxlIGFsbCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIG9uICd3YXRjaGVkJyB2YXJpYWJsZXMiCisJZGVwZW5kcyBvbiBLU1lNX1RSQUNFUgorCWhlbHAKKwkgIFRoaXMgdHJhY2VyIHByb2ZpbGVzIGtlcm5lbCBhY2Nlc3NlcyBvbiB2YXJpYWJsZXMgd2F0Y2hlZCB0aHJvdWdoIHRoZQorCSAga3N5bSB0cmFjZXIgZnRyYWNlIHBsdWdpbi4gRGVwZW5kaW5nIHVwb24gdGhlIGhhcmR3YXJlLCBhbGwgcmVhZAorCSAgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24ga2VybmVsIHZhcmlhYmxlcyBjYW4gYmUgbW9uaXRvcmVkIGZvcgorCSAgYWNjZXNzZXMuCisKKwkgIFRoZSByZXN1bHRzIHdpbGwgYmUgZGlzcGxheWVkIGluOgorCSAgL2RlYnVnZnMvdHJhY2luZy9wcm9maWxlX2tzeW0KKworCSAgU2F5IE4gaWYgdW5zdXJlLgogCiBjb25maWcgU1RBQ0tfVFJBQ0VSCiAJYm9vbCAiVHJhY2UgbWF4IHN0YWNrIgpAQCAtNDI4LDYgKzQ0OSwyMyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgS1BST0JFX0VWRU5UCisJZGVwZW5kcyBvbiBLUFJPQkVTCisJZGVwZW5kcyBvbiBYODYKKwlib29sICJFbmFibGUga3Byb2Jlcy1iYXNlZCBkeW5hbWljIGV2ZW50cyIKKwlzZWxlY3QgVFJBQ0lORworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGFkZCB0cmFjaW5nIGV2ZW50cyAoc2ltaWxhciB0byB0cmFjZXBvaW50cykgb24gdGhlIGZseQorCSAgdmlhIHRoZSBmdHJhY2UgaW50ZXJmYWNlLiBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKwkgIGZvciBtb3JlIGRldGFpbHMuCisKKwkgIFRob3NlIGV2ZW50cyBjYW4gYmUgaW5zZXJ0ZWQgd2hlcmV2ZXIga3Byb2JlcyBjYW4gcHJvYmUsIGFuZCByZWNvcmQKKwkgIHZhcmlvdXMgcmVnaXN0ZXIgYW5kIG1lbW9yeSB2YWx1ZXMuCisKKwkgIFRoaXMgb3B0aW9uIGlzIGFsc28gcmVxdWlyZWQgYnkgcGVyZi1wcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYgdG9vbHMuIElmCisJICB5b3Ugd2FudCB0byB1c2UgcGVyZiB0b29scywgdGhpcyBvcHRpb24gaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuCisKIGNvbmZpZyBEWU5BTUlDX0ZUUkFDRQogCWJvb2wgImVuYWJsZS9kaXNhYmxlIGZ0cmFjZSB0cmFjZXBvaW50cyBkeW5hbWljYWxseSIKIAlkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IDI2ZjAzYWMuLmNkOWVjZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTUzLDYgKzUzLDggQEAKIG9iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpICs9IHRyYWNlX3N5c2NhbGxzLm8KIG9iai0kKENPTkZJR19FVkVOVF9QUk9GSUxFKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHNfZmlsdGVyLm8KK29iai0kKENPTkZJR19LUFJPQkVfRVZFTlQpICs9IHRyYWNlX2twcm9iZS5vCitvYmotJChDT05GSUdfS1NZTV9UUkFDRVIpICs9IHRyYWNlX2tzeW0ubwogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHBvd2VyLXRyYWNlcy5vCiAKIGxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMzdiYTY3ZS4uZTUxYTFiYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtNjAsNiArNjAsMTMgQEAKIC8qIFF1aWNrIGRpc2FibGluZyBvZiBmdW5jdGlvbiB0cmFjZXIuICovCiBpbnQgZnVuY3Rpb25fdHJhY2Vfc3RvcDsKIAorLyogTGlzdCBmb3Igc2V0X2Z0cmFjZV9waWQncyBwaWRzLiAqLworTElTVF9IRUFEKGZ0cmFjZV9waWRzKTsKK3N0cnVjdCBmdHJhY2VfcGlkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHBpZCAqcGlkOworfTsKKwogLyoKICAqIGZ0cmFjZV9kaXNhYmxlZCBpcyBzZXQgd2hlbiBhbiBhbm9tYWx5IGlzIGRpc2NvdmVyZWQuCiAgKiBmdHJhY2VfZGlzYWJsZWQgaXMgbXVjaCBzdHJvbmdlciB0aGFuIGZ0cmFjZV9lbmFibGVkLgpAQCAtNzgsNiArODUsMTAgQEAKIGZ0cmFjZV9mdW5jX3QgX19mdHJhY2VfdHJhY2VfZnVuY3Rpb24gX19yZWFkX21vc3RseSA9IGZ0cmFjZV9zdHViOwogZnRyYWNlX2Z1bmNfdCBmdHJhY2VfcGlkX2Z1bmN0aW9uIF9fcmVhZF9tb3N0bHkgPSBmdHJhY2Vfc3R1YjsKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKK3N0YXRpYyBpbnQgZnRyYWNlX3NldF9mdW5jKHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmlkeCwgY2hhciAqYnVmZmVyKTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBmdHJhY2VfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQogewogCXN0cnVjdCBmdHJhY2Vfb3BzICpvcCA9IGZ0cmFjZV9saXN0OwpAQCAtMTU1LDcgKzE2Niw3IEBACiAJCWVsc2UKIAkJCWZ1bmMgPSBmdHJhY2VfbGlzdF9mdW5jOwogCi0JCWlmIChmdHJhY2VfcGlkX3RyYWNlKSB7CisJCWlmICghbGlzdF9lbXB0eSgmZnRyYWNlX3BpZHMpKSB7CiAJCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKIAkJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7CiAJCX0KQEAgLTIwMyw3ICsyMTQsNyBAQAogCQlpZiAoZnRyYWNlX2xpc3QtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkgewogCQkJZnRyYWNlX2Z1bmNfdCBmdW5jID0gZnRyYWNlX2xpc3QtPmZ1bmM7CiAKLQkJCWlmIChmdHJhY2VfcGlkX3RyYWNlKSB7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmZ0cmFjZV9waWRzKSkgewogCQkJCXNldF9mdHJhY2VfcGlkX2Z1bmN0aW9uKGZ1bmMpOwogCQkJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7CiAJCQl9CkBAIC0yMzEsNyArMjQyLDcgQEAKIAlmdW5jID0gX19mdHJhY2VfdHJhY2VfZnVuY3Rpb247CiAjZW5kaWYKIAotCWlmIChmdHJhY2VfcGlkX3RyYWNlKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZmdHJhY2VfcGlkcykpIHsKIAkJc2V0X2Z0cmFjZV9waWRfZnVuY3Rpb24oZnVuYyk7CiAJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7CiAJfSBlbHNlIHsKQEAgLTc0MCw3ICs3NTEsNyBAQAogIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9wcm9maWxlX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC04MjEsOCArODMyLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fUFJPRklMRVIgKi8KIAotLyogc2V0IHdoZW4gdHJhY2luZyBvbmx5IGEgcGlkICovCi1zdHJ1Y3QgcGlkICpmdHJhY2VfcGlkX3RyYWNlOwogc3RhdGljIHN0cnVjdCBwaWQgKiBjb25zdCBmdHJhY2Vfc3dhcHBlcl9waWQgPSAmaW5pdF9zdHJ1Y3RfcGlkOwogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCkBAIC0xMjYxLDEyICsxMjcwLDM0IEBACiAJCWZ0cmFjZV9uZXdfYWRkcnMgPSBwLT5uZXdsaXN0OwogCQlwLT5mbGFncyA9IDBMOwogCi0JCS8qIGNvbnZlcnQgcmVjb3JkIChpLmUsIHBhdGNoIG1jb3VudC1jYWxsIHdpdGggTk9QKSAqLwotCQlpZiAoZnRyYWNlX2NvZGVfZGlzYWJsZShtb2QsIHApKSB7Ci0JCQlwLT5mbGFncyB8PSBGVFJBQ0VfRkxfQ09OVkVSVEVEOwotCQkJZnRyYWNlX3VwZGF0ZV9jbnQrKzsKLQkJfSBlbHNlCisJCS8qCisJCSAqIERvIHRoZSBpbml0aWFsIHJlY29yZCBjb252ZXJ0aW9uIGZyb20gbWNvdW50IGp1bXAKKwkJICogdG8gdGhlIE5PUCBpbnN0cnVjdGlvbnMuCisJCSAqLworCQlpZiAoIWZ0cmFjZV9jb2RlX2Rpc2FibGUobW9kLCBwKSkgewogCQkJZnRyYWNlX2ZyZWVfcmVjKHApOworCQkJY29udGludWU7CisJCX0KKworCQlwLT5mbGFncyB8PSBGVFJBQ0VfRkxfQ09OVkVSVEVEOworCQlmdHJhY2VfdXBkYXRlX2NudCsrOworCisJCS8qCisJCSAqIElmIHRoZSB0cmFjaW5nIGlzIGVuYWJsZWQsIGdvIGFoZWFkIGFuZCBlbmFibGUgdGhlIHJlY29yZC4KKwkJICoKKwkJICogVGhlIHJlYXNvbiBub3QgdG8gZW5hYmxlIHRoZSByZWNvcmQgaW1tZWRpYXRlbGx5IGlzIHRoZQorCQkgKiBpbmhlcmVudCBjaGVjayBvZiBmdHJhY2VfbWFrZV9ub3AvZnRyYWNlX21ha2VfY2FsbCBmb3IKKwkJICogY29ycmVjdCBwcmV2aW91cyBpbnN0cnVjdGlvbnMuICBNYWtpbmcgZmlyc3QgdGhlIE5PUAorCQkgKiBjb252ZXJzaW9uIHB1dHMgdGhlIG1vZHVsZSB0byB0aGUgY29ycmVjdCBzdGF0ZSwgdGh1cworCQkgKiBwYXNzaW5nIHRoZSBmdHJhY2VfbWFrZV9jYWxsIGNoZWNrLgorCQkgKi8KKwkJaWYgKGZ0cmFjZV9zdGFydF91cCkgeworCQkJaW50IGZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShwLCAxKTsKKwkJCWlmIChmYWlsZWQpIHsKKwkJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcC0+aXApOworCQkJCWZ0cmFjZV9mcmVlX3JlYyhwKTsKKwkJCX0KKwkJfQogCX0KIAogCXN0b3AgPSBmdHJhY2Vfbm93KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwpAQCAtMTY1Niw2MCArMTY4Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZW51bSB7Ci0JTUFUQ0hfRlVMTCwKLQlNQVRDSF9GUk9OVF9PTkxZLAotCU1BVENIX01JRERMRV9PTkxZLAotCU1BVENIX0VORF9PTkxZLAotfTsKLQotLyoKLSAqIChzdGF0aWMgZnVuY3Rpb24gLSBubyBuZWVkIGZvciBrZXJuZWwgZG9jKQotICoKLSAqIFBhc3MgaW4gYSBidWZmZXIgY29udGFpbmluZyBhIGdsb2IgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbAotICogc2V0IHNlYXJjaCB0byBwb2ludCB0byB0aGUgc2VhcmNoIHBhcnQgb2YgdGhlIGJ1ZmZlciBhbmQKLSAqIHJldHVybiB0aGUgdHlwZSBvZiBzZWFyY2ggaXQgaXMgKHNlZSBlbnVtIGFib3ZlKS4KLSAqIFRoaXMgZG9lcyBtb2RpZnkgYnVmZi4KLSAqCi0gKiBSZXR1cm5zIGVudW0gdHlwZS4KLSAqICBzZWFyY2ggcmV0dXJucyB0aGUgcG9pbnRlciB0byB1c2UgZm9yIGNvbXBhcmlzb24uCi0gKiAgbm90IHJldHVybnMgMSBpZiBidWZmIHN0YXJ0ZWQgd2l0aCBhICchJwotICogICAgIDAgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50Ci1mdHJhY2Vfc2V0dXBfZ2xvYihjaGFyICpidWZmLCBpbnQgbGVuLCBjaGFyICoqc2VhcmNoLCBpbnQgKm5vdCkKLXsKLQlpbnQgdHlwZSA9IE1BVENIX0ZVTEw7Ci0JaW50IGk7Ci0KLQlpZiAoYnVmZlswXSA9PSAnIScpIHsKLQkJKm5vdCA9IDE7Ci0JCWJ1ZmYrKzsKLQkJbGVuLS07Ci0JfSBlbHNlCi0JCSpub3QgPSAwOwotCi0JKnNlYXJjaCA9IGJ1ZmY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKGJ1ZmZbaV0gPT0gJyonKSB7Ci0JCQlpZiAoIWkpIHsKLQkJCQkqc2VhcmNoID0gYnVmZiArIDE7Ci0JCQkJdHlwZSA9IE1BVENIX0VORF9PTkxZOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAodHlwZSA9PSBNQVRDSF9FTkRfT05MWSkKLQkJCQkJdHlwZSA9IE1BVENIX01JRERMRV9PTkxZOwotCQkJCWVsc2UKLQkJCQkJdHlwZSA9IE1BVENIX0ZST05UX09OTFk7Ci0JCQkJYnVmZltpXSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLQogc3RhdGljIGludCBmdHJhY2VfbWF0Y2goY2hhciAqc3RyLCBjaGFyICpyZWdleCwgaW50IGxlbiwgaW50IHR5cGUpCiB7CiAJaW50IG1hdGNoZWQgPSAwOwpAQCAtMTc1OCw3ICsxNzM1LDcgQEAKIAlpbnQgbm90OwogCiAJZmxhZyA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKLQl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoYnVmZiwgbGVuLCAmc2VhcmNoLCAmbm90KTsKKwl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmYsIGxlbiwgJnNlYXJjaCwgJm5vdCk7CiAKIAlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CiAKQEAgLTE4MjYsNyArMTgwMyw3IEBACiAJfQogCiAJaWYgKHN0cmxlbihidWZmKSkgewotCQl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoYnVmZiwgc3RybGVuKGJ1ZmYpLCAmc2VhcmNoLCAmbm90KTsKKwkJdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChidWZmLCBzdHJsZW4oYnVmZiksICZzZWFyY2gsICZub3QpOwogCQlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CiAJfQogCkBAIC0xOTkxLDcgKzE5NjgsNyBAQAogCWludCBjb3VudCA9IDA7CiAJY2hhciAqc2VhcmNoOwogCi0JdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGdsb2IsIHN0cmxlbihnbG9iKSwgJnNlYXJjaCwgJm5vdCk7CisJdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChnbG9iLCBzdHJsZW4oZ2xvYiksICZzZWFyY2gsICZub3QpOwogCWxlbiA9IHN0cmxlbihzZWFyY2gpOwogCiAJLyogd2UgZG8gbm90IHN1cHBvcnQgJyEnIGZvciBmdW5jdGlvbiBwcm9iZXMgKi8KQEAgLTIwNjgsNyArMjA0NSw3IEBACiAJZWxzZSBpZiAoZ2xvYikgewogCQlpbnQgbm90OwogCi0JCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihnbG9iLCBzdHJsZW4oZ2xvYiksICZzZWFyY2gsICZub3QpOworCQl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGdsb2IsIHN0cmxlbihnbG9iKSwgJnNlYXJjaCwgJm5vdCk7CiAJCWxlbiA9IHN0cmxlbihzZWFyY2gpOwogCiAJCS8qIHdlIGRvIG5vdCBzdXBwb3J0ICchJyBmb3IgZnVuY3Rpb24gcHJvYmVzICovCkBAIC0yMjIyLDE1ICsyMTk5LDE1IEBACiAJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KHBhcnNlci0+YnVmZmVyLAogCQkJCQkgICBwYXJzZXItPmlkeCwgZW5hYmxlKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCiAJCXRyYWNlX3BhcnNlcl9jbGVhcihwYXJzZXIpOwogCX0KIAogCXJldCA9IHJlYWQ7Ci0KK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7Ci1vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzEyLDYgKzIyODksMzIgQEAKIH0KIF9fc2V0dXAoImZ0cmFjZV9maWx0ZXI9Iiwgc2V0X2Z0cmFjZV9maWx0ZXIpOwogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorc3RhdGljIGNoYXIgZnRyYWNlX2dyYXBoX2J1ZltGVFJBQ0VfRklMVEVSX1NJWkVdIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IF9faW5pdCBzZXRfZ3JhcGhfZnVuY3Rpb24oY2hhciAqc3RyKQoreworCXN0cmxjcHkoZnRyYWNlX2dyYXBoX2J1Ziwgc3RyLCBGVFJBQ0VfRklMVEVSX1NJWkUpOworCXJldHVybiAxOworfQorX19zZXR1cCgiZnRyYWNlX2dyYXBoX2ZpbHRlcj0iLCBzZXRfZ3JhcGhfZnVuY3Rpb24pOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2Z0cmFjZV9lYXJseV9ncmFwaChjaGFyICpidWYpCit7CisJaW50IHJldDsKKwljaGFyICpmdW5jOworCisJd2hpbGUgKGJ1ZikgeworCQlmdW5jID0gc3Ryc2VwKCZidWYsICIsIik7CisJCS8qIHdlIGFsbG93IG9ubHkgb25lIGV4cHJlc3Npb24gYXQgYSB0aW1lICovCisJCXJldCA9IGZ0cmFjZV9zZXRfZnVuYyhmdHJhY2VfZ3JhcGhfZnVuY3MsICZmdHJhY2VfZ3JhcGhfY291bnQsCisJCQkJICAgICAgZnVuYyk7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZnRyYWNlOiBmdW5jdGlvbiAlcyBub3QgIgorCQkJCQkgICJ0cmFjZWFibGVcbiIsIGZ1bmMpOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCisKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcihjaGFyICpidWYsIGludCBlbmFibGUpCiB7CiAJY2hhciAqZnVuYzsKQEAgLTIzMjgsNiArMjMzMSwxMCBAQAogCQlzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcihmdHJhY2VfZmlsdGVyX2J1ZiwgMSk7CiAJaWYgKGZ0cmFjZV9ub3RyYWNlX2J1ZlswXSkKIAkJc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoZnRyYWNlX25vdHJhY2VfYnVmLCAwKTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaWYgKGZ0cmFjZV9ncmFwaF9idWZbMF0pCisJCXNldF9mdHJhY2VfZWFybHlfZ3JhcGgoZnRyYWNlX2dyYXBoX2J1Zik7CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwogfQogCiBzdGF0aWMgaW50CkBAIC0yNTEzLDcgKzI1MjAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGRlY29kZSByZWdleCAqLwotCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihidWZmZXIsIHN0cmxlbihidWZmZXIpLCAmc2VhcmNoLCAmbm90KTsKKwl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksICZzZWFyY2gsICZub3QpOwogCWlmIChub3QpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yNjI0LDcgKzI2MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZ0cmFjZV9jb252ZXJ0X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kLAorc3RhdGljIGludCBmdHJhY2VfcHJvY2Vzc19sb2NzKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nICplbmQpCiB7CkBAIC0yNjg0LDcgKzI2OTEsNyBAQAogewogCWlmIChmdHJhY2VfZGlzYWJsZWQgfHwgc3RhcnQgPT0gZW5kKQogCQlyZXR1cm47Ci0JZnRyYWNlX2NvbnZlcnRfbm9wcyhtb2QsIHN0YXJ0LCBlbmQpOworCWZ0cmFjZV9wcm9jZXNzX2xvY3MobW9kLCBzdGFydCwgZW5kKTsKIH0KIAogc3RhdGljIGludCBmdHJhY2VfbW9kdWxlX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCkBAIC0yNzQ1LDcgKzI3NTIsNyBAQAogCiAJbGFzdF9mdHJhY2VfZW5hYmxlZCA9IGZ0cmFjZV9lbmFibGVkID0gMTsKIAotCXJldCA9IGZ0cmFjZV9jb252ZXJ0X25vcHMoTlVMTCwKKwlyZXQgPSBmdHJhY2VfcHJvY2Vzc19sb2NzKE5VTEwsCiAJCQkJICBfX3N0YXJ0X21jb3VudF9sb2MsCiAJCQkJICBfX3N0b3BfbWNvdW50X2xvYyk7CiAKQEAgLTI3NzgsMjMgKzI3ODUsNiBAQAogIyBkZWZpbmUgZnRyYWNlX3NodXRkb3duX3N5c2N0bCgpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAotc3RhdGljIHNzaXplX3QKLWZ0cmFjZV9waWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCi0JCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciBidWZbNjRdOwotCWludCByOwotCi0JaWYgKGZ0cmFjZV9waWRfdHJhY2UgPT0gZnRyYWNlX3N3YXBwZXJfcGlkKQotCQlyID0gc3ByaW50ZihidWYsICJzd2FwcGVyIHRhc2tzXG4iKTsKLQllbHNlIGlmIChmdHJhY2VfcGlkX3RyYWNlKQotCQlyID0gc3ByaW50ZihidWYsICIldVxuIiwgcGlkX3ZucihmdHJhY2VfcGlkX3RyYWNlKSk7Ci0JZWxzZQotCQlyID0gc3ByaW50ZihidWYsICJubyBwaWRcbiIpOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCByKTsKLX0KLQogc3RhdGljIHZvaWQgY2xlYXJfZnRyYWNlX3N3YXBwZXIodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC0yODQ1LDE0ICsyODM1LDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFyX2Z0cmFjZV9waWRfdGFzayhzdHJ1Y3QgcGlkICoqcGlkKQorc3RhdGljIHZvaWQgY2xlYXJfZnRyYWNlX3BpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCkKIHsKLQlpZiAoKnBpZCA9PSBmdHJhY2Vfc3dhcHBlcl9waWQpCisJaWYgKHBpZCA9PSBmdHJhY2Vfc3dhcHBlcl9waWQpCiAJCWNsZWFyX2Z0cmFjZV9zd2FwcGVyKCk7CiAJZWxzZQotCQljbGVhcl9mdHJhY2VfcGlkKCpwaWQpOwotCi0JKnBpZCA9IE5VTEw7CisJCWNsZWFyX2Z0cmFjZV9waWQocGlkKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2Z0cmFjZV9waWRfdGFzayhzdHJ1Y3QgcGlkICpwaWQpCkBAIC0yODYzLDEyICsyODUxLDE0MSBAQAogCQlzZXRfZnRyYWNlX3BpZChwaWQpOwogfQogCitzdGF0aWMgaW50IGZ0cmFjZV9waWRfYWRkKGludCBwKQoreworCXN0cnVjdCBwaWQgKnBpZDsKKwlzdHJ1Y3QgZnRyYWNlX3BpZCAqZnBpZDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmICghcCkKKwkJcGlkID0gZnRyYWNlX3N3YXBwZXJfcGlkOworCWVsc2UKKwkJcGlkID0gZmluZF9nZXRfcGlkKHApOworCisJaWYgKCFwaWQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZnBpZCwgJmZ0cmFjZV9waWRzLCBsaXN0KQorCQlpZiAoZnBpZC0+cGlkID09IHBpZCkKKwkJCWdvdG8gb3V0X3B1dDsKKworCXJldCA9IC1FTk9NRU07CisKKwlmcGlkID0ga21hbGxvYyhzaXplb2YoKmZwaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZwaWQpCisJCWdvdG8gb3V0X3B1dDsKKworCWxpc3RfYWRkKCZmcGlkLT5saXN0LCAmZnRyYWNlX3BpZHMpOworCWZwaWQtPnBpZCA9IHBpZDsKKworCXNldF9mdHJhY2VfcGlkX3Rhc2socGlkKTsKKworCWZ0cmFjZV91cGRhdGVfcGlkX2Z1bmMoKTsKKwlmdHJhY2Vfc3RhcnR1cF9lbmFibGUoMCk7CisKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwlyZXR1cm4gMDsKKworb3V0X3B1dDoKKwlpZiAocGlkICE9IGZ0cmFjZV9zd2FwcGVyX3BpZCkKKwkJcHV0X3BpZChwaWQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX3BpZF9yZXNldCh2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfcGlkICpmcGlkLCAqc2FmZTsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnBpZCwgc2FmZSwgJmZ0cmFjZV9waWRzLCBsaXN0KSB7CisJCXN0cnVjdCBwaWQgKnBpZCA9IGZwaWQtPnBpZDsKKworCQljbGVhcl9mdHJhY2VfcGlkX3Rhc2socGlkKTsKKworCQlsaXN0X2RlbCgmZnBpZC0+bGlzdCk7CisJCWtmcmVlKGZwaWQpOworCX0KKworCWZ0cmFjZV91cGRhdGVfcGlkX2Z1bmMoKTsKKwlmdHJhY2Vfc3RhcnR1cF9lbmFibGUoMCk7CisKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgKmZwaWRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eSgmZnRyYWNlX3BpZHMpICYmICghKnBvcykpCisJCXJldHVybiAodm9pZCAqKSAxOworCisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZmdHJhY2VfcGlkcywgKnBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICpmcGlkX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlpZiAodiA9PSAodm9pZCAqKTEpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmZ0cmFjZV9waWRzLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBmcGlkX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworfQorCitzdGF0aWMgaW50IGZwaWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJY29uc3Qgc3RydWN0IGZ0cmFjZV9waWQgKmZwaWQgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBmdHJhY2VfcGlkLCBsaXN0KTsKKworCWlmICh2ID09ICh2b2lkICopMSkgeworCQlzZXFfcHJpbnRmKG0sICJubyBwaWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZnBpZC0+cGlkID09IGZ0cmFjZV9zd2FwcGVyX3BpZCkKKwkJc2VxX3ByaW50ZihtLCAic3dhcHBlciB0YXNrc1xuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIldVxuIiwgcGlkX3ZucihmcGlkLT5waWQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZ0cmFjZV9waWRfc29wcyA9IHsKKwkuc3RhcnQgPSBmcGlkX3N0YXJ0LAorCS5uZXh0ID0gZnBpZF9uZXh0LAorCS5zdG9wID0gZnBpZF9zdG9wLAorCS5zaG93ID0gZnBpZF9zaG93LAorfTsKKworc3RhdGljIGludAorZnRyYWNlX3BpZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQgPSAwOworCisJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX1RSVU5DKSkKKwkJZnRyYWNlX3BpZF9yZXNldCgpOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCXJldCA9IHNlcV9vcGVuKGZpbGUsICZmdHJhY2VfcGlkX3NvcHMpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QKIGZ0cmFjZV9waWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHBpZCAqcGlkOwotCWNoYXIgYnVmWzY0XTsKKwljaGFyIGJ1Zls2NF0sICp0bXA7CiAJbG9uZyB2YWw7CiAJaW50IHJldDsKIApAQCAtMjg4MCw1NyArMjk5NywzOCBAQAogCiAJYnVmW2NudF0gPSAwOwogCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwkvKgorCSAqIEFsbG93ICJlY2hvID4gc2V0X2Z0cmFjZV9waWQiIG9yICJlY2hvIC1uICcnID4gc2V0X2Z0cmFjZV9waWQiCisJICogdG8gY2xlYW4gdGhlIGZpbHRlciBxdWlldGx5LgorCSAqLworCXRtcCA9IHN0cnN0cmlwKGJ1Zik7CisJaWYgKHN0cmxlbih0bXApID09IDApCisJCXJldHVybiAxOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbCh0bXAsIDEwLCAmdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKLQlpZiAodmFsIDwgMCkgewotCQkvKiBkaXNhYmxlIHBpZCB0cmFjaW5nICovCi0JCWlmICghZnRyYWNlX3BpZF90cmFjZSkKLQkJCWdvdG8gb3V0OworCXJldCA9IGZ0cmFjZV9waWRfYWRkKHZhbCk7CiAKLQkJY2xlYXJfZnRyYWNlX3BpZF90YXNrKCZmdHJhY2VfcGlkX3RyYWNlKTsKKwlyZXR1cm4gcmV0ID8gcmV0IDogY250OworfQogCi0JfSBlbHNlIHsKLQkJLyogc3dhcHBlciB0YXNrIGlzIHNwZWNpYWwgKi8KLQkJaWYgKCF2YWwpIHsKLQkJCXBpZCA9IGZ0cmFjZV9zd2FwcGVyX3BpZDsKLQkJCWlmIChwaWQgPT0gZnRyYWNlX3BpZF90cmFjZSkKLQkJCQlnb3RvIG91dDsKLQkJfSBlbHNlIHsKLQkJCXBpZCA9IGZpbmRfZ2V0X3BpZCh2YWwpOworc3RhdGljIGludAorZnRyYWNlX3BpZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorCQlzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiAKLQkJCWlmIChwaWQgPT0gZnRyYWNlX3BpZF90cmFjZSkgewotCQkJCXB1dF9waWQocGlkKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCi0JCWlmIChmdHJhY2VfcGlkX3RyYWNlKQotCQkJY2xlYXJfZnRyYWNlX3BpZF90YXNrKCZmdHJhY2VfcGlkX3RyYWNlKTsKLQotCQlpZiAoIXBpZCkKLQkJCWdvdG8gb3V0OwotCi0JCWZ0cmFjZV9waWRfdHJhY2UgPSBwaWQ7Ci0KLQkJc2V0X2Z0cmFjZV9waWRfdGFzayhmdHJhY2VfcGlkX3RyYWNlKTsKLQl9Ci0KLQkvKiB1cGRhdGUgdGhlIGZ1bmN0aW9uIGNhbGwgKi8KLQlmdHJhY2VfdXBkYXRlX3BpZF9mdW5jKCk7Ci0JZnRyYWNlX3N0YXJ0dXBfZW5hYmxlKDApOwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwotCi0JcmV0dXJuIGNudDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX3BpZF9mb3BzID0gewotCS5yZWFkID0gZnRyYWNlX3BpZF9yZWFkLAotCS53cml0ZSA9IGZ0cmFjZV9waWRfd3JpdGUsCisJLm9wZW4JCT0gZnRyYWNlX3BpZF9vcGVuLAorCS53cml0ZQkJPSBmdHJhY2VfcGlkX3dyaXRlLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gZnRyYWNlX3BpZF9yZWxlYXNlLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgZnRyYWNlX2luaXRfZGVidWdmcyh2b2lkKQpAQCAtMzI5Myw0ICszMzkxLDMgQEAKIAlmdHJhY2Vfc3RvcCgpOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggZDRmZjAxOS4uYTFjYTQ5NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTM5NywxOCArMzk3LDIxIEBACiAJaW50IHJldDsKIAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IHU2NCB0aW1lc3RhbXA7XHQiCi0JCQkgICAgICAgIm9mZnNldDowO1x0c2l6ZToldTtcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQudGltZV9zdGFtcCkpOworCQkJICAgICAgICJvZmZzZXQ6MDtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLnRpbWVfc3RhbXApLAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodTY0KSk7CiAKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiBsb2NhbF90IGNvbW1pdDtcdCIKLQkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAogCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgY29tbWl0KSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5jb21taXQpKTsKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5jb21taXQpLAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUobG9uZykpOwogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogY2hhciBkYXRhO1x0IgotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCiAJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBkYXRhKSwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KUJVRl9QQUdFX1NJWkUpOworCQkJICAgICAgICh1bnNpZ25lZCBpbnQpQlVGX1BBR0VfU0laRSwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KWlzX3NpZ25lZF90eXBlKGNoYXIpKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00ODMsNyArNDg2LDcgQEAKIC8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCiAjZGVmaW5lIERFQlVHX1NISUZUIDAKIAotc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7CiAJLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KIAlyZXR1cm4gYnVmZmVyLT5jbG9jaygpIDw8IERFQlVHX1NISUZUOwpAQCAtNDk0LDcgKzQ5Nyw3IEBACiAJdTY0IHRpbWU7CiAKIAlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1KTsKKwl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwogCiAJcmV0dXJuIHRpbWU7CkBAIC01OTksNyArNjAyLDcgQEAKIH0KIAogLyoKLSAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmUgcGFnZSBpcyB0aGUgaGVhZCBwYWdlCisgKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlbiBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKICAqCiAgKiBCZWNhdXNlIHRoZSByZWFkZXIgbWF5IG1vdmUgdGhlIGhlYWRfcGFnZSBwb2ludGVyLCB3ZSBjYW4KICAqIG5vdCB0cnVzdCB3aGF0IHRoZSBoZWFkIHBhZ2UgaXMgKGl0IG1heSBiZSBwb2ludGluZyB0bwpAQCAtMTE5Myw2ICsxMTk2LDcgQEAKIAlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKKwlzcGluX2xvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewpAQCAtMTIwNyw2ICsxMjExLDcgQEAKIAkJcmV0dXJuOwogCiAJcmJfcmVzZXRfY3B1KGNwdV9idWZmZXIpOworCXNwaW5fdW5sb2NrX2lycSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2spOwogCiAJcmJfY2hlY2tfcGFnZXMoY3B1X2J1ZmZlcik7CiAKQEAgLTE3ODUsOSArMTc5MCw5IEBACiBzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKIHJiX21vdmVfdGFpbChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKIAkgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB1bnNpZ25lZCBsb25nIHRhaWwsCi0JICAgICBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmNvbW1pdF9wYWdlLAogCSAgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICp0YWlsX3BhZ2UsIHU2NCAqdHMpCiB7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpjb21taXRfcGFnZSA9IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlOwogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gY3B1X2J1ZmZlci0+YnVmZmVyOwogCXN0cnVjdCBidWZmZXJfcGFnZSAqbmV4dF9wYWdlOwogCWludCByZXQ7CkBAIC0xODY4LDcgKzE4NzMsNyBAQAogCQkgKiBOZXN0ZWQgY29tbWl0cyBhbHdheXMgaGF2ZSB6ZXJvIGRlbHRhcywgc28KIAkJICoganVzdCByZXJlYWQgdGhlIHRpbWUgc3RhbXAKIAkJICovCi0JCSp0cyA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOworCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlcik7CiAJCW5leHRfcGFnZS0+cGFnZS0+dGltZV9zdGFtcCA9ICp0czsKIAl9CiAKQEAgLTE4OTAsMTMgKzE4OTUsMTAgQEAKIF9fcmJfcmVzZXJ2ZV9uZXh0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAogCQkgIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB1NjQgKnRzKQogewotCXN0cnVjdCBidWZmZXJfcGFnZSAqdGFpbF9wYWdlLCAqY29tbWl0X3BhZ2U7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICp0YWlsX3BhZ2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIHRhaWwsIHdyaXRlOwogCi0JY29tbWl0X3BhZ2UgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZTsKLQkvKiB3ZSBqdXN0IG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGludGVycnVwdHMgKi8KLQliYXJyaWVyKCk7CiAJdGFpbF9wYWdlID0gY3B1X2J1ZmZlci0+dGFpbF9wYWdlOwogCXdyaXRlID0gbG9jYWxfYWRkX3JldHVybihsZW5ndGgsICZ0YWlsX3BhZ2UtPndyaXRlKTsKIApAQCAtMTkwNyw3ICsxOTA5LDcgQEAKIAkvKiBTZWUgaWYgd2Ugc2hvdCBwYXNzIHRoZSBlbmQgb2YgdGhpcyBidWZmZXIgcGFnZSAqLwogCWlmICh3cml0ZSA+IEJVRl9QQUdFX1NJWkUpCiAJCXJldHVybiByYl9tb3ZlX3RhaWwoY3B1X2J1ZmZlciwgbGVuZ3RoLCB0YWlsLAotCQkJCSAgICBjb21taXRfcGFnZSwgdGFpbF9wYWdlLCB0cyk7CisJCQkJICAgIHRhaWxfcGFnZSwgdHMpOwogCiAJLyogV2UgcmVzZXJ2ZWQgc29tZXRoaW5nIG9uIHRoZSBidWZmZXIgKi8KIApAQCAtMjExMSw3ICsyMTEzLDcgQEAKIAlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCArK25yX2xvb3BzID4gMTAwMCkpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKLQl0cyA9IHJiX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+YnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOworCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIpOwogCiAJLyoKIAkgKiBPbmx5IHRoZSBmaXJzdCBjb21taXQgY2FuIHVwZGF0ZSB0aGUgdGltZXN0YW1wLgpAQCAtMjY4MSw3ICsyNjgzLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpOwogCiAvKioKLSAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCisgKiByaW5nX2J1ZmZlcl9vdmVycnVucyAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlcgogICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyCiAgKgogICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIG92ZXJydW5zIGluIHRoZSByaW5nIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jCmluZGV4IDU3M2QzY2MuLmIyNDc3Y2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMKQEAgLTM1LDYgKzM1LDI4IEBACiBtb2R1bGVfcGFyYW0oZGlzYWJsZV9yZWFkZXIsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3JlYWRlciwgIm9ubHkgcnVuIHByb2R1Y2VyIik7CiAKK3N0YXRpYyBpbnQgd3JpdGVfaXRlcmF0aW9uID0gNTA7Cittb2R1bGVfcGFyYW0od3JpdGVfaXRlcmF0aW9uLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod3JpdGVfaXRlcmF0aW9uLCAiIyBvZiB3cml0ZXMgYmV0d2VlbiB0aW1lc3RhbXAgcmVhZGluZ3MiKTsKKworc3RhdGljIGludCBwcm9kdWNlcl9uaWNlID0gMTk7CitzdGF0aWMgaW50IGNvbnN1bWVyX25pY2UgPSAxOTsKKworc3RhdGljIGludCBwcm9kdWNlcl9maWZvID0gLTE7CitzdGF0aWMgaW50IGNvbnN1bWVyX2ZpZm8gPSAtMTsKKworbW9kdWxlX3BhcmFtKHByb2R1Y2VyX25pY2UsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWNlcl9uaWNlLCAibmljZSBwcmlvIGZvciBwcm9kdWNlciIpOworCittb2R1bGVfcGFyYW0oY29uc3VtZXJfbmljZSwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvbnN1bWVyX25pY2UsICJuaWNlIHByaW8gZm9yIGNvbnN1bWVyIik7CisKK21vZHVsZV9wYXJhbShwcm9kdWNlcl9maWZvLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjZXJfZmlmbywgImZpZm8gcHJpbyBmb3IgcHJvZHVjZXIiKTsKKworbW9kdWxlX3BhcmFtKGNvbnN1bWVyX2ZpZm8sIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjb25zdW1lcl9maWZvLCAiZmlmbyBwcmlvIGZvciBjb25zdW1lciIpOworCiBzdGF0aWMgaW50IHJlYWRfZXZlbnRzOwogCiBzdGF0aWMgaW50IGtpbGxfdGVzdDsKQEAgLTIwOCwxNSArMjMwLDE4IEBACiAJZG8gewogCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCQlpbnQgKmVudHJ5OworCQlpbnQgaTsKIAotCQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIDEwKTsKLQkJaWYgKCFldmVudCkgewotCQkJbWlzc2VkKys7Ci0JCX0gZWxzZSB7Ci0JCQloaXQrKzsKLQkJCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JCQkqZW50cnkgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgd3JpdGVfaXRlcmF0aW9uOyBpKyspIHsKKwkJCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgMTApOworCQkJaWYgKCFldmVudCkgeworCQkJCW1pc3NlZCsrOworCQkJfSBlbHNlIHsKKwkJCQloaXQrKzsKKwkJCQllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCQkJCSplbnRyeSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOworCQkJfQogCQl9CiAJCWRvX2dldHRpbWVvZmRheSgmZW5kX3R2KTsKIApAQCAtMjYzLDYgKzI4OCwyNyBAQAogCiAJaWYgKGtpbGxfdGVzdCkKIAkJdHJhY2VfcHJpbnRrKCJFUlJPUiFcbiIpOworCisJaWYgKCFkaXNhYmxlX3JlYWRlcikgeworCQlpZiAoY29uc3VtZXJfZmlmbyA8IDApCisJCQl0cmFjZV9wcmludGsoIlJ1bm5pbmcgQ29uc3VtZXIgYXQgbmljZTogJWRcbiIsCisJCQkJICAgICBjb25zdW1lcl9uaWNlKTsKKwkJZWxzZQorCQkJdHJhY2VfcHJpbnRrKCJSdW5uaW5nIENvbnN1bWVyIGF0IFNDSEVEX0ZJRk8gJWRcbiIsCisJCQkJICAgICBjb25zdW1lcl9maWZvKTsKKwl9CisJaWYgKHByb2R1Y2VyX2ZpZm8gPCAwKQorCQl0cmFjZV9wcmludGsoIlJ1bm5pbmcgUHJvZHVjZXIgYXQgbmljZTogJWRcbiIsCisJCQkgICAgIHByb2R1Y2VyX25pY2UpOworCWVsc2UKKwkJdHJhY2VfcHJpbnRrKCJSdW5uaW5nIFByb2R1Y2VyIGF0IFNDSEVEX0ZJRk8gJWRcbiIsCisJCQkgICAgIHByb2R1Y2VyX2ZpZm8pOworCisJLyogTGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgdGVzdCBpcyBydW5uaW5nIGF0IGxvdyBwcmlvcml0eSAqLworCWlmIChwcm9kdWNlcl9maWZvIDwgMCAmJiBjb25zdW1lcl9maWZvIDwgMCAmJgorCSAgICBwcm9kdWNlcl9uaWNlID09IDE5ICYmIGNvbnN1bWVyX25pY2UgPT0gMTkpCisJCXRyYWNlX3ByaW50aygiV0FSTklORyEhISBUaGlzIHRlc3QgaXMgcnVubmluZyBhdCBsb3dlc3QgcHJpb3JpdHkuXG4iKTsKKwogCXRyYWNlX3ByaW50aygiVGltZTogICAgICVsbGQgKHVzZWNzKVxuIiwgdGltZSk7CiAJdHJhY2VfcHJpbnRrKCJPdmVycnVuczogJWxsZFxuIiwgb3ZlcnJ1bnMpOwogCWlmIChkaXNhYmxlX3JlYWRlcikKQEAgLTM5Miw2ICs0MzgsMjcgQEAKIAlpZiAoSVNfRVJSKHByb2R1Y2VyKSkKIAkJZ290byBvdXRfa2lsbDsKIAorCS8qCisJICogUnVuIHRoZW0gYXMgbG93LXByaW8gYmFja2dyb3VuZCB0YXNrcyBieSBkZWZhdWx0OgorCSAqLworCWlmICghZGlzYWJsZV9yZWFkZXIpIHsKKwkJaWYgKGNvbnN1bWVyX2ZpZm8gPj0gMCkgeworCQkJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geworCQkJCS5zY2hlZF9wcmlvcml0eSA9IGNvbnN1bWVyX2ZpZm8KKwkJCX07CisJCQlzY2hlZF9zZXRzY2hlZHVsZXIoY29uc3VtZXIsIFNDSEVEX0ZJRk8sICZwYXJhbSk7CisJCX0gZWxzZQorCQkJc2V0X3VzZXJfbmljZShjb25zdW1lciwgY29uc3VtZXJfbmljZSk7CisJfQorCisJaWYgKHByb2R1Y2VyX2ZpZm8gPj0gMCkgeworCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7CisJCQkuc2NoZWRfcHJpb3JpdHkgPSBjb25zdW1lcl9maWZvCisJCX07CisJCXNjaGVkX3NldHNjaGVkdWxlcihwcm9kdWNlciwgU0NIRURfRklGTywgJnBhcmFtKTsKKwl9IGVsc2UKKwkJc2V0X3VzZXJfbmljZShwcm9kdWNlciwgcHJvZHVjZXJfbmljZSk7CisKIAlyZXR1cm4gMDsKIAogIG91dF9raWxsOgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCA0NTA2ODI2Li44NzRmMjg5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgY2hhciBib290dXBfdHJhY2VyX2J1ZltNQVhfVFJBQ0VSX1NJWkVdIF9faW5pdGRhdGE7CiBzdGF0aWMgY2hhciAqZGVmYXVsdF9ib290dXBfdHJhY2VyOwogCi1zdGF0aWMgaW50IF9faW5pdCBzZXRfZnRyYWNlKGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgX19pbml0IHNldF9jbWRsaW5lX2Z0cmFjZShjaGFyICpzdHIpCiB7CiAJc3RybmNweShib290dXBfdHJhY2VyX2J1Ziwgc3RyLCBNQVhfVFJBQ0VSX1NJWkUpOwogCWRlZmF1bHRfYm9vdHVwX3RyYWNlciA9IGJvb3R1cF90cmFjZXJfYnVmOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJcmluZ19idWZmZXJfZXhwYW5kZWQgPSAxOwogCXJldHVybiAxOwogfQotX19zZXR1cCgiZnRyYWNlPSIsIHNldF9mdHJhY2UpOworX19zZXR1cCgiZnRyYWNlPSIsIHNldF9jbWRsaW5lX2Z0cmFjZSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9mdHJhY2VfZHVtcF9vbl9vb3BzKGNoYXIgKnN0cikKIHsKQEAgLTEzNjEsMTAgKzEzNjEsMTEgQEAKIAlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CiAJcmF3X2xvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CiAJX19yYXdfc3Bpbl9sb2NrKCZ0cmFjZV9idWZfbG9jayk7Ci0JbGVuID0gdnNucHJpbnRmKHRyYWNlX2J1ZiwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7Ci0KLQlsZW4gPSBtaW4obGVuLCBUUkFDRV9CVUZfU0laRS0xKTsKLQl0cmFjZV9idWZbbGVuXSA9IDA7CisJaWYgKGFyZ3MgPT0gTlVMTCkgeworCQlzdHJuY3B5KHRyYWNlX2J1ZiwgZm10LCBUUkFDRV9CVUZfU0laRSk7CisJCWxlbiA9IHN0cmxlbih0cmFjZV9idWYpOworCX0gZWxzZQorCQlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKIAogCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7CiAJYnVmZmVyID0gdHItPmJ1ZmZlcjsKQEAgLTEzNzMsMTAgKzEzNzQsMTAgQEAKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dF91bmxvY2s7CiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+aXAJCQk9IGlwOworCWVudHJ5LT5pcCA9IGlwOwogCiAJbWVtY3B5KCZlbnRyeS0+YnVmLCB0cmFjZV9idWYsIGxlbik7Ci0JZW50cnktPmJ1ZltsZW5dID0gMDsKKwllbnRyeS0+YnVmW2xlbl0gPSAnXDAnOwogCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQogCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOwogCkBAIC0xMzkzLDcgKzEzOTQsNyBAQAogCiBpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQlyZXR1cm4gdHJhY2VfYXJyYXlfcHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOworCXJldHVybiB0cmFjZV9hcnJheV92cHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdnByaW50ayk7CiAKQEAgLTI0NDAsNyArMjQ0MSw3IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjU4Miw3ICsyNTgzLDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjc2NCw3ICsyNzY1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZmlscC0+Zl9wb3MgKz0gcmV0OworCSpwcG9zICs9IHJldDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMjk5LDcgKzMzMDAsNyBAQAogCQl9CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQpAQCAtMzMxOSwyMiArMzMyMCwxMSBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBpbnQgbWFya19wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFyZ3M7Ci0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlyZXQgPSB0cmFjZV92cHJpbnRrKDAsIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiB0cmFjaW5nX21hcmtfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAogCQkJCQlzaXplX3QgY250LCBsb2ZmX3QgKmZwb3MpCiB7CiAJY2hhciAqYnVmOwotCWNoYXIgKmVuZDsKIAogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMzNDIsNyArMzMzMiw3IEBACiAJaWYgKGNudCA+IFRSQUNFX0JVRl9TSVpFKQogCQljbnQgPSBUUkFDRV9CVUZfU0laRTsKIAotCWJ1ZiA9IGttYWxsb2MoY250ICsgMSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhjbnQgKyAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zMzUwLDE0ICszMzQwLDEzIEBACiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KKwlpZiAoYnVmW2NudC0xXSAhPSAnXG4nKSB7CisJCWJ1ZltjbnRdID0gJ1xuJzsKKwkJYnVmW2NudCsxXSA9ICdcMCc7CisJfSBlbHNlCisJCWJ1ZltjbnRdID0gJ1wwJzsKIAotCS8qIEN1dCBmcm9tIHRoZSBmaXJzdCBuaWwgb3IgbmV3bGluZS4gKi8KLQlidWZbY250XSA9ICdcMCc7Ci0JZW5kID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7Ci0JaWYgKGVuZCkKLQkJKmVuZCA9ICdcMCc7Ci0KLQljbnQgPSBtYXJrX3ByaW50aygiJXNcbiIsIGJ1Zik7CisJY250ID0gdHJhY2VfdnByaW50aygwLCBidWYsIE5VTEwpOwogCWtmcmVlKGJ1Zik7CiAJKmZwb3MgKz0gY250OwogCkBAIC0zNzMwLDcgKzM3MTksNyBAQAogCiAJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzKQotCQlyZXR1cm4gRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAogCXRyYWNlX3NlcV9pbml0KHMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDQwNWNiODUuLjFkN2Y0ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8dHJhY2UvYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW10cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlX3NlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9ldmVudC5oPgpAQCAtMzcsNiArMzgsNyBAQAogCVRSQUNFX0tNRU1fQUxMT0MsCiAJVFJBQ0VfS01FTV9GUkVFLAogCVRSQUNFX0JMSywKKwlUUkFDRV9LU1lNLAogCiAJX19UUkFDRV9MQVNUX1RZUEUsCiB9OwpAQCAtOTgsOSArMTAwLDMyIEBACiBzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OwogCWludAkJCW5yOwotCXVuc2lnbmVkIGxvbmcJCXJldDsKKwlsb25nCQkJcmV0OwogfTsKIAorc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwl1bnNpZ25lZCBsb25nCQlpcDsKKwlpbnQJCQluYXJnczsKKwl1bnNpZ25lZCBsb25nCQlhcmdzW107Cit9OworCisjZGVmaW5lIFNJWkVPRl9LUFJPQkVfVFJBQ0VfRU5UUlkobikJCQlcCisJKG9mZnNldG9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnksIGFyZ3MpICsJXAorCShzaXplb2YodW5zaWduZWQgbG9uZykgKiAobikpKQorCitzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCXVuc2lnbmVkIGxvbmcJCWZ1bmM7CisJdW5zaWduZWQgbG9uZwkJcmV0X2lwOworCWludAkJCW5hcmdzOworCXVuc2lnbmVkIGxvbmcJCWFyZ3NbXTsKK307CisKKyNkZWZpbmUgU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWShuKQkJCVwKKwkob2Zmc2V0b2Yoc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSwgYXJncykgKwlcCisJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChuKSkpCisKIC8qCiAgKiB0cmFjZV9mbGFnX3R5cGUgaXMgYW4gZW51bWVyYXRpb24gdGhhdCBob2xkcyBkaWZmZXJlbnQKICAqIHN0YXRlcyB3aGVuIGEgdHJhY2Ugb2NjdXJzLiBUaGVzZSBhcmU6CkBAIC0yMDksNiArMjM0LDcgQEAKIAkJCSAgVFJBQ0VfS01FTV9BTExPQyk7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnksCVwKIAkJCSAgVFJBQ0VfS01FTV9GUkVFKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBrc3ltX3RyYWNlX2VudHJ5LCBUUkFDRV9LU1lNKTtcCiAJCV9fZnRyYWNlX2JhZF90eXBlKCk7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIApAQCAtMzY0LDYgKzM5MCw4IEBACiB2b2lkIHVucmVnaXN0ZXJfdHJhY2VyKHN0cnVjdCB0cmFjZXIgKnR5cGUpOwogaW50IGlzX3RyYWNpbmdfc3RvcHBlZCh2b2lkKTsKIAorZXh0ZXJuIGludCBwcm9jZXNzX25ld19rc3ltX2VudHJ5KGNoYXIgKmtzeW1uYW1lLCBpbnQgb3AsIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5zZWNzX3RvX3VzZWNzKHVuc2lnbmVkIGxvbmcgbnNlY3MpOwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKQEAgLTQzOCw2ICs0NjYsOCBAQAogCQkJCQkgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfaHdfYnJhbmNoZXMoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgICAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOworZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2tzeW0oc3RydWN0IHRyYWNlciAqdHJhY2UsCisJCQkJCSBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKICNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCAqLwogCiBleHRlcm4gdm9pZCAqaGVhZF9wYWdlKHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOwpAQCAtNDgzLDEwICs1MTMsNiBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV90cmFjZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gMTsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9ncmFwaF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gMTsKQEAgLTUwMCwxMiArNTI2LDEyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwogCi1leHRlcm4gc3RydWN0IHBpZCAqZnRyYWNlX3BpZF90cmFjZTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGZ0cmFjZV9waWRzOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX3RyYWNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCWlmICghZnRyYWNlX3BpZF90cmFjZSkKKwlpZiAobGlzdF9lbXB0eSgmZnRyYWNlX3BpZHMpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiB0ZXN0X3Rza190cmFjZV90cmFjZSh0YXNrKTsKQEAgLTY4Nyw3ICs3MTMsNiBAQAogCWludAkJCW5fcHJlZHM7CiAJc3RydWN0IGZpbHRlcl9wcmVkCSoqcHJlZHM7CiAJY2hhcgkJCSpmaWx0ZXJfc3RyaW5nOwotCWJvb2wJCQlub19yZXNldDsKIH07CiAKIHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gewpAQCAtNjk5LDIyICs3MjQsNDAgQEAKIH07CiAKIHN0cnVjdCBmaWx0ZXJfcHJlZDsKK3N0cnVjdCByZWdleDsKIAogdHlwZWRlZiBpbnQgKCpmaWx0ZXJfcHJlZF9mbl90KSAoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCwKIAkJCQkgaW50IHZhbDEsIGludCB2YWwyKTsKIAotc3RydWN0IGZpbHRlcl9wcmVkIHsKLQlmaWx0ZXJfcHJlZF9mbl90IGZuOwotCXU2NCB2YWw7Ci0JY2hhciBzdHJfdmFsW01BWF9GSUxURVJfU1RSX1ZBTF07Ci0JaW50IHN0cl9sZW47Ci0JY2hhciAqZmllbGRfbmFtZTsKLQlpbnQgb2Zmc2V0OwotCWludCBub3Q7Ci0JaW50IG9wOwotCWludCBwb3BfbjsKK3R5cGVkZWYgaW50ICgqcmVnZXhfbWF0Y2hfZnVuYykoY2hhciAqc3RyLCBzdHJ1Y3QgcmVnZXggKnIsIGludCBsZW4pOworCitlbnVtIHJlZ2V4X3R5cGUgeworCU1BVENIX0ZVTEwgPSAwLAorCU1BVENIX0ZST05UX09OTFksCisJTUFUQ0hfTUlERExFX09OTFksCisJTUFUQ0hfRU5EX09OTFksCiB9OwogCitzdHJ1Y3QgcmVnZXggeworCWNoYXIJCQlwYXR0ZXJuW01BWF9GSUxURVJfU1RSX1ZBTF07CisJaW50CQkJbGVuOworCWludAkJCWZpZWxkX2xlbjsKKwlyZWdleF9tYXRjaF9mdW5jCW1hdGNoOworfTsKKworc3RydWN0IGZpbHRlcl9wcmVkIHsKKwlmaWx0ZXJfcHJlZF9mbl90IAlmbjsKKwl1NjQgCQkJdmFsOworCXN0cnVjdCByZWdleAkJcmVnZXg7CisJY2hhciAJCQkqZmllbGRfbmFtZTsKKwlpbnQgCQkJb2Zmc2V0OworCWludCAJCQlub3Q7CisJaW50IAkJCW9wOworCWludCAJCQlwb3BfbjsKK307CisKK2V4dGVybiBlbnVtIHJlZ2V4X3R5cGUKK2ZpbHRlcl9wYXJzZV9yZWdleChjaGFyICpidWZmLCBpbnQgbGVuLCBjaGFyICoqc2VhcmNoLCBpbnQgKm5vdCk7CiBleHRlcm4gdm9pZCBwcmludF9ldmVudF9maWx0ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAogCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpOwogZXh0ZXJuIGludCBhcHBseV9ldmVudF9maWx0ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLApAQCAtNzMwLDcgKzc3Myw4IEBACiAJCSAgICAgc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCiAJCSAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKLQlpZiAodW5saWtlbHkoY2FsbC0+ZmlsdGVyX2FjdGl2ZSkgJiYgIWZpbHRlcl9tYXRjaF9wcmVkcyhjYWxsLCByZWMpKSB7CisJaWYgKHVubGlrZWx5KGNhbGwtPmZpbHRlcl9hY3RpdmUpICYmCisJICAgICFmaWx0ZXJfbWF0Y2hfcHJlZHMoY2FsbC0+ZmlsdGVyLCByZWMpKSB7CiAJCXJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jCmluZGV4IDIwYzVmOTIuLjg3OGMwM2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZV9jbG9jay5oPgogCisjaW5jbHVkZSAidHJhY2UuaCIKKwogLyoKICAqIHRyYWNlX2Nsb2NrX2xvY2FsKCk6IHRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29oZXJlbnQgdHJhY2luZyBjbG9jay4KICAqCkBAIC0yOCwxNyArMzAsMTcgQEAKICAqLwogdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBjbG9jazsKKwlpbnQgcmVzY2hlZDsKIAogCS8qCiAJICogc2NoZWRfY2xvY2soKSBpcyBhbiBhcmNoaXRlY3R1cmUgaW1wbGVtZW50ZWQsIGZhc3QsIHNjYWxhYmxlLAogCSAqIGxvY2tsZXNzIGNsb2NrLiBJdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjb2hlcmVudCBhY3Jvc3MKIAkgKiBDUFVzLCBub3IgYWNyb3NzIENQVSBpZGxlIGV2ZW50cy4KIAkgKi8KLQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CiAJY2xvY2sgPSBzY2hlZF9jbG9jaygpOwotCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOwogCiAJcmV0dXJuIGNsb2NrOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKaW5kZXggZWFkM2Q3Mi4uYzE2YTA4ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCkBAIC0zNjQsMyArMzY0LDE5IEBACiAJRl9wcmludGsoInR5cGU6JXUgY2FsbF9zaXRlOiVseCBwdHI6JXAiLAogCQkgX19lbnRyeS0+dHlwZV9pZCwgX19lbnRyeS0+Y2FsbF9zaXRlLCBfX2VudHJ5LT5wdHIpCiApOworCitGVFJBQ0VfRU5UUlkoa3N5bV90cmFjZSwga3N5bV90cmFjZV9lbnRyeSwKKworCVRSQUNFX0tTWU0sCisKKwlGX1NUUlVDVCgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJaXAJCQkgICkKKwkJX19maWVsZCgJdW5zaWduZWQgY2hhciwJdHlwZQkJCSAgKQorCQlfX2FycmF5KAljaGFyCSAgICAgLAljbWQsCSAgIFRBU0tfQ09NTV9MRU4gICkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywgIGFkZHIJCQkgICkKKwkpLAorCisJRl9wcmludGsoImlwOiAlcEYgdHlwZTogJWQga3N5bV9uYW1lOiAlcFMgY21kOiAlcyIsCisJCSh2b2lkICopX19lbnRyeS0+aXAsICh1bnNpZ25lZCBpbnQpX19lbnRyeS0+dHlwZSwKKwkJKHZvaWQgKilfX2VudHJ5LT5hZGRyLCAgX19lbnRyeS0+Y21kKQorKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IDhkNWMxNzEuLmQ5YzYwZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtOCwxNyArOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKLS8qCi0gKiBXZSBjYW4ndCB1c2UgYSBzaXplIGJ1dCBhIHR5cGUgaW4gYWxsb2NfcGVyY3B1KCkKLSAqIFNvIGxldCdzIGNyZWF0ZSBhIGR1bW15IHR5cGUgdGhhdCBtYXRjaGVzIHRoZSBkZXNpcmVkIHNpemUKLSAqLwotdHlwZWRlZiBzdHJ1Y3Qge2NoYXIgYnVmW0ZUUkFDRV9NQVhfUFJPRklMRV9TSVpFXTt9IHByb2ZpbGVfYnVmX3Q7CiAKLWNoYXIJCSp0cmFjZV9wcm9maWxlX2J1ZjsKLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3Byb2ZpbGVfYnVmKTsKK2NoYXIgKnBlcmZfdHJhY2VfYnVmOworRVhQT1JUX1NZTUJPTF9HUEwocGVyZl90cmFjZV9idWYpOwogCi1jaGFyCQkqdHJhY2VfcHJvZmlsZV9idWZfbm1pOwotRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKK2NoYXIgKnBlcmZfdHJhY2VfYnVmX25taTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmX25taSk7CisKK3R5cGVkZWYgdHlwZW9mKGNoYXIgW0ZUUkFDRV9NQVhfUFJPRklMRV9TSVpFXSkgcGVyZl90cmFjZV90IDsKIAogLyogQ291bnQgdGhlIGV2ZW50cyBpbiB1c2UgKHBlciBldmVudCBpZCwgbm90IHBlciBpbnN0YW5jZSkgKi8KIHN0YXRpYyBpbnQJdG90YWxfcHJvZmlsZV9jb3VudDsKQEAgLTMyLDIwICsyOSwyMCBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgewotCQlidWYgPSAoY2hhciAqKWFsbG9jX3BlcmNwdShwcm9maWxlX2J1Zl90KTsKKwkJYnVmID0gKGNoYXIgKilhbGxvY19wZXJjcHUocGVyZl90cmFjZV90KTsKIAkJaWYgKCFidWYpCiAJCQlnb3RvIGZhaWxfYnVmOwogCi0JCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1ZiwgYnVmKTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHBlcmZfdHJhY2VfYnVmLCBidWYpOwogCi0JCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOworCQlidWYgPSAoY2hhciAqKWFsbG9jX3BlcmNwdShwZXJmX3RyYWNlX3QpOwogCQlpZiAoIWJ1ZikKIAkJCWdvdG8gZmFpbF9idWZfbm1pOwogCi0JCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1Zl9ubWksIGJ1Zik7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwZXJmX3RyYWNlX2J1Zl9ubWksIGJ1Zik7CiAJfQogCi0JcmV0ID0gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKCk7CisJcmV0ID0gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKGV2ZW50KTsKIAlpZiAoIXJldCkgewogCQl0b3RhbF9wcm9maWxlX2NvdW50Kys7CiAJCXJldHVybiAwOwpAQCAtNTMsMTAgKzUwLDEwIEBACiAKIGZhaWxfYnVmX25taToKIAlpZiAoIXRvdGFsX3Byb2ZpbGVfY291bnQpIHsKLQkJZnJlZV9wZXJjcHUodHJhY2VfcHJvZmlsZV9idWZfbm1pKTsKLQkJZnJlZV9wZXJjcHUodHJhY2VfcHJvZmlsZV9idWYpOwotCQl0cmFjZV9wcm9maWxlX2J1Zl9ubWkgPSBOVUxMOwotCQl0cmFjZV9wcm9maWxlX2J1ZiA9IE5VTEw7CisJCWZyZWVfcGVyY3B1KHBlcmZfdHJhY2VfYnVmX25taSk7CisJCWZyZWVfcGVyY3B1KHBlcmZfdHJhY2VfYnVmKTsKKwkJcGVyZl90cmFjZV9idWZfbm1pID0gTlVMTDsKKwkJcGVyZl90cmFjZV9idWYgPSBOVUxMOwogCX0KIGZhaWxfYnVmOgogCWF0b21pY19kZWMoJmV2ZW50LT5wcm9maWxlX2NvdW50KTsKQEAgLTg5LDE0ICs4NiwxNCBAQAogCWlmICghYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50LT5wcm9maWxlX2NvdW50KSkKIAkJcmV0dXJuOwogCi0JZXZlbnQtPnByb2ZpbGVfZGlzYWJsZSgpOworCWV2ZW50LT5wcm9maWxlX2Rpc2FibGUoZXZlbnQpOwogCiAJaWYgKCEtLXRvdGFsX3Byb2ZpbGVfY291bnQpIHsKLQkJYnVmID0gdHJhY2VfcHJvZmlsZV9idWY7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1ZiwgTlVMTCk7CisJCWJ1ZiA9IHBlcmZfdHJhY2VfYnVmOworCQlyY3VfYXNzaWduX3BvaW50ZXIocGVyZl90cmFjZV9idWYsIE5VTEwpOwogCi0JCW5taV9idWYgPSB0cmFjZV9wcm9maWxlX2J1Zl9ubWk7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcih0cmFjZV9wcm9maWxlX2J1Zl9ubWksIE5VTEwpOworCQlubWlfYnVmID0gcGVyZl90cmFjZV9idWZfbm1pOworCQlyY3VfYXNzaWduX3BvaW50ZXIocGVyZl90cmFjZV9idWZfbm1pLCBOVUxMKTsKIAogCQkvKgogCQkgKiBFbnN1cmUgZXZlcnkgZXZlbnRzIGluIHByb2ZpbGluZyBoYXZlIGZpbmlzaGVkIGJlZm9yZQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IGQxMjhmNjUuLjFkMTgzMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTkzLDkgKzkzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKTsKIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0KLXN0YXRpYyB2b2lkIHRyYWNlX2Rlc3Ryb3lfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3ZvaWQgdHJhY2VfZGVzdHJveV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkLCAqbmV4dDsKIApAQCAtMTA3LDggKzEwNSw2IEBACiAJfQogfQogCi0jZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KLQogc3RhdGljIHZvaWQgZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKIAkJCQkJaW50IGVuYWJsZSkKIHsKQEAgLTExNywxNCArMTEzLDE0IEBACiAJCWlmIChjYWxsLT5lbmFibGVkKSB7CiAJCQljYWxsLT5lbmFibGVkID0gMDsKIAkJCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwotCQkJY2FsbC0+dW5yZWdmdW5jKGNhbGwtPmRhdGEpOworCQkJY2FsbC0+dW5yZWdmdW5jKGNhbGwpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKCFjYWxsLT5lbmFibGVkKSB7CiAJCQljYWxsLT5lbmFibGVkID0gMTsKIAkJCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKLQkJCWNhbGwtPnJlZ2Z1bmMoY2FsbC0+ZGF0YSk7CisJCQljYWxsLT5yZWdmdW5jKGNhbGwpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTUwNyw3ICs1MDMsNyBAQAogI2RlZmluZSBGSUVMRCh0eXBlLCBuYW1lKQkJCQkJCVwKIAlzaXplb2YodHlwZSkgIT0gc2l6ZW9mKGZpZWxkLm5hbWUpID8gX19iYWRfdHlwZV9zaXplKCkgOglcCiAJI3R5cGUsICJjb21tb25fIiAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgbmFtZSksCQlcCi0JCXNpemVvZihmaWVsZC5uYW1lKQorCQlzaXplb2YoZmllbGQubmFtZSksIGlzX3NpZ25lZF90eXBlKHR5cGUpCiAKIHN0YXRpYyBpbnQgdHJhY2Vfd3JpdGVfaGVhZGVyKHN0cnVjdCB0cmFjZV9zZXEgKnMpCiB7CkBAIC01MTUsMTcgKzUxMSwxNyBAQAogCiAJLyogc3RydWN0IHRyYWNlX2VudHJ5ICovCiAJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywKLQkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCQkiXG4iLAotCQkJCUZJRUxEKHVuc2lnbmVkIHNob3J0LCB0eXBlKSwKLQkJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBmbGFncyksCi0JCQkJRklFTEQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCksCi0JCQkJRklFTEQoaW50LCBwaWQpLAotCQkJCUZJRUxEKGludCwgbG9ja19kZXB0aCkpOworCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCisJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKKwkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgorCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCisJCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKKwkJCSJcbiIsCisJCQlGSUVMRCh1bnNpZ25lZCBzaG9ydCwgdHlwZSksCisJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBmbGFncyksCisJCQlGSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KSwKKwkJCUZJRUxEKGludCwgcGlkKSwKKwkJCUZJRUxEKGludCwgbG9ja19kZXB0aCkpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtODc4LDkgKzg3NCw5IEBACiAJCQkgICAiJyVzL2ZpbHRlcicgZW50cnlcbiIsIG5hbWUpOwogCX0KIAotCWVudHJ5ID0gdHJhY2VfY3JlYXRlX2ZpbGUoImVuYWJsZSIsIDA2NDQsIHN5c3RlbS0+ZW50cnksCi0JCQkJICAodm9pZCAqKXN5c3RlbS0+bmFtZSwKLQkJCQkgICZmdHJhY2Vfc3lzdGVtX2VuYWJsZV9mb3BzKTsKKwl0cmFjZV9jcmVhdGVfZmlsZSgiZW5hYmxlIiwgMDY0NCwgc3lzdGVtLT5lbnRyeSwKKwkJCSAgKHZvaWQgKilzeXN0ZW0tPm5hbWUsCisJCQkgICZmdHJhY2Vfc3lzdGVtX2VuYWJsZV9mb3BzKTsKIAogCXJldHVybiBzeXN0ZW0tPmVudHJ5OwogfQpAQCAtODkyLDcgKzg4OCw2IEBACiAJCSBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmaWx0ZXIsCiAJCSBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3JtYXQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZW50cnk7CiAJaW50IHJldDsKIAogCS8qCkBAIC05MTAsMTIgKzkwNSwxMiBAQAogCX0KIAogCWlmIChjYWxsLT5yZWdmdW5jKQotCQllbnRyeSA9IHRyYWNlX2NyZWF0ZV9maWxlKCJlbmFibGUiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCi0JCQkJCSAgZW5hYmxlKTsKKwkJdHJhY2VfY3JlYXRlX2ZpbGUoImVuYWJsZSIsIDA2NDQsIGNhbGwtPmRpciwgY2FsbCwKKwkJCQkgIGVuYWJsZSk7CiAKIAlpZiAoY2FsbC0+aWQgJiYgY2FsbC0+cHJvZmlsZV9lbmFibGUpCi0JCWVudHJ5ID0gdHJhY2VfY3JlYXRlX2ZpbGUoImlkIiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAotCQkJCQkgIGlkKTsKKwkJdHJhY2VfY3JlYXRlX2ZpbGUoImlkIiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAorCQkgCQkgIGlkKTsKIAogCWlmIChjYWxsLT5kZWZpbmVfZmllbGRzKSB7CiAJCXJldCA9IGNhbGwtPmRlZmluZV9maWVsZHMoY2FsbCk7CkBAIC05MjQsNDEgKzkxOSw2MCBAQAogCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJZW50cnkgPSB0cmFjZV9jcmVhdGVfZmlsZSgiZmlsdGVyIiwgMDY0NCwgY2FsbC0+ZGlyLCBjYWxsLAotCQkJCQkgIGZpbHRlcik7CisJCXRyYWNlX2NyZWF0ZV9maWxlKCJmaWx0ZXIiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkJICBmaWx0ZXIpOwogCX0KIAogCS8qIEEgdHJhY2UgbWF5IG5vdCB3YW50IHRvIGV4cG9ydCBpdHMgZm9ybWF0ICovCiAJaWYgKCFjYWxsLT5zaG93X2Zvcm1hdCkKIAkJcmV0dXJuIDA7CiAKLQllbnRyeSA9IHRyYWNlX2NyZWF0ZV9maWxlKCJmb3JtYXQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCi0JCQkJICBmb3JtYXQpOworCXRyYWNlX2NyZWF0ZV9maWxlKCJmb3JtYXQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkgIGZvcm1hdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBmb3JfZWFjaF9ldmVudChldmVudCwgc3RhcnQsIGVuZCkJCQlcCi0JZm9yIChldmVudCA9IHN0YXJ0OwkJCQkJXAotCSAgICAgKHVuc2lnbmVkIGxvbmcpZXZlbnQgPCAodW5zaWduZWQgbG9uZyllbmQ7CQlcCi0JICAgICBldmVudCsrKQorc3RhdGljIGludCBfX3RyYWNlX2FkZF9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50czsKKwlpbnQgcmV0OwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKKwlpZiAoIWNhbGwtPm5hbWUpCisJCXJldHVybiAtRUlOVkFMOwogCi1zdGF0aWMgTElTVF9IRUFEKGZ0cmFjZV9tb2R1bGVfZmlsZV9saXN0KTsKKwlpZiAoY2FsbC0+cmF3X2luaXQpIHsKKwkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ICE9IC1FTk9TWVMpCisJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgorCQkJCSJldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KIAotLyoKLSAqIE1vZHVsZXMgbXVzdCBvd24gdGhlaXIgZmlsZV9vcGVyYXRpb25zIHRvIGtlZXAgdXAgd2l0aAotICogcmVmZXJlbmNlIGNvdW50aW5nLgotICovCi1zdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyB7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKLQlzdHJ1Y3QgbW9kdWxlCQkJKm1vZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQlpZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQllbmFibGU7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkJZm9ybWF0OwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWZpbHRlcjsKLX07CisJZF9ldmVudHMgPSBldmVudF90cmFjZV9ldmVudHNfZGlyKCk7CisJaWYgKCFkX2V2ZW50cykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCQkJJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKKwlpZiAoIXJldCkKKwkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEFkZCBhbiBhZGRpdGlvbmFsIGV2ZW50X2NhbGwgZHluYW1pY2FsbHkgKi8KK2ludCB0cmFjZV9hZGRfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJaW50IHJldDsKKwltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CisJcmV0ID0gX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsKTsKKwltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgdm9pZCByZW1vdmVfc3Vic3lzdGVtX2Rpcihjb25zdCBjaGFyICpuYW1lKQogewpAQCAtOTg2LDYgKzEwMDAsNTMgQEAKIAl9CiB9CiAKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBsb2NraW5nIGJvdGggb2YgZXZlbnRfbXV0ZXggYW5kIHRyYWNlX2V2ZW50X211dGV4LgorICovCitzdGF0aWMgdm9pZCBfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgMCk7CisJaWYgKGNhbGwtPmV2ZW50KQorCQlfX3VucmVnaXN0ZXJfZnRyYWNlX2V2ZW50KGNhbGwtPmV2ZW50KTsKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2FsbC0+ZGlyKTsKKwlsaXN0X2RlbCgmY2FsbC0+bGlzdCk7CisJdHJhY2VfZGVzdHJveV9maWVsZHMoY2FsbCk7CisJZGVzdHJveV9wcmVkcyhjYWxsKTsKKwlyZW1vdmVfc3Vic3lzdGVtX2RpcihjYWxsLT5zeXN0ZW0pOworfQorCisvKiBSZW1vdmUgYW4gZXZlbnRfY2FsbCAqLwordm9pZCB0cmFjZV9yZW1vdmVfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOworCWRvd25fd3JpdGUoJnRyYWNlX2V2ZW50X211dGV4KTsKKwlfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKGNhbGwpOworCXVwX3dyaXRlKCZ0cmFjZV9ldmVudF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7Cit9CisKKyNkZWZpbmUgZm9yX2VhY2hfZXZlbnQoZXZlbnQsIHN0YXJ0LCBlbmQpCQkJXAorCWZvciAoZXZlbnQgPSBzdGFydDsJCQkJCVwKKwkgICAgICh1bnNpZ25lZCBsb25nKWV2ZW50IDwgKHVuc2lnbmVkIGxvbmcpZW5kOwkJXAorCSAgICAgZXZlbnQrKykKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisKK3N0YXRpYyBMSVNUX0hFQUQoZnRyYWNlX21vZHVsZV9maWxlX2xpc3QpOworCisvKgorICogTW9kdWxlcyBtdXN0IG93biB0aGVpciBmaWxlX29wZXJhdGlvbnMgdG8ga2VlcCB1cCB3aXRoCisgKiByZWZlcmVuY2UgY291bnRpbmcuCisgKi8KK3N0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXN0cnVjdCBtb2R1bGUJCQkqbW9kOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWlkOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJCWVuYWJsZTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQlmb3JtYXQ7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkJZmlsdGVyOworfTsKKwogc3RhdGljIHN0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzICoKIHRyYWNlX2NyZWF0ZV9maWxlX29wcyhzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC0xMDQzLDcgKzExMDQsNyBAQAogCQlpZiAoIWNhbGwtPm5hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKGNhbGwtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5yYXdfaW5pdCgpOworCQkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgpAQCAtMTA2MSwxMCArMTEyMiwxMSBAQAogCQkJCXJldHVybjsKIAkJfQogCQljYWxsLT5tb2QgPSBtb2Q7Ci0JCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7Ci0JCWV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsCi0JCQkJICZmaWxlX29wcy0+aWQsICZmaWxlX29wcy0+ZW5hYmxlLAotCQkJCSAmZmlsZV9vcHMtPmZpbHRlciwgJmZpbGVfb3BzLT5mb3JtYXQpOworCQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLAorCQkJCSAgICAgICAmZmlsZV9vcHMtPmlkLCAmZmlsZV9vcHMtPmVuYWJsZSwKKwkJCQkgICAgICAgJmZpbGVfb3BzLT5maWx0ZXIsICZmaWxlX29wcy0+Zm9ybWF0KTsKKwkJaWYgKCFyZXQpCisJCQlsaXN0X2FkZCgmY2FsbC0+bGlzdCwgJmZ0cmFjZV9ldmVudHMpOwogCX0KIH0KIApAQCAtMTA3OCwxNCArMTE0MCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhbGwsIHAsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7CiAJCWlmIChjYWxsLT5tb2QgPT0gbW9kKSB7CiAJCQlmb3VuZCA9IHRydWU7Ci0JCQlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgMCk7Ci0JCQlpZiAoY2FsbC0+ZXZlbnQpCi0JCQkJX191bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7Ci0JCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2FsbC0+ZGlyKTsKLQkJCWxpc3RfZGVsKCZjYWxsLT5saXN0KTsKLQkJCXRyYWNlX2Rlc3Ryb3lfZmllbGRzKGNhbGwpOwotCQkJZGVzdHJveV9wcmVkcyhjYWxsKTsKLQkJCXJlbW92ZV9zdWJzeXN0ZW1fZGlyKGNhbGwtPnN5c3RlbSk7CisJCQlfX3RyYWNlX3JlbW92ZV9ldmVudF9jYWxsKGNhbGwpOwogCQl9CiAJfQogCkBAIC0xMjAzLDcgKzEyNTgsNyBAQAogCQlpZiAoIWNhbGwtPm5hbWUpCiAJCQljb250aW51ZTsKIAkJaWYgKGNhbGwtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5yYXdfaW5pdCgpOworCQkJcmV0ID0gY2FsbC0+cmF3X2luaXQoY2FsbCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgpAQCAtMTIxMSwxMCArMTI2NiwxMiBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0JCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7Ci0JCWV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKLQkJCQkgJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKLQkJCQkgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CisJCXJldCA9IGV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CisJCWlmICghcmV0KQorCQkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKIAl9CiAKIAl3aGlsZSAodHJ1ZSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggMjMyNDU3OC4uNTA1MDRjYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0xOCwxMSArMTgsMTAgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgpAQCAtMzEsNiArMzAsNyBAQAogewogCU9QX09SLAogCU9QX0FORCwKKwlPUF9HTE9CLAogCU9QX05FLAogCU9QX0VRLAogCU9QX0xULApAQCAtNDgsMTYgKzQ4LDE3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGZpbHRlcl9vcCBmaWx0ZXJfb3BzW10gPSB7Ci0JeyBPUF9PUiwgInx8IiwgMSB9LAotCXsgT1BfQU5ELCAiJiYiLCAyIH0sCi0JeyBPUF9ORSwgIiE9IiwgNCB9LAotCXsgT1BfRVEsICI9PSIsIDQgfSwKLQl7IE9QX0xULCAiPCIsIDUgfSwKLQl7IE9QX0xFLCAiPD0iLCA1IH0sCi0JeyBPUF9HVCwgIj4iLCA1IH0sCi0JeyBPUF9HRSwgIj49IiwgNSB9LAotCXsgT1BfTk9ORSwgIk9QX05PTkUiLCAwIH0sCi0JeyBPUF9PUEVOX1BBUkVOLCAiKCIsIDAgfSwKKwl7IE9QX09SLAkifHwiLAkJMSB9LAorCXsgT1BfQU5ELAkiJiYiLAkJMiB9LAorCXsgT1BfR0xPQiwJIn4iLAkJNCB9LAorCXsgT1BfTkUsCSIhPSIsCQk0IH0sCisJeyBPUF9FUSwJIj09IiwJCTQgfSwKKwl7IE9QX0xULAkiPCIsCQk1IH0sCisJeyBPUF9MRSwJIjw9IiwJCTUgfSwKKwl7IE9QX0dULAkiPiIsCQk1IH0sCisJeyBPUF9HRSwJIj49IiwJCTUgfSwKKwl7IE9QX05PTkUsCSJPUF9OT05FIiwJMCB9LAorCXsgT1BfT1BFTl9QQVJFTiwgIigiLAkJMCB9LAogfTsKIAogZW51bSB7CkBAIC0xOTcsOSArMTk4LDkgQEAKIAljaGFyICphZGRyID0gKGNoYXIgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOwogCWludCBjbXAsIG1hdGNoOwogCi0JY21wID0gc3RybmNtcChhZGRyLCBwcmVkLT5zdHJfdmFsLCBwcmVkLT5zdHJfbGVuKTsKKwljbXAgPSBwcmVkLT5yZWdleC5tYXRjaChhZGRyLCAmcHJlZC0+cmVnZXgsIHByZWQtPnJlZ2V4LmZpZWxkX2xlbik7CiAKLQltYXRjaCA9ICghY21wKSBeIHByZWQtPm5vdDsKKwltYXRjaCA9IGNtcCBeIHByZWQtPm5vdDsKIAogCXJldHVybiBtYXRjaDsKIH0KQEAgLTIxMSw5ICsyMTIsOSBAQAogCWNoYXIgKiphZGRyID0gKGNoYXIgKiopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKIAlpbnQgY21wLCBtYXRjaDsKIAotCWNtcCA9IHN0cm5jbXAoKmFkZHIsIHByZWQtPnN0cl92YWwsIHByZWQtPnN0cl9sZW4pOworCWNtcCA9IHByZWQtPnJlZ2V4Lm1hdGNoKCphZGRyLCAmcHJlZC0+cmVnZXgsIHByZWQtPnJlZ2V4LmZpZWxkX2xlbik7CiAKLQltYXRjaCA9ICghY21wKSBeIHByZWQtPm5vdDsKKwltYXRjaCA9IGNtcCBeIHByZWQtPm5vdDsKIAogCXJldHVybiBtYXRjaDsKIH0KQEAgLTIzNyw5ICsyMzgsOSBAQAogCWNoYXIgKmFkZHIgPSAoY2hhciAqKShldmVudCArIHN0cl9sb2MpOwogCWludCBjbXAsIG1hdGNoOwogCi0JY21wID0gc3RybmNtcChhZGRyLCBwcmVkLT5zdHJfdmFsLCBzdHJfbGVuKTsKKwljbXAgPSBwcmVkLT5yZWdleC5tYXRjaChhZGRyLCAmcHJlZC0+cmVnZXgsIHN0cl9sZW4pOwogCi0JbWF0Y2ggPSAoIWNtcCkgXiBwcmVkLT5ub3Q7CisJbWF0Y2ggPSBjbXAgXiBwcmVkLT5ub3Q7CiAKIAlyZXR1cm4gbWF0Y2g7CiB9CkBAIC0yNTAsMTAgKzI1MSwxMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogcmV0dXJuIDEgaWYgZXZlbnQgbWF0Y2hlcywgMCBvdGhlcndpc2UgKGRpc2NhcmQpICovCi1pbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjKQorLyogQmFzaWMgcmVnZXggY2FsbGJhY2tzICovCitzdGF0aWMgaW50IHJlZ2V4X21hdGNoX2Z1bGwoY2hhciAqc3RyLCBzdHJ1Y3QgcmVnZXggKnIsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gY2FsbC0+ZmlsdGVyOworCWlmIChzdHJuY21wKHN0ciwgci0+cGF0dGVybiwgbGVuKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWdleF9tYXRjaF9mcm9udChjaGFyICpzdHIsIHN0cnVjdCByZWdleCAqciwgaW50IGxlbikKK3sKKwlpZiAoc3RybmNtcChzdHIsIHItPnBhdHRlcm4sIGxlbikgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnZXhfbWF0Y2hfbWlkZGxlKGNoYXIgKnN0ciwgc3RydWN0IHJlZ2V4ICpyLCBpbnQgbGVuKQoreworCWlmIChzdHJzdHIoc3RyLCByLT5wYXR0ZXJuKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnZXhfbWF0Y2hfZW5kKGNoYXIgKnN0ciwgc3RydWN0IHJlZ2V4ICpyLCBpbnQgbGVuKQoreworCWNoYXIgKnB0ciA9IHN0cnN0cihzdHIsIHItPnBhdHRlcm4pOworCisJaWYgKHB0ciAmJiAocHRyW3ItPmxlbl0gPT0gMCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpbHRlcl9wYXJzZV9yZWdleCAtIHBhcnNlIGEgYmFzaWMgcmVnZXgKKyAqIEBidWZmOiAgIHRoZSByYXcgcmVnZXgKKyAqIEBsZW46ICAgIGxlbmd0aCBvZiB0aGUgcmVnZXgKKyAqIEBzZWFyY2g6IHdpbGwgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIHRvIGNvbXBhcmUKKyAqIEBub3Q6ICAgIHRlbGwgd2hldGhlciB0aGUgbWF0Y2ggd2lsbCBoYXZlIHRvIGJlIGludmVydGVkCisgKgorICogVGhpcyBwYXNzZXMgaW4gYSBidWZmZXIgY29udGFpbmluZyBhIHJlZ2V4IGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqIHNldCBzZWFyY2ggdG8gcG9pbnQgdG8gdGhlIHNlYXJjaCBwYXJ0IG9mIHRoZSBidWZmZXIgYW5kCisgKiByZXR1cm4gdGhlIHR5cGUgb2Ygc2VhcmNoIGl0IGlzIChzZWUgZW51bSBhYm92ZSkuCisgKiBUaGlzIGRvZXMgbW9kaWZ5IGJ1ZmYuCisgKgorICogUmV0dXJucyBlbnVtIHR5cGUuCisgKiAgc2VhcmNoIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdXNlIGZvciBjb21wYXJpc29uLgorICogIG5vdCByZXR1cm5zIDEgaWYgYnVmZiBzdGFydGVkIHdpdGggYSAnIScKKyAqICAgICAwIG90aGVyd2lzZS4KKyAqLworZW51bSByZWdleF90eXBlIGZpbHRlcl9wYXJzZV9yZWdleChjaGFyICpidWZmLCBpbnQgbGVuLCBjaGFyICoqc2VhcmNoLCBpbnQgKm5vdCkKK3sKKwlpbnQgdHlwZSA9IE1BVENIX0ZVTEw7CisJaW50IGk7CisKKwlpZiAoYnVmZlswXSA9PSAnIScpIHsKKwkJKm5vdCA9IDE7CisJCWJ1ZmYrKzsKKwkJbGVuLS07CisJfSBlbHNlCisJCSpub3QgPSAwOworCisJKnNlYXJjaCA9IGJ1ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGJ1ZmZbaV0gPT0gJyonKSB7CisJCQlpZiAoIWkpIHsKKwkJCQkqc2VhcmNoID0gYnVmZiArIDE7CisJCQkJdHlwZSA9IE1BVENIX0VORF9PTkxZOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodHlwZSA9PSBNQVRDSF9FTkRfT05MWSkKKwkJCQkJdHlwZSA9IE1BVENIX01JRERMRV9PTkxZOworCQkJCWVsc2UKKwkJCQkJdHlwZSA9IE1BVENIX0ZST05UX09OTFk7CisJCQkJYnVmZltpXSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2J1aWxkX3JlZ2V4KHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlzdHJ1Y3QgcmVnZXggKnIgPSAmcHJlZC0+cmVnZXg7CisJY2hhciAqc2VhcmNoOworCWVudW0gcmVnZXhfdHlwZSB0eXBlID0gTUFUQ0hfRlVMTDsKKwlpbnQgbm90ID0gMDsKKworCWlmIChwcmVkLT5vcCA9PSBPUF9HTE9CKSB7CisJCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoci0+cGF0dGVybiwgci0+bGVuLCAmc2VhcmNoLCAmbm90KTsKKwkJci0+bGVuID0gc3RybGVuKHNlYXJjaCk7CisJCW1lbW1vdmUoci0+cGF0dGVybiwgc2VhcmNoLCByLT5sZW4rMSk7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQVRDSF9GVUxMOgorCQlyLT5tYXRjaCA9IHJlZ2V4X21hdGNoX2Z1bGw7CisJCWJyZWFrOworCWNhc2UgTUFUQ0hfRlJPTlRfT05MWToKKwkJci0+bWF0Y2ggPSByZWdleF9tYXRjaF9mcm9udDsKKwkJYnJlYWs7CisJY2FzZSBNQVRDSF9NSURETEVfT05MWToKKwkJci0+bWF0Y2ggPSByZWdleF9tYXRjaF9taWRkbGU7CisJCWJyZWFrOworCWNhc2UgTUFUQ0hfRU5EX09OTFk6CisJCXItPm1hdGNoID0gcmVnZXhfbWF0Y2hfZW5kOworCQlicmVhazsKKwl9CisKKwlwcmVkLT5ub3QgXj0gbm90OworfQorCisvKiByZXR1cm4gMSBpZiBldmVudCBtYXRjaGVzLCAwIG90aGVyd2lzZSAoZGlzY2FyZCkgKi8KK2ludCBmaWx0ZXJfbWF0Y2hfcHJlZHMoc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyLCB2b2lkICpyZWMpCit7CiAJaW50IG1hdGNoLCB0b3AgPSAwLCB2YWwxID0gMCwgdmFsMiA9IDA7CiAJaW50IHN0YWNrW01BWF9GSUxURVJfUFJFRF07CiAJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOwpAQCAtMzk2LDcgKzUwOCw3IEBACiB7CiAJa2ZyZWUocHJlZC0+ZmllbGRfbmFtZSk7CiAJcHJlZC0+ZmllbGRfbmFtZSA9IE5VTEw7Ci0JcHJlZC0+c3RyX2xlbiA9IDA7CisJcHJlZC0+cmVnZXgubGVuID0gMDsKIH0KIAogc3RhdGljIGludCBmaWx0ZXJfc2V0X3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpkZXN0LApAQCAtNDI2LDkgKzUzOCw4IEBACiAJCWZpbHRlci0+cHJlZHNbaV0tPmZuID0gZmlsdGVyX3ByZWRfbm9uZTsKIH0KIAotdm9pZCBkZXN0cm95X3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3N0YXRpYyB2b2lkIF9fZnJlZV9wcmVkcyhzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIpCiB7Ci0Jc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gY2FsbC0+ZmlsdGVyOwogCWludCBpOwogCiAJaWYgKCFmaWx0ZXIpCkBAIC00NDEsMjEgKzU1MiwyNCBAQAogCWtmcmVlKGZpbHRlci0+cHJlZHMpOwogCWtmcmVlKGZpbHRlci0+ZmlsdGVyX3N0cmluZyk7CiAJa2ZyZWUoZmlsdGVyKTsKLQljYWxsLT5maWx0ZXIgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGluaXRfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQordm9pZCBkZXN0cm95X3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlfX2ZyZWVfcHJlZHMoY2FsbC0+ZmlsdGVyKTsKKwljYWxsLT5maWx0ZXIgPSBOVUxMOworCWNhbGwtPmZpbHRlcl9hY3RpdmUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IGV2ZW50X2ZpbHRlciAqX19hbGxvY19wcmVkcyh2b2lkKQogewogCXN0cnVjdCBldmVudF9maWx0ZXIgKmZpbHRlcjsKIAlzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQ7CiAJaW50IGk7CiAKLQlpZiAoY2FsbC0+ZmlsdGVyKQotCQlyZXR1cm4gMDsKLQotCWZpbHRlciA9IGNhbGwtPmZpbHRlciA9IGt6YWxsb2Moc2l6ZW9mKCpmaWx0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbGwtPmZpbHRlcikKLQkJcmV0dXJuIC1FTk9NRU07CisJZmlsdGVyID0ga3phbGxvYyhzaXplb2YoKmZpbHRlciksIEdGUF9LRVJORUwpOworCWlmICghZmlsdGVyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWZpbHRlci0+bl9wcmVkcyA9IDA7CiAKQEAgLTQ3MSwxMiArNTg1LDI0IEBACiAJCWZpbHRlci0+cHJlZHNbaV0gPSBwcmVkOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBmaWx0ZXI7CiAKIG9vbToKLQlkZXN0cm95X3ByZWRzKGNhbGwpOworCV9fZnJlZV9wcmVkcyhmaWx0ZXIpOworCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQogCi0JcmV0dXJuIC1FTk9NRU07CitzdGF0aWMgaW50IGluaXRfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCWlmIChjYWxsLT5maWx0ZXIpCisJCXJldHVybiAwOworCisJY2FsbC0+ZmlsdGVyX2FjdGl2ZSA9IDA7CisJY2FsbC0+ZmlsdGVyID0gX19hbGxvY19wcmVkcygpOworCWlmIChJU19FUlIoY2FsbC0+ZmlsdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2FsbC0+ZmlsdGVyKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSkKQEAgLTQ5OSwxNCArNjI1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSB7Ci0JRklMVEVSX0RJU0FCTEVfQUxMLAotCUZJTFRFUl9JTklUX05PX1JFU0VULAotCUZJTFRFUl9TS0lQX05PX1JFU0VULAotfTsKLQotc3RhdGljIHZvaWQgZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKLQkJCQkJaW50IGZsYWcpCitzdGF0aWMgdm9pZCBmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKIApAQCAtNTE3LDE0ICs2MzYsNiBAQAogCQlpZiAoc3RyY21wKGNhbGwtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSAhPSAwKQogCQkJY29udGludWU7CiAKLQkJaWYgKGZsYWcgPT0gRklMVEVSX0lOSVRfTk9fUkVTRVQpIHsKLQkJCWNhbGwtPmZpbHRlci0+bm9fcmVzZXQgPSBmYWxzZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGZsYWcgPT0gRklMVEVSX1NLSVBfTk9fUkVTRVQgJiYgY2FsbC0+ZmlsdGVyLT5ub19yZXNldCkKLQkJCWNvbnRpbnVlOwotCiAJCWZpbHRlcl9kaXNhYmxlX3ByZWRzKGNhbGwpOwogCQlyZW1vdmVfZmlsdGVyX3N0cmluZyhjYWxsLT5maWx0ZXIpOwogCX0KQEAgLTUzMiwxMCArNjQzLDEwIEBACiAKIHN0YXRpYyBpbnQgZmlsdGVyX2FkZF9wcmVkX2ZuKHN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzLAogCQkJICAgICAgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJICAgICAgc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyLAogCQkJICAgICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLAogCQkJICAgICAgZmlsdGVyX3ByZWRfZm5fdCBmbikKIHsKLQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBjYWxsLT5maWx0ZXI7CiAJaW50IGlkeCwgZXJyOwogCiAJaWYgKGZpbHRlci0+bl9wcmVkcyA9PSBNQVhfRklMVEVSX1BSRUQpIHsKQEAgLTU1MCw3ICs2NjEsNiBAQAogCQlyZXR1cm4gZXJyOwogCiAJZmlsdGVyLT5uX3ByZWRzKys7Ci0JY2FsbC0+ZmlsdGVyX2FjdGl2ZSA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3NSw3ICs2ODUsMTAgQEAKIAogc3RhdGljIGludCBpc19sZWdhbF9vcChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZCwgaW50IG9wKQogewotCWlmIChpc19zdHJpbmdfZmllbGQoZmllbGQpICYmIChvcCAhPSBPUF9FUSAmJiBvcCAhPSBPUF9ORSkpCisJaWYgKGlzX3N0cmluZ19maWVsZChmaWVsZCkgJiYKKwkgICAgKG9wICE9IE9QX0VRICYmIG9wICE9IE9QX05FICYmIG9wICE9IE9QX0dMT0IpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlzX3N0cmluZ19maWVsZChmaWVsZCkgJiYgb3AgPT0gT1BfR0xPQikKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTYyNiw2ICs3MzksNyBAQAogCiBzdGF0aWMgaW50IGZpbHRlcl9hZGRfcHJlZChzdHJ1Y3QgZmlsdGVyX3BhcnNlX3N0YXRlICpwcywKIAkJCSAgIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCSAgIHN0cnVjdCBldmVudF9maWx0ZXIgKmZpbHRlciwKIAkJCSAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwKIAkJCSAgIGJvb2wgZHJ5X3J1bikKIHsKQEAgLTY2MCwyMSArNzc0LDIyIEBACiAJfQogCiAJaWYgKGlzX3N0cmluZ19maWVsZChmaWVsZCkpIHsKLQkJcHJlZC0+c3RyX2xlbiA9IGZpZWxkLT5zaXplOworCQlmaWx0ZXJfYnVpbGRfcmVnZXgocHJlZCk7CiAKLQkJaWYgKGZpZWxkLT5maWx0ZXJfdHlwZSA9PSBGSUxURVJfU1RBVElDX1NUUklORykKKwkJaWYgKGZpZWxkLT5maWx0ZXJfdHlwZSA9PSBGSUxURVJfU1RBVElDX1NUUklORykgewogCQkJZm4gPSBmaWx0ZXJfcHJlZF9zdHJpbmc7Ci0JCWVsc2UgaWYgKGZpZWxkLT5maWx0ZXJfdHlwZSA9PSBGSUxURVJfRFlOX1NUUklORykKKwkJCXByZWQtPnJlZ2V4LmZpZWxkX2xlbiA9IGZpZWxkLT5zaXplOworCQl9IGVsc2UgaWYgKGZpZWxkLT5maWx0ZXJfdHlwZSA9PSBGSUxURVJfRFlOX1NUUklORykKIAkJCWZuID0gZmlsdGVyX3ByZWRfc3RybG9jOwogCQllbHNlIHsKIAkJCWZuID0gZmlsdGVyX3ByZWRfcGNoYXI7Ci0JCQlwcmVkLT5zdHJfbGVuID0gc3RybGVuKHByZWQtPnN0cl92YWwpOworCQkJcHJlZC0+cmVnZXguZmllbGRfbGVuID0gc3RybGVuKHByZWQtPnJlZ2V4LnBhdHRlcm4pOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGZpZWxkLT5pc19zaWduZWQpCi0JCQlyZXQgPSBzdHJpY3Rfc3RydG9sbChwcmVkLT5zdHJfdmFsLCAwLCAmdmFsKTsKKwkJCXJldCA9IHN0cmljdF9zdHJ0b2xsKHByZWQtPnJlZ2V4LnBhdHRlcm4sIDAsICZ2YWwpOwogCQllbHNlCi0JCQlyZXQgPSBzdHJpY3Rfc3RydG91bGwocHJlZC0+c3RyX3ZhbCwgMCwgJnZhbCk7CisJCQlyZXQgPSBzdHJpY3Rfc3RydG91bGwocHJlZC0+cmVnZXgucGF0dGVybiwgMCwgJnZhbCk7CiAJCWlmIChyZXQpIHsKIAkJCXBhcnNlX2Vycm9yKHBzLCBGSUxUX0VSUl9JTExFR0FMX0lOVFZBTCwgMCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5NCw0NSArODA5LDcgQEAKIAogYWRkX3ByZWRfZm46CiAJaWYgKCFkcnlfcnVuKQotCQlyZXR1cm4gZmlsdGVyX2FkZF9wcmVkX2ZuKHBzLCBjYWxsLCBwcmVkLCBmbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChzdHJ1Y3QgZmlsdGVyX3BhcnNlX3N0YXRlICpwcywKLQkJCQkgICAgIHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKLQkJCQkgICAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwKLQkJCQkgICAgIGNoYXIgKmZpbHRlcl9zdHJpbmcsCi0JCQkJICAgICBib29sIGRyeV9ydW4pCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwotCWludCBlcnIgPSAwOwotCWJvb2wgZmFpbCA9IHRydWU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7Ci0KLQkJaWYgKCFjYWxsLT5kZWZpbmVfZmllbGRzKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0cmNtcChjYWxsLT5zeXN0ZW0sIHN5c3RlbS0+bmFtZSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoY2FsbC0+ZmlsdGVyLT5ub19yZXNldCkKLQkJCWNvbnRpbnVlOwotCi0JCWVyciA9IGZpbHRlcl9hZGRfcHJlZChwcywgY2FsbCwgcHJlZCwgZHJ5X3J1bik7Ci0JCWlmIChlcnIpCi0JCQljYWxsLT5maWx0ZXItPm5vX3Jlc2V0ID0gdHJ1ZTsKLQkJZWxzZQotCQkJZmFpbCA9IGZhbHNlOwotCi0JCWlmICghZHJ5X3J1bikKLQkJCXJlcGxhY2VfZmlsdGVyX3N0cmluZyhjYWxsLT5maWx0ZXIsIGZpbHRlcl9zdHJpbmcpOwotCX0KLQotCWlmIChmYWlsKSB7Ci0JCXBhcnNlX2Vycm9yKHBzLCBGSUxUX0VSUl9CQURfU1VCU1lTX0ZJTFRFUiwgMCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQlyZXR1cm4gZmlsdGVyX2FkZF9wcmVkX2ZuKHBzLCBjYWxsLCBmaWx0ZXIsIHByZWQsIGZuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMzLDggKzEwMTAsOSBAQAogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcy0+cG9zdGZpeCkpIHsKIAkJZWx0ID0gbGlzdF9maXJzdF9lbnRyeSgmcHMtPnBvc3RmaXgsIHN0cnVjdCBwb3N0Zml4X2VsdCwgbGlzdCk7Ci0JCWtmcmVlKGVsdC0+b3BlcmFuZCk7CiAJCWxpc3RfZGVsKCZlbHQtPmxpc3QpOworCQlrZnJlZShlbHQtPm9wZXJhbmQpOworCQlrZnJlZShlbHQpOwogCX0KIH0KIApAQCAtMTA0NCw4ICsxMTIyLDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3RyY3B5KHByZWQtPnN0cl92YWwsIG9wZXJhbmQyKTsKLQlwcmVkLT5zdHJfbGVuID0gc3RybGVuKG9wZXJhbmQyKTsKKwlzdHJjcHkocHJlZC0+cmVnZXgucGF0dGVybiwgb3BlcmFuZDIpOworCXByZWQtPnJlZ2V4LmxlbiA9IHN0cmxlbihwcmVkLT5yZWdleC5wYXR0ZXJuKTsKIAogCXByZWQtPm9wID0gb3A7CiAKQEAgLTEwODksOCArMTE2Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVwbGFjZV9wcmVkcyhzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0sCi0JCQkgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorc3RhdGljIGludCByZXBsYWNlX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCSBzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIsCiAJCQkgc3RydWN0IGZpbHRlcl9wYXJzZV9zdGF0ZSAqcHMsCiAJCQkgY2hhciAqZmlsdGVyX3N0cmluZywKIAkJCSBib29sIGRyeV9ydW4pCkBAIC0xMTM3LDExICsxMjE1LDcgQEAKIGFkZF9wcmVkOgogCQlpZiAoIXByZWQpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKGNhbGwpCi0JCQllcnIgPSBmaWx0ZXJfYWRkX3ByZWQocHMsIGNhbGwsIHByZWQsIGZhbHNlKTsKLQkJZWxzZQotCQkJZXJyID0gZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChwcywgc3lzdGVtLCBwcmVkLAotCQkJCQkJZmlsdGVyX3N0cmluZywgZHJ5X3J1bik7CisJCWVyciA9IGZpbHRlcl9hZGRfcHJlZChwcywgY2FsbCwgZmlsdGVyLCBwcmVkLCBkcnlfcnVuKTsKIAkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xMTUyLDEwICsxMjI2LDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmVwbGFjZV9zeXN0ZW1fcHJlZHMoc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtLAorCQkJCXN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzLAorCQkJCWNoYXIgKmZpbHRlcl9zdHJpbmcpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOworCWJvb2wgZmFpbCA9IHRydWU7CisJaW50IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKKwkJc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gY2FsbC0+ZmlsdGVyOworCisJCWlmICghY2FsbC0+ZGVmaW5lX2ZpZWxkcykKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiB0cnkgdG8gc2VlIGlmIHRoZSBmaWx0ZXIgY2FuIGJlIGFwcGxpZWQgKi8KKwkJZXJyID0gcmVwbGFjZV9wcmVkcyhjYWxsLCBmaWx0ZXIsIHBzLCBmaWx0ZXJfc3RyaW5nLCB0cnVlKTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCisJCS8qIHJlYWxseSBhcHBseSB0aGUgZmlsdGVyICovCisJCWZpbHRlcl9kaXNhYmxlX3ByZWRzKGNhbGwpOworCQllcnIgPSByZXBsYWNlX3ByZWRzKGNhbGwsIGZpbHRlciwgcHMsIGZpbHRlcl9zdHJpbmcsIGZhbHNlKTsKKwkJaWYgKGVycikKKwkJCWZpbHRlcl9kaXNhYmxlX3ByZWRzKGNhbGwpOworCQllbHNlIHsKKwkJCWNhbGwtPmZpbHRlcl9hY3RpdmUgPSAxOworCQkJcmVwbGFjZV9maWx0ZXJfc3RyaW5nKGZpbHRlciwgZmlsdGVyX3N0cmluZyk7CisJCX0KKwkJZmFpbCA9IGZhbHNlOworCX0KKworCWlmIChmYWlsKSB7CisJCXBhcnNlX2Vycm9yKHBzLCBGSUxUX0VSUl9CQURfU1VCU1lTX0ZJTFRFUiwgMCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGFwcGx5X2V2ZW50X2ZpbHRlcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNoYXIgKmZpbHRlcl9zdHJpbmcpCiB7CiAJaW50IGVycjsKLQogCXN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzOwogCiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwpAQCAtMTE2Nyw4ICsxMjgxLDcgQEAKIAlpZiAoIXN0cmNtcChzdHJzdHJpcChmaWx0ZXJfc3RyaW5nKSwgIjAiKSkgewogCQlmaWx0ZXJfZGlzYWJsZV9wcmVkcyhjYWxsKTsKIAkJcmVtb3ZlX2ZpbHRlcl9zdHJpbmcoY2FsbC0+ZmlsdGVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJZXJyID0gLUVOT01FTTsKQEAgLTExODYsMTAgKzEyOTksMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gcmVwbGFjZV9wcmVkcyhOVUxMLCBjYWxsLCBwcywgZmlsdGVyX3N0cmluZywgZmFsc2UpOworCWVyciA9IHJlcGxhY2VfcHJlZHMoY2FsbCwgY2FsbC0+ZmlsdGVyLCBwcywgZmlsdGVyX3N0cmluZywgZmFsc2UpOwogCWlmIChlcnIpCiAJCWFwcGVuZF9maWx0ZXJfZXJyKHBzLCBjYWxsLT5maWx0ZXIpOwotCisJZWxzZQorCQljYWxsLT5maWx0ZXJfYWN0aXZlID0gMTsKIG91dDoKIAlmaWx0ZXJfb3BzdGFja19jbGVhcihwcyk7CiAJcG9zdGZpeF9jbGVhcihwcyk7CkBAIC0xMjA0LDcgKzEzMTgsNiBAQAogCQkJCSBjaGFyICpmaWx0ZXJfc3RyaW5nKQogewogCWludCBlcnI7Ci0KIAlzdHJ1Y3QgZmlsdGVyX3BhcnNlX3N0YXRlICpwczsKIAogCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKQEAgLTEyMTQsMTAgKzEzMjcsOSBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoIXN0cmNtcChzdHJzdHJpcChmaWx0ZXJfc3RyaW5nKSwgIjAiKSkgewotCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtLCBGSUxURVJfRElTQUJMRV9BTEwpOworCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKIAkJcmVtb3ZlX2ZpbHRlcl9zdHJpbmcoc3lzdGVtLT5maWx0ZXIpOwotCQltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAllcnIgPSAtRU5PTUVNOwpAQCAtMTIzNCwyMyArMTM0Niw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzeXN0ZW0sIEZJTFRFUl9JTklUX05PX1JFU0VUKTsKLQotCS8qIHRyeSB0byBzZWUgdGhlIGZpbHRlciBjYW4gYmUgYXBwbGllZCB0byB3aGljaCBldmVudHMgKi8KLQllcnIgPSByZXBsYWNlX3ByZWRzKHN5c3RlbSwgTlVMTCwgcHMsIGZpbHRlcl9zdHJpbmcsIHRydWUpOwotCWlmIChlcnIpIHsKKwllcnIgPSByZXBsYWNlX3N5c3RlbV9wcmVkcyhzeXN0ZW0sIHBzLCBmaWx0ZXJfc3RyaW5nKTsKKwlpZiAoZXJyKQogCQlhcHBlbmRfZmlsdGVyX2Vycihwcywgc3lzdGVtLT5maWx0ZXIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtLCBGSUxURVJfU0tJUF9OT19SRVNFVCk7Ci0KLQkvKiByZWFsbHkgYXBwbHkgdGhlIGZpbHRlciB0byB0aGUgZXZlbnRzICovCi0JZXJyID0gcmVwbGFjZV9wcmVkcyhzeXN0ZW0sIE5VTEwsIHBzLCBmaWx0ZXJfc3RyaW5nLCBmYWxzZSk7Ci0JaWYgKGVycikgewotCQlhcHBlbmRfZmlsdGVyX2Vycihwcywgc3lzdGVtLT5maWx0ZXIpOwotCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtLCAyKTsKLQl9CiAKIG91dDoKIAlmaWx0ZXJfb3BzdGFja19jbGVhcihwcyk7CkBAIC0xMjYyLDMgKzEzNjAsNzMgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKwordm9pZCBmdHJhY2VfcHJvZmlsZV9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gZXZlbnQtPmZpbHRlcjsKKworCWV2ZW50LT5maWx0ZXIgPSBOVUxMOworCV9fZnJlZV9wcmVkcyhmaWx0ZXIpOworfQorCitpbnQgZnRyYWNlX3Byb2ZpbGVfc2V0X2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBldmVudF9pZCwKKwkJCSAgICAgIGNoYXIgKmZpbHRlcl9zdHIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXI7CisJc3RydWN0IGZpbHRlcl9wYXJzZV9zdGF0ZSAqcHM7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gTlVMTDsKKworCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKKwkJaWYgKGNhbGwtPmlkID09IGV2ZW50X2lkKQorCQkJYnJlYWs7CisJfQorCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoIWNhbGwpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWVyciA9IC1FRVhJU1Q7CisJaWYgKGV2ZW50LT5maWx0ZXIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWZpbHRlciA9IF9fYWxsb2NfcHJlZHMoKTsKKwlpZiAoSVNfRVJSKGZpbHRlcikpIHsKKwkJZXJyID0gUFRSX0VSUihmaWx0ZXIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJZXJyID0gLUVOT01FTTsKKwlwcyA9IGt6YWxsb2Moc2l6ZW9mKCpwcyksIEdGUF9LRVJORUwpOworCWlmICghcHMpCisJCWdvdG8gZnJlZV9wcmVkczsKKworCXBhcnNlX2luaXQocHMsIGZpbHRlcl9vcHMsIGZpbHRlcl9zdHIpOworCWVyciA9IGZpbHRlcl9wYXJzZShwcyk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3BzOworCisJZXJyID0gcmVwbGFjZV9wcmVkcyhjYWxsLCBmaWx0ZXIsIHBzLCBmaWx0ZXJfc3RyLCBmYWxzZSk7CisJaWYgKCFlcnIpCisJCWV2ZW50LT5maWx0ZXIgPSBmaWx0ZXI7CisKK2ZyZWVfcHM6CisJZmlsdGVyX29wc3RhY2tfY2xlYXIocHMpOworCXBvc3RmaXhfY2xlYXIocHMpOworCWtmcmVlKHBzKTsKKworZnJlZV9wcmVkczoKKwlpZiAoZXJyKQorCQlfX2ZyZWVfcHJlZHMoZmlsdGVyKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKKworCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggOTc1M2ZjYy4uZGZmOGM4NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtNDgsMTEgKzQ4LDExIEBACiBzdHJ1Y3QgX19fX2Z0cmFjZV8jI25hbWUgewkJCQkJXAogCXRzdHJ1Y3QJCQkJCQkJXAogfTsJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIF9fdXNlZCBfX19fZnRyYWNlX2NoZWNrXyMjbmFtZSh2b2lkKQkJXAorc3RhdGljIHZvaWQgX19hbHdheXNfdW51c2VkIF9fX19mdHJhY2VfY2hlY2tfIyNuYW1lKHZvaWQpCVwKIHsJCQkJCQkJCVwKIAlzdHJ1Y3QgX19fX2Z0cmFjZV8jI25hbWUgKl9fZW50cnkgPSBOVUxMOwkJXAogCQkJCQkJCQlcCi0JLyogZm9yY2UgY21waWxlLXRpbWUgY2hlY2sgb24gRl9wcmludGsoKSAqLwkJXAorCS8qIGZvcmNlIGNvbXBpbGUtdGltZSBjaGVjayBvbiBGX3ByaW50aygpICovCQlcCiAJcHJpbnRrKHByaW50KTsJCQkJCQlcCiB9CiAKQEAgLTY2LDQ0ICs2Niw0NyBAQAogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIiwJCVwKKwkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAogCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5pdGVtKSk7CQkJXAorCQkJICAgICAgIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkpOyBcCiAJaWYgKCFyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIDA7CiAKICN1bmRlZiBfX2ZpZWxkX2Rlc2MKICNkZWZpbmUgX19maWVsZF9kZXNjKHR5cGUsIGNvbnRhaW5lciwgaXRlbSkJCQkJXAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iLAkJXAorCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCiAJCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgY29udGFpbmVyLml0ZW0pLAlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLmNvbnRhaW5lci5pdGVtKSk7CQlcCisJCQkgICAgICAgc2l6ZW9mKGZpZWxkLmNvbnRhaW5lci5pdGVtKSwJCVwKKwkJCSAgICAgICBpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAogCWlmICghcmV0KQkJCQkJCQlcCiAJCXJldHVybiAwOwogCiAjdW5kZWYgX19hcnJheQogI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCVwKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IiBcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcbiIsCQlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuaXRlbSkpOwkJXAorCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCisJCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCisJCQkgICAgICAgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7IFwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gMDsKIAogI3VuZGVmIF9fYXJyYXlfZGVzYwogI2RlZmluZSBfX2FycmF5X2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtLCBsZW4pCQkJXAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiIFwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIiwJCVwKKwkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAogCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbnRhaW5lci5pdGVtKSwJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSkpOwkJXAorCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCisJCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKIAlpZiAoIXJldCkJCQkJCQkJXAogCQlyZXR1cm4gMDsKIAogI3VuZGVmIF9fZHluYW1pY19hcnJheQogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkJCQkJCVwKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6MDtcbiIsCQlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSkpOwkJXAorCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTowO1x0c2lnbmVkOiV1O1xuIiwJXAorCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAorCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCiAJaWYgKCFyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIDA7CiAKQEAgLTEzMSw3ICsxMzQsNiBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCi0KICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCQlcCiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKQEAgLTE5Myw2ICsxOTUsMTEgQEAKIAogI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKIAorc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCUlOSVRfTElTVF9IRUFEKCZjYWxsLT5maWVsZHMpOworCXJldHVybiAwOworfQogCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCkBAIC0yMTEsNyArMjE4LDYgQEAKIAogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkoY2FsbCwgc3RydWN0X25hbWUsIHR5cGUsIHRzdHJ1Y3QsIHByaW50KQkJXAotc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsKHZvaWQpOwkJCQlcCiAJCQkJCQkJCQlcCiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKQEAgLTIxOSwxNCArMjI1LDkgQEAKIAkubmFtZQkJCT0gI2NhbGwsCQkJCVwKIAkuaWQJCQk9IHR5cGUsCQkJCQlcCiAJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKLQkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCwJCVwKKwkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50LAkJXAogCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjY2FsbCwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsLAkJXAogfTsJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF8jI2NhbGwodm9pZCkJCQkJXAotewkJCQkJCQkJCVwKLQlJTklUX0xJU1RfSEVBRCgmZXZlbnRfIyNjYWxsLmZpZWxkcyk7CQkJCVwKLQlyZXR1cm4gMDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKIAogI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmY1ZjgwCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC0wLDAgKzEsMTUyMyBAQAorLyoKKyAqIEtwcm9iZXMtYmFzZWQgdHJhY2luZyBldmVudHMKKyAqCisgKiBDcmVhdGVkIGJ5IE1hc2FtaSBIaXJhbWF0c3UgPG1oaXJhbWF0QHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorCisjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworI2RlZmluZSBNQVhfVFJBQ0VfQVJHUyAxMjgKKyNkZWZpbmUgTUFYX0FSR1NUUl9MRU4gNjMKKyNkZWZpbmUgTUFYX0VWRU5UX05BTUVfTEVOIDY0CisjZGVmaW5lIEtQUk9CRV9FVkVOVF9TWVNURU0gImtwcm9iZXMiCisKKy8qIFJlc2VydmVkIGZpZWxkIG5hbWVzICovCisjZGVmaW5lIEZJRUxEX1NUUklOR19JUCAiX19wcm9iZV9pcCIKKyNkZWZpbmUgRklFTERfU1RSSU5HX05BUkdTICJfX3Byb2JlX25hcmdzIgorI2RlZmluZSBGSUVMRF9TVFJJTkdfUkVUSVAgIl9fcHJvYmVfcmV0X2lwIgorI2RlZmluZSBGSUVMRF9TVFJJTkdfRlVOQyAiX19wcm9iZV9mdW5jIgorCitjb25zdCBjaGFyICpyZXNlcnZlZF9maWVsZF9uYW1lc1tdID0geworCSJjb21tb25fdHlwZSIsCisJImNvbW1vbl9mbGFncyIsCisJImNvbW1vbl9wcmVlbXB0X2NvdW50IiwKKwkiY29tbW9uX3BpZCIsCisJImNvbW1vbl90Z2lkIiwKKwkiY29tbW9uX2xvY2tfZGVwdGgiLAorCUZJRUxEX1NUUklOR19JUCwKKwlGSUVMRF9TVFJJTkdfTkFSR1MsCisJRklFTERfU1RSSU5HX1JFVElQLAorCUZJRUxEX1NUUklOR19GVU5DLAorfTsKKworc3RydWN0IGZldGNoX2Z1bmMgeworCXVuc2lnbmVkIGxvbmcgKCpmdW5jKShzdHJ1Y3QgcHRfcmVncyAqLCB2b2lkICopOworCXZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgY2FsbF9mZXRjaChzdHJ1Y3QgZmV0Y2hfZnVuYyAqZiwKKwkJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gZi0+ZnVuYyhyZWdzLCBmLT5kYXRhKTsKK30KKworLyogZmV0Y2ggaGFuZGxlcnMgKi8KK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9yZWdpc3RlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgICAgdm9pZCAqb2Zmc2V0KQoreworCXJldHVybiByZWdzX2dldF9yZWdpc3RlcihyZWdzLCAodW5zaWduZWQgaW50KSgodW5zaWduZWQgbG9uZylvZmZzZXQpKTsKK30KKworc3RhdGljIF9fa3Byb2JlcyB1bnNpZ25lZCBsb25nIGZldGNoX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICB2b2lkICpudW0pCit7CisJcmV0dXJuIHJlZ3NfZ2V0X2tlcm5lbF9zdGFja19udGgocmVncywKKwkJCQkJICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW51bSkpOworfQorCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfbWVtb3J5KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCisJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKGFkZHIsIHJldHZhbCkpCisJCXJldHVybiAwOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9hcmd1bWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqbnVtKQoreworCXJldHVybiByZWdzX2dldF9hcmd1bWVudF9udGgocmVncywgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpbnVtKSk7Cit9CisKK3N0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9yZXR2YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgICAgdm9pZCAqZHVtbXkpCit7CisJcmV0dXJuIHJlZ3NfcmV0dXJuX3ZhbHVlKHJlZ3MpOworfQorCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfc3RhY2tfYWRkcmVzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJCSAgIHZvaWQgKmR1bW15KQoreworCXJldHVybiBrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKTsKK30KKworLyogTWVtb3J5IGZldGNoaW5nIGJ5IHN5bWJvbCAqLworc3RydWN0IHN5bWJvbF9jYWNoZSB7CisJY2hhciAqc3ltYm9sOworCWxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgYWRkcjsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVwZGF0ZV9zeW1ib2xfY2FjaGUoc3RydWN0IHN5bWJvbF9jYWNoZSAqc2MpCit7CisJc2MtPmFkZHIgPSAodW5zaWduZWQgbG9uZylrYWxsc3ltc19sb29rdXBfbmFtZShzYy0+c3ltYm9sKTsKKwlpZiAoc2MtPmFkZHIpCisJCXNjLT5hZGRyICs9IHNjLT5vZmZzZXQ7CisJcmV0dXJuIHNjLT5hZGRyOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N5bWJvbF9jYWNoZShzdHJ1Y3Qgc3ltYm9sX2NhY2hlICpzYykKK3sKKwlrZnJlZShzYy0+c3ltYm9sKTsKKwlrZnJlZShzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sX2NhY2hlICphbGxvY19zeW1ib2xfY2FjaGUoY29uc3QgY2hhciAqc3ltLCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX2NhY2hlICpzYzsKKworCWlmICghc3ltIHx8IHN0cmxlbihzeW0pID09IDApCisJCXJldHVybiBOVUxMOworCXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5bWJvbF9jYWNoZSksIEdGUF9LRVJORUwpOworCWlmICghc2MpCisJCXJldHVybiBOVUxMOworCisJc2MtPnN5bWJvbCA9IGtzdHJkdXAoc3ltLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjLT5zeW1ib2wpIHsKKwkJa2ZyZWUoc2MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2MtPm9mZnNldCA9IG9mZnNldDsKKworCXVwZGF0ZV9zeW1ib2xfY2FjaGUoc2MpOworCXJldHVybiBzYzsKK30KKworc3RhdGljIF9fa3Byb2JlcyB1bnNpZ25lZCBsb25nIGZldGNoX3N5bWJvbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX2NhY2hlICpzYyA9IGRhdGE7CisKKwlpZiAoc2MtPmFkZHIpCisJCXJldHVybiBmZXRjaF9tZW1vcnkocmVncywgKHZvaWQgKilzYy0+YWRkcik7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogU3BlY2lhbCBpbmRpcmVjdCBtZW1vcnkgYWNjZXNzIGludGVyZmFjZSAqLworc3RydWN0IGluZGlyZWN0X2ZldGNoX2RhdGEgeworCXN0cnVjdCBmZXRjaF9mdW5jIG9yaWc7CisJbG9uZyBvZmZzZXQ7Cit9OworCitzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfaW5kaXJlY3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluZGlyZWN0X2ZldGNoX2RhdGEgKmluZCA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IGNhbGxfZmV0Y2goJmluZC0+b3JpZywgcmVncyk7CisJaWYgKGFkZHIpIHsKKwkJYWRkciArPSBpbmQtPm9mZnNldDsKKwkJcmV0dXJuIGZldGNoX21lbW9yeShyZWdzLCAodm9pZCAqKWFkZHIpOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGZyZWVfaW5kaXJlY3RfZmV0Y2hfZGF0YShzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSAqZGF0YSkKK3sKKwlpZiAoZGF0YS0+b3JpZy5mdW5jID09IGZldGNoX2luZGlyZWN0KQorCQlmcmVlX2luZGlyZWN0X2ZldGNoX2RhdGEoZGF0YS0+b3JpZy5kYXRhKTsKKwllbHNlIGlmIChkYXRhLT5vcmlnLmZ1bmMgPT0gZmV0Y2hfc3ltYm9sKQorCQlmcmVlX3N5bWJvbF9jYWNoZShkYXRhLT5vcmlnLmRhdGEpOworCWtmcmVlKGRhdGEpOworfQorCisvKioKKyAqIEtwcm9iZSBldmVudCBjb3JlIGZ1bmN0aW9ucworICovCisKK3N0cnVjdCBwcm9iZV9hcmcgeworCXN0cnVjdCBmZXRjaF9mdW5jCWZldGNoOworCWNvbnN0IGNoYXIJCSpuYW1lOworfTsKKworLyogRmxhZ3MgZm9yIHRyYWNlX3Byb2JlICovCisjZGVmaW5lIFRQX0ZMQUdfVFJBQ0UJMQorI2RlZmluZSBUUF9GTEFHX1BST0ZJTEUJMgorCitzdHJ1Y3QgdHJhY2VfcHJvYmUgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3Qga3JldHByb2JlCXJwOwkvKiBVc2UgcnAua3AgZm9yIGtwcm9iZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nIAkJbmhpdDsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzOwkvKiBGb3IgVFBfRkxBR18qICovCisJY29uc3QgY2hhcgkJKnN5bWJvbDsJLyogc3ltYm9sIG5hbWUgKi8KKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJY2FsbDsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQJCWV2ZW50OworCXVuc2lnbmVkIGludAkJbnJfYXJnczsKKwlzdHJ1Y3QgcHJvYmVfYXJnCWFyZ3NbXTsKK307CisKKyNkZWZpbmUgU0laRU9GX1RSQUNFX1BST0JFKG4pCQkJXAorCShvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfcHJvYmUsIGFyZ3MpICsJXAorCShzaXplb2Yoc3RydWN0IHByb2JlX2FyZykgKiAobikpKQorCitzdGF0aWMgX19rcHJvYmVzIGludCBwcm9iZV9pc19yZXR1cm4oc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKK3sKKwlyZXR1cm4gdHAtPnJwLmhhbmRsZXIgIT0gTlVMTDsKK30KKworc3RhdGljIF9fa3Byb2JlcyBjb25zdCBjaGFyICpwcm9iZV9zeW1ib2woc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKK3sKKwlyZXR1cm4gdHAtPnN5bWJvbCA/IHRwLT5zeW1ib2wgOiAidW5rbm93biI7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfYXJnX3N0cmluZyhjaGFyICpidWYsIHNpemVfdCBuLCBzdHJ1Y3QgZmV0Y2hfZnVuYyAqZmYpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfYXJndW1lbnQpCisJCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiRhcmclbHUiLCAodW5zaWduZWQgbG9uZylmZi0+ZGF0YSk7CisJZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJbmFtZSA9IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgodW5zaWduZWQgaW50KSgobG9uZylmZi0+ZGF0YSkpOworCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIlJSVzIiwgbmFtZSk7CisJfSBlbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9zdGFjaykKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJHN0YWNrJWx1IiwgKHVuc2lnbmVkIGxvbmcpZmYtPmRhdGEpOworCWVsc2UgaWYgKGZmLT5mdW5jID09IGZldGNoX21lbW9yeSkKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiQDB4JXAiLCBmZi0+ZGF0YSk7CisJZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfc3ltYm9sKSB7CisJCXN0cnVjdCBzeW1ib2xfY2FjaGUgKnNjID0gZmYtPmRhdGE7CisJCWlmIChzYy0+b2Zmc2V0KQorCQkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiQCVzJStsZCIsIHNjLT5zeW1ib2wsCisJCQkJCXNjLT5vZmZzZXQpOworCQllbHNlCisJCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICJAJXMiLCBzYy0+c3ltYm9sKTsKKwl9IGVsc2UgaWYgKGZmLT5mdW5jID09IGZldGNoX3JldHZhbHVlKQorCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIkcmV0dmFsIik7CisJZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfc3RhY2tfYWRkcmVzcykKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJHN0YWNrIik7CisJZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfaW5kaXJlY3QpIHsKKwkJc3RydWN0IGluZGlyZWN0X2ZldGNoX2RhdGEgKmlkID0gZmYtPmRhdGE7CisJCXNpemVfdCBsID0gMDsKKwkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJStsZCgiLCBpZC0+b2Zmc2V0KTsKKwkJaWYgKHJldCA+PSBuKQorCQkJZ290byBlbmQ7CisJCWwgKz0gcmV0OworCQlyZXQgPSBwcm9iZV9hcmdfc3RyaW5nKGJ1ZiArIGwsIG4gLSBsLCAmaWQtPm9yaWcpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZW5kOworCQlsICs9IHJldDsKKwkJcmV0ID0gc25wcmludGYoYnVmICsgbCwgbiAtIGwsICIpIik7CisJCXJldCArPSBsOworCX0KK2VuZDoKKwlpZiAocmV0ID49IG4pCisJCXJldHVybiAtRU5PU1BDOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcHJvYmVfZXZlbnQoc3RydWN0IHRyYWNlX3Byb2JlICp0cCk7CitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Byb2JlX2V2ZW50KHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApOworCitzdGF0aWMgREVGSU5FX01VVEVYKHByb2JlX2xvY2spOworc3RhdGljIExJU1RfSEVBRChwcm9iZV9saXN0KTsKKworc3RhdGljIGludCBrcHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3Byb2JlICprcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCBrcmV0cHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBBbGxvY2F0ZSBuZXcgdHJhY2VfcHJvYmUgYW5kIGluaXRpYWxpemUgaXQgKGluY2x1ZGluZyBrcHJvYmVzKS4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFjZV9wcm9iZSAqYWxsb2NfdHJhY2VfcHJvYmUoY29uc3QgY2hhciAqZ3JvdXAsCisJCQkJCSAgICAgY29uc3QgY2hhciAqZXZlbnQsCisJCQkJCSAgICAgdm9pZCAqYWRkciwKKwkJCQkJICAgICBjb25zdCBjaGFyICpzeW1ib2wsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzLAorCQkJCQkgICAgIGludCBuYXJncywgaW50IGlzX3JldHVybikKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCisJdHAgPSBremFsbG9jKFNJWkVPRl9UUkFDRV9QUk9CRShuYXJncyksIEdGUF9LRVJORUwpOworCWlmICghdHApCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKHN5bWJvbCkgeworCQl0cC0+c3ltYm9sID0ga3N0cmR1cChzeW1ib2wsIEdGUF9LRVJORUwpOworCQlpZiAoIXRwLT5zeW1ib2wpCisJCQlnb3RvIGVycm9yOworCQl0cC0+cnAua3Auc3ltYm9sX25hbWUgPSB0cC0+c3ltYm9sOworCQl0cC0+cnAua3Aub2Zmc2V0ID0gb2ZmczsKKwl9IGVsc2UKKwkJdHAtPnJwLmtwLmFkZHIgPSBhZGRyOworCisJaWYgKGlzX3JldHVybikKKwkJdHAtPnJwLmhhbmRsZXIgPSBrcmV0cHJvYmVfZGlzcGF0Y2hlcjsKKwllbHNlCisJCXRwLT5ycC5rcC5wcmVfaGFuZGxlciA9IGtwcm9iZV9kaXNwYXRjaGVyOworCisJaWYgKCFldmVudCkKKwkJZ290byBlcnJvcjsKKwl0cC0+Y2FsbC5uYW1lID0ga3N0cmR1cChldmVudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cC0+Y2FsbC5uYW1lKQorCQlnb3RvIGVycm9yOworCisJaWYgKCFncm91cCkKKwkJZ290byBlcnJvcjsKKwl0cC0+Y2FsbC5zeXN0ZW0gPSBrc3RyZHVwKGdyb3VwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwLT5jYWxsLnN5c3RlbSkKKwkJZ290byBlcnJvcjsKKworCUlOSVRfTElTVF9IRUFEKCZ0cC0+bGlzdCk7CisJcmV0dXJuIHRwOworZXJyb3I6CisJa2ZyZWUodHAtPmNhbGwubmFtZSk7CisJa2ZyZWUodHAtPnN5bWJvbCk7CisJa2ZyZWUodHApOworCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3Byb2JlX2FyZyhzdHJ1Y3QgcHJvYmVfYXJnICphcmcpCit7CisJaWYgKGFyZy0+ZmV0Y2guZnVuYyA9PSBmZXRjaF9zeW1ib2wpCisJCWZyZWVfc3ltYm9sX2NhY2hlKGFyZy0+ZmV0Y2guZGF0YSk7CisJZWxzZSBpZiAoYXJnLT5mZXRjaC5mdW5jID09IGZldGNoX2luZGlyZWN0KQorCQlmcmVlX2luZGlyZWN0X2ZldGNoX2RhdGEoYXJnLT5mZXRjaC5kYXRhKTsKKwlrZnJlZShhcmctPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3RyYWNlX3Byb2JlKHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJZnJlZV9wcm9iZV9hcmcoJnRwLT5hcmdzW2ldKTsKKworCWtmcmVlKHRwLT5jYWxsLnN5c3RlbSk7CisJa2ZyZWUodHAtPmNhbGwubmFtZSk7CisJa2ZyZWUodHAtPnN5bWJvbCk7CisJa2ZyZWUodHApOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX3Byb2JlICpmaW5kX3Byb2JlX2V2ZW50KGNvbnN0IGNoYXIgKmV2ZW50LAorCQkJCQkgICAgY29uc3QgY2hhciAqZ3JvdXApCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodHAsICZwcm9iZV9saXN0LCBsaXN0KQorCQlpZiAoc3RyY21wKHRwLT5jYWxsLm5hbWUsIGV2ZW50KSA9PSAwICYmCisJCSAgICBzdHJjbXAodHAtPmNhbGwuc3lzdGVtLCBncm91cCkgPT0gMCkKKwkJCXJldHVybiB0cDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVW5yZWdpc3RlciBhIHRyYWNlX3Byb2JlIGFuZCBwcm9iZV9ldmVudDogY2FsbCB3aXRoIGxvY2tpbmcgcHJvYmVfbG9jayAqLworc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl90cmFjZV9wcm9iZShzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQoreworCWlmIChwcm9iZV9pc19yZXR1cm4odHApKQorCQl1bnJlZ2lzdGVyX2tyZXRwcm9iZSgmdHAtPnJwKTsKKwllbHNlCisJCXVucmVnaXN0ZXJfa3Byb2JlKCZ0cC0+cnAua3ApOworCWxpc3RfZGVsKCZ0cC0+bGlzdCk7CisJdW5yZWdpc3Rlcl9wcm9iZV9ldmVudCh0cCk7Cit9CisKKy8qIFJlZ2lzdGVyIGEgdHJhY2VfcHJvYmUgYW5kIHByb2JlX2V2ZW50ICovCitzdGF0aWMgaW50IHJlZ2lzdGVyX3RyYWNlX3Byb2JlKHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICpvbGRfdHA7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByb2JlX2xvY2spOworCisJLyogcmVnaXN0ZXIgYXMgYW4gZXZlbnQgKi8KKwlvbGRfdHAgPSBmaW5kX3Byb2JlX2V2ZW50KHRwLT5jYWxsLm5hbWUsIHRwLT5jYWxsLnN5c3RlbSk7CisJaWYgKG9sZF90cCkgeworCQkvKiBkZWxldGUgb2xkIGV2ZW50ICovCisJCXVucmVnaXN0ZXJfdHJhY2VfcHJvYmUob2xkX3RwKTsKKwkJZnJlZV90cmFjZV9wcm9iZShvbGRfdHApOworCX0KKwlyZXQgPSByZWdpc3Rlcl9wcm9iZV9ldmVudCh0cCk7CisJaWYgKHJldCkgeworCQlwcl93YXJuaW5nKCJGYWlsZCB0byByZWdpc3RlciBwcm9iZSBldmVudCglZClcbiIsIHJldCk7CisJCWdvdG8gZW5kOworCX0KKworCXRwLT5ycC5rcC5mbGFncyB8PSBLUFJPQkVfRkxBR19ESVNBQkxFRDsKKwlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkKKwkJcmV0ID0gcmVnaXN0ZXJfa3JldHByb2JlKCZ0cC0+cnApOworCWVsc2UKKwkJcmV0ID0gcmVnaXN0ZXJfa3Byb2JlKCZ0cC0+cnAua3ApOworCisJaWYgKHJldCkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5zZXJ0IHByb2JlKCVkKVxuIiwgcmV0KTsKKwkJaWYgKHJldCA9PSAtRUlMU0VRKSB7CisJCQlwcl93YXJuaW5nKCJQcm9iaW5nIGFkZHJlc3MoMHglcCkgaXMgbm90IGFuICIKKwkJCQkgICAiaW5zdHJ1Y3Rpb24gYm91bmRhcnkuXG4iLAorCQkJCSAgIHRwLT5ycC5rcC5hZGRyKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJdW5yZWdpc3Rlcl9wcm9iZV9ldmVudCh0cCk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3RhaWwoJnRwLT5saXN0LCAmcHJvYmVfbGlzdCk7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZwcm9iZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTcGxpdCBzeW1ib2wgYW5kIG9mZnNldC4gKi8KK3N0YXRpYyBpbnQgc3BsaXRfc3ltYm9sX29mZnNldChjaGFyICpzeW1ib2wsIHVuc2lnbmVkIGxvbmcgKm9mZnNldCkKK3sKKwljaGFyICp0bXA7CisJaW50IHJldDsKKworCWlmICghb2Zmc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9IHN0cmNocihzeW1ib2wsICcrJyk7CisJaWYgKHRtcCkgeworCQkvKiBza2lwIHNpZ24gYmVjYXVzZSBzdHJpY3Rfc3RydG9sIGRvZXNuJ3QgYWNjZXB0ICcrJyAqLworCQlyZXQgPSBzdHJpY3Rfc3RydG91bCh0bXAgKyAxLCAwLCBvZmZzZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJKnRtcCA9ICdcMCc7CisJfSBlbHNlCisJCSpvZmZzZXQgPSAwOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBBUkFNX01BWF9BUkdTIDE2CisjZGVmaW5lIFBBUkFNX01BWF9TVEFDSyAoVEhSRUFEX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisKK3N0YXRpYyBpbnQgcGFyc2VfcHJvYmVfdmFycyhjaGFyICphcmcsIHN0cnVjdCBmZXRjaF9mdW5jICpmZiwgaW50IGlzX3JldHVybikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcmFtOworCisJaWYgKHN0cmNtcChhcmcsICJyZXR2YWwiKSA9PSAwKSB7CisJCWlmIChpc19yZXR1cm4pIHsKKwkJCWZmLT5mdW5jID0gZmV0Y2hfcmV0dmFsdWU7CisJCQlmZi0+ZGF0YSA9IE5VTEw7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYXJnLCAic3RhY2siLCA1KSA9PSAwKSB7CisJCWlmIChhcmdbNV0gPT0gJ1wwJykgeworCQkJZmYtPmZ1bmMgPSBmZXRjaF9zdGFja19hZGRyZXNzOworCQkJZmYtPmRhdGEgPSBOVUxMOworCQl9IGVsc2UgaWYgKGlzZGlnaXQoYXJnWzVdKSkgeworCQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgNSwgMTAsICZwYXJhbSk7CisJCQlpZiAocmV0IHx8IHBhcmFtID4gUEFSQU1fTUFYX1NUQUNLKQorCQkJCXJldCA9IC1FSU5WQUw7CisJCQllbHNlIHsKKwkJCQlmZi0+ZnVuYyA9IGZldGNoX3N0YWNrOworCQkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAoc3RybmNtcChhcmcsICJhcmciLCAzKSA9PSAwICYmIGlzZGlnaXQoYXJnWzNdKSkgeworCQlyZXQgPSBzdHJpY3Rfc3RydG91bChhcmcgKyAzLCAxMCwgJnBhcmFtKTsKKwkJaWYgKHJldCB8fCBwYXJhbSA+IFBBUkFNX01BWF9BUkdTKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlmZi0+ZnVuYyA9IGZldGNoX2FyZ3VtZW50OworCQkJZmYtPmRhdGEgPSAodm9pZCAqKXBhcmFtOworCQl9CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisJcmV0dXJuIHJldDsKK30KKworLyogUmVjdXJzaXZlIGFyZ3VtZW50IHBhcnNlciAqLworc3RhdGljIGludCBfX3BhcnNlX3Byb2JlX2FyZyhjaGFyICphcmcsIHN0cnVjdCBmZXRjaF9mdW5jICpmZiwgaW50IGlzX3JldHVybikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcmFtOworCWxvbmcgb2Zmc2V0OworCWNoYXIgKnRtcDsKKworCXN3aXRjaCAoYXJnWzBdKSB7CisJY2FzZSAnJCc6CisJCXJldCA9IHBhcnNlX3Byb2JlX3ZhcnMoYXJnICsgMSwgZmYsIGlzX3JldHVybik7CisJCWJyZWFrOworCWNhc2UgJyUnOgkvKiBuYW1lZCByZWdpc3RlciAqLworCQlyZXQgPSByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChhcmcgKyAxKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlmZi0+ZnVuYyA9IGZldGNoX3JlZ2lzdGVyOworCQkJZmYtPmRhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJldDsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAnQCc6CS8qIG1lbW9yeSBvciBzeW1ib2wgKi8KKwkJaWYgKGlzZGlnaXQoYXJnWzFdKSkgeworCQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMSwgMCwgJnBhcmFtKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQlmZi0+ZnVuYyA9IGZldGNoX21lbW9yeTsKKwkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNwbGl0X3N5bWJvbF9vZmZzZXQoYXJnICsgMSwgJm9mZnNldCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJZmYtPmRhdGEgPSBhbGxvY19zeW1ib2xfY2FjaGUoYXJnICsgMSwgb2Zmc2V0KTsKKwkJCWlmIChmZi0+ZGF0YSkKKwkJCQlmZi0+ZnVuYyA9IGZldGNoX3N5bWJvbDsKKwkJCWVsc2UKKwkJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgJysnOgkvKiBpbmRpcmVjdCBtZW1vcnkgKi8KKwljYXNlICctJzoKKwkJdG1wID0gc3RyY2hyKGFyZywgJygnKTsKKwkJaWYgKCF0bXApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQkqdG1wID0gJ1wwJzsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvbChhcmcgKyAxLCAwLCAmb2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlpZiAoYXJnWzBdID09ICctJykKKwkJCW9mZnNldCA9IC1vZmZzZXQ7CisJCWFyZyA9IHRtcCArIDE7CisJCXRtcCA9IHN0cnJjaHIoYXJnLCAnKScpOworCQlpZiAodG1wKSB7CisJCQlzdHJ1Y3QgaW5kaXJlY3RfZmV0Y2hfZGF0YSAqaWQ7CisJCQkqdG1wID0gJ1wwJzsKKwkJCWlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZGlyZWN0X2ZldGNoX2RhdGEpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWlkKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWQtPm9mZnNldCA9IG9mZnNldDsKKwkJCXJldCA9IF9fcGFyc2VfcHJvYmVfYXJnKGFyZywgJmlkLT5vcmlnLCBpc19yZXR1cm4pOworCQkJaWYgKHJldCkKKwkJCQlrZnJlZShpZCk7CisJCQllbHNlIHsKKwkJCQlmZi0+ZnVuYyA9IGZldGNoX2luZGlyZWN0OworCQkJCWZmLT5kYXRhID0gKHZvaWQgKilpZDsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBzdXBwb3J0IGN1c3RvbSBoYW5kbGVyICovCisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIFN0cmluZyBsZW5ndGggY2hlY2tpbmcgd3JhcHBlciAqLworc3RhdGljIGludCBwYXJzZV9wcm9iZV9hcmcoY2hhciAqYXJnLCBzdHJ1Y3QgZmV0Y2hfZnVuYyAqZmYsIGludCBpc19yZXR1cm4pCit7CisJaWYgKHN0cmxlbihhcmcpID4gTUFYX0FSR1NUUl9MRU4pIHsKKwkJcHJfaW5mbygiQXJndW1lbnQgaXMgdG9vIGxvbmcuOiAlc1xuIiwgIGFyZyk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwlyZXR1cm4gX19wYXJzZV9wcm9iZV9hcmcoYXJnLCBmZiwgaXNfcmV0dXJuKTsKK30KKworLyogUmV0dXJuIDEgaWYgbmFtZSBpcyByZXNlcnZlZCBvciBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBhcmd1bWVudCAqLworc3RhdGljIGludCBjb25mbGljdF9maWVsZF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc3RydWN0IHByb2JlX2FyZyAqYXJncywgaW50IG5hcmcpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVzZXJ2ZWRfZmllbGRfbmFtZXMpOyBpKyspCisJCWlmIChzdHJjbXAocmVzZXJ2ZWRfZmllbGRfbmFtZXNbaV0sIG5hbWUpID09IDApCisJCQlyZXR1cm4gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZzsgaSsrKQorCQlpZiAoc3RyY21wKGFyZ3NbaV0ubmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV90cmFjZV9wcm9iZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJLyoKKwkgKiBBcmd1bWVudCBzeW50YXg6CisJICogIC0gQWRkIGtwcm9iZTogcFs6W0dSUC9dRVZFTlRdIEtTWU1bK09GRlNdfEtBRERSIFtGRVRDSEFSR1NdCisJICogIC0gQWRkIGtyZXRwcm9iZTogcls6W0dSUC9dRVZFTlRdIEtTWU1bKzBdIFtGRVRDSEFSR1NdCisJICogRmV0Y2ggYXJnczoKKwkgKiAgJGFyZ04JOiBmZXRjaCBOdGggb2YgZnVuY3Rpb24gYXJndW1lbnQuIChOOjAtKQorCSAqICAkcmV0dmFsCTogZmV0Y2ggcmV0dXJuIHZhbHVlCisJICogICRzdGFjawk6IGZldGNoIHN0YWNrIGFkZHJlc3MKKwkgKiAgJHN0YWNrTgk6IGZldGNoIE50aCBvZiBzdGFjayAoTjowLSkKKwkgKiAgQEFERFIJOiBmZXRjaCBtZW1vcnkgYXQgQUREUiAoQUREUiBzaG91bGQgYmUgaW4ga2VybmVsKQorCSAqICBAU1lNWyt8LW9mZnNdIDogZmV0Y2ggbWVtb3J5IGF0IFNZTSArfC0gb2ZmcyAoU1lNIGlzIGEgZGF0YSBzeW1ib2wpCisJICogICVSRUcJOiBmZXRjaCByZWdpc3RlciBSRUcKKwkgKiBJbmRpcmVjdCBtZW1vcnkgZmV0Y2g6CisJICogICt8LW9mZnMoQVJHKSA6IGZldGNoIG1lbW9yeSBhdCBBUkcgK3wtIG9mZnMgYWRkcmVzcy4KKwkgKiBBbGlhcyBuYW1lIG9mIGFyZ3M6CisJICogIE5BTUU9RkVUQ0hBUkcgOiBzZXQgTkFNRSBhcyBhbGlhcyBvZiBGRVRDSEFSRy4KKwkgKi8KKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCWludCBpLCByZXQgPSAwOworCWludCBpc19yZXR1cm4gPSAwOworCWNoYXIgKnN5bWJvbCA9IE5VTEwsICpldmVudCA9IE5VTEwsICphcmcgPSBOVUxMLCAqZ3JvdXAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwl2b2lkICphZGRyID0gTlVMTDsKKwljaGFyIGJ1ZltNQVhfRVZFTlRfTkFNRV9MRU5dOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCXByX2luZm8oIlByb2JlIHBvaW50IGlzIG5vdCBzcGVjaWZpZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZ3ZbMF1bMF0gPT0gJ3AnKQorCQlpc19yZXR1cm4gPSAwOworCWVsc2UgaWYgKGFyZ3ZbMF1bMF0gPT0gJ3InKQorCQlpc19yZXR1cm4gPSAxOworCWVsc2UgeworCQlwcl9pbmZvKCJQcm9iZSBkZWZpbml0aW9uIG11c3QgYmUgc3RhcnRlZCB3aXRoICdwJyBvciAncicuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZ3ZbMF1bMV0gPT0gJzonKSB7CisJCWV2ZW50ID0gJmFyZ3ZbMF1bMl07CisJCWlmIChzdHJjaHIoZXZlbnQsICcvJykpIHsKKwkJCWdyb3VwID0gZXZlbnQ7CisJCQlldmVudCA9IHN0cmNocihncm91cCwgJy8nKSArIDE7CisJCQlldmVudFstMV0gPSAnXDAnOworCQkJaWYgKHN0cmxlbihncm91cCkgPT0gMCkgeworCQkJCXByX2luZm8oIkdyb3VwIG5hbWUgaXMgbm90IHNwZWNpZmlsZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChzdHJsZW4oZXZlbnQpID09IDApIHsKKwkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoaXNkaWdpdChhcmd2WzFdWzBdKSkgeworCQlpZiAoaXNfcmV0dXJuKSB7CisJCQlwcl9pbmZvKCJSZXR1cm4gcHJvYmUgcG9pbnQgbXVzdCBiZSBhIHN5bWJvbC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogYW4gYWRkcmVzcyBzcGVjaWZpZWQgKi8KKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoJmFyZ3ZbMF1bMl0sIDAsICh1bnNpZ25lZCBsb25nICopJmFkZHIpOworCQlpZiAocmV0KSB7CisJCQlwcl9pbmZvKCJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcy5cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGEgc3ltYm9sIHNwZWNpZmllZCAqLworCQlzeW1ib2wgPSBhcmd2WzFdOworCQkvKiBUT0RPOiBzdXBwb3J0IC5pbml0IG1vZHVsZSBmdW5jdGlvbnMgKi8KKwkJcmV0ID0gc3BsaXRfc3ltYm9sX29mZnNldChzeW1ib2wsICZvZmZzZXQpOworCQlpZiAocmV0KSB7CisJCQlwcl9pbmZvKCJGYWlsZWQgdG8gcGFyc2Ugc3ltYm9sLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChvZmZzZXQgJiYgaXNfcmV0dXJuKSB7CisJCQlwcl9pbmZvKCJSZXR1cm4gcHJvYmUgbXVzdCBiZSB1c2VkIHdpdGhvdXQgb2Zmc2V0LlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlhcmdjIC09IDI7IGFyZ3YgKz0gMjsKKworCS8qIHNldHVwIGEgcHJvYmUgKi8KKwlpZiAoIWdyb3VwKQorCQlncm91cCA9IEtQUk9CRV9FVkVOVF9TWVNURU07CisJaWYgKCFldmVudCkgeworCQkvKiBNYWtlIGEgbmV3IGV2ZW50IG5hbWUgKi8KKwkJaWYgKHN5bWJvbCkKKwkJCXNucHJpbnRmKGJ1ZiwgTUFYX0VWRU5UX05BTUVfTEVOLCAiJWNAJXMlK2xkIiwKKwkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBzeW1ib2wsIG9mZnNldCk7CisJCWVsc2UKKwkJCXNucHJpbnRmKGJ1ZiwgTUFYX0VWRU5UX05BTUVfTEVOLCAiJWNAMHglcCIsCisJCQkJIGlzX3JldHVybiA/ICdyJyA6ICdwJywgYWRkcik7CisJCWV2ZW50ID0gYnVmOworCX0KKwl0cCA9IGFsbG9jX3RyYWNlX3Byb2JlKGdyb3VwLCBldmVudCwgYWRkciwgc3ltYm9sLCBvZmZzZXQsIGFyZ2MsCisJCQkgICAgICAgaXNfcmV0dXJuKTsKKwlpZiAoSVNfRVJSKHRwKSkgeworCQlwcl9pbmZvKCJGYWlsZWQgdG8gYWxsb2NhdGUgdHJhY2VfcHJvYmUuKCVkKVxuIiwKKwkJCShpbnQpUFRSX0VSUih0cCkpOworCQlyZXR1cm4gUFRSX0VSUih0cCk7CisJfQorCisJLyogcGFyc2UgYXJndW1lbnRzICovCisJcmV0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYyAmJiBpIDwgTUFYX1RSQUNFX0FSR1M7IGkrKykgeworCQkvKiBQYXJzZSBhcmd1bWVudCBuYW1lICovCisJCWFyZyA9IHN0cmNocihhcmd2W2ldLCAnPScpOworCQlpZiAoYXJnKQorCQkJKmFyZysrID0gJ1wwJzsKKwkJZWxzZQorCQkJYXJnID0gYXJndltpXTsKKworCQlpZiAoY29uZmxpY3RfZmllbGRfbmFtZShhcmd2W2ldLCB0cC0+YXJncywgaSkpIHsKKwkJCXByX2luZm8oIkFyZ3VtZW50JWQgbmFtZSAnJXMnIGNvbmZsaWN0cyB3aXRoICIKKwkJCQkiYW5vdGhlciBmaWVsZC5cbiIsIGksIGFyZ3ZbaV0pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQl0cC0+YXJnc1tpXS5uYW1lID0ga3N0cmR1cChhcmd2W2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0cC0+YXJnc1tpXS5uYW1lKSB7CisJCQlwcl9pbmZvKCJGYWlsZWQgdG8gYWxsb2NhdGUgYXJndW1lbnQlZCBuYW1lICclcycuXG4iLAorCQkJCWksIGFyZ3ZbaV0pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBQYXJzZSBmZXRjaCBhcmd1bWVudCAqLworCQlyZXQgPSBwYXJzZV9wcm9iZV9hcmcoYXJnLCAmdHAtPmFyZ3NbaV0uZmV0Y2gsIGlzX3JldHVybik7CisJCWlmIChyZXQpIHsKKwkJCXByX2luZm8oIlBhcnNlIGVycm9yIGF0IGFyZ3VtZW50JWQuICglZClcbiIsIGksIHJldCk7CisJCQlrZnJlZSh0cC0+YXJnc1tpXS5uYW1lKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQl0cC0+bnJfYXJncysrOworCX0KKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3Byb2JlKHRwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldHVybiAwOworCitlcnJvcjoKKwlmcmVlX3RyYWNlX3Byb2JlKHRwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2FsbF9wcm9iZXModm9pZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCisJbXV0ZXhfbG9jaygmcHJvYmVfbG9jayk7CisJLyogVE9ETzogVXNlIGJhdGNoIHVucmVnaXN0cmF0aW9uICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcm9iZV9saXN0KSkgeworCQl0cCA9IGxpc3RfZW50cnkocHJvYmVfbGlzdC5uZXh0LCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIGxpc3QpOworCQl1bnJlZ2lzdGVyX3RyYWNlX3Byb2JlKHRwKTsKKwkJZnJlZV90cmFjZV9wcm9iZSh0cCk7CisJfQorCW11dGV4X3VubG9jaygmcHJvYmVfbG9jayk7Cit9CisKKworLyogUHJvYmVzIGxpc3RpbmcgaW50ZXJmYWNlcyAqLworc3RhdGljIHZvaWQgKnByb2Jlc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwltdXRleF9sb2NrKCZwcm9iZV9sb2NrKTsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnByb2JlX2xpc3QsICpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqcHJvYmVzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnByb2JlX2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Jlc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJbXV0ZXhfdW5sb2NrKCZwcm9iZV9sb2NrKTsKK30KKworc3RhdGljIGludCBwcm9iZXNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSB2OworCWludCBpLCByZXQ7CisJY2hhciBidWZbTUFYX0FSR1NUUl9MRU4gKyAxXTsKKworCXNlcV9wcmludGYobSwgIiVjIiwgcHJvYmVfaXNfcmV0dXJuKHRwKSA/ICdyJyA6ICdwJyk7CisJc2VxX3ByaW50ZihtLCAiOiVzLyVzIiwgdHAtPmNhbGwuc3lzdGVtLCB0cC0+Y2FsbC5uYW1lKTsKKworCWlmICghdHAtPnN5bWJvbCkKKwkJc2VxX3ByaW50ZihtLCAiIDB4JXAiLCB0cC0+cnAua3AuYWRkcik7CisJZWxzZSBpZiAodHAtPnJwLmtwLm9mZnNldCkKKwkJc2VxX3ByaW50ZihtLCAiICVzKyV1IiwgcHJvYmVfc3ltYm9sKHRwKSwgdHAtPnJwLmtwLm9mZnNldCk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIgJXMiLCBwcm9iZV9zeW1ib2wodHApKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXJldCA9IHByb2JlX2FyZ19zdHJpbmcoYnVmLCBNQVhfQVJHU1RSX0xFTiwgJnRwLT5hcmdzW2ldLmZldGNoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkFyZ3VtZW50JWQgZGVjb2RpbmcgZXJyb3IoJWQpLlxuIiwgaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJc2VxX3ByaW50ZihtLCAiICVzPSVzIiwgdHAtPmFyZ3NbaV0ubmFtZSwgYnVmKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9iZXNfc2VxX29wID0geworCS5zdGFydCAgPSBwcm9iZXNfc2VxX3N0YXJ0LAorCS5uZXh0ICAgPSBwcm9iZXNfc2VxX25leHQsCisJLnN0b3AgICA9IHByb2Jlc19zZXFfc3RvcCwKKwkuc2hvdyAgID0gcHJvYmVzX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IHByb2Jlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCisJICAgIChmaWxlLT5mX2ZsYWdzICYgT19UUlVOQykpCisJCWNsZWFudXBfYWxsX3Byb2JlcygpOworCisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9iZXNfc2VxX29wKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3RyYWNlX3Byb2JlKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljaGFyICoqYXJndjsKKwlpbnQgYXJnYyA9IDAsIHJldCA9IDA7CisKKwlhcmd2ID0gYXJndl9zcGxpdChHRlBfS0VSTkVMLCBidWYsICZhcmdjKTsKKwlpZiAoIWFyZ3YpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFyZ2MpCisJCXJldCA9IGNyZWF0ZV90cmFjZV9wcm9iZShhcmdjLCBhcmd2KTsKKworCWFyZ3ZfZnJlZShhcmd2KTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFdSSVRFX0JVRlNJWkUgMTI4CisKK3N0YXRpYyBzc2l6ZV90IHByb2Jlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICprYnVmLCAqdG1wOworCWludCByZXQ7CisJc2l6ZV90IGRvbmU7CisJc2l6ZV90IHNpemU7CisKKwlrYnVmID0ga21hbGxvYyhXUklURV9CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBjb3VudCkgeworCQlzaXplID0gY291bnQgLSBkb25lOworCQlpZiAoc2l6ZSA+PSBXUklURV9CVUZTSVpFKQorCQkJc2l6ZSA9IFdSSVRFX0JVRlNJWkUgLSAxOworCQlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmZmVyICsgZG9uZSwgc2l6ZSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlrYnVmW3NpemVdID0gJ1wwJzsKKwkJdG1wID0gc3RyY2hyKGtidWYsICdcbicpOworCQlpZiAodG1wKSB7CisJCQkqdG1wID0gJ1wwJzsKKwkJCXNpemUgPSB0bXAgLSBrYnVmICsgMTsKKwkJfSBlbHNlIGlmIChkb25lICsgc2l6ZSA8IGNvdW50KSB7CisJCQlwcl93YXJuaW5nKCJMaW5lIGxlbmd0aCBpcyB0b28gbG9uZzogIgorCQkJCSAgICJTaG91bGQgYmUgbGVzcyB0aGFuICVkLiIsIFdSSVRFX0JVRlNJWkUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRvbmUgKz0gc2l6ZTsKKwkJLyogUmVtb3ZlIGNvbW1lbnRzICovCisJCXRtcCA9IHN0cmNocihrYnVmLCAnIycpOworCQlpZiAodG1wKQorCQkJKnRtcCA9ICdcMCc7CisKKwkJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZShrYnVmKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBkb25lOworb3V0OgorCWtmcmVlKGtidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtwcm9iZV9ldmVudHNfb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IHByb2Jlc19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzZXFfcmVsZWFzZSwKKwkud3JpdGUJCT0gcHJvYmVzX3dyaXRlLAorfTsKKworLyogUHJvYmVzIHByb2ZpbGluZyBpbnRlcmZhY2VzICovCitzdGF0aWMgaW50IHByb2Jlc19wcm9maWxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gdjsKKworCXNlcV9wcmludGYobSwgIiAgJS00NHMgJTE1bHUgJTE1bHVcbiIsIHRwLT5jYWxsLm5hbWUsIHRwLT5uaGl0LAorCQkgICB0cC0+cnAua3Aubm1pc3NlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9maWxlX3NlcV9vcCA9IHsKKwkuc3RhcnQgID0gcHJvYmVzX3NlcV9zdGFydCwKKwkubmV4dCAgID0gcHJvYmVzX3NlcV9uZXh0LAorCS5zdG9wICAgPSBwcm9iZXNfc2VxX3N0b3AsCisJLnNob3cgICA9IHByb2Jlc19wcm9maWxlX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IHByb2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnByb2ZpbGVfc2VxX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3Byb2JlX3Byb2ZpbGVfb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IHByb2ZpbGVfb3BlbiwKKwkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgICAgICAgID0gc2VxX3JlbGVhc2UsCit9OworCisvKiBLcHJvYmUgaGFuZGxlciAqLworc3RhdGljIF9fa3Byb2JlcyBpbnQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2Yoa3AsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnAua3ApOworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CisJaW50IHNpemUsIGksIHBjOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKKworCXRwLT5uaGl0Kys7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwlzaXplID0gU0laRU9GX0tQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKKwkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5pcCA9ICh1bnNpZ25lZCBsb25nKWtwLT5hZGRyOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKKworCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCisJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKKwlyZXR1cm4gMDsKK30KKworLyogS3JldHByb2JlIGhhbmRsZXIgKi8KK3N0YXRpYyBfX2twcm9iZXMgaW50IGtyZXRwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorCQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKKwlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOworCWludCBzaXplLCBpLCBwYzsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwlzaXplID0gU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKKwkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CisJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7CisKKwlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBjYWxsLCBlbnRyeSwgZXZlbnQpKQorCQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXZlbnQgZW50cnkgcHJpbnRlcnMgKi8KK2VudW0gcHJpbnRfbGluZV90CitwcmludF9rcHJvYmVfZXZlbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwOworCWludCBpOworCisJZmllbGQgPSAoc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqKWl0ZXItPmVudDsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGZpZWxkLT5lbnQudHlwZSk7CisJdHAgPSBjb250YWluZXJfb2YoZXZlbnQsIHN0cnVjdCB0cmFjZV9wcm9iZSwgZXZlbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogKCIsIHRwLT5jYWxsLm5hbWUpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncyB8IFRSQUNFX0lURVJfU1lNX09GRlNFVCkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIikiKSkKKwkJZ290byBwYXJ0aWFsOworCisJZm9yIChpID0gMDsgaSA8IGZpZWxkLT5uYXJnczsgaSsrKQorCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0lbHgiLAorCQkJCSAgICAgIHRwLT5hcmdzW2ldLm5hbWUsIGZpZWxkLT5hcmdzW2ldKSkKKwkJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CitwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworZW51bSBwcmludF9saW5lX3QKK3ByaW50X2tyZXRwcm9iZV9ldmVudChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CisJaW50IGk7CisKKwlmaWVsZCA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICopaXRlci0+ZW50OworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZmllbGQtPmVudC50eXBlKTsKKwl0cCA9IGNvbnRhaW5lcl9vZihldmVudCwgc3RydWN0IHRyYWNlX3Byb2JlLCBldmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiVzOiAoIiwgdHAtPmNhbGwubmFtZSkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+cmV0X2lwLCBmbGFncyB8IFRSQUNFX0lURVJfU1lNX09GRlNFVCkpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIiA8LSAiKSkKKwkJZ290byBwYXJ0aWFsOworCisJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5mdW5jLCBmbGFncyAmIH5UUkFDRV9JVEVSX1NZTV9PRkZTRVQpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICIpIikpCisJCWdvdG8gcGFydGlhbDsKKworCWZvciAoaSA9IDA7IGkgPCBmaWVsZC0+bmFyZ3M7IGkrKykKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9JWx4IiwKKwkJCQkgICAgICB0cC0+YXJnc1tpXS5uYW1lLCBmaWVsZC0+YXJnc1tpXSkpCisJCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZXZlbnRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwl0cC0+ZmxhZ3MgfD0gVFBfRkxBR19UUkFDRTsKKwlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkKKwkJcmV0dXJuIGVuYWJsZV9rcmV0cHJvYmUoJnRwLT5ycCk7CisJZWxzZQorCQlyZXR1cm4gZW5hYmxlX2twcm9iZSgmdHAtPnJwLmtwKTsKK30KKworc3RhdGljIHZvaWQgcHJvYmVfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKiljYWxsLT5kYXRhOworCisJdHAtPmZsYWdzICY9IH5UUF9GTEFHX1RSQUNFOworCWlmICghKHRwLT5mbGFncyAmIChUUF9GTEFHX1RSQUNFIHwgVFBfRkxBR19QUk9GSUxFKSkpIHsKKwkJaWYgKHByb2JlX2lzX3JldHVybih0cCkpCisJCQlkaXNhYmxlX2tyZXRwcm9iZSgmdHAtPnJwKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9rcHJvYmUoJnRwLT5ycC5rcCk7CisJfQorfQorCitzdGF0aWMgaW50IHByb2JlX2V2ZW50X3Jhd19pbml0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnRfY2FsbC0+ZmllbGRzKTsKKworCXJldHVybiAwOworfQorCisjdW5kZWYgREVGSU5FX0ZJRUxECisjZGVmaW5lIERFRklORV9GSUVMRCh0eXBlLCBpdGVtLCBuYW1lLCBpc19zaWduZWQpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCBuYW1lLAlcCisJCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJXAorCQkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWQsIFwKKwkJCQkJIEZJTFRFUl9PVEhFUik7CQkJXAorCQlpZiAocmV0KQkJCQkJCVwKKwkJCXJldHVybiByZXQ7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5IGZpZWxkOworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopZXZlbnRfY2FsbC0+ZGF0YTsKKworCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGV2ZW50X2NhbGwpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCisJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVAsIDApOworCURFRklORV9GSUVMRChpbnQsIG5hcmdzLCBGSUVMRF9TVFJJTkdfTkFSR1MsIDEpOworCS8qIFNldCBhcmd1bWVudCBuYW1lcyBhcyBmaWVsZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQ7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKilldmVudF9jYWxsLT5kYXRhOworCisJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoZXZlbnRfY2FsbCk7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisKKwlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgZnVuYywgRklFTERfU1RSSU5HX0ZVTkMsIDApOworCURFRklORV9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXRfaXAsIEZJRUxEX1NUUklOR19SRVRJUCwgMCk7CisJREVGSU5FX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUywgMSk7CisJLyogU2V0IGFyZ3VtZW50IG5hbWVzIGFzIGZpZWxkcyAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlERUZJTkVfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAorCQkJCSAgICAgc3RydWN0IHRyYWNlX3Byb2JlICp0cCwgY29uc3QgY2hhciAqZm10LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnKQoreworCWludCBpOworCisJLyogU2hvdyBmb3JtYXQgKi8KKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIiVzIiwgZm10KSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIgJXM9JSVseCIsIHRwLT5hcmdzW2ldLm5hbWUpKQorCQkJcmV0dXJuIDA7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlwiLCAlcyIsIGFyZykpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCisJCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCBSRUMtPiVzIiwgdHAtPmFyZ3NbaV0ubmFtZSkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiB0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKK30KKworI3VuZGVmIFNIT1dfRklFTEQKKyNkZWZpbmUgU0hPV19GSUVMRCh0eXBlLCBpdGVtLCBuYW1lKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogIiAjdHlwZSAiICVzO1x0IglcCisJCQkJIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLCBuYW1lLAkJXAorCQkJCSh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksXAorCQkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKHR5cGUpKTsJCVwKKwkJaWYgKCFyZXQpCQkJCQkJXAorCQkJcmV0dXJuIDA7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCSAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVApOworCVNIT1dfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTKTsKKworCS8qIFNob3cgZmllbGRzICovCisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCisJCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSk7CisJdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CisKKwlyZXR1cm4gX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzLCB0cCwgIiglbHgpIiwKKwkJCQkJICJSRUMtPiIgRklFTERfU1RSSU5HX0lQKTsKK30KKworc3RhdGljIGludCBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGZ1bmMsIEZJRUxEX1NUUklOR19GVU5DKTsKKwlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldF9pcCwgRklFTERfU1RSSU5HX1JFVElQKTsKKwlTSE9XX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUyk7CisKKwkvKiBTaG93IGZpZWxkcyAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUpOworCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOworCisJcmV0dXJuIF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQocywgdHAsICIoJWx4IDwtICVseCkiLAorCQkJCQkgIlJFQy0+IiBGSUVMRF9TVFJJTkdfRlVOQworCQkJCQkgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUCk7Cit9CisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCisvKiBLcHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCitzdGF0aWMgX19rcHJvYmVzIGludCBrcHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOworCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OworCWludCBzaXplLCBfX3NpemUsIGksIHBjLCBfX2NwdTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljaGFyICp0cmFjZV9idWY7CisJY2hhciAqcmF3X2RhdGE7CisJaW50IHJjdHg7CisKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlfX3NpemUgPSBTSVpFT0ZfS1BST0JFX1RSQUNFX0VOVFJZKHRwLT5ucl9hcmdzKTsKKwlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKKwlzaXplIC09IHNpemVvZih1MzIpOworCWlmIChXQVJOX09OQ0Uoc2l6ZSA+IEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFLAorCQkgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBQcm90ZWN0IHRoZSBub24gbm1pIGJ1ZmZlcgorCSAqIFRoaXMgYWxzbyBwcm90ZWN0cyB0aGUgcmN1IHJlYWQgc2lkZQorCSAqLworCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisKKwlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOworCWlmIChyY3R4IDwgMCkKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCisJX19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoaW5fbm1pKCkpCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOworCWVsc2UKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKKworCWlmICghdHJhY2VfYnVmKQorCQlnb3RvIGVuZDsKKworCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7CisKKwkvKiBaZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgYnVmZmVyIGxlYWsgdG8gdXNlcnNwYWNlICovCisJKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKKwllbnRyeSA9IChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5ICopcmF3X2RhdGE7CisJZW50ID0gJmVudHJ5LT5lbnQ7CisKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7CisJZW50LT50eXBlID0gY2FsbC0+aWQ7CisJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CisJZW50cnktPmlwID0gKHVuc2lnbmVkIGxvbmcpa3AtPmFkZHI7CisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCisJCWVudHJ5LT5hcmdzW2ldID0gY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MpOworCXBlcmZfdHBfZXZlbnQoY2FsbC0+aWQsIGVudHJ5LT5pcCwgMSwgZW50cnksIHNpemUpOworCitlbmQ6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKK2VuZF9yZWN1cnNpb246CisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBLcmV0cHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCitzdGF0aWMgX19rcHJvYmVzIGludCBrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihyaS0+cnAsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnApOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKKwlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKKwlpbnQgc2l6ZSwgX19zaXplLCBpLCBwYywgX19jcHU7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJY2hhciAqdHJhY2VfYnVmOworCWNoYXIgKnJhd19kYXRhOworCWludCByY3R4OworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJX19zaXplID0gU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CisJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CisJc2l6ZSAtPSBzaXplb2YodTMyKTsKKwlpZiAoV0FSTl9PTkNFKHNpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwKKwkJICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogUHJvdGVjdCB0aGUgbm9uIG5taSBidWZmZXIKKwkgKiBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCisJcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKKwlpZiAocmN0eCA8IDApCisJCWdvdG8gZW5kX3JlY3Vyc2lvbjsKKworCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKKwllbHNlCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CisKKwlpZiAoIXRyYWNlX2J1ZikKKwkJZ290byBlbmQ7CisKKwlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgX19jcHUpOworCisJLyogWmVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIGJ1ZmZlciBsZWFrIHRvIHVzZXJzcGFjZSAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisJZW50cnkgPSAoc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSAqKXJhd19kYXRhOworCWVudCA9ICZlbnRyeS0+ZW50OworCisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOworCWVudC0+dHlwZSA9IGNhbGwtPmlkOworCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOworCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CisJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKKwkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7CisJcGVyZl90cF9ldmVudChjYWxsLT5pZCwgZW50cnktPnJldF9pcCwgMSwgZW50cnksIHNpemUpOworCitlbmQ6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKK2VuZF9yZWN1cnNpb246CisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX3Byb2ZpbGVfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisKKwl0cC0+ZmxhZ3MgfD0gVFBfRkxBR19QUk9GSUxFOworCisJaWYgKHByb2JlX2lzX3JldHVybih0cCkpCisJCXJldHVybiBlbmFibGVfa3JldHByb2JlKCZ0cC0+cnApOworCWVsc2UKKwkJcmV0dXJuIGVuYWJsZV9rcHJvYmUoJnRwLT5ycC5rcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2JlX3Byb2ZpbGVfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IChzdHJ1Y3QgdHJhY2VfcHJvYmUgKiljYWxsLT5kYXRhOworCisJdHAtPmZsYWdzICY9IH5UUF9GTEFHX1BST0ZJTEU7CisKKwlpZiAoISh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1RSQUNFKSkgeworCQlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkKKwkJCWRpc2FibGVfa3JldHByb2JlKCZ0cC0+cnApOworCQllbHNlCisJCQlkaXNhYmxlX2twcm9iZSgmdHAtPnJwLmtwKTsKKwl9Cit9CisjZW5kaWYJLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKworCitzdGF0aWMgX19rcHJvYmVzCitpbnQga3Byb2JlX2Rpc3BhdGNoZXIoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2Yoa3AsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnAua3ApOworCisJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpCisJCWtwcm9iZV90cmFjZV9mdW5jKGtwLCByZWdzKTsKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1BST0ZJTEUpCisJCWtwcm9iZV9wcm9maWxlX2Z1bmMoa3AsIHJlZ3MpOworI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisJcmV0dXJuIDA7CS8qIFdlIGRvbid0IHR3ZWVrIGtlcm5lbCwgc28ganVzdCByZXR1cm4gMCAqLworfQorCitzdGF0aWMgX19rcHJvYmVzCitpbnQga3JldHByb2JlX2Rpc3BhdGNoZXIoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKKworCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1RSQUNFKQorCQlrcmV0cHJvYmVfdHJhY2VfZnVuYyhyaSwgcmVncyk7CisjaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKwlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19QUk9GSUxFKQorCQlrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHJpLCByZWdzKTsKKyNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworCXJldHVybiAwOwkvKiBXZSBkb24ndCB0d2VlayBrZXJuZWwsIHNvIGp1c3QgcmV0dXJuIDAgKi8KK30KKworc3RhdGljIGludCByZWdpc3Rlcl9wcm9iZV9ldmVudChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKKwlpbnQgcmV0OworCisJLyogSW5pdGlhbGl6ZSBmdHJhY2VfZXZlbnRfY2FsbCAqLworCWlmIChwcm9iZV9pc19yZXR1cm4odHApKSB7CisJCXRwLT5ldmVudC50cmFjZSA9IHByaW50X2tyZXRwcm9iZV9ldmVudDsKKwkJY2FsbC0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKKwkJY2FsbC0+c2hvd19mb3JtYXQgPSBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQ7CisJCWNhbGwtPmRlZmluZV9maWVsZHMgPSBrcmV0cHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKKwl9IGVsc2UgeworCQl0cC0+ZXZlbnQudHJhY2UgPSBwcmludF9rcHJvYmVfZXZlbnQ7CisJCWNhbGwtPnJhd19pbml0ID0gcHJvYmVfZXZlbnRfcmF3X2luaXQ7CisJCWNhbGwtPnNob3dfZm9ybWF0ID0ga3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0OworCQljYWxsLT5kZWZpbmVfZmllbGRzID0ga3Byb2JlX2V2ZW50X2RlZmluZV9maWVsZHM7CisJfQorCWNhbGwtPmV2ZW50ID0gJnRwLT5ldmVudDsKKwljYWxsLT5pZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHAtPmV2ZW50KTsKKwlpZiAoIWNhbGwtPmlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwljYWxsLT5lbmFibGVkID0gMDsKKwljYWxsLT5yZWdmdW5jID0gcHJvYmVfZXZlbnRfZW5hYmxlOworCWNhbGwtPnVucmVnZnVuYyA9IHByb2JlX2V2ZW50X2Rpc2FibGU7CisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCWF0b21pY19zZXQoJmNhbGwtPnByb2ZpbGVfY291bnQsIC0xKTsKKwljYWxsLT5wcm9maWxlX2VuYWJsZSA9IHByb2JlX3Byb2ZpbGVfZW5hYmxlOworCWNhbGwtPnByb2ZpbGVfZGlzYWJsZSA9IHByb2JlX3Byb2ZpbGVfZGlzYWJsZTsKKyNlbmRpZgorCWNhbGwtPmRhdGEgPSB0cDsKKwlyZXQgPSB0cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsKTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oIkZhaWxlZCB0byByZWdpc3RlciBrcHJvYmUgZXZlbnQ6ICVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRwLT5ldmVudCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfcHJvYmVfZXZlbnQoc3RydWN0IHRyYWNlX3Byb2JlICp0cCkKK3sKKwkvKiB0cC0+ZXZlbnQgaXMgdW5yZWdpc3RlcmVkIGluIHRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKCkgKi8KKwl0cmFjZV9yZW1vdmVfZXZlbnRfY2FsbCgmdHAtPmNhbGwpOworfQorCisvKiBNYWtlIGEgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGNvbnRyb2xpbmcgcHJvYmUgcG9pbnRzICovCitzdGF0aWMgX19pbml0IGludCBpbml0X2twcm9iZV90cmFjZSh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImtwcm9iZV9ldmVudHMiLCAwNjQ0LCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJmtwcm9iZV9ldmVudHNfb3BzKTsKKworCS8qIEV2ZW50IGxpc3QgaW50ZXJmYWNlICovCisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICIna3Byb2JlX2V2ZW50cycgZW50cnlcbiIpOworCisJLyogUHJvZmlsZSBpbnRlcmZhY2UgKi8KKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImtwcm9iZV9wcm9maWxlIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkJICAgIE5VTEwsICZrcHJvYmVfcHJvZmlsZV9vcHMpOworCisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICIna3Byb2JlX3Byb2ZpbGUnIGVudHJ5XG4iKTsKKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKGluaXRfa3Byb2JlX3RyYWNlKTsKKworCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKKworc3RhdGljIGludCBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0KGludCBhMSwgaW50IGEyLCBpbnQgYTMsCisJCQkJCWludCBhNCwgaW50IGE1LCBpbnQgYTYpCit7CisJcmV0dXJuIGExICsgYTIgKyBhMyArIGE0ICsgYTUgKyBhNjsKK30KKworc3RhdGljIF9faW5pdCBpbnQga3Byb2JlX3RyYWNlX3NlbGZfdGVzdHNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50ICgqdGFyZ2V0KShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKworCXRhcmdldCA9IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQ7CisKKwlwcl9pbmZvKCJUZXN0aW5nIGtwcm9iZSB0cmFjaW5nOiAiKTsKKworCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoInA6dGVzdHByb2JlIGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQgIgorCQkJCSAgIiRhcmcxICRhcmcyICRhcmczICRhcmc0ICRzdGFjayAkc3RhY2swIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKQorCQlwcl93YXJuaW5nKCJlcnJvciBlbmFibGluZyBmdW5jdGlvbiBlbnRyeVxuIik7CisKKwlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCJyOnRlc3Rwcm9iZTIga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldCAiCisJCQkJICAiJHJldHZhbCIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkKKwkJcHJfd2FybmluZygiZXJyb3IgZW5hYmxpbmcgZnVuY3Rpb24gcmV0dXJuXG4iKTsKKworCXJldCA9IHRhcmdldCgxLCAyLCAzLCA0LCA1LCA2KTsKKworCWNsZWFudXBfYWxsX3Byb2JlcygpOworCisJcHJfY29udCgiT0tcbiIpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGtwcm9iZV90cmFjZV9zZWxmX3Rlc3RzX2luaXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmEwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCkBAIC0wLDAgKzEsNTUwIEBACisvKgorICogdHJhY2Vfa3N5bS5jIC0gS2VybmVsIFN5bWJvbCBUcmFjZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisjaW5jbHVkZSAidHJhY2Vfc3RhdC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisKKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KKworLyoKKyAqIEZvciBub3csIGxldCB1cyByZXN0cmljdCB0aGUgbm8uIG9mIHN5bWJvbHMgdHJhY2VkIHNpbXVsdGFuZW91c2x5IHRvIG51bWJlcgorICogb2YgYXZhaWxhYmxlIGhhcmR3YXJlIGJyZWFrcG9pbnQgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIEtTWU1fVFJBQ0VSX01BWCBIQlBfTlVNCisKKyNkZWZpbmUgS1NZTV9UUkFDRVJfT1BfTEVOIDMgLyogcnctICovCisKK3N0cnVjdCB0cmFjZV9rc3ltIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqKmtzeW1faGJwOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKKyNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgorCXVuc2lnbmVkIGxvbmcJCWNvdW50ZXI7CisjZW5kaWYKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlrc3ltX2hsaXN0OworfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqa3N5bV90cmFjZV9hcnJheTsKKworc3RhdGljIHVuc2lnbmVkIGludCBrc3ltX2ZpbHRlcl9lbnRyeV9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQga3N5bV90cmFjaW5nX2VuYWJsZWQ7CisKK3N0YXRpYyBITElTVF9IRUFEKGtzeW1fZmlsdGVyX2hlYWQpOworCitzdGF0aWMgREVGSU5FX01VVEVYKGtzeW1fdHJhY2VyX211dGV4KTsKKworI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCisKKyNkZWZpbmUgTUFYX1VMX0lOVCAweGZmZmZmZmZmCisKK3ZvaWQga3N5bV9jb2xsZWN0X3N0YXRzKHVuc2lnbmVkIGxvbmcgaGJwX2hpdF9hZGRyKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCB0cmFjZV9rc3ltICplbnRyeTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7CisJCWlmICgoZW50cnktPmF0dHIuYnBfYWRkciA9PSBoYnBfaGl0X2FkZHIpICYmCisJCSAgICAoZW50cnktPmNvdW50ZXIgPD0gTUFYX1VMX0lOVCkpIHsKKwkJCWVudHJ5LT5jb3VudGVyKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUiAqLworCit2b2lkIGtzeW1faGJwX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmhicCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBrc3ltX3RyYWNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGRhdGE7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CisJaW50IHBjOworCisJaWYgKCFrc3ltX3RyYWNpbmdfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJYnVmZmVyID0ga3N5bV90cmFjZV9hcnJheS0+YnVmZmVyOworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9LU1lNLAorCQkJCQkJCXNpemVvZigqZW50cnkpLCAwLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJZW50cnkJCT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPmlwCT0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwllbnRyeS0+dHlwZQk9IGh3X2JyZWFrcG9pbnRfdHlwZShoYnApOworCWVudHJ5LT5hZGRyCT0gaHdfYnJlYWtwb2ludF9hZGRyKGhicCk7CisJc3RybGNweShlbnRyeS0+Y21kLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKworI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCisJa3N5bV9jb2xsZWN0X3N0YXRzKGh3X2JyZWFrcG9pbnRfYWRkcihoYnApKTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUiAqLworCisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgcGMpOworfQorCisvKiBWYWxpZCBhY2Nlc3MgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGFzCisgKgorICogcnctIDogU2V0IFJlYWQvV3JpdGUgQWNjZXNzIEJyZWFrcG9pbnQKKyAqIC13LSA6IFNldCBXcml0ZSBBY2Nlc3MgQnJlYWtwb2ludAorICogLS0tIDogQ2xlYXIgQnJlYWtwb2ludHMKKyAqIC0teCA6IFNldCBFeGVjdXRpb24gQnJlYWsgcG9pbnRzIChOb3QgYXZhaWxhYmxlIHlldCkKKyAqCisgKi8KK3N0YXRpYyBpbnQga3N5bV90cmFjZV9nZXRfYWNjZXNzX3R5cGUoY2hhciAqc3RyKQoreworCWludCBhY2Nlc3MgPSAwOworCisJaWYgKHN0clswXSA9PSAncicpCisJCWFjY2VzcyB8PSBIV19CUkVBS1BPSU5UX1I7CisKKwlpZiAoc3RyWzFdID09ICd3JykKKwkJYWNjZXNzIHw9IEhXX0JSRUFLUE9JTlRfVzsKKworCWlmIChzdHJbMl0gPT0gJ3gnKQorCQlhY2Nlc3MgfD0gSFdfQlJFQUtQT0lOVF9YOworCisJc3dpdGNoIChhY2Nlc3MpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfUjoKKwljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwljYXNlIEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUjoKKwkJcmV0dXJuIGFjY2VzczsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBUaGVyZSBjYW4gYmUgc2V2ZXJhbCBwb3NzaWJsZSBtYWxmb3JtZWQgcmVxdWVzdHMgYW5kIHdlIGF0dGVtcHQgdG8gY2FwdHVyZQorICogYWxsIG9mIHRoZW0uIFdlIGVudW1lcmF0ZSBzb21lIG9mIHRoZSBydWxlcworICogMS4gV2Ugd2lsbCBub3QgYWxsb3cga2VybmVsIHN5bWJvbHMgd2l0aCAnOicgc2luY2UgaXQgaXMgdXNlZCBhcyBhIGRlbGltaXRlci4KKyAqICAgIGkuZS4gbXVsdGlwbGUgJzonIHN5bWJvbHMgZGlzYWxsb3dlZC4gUG9zc2libGUgdXNlcyBhcmUgb2YgdGhlIGZvcm0KKyAqICAgIDxtb2R1bGU+Ojxrc3ltX25hbWU+OjxvcD4uCisgKiAyLiBObyBkZWxpbWl0ZXIgc3ltYm9sICc6JyBpbiB0aGUgaW5wdXQgc3RyaW5nCisgKiAzLiBTcHVyaW91cyBvcGVyYXRvciBzeW1ib2xzIG9yIHN5bWJvbHMgbm90IGluIHRoZWlyIHJlc3BlY3RpdmUgcG9zaXRpb25zCisgKiA0LiA8a3N5bV9uYW1lPjotLS0gaS5lLiBjbGVhciBicmVha3BvaW50IHJlcXVlc3Qgd2hlbiBrc3ltX25hbWUgbm90IGluIGZpbGUKKyAqIDUuIEtlcm5lbCBzeW1ib2wgbm90IGEgcGFydCBvZiAvcHJvYy9rYWxsc3ltcworICogNi4gRHVwbGljYXRlIHJlcXVlc3RzCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfa3N5bV90cmFjZV9zdHIoY2hhciAqaW5wdXRfc3RyaW5nLCBjaGFyICoqa3N5bW5hbWUsCisJCQkJCQkJdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlpbnQgcmV0OworCisJKmtzeW1uYW1lID0gc3Ryc2VwKCZpbnB1dF9zdHJpbmcsICI6Iik7CisJKmFkZHIgPSBrYWxsc3ltc19sb29rdXBfbmFtZSgqa3N5bW5hbWUpOworCisJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoMiksICgxKSBhbmQgKDUpICovCisJaWYgKCghaW5wdXRfc3RyaW5nKSB8fAorCSAgICAoc3RybGVuKGlucHV0X3N0cmluZykgIT0gS1NZTV9UUkFDRVJfT1BfTEVOKSB8fAorCSAgICAoKmFkZHIgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOzsKKworCXJldCA9IGtzeW1fdHJhY2VfZ2V0X2FjY2Vzc190eXBlKGlucHV0X3N0cmluZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShjaGFyICprc3ltbmFtZSwgaW50IG9wLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OworCWludCByZXQgPSAtRU5PTUVNOworCisJaWYgKGtzeW1fZmlsdGVyX2VudHJ5X2NvdW50ID49IEtTWU1fVFJBQ0VSX01BWCkgeworCQlwcmludGsoS0VSTl9FUlIgImtzeW1fdHJhY2VyOiBNYXhpbXVtIGxpbWl0OiglZCkgcmVhY2hlZC4gTm8iCisJCSIgbmV3IHJlcXVlc3RzIGZvciB0cmFjaW5nIGNhbiBiZSBhY2NlcHRlZCBub3cuXG4iLAorCQkJS1NZTV9UUkFDRVJfTUFYKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhY2Vfa3N5bSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJaHdfYnJlYWtwb2ludF9pbml0KCZlbnRyeS0+YXR0cik7CisKKwllbnRyeS0+YXR0ci5icF90eXBlID0gb3A7CisJZW50cnktPmF0dHIuYnBfYWRkciA9IGFkZHI7CisJZW50cnktPmF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKworCXJldCA9IC1FQUdBSU47CisJZW50cnktPmtzeW1faGJwID0gcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KCZlbnRyeS0+YXR0ciwKKwkJCQkJa3N5bV9oYnBfaGFuZGxlcik7CisKKwlpZiAoSVNfRVJSKGVudHJ5LT5rc3ltX2hicCkpIHsKKwkJcmV0ID0gUFRSX0VSUihlbnRyeS0+a3N5bV9oYnApOworCQlwcmludGsoS0VSTl9JTkZPICJrc3ltX3RyYWNlciByZXF1ZXN0IGZhaWxlZC4gVHJ5IGFnYWluIgorCQkJCQkiIGxhdGVyISFcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJihlbnRyeS0+a3N5bV9obGlzdCksICZrc3ltX2ZpbHRlcl9oZWFkKTsKKwlrc3ltX2ZpbHRlcl9lbnRyeV9jb3VudCsrOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShlbnRyeSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBrc3ltX3RyYWNlX2ZpbHRlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0cmFjZV9rc3ltICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCXNzaXplX3QgY250ID0gMDsKKwlpbnQgcmV0OworCisJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0cmFjZV9zZXFfaW5pdChzKTsKKworCW11dGV4X2xvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAma3N5bV9maWx0ZXJfaGVhZCwga3N5bV9obGlzdCkgeworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcFM6IiwgKHZvaWQgKillbnRyeS0+YXR0ci5icF9hZGRyKTsKKwkJaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9SKQorCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgInItLVxuIik7CisJCWVsc2UgaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9XKQorCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIi13LVxuIik7CisJCWVsc2UgaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gKEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUikpCisJCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAicnctXG4iKTsKKwkJV0FSTl9PTl9PTkNFKCFyZXQpOworCX0KKworCWNudCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7CisKKwltdXRleF91bmxvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKKworCWtmcmVlKHMpOworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHZvaWQgX19rc3ltX3RyYWNlX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZTE7CisKKwltdXRleF9sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbm9kZTEsICZrc3ltX2ZpbHRlcl9oZWFkLAorCQkJCQkJCQlrc3ltX2hsaXN0KSB7CisJCXVucmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KGVudHJ5LT5rc3ltX2hicCk7CisJCWtzeW1fZmlsdGVyX2VudHJ5X2NvdW50LS07CisJCWhsaXN0X2RlbF9yY3UoJihlbnRyeS0+a3N5bV9obGlzdCkpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwltdXRleF91bmxvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKK30KKworc3RhdGljIHNzaXplX3Qga3N5bV90cmFjZV9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJY2hhciAqaW5wdXRfc3RyaW5nLCAqa3N5bW5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcga3N5bV9hZGRyID0gMDsKKwlpbnQgcmV0LCBvcCwgY2hhbmdlZCA9IDA7CisKKwlpbnB1dF9zdHJpbmcgPSBremFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnB1dF9zdHJpbmcpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0X3N0cmluZywgYnVmZmVyLCBjb3VudCkpIHsKKwkJa2ZyZWUoaW5wdXRfc3RyaW5nKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlucHV0X3N0cmluZ1tjb3VudF0gPSAnXDAnOworCisJc3Ryc3RyaXAoaW5wdXRfc3RyaW5nKTsKKworCS8qCisJICogQ2xlYXIgYWxsIGJyZWFrcG9pbnRzIGlmOgorCSAqIDE6IGVjaG8gPiBrc3ltX3RyYWNlX2ZpbHRlcgorCSAqIDI6IGVjaG8gMCA+IGtzeW1fdHJhY2VfZmlsdGVyCisJICogMzogZWNobyAiKjotLS0iID4ga3N5bV90cmFjZV9maWx0ZXIKKwkgKi8KKwlpZiAoIWlucHV0X3N0cmluZ1swXSB8fCAhc3RyY21wKGlucHV0X3N0cmluZywgIjAiKSB8fAorCSAgICAhc3RyY21wKGlucHV0X3N0cmluZywgIio6LS0tIikpIHsKKwkJX19rc3ltX3RyYWNlX3Jlc2V0KCk7CisJCWtmcmVlKGlucHV0X3N0cmluZyk7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlyZXQgPSBvcCA9IHBhcnNlX2tzeW1fdHJhY2Vfc3RyKGlucHV0X3N0cmluZywgJmtzeW1uYW1lLCAma3N5bV9hZGRyKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShpbnB1dF9zdHJpbmcpOworCQlyZXR1cm4gcmV0OworCX0KKworCW11dGV4X2xvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKKworCXJldCA9IC1FSU5WQUw7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7CisJCWlmIChlbnRyeS0+YXR0ci5icF9hZGRyID09IGtzeW1fYWRkcikgeworCQkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoNikgKi8KKwkJCWlmIChlbnRyeS0+YXR0ci5icF90eXBlICE9IG9wKQorCQkJCWNoYW5nZWQgPSAxOworCQkJZWxzZQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQpIHsKKwkJdW5yZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoZW50cnktPmtzeW1faGJwKTsKKwkJZW50cnktPmF0dHIuYnBfdHlwZSA9IG9wOworCQlyZXQgPSAwOworCQlpZiAob3AgPiAwKSB7CisJCQllbnRyeS0+a3N5bV9oYnAgPQorCQkJCXJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmZW50cnktPmF0dHIsCisJCQkJCWtzeW1faGJwX2hhbmRsZXIpOworCQkJaWYgKElTX0VSUihlbnRyeS0+a3N5bV9oYnApKQorCQkJCXJldCA9IFBUUl9FUlIoZW50cnktPmtzeW1faGJwKTsKKwkJCWVsc2UKKwkJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBFcnJvciBvciAic3ltYm9sOi0tLSIgY2FzZTogZHJvcCBpdCAqLworCQlrc3ltX2ZpbHRlcl9lbnRyeV9jb3VudC0tOworCQlobGlzdF9kZWxfcmN1KCYoZW50cnktPmtzeW1faGxpc3QpKTsKKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWtmcmVlKGVudHJ5KTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJLyogQ2hlY2sgZm9yIG1hbGZvcm1lZCByZXF1ZXN0OiAoNCkgKi8KKwkJaWYgKG9wID09IDApCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShrc3ltbmFtZSwgb3AsIGtzeW1fYWRkcik7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygma3N5bV90cmFjZXJfbXV0ZXgpOworCisJa2ZyZWUoaW5wdXRfc3RyaW5nKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBjb3VudDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrc3ltX3RyYWNpbmdfZm9wcyA9IHsKKwkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZAkJPSBrc3ltX3RyYWNlX2ZpbHRlcl9yZWFkLAorCS53cml0ZQkJPSBrc3ltX3RyYWNlX2ZpbHRlcl93cml0ZSwKK307CisKK3N0YXRpYyB2b2lkIGtzeW1fdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlrc3ltX3RyYWNpbmdfZW5hYmxlZCA9IDA7CisJX19rc3ltX3RyYWNlX3Jlc2V0KCk7Cit9CisKK3N0YXRpYyBpbnQga3N5bV90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJaW50IGNwdSwgcmV0ID0gMDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOworCWtzeW1fdHJhY2luZ19lbmFibGVkID0gMTsKKwlrc3ltX3RyYWNlX2FycmF5ID0gdHI7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBrc3ltX3RyYWNlX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc2VxX3B1dHMobSwKKwkJICIjICAgICAgIFRBU0stUElEICAgQ1BVIyAgICAgIFN5bWJvbCAgICAgICAgICAgICAgICAgICAgIgorCQkgIlR5cGUgICAgRnVuY3Rpb25cbiIpOworCXNlcV9wdXRzKG0sCisJCSAiIyAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICIKKwkJICIgfCAgICAgICAgIHxcbiIpOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3Qga3N5bV90cmFjZV9vdXRwdXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGtzeW1fdHJhY2VfZW50cnkgKmZpZWxkOworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJaW50IHJldDsKKworCWlmIChlbnRyeS0+dHlwZSAhPSBUUkFDRV9LU1lNKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTExcy0lLTVkIFslMDNkXSAlcFMiLCBmaWVsZC0+Y21kLAorCQkJCWVudHJ5LT5waWQsIGl0ZXItPmNwdSwgKGNoYXIgKilmaWVsZC0+YWRkcik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXN3aXRjaCAoZmllbGQtPnR5cGUpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfUjoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIFIgICIpOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfVzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIFcgICIpOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfUiB8IEhXX0JSRUFLUE9JTlRfVzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIFJXICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXNwcmludF9zeW1ib2woc3RyLCBmaWVsZC0+aXApOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzXG4iLCBzdHIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdHJ1Y3QgdHJhY2VyIGtzeW1fdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQoreworCS5uYW1lCQk9ICJrc3ltX3RyYWNlciIsCisJLmluaXQJCT0ga3N5bV90cmFjZV9pbml0LAorCS5yZXNldAkJPSBrc3ltX3RyYWNlX3Jlc2V0LAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKKwkuc2VsZnRlc3QJPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2tzeW0sCisjZW5kaWYKKwkucHJpbnRfaGVhZGVyICAgPSBrc3ltX3RyYWNlX3ByaW50X2hlYWRlciwKKwkucHJpbnRfbGluZQk9IGtzeW1fdHJhY2Vfb3V0cHV0Cit9OworCitfX2luaXQgc3RhdGljIGludCBpbml0X2tzeW1fdHJhY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCWtzeW1fZmlsdGVyX2VudHJ5X2NvdW50ID0gMDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgia3N5bV90cmFjZV9maWx0ZXIiLCAwNjQ0LCBkX3RyYWNlciwKKwkJCQkgICAgTlVMTCwgJmtzeW1fdHJhY2luZ19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidrc3ltX3RyYWNlX2ZpbHRlcicgZmlsZVxuIik7CisKKwlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZrc3ltX3RyYWNlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9rc3ltX3RyYWNlKTsKKworCisjaWZkZWYgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIKK3N0YXRpYyBpbnQga3N5bV90cmFjZXJfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzZXFfcHV0cyhtLCAiICBBY2Nlc3MgVHlwZSAiKTsKKwlzZXFfcHV0cyhtLCAiICBTeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyXG4iKTsKKwlzZXFfcHV0cyhtLCAiICAtLS0tLS0tLS0tLSAiKTsKKwlzZXFfcHV0cyhtLCAiICAtLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrc3ltX3RyYWNlcl9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBobGlzdF9ub2RlICpzdGF0ID0gdjsKKwlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7CisJaW50IGFjY2Vzc190eXBlID0gMDsKKwljaGFyIGZuX25hbWVbS1NZTV9OQU1FX0xFTl07CisKKwllbnRyeSA9IGhsaXN0X2VudHJ5KHN0YXQsIHN0cnVjdCB0cmFjZV9rc3ltLCBrc3ltX2hsaXN0KTsKKworCWFjY2Vzc190eXBlID0gZW50cnktPmF0dHIuYnBfdHlwZTsKKworCXN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKKwljYXNlIEhXX0JSRUFLUE9JTlRfUjoKKwkJc2VxX3B1dHMobSwgIiAgUiAgICAgICAgICAgIik7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgorCQlzZXFfcHV0cyhtLCAiICBXICAgICAgICAgICAiKTsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1c6CisJCXNlcV9wdXRzKG0sICIgIFJXICAgICAgICAgICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZXFfcHV0cyhtLCAiICBOQSAgICAgICAgICAiKTsKKwl9CisKKwlpZiAobG9va3VwX3N5bWJvbF9uYW1lKGVudHJ5LT5hdHRyLmJwX2FkZHIsIGZuX25hbWUpID49IDApCisJCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCBmbl9uYW1lKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCAiPE5BPiIpOworCXNlcV9wcmludGYobSwgIiAlMTVsdVxuIiwgZW50cnktPmNvdW50ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICprc3ltX3RyYWNlcl9zdGF0X3N0YXJ0KHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpCit7CisJcmV0dXJuIGtzeW1fZmlsdGVyX2hlYWQuZmlyc3Q7Cit9CisKK3N0YXRpYyB2b2lkICoKK2tzeW1fdHJhY2VyX3N0YXRfbmV4dCh2b2lkICp2LCBpbnQgaWR4KQoreworCXN0cnVjdCBobGlzdF9ub2RlICpzdGF0ID0gdjsKKworCXJldHVybiBzdGF0LT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlcl9zdGF0IGtzeW1fdHJhY2VyX3N0YXRzID0geworCS5uYW1lID0gImtzeW1fdHJhY2VyIiwKKwkuc3RhdF9zdGFydCA9IGtzeW1fdHJhY2VyX3N0YXRfc3RhcnQsCisJLnN0YXRfbmV4dCA9IGtzeW1fdHJhY2VyX3N0YXRfbmV4dCwKKwkuc3RhdF9oZWFkZXJzID0ga3N5bV90cmFjZXJfc3RhdF9oZWFkZXJzLAorCS5zdGF0X3Nob3cgPSBrc3ltX3RyYWNlcl9zdGF0X3Nob3cKK307CisKK19faW5pdCBzdGF0aWMgaW50IGtzeW1fdHJhY2VyX3N0YXRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9zdGF0X3RyYWNlcigma3N5bV90cmFjZXJfc3RhdHMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyICIKKwkJCQkgICAgImtzeW0gdHJhY2VyIHN0YXRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChrc3ltX3RyYWNlcl9zdGF0X2luaXQpOworI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKaW5kZXggZWQxNzU2NS4uYjZjMTJjNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtNjksNiArNjksOSBAQAogICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKICAqIEBmbXQ6IHByaW50ZiBmb3JtYXQgc3RyaW5nCiAgKgorICogSXQgcmV0dXJucyAwIGlmIHRoZSB0cmFjZSBvdmVyc2l6ZXMgdGhlIGJ1ZmZlcidzIGZyZWUKKyAqIHNwYWNlLCAxIG90aGVyd2lzZS4KKyAqCiAgKiBUaGUgdHJhY2VyIG1heSB1c2UgZWl0aGVyIHNlcXVlbmNlIG9wZXJhdGlvbnMgb3IgaXRzIG93bgogICogY29weSB0byB1c2VyIHJvdXRpbmVzLiBUbyBzaW1wbGlmeSBmb3JtYXRpbmcgb2YgYSB0cmFjZQogICogdHJhY2Vfc2VxX3ByaW50ZiBpcyB1c2VkIHRvIHN0b3JlIHN0cmluZ3MgaW50byBhIHNwZWNpYWwKQEAgLTk1LDcgKzk4LDcgQEAKIAogCXMtPmxlbiArPSByZXQ7CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2Vfc2VxX3ByaW50Zik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggZDJjZGJhYi4uZGM5ODMwOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTE3LDYgKzE3LDcgQEAKIAljYXNlIFRSQUNFX0dSQVBIX0VOVDoKIAljYXNlIFRSQUNFX0dSQVBIX1JFVDoKIAljYXNlIFRSQUNFX0hXX0JSQU5DSEVTOgorCWNhc2UgVFJBQ0VfS1NZTToKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtODA4LDMgKzgwOSw1NyBAQAogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgKi8KKworI2lmZGVmIENPTkZJR19LU1lNX1RSQUNFUgorc3RhdGljIGludCBrc3ltX3NlbGZ0ZXN0X2R1bW15OworCitpbnQKK3RyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfa3N5bShzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCWludCByZXQ7CisKKwkvKiBzdGFydCB0aGUgdHJhY2luZyAqLworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CisJaWYgKHJldCkgeworCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlrc3ltX3NlbGZ0ZXN0X2R1bW15ID0gMDsKKwkvKiBSZWdpc3RlciB0aGUgcmVhZC13cml0ZSB0cmFjaW5nIHJlcXVlc3QgKi8KKworCXJldCA9IHByb2Nlc3NfbmV3X2tzeW1fZW50cnkoImtzeW1fc2VsZnRlc3RfZHVtbXkiLAorCQkJCSAgICAgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XLAorCQkJCQkodW5zaWduZWQgbG9uZykoJmtzeW1fc2VsZnRlc3RfZHVtbXkpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0NPTlQgImtzeW1fdHJhY2UgcmVhZC13cml0ZSBzdGFydHVwIHRlc3QgZmFpbGVkXG4iKTsKKwkJZ290byByZXRfcGF0aDsKKwl9CisJLyogUGVyZm9ybSBhIHJlYWQgYW5kIGEgd3JpdGUgb3BlcmF0aW9uIG92ZXIgdGhlIGR1bW15IHZhcmlhYmxlIHRvCisJICogdHJpZ2dlciB0aGUgdHJhY2VyCisJICovCisJaWYgKGtzeW1fc2VsZnRlc3RfZHVtbXkgPT0gMCkKKwkJa3N5bV9zZWxmdGVzdF9kdW1teSsrOworCisJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KKwl0cmFjaW5nX3N0b3AoKTsKKwkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCisJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7CisJdHJhY2UtPnJlc2V0KHRyKTsKKwl0cmFjaW5nX3N0YXJ0KCk7CisKKwkvKiByZWFkICYgd3JpdGUgb3BlcmF0aW9ucyAtIG9uZSBlYWNoIGlzIHBlcmZvcm1lZCBvbiB0aGUgZHVtbXkgdmFyaWFibGUKKwkgKiB0cmlnZ2VyaW5nIHR3byBlbnRyaWVzIGluIHRoZSB0cmFjZSBidWZmZXIKKwkgKi8KKwlpZiAoIXJldCAmJiBjb3VudCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIktzeW0gdHJhY2VyIHN0YXJ0dXAgdGVzdCBmYWlsZWQiKTsKKwkJcmV0ID0gLTE7CisJfQorCityZXRfcGF0aDoKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19LU1lNX1RSQUNFUiAqLworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IDUyN2UxN2UuLjU3NTAxZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0xNCw2ICsxNCw0MyBAQAogc3RhdGljIERFQ0xBUkVfQklUTUFQKGVuYWJsZWRfZW50ZXJfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX2V4aXRfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOworCitzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RhcnQ7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0b3A7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKworCisJc3RhcnQgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhOworCXN0b3AgPSAoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKilfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGE7CisJa2FsbHN5bXNfbG9va3VwKHN5c2NhbGwsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisKKwlmb3IgKCA7IHN0YXJ0IDwgc3RvcDsgc3RhcnQrKykgeworCQkvKgorCQkgKiBPbmx5IGNvbXBhcmUgYWZ0ZXIgdGhlICJzeXMiIHByZWZpeC4gQXJjaHMgdGhhdCB1c2UKKwkJICogc3lzY2FsbCB3cmFwcGVycyBtYXkgaGF2ZSBzeXNjYWxscyBzeW1ib2xzIGFsaWFzZXMgcHJlZml4ZWQKKwkJICogd2l0aCAiU3lTIiBpbnN0ZWFkIG9mICJzeXMiLCBsZWFkaW5nIHRvIGFuIHVud2FudGVkCisJCSAqIG1pc21hdGNoLgorCQkgKi8KKwkJaWYgKHN0YXJ0LT5uYW1lICYmICFzdHJjbXAoc3RhcnQtPm5hbWUgKyAzLCBzdHIgKyAzKSkKKwkJCXJldHVybiBzdGFydDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzY2FsbF9ucl90b19tZXRhKGludCBucikKK3sKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhIHx8IG5yID49IE5SX3N5c2NhbGxzIHx8IG5yIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOworfQorCiBlbnVtIHByaW50X2xpbmVfdAogcHJpbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKIHsKQEAgLTMwLDcgKzY3LDcgQEAKIAlpZiAoIWVudHJ5KQogCQlnb3RvIGVuZDsKIAotCWlmIChlbnRyeS0+ZW50ZXJfaWQgIT0gZW50LT50eXBlKSB7CisJaWYgKGVudHJ5LT5lbnRlcl9ldmVudC0+aWQgIT0gZW50LT50eXBlKSB7CiAJCVdBUk5fT05fT05DRSgxKTsKIAkJZ290byBlbmQ7CiAJfQpAQCAtODUsNyArMTIyLDcgQEAKIAkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIAl9CiAKLQlpZiAoZW50cnktPmV4aXRfaWQgIT0gZW50LT50eXBlKSB7CisJaWYgKGVudHJ5LT5leGl0X2V2ZW50LT5pZCAhPSBlbnQtPnR5cGUpIHsKIAkJV0FSTl9PTl9PTkNFKDEpOwogCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CiAJfQpAQCAtMTAzLDI0ICsxNDAsMTkgQEAKICNkZWZpbmUgU1lTQ0FMTF9GSUVMRCh0eXBlLCBuYW1lKQkJCQkJXAogCXNpemVvZih0eXBlKSAhPSBzaXplb2YodHJhY2UubmFtZSkgPwkJCQlcCiAJCV9fYmFkX3R5cGVfc2l6ZSgpIDoJCQkJCVwKLQkJI3R5cGUsICNuYW1lLCBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBuYW1lKSwgc2l6ZW9mKHRyYWNlLm5hbWUpCisJCSN0eXBlLCAjbmFtZSwgb2Zmc2V0b2YodHlwZW9mKHRyYWNlKSwgbmFtZSksCQlcCisJCXNpemVvZih0cmFjZS5uYW1lKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkKIAogaW50IHN5c2NhbGxfZW50ZXJfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKIAlpbnQgaTsKLQlpbnQgbnI7CiAJaW50IHJldDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnk7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5ID0gY2FsbC0+ZGF0YTsKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciB0cmFjZTsKIAlpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIsIGFyZ3MpOwogCi0JbnIgPSBzeXNjYWxsX25hbWVfdG9fbnIoY2FsbC0+ZGF0YSk7Ci0JZW50cnkgPSBzeXNjYWxsX25yX3RvX21ldGEobnIpOwotCi0JaWYgKCFlbnRyeSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIiwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKKwkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iLAogCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBucikpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKQEAgLTEzMCw4ICsxNjIsMTAgQEAKIAkJCQkgICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gMDsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRvZmZzZXQ6JWQ7XHRzaXplOiV6dTtcbiIsIG9mZnNldCwKLQkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRvZmZzZXQ6JWQ7XHRzaXplOiV6dTsiCisJCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsIG9mZnNldCwKKwkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh1bnNpZ25lZCBsb25nKSk7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIDA7CiAJCW9mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CkBAIC0xNjMsOCArMTk3LDEwIEBACiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCB0cmFjZTsKIAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIKLQkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcbiIsCisJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgorCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIKKwkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTsiCisJCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwKIAkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpLAogCQkJICAgICAgIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSk7CiAJaWYgKCFyZXQpCkBAIC0xNzYsMjIgKzIxMiwxOSBAQAogaW50IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgdHJhY2U7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGEgPSBjYWxsLT5kYXRhOwogCWludCByZXQ7Ci0JaW50IG5yOwogCWludCBpOwogCWludCBvZmZzZXQgPSBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBhcmdzKTsKIAotCW5yID0gc3lzY2FsbF9uYW1lX3RvX25yKGNhbGwtPmRhdGEpOwotCW1ldGEgPSBzeXNjYWxsX25yX3RvX21ldGEobnIpOwotCi0JaWYgKCFtZXRhKQotCQlyZXR1cm4gMDsKLQogCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGNhbGwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSwgRklMVEVSX09USEVSKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJZm9yIChpID0gMDsgaSA8IG1ldGEtPm5iX2FyZ3M7IGkrKykgewogCQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoY2FsbCwgbWV0YS0+dHlwZXNbaV0sCiAJCQkJCSBtZXRhLT5hcmdzW2ldLCBvZmZzZXQsCkBAIC0yMTIsNyArMjQ1LDExIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCksIDAsCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQoaW50LCBuciksIEZJTFRFUl9PVEhFUik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCksCiAJCQkJIEZJTFRFUl9PVEhFUik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjM5LDggKzI3Niw4IEBACiAKIAlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodW5zaWduZWQgbG9uZykgKiBzeXNfZGF0YS0+bmJfYXJnczsKIAotCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIHN5c19kYXRhLT5lbnRlcl9pZCwKLQkJCQkJCSAgc2l6ZSwgMCwgMCk7CisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwKKwkJCXN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQsIHNpemUsIDAsIDApOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIApAQCAtMjcxLDggKzMwOCw4IEBACiAJaWYgKCFzeXNfZGF0YSkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwgc3lzX2RhdGEtPmV4aXRfaWQsCi0JCQkJc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsCisJCQlzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQsIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAKQEAgLTI4NSwxNCArMzIyLDEyIEBACiAJCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgMCk7CiB9CiAKLWludCByZWdfZXZlbnRfc3lzY2FsbF9lbnRlcih2b2lkICpwdHIpCitpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQogewogCWludCByZXQgPSAwOwogCWludCBudW07Ci0JY2hhciAqbmFtZTsKIAotCW5hbWUgPSAoY2hhciAqKXB0cjsKLQludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJbnVtID0gKChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKWNhbGwtPmRhdGEpLT5zeXNjYWxsX25yOwogCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKIAkJcmV0dXJuIC1FTk9TWVM7CiAJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKQEAgLTMwOSwxMyArMzQ0LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHZvaWQgKnB0cikKK3ZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IG51bTsKLQljaGFyICpuYW1lOwogCi0JbmFtZSA9IChjaGFyICopcHRyOwotCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucihuYW1lKTsKKwludW0gPSAoKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopY2FsbC0+ZGF0YSktPnN5c2NhbGxfbnI7CiAJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQogCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKQEAgLTMyNiwxNCArMzU5LDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwogfQogCi1pbnQgcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCh2b2lkICpwdHIpCitpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IG51bTsKLQljaGFyICpuYW1lOwogCi0JbmFtZSA9IChjaGFyICopcHRyOwotCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucihuYW1lKTsKKwludW0gPSAoKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopY2FsbC0+ZGF0YSktPnN5c2NhbGxfbnI7CiAJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQogCQlyZXR1cm4gLUVOT1NZUzsKIAltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwpAQCAtMzUwLDEzICszODEsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdCh2b2lkICpwdHIpCit2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IG51bTsKLQljaGFyICpuYW1lOwogCi0JbmFtZSA9IChjaGFyICopcHRyOwotCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucihuYW1lKTsKKwludW0gPSAoKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopY2FsbC0+ZGF0YSktPnN5c2NhbGxfbnI7CiAJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQogCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKQEAgLTM2NywxMyArMzk2LDQ0IEBACiAJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwogfQogCi1zdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9lbnRlciA9IHsKLQkudHJhY2UJCQk9IHByaW50X3N5c2NhbGxfZW50ZXIsCi19OworaW50IGluaXRfc3lzY2FsbF90cmFjZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJaW50IGlkOwogCi1zdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9leGl0ID0gewotCS50cmFjZQkJCT0gcHJpbnRfc3lzY2FsbF9leGl0LAotfTsKKwlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7CisJaWYgKCFpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FsbC0+aWQgPSBpZDsKKwlJTklUX0xJU1RfSEVBRCgmY2FsbC0+ZmllbGRzKTsKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBpbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoreworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICptZXRhOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgaTsKKworCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCisJCQkJCU5SX3N5c2NhbGxzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKSB7CisJCWFkZHIgPSBhcmNoX3N5c2NhbGxfYWRkcihpKTsKKwkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKGFkZHIpOworCQlpZiAoIW1ldGEpCisJCQljb250aW51ZTsKKworCQltZXRhLT5zeXNjYWxsX25yID0gaTsKKwkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOworCX0KKworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChpbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAKICNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQogCkBAIC0zODcsOCArNDQ3LDEwIEBACiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOwogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICp0cmFjZV9idWY7CiAJY2hhciAqcmF3X2RhdGE7CiAJaW50IHN5c2NhbGxfbnI7CisJaW50IHJjdHg7CiAJaW50IHNpemU7CiAJaW50IGNwdTsKIApAQCAtNDEyLDQxICs0NzQsNDIgQEAKIAkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKKwlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOworCWlmIChyY3R4IDwgMCkKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JaWYgKGluX25taSgpKQotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOwotCWVsc2UKLQkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOworCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CiAKLQlpZiAoIXJhd19kYXRhKQorCWlmICghdHJhY2VfYnVmKQogCQlnb3RvIGVuZDsKIAotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIocmF3X2RhdGEsIGNwdSk7CisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CiAKIAkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwogCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CiAKIAlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKikgcmF3X2RhdGE7CiAJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOwotCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZW50ZXJfaWQ7CisJcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQ7CiAJcmVjLT5uciA9IHN5c2NhbGxfbnI7CiAJc3lzY2FsbF9nZXRfYXJndW1lbnRzKGN1cnJlbnQsIHJlZ3MsIDAsIHN5c19kYXRhLT5uYl9hcmdzLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJnJlYy0+YXJncyk7Ci0JcGVyZl90cF9ldmVudChzeXNfZGF0YS0+ZW50ZXJfaWQsIDAsIDEsIHJlYywgc2l6ZSk7CisJcGVyZl90cF9ldmVudChzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmlkLCAwLCAxLCByZWMsIHNpemUpOwogCiBlbmQ6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKK2VuZF9yZWN1cnNpb246CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1pbnQgcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQoraW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgbnVtOwogCi0JbnVtID0gc3lzY2FsbF9uYW1lX3RvX25yKG5hbWUpOwotCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKLQkJcmV0dXJuIC1FTk9TWVM7CisJbnVtID0gKChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKWNhbGwtPmRhdGEpLT5zeXNjYWxsX25yOwogCiAJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKIAlpZiAoIXN5c19wcm9mX3JlZmNvdW50X2VudGVyKQpAQCAtNDYyLDEzICs1MjUsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQordm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQogewogCWludCBudW07CiAKLQludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7Ci0JaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQotCQlyZXR1cm47CisJbnVtID0gKChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKWNhbGwtPmRhdGEpLT5zeXNjYWxsX25yOwogCiAJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKIAlzeXNfcHJvZl9yZWZjb3VudF9lbnRlci0tOwpAQCAtNDg0LDcgKzU0NSw5IEBACiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqcmVjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN5c2NhbGxfbnI7CisJY2hhciAqdHJhY2VfYnVmOwogCWNoYXIgKnJhd19kYXRhOworCWludCByY3R4OwogCWludCBzaXplOwogCWludCBjcHU7CiAKQEAgLTUxMCwxNyArNTczLDE5IEBACiAKIAkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOworCWlmIChyY3R4IDwgMCkKKwkJZ290byBlbmRfcmVjdXJzaW9uOworCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JaWYgKGluX25taSgpKQotCQlyYXdfZGF0YSA9IHJjdV9kZXJlZmVyZW5jZSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOwotCWVsc2UKLQkJcmF3X2RhdGEgPSByY3VfZGVyZWZlcmVuY2UodHJhY2VfcHJvZmlsZV9idWYpOworCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CiAKLQlpZiAoIXJhd19kYXRhKQorCWlmICghdHJhY2VfYnVmKQogCQlnb3RvIGVuZDsKIAotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIocmF3X2RhdGEsIGNwdSk7CisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CiAKIAkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwogCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CkBAIC01MjgsMjQgKzU5MywyNCBAQAogCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICopcmF3X2RhdGE7CiAKIAl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMtPmVudCwgMCwgMCk7Ci0JcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5leGl0X2lkOworCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQ7CiAJcmVjLT5uciA9IHN5c2NhbGxfbnI7CiAJcmVjLT5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CiAKLQlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5leGl0X2lkLCAwLCAxLCByZWMsIHNpemUpOworCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkLCAwLCAxLCByZWMsIHNpemUpOwogCiBlbmQ6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKK2VuZF9yZWN1cnNpb246CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1pbnQgcmVnX3Byb2Zfc3lzY2FsbF9leGl0KGNoYXIgKm5hbWUpCitpbnQgcHJvZl9zeXNleGl0X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IG51bTsKIAotCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucihuYW1lKTsKLQlpZiAobnVtIDwgMCB8fCBudW0gPj0gTlJfc3lzY2FsbHMpCi0JCXJldHVybiAtRU5PU1lTOworCW51bSA9ICgoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKiljYWxsLT5kYXRhKS0+c3lzY2FsbF9ucjsKIAogCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CiAJaWYgKCFzeXNfcHJvZl9yZWZjb3VudF9leGl0KQpAQCAtNTYxLDEzICs2MjYsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHVucmVnX3Byb2Zfc3lzY2FsbF9leGl0KGNoYXIgKm5hbWUpCit2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKIAlpbnQgbnVtOwogCi0JbnVtID0gc3lzY2FsbF9uYW1lX3RvX25yKG5hbWUpOwotCWlmIChudW0gPCAwIHx8IG51bSA+PSBOUl9zeXNjYWxscykKLQkJcmV0dXJuOworCW51bSA9ICgoc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKiljYWxsLT5kYXRhKS0+c3lzY2FsbF9ucjsKIAogCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CiAJc3lzX3Byb2ZfcmVmY291bnRfZXhpdC0tOwpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggMmMwMDBlNy4uNDZkMDE2NSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0zMzAsOSArMzMwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgZnJlZV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnVwLT53b3JrLCBjbGVhbnVwX3VzZXJfc3RydWN0KTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVwLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgJiYgQ09ORklHX1NZU0ZTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggYWRkZmUyZC4uNjdlNTI2YiAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNjQwLDYgKzY0MCwyNCBAQAogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV9kZWxheWVkX3dvcmspOwogCiAvKioKKyAqIGZsdXNoX2RlbGF5ZWRfd29yayAtIGJsb2NrIHVudGlsIGEgZHdvcmtfc3RydWN0J3MgY2FsbGJhY2sgaGFzIHRlcm1pbmF0ZWQKKyAqIEBkd29yazogdGhlIGRlbGF5ZWQgd29yayB3aGljaCBpcyB0byBiZSBmbHVzaGVkCisgKgorICogQW55IHRpbWVvdXQgaXMgY2FuY2VsbGVkLCBhbmQgYW55IHBlbmRpbmcgd29yayBpcyBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZmx1c2hfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrKQoreworCWlmIChkZWxfdGltZXJfc3luYygmZHdvcmstPnRpbWVyKSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwkJY3dxID0gd3FfcGVyX2NwdShrZXZlbnRkX3dxLCBnZXRfY3B1KCkpOworCQlfX3F1ZXVlX3dvcmsoY3dxLCAmZHdvcmstPndvcmspOworCQlwdXRfY3B1KCk7CisJfQorCWZsdXNoX3dvcmsoJmR3b3JrLT53b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGVsYXllZF93b3JrKTsKKworLyoqCiAgKiBzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24gLSBxdWV1ZSB3b3JrIGluIGdsb2JhbCB3b3JrcXVldWUgb24gQ1BVIGFmdGVyIGRlbGF5CiAgKiBAY3B1OiBjcHUgdG8gdXNlCiAgKiBAZHdvcms6IGpvYiB0byBiZSBkb25lCkBAIC02NjcsNiArNjg1LDcgQEAKIGludCBzY2hlZHVsZV9vbl9lYWNoX2NwdSh3b3JrX2Z1bmNfdCBmdW5jKQogewogCWludCBjcHU7CisJaW50IG9yaWcgPSAtMTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtzOwogCiAJd29ya3MgPSBhbGxvY19wZXJjcHUoc3RydWN0IHdvcmtfc3RydWN0KTsKQEAgLTY3NCwxNCArNjkzLDI4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7CisKKwkvKgorCSAqIFdoZW4gcnVubmluZyBpbiBrZXZlbnRkIGRvbid0IHNjaGVkdWxlIGEgd29yayBpdGVtIG9uCisJICogaXRzZWxmLiAgQ2FuIGp1c3QgY2FsbCBkaXJlY3RseSBiZWNhdXNlIHRoZSB3b3JrIHF1ZXVlIGlzCisJICogYWxyZWFkeSBib3VuZC4gIFRoaXMgYWxzbyBpcyBmYXN0ZXIuCisJICovCisJaWYgKGN1cnJlbnRfaXNfa2V2ZW50ZCgpKQorCQlvcmlnID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpOwogCiAJCUlOSVRfV09SSyh3b3JrLCBmdW5jKTsKLQkJc2NoZWR1bGVfd29ya19vbihjcHUsIHdvcmspOworCQlpZiAoY3B1ICE9IG9yaWcpCisJCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CiAJfQorCWlmIChvcmlnID49IDApCisJCWZ1bmMocGVyX2NwdV9wdHIod29ya3MsIG9yaWcpKTsKKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlmbHVzaF93b3JrKHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKKwogCXB1dF9vbmxpbmVfY3B1cygpOwogCWZyZWVfcGVyY3B1KHdvcmtzKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMzBkZjU4Ni4uYTc5YzRkMCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM5Miw3ICszOTIsNyBAQAogCiBjb25maWcgREVCVUdfUFJFRU1QVAogCWJvb2wgIkRlYnVnIHByZWVtcHRpYmxlIGtlcm5lbCIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIChUUkFDRV9JUlFGTEFHU19TVVBQT1JUIHx8IFBQQzY0KQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHVzZSBhIGRlYnVnIHZhcmlhbnQgb2YgdGhlCkBAIC03NTAsNyArNzUwLDcgQEAKIGNvbmZpZyBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiAJYm9vbCAiQ2hlY2sgZm9yIHN0YWxsZWQgQ1BVcyBkZWxheWluZyBSQ1UgZ3JhY2UgcGVyaW9kcyIKIAlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UKLQlkZWZhdWx0IG4KKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIHByaW50ayBpbmZvcm1hdGlvbiBvbiB3aGljaAogCSAgQ1BVcyBhcmUgZGVsYXlpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLCBidXQgb25seSB3aGVuCmRpZmYgLS1naXQgYS9saWIvZG1hLWRlYnVnLmMgYi9saWIvZG1hLWRlYnVnLmMKaW5kZXggNThhOWY5Zi4uY2U2YjdlYSAxMDA2NDQKLS0tIGEvbGliL2RtYS1kZWJ1Zy5jCisrKyBiL2xpYi9kbWEtZGVidWcuYwpAQCAtODE5LDkgKzgxOSwxMSBAQAogCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgogCQkJICAgIkRNQSBtZW1vcnkgd2l0aCBkaWZmZXJlbnQgQ1BVIGFkZHJlc3MgIgogCQkJICAgIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKLQkJCSAgICJbY3B1IGFsbG9jIGFkZHJlc3M9JXBdIFtjcHUgZnJlZSBhZGRyZXNzPSVwXSIsCisJCQkgICAiW2NwdSBhbGxvYyBhZGRyZXNzPTB4JTAxNmxseF0gIgorCQkJICAgIltjcHUgZnJlZSBhZGRyZXNzPTB4JTAxNmxseF0iLAogCQkJICAgcmVmLT5kZXZfYWRkciwgcmVmLT5zaXplLAotCQkJICAgKHZvaWQgKillbnRyeS0+cGFkZHIsICh2b2lkICopcmVmLT5wYWRkcik7CisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWVudHJ5LT5wYWRkciwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVmLT5wYWRkcik7CiAJfQogCiAJaWYgKHJlZi0+c2dfY2FsbF9lbnRzICYmIHJlZi0+dHlwZSA9PSBkbWFfZGVidWdfc2cgJiYKZGlmZiAtLWdpdCBhL2xpYi9rZXJuZWxfbG9jay5jIGIvbGliL2tlcm5lbF9sb2NrLmMKaW5kZXggMzlmMTAyOS4uNGViZmE1YSAxMDA2NDQKLS0tIGEvbGliL2tlcm5lbF9sb2NrLmMKKysrIGIvbGliL2tlcm5lbF9sb2NrLmMKQEAgLTUsMTAgKzUsMTMgQEAKICAqIHJlbGVnYXRlZCB0byBvYnNvbGVzY2VuY2UsIGJ1dCB1c2VkIGJ5IHZhcmlvdXMgbGVzcwogICogaW1wb3J0YW50IChvciBsYXp5KSBzdWJzeXN0ZW1zLgogICovCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9ia2wuaD4KIAogLyoKICAqIFRoZSAnYmlnIGtlcm5lbCBsb2NrJwpAQCAtMTEzLDIxICsxMTYsMjYgQEAKICAqIFRoaXMgY2Fubm90IGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2Ugb25seSBuZWVkIHRvCiAgKiB3b3JyeSBhYm91dCBvdGhlciBDUFUncy4KICAqLwotdm9pZCBfX2xvY2tmdW5jIGxvY2tfa2VybmVsKHZvaWQpCit2b2lkIF9fbG9ja2Z1bmMgX2xvY2tfa2VybmVsKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQogewotCWludCBkZXB0aCA9IGN1cnJlbnQtPmxvY2tfZGVwdGgrMTsKKwlpbnQgZGVwdGggPSBjdXJyZW50LT5sb2NrX2RlcHRoICsgMTsKKworCXRyYWNlX2xvY2tfa2VybmVsKGZ1bmMsIGZpbGUsIGxpbmUpOworCiAJaWYgKGxpa2VseSghZGVwdGgpKQogCQlfX2xvY2tfa2VybmVsKCk7CiAJY3VycmVudC0+bG9ja19kZXB0aCA9IGRlcHRoOwogfQogCi12b2lkIF9fbG9ja2Z1bmMgdW5sb2NrX2tlcm5lbCh2b2lkKQordm9pZCBfX2xvY2tmdW5jIF91bmxvY2tfa2VybmVsKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQogewogCUJVR19PTihjdXJyZW50LT5sb2NrX2RlcHRoIDwgMCk7CiAJaWYgKGxpa2VseSgtLWN1cnJlbnQtPmxvY2tfZGVwdGggPCAwKSkKIAkJX191bmxvY2tfa2VybmVsKCk7CisKKwl0cmFjZV91bmxvY2tfa2VybmVsKGZ1bmMsIGZpbGUsIGxpbmUpOwogfQogCi1FWFBPUlRfU1lNQk9MKGxvY2tfa2VybmVsKTsKLUVYUE9SVF9TWU1CT0wodW5sb2NrX2tlcm5lbCk7CitFWFBPUlRfU1lNQk9MKF9sb2NrX2tlcm5lbCk7CitFWFBPUlRfU1lNQk9MKF91bmxvY2tfa2VybmVsKTsKIApkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggMjNhYmJkOS4uOTJjZGQ5OSAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC0yMDAsNiArMjAwLDkgQEAKICAqIGVuc3VyZSB0aGF0IHRoZSBhZGRpdGlvbiBvZiBhIHNpbmdsZSBlbGVtZW50IGluIHRoZSB0cmVlIGNhbm5vdCBmYWlsLiAgT24KICAqIHN1Y2Nlc3MsIHJldHVybiB6ZXJvLCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuICBPbiBlcnJvciwgcmV0dXJuIC1FTk9NRU0KICAqIHdpdGggcHJlZW1wdGlvbiBub3QgZGlzYWJsZWQuCisgKgorICogVG8gbWFrZSB1c2Ugb2YgdGhpcyBmYWNpbGl0eSwgdGhlIHJhZGl4IHRyZWUgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRob3V0CisgKiBfX0dGUF9XQUlUIGJlaW5nIHBhc3NlZCB0byBJTklUX1JBRElYX1RSRUUoKS4KICAqLwogaW50IHJhZGl4X3RyZWVfcHJlbG9hZChnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTU0Myw3ICs1NDYsNiBAQAogfQogRVhQT1JUX1NZTUJPTChyYWRpeF90cmVlX3RhZ19jbGVhcik7CiAKLSNpZm5kZWYgX19LRVJORUxfXwkvKiBPbmx5IHRoZSB0ZXN0IGhhcm5lc3MgdXNlcyB0aGlzIGF0IHByZXNlbnQgKi8KIC8qKgogICogcmFkaXhfdHJlZV90YWdfZ2V0IC0gZ2V0IGEgdGFnIG9uIGEgcmFkaXggdHJlZSBub2RlCiAgKiBAcm9vdDoJCXJhZGl4IHRyZWUgcm9vdApAQCAtNjA2LDcgKzYwOCw2IEBACiAJfQogfQogRVhQT1JUX1NZTUJPTChyYWRpeF90cmVlX3RhZ19nZXQpOwotI2VuZGlmCiAKIC8qKgogICoJcmFkaXhfdHJlZV9uZXh0X2hvbGUgICAgLSAgICBmaW5kIHRoZSBuZXh0IGhvbGUgKG5vdC1wcmVzZW50IGVudHJ5KQpkaWZmIC0tZ2l0IGEvbGliL3JhdGVsaW1pdC5jIGIvbGliL3JhdGVsaW1pdC5jCmluZGV4IDI2MTg3ZWQuLjA5ZjVjZTEgMTAwNjQ0Ci0tLSBhL2xpYi9yYXRlbGltaXQuYworKysgYi9saWIvcmF0ZWxpbWl0LmMKQEAgLTcsMTUgKzcsMTIgQEAKICAqIHBhcmFtZXRlci4gTm93IGV2ZXJ5IHVzZXIgY2FuIHVzZSB0aGVpciBvd24gc3RhbmRhbG9uZSByYXRlbGltaXRfc3RhdGUuCiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KLSAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhyYXRlbGltaXRfbG9jayk7Ci0KIC8qCiAgKiBfX3JhdGVsaW1pdCAtIHJhdGUgbGltaXRpbmcKICAqIEByczogcmF0ZWxpbWl0X3N0YXRlIGRhdGEKQEAgLTIzLDM1ICsyMCw0MyBAQAogICogVGhpcyBlbmZvcmNlcyBhIHJhdGUgbGltaXQ6IG5vdCBtb3JlIHRoYW4gQHJzLT5yYXRlbGltaXRfYnVyc3QgY2FsbGJhY2tzCiAgKiBpbiBldmVyeSBAcnMtPnJhdGVsaW1pdF9qaWZmaWVzCiAgKi8KLWludCBfX3JhdGVsaW1pdChzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlICpycykKK2ludCBfX19yYXRlbGltaXQoc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSAqcnMsIGNvbnN0IGNoYXIgKmZ1bmMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJaWYgKCFycy0+aW50ZXJ2YWwpCiAJCXJldHVybiAxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJhdGVsaW1pdF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBJZiB3ZSBjb250ZW5kIG9uIHRoaXMgc3RhdGUncyBsb2NrIHRoZW4gYWxtb3N0CisJICogYnkgZGVmaW5pdGlvbiB3ZSBhcmUgdG9vIGJ1c3kgdG8gcHJpbnQgYSBtZXNzYWdlLAorCSAqIGluIGFkZGl0aW9uIHRvIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHByaW50ZWQgYnkKKwkgKiB0aGUgZW50aXR5IHRoYXQgaXMgaG9sZGluZyB0aGUgbG9jayBhbHJlYWR5OgorCSAqLworCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzLT5sb2NrLCBmbGFncykpCisJCXJldHVybiAxOworCiAJaWYgKCFycy0+YmVnaW4pCiAJCXJzLT5iZWdpbiA9IGppZmZpZXM7CiAKIAlpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyhycy0+YmVnaW4gKyBycy0+aW50ZXJ2YWwpKSB7CiAJCWlmIChycy0+bWlzc2VkKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVkIGNhbGxiYWNrcyBzdXBwcmVzc2VkXG4iLAotCQkJCV9fZnVuY19fLCBycy0+bWlzc2VkKTsKLQkJcnMtPmJlZ2luID0gMDsKKwkJCQlmdW5jLCBycy0+bWlzc2VkKTsKKwkJcnMtPmJlZ2luICAgPSAwOwogCQlycy0+cHJpbnRlZCA9IDA7Ci0JCXJzLT5taXNzZWQgPSAwOworCQlycy0+bWlzc2VkICA9IDA7CiAJfQotCWlmIChycy0+YnVyc3QgJiYgcnMtPmJ1cnN0ID4gcnMtPnByaW50ZWQpCi0JCWdvdG8gcHJpbnQ7CisJaWYgKHJzLT5idXJzdCAmJiBycy0+YnVyc3QgPiBycy0+cHJpbnRlZCkgeworCQlycy0+cHJpbnRlZCsrOworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCXJzLT5taXNzZWQrKzsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPmxvY2ssIGZsYWdzKTsKIAotCXJzLT5taXNzZWQrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotCi1wcmludDoKLQlycy0+cHJpbnRlZCsrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19yYXRlbGltaXQpOworRVhQT1JUX1NZTUJPTChfX19yYXRlbGltaXQpOwpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGIxOWI4N2EuLmU5NjQyMWEgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTI0NiwxMyArMjQ2LDE3IEBACiAjdW5kZWYgc3RyY21wCiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCkKIHsKLQlzaWduZWQgY2hhciBfX3JlczsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICgoX19yZXMgPSAqY3MgLSAqY3QrKykgIT0gMCB8fCAhKmNzKyspCisJCWMxID0gKmNzKys7CisJCWMyID0gKmN0Kys7CisJCWlmIChjMSAhPSBjMikKKwkJCXJldHVybiBjMSA8IGMyID8gLTEgOiAxOworCQlpZiAoIWMxKQogCQkJYnJlYWs7CiAJfQotCXJldHVybiBfX3JlczsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKICNlbmRpZgpAQCAtMjY2LDE0ICsyNzAsMTggQEAKICAqLwogaW50IHN0cm5jbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0LCBzaXplX3QgY291bnQpCiB7Ci0Jc2lnbmVkIGNoYXIgX19yZXMgPSAwOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAJd2hpbGUgKGNvdW50KSB7Ci0JCWlmICgoX19yZXMgPSAqY3MgLSAqY3QrKykgIT0gMCB8fCAhKmNzKyspCisJCWMxID0gKmNzKys7CisJCWMyID0gKmN0Kys7CisJCWlmIChjMSAhPSBjMikKKwkJCXJldHVybiBjMSA8IGMyID8gLTEgOiAxOworCQlpZiAoIWMxKQogCQkJYnJlYWs7CiAJCWNvdW50LS07CiAJfQotCXJldHVybiBfX3JlczsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc3RybmNtcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IGFjMjVjZDIuLjc5NTQ3MmQgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtOTcsNiArOTcsOCBAQAogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvX3RsYl9sb2NrKTsKIAorc3RhdGljIGludCBsYXRlX2FsbG9jOworCiBzdGF0aWMgaW50IF9faW5pdAogc2V0dXBfaW9fdGxiX25wYWdlcyhjaGFyICpzdHIpCiB7CkBAIC0xMDksNiArMTExLDcgQEAKIAkJKytzdHI7CiAJaWYgKCFzdHJjbXAoc3RyLCAiZm9yY2UiKSkKIAkJc3dpb3RsYl9mb3JjZSA9IDE7CisKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoInN3aW90bGI9Iiwgc2V0dXBfaW9fdGxiX25wYWdlcyk7CkBAIC0xMjEsOCArMTI0LDkgQEAKIAlyZXR1cm4gcGh5c190b19kbWEoaHdkZXYsIHZpcnRfdG9fcGh5cyhhZGRyZXNzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN3aW90bGJfcHJpbnRfaW5mbyh1bnNpZ25lZCBsb25nIGJ5dGVzKQordm9pZCBzd2lvdGxiX3ByaW50X2luZm8odm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzID0gaW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CiAJcGh5c19hZGRyX3QgcHN0YXJ0LCBwZW5kOwogCiAJcHN0YXJ0ID0gdmlydF90b19waHlzKGlvX3RsYl9zdGFydCk7CkBAIC0xNDAsNyArMTQ0LDcgQEAKICAqIHN0cnVjdHVyZXMgZm9yIHRoZSBzb2Z0d2FyZSBJTyBUTEIgdXNlZCB0byBpbXBsZW1lbnQgdGhlIERNQSBBUEkuCiAgKi8KIHZvaWQgX19pbml0Ci1zd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoc2l6ZV90IGRlZmF1bHRfc2l6ZSkKK3N3aW90bGJfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZShzaXplX3QgZGVmYXVsdF9zaXplLCBpbnQgdmVyYm9zZSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGJ5dGVzOwogCkBAIC0xNzYsMTQgKzE4MCwxNCBAQAogCWlvX3RsYl9vdmVyZmxvd19idWZmZXIgPSBhbGxvY19ib290bWVtX2xvdyhpb190bGJfb3ZlcmZsb3cpOwogCWlmICghaW9fdGxiX292ZXJmbG93X2J1ZmZlcikKIAkJcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBTV0lPVExCIG92ZXJmbG93IGJ1ZmZlciFcbiIpOwotCi0Jc3dpb3RsYl9wcmludF9pbmZvKGJ5dGVzKTsKKwlpZiAodmVyYm9zZSkKKwkJc3dpb3RsYl9wcmludF9pbmZvKCk7CiB9CiAKIHZvaWQgX19pbml0Ci1zd2lvdGxiX2luaXQodm9pZCkKK3N3aW90bGJfaW5pdChpbnQgdmVyYm9zZSkKIHsKLQlzd2lvdGxiX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKTsJLyogZGVmYXVsdCB0byA2NE1CICovCisJc3dpb3RsYl9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSwgdmVyYm9zZSk7CS8qIGRlZmF1bHQgdG8gNjRNQiAqLwogfQogCiAvKgpAQCAtMjYwLDcgKzI2NCw5IEBACiAJaWYgKCFpb190bGJfb3ZlcmZsb3dfYnVmZmVyKQogCQlnb3RvIGNsZWFudXA0OwogCi0Jc3dpb3RsYl9wcmludF9pbmZvKGJ5dGVzKTsKKwlzd2lvdGxiX3ByaW50X2luZm8oKTsKKworCWxhdGVfYWxsb2MgPSAxOwogCiAJcmV0dXJuIDA7CiAKQEAgLTI4MSw2ICsyODcsMzIgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAordm9pZCBfX2luaXQgc3dpb3RsYl9mcmVlKHZvaWQpCit7CisJaWYgKCFpb190bGJfb3ZlcmZsb3dfYnVmZmVyKQorCQlyZXR1cm47CisKKwlpZiAobGF0ZV9hbGxvYykgeworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvX3RsYl9vdmVyZmxvd19idWZmZXIsCisJCQkgICBnZXRfb3JkZXIoaW9fdGxiX292ZXJmbG93KSk7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpaW9fdGxiX29yaWdfYWRkciwKKwkJCSAgIGdldF9vcmRlcihpb190bGJfbnNsYWJzICogc2l6ZW9mKHBoeXNfYWRkcl90KSkpOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvX3RsYl9saXN0LCBnZXRfb3JkZXIoaW9fdGxiX25zbGFicyAqCisJCQkJCQkJCSBzaXplb2YoaW50KSkpOworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWlvX3RsYl9zdGFydCwKKwkJCSAgIGdldF9vcmRlcihpb190bGJfbnNsYWJzIDw8IElPX1RMQl9TSElGVCkpOworCX0gZWxzZSB7CisJCWZyZWVfYm9vdG1lbV9sYXRlKF9fcGEoaW9fdGxiX292ZXJmbG93X2J1ZmZlciksCisJCQkJICBpb190bGJfb3ZlcmZsb3cpOworCQlmcmVlX2Jvb3RtZW1fbGF0ZShfX3BhKGlvX3RsYl9vcmlnX2FkZHIpLAorCQkJCSAgaW9fdGxiX25zbGFicyAqIHNpemVvZihwaHlzX2FkZHJfdCkpOworCQlmcmVlX2Jvb3RtZW1fbGF0ZShfX3BhKGlvX3RsYl9saXN0KSwKKwkJCQkgIGlvX3RsYl9uc2xhYnMgKiBzaXplb2YoaW50KSk7CisJCWZyZWVfYm9vdG1lbV9sYXRlKF9fcGEoaW9fdGxiX3N0YXJ0KSwKKwkJCQkgIGlvX3RsYl9uc2xhYnMgPDwgSU9fVExCX1NISUZUKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaXNfc3dpb3RsYl9idWZmZXIocGh5c19hZGRyX3QgcGFkZHIpCiB7CiAJcmV0dXJuIHBhZGRyID49IHZpcnRfdG9fcGh5cyhpb190bGJfc3RhcnQpICYmCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA1Nzk2M2M2Li40NGNmNmYwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTY3LDcgKzY3LDcgQEAKIAogY29uZmlnIFNQQVJTRU1FTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTV9NQU5VQUwKKwlkZXBlbmRzIG9uICghU0VMRUNUX01FTU9SWV9NT0RFTCAmJiBBUkNIX1NQQVJTRU1FTV9FTkFCTEUpIHx8IFNQQVJTRU1FTV9NQU5VQUwKIAogY29uZmlnIEZMQVRNRU0KIAlkZWZfYm9vbCB5CkBAIC0xMjgsMTEgKzEyOCw4IEBACiBjb25maWcgTUVNT1JZX0hPVFBMVUcKIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGhvdC1hZGQiCiAJZGVwZW5kcyBvbiBTUEFSU0VNRU0gfHwgWDg2XzY0X0FDUElfTlVNQQotCWRlcGVuZHMgb24gSE9UUExVRyAmJiAhKEhJQkVSTkFUSU9OICYmICFTMzkwKSAmJiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwotCWRlcGVuZHMgb24gKElBNjQgfHwgWDg2IHx8IFBQQzY0IHx8IFNVUEVSSCB8fCBTMzkwKQotCi1jb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCisJZGVwZW5kcyBvbiBIT1RQTFVHICYmIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiAoSUE2NCB8fCBYODYgfHwgUFBDX0JPT0szU182NCB8fCBTVVBFUkggfHwgUzM5MCkKIAogY29uZmlnIE1FTU9SWV9IT1RQTFVHX1NQQVJTRQogCWRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDVhMzdlMjAuLjY3YTMzYTUgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtNjA0LDE1ICs2MDQsMzYgQEAKIAogCS8qCiAJICogRmluYWxseSwga2lsbCB0aGUga2VybmVsIHRocmVhZHMuIFdlIGRvbid0IG5lZWQgdG8gYmUgUkNVCi0JICogc2FmZSBhbnltb3JlLCBzaW5jZSB0aGUgYmRpIGlzIGdvbmUgZnJvbSB2aXNpYmlsaXR5LgorCSAqIHNhZmUgYW55bW9yZSwgc2luY2UgdGhlIGJkaSBpcyBnb25lIGZyb20gdmlzaWJpbGl0eS4gRm9yY2UKKwkgKiB1bmZyZWV6ZSBvZiB0aGUgdGhyZWFkIGJlZm9yZSBjYWxsaW5nIGt0aHJlYWRfc3RvcCgpLCBvdGhlcndpc2UKKwkgKiBpdCB3b3VsZCBuZXZlciBleGV0IGlmIGl0IGlzIGN1cnJlbnRseSBzdHVjayBpbiB0aGUgcmVmcmlnZXJhdG9yLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkod2IsICZiZGktPndiX2xpc3QsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YiwgJmJkaS0+d2JfbGlzdCwgbGlzdCkgeworCQl3Yi0+dGFzay0+ZmxhZ3MgJj0gflBGX0ZST1pFTjsKIAkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGJkaSBpcyBnb2luZyBhd2F5IG5vdywgbWFrZSBzdXJlIHRoYXQgbm8gc3VwZXJfYmxvY2tzIHBvaW50IHRvIGl0CisgKi8KK3N0YXRpYyB2b2lkIGJkaV9wcnVuZV9zYihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisKKwlzcGluX2xvY2soJnNiX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCQlpZiAoc2ItPnNfYmRpID09IGJkaSkKKwkJCXNiLT5zX2JkaSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIH0KIAogdm9pZCBiZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCWlmIChiZGktPmRldikgeworCQliZGlfcHJ1bmVfc2IoYmRpKTsKKwogCQlpZiAoIWJkaV9jYXBfZmx1c2hfZm9ya2VyKGJkaSkpCiAJCQliZGlfd2Jfc2h1dGRvd24oYmRpKTsKIAkJYmRpX2RlYnVnX3VucmVnaXN0ZXIoYmRpKTsKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCA1NTVkNWQyLi5kMWRjMjNjIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC0xNDMsNiArMTQzLDMwIEBACiAJcmV0dXJuIGluaXRfYm9vdG1lbV9jb3JlKE5PREVfREFUQSgwKS0+YmRhdGEsIHN0YXJ0LCAwLCBwYWdlcyk7CiB9CiAKKy8qCisgKiBmcmVlX2Jvb3RtZW1fbGF0ZSAtIGZyZWUgYm9vdG1lbSBwYWdlcyBkaXJlY3RseSB0byBwYWdlIGFsbG9jYXRvcgorICogQGFkZHI6IHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHJhbmdlCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmFuZ2UgaW4gYnl0ZXMKKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9ybgorICogZG93biwgYnV0IHdlIGFyZSBzdGlsbCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbS4gIFBhZ2VzIGFyZSBnaXZlbiBkaXJlY3RseQorICogdG8gdGhlIHBhZ2UgYWxsb2NhdG9yLCBubyBib290bWVtIG1ldGFkYXRhIGlzIHVwZGF0ZWQgYmVjYXVzZSBpdCBpcyBnb25lLgorICovCit2b2lkIF9faW5pdCBmcmVlX2Jvb3RtZW1fbGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGN1cnNvciwgZW5kOworCisJa21lbWxlYWtfZnJlZV9wYXJ0KF9fdmEoYWRkciksIHNpemUpOworCisJY3Vyc29yID0gUEZOX1VQKGFkZHIpOworCWVuZCA9IFBGTl9ET1dOKGFkZHIgKyBzaXplKTsKKworCWZvciAoOyBjdXJzb3IgPCBlbmQ7IGN1cnNvcisrKSB7CisJCV9fZnJlZV9wYWdlc19ib290bWVtKHBmbl90b19wYWdlKGN1cnNvciksIDApOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX2Jvb3RtZW1fY29yZShib290bWVtX2RhdGFfdCAqYmRhdGEpCiB7CiAJaW50IGFsaWduZWQ7CmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggMjU4NzhjYy4uOWMxZTYyNyAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDI2LDE2ICs0MjYsMjEgQEAKIAogdm9pZCBkZWJ1Z19rbWFwX2F0b21pYyhlbnVtIGttX3R5cGUgdHlwZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgd2Fybl9jb3VudCA9IDEwOworCXN0YXRpYyBpbnQgd2Fybl9jb3VudCA9IDEwOwogCi0JaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPCAwKSkKIAkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkgewotCQlpZiAoaW5faXJxKCkpIHsKKwkJaWYgKGluX25taSgpKSB7CisJCQlpZiAodHlwZSAhPSBLTV9OTUkgJiYgdHlwZSAhPSBLTV9OTUlfUFRFKSB7CisJCQkJV0FSTl9PTigxKTsKKwkJCQl3YXJuX2NvdW50LS07CisJCQl9CisJCX0gZWxzZSBpZiAoaW5faXJxKCkpIHsKIAkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCiAJCQkgICAgdHlwZSAhPSBLTV9CSU9fU1JDX0lSUSAmJiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmCi0JCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQgJiYgdHlwZSAhPSBLTV9JUlFfUFRFKSB7CiAJCQkJV0FSTl9PTigxKTsKIAkJCQl3YXJuX2NvdW50LS07CiAJCQl9CkBAIC00NTIsNyArNDU3LDkgQEAKIAl9CiAKIAlpZiAodHlwZSA9PSBLTV9JUlEwIHx8IHR5cGUgPT0gS01fSVJRMSB8fCB0eXBlID09IEtNX0JPVU5DRV9SRUFEIHx8Ci0JCQl0eXBlID09IEtNX0JJT19TUkNfSVJRIHx8IHR5cGUgPT0gS01fQklPX0RTVF9JUlEpIHsKKwkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSB8fAorCQkJdHlwZSA9PSBLTV9JUlFfUFRFIHx8IHR5cGUgPT0gS01fTk1JIHx8CisJCQl0eXBlID09IEtNX05NSV9QVEUgKSB7CiAJCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CiAJCQlXQVJOX09OKDEpOwogCQkJd2Fybl9jb3VudC0tOwpkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCBiZWYxYWY0Li41NTc1Zjg2IDEwMDY0NAotLS0gYS9tbS9rc20uYworKysgYi9tbS9rc20uYwpAQCAtMTAxMiw2ICsxMDEyLDcgQEAKIAkJc3RydWN0IHJtYXBfaXRlbSAqdHJlZV9ybWFwX2l0ZW07CiAJCWludCByZXQ7CiAKKwkJY29uZF9yZXNjaGVkKCk7CiAJCXRyZWVfcm1hcF9pdGVtID0gcmJfZW50cnkoKm5ldywgc3RydWN0IHJtYXBfaXRlbSwgbm9kZSk7CiAJCXBhZ2UyWzBdID0gZ2V0X21lcmdlYWJsZV9wYWdlKHRyZWVfcm1hcF9pdGVtKTsKIAkJaWYgKCFwYWdlMlswXSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDcyOWQ0YjEuLmRhY2M2NDEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CkBAIC0zNzAsOSArMzcxLDYgQEAKIAlpbnQgcmV0ID0gRkFJTEVEOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKQotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0KIAkvKgogCSAqIEZvciBhbm9ueW1vdXMgcGFnZXMgd2UncmUgZG9uZSB0aGUgb25seSByZWZlcmVuY2UgbGVmdAogCSAqIHNob3VsZCBiZSB0aGUgb25lIG1fZigpIGhvbGRzLgpAQCAtNDk4LDMwICs0OTYsMTggQEAKICAqLwogc3RhdGljIGludCBtZV9zd2FwY2FjaGVfZGlydHkoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCWludCByZXQgPSBGQUlMRUQ7Ci0KIAlDbGVhclBhZ2VEaXJ0eShwKTsKIAkvKiBUcmlnZ2VyIEVJTyBpbiBzaG1lbTogKi8KIAlDbGVhclBhZ2VVcHRvZGF0ZShwKTsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkgewotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0JCXJldCA9IERFTEFZRUQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gREVMQVlFRDsKIH0KIAogc3RhdGljIGludCBtZV9zd2FwY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCWludCByZXQgPSBGQUlMRUQ7Ci0KLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBSRUNPVkVSRUQ7Ci0JfQogCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocCk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBSRUNPVkVSRUQ7CiB9CiAKIC8qCkBAIC02MTEsOCArNTk3LDYgQEAKIAl7IDAsCQkwLAkJInVua25vd24gcGFnZSBzdGF0ZSIsCW1lX3Vua25vd24gfSwKIH07CiAKLSN1bmRlZiBscnUKLQogc3RhdGljIHZvaWQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgY2hhciAqbXNnLCBpbnQgcmVzdWx0KQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKQEAgLTYyOSwxMyArNjEzLDE2IEBACiAJCQl1bnNpZ25lZCBsb25nIHBmbiwgaW50IHJlZikKIHsKIAlpbnQgcmVzdWx0OworCWludCBjb3VudDsKIAogCXJlc3VsdCA9IHBzLT5hY3Rpb24ocCwgcGZuKTsKIAlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKLQlpZiAocGFnZV9jb3VudChwKSAhPSAxICsgcmVmKQorCisJY291bnQgPSBwYWdlX2NvdW50KHApIC0gMSAtIHJlZjsKKwlpZiAoY291bnQgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiTUNFICUjbHg6ICVzIHBhZ2Ugc3RpbGwgcmVmZXJlbmNlZCBieSAlZCB1c2Vyc1xuIiwKLQkJICAgICAgIHBmbiwgcHMtPm1zZywgcGFnZV9jb3VudChwKSAtIDEpOworCQkgICAgICAgcGZuLCBwcy0+bXNnLCBjb3VudCk7CiAKIAkvKiBDb3VsZCBkbyBtb3JlIGNoZWNrcyBoZXJlIGlmIHBhZ2UgbG9va3Mgb2sgKi8KIAkvKgpAQCAtNjYxLDEyICs2NDgsOSBAQAogCWludCBpOwogCWludCBraWxsID0gMTsKIAotCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZUNvbXBvdW5kKHApIHx8IFBhZ2VTbGFiKHApKQorCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZUNvbXBvdW5kKHApIHx8IFBhZ2VTbGFiKHApIHx8IFBhZ2VLc20ocCkpCiAJCXJldHVybjsKIAotCWlmICghUGFnZUxSVShwKSkKLQkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKLQogCS8qCiAJICogVGhpcyBjaGVjayBpbXBsaWVzIHdlIGRvbid0IGtpbGwgcHJvY2Vzc2VzIGlmIHRoZWlyIHBhZ2VzCiAJICogYXJlIGluIHRoZSBzd2FwIGNhY2hlIGVhcmx5LiBUaG9zZSBhcmUgYWx3YXlzIGxhdGUga2lsbHMuCkBAIC03MzgsNiArNzIyLDcgQEAKIAogaW50IF9fbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCByZWYpCiB7CisJdW5zaWduZWQgbG9uZyBscnVfZmxhZzsKIAlzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHM7CiAJc3RydWN0IHBhZ2UgKnA7CiAJaW50IHJlczsKQEAgLTc3NSw2ICs3NjAsMjQgQEAKIAl9CiAKIAkvKgorCSAqIFdlIGlnbm9yZSBub24tTFJVIHBhZ2VzIGZvciBnb29kIHJlYXNvbnMuCisJICogLSBQR19sb2NrZWQgaXMgb25seSB3ZWxsIGRlZmluZWQgZm9yIExSVSBwYWdlcyBhbmQgYSBmZXcgb3RoZXJzCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fc2V0X3BhZ2VfbG9ja2VkKCkKKwkgKiAtIHRvIGF2b2lkIHJhY2VzIHdpdGggX19TZXRQYWdlU2xhYiooKSAoYW5kIG1vcmUgbm9uLWF0b21pYyBvcHMpCisJICogVGhlIGNoZWNrICh1bm5lY2Vzc2FyaWx5KSBpZ25vcmVzIExSVSBwYWdlcyBiZWluZyBpc29sYXRlZCBhbmQKKwkgKiB3YWxrZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLCBob3dldmVyIHRoYXQncyBub3QgYSBiaWcgbG9zcy4KKwkgKi8KKwlpZiAoIVBhZ2VMUlUocCkpCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJbHJ1X2ZsYWcgPSBwLT5mbGFncyAmIGxydTsKKwlpZiAoaXNvbGF0ZV9scnVfcGFnZShwKSkgeworCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKKwkJcHV0X3BhZ2UocCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKKworCS8qCiAJICogTG9jayB0aGUgcGFnZSBhbmQgd2FpdCBmb3Igd3JpdGViYWNrIHRvIGZpbmlzaC4KIAkgKiBJdCdzIHZlcnkgZGlmZmljdWx0IHRvIG1lc3Mgd2l0aCBwYWdlcyBjdXJyZW50bHkgdW5kZXIgSU8KIAkgKiBhbmQgaW4gbWFueSBjYXNlcyBpbXBvc3NpYmxlLCBzbyB3ZSBqdXN0IGF2b2lkIGl0IGhlcmUuCkBAIC03OTAsNyArNzkzLDcgQEAKIAkvKgogCSAqIFRvcm4gZG93biBieSBzb21lb25lIGVsc2U/CiAJICovCi0JaWYgKFBhZ2VMUlUocCkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CisJaWYgKChscnVfZmxhZyAmIGxydSkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiYWxyZWFkeSB0cnVuY2F0ZWQgTFJVIiwgSUdOT1JFRCk7CiAJCXJlcyA9IDA7CiAJCWdvdG8gb3V0OwpAQCAtNzk4LDcgKzgwMSw3IEBACiAKIAlyZXMgPSAtRUJVU1k7CiAJZm9yIChwcyA9IGVycm9yX3N0YXRlczs7IHBzKyspIHsKLQkJaWYgKChwLT5mbGFncyAmIHBzLT5tYXNrKSA9PSBwcy0+cmVzKSB7CisJCWlmICgoKHAtPmZsYWdzIHwgbHJ1X2ZsYWcpJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgewogCQkJcmVzID0gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbiwgcmVmKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDdlOTFiNWYuLjZhYjE5ZGQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC02NDEsNiArNjQxLDcgQEAKIAkJcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwlwdGVfdCAqb3JpZ19zcmNfcHRlLCAqb3JpZ19kc3RfcHRlOwogCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZTsKIAlzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDsKIAlpbnQgcHJvZ3Jlc3MgPSAwOwpAQCAtNjU0LDYgKzY1NSw4IEBACiAJc3JjX3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChzcmNfcG1kLCBhZGRyKTsKIAlzcmNfcHRsID0gcHRlX2xvY2twdHIoc3JjX21tLCBzcmNfcG1kKTsKIAlzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwlvcmlnX3NyY19wdGUgPSBzcmNfcHRlOworCW9yaWdfZHN0X3B0ZSA9IGRzdF9wdGU7CiAJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAKIAlkbyB7CkBAIC02NzcsOSArNjgwLDkgQEAKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXNwaW5fdW5sb2NrKHNyY19wdGwpOwotCXB0ZV91bm1hcF9uZXN0ZWQoc3JjX3B0ZSAtIDEpOworCXB0ZV91bm1hcF9uZXN0ZWQob3JpZ19zcmNfcHRlKTsKIAlhZGRfbW1fcnNzKGRzdF9tbSwgcnNzWzBdLCByc3NbMV0pOwotCXB0ZV91bm1hcF91bmxvY2soZHN0X3B0ZSAtIDEsIGRzdF9wdGwpOworCXB0ZV91bm1hcF91bmxvY2sob3JpZ19kc3RfcHRlLCBkc3RfcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIAlpZiAoYWRkciAhPSBlbmQpCiAJCWdvdG8gYWdhaW47CkBAIC0xODIwLDEwICsxODIzLDEwIEBACiAJdG9rZW4gPSBwbWRfcGd0YWJsZSgqcG1kKTsKIAogCWRvIHsKLQkJZXJyID0gZm4ocHRlLCB0b2tlbiwgYWRkciwgZGF0YSk7CisJCWVyciA9IGZuKHB0ZSsrLCB0b2tlbiwgYWRkciwgZGF0YSk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKLQl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKKwl9IHdoaWxlIChhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAKQEAgLTI1MzksNyArMjU0Miw3IEBACiAJfSBlbHNlIGlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHsKIAkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT047CiAJCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC0yNjExLDYgKzI2MTQsNyBAQAogCXB0ZV91bm1hcF91bmxvY2socGFnZV90YWJsZSwgcHRsKTsKIG91dF9wYWdlOgogCXVubG9ja19wYWdlKHBhZ2UpOworb3V0X3JlbGVhc2U6CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA4MjFkZWU1Li4yMDQ3NDY1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtNDQ3LDcgKzQ0OCw4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRSAqLwogCi1zdGF0aWMgcGdfZGF0YV90ICpob3RhZGRfbmV3X3BnZGF0KGludCBuaWQsIHU2NCBzdGFydCkKKy8qIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KK3N0YXRpYyBwZ19kYXRhX3QgX19yZWYgKmhvdGFkZF9uZXdfcGdkYXQoaW50IG5pZCwgdTY0IHN0YXJ0KQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CiAJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7MH07CkBAIC00ODQsMTQgKzQ4NiwxOCBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQ7CiAKKwlsb2NrX3N5c3RlbV9zbGVlcCgpOworCiAJcmVzID0gcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplKTsKKwlyZXQgPSAtRUVYSVNUOwogCWlmICghcmVzKQotCQlyZXR1cm4gLUVFWElTVDsKKwkJZ290byBvdXQ7CiAKIAlpZiAoIW5vZGVfb25saW5lKG5pZCkpIHsKIAkJcGdkYXQgPSBob3RhZGRfbmV3X3BnZGF0KG5pZCwgc3RhcnQpOworCQlyZXQgPSAtRU5PTUVNOwogCQlpZiAoIXBnZGF0KQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG91dDsKIAkJbmV3X3BnZGF0ID0gMTsKIAl9CiAKQEAgLTUxNCw3ICs1MjAsOCBAQAogCQlCVUdfT04ocmV0KTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCWdvdG8gb3V0OworCiBlcnJvcjoKIAkvKiByb2xsYmFjayBwZ2RhdCBhbGxvY2F0aW9uIGFuZCBvdGhlcnMgKi8KIAlpZiAobmV3X3BnZGF0KQpAQCAtNTIyLDYgKzUyOSw4IEBACiAJaWYgKHJlcykKIAkJcmVsZWFzZV9tZW1vcnlfcmVzb3VyY2UocmVzKTsKIAorb3V0OgorCXVubG9ja19zeXN0ZW1fc2xlZXAoKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7CkBAIC03NTgsNiArNzY3LDggQEAKIAlpZiAoIXRlc3RfcGFnZXNfaW5fYV96b25lKHN0YXJ0X3BmbiwgZW5kX3BmbikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbG9ja19zeXN0ZW1fc2xlZXAoKTsKKwogCXpvbmUgPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSk7CiAJbm9kZSA9IHpvbmVfdG9fbmlkKHpvbmUpOwogCW5yX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKQEAgLTc2NSw3ICs3NzYsNyBAQAogCS8qIHNldCBhYm92ZSByYW5nZSBhcyBpc29sYXRlZCAqLwogCXJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCiAJYXJnLnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKIAlhcmcubnJfcGFnZXMgPSBucl9wYWdlczsKQEAgLTg0Myw2ICs4NTQsNyBAQAogCXdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KCk7CiAKIAltZW1vcnlfbm90aWZ5KE1FTV9PRkZMSU5FLCAmYXJnKTsKKwl1bmxvY2tfc3lzdGVtX3NsZWVwKCk7CiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9yZW1vdmFsOgpAQCAtODUyLDYgKzg2NCw4IEBACiAJLyogcHVzaGJhY2sgdG8gZnJlZSBhcmVhICovCiAJdW5kb19pc29sYXRlX3BhZ2VfcmFuZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAorb3V0OgorCXVubG9ja19zeXN0ZW1fc2xlZXAoKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDdkZDlkOWYuLjQ1NDVkNTkgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCiAJCWVyciA9IG1pZ3JhdGVfcHJlcCgpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gbXBvbF9vdXQ7CiAJfQogCXsKIAkJTk9ERU1BU0tfU0NSQVRDSChzY3JhdGNoKTsKQEAgLTEwMzksMTAgKzEwMzksOSBAQAogCQkJZXJyID0gLUVOT01FTTsKIAkJTk9ERU1BU0tfU0NSQVRDSF9GUkVFKHNjcmF0Y2gpOwogCX0KLQlpZiAoZXJyKSB7Ci0JCW1wb2xfcHV0KG5ldyk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gbXBvbF9vdXQ7CisKIAl2bWEgPSBjaGVja19yYW5nZShtbSwgc3RhcnQsIGVuZCwgbm1hc2ssCiAJCQkgIGZsYWdzIHwgTVBPTF9NRl9JTlZFUlQsICZwYWdlbGlzdCk7CiAKQEAgLTEwNTgsOSArMTA1NywxMSBAQAogCiAJCWlmICghZXJyICYmIG5yX2ZhaWxlZCAmJiAoZmxhZ3MgJiBNUE9MX01GX1NUUklDVCkpCiAJCQllcnIgPSAtRUlPOwotCX0KKwl9IGVsc2UKKwkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIAogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworIG1wb2xfb3V0OgogCW1wb2xfcHV0KG5ldyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAxYTRiZjQ4Li43ZGJjYjIyIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IGdldF9uZXdfcGFnZShwYWdlLCBwcml2YXRlLCAmcmVzdWx0KTsKIAlpbnQgcmN1X2xvY2tlZCA9IDA7CiAJaW50IGNoYXJnZSA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKIAogCWlmICghbmV3cGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggNzNmNWU0Yi4uMjkyZGRjMyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMDYxLDkgKzEwNjAsNiBAQAogCWVycm9yID0gc2VjdXJpdHlfZmlsZV9tbWFwKGZpbGUsIHJlcXByb3QsIHByb3QsIGZsYWdzLCBhZGRyLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGltYV9maWxlX21tYXAoZmlsZSwgcHJvdCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CiAKIAlyZXR1cm4gbW1hcF9yZWdpb24oZmlsZSwgYWRkciwgbGVuLCBmbGFncywgdm1fZmxhZ3MsIHBnb2ZmKTsKIH0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDUxODliNWEuLjk4NzZmYTAgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTM2Miw5ICsxMzYyLDExIEBACiBlcnJvcl9qdXN0X2ZyZWU6CiAJdXBfd3JpdGUoJm5vbW11X3JlZ2lvbl9zZW0pOwogZXJyb3I6Ci0JZnB1dChyZWdpb24tPnZtX2ZpbGUpOworCWlmIChyZWdpb24tPnZtX2ZpbGUpCisJCWZwdXQocmVnaW9uLT52bV9maWxlKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fcmVnaW9uX2phciwgcmVnaW9uKTsKLQlmcHV0KHZtYS0+dm1fZmlsZSk7CisJaWYgKHZtYS0+dm1fZmlsZSkKKwkJZnB1dCh2bWEtPnZtX2ZpbGUpOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJcmVtb3ZlZF9leGVfZmlsZV92bWEodm1hLT52bV9tbSk7CiAJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGJmNzIwNTUuLjJiYzJhYzYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE3NjksNyArMTc2OSw3IEBACiAJCSAqIFNlZSBhbHNvIGNwdXNldF96b25lX2FsbG93ZWQoKSBjb21tZW50IGluIGtlcm5lbC9jcHVzZXQuYy4KIAkJICovCiAJCWFsbG9jX2ZsYWdzICY9IH5BTExPQ19DUFVTRVQ7Ci0JfSBlbHNlIGlmICh1bmxpa2VseShydF90YXNrKHApKSkKKwl9IGVsc2UgaWYgKHVubGlrZWx5KHJ0X3Rhc2socCkpICYmICFpbl9pbnRlcnJ1cHQoKSkKIAkJYWxsb2NfZmxhZ3MgfD0gQUxMT0NfSEFSREVSOwogCiAJaWYgKGxpa2VseSghKGdmcF9tYXNrICYgX19HRlBfTk9NRU1BTExPQykpKSB7CkBAIC0xODE3LDkgKzE4MTcsOSBAQAogCWlmIChOVU1BX0JVSUxEICYmIChnZnBfbWFzayAmIEdGUF9USElTTk9ERSkgPT0gR0ZQX1RISVNOT0RFKQogCQlnb3RvIG5vcGFnZTsKIAorcmVzdGFydDoKIAl3YWtlX2FsbF9rc3dhcGQob3JkZXIsIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgpOwogCi1yZXN0YXJ0OgogCS8qCiAJICogT0ssIHdlJ3JlIGJlbG93IHRoZSBrc3dhcGQgd2F0ZXJtYXJrIGFuZCBoYXZlIGtpY2tlZCBiYWNrZ3JvdW5kCiAJICogcmVjbGFpbS4gTm93IHRoaW5ncyBnZXQgbW9yZSBjb21wbGV4LCBzbyBzZXQgdXAgYWxsb2NfZmxhZ3MgYWNjb3JkaW5nCkBAIC0yMTgzLDcgKzIxODMsNyBAQAogCXByaW50aygiYWN0aXZlX2Fub246JWx1IGluYWN0aXZlX2Fub246JWx1IGlzb2xhdGVkX2Fub246JWx1XG4iCiAJCSIgYWN0aXZlX2ZpbGU6JWx1IGluYWN0aXZlX2ZpbGU6JWx1IGlzb2xhdGVkX2ZpbGU6JWx1XG4iCiAJCSIgdW5ldmljdGFibGU6JWx1IgotCQkiIGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdSBidWZmZXI6JWx1XG4iCisJCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1XG4iCiAJCSIgZnJlZTolbHUgc2xhYl9yZWNsYWltYWJsZTolbHUgc2xhYl91bnJlY2xhaW1hYmxlOiVsdVxuIgogCQkiIG1hcHBlZDolbHUgc2htZW06JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKSwKQEAgLTIxOTYsNyArMjE5Niw2IEBACiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpLAotCQlucl9ibG9ja2Rldl9wYWdlcygpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfVU5SRUNMQUlNQUJMRSksCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDZhZjc4YzFlLi41YWRmYzI2IDEwMDY0NAotLS0gYS9tbS9wZXJjcHUuYworKysgYi9tbS9wZXJjcHUuYwpAQCAtMTUzLDcgKzE1MywxMCBAQAogICoKICAqIER1cmluZyBhbGxvY2F0aW9uLCBwY3B1X2FsbG9jX211dGV4IGlzIGtlcHQgbG9ja2VkIGFsbCB0aGUgdGltZSBhbmQKICAqIHBjcHVfbG9jayBpcyBncmFiYmVkIGFuZCByZWxlYXNlZCBhcyBuZWNlc3NhcnkuICBBbGwgYWN0dWFsIG1lbW9yeQotICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4KKyAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuICBJbgorICogZ2VuZXJhbCwgcGVyY3B1IG1lbW9yeSBjYW4ndCBiZSBhbGxvY2F0ZWQgd2l0aCBpcnEgb2ZmIGJ1dAorICogaXJxc2F2ZS9yZXN0b3JlIGFyZSBzdGlsbCB1c2VkIGluIGFsbG9jIHBhdGggc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogZnJvbSBlYXJseSBpbml0IHBhdGggLSBzY2hlZF9pbml0KCkgc3BlY2lmaWNhbGx5LgogICoKICAqIEZyZWUgcGF0aCBhY2Nlc3NlcyBhbmQgYWx0ZXJzIG9ubHkgdGhlIGluZGV4IGRhdGEgc3RydWN0dXJlcywgc28gaXQKICAqIGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuICBXaGVuIG1lbW9yeSBuZWVkcyB0byBiZQpAQCAtMzUyLDYyICszNTUsODYgQEAKIH0KIAogLyoqCi0gKiBwY3B1X2V4dGVuZF9hcmVhX21hcCAtIGV4dGVuZCBhcmVhIG1hcCBmb3IgYWxsb2NhdGlvbgotICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqIHBjcHVfbmVlZF90b19leHRlbmQgLSBkZXRlcm1pbmUgd2hldGhlciBjaHVuayBhcmVhIG1hcCBuZWVkcyB0byBiZSBleHRlbmRlZAorICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAogICoKLSAqIEV4dGVuZCBhcmVhIG1hcCBvZiBAY2h1bmsgc28gdGhhdCBpdCBjYW4gYWNjb21vZGF0ZSBhbiBhbGxvY2F0aW9uLgotICogQSBzaW5nbGUgYWxsb2NhdGlvbiBjYW4gc3BsaXQgYW4gYXJlYSBpbnRvIHRocmVlIGFyZWFzLCBzbyB0aGlzCi0gKiBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgQGNodW5rLT5tYXAgaGFzIGF0IGxlYXN0IHR3byBleHRyYSBzbG90cy4KKyAqIERldGVybWluZSB3aGV0aGVyIGFyZWEgbWFwIG9mIEBjaHVuayBuZWVkcyB0byBiZSBleHRlbmRlZCB0bworICogYWNjb21vZGF0ZSBhIG5ldyBhbGxvY2F0aW9uLgogICoKICAqIENPTlRFWFQ6Ci0gKiBwY3B1X2FsbG9jX211dGV4LCBwY3B1X2xvY2suICBwY3B1X2xvY2sgaXMgcmVsZWFzZWQgYW5kIHJlYWNxdWlyZWQKLSAqIGlmIGFyZWEgbWFwIGlzIGV4dGVuZGVkLgorICogcGNwdV9sb2NrLgogICoKICAqIFJFVFVSTlM6Ci0gKiAwIGlmIG5vb3AsIDEgaWYgc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLCAtZXJybm8gb24gZmFpbHVyZS4KKyAqIE5ldyB0YXJnZXQgbWFwIGFsbG9jYXRpb24gbGVuZ3RoIGlmIGV4dGVuc2lvbiBpcyBuZWNlc3NhcnksIDAKKyAqIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBwY3B1X2V4dGVuZF9hcmVhX21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCitzdGF0aWMgaW50IHBjcHVfbmVlZF90b19leHRlbmQoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQogewogCWludCBuZXdfYWxsb2M7Ci0JaW50ICpuZXc7Ci0Jc2l6ZV90IHNpemU7CiAKLQkvKiBoYXMgZW5vdWdoPyAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IGNodW5rLT5tYXBfdXNlZCArIDIpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOwotCiAJbmV3X2FsbG9jID0gUENQVV9ERkxfTUFQX0FMTE9DOwogCXdoaWxlIChuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKQogCQluZXdfYWxsb2MgKj0gMjsKIAotCW5ldyA9IHBjcHVfbWVtX2FsbG9jKG5ld19hbGxvYyAqIHNpemVvZihuZXdbMF0pKTsKLQlpZiAoIW5ldykgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXJldHVybiBuZXdfYWxsb2M7Cit9CisKKy8qKgorICogcGNwdV9leHRlbmRfYXJlYV9tYXAgLSBleHRlbmQgYXJlYSBtYXAgb2YgYSBjaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQG5ld19hbGxvYzogbmV3IHRhcmdldCBhbGxvY2F0aW9uIGxlbmd0aCBvZiB0aGUgYXJlYSBtYXAKKyAqCisgKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHRvIGhhdmUgQG5ld19hbGxvYyBlbnRyaWVzLgorICoKKyAqIENPTlRFWFQ6CisgKiBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbi4gIEdyYWJzIGFuZCByZWxlYXNlcyBwY3B1X2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgbmV3X2FsbG9jKQoreworCWludCAqb2xkID0gTlVMTCwgKm5ldyA9IE5VTEw7CisJc2l6ZV90IG9sZF9zaXplID0gMCwgbmV3X3NpemUgPSBuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmV3ID0gcGNwdV9tZW1fYWxsb2MobmV3X3NpemUpOworCWlmICghbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQkvKgotCSAqIEFjcXVpcmUgcGNwdV9sb2NrIGFuZCBzd2l0Y2ggdG8gbmV3IGFyZWEgbWFwLiAgT25seSBmcmVlCi0JICogY291bGQgaGF2ZSBoYXBwZW5lZCBpbmJldHdlZW4sIHNvIG1hcF91c2VkIGNvdWxkbid0IGhhdmUKLQkgKiBncm93bi4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOwotCUJVR19PTihuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKTsKKwkvKiBhY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAotCXNpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOwotCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIHNpemUpOworCWlmIChuZXdfYWxsb2MgPD0gY2h1bmstPm1hcF9hbGxvYykKKwkJZ290byBvdXRfdW5sb2NrOworCisJb2xkX3NpemUgPSBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pOworCW1lbWNweShuZXcsIGNodW5rLT5tYXAsIG9sZF9zaXplKTsKIAogCS8qCiAJICogbWFwX2FsbG9jIDwgUENQVV9ERkxfTUFQX0FMTE9DIGluZGljYXRlcyB0aGF0IHRoZSBjaHVuayBpcwogCSAqIG9uZSBvZiB0aGUgZmlyc3QgY2h1bmtzIGFuZCBzdGlsbCB1c2luZyBzdGF0aWMgbWFwLgogCSAqLwogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IFBDUFVfREZMX01BUF9BTExPQykKLQkJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBzaXplKTsKKwkJb2xkID0gY2h1bmstPm1hcDsKIAogCWNodW5rLT5tYXBfYWxsb2MgPSBuZXdfYWxsb2M7CiAJY2h1bmstPm1hcCA9IG5ldzsKKwluZXcgPSBOVUxMOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBwY3B1X21lbV9mcmVlKCkgbWlnaHQgZW5kIHVwIGNhbGxpbmcgdmZyZWUoKSB3aGljaCB1c2VzCisJICogSVJRLXVuc2FmZSBsb2NrIGFuZCB0aHVzIGNhbid0IGJlIGNhbGxlZCB1bmRlciBwY3B1X2xvY2suCisJICovCisJcGNwdV9tZW1fZnJlZShvbGQsIG9sZF9zaXplKTsKKwlwY3B1X21lbV9mcmVlKG5ldywgbmV3X3NpemUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDYsNyArMTA3Myw4IEBACiAJc3RhdGljIGludCB3YXJuX2xpbWl0ID0gMTA7CiAJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rOwogCWNvbnN0IGNoYXIgKmVycjsKLQlpbnQgc2xvdCwgb2ZmOworCWludCBzbG90LCBvZmYsIG5ld19hbGxvYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFzaXplIHx8IHNpemUgPiBQQ1BVX01JTl9VTklUX1NJWkUgfHwgYWxpZ24gPiBQQUdFX1NJWkUpKSB7CiAJCVdBUk4odHJ1ZSwgImlsbGVnYWwgc2l6ZSAoJXp1KSBvciBhbGlnbiAoJXp1KSBmb3IgIgpAQCAtMTA1NSwxOSArMTA4MywzMCBAQAogCX0KIAogCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogc2VydmUgcmVzZXJ2ZWQgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcmVzZXJ2ZWQgY2h1bmsgaWYgYXZhaWxhYmxlICovCiAJaWYgKHJlc2VydmVkICYmIHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKIAkJY2h1bmsgPSBwY3B1X3Jlc2VydmVkX2NodW5rOwotCQlpZiAoc2l6ZSA+IGNodW5rLT5jb250aWdfaGludCB8fAotCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspIDwgMCkgewotCQkJZXJyID0gImZhaWxlZCB0byBleHRlbmQgYXJlYSBtYXAgb2YgcmVzZXJ2ZWQgY2h1bmsiOworCisJCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50KSB7CisJCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQkJZ290byBmYWlsX3VubG9jazsKIAkJfQorCisJCXdoaWxlICgobmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuaykpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaywgbmV3X2FsbG9jKSA8IDApIHsKKwkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCBvZiByZXNlcnZlZCBjaHVuayI7CisJCQkJZ290byBmYWlsX3VubG9ja19tdXRleDsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJfQorCiAJCW9mZiA9IHBjcHVfYWxsb2NfYXJlYShjaHVuaywgc2l6ZSwgYWxpZ24pOwogCQlpZiAob2ZmID49IDApCiAJCQlnb3RvIGFyZWFfZm91bmQ7CisKIAkJZXJyID0gImFsbG9jIGZyb20gcmVzZXJ2ZWQgY2h1bmsgZmFpbGVkIjsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CkBAIC0xMDc5LDE0ICsxMTE4LDIwIEBACiAJCQlpZiAoc2l6ZSA+IGNodW5rLT5jb250aWdfaGludCkKIAkJCQljb250aW51ZTsKIAotCQkJc3dpdGNoIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaykpIHsKLQkJCWNhc2UgMDoKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQlnb3RvIHJlc3RhcnQ7CS8qIHBjcHVfbG9jayBkcm9wcGVkLCByZXN0YXJ0ICovCi0JCQlkZWZhdWx0OgotCQkJCWVyciA9ICJmYWlsZWQgdG8gZXh0ZW5kIGFyZWEgbWFwIjsKLQkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJbmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuayk7CisJCQlpZiAobmV3X2FsbG9jKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CisJCQkJaWYgKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLAorCQkJCQkJCSBuZXdfYWxsb2MpIDwgMCkgeworCQkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCI7CisJCQkJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CisJCQkJfQorCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCQkvKgorCQkJCSAqIHBjcHVfbG9jayBoYXMgYmVlbiBkcm9wcGVkLCBuZWVkIHRvCisJCQkJICogcmVzdGFydCBjcHVfc2xvdCBsaXN0IHdhbGtpbmcuCisJCQkJICovCisJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCiAJCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKQEAgLTEwOTYsNyArMTE0MSw3IEBACiAJfQogCiAJLyogaG1tbS4uLiBubyBzcGFjZSBsZWZ0LCBjcmVhdGUgYSBuZXcgY2h1bmsgKi8KLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAljaHVuayA9IGFsbG9jX3BjcHVfY2h1bmsoKTsKIAlpZiAoIWNodW5rKSB7CkBAIC0xMTA0LDE2ICsxMTQ5LDE2IEBACiAJCWdvdG8gZmFpbF91bmxvY2tfbXV0ZXg7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJcGNwdV9jaHVua19yZWxvY2F0ZShjaHVuaywgLTEpOwogCWdvdG8gcmVzdGFydDsKIAogYXJlYV9mb3VuZDoKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBwb3B1bGF0ZSwgbWFwIGFuZCBjbGVhciB0aGUgYXJlYSAqLwogCWlmIChwY3B1X3BvcHVsYXRlX2NodW5rKGNodW5rLCBvZmYsIHNpemUpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAkJcGNwdV9mcmVlX2FyZWEoY2h1bmssIG9mZik7CiAJCWVyciA9ICJmYWlsZWQgdG8gcG9wdWxhdGUiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwpAQCAtMTEyNSw3ICsxMTcwLDcgQEAKIAlyZXR1cm4gX19hZGRyX3RvX3BjcHVfcHRyKGNodW5rLT5iYXNlX2FkZHIgKyBvZmYpOwogCiBmYWlsX3VubG9jazoKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiBmYWlsX3VubG9ja19tdXRleDoKIAltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwogCWlmICh3YXJuX2xpbWl0KSB7CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBhMWJjNmI5Li45YzU5MGVlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTExNTEsOCArMTE1MSw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXJldHZhbCA9IHVudXNlX21tKG1tLCBlbnRyeSwgcGFnZSk7CiAKLQkJCQlpZiAoc2V0X3N0YXJ0X21tICYmCi0JCQkJICAgIHN3YXBfY291bnQoKnN3YXBfbWFwKSA8IHN3Y291bnQpIHsKKwkJCQlpZiAoc2V0X3N0YXJ0X21tICYmICpzd2FwX21hcCA8IHN3Y291bnQpIHsKIAkJCQkJbW1wdXQobmV3X3N0YXJ0X21tKTsKIAkJCQkJYXRvbWljX2luYygmbW0tPm1tX3VzZXJzKTsKIAkJCQkJbmV3X3N0YXJ0X21tID0gbW07CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDY0ZTQzODg5Li43NzdhZjU3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNTQ0LDYgKzU0NCwxNiBAQAogCQkgKi8KIAkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOwogCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOworCQkvKgorCQkgKiBXaGVuIHJhY2luZyB3aXRoIGFuIG1sb2NrIGNsZWFyaW5nIChwYWdlIGlzCisJCSAqIHVubG9ja2VkKSwgbWFrZSBzdXJlIHRoYXQgaWYgdGhlIG90aGVyIHRocmVhZCBkb2VzCisJCSAqIG5vdCBvYnNlcnZlIG91ciBzZXR0aW5nIG9mIFBHX2xydSBhbmQgZmFpbHMKKwkJICogaXNvbGF0aW9uLCB3ZSBzZWUgUEdfbWxvY2tlZCBjbGVhcmVkIGJlbG93IGFuZCBtb3ZlCisJCSAqIHRoZSBwYWdlIGJhY2sgdG8gdGhlIGV2aWN0YWJsZSBsaXN0LgorCQkgKgorCQkgKiBUaGUgb3RoZXIgc2lkZSBpcyBUZXN0Q2xlYXJQYWdlTWxvY2tlZCgpLgorCQkgKi8KKwkJc21wX21iKCk7CiAJfQogCiAJLyoKQEAgLTEwODgsNyArMTA5OCw3IEBACiAJaW50IGx1bXB5X3JlY2xhaW0gPSAwOwogCiAJd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHpvbmUsIGZpbGUsIHNjKSkpIHsKLQkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi8xMCk7CisJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAogCQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTEzNTYsNyArMTM2Niw3IEBACiAJCQkgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBwYWdlcywKIAkJCSAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuCiAJCQkgKi8KLQkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiAhUGFnZUFub24ocGFnZSkpIHsKKwkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpIHsKIAkJCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9hY3RpdmUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggODgzNjU3NS4uYTI5YzVhYiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC0yODEsOCArMjgxLDExIEBACiAJaWYgKG5ncnApCiAJCXZsYW5fZ3ZycF91bmluaXRfYXBwbGljYW50KHJlYWxfZGV2KTsKIG91dF9mcmVlX2dyb3VwOgotCWlmIChuZ3JwKQotCQl2bGFuX2dyb3VwX2ZyZWUobmdycCk7CisJaWYgKG5ncnApIHsKKwkJaGxpc3RfZGVsX3JjdSgmbmdycC0+aGxpc3QpOworCQkvKiBGcmVlIHRoZSBncm91cCwgYWZ0ZXIgYWxsIGNwdSdzIGFyZSBkb25lLiAqLworCQljYWxsX3JjdSgmbmdycC0+cmN1LCB2bGFuX3JjdV9mcmVlKTsKKwl9CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDViZjVmMjIuLjhhZjk1YjIgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTU4MiwxMSArNTgyLDkgQEAKIAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7Ci0JZmlkLT5yZGlyX2Zwb3MgPSAwOwogCWZpZC0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCWZpZC0+Y2xudCA9IGNsbnQ7Ci0JZmlkLT5hdXggPSBOVUxMOwotCisJZmlkLT5yZGlyID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZmaWQtPmZsaXN0LCAmY2xudC0+ZmlkbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOwpAQCAtNjA5LDYgKzYwNyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmZmlkLT5mbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOworCWtmcmVlKGZpZC0+cmRpcik7CiAJa2ZyZWUoZmlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGIyZTA3ZjAuLmVhMWUzZGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAKICNkZWZpbmUgVklSVFFVRVVFX05VTQkxMjgKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBhOTc1MDk4Li5iN2M0MjI0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0yMTEsNiArMjExLDcgQEAKIAljb25uLT50eXBlICA9IHR5cGU7CiAJY29ubi0+bW9kZSAgPSBIQ0lfQ01fQUNUSVZFOwogCWNvbm4tPnN0YXRlID0gQlRfT1BFTjsKKwljb25uLT5hdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOwogCiAJY29ubi0+cG93ZXJfc2F2ZSA9IDE7CiAJY29ubi0+ZGlzY190aW1lb3V0ID0gSENJX0RJU0NPTk5fVElNRU9VVDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDdmOTM5Y2UuLjJiYzZmNmEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtOTIsNiArOTIsOCBAQAogCiAJZGV2X3NldF9uYW1lKCZjb25uLT5kZXYsICIlczolZCIsIGhkZXYtPm5hbWUsIGNvbm4tPmhhbmRsZSk7CiAKKwlkZXZfc2V0X2RydmRhdGEoJmNvbm4tPmRldiwgY29ubik7CisKIAlpZiAoZGV2aWNlX2FkZCgmY29ubi0+ZGV2KSA8IDApIHsKIAkJQlRfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdGlvbiBkZXZpY2UiKTsKIAkJcmV0dXJuOwpAQCAtMTQ0LDggKzE0Niw2IEBACiAJY29ubi0+ZGV2LmNsYXNzID0gYnRfY2xhc3M7CiAJY29ubi0+ZGV2LnBhcmVudCA9ICZoZGV2LT5kZXY7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmNvbm4tPmRldiwgY29ubik7Ci0KIAlkZXZpY2VfaW5pdGlhbGl6ZSgmY29ubi0+ZGV2KTsKIAogCUlOSVRfV09SSygmY29ubi0+d29ya19hZGQsIGFkZF9jb25uKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA1NTVkOWRhLi45NDdmOGJiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01NTUsMTIgKzU1NSwxMiBAQAogCiAJY29ubi0+ZmVhdF9tYXNrID0gMDsKIAotCXNldHVwX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBsMmNhcF9pbmZvX3RpbWVvdXQsCi0JCQkJCQkodW5zaWduZWQgbG9uZykgY29ubik7Ci0KIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+bG9jayk7CiAJcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbGlzdC5sb2NrKTsKIAorCXNldHVwX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBsMmNhcF9pbmZvX3RpbWVvdXQsCisJCQkJCQkodW5zaWduZWQgbG9uZykgY29ubik7CisKIAljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CiAKIAlyZXR1cm4gY29ubjsKQEAgLTc4Myw2ICs3ODMsOSBAQAogCS8qIERlZmF1bHQgY29uZmlnIG9wdGlvbnMgKi8KIAlwaS0+Y29uZl9sZW4gPSAwOwogCXBpLT5mbHVzaF90byA9IEwyQ0FQX0RFRkFVTFRfRkxVU0hfVE87CisJc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoU1JFSl9RVUVVRShzaykpOworCUlOSVRfTElTVF9IRUFEKFNSRUpfTElTVChzaykpOwogfQogCiBzdGF0aWMgc3RydWN0IHByb3RvIGwyY2FwX3Byb3RvID0gewpAQCAtMjIwMiw3ICsyMjA1LDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBsMmNhcF9jb25mX3JlcSAqcmVxID0gZGF0YTsKLQlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjID0geyAubW9kZSA9IEwyQ0FQX01PREVfRVJUTSB9OworCXN0cnVjdCBsMmNhcF9jb25mX3JmYyByZmMgPSB7IC5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQyB9OwogCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CkBAIC0yMzkxLDYgKzIzOTQsMTAgQEAKIAkJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSBMMkNBUF9ERUZBVUxUX01PTklUT1JfVE87CiAKIAkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfTU9ERV9ET05FOworCisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCisJCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CkBAIC0yMzk4LDYgKzI0MDUsMTAgQEAKIAkJCXBpLT5tYXhfcGR1X3NpemUgPSByZmMubWF4X3BkdV9zaXplOwogCiAJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKworCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLAorCQkJCQlzaXplb2YocmZjKSwgKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMjQwNyw5ICsyNDE4LDYgQEAKIAkJCXJmYy5tb2RlID0gcGktPm1vZGU7CiAJCX0KIAotCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCi0JCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7Ci0KIAkJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpCiAJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOwogCX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBiMWIzYjBmLi40YTlmNTI3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zNzcsMTIgKzM3NywxNiBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSyB8fCBkZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKQorCS8qIERvbid0IGFsbG93IGJyaWRnaW5nIG5vbi1ldGhlcm5ldCBsaWtlIGRldmljZXMgKi8KKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHx8CisJICAgIGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgZGV2LT5hZGRyX2xlbiAhPSBFVEhfQUxFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBObyBicmlkZ2luZyBvZiBicmlkZ2VzICovCiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQpCiAJCXJldHVybiAtRUxPT1A7CiAKKwkvKiBEZXZpY2UgaXMgYWxyZWFkeSBiZWluZyBicmlkZ2VkICovCiAJaWYgKGRldi0+YnJfcG9ydCAhPSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA1OTdkYTRmLi5lOGQ1OGYzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTEzMiwyMyArMTMyLDI3IEBACiAvKgogICogcHJvY2ZzIGZ1bmN0aW9ucwogICovCi1zdGF0aWMgY2hhciAqYmNtX3Byb2NfZ2V0aWZuYW1lKGludCBpZmluZGV4KQorc3RhdGljIGNoYXIgKmJjbV9wcm9jX2dldGlmbmFtZShjaGFyICpyZXN1bHQsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlpZiAoIWlmaW5kZXgpCiAJCXJldHVybiAiYW55IjsKIAotCS8qIG5vIHVzYWdlIGNvdW50aW5nICovCisJcmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKIAlpZiAoZGV2KQotCQlyZXR1cm4gZGV2LT5uYW1lOworCQlzdHJjcHkocmVzdWx0LCBkZXYtPm5hbWUpOworCWVsc2UKKwkJc3RyY3B5KHJlc3VsdCwgIj8/PyIpOworCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAotCXJldHVybiAiPz8/IjsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGJjbV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCWNoYXIgaWZuYW1lW0lGTkFNU0laXTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltLT5wcml2YXRlOwogCXN0cnVjdCBiY21fc29jayAqYm8gPSBiY21fc2soc2spOwogCXN0cnVjdCBiY21fb3AgKm9wOwpAQCAtMTU3LDcgKzE2MSw3IEBACiAJc2VxX3ByaW50ZihtLCAiIC8gc2sgJXAiLCBzayk7CiAJc2VxX3ByaW50ZihtLCAiIC8gYm8gJXAiLCBibyk7CiAJc2VxX3ByaW50ZihtLCAiIC8gZHJvcHBlZCAlbHUiLCBiby0+ZHJvcHBlZF91c3JfbXNncyk7Ci0Jc2VxX3ByaW50ZihtLCAiIC8gYm91bmQgJXMiLCBiY21fcHJvY19nZXRpZm5hbWUoYm8tPmlmaW5kZXgpKTsKKwlzZXFfcHJpbnRmKG0sICIgLyBib3VuZCAlcyIsIGJjbV9wcm9jX2dldGlmbmFtZShpZm5hbWUsIGJvLT5pZmluZGV4KSk7CiAJc2VxX3ByaW50ZihtLCAiIDw8PFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnJ4X29wcywgbGlzdCkgewpAQCAtMTY5LDcgKzE3Myw3IEBACiAJCQljb250aW51ZTsKIAogCQlzZXFfcHJpbnRmKG0sICJyeF9vcDogJTAzWCAlLTVzICIsCi0JCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKG9wLT5pZmluZGV4KSk7CisJCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKGlmbmFtZSwgb3AtPmlmaW5kZXgpKTsKIAkJc2VxX3ByaW50ZihtLCAiWyVkXSVjICIsIG9wLT5uZnJhbWVzLAogCQkJCShvcC0+ZmxhZ3MgJiBSWF9DSEVDS19ETEMpPydkJzonICcpOwogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCkBAIC0xOTQsNyArMTk4LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnR4X29wcywgbGlzdCkgewogCiAJCXNlcV9wcmludGYobSwgInR4X29wOiAlMDNYICVzIFslZF0gIiwKLQkJCQlvcC0+Y2FuX2lkLCBiY21fcHJvY19nZXRpZm5hbWUob3AtPmlmaW5kZXgpLAorCQkJCW9wLT5jYW5faWQsCisJCQkJYmNtX3Byb2NfZ2V0aWZuYW1lKGlmbmFtZSwgb3AtPmlmaW5kZXgpLAogCQkJCW9wLT5uZnJhbWVzKTsKIAogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCAxYzZjZjNhLi40YWRlMzAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTIyNCw2ICsyMjQsMTUgQEAKIAljb25zdW1lX3NrYihza2IpOwogCXNrX21lbV9yZWNsYWltX3BhcnRpYWwoc2spOwogfQorRVhQT1JUX1NZTUJPTChza2JfZnJlZV9kYXRhZ3JhbSk7CisKK3ZvaWQgc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlsb2NrX3NvY2soc2spOworCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworCXJlbGVhc2Vfc29jayhzayk7Cit9CitFWFBPUlRfU1lNQk9MKHNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZCk7CiAKIC8qKgogICoJc2tiX2tpbGxfZGF0YWdyYW0gLSBGcmVlIGEgZGF0YWdyYW0gc2tidWZmIGZvcmNpYmx5CkBAIC03NTIsNSArNzYxLDQgQEAKIEVYUE9SVF9TWU1CT0woZGF0YWdyYW1fcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKTsKIEVYUE9SVF9TWU1CT0woc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMpOwotRVhQT1JUX1NZTUJPTChza2JfZnJlZV9kYXRhZ3JhbSk7CiBFWFBPUlRfU1lNQk9MKHNrYl9yZWN2X2RhdGFncmFtKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYjhmNzRjZi4uZmUxMDU1MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTk0MiwxNCArOTQyLDE1IEBACiAJcmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTsKIAogCWlmIChyZXQpIHsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBuYW1lIGNoYW5nZSByb2xsYmFjayBmYWlsZWQ6ICVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHJldCk7Ci0JCX0gZWxzZSB7CisJCS8qIGVyciA+PSAwIGFmdGVyIGRldl9hbGxvY19uYW1lKCkgb3Igc3RvcmVzIHRoZSBmaXJzdCBlcnJubyAqLworCQlpZiAoZXJyID49IDApIHsKIAkJCWVyciA9IHJldDsKIAkJCW1lbWNweShkZXYtPm5hbWUsIG9sZG5hbWUsIElGTkFNU0laKTsKIAkJCWdvdG8gcm9sbGJhY2s7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IG5hbWUgY2hhbmdlIHJvbGxiYWNrIGZhaWxlZDogJWQuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcmV0KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCA4NmFjZGJhLi42ZTc5ZTk2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzM1LDYgKzMzNSw3IEBACiAJX191MzIgY3VyX3NyY19tYWNfb2Zmc2V0OwogCV9fYmUzMiBjdXJfc2FkZHI7CiAJX19iZTMyIGN1cl9kYWRkcjsKKwlfX3UxNiBpcF9pZDsKIAlfX3UxNiBjdXJfdWRwX2RzdDsKIAlfX3UxNiBjdXJfdWRwX3NyYzsKIAlfX3UxNiBjdXJfcXVldWVfbWFwOwpAQCAtMzYyLDYgKzM2Myw3IEBACiAJCQkJICAqIGRldmljZSBuYW1lIChub3Qgd2hlbiB0aGUgaW5qZWN0IGlzCiAJCQkJICAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCiAJCQkJICAqLworCWNoYXIgb2Rldm5hbWVbMzJdOwogCXN0cnVjdCBmbG93X3N0YXRlICpmbG93czsKIAl1bnNpZ25lZCBjZmxvd3M7CS8qIENvbmN1cnJlbnQgZmxvd3MgKGNvbmZpZykgKi8KIAl1bnNpZ25lZCBsZmxvdzsJCS8qIEZsb3cgbGVuZ3RoICAoY29uZmlnKSAqLwpAQCAtNDI1LDcgKzQyNyw3IEBACiBzdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqaSk7CiBzdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpOwogc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsCi0JCQkJCSAgY29uc3QgY2hhciAqaWZuYW1lKTsKKwkJCQkJICBjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgZXhhY3QpOwogc3RhdGljIGludCBwa3RnZW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyh2b2lkKTsKIHN0YXRpYyB2b2lkIHBrdGdlbl9yZXNldF9hbGxfdGhyZWFkcyh2b2lkKTsKQEAgLTUyNyw3ICs1MjksNyBAQAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAlbGx1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAogCQkgICBwa3RfZGV2LT5uZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmRlbGF5LAotCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKIAkJICAgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTY4NywxMyArMTY4OSwxMyBAQAogCWlmX2xvY2sodCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuU3RvcHBlZDogIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQogCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlpZiAodC0+cmVzdWx0WzBdKQogCQlzZXFfcHJpbnRmKHNlcSwgIlxuUmVzdWx0OiAlc1xuIiwgdC0+cmVzdWx0KTsKQEAgLTE4MTYsOSArMTgxOCwxMCBAQAogewogCXN0cnVjdCBwa3RnZW5fdGhyZWFkICp0OwogCXN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gTlVMTDsKKwlib29sIGV4YWN0ID0gKHJlbW92ZSA9PSBGSU5EKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnBrdGdlbl90aHJlYWRzLCB0aF9saXN0KSB7Ci0JCXBrdF9kZXYgPSBwa3RnZW5fZmluZF9kZXYodCwgaWZuYW1lKTsKKwkJcGt0X2RldiA9IHBrdGdlbl9maW5kX2Rldih0LCBpZm5hbWUsIGV4YWN0KTsKIAkJaWYgKHBrdF9kZXYpIHsKIAkJCWlmIChyZW1vdmUpIHsKIAkJCQlpZl9sb2NrKHQpOwpAQCAtMTk5Myw3ICsxOTk2LDcgQEAKIAkJICAgICAgICJxdWV1ZV9tYXBfbWluICh6ZXJvLWJhc2VkKSAoJWQpIGV4Y2VlZHMgdmFsaWQgcmFuZ2UgIgogCQkgICAgICAgIlswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAogCQkgICAgICAgcGt0X2Rldi0+cXVldWVfbWFwX21pbiwgKG50eHEgPzogMSkgLSAxLCBudHhxLAotCQkgICAgICAgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCSAgICAgICBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXBrdF9kZXYtPnF1ZXVlX21hcF9taW4gPSBudHhxIC0gMTsKIAl9CiAJaWYgKHBrdF9kZXYtPnF1ZXVlX21hcF9tYXggPj0gbnR4cSkgewpAQCAtMjAwMSw3ICsyMDA0LDcgQEAKIAkJICAgICAgICJxdWV1ZV9tYXBfbWF4ICh6ZXJvLWJhc2VkKSAoJWQpIGV4Y2VlZHMgdmFsaWQgcmFuZ2UgIgogCQkgICAgICAgIlswIC0gJWRdIGZvciAoJWQpIHF1ZXVlcyBvbiAlcywgcmVzZXR0aW5nXG4iLAogCQkgICAgICAgcGt0X2Rldi0+cXVldWVfbWFwX21heCwgKG50eHEgPzogMSkgLSAxLCBudHhxLAotCQkgICAgICAgcGt0X2Rldi0+b2Rldi0+bmFtZSk7CisJCSAgICAgICBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXBrdF9kZXYtPnF1ZXVlX21hcF9tYXggPSBudHhxIC0gMTsKIAl9CiAKQEAgLTI2MzAsNiArMjYzMyw4IEBACiAJaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fVURQOwkvKiBVRFAgKi8KIAlpcGgtPnNhZGRyID0gcGt0X2Rldi0+Y3VyX3NhZGRyOwogCWlwaC0+ZGFkZHIgPSBwa3RfZGV2LT5jdXJfZGFkZHI7CisJaXBoLT5pZCA9IGh0b25zKHBrdF9kZXYtPmlwX2lkKTsKKwlwa3RfZGV2LT5pcF9pZCsrOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwbGVuID0gMjAgKyA4ICsgZGF0YWxlbjsKIAlpcGgtPnRvdF9sZW4gPSBodG9ucyhpcGxlbik7CkBAIC0yNjQxLDI0ICsyNjQ2LDI2IEBACiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAotCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkKKwlpZiAocGt0X2Rldi0+bmZyYWdzIDw9IDApIHsKIAkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopc2tiX3B1dChza2IsIGRhdGFsZW4pOwotCWVsc2UgeworCQltZW1zZXQocGdoICsgMSwgMCwgZGF0YWxlbiAtIHNpemVvZihzdHJ1Y3QgcGt0Z2VuX2hkcikpOworCX0gZWxzZSB7CiAJCWludCBmcmFncyA9IHBrdF9kZXYtPm5mcmFnczsKLQkJaW50IGk7CisJCWludCBpLCBsZW47CiAKIAkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopKCgoY2hhciAqKSh1ZHBoKSkgKyA4KTsKIAogCQlpZiAoZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKQogCQkJZnJhZ3MgPSBNQVhfU0tCX0ZSQUdTOwogCQlpZiAoZGF0YWxlbiA+IGZyYWdzICogUEFHRV9TSVpFKSB7Ci0JCQlza2JfcHV0KHNrYiwgZGF0YWxlbiAtIGZyYWdzICogUEFHRV9TSVpFKTsKKwkJCWxlbiA9IGRhdGFsZW4gLSBmcmFncyAqIFBBR0VfU0laRTsKKwkJCW1lbXNldChza2JfcHV0KHNrYiwgbGVuKSwgMCwgbGVuKTsKIAkJCWRhdGFsZW4gPSBmcmFncyAqIFBBR0VfU0laRTsKIAkJfQogCiAJCWkgPSAwOwogCQl3aGlsZSAoZGF0YWxlbiA+IDApIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHBhZ2U7CiAJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gMDsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9CkBAIC0zMjU3LDcgKzMyNjQsNyBAQAogCiAJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5ICIKLQkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKKwkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzQ1OSw3ICszNDY2LDcgQEAKIAlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInBrdGdlbjogJXMgeG1pdCBlcnJvcjogJWRcbiIsCi0JCQkJb2Rldi0+bmFtZSwgcmV0KTsKKwkJCQlwa3RfZGV2LT5vZGV2bmFtZSwgcmV0KTsKIAkJcGt0X2Rldi0+ZXJyb3JzKys7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBORVRERVZfVFhfTE9DS0VEOgpAQCAtMzU2MSwxMyArMzU2OCwxOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9maW5kX2RldihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwKLQkJCQkJICBjb25zdCBjaGFyICppZm5hbWUpCisJCQkJCSAgY29uc3QgY2hhciAqaWZuYW1lLCBib29sIGV4YWN0KQogewogCXN0cnVjdCBwa3RnZW5fZGV2ICpwLCAqcGt0X2RldiA9IE5VTEw7Ci0JaWZfbG9jayh0KTsKKwlzaXplX3QgbGVuID0gc3RybGVuKGlmbmFtZSk7CiAKKwlpZl9sb2NrKHQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnQtPmlmX2xpc3QsIGxpc3QpCi0JCWlmIChzdHJuY21wKHAtPm9kZXYtPm5hbWUsIGlmbmFtZSwgSUZOQU1TSVopID09IDApIHsKKwkJaWYgKHN0cm5jbXAocC0+b2Rldm5hbWUsIGlmbmFtZSwgbGVuKSA9PSAwKSB7CisJCQlpZiAocC0+b2Rldm5hbWVbbGVuXSkgeworCQkJCWlmIChleGFjdCB8fCBwLT5vZGV2bmFtZVtsZW5dICE9ICdAJykKKwkJCQkJY29udGludWU7CisJCQl9CiAJCQlwa3RfZGV2ID0gcDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNjIzLDYgKzM2MzUsNyBAQAogCWlmICghcGt0X2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzdHJjcHkocGt0X2Rldi0+b2Rldm5hbWUsIGlmbmFtZSk7CiAJcGt0X2Rldi0+Zmxvd3MgPSB2bWFsbG9jKE1BWF9DRkxPV1MgKiBzaXplb2Yoc3RydWN0IGZsb3dfc3RhdGUpKTsKIAlpZiAocGt0X2Rldi0+Zmxvd3MgPT0gTlVMTCkgewogCQlrZnJlZShwa3RfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggODBhOTYxNi4uZWM4NTY4MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTI3MDEsNyArMjcwMSw4IEBACiAKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA9IDE7CiAJCWdvdG8gZG9uZTsKLQl9CisJfSBlbHNlIGlmIChza2JfZ3JvX2xlbihwKSAhPSBwaW5mby0+Z3NvX3NpemUpCisJCXJldHVybiAtRTJCSUc7CiAKIAloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShwKTsKIAluc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihwLT5kZXYsIGhlYWRyb29tICsgc2tiX2dyb19vZmZzZXQocCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCA3ZGIxZGUwLi44ODdjMDNjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYworKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMTAsNyArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDgzMjIxYWUuLjgzODI1MDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgorCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwppbmRleCAyNmIwYWIxLi4yMDM2NTY4IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCkBAIC0yNjMsMTEgKzI2MywxMCBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJcnYgPSAtRU5PREVWOwotCQlpZiAoZGV2LT5kbl9wdHIgIT0gTlVMTCkgeworCQlpZiAoZGV2LT5kbl9wdHIgIT0gTlVMTCkKIAkJCXJ2ID0gZG5fZGV2X3NldF9kZWZhdWx0KGRldiwgMSk7Ci0JCQlpZiAocnYpCi0JCQkJZGV2X3B1dChkZXYpOwotCQl9CisJCWlmIChydikKKwkJCWRldl9wdXQoZGV2KTsKIAl9CiAKIAlyZXR1cm4gcnY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IGUyZjk1MDUuLmFhMDAzOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yMjksMTQgKzIyOSwxNyBAQAogICovCiAKIGludCBmaWJfdmFsaWRhdGVfc291cmNlKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIHU4IHRvcywgaW50IG9pZiwKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsIHUzMiAqaXRhZykKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsCisJCQl1MzIgKml0YWcsIHUzMiBtYXJrKQogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQogCQkJCSAgICAgIHsgLmRhZGRyID0gc3JjLAogCQkJCQkuc2FkZHIgPSBkc3QsCiAJCQkJCS50b3MgPSB0b3MgfSB9LAorCQkJICAgIC5tYXJrID0gbWFyaywKIAkJCSAgICAuaWlmID0gb2lmIH07CisKIAlzdHJ1Y3QgZmliX3Jlc3VsdCByZXM7CiAJaW50IG5vX2FkZHIsIHJwZjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNDM1MWNhMi4uNTM3NzMxYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC00NDYsNiArNDQ2LDI4IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKTsKIAorLyogRGVjaWRlIHdoZW4gdG8gZXhwaXJlIHRoZSByZXF1ZXN0IGFuZCB3aGVuIHRvIHJlc2VuZCBTWU4tQUNLICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3luX2Fja19yZWNhbGMoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBpbnQgdGhyZXNoLAorCQkJCSAgY29uc3QgaW50IG1heF9yZXRyaWVzLAorCQkJCSAgY29uc3QgdTggcnNrcV9kZWZlcl9hY2NlcHQsCisJCQkJICBpbnQgKmV4cGlyZSwgaW50ICpyZXNlbmQpCit7CisJaWYgKCFyc2txX2RlZmVyX2FjY2VwdCkgeworCQkqZXhwaXJlID0gcmVxLT5yZXRyYW5zID49IHRocmVzaDsKKwkJKnJlc2VuZCA9IDE7CisJCXJldHVybjsKKwl9CisJKmV4cGlyZSA9IHJlcS0+cmV0cmFucyA+PSB0aHJlc2ggJiYKKwkJICAoIWluZXRfcnNrKHJlcSktPmFja2VkIHx8IHJlcS0+cmV0cmFucyA+PSBtYXhfcmV0cmllcyk7CisJLyoKKwkgKiBEbyBub3QgcmVzZW5kIHdoaWxlIHdhaXRpbmcgZm9yIGRhdGEgYWZ0ZXIgQUNLLAorCSAqIHN0YXJ0IHRvIHJlc2VuZCBvbiBlbmQgb2YgZGVmZXJyaW5nIHBlcmlvZCB0byBnaXZlCisJICogbGFzdCBjaGFuY2UgZm9yIGRhdGEgb3IgQUNLIHRvIGNyZWF0ZSBlc3RhYmxpc2hlZCBzb2NrZXQuCisJICovCisJKnJlc2VuZCA9ICFpbmV0X3JzayhyZXEpLT5hY2tlZCB8fAorCQkgIHJlcS0+cmV0cmFucyA+PSByc2txX2RlZmVyX2FjY2VwdCAtIDE7Cit9CisKIHZvaWQgaW5ldF9jc2tfcmVxc2tfcXVldWVfcHJ1bmUoc3RydWN0IHNvY2sgKnBhcmVudCwKIAkJCQljb25zdCB1bnNpZ25lZCBsb25nIGludGVydmFsLAogCQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgdGltZW91dCwKQEAgLTUwMSw5ICs1MjMsMTUgQEAKIAkJcmVxcD0mbG9wdC0+c3luX3RhYmxlW2ldOwogCQl3aGlsZSAoKHJlcSA9ICpyZXFwKSAhPSBOVUxMKSB7CiAJCQlpZiAodGltZV9hZnRlcl9lcShub3csIHJlcS0+ZXhwaXJlcykpIHsKLQkJCQlpZiAoKHJlcS0+cmV0cmFucyA8IHRocmVzaCB8fAotCQkJCSAgICAgKGluZXRfcnNrKHJlcSktPmFja2VkICYmIHJlcS0+cmV0cmFucyA8IG1heF9yZXRyaWVzKSkKLQkJCQkgICAgJiYgIXJlcS0+cnNrX29wcy0+cnR4X3N5bl9hY2socGFyZW50LCByZXEpKSB7CisJCQkJaW50IGV4cGlyZSA9IDAsIHJlc2VuZCA9IDA7CisKKwkJCQlzeW5fYWNrX3JlY2FsYyhyZXEsIHRocmVzaCwgbWF4X3JldHJpZXMsCisJCQkJCSAgICAgICBxdWV1ZS0+cnNrcV9kZWZlcl9hY2NlcHQsCisJCQkJCSAgICAgICAmZXhwaXJlLCAmcmVzZW5kKTsKKwkJCQlpZiAoIWV4cGlyZSAmJgorCQkJCSAgICAoIXJlc2VuZCB8fAorCQkJCSAgICAgIXJlcS0+cnNrX29wcy0+cnR4X3N5bl9hY2socGFyZW50LCByZXEpIHx8CisJCQkJICAgICBpbmV0X3JzayhyZXEpLT5hY2tlZCkpIHsKIAkJCQkJdW5zaWduZWQgbG9uZyB0aW1lbzsKIAogCQkJCQlpZiAocmVxLT5yZXRyYW5zKysgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDU3NWY5YmQuLmQzZmUxMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIk92ZXJzaXplZCBJUCBwYWNrZXQgZnJvbSAlcEk0LlxuIiwKIAkJCSZxcC0+c2FkZHIpOwogb3V0X2ZhaWw6Ci0JSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA0MWFkYTk5Li4xNDMzMzM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAKIAogCWV0aGVyX3NldHVwKGRldik7CiAKLQlkZXYtPm5ldGRldl9vcHMJCT0gJmlwZ3JlX25ldGRldl9vcHM7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZpcGdyZV90YXBfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IgCT0gZnJlZV9uZXRkZXY7CiAKIAlkZXYtPmlmbGluawkJPSAwOwpAQCAtMTUyNSwyNSArMTUyNSwyOSBAQAogCQlpZiAodC0+ZGV2ICE9IGRldikKIAkJCXJldHVybiAtRUVYSVNUOwogCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIG5mbGFncyA9IDA7Ci0KIAkJdCA9IG50OwogCi0JCWlmIChpcHY0X2lzX211bHRpY2FzdChwLmlwaC5kYWRkcikpCi0JCQluZmxhZ3MgPSBJRkZfQlJPQURDQVNUOwotCQllbHNlIGlmIChwLmlwaC5kYWRkcikKLQkJCW5mbGFncyA9IElGRl9QT0lOVE9QT0lOVDsKKwkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCXVuc2lnbmVkIG5mbGFncyA9IDA7CiAKLQkJaWYgKChkZXYtPmZsYWdzIF4gbmZsYWdzKSAmCi0JCSAgICAoSUZGX1BPSU5UT1BPSU5UIHwgSUZGX0JST0FEQ0FTVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcHY0X2lzX211bHRpY2FzdChwLmlwaC5kYWRkcikpCisJCQkJbmZsYWdzID0gSUZGX0JST0FEQ0FTVDsKKwkJCWVsc2UgaWYgKHAuaXBoLmRhZGRyKQorCQkJCW5mbGFncyA9IElGRl9QT0lOVE9QT0lOVDsKKworCQkJaWYgKChkZXYtPmZsYWdzIF4gbmZsYWdzKSAmCisJCQkgICAgKElGRl9QT0lOVE9QT0lOVCB8IElGRl9CUk9BRENBU1QpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKIAkJaXBncmVfdHVubmVsX3VubGluayhpZ24sIHQpOwogCQl0LT5wYXJtcy5pcGguc2FkZHIgPSBwLmlwaC5zYWRkcjsKIAkJdC0+cGFybXMuaXBoLmRhZGRyID0gcC5pcGguZGFkZHI7CiAJCXQtPnBhcm1zLmlfa2V5ID0gcC5pX2tleTsKLQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwLmlwaC5zYWRkciwgNCk7Ci0JCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJnAuaXBoLmRhZGRyLCA0KTsKKwkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCAmcC5pcGguc2FkZHIsIDQpOworCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmcC5pcGguZGFkZHIsIDQpOworCQl9CiAJCWlwZ3JlX3R1bm5lbF9saW5rKGlnbiwgdCk7CiAJCW5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCAwYzBiNmUzLi5lOTgyYjVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTYzNCwxNyArNjM0LDE2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZXYgPSBpcF9kZXZfZmluZChzb2NrX25ldChzayksIG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyKTsKLQkJCWlmIChkZXYpIHsKKwkJCWlmIChkZXYpCiAJCQkJbXJlcS5pbXJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJCQlkZXZfcHV0KGRldik7Ci0JCQl9CiAJCX0gZWxzZQotCQkJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CiAKIAogCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKKwkJZGV2X3B1dChkZXYpOwogCiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggMDhjY2QzNC4uYWU0MGVkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDM4LDI1ICs0MzgsMjcgQEAKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKLQlpZiAodGlwaC0+ZnJhZ19vZmYpCisJZGYgfD0gb2xkX2lwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERik7CisKKwlpZiAoZGYpIHsKIAkJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCWVsc2UKLQkJbXR1ID0gc2tiX2RzdChza2IpID8gZHN0X210dShza2JfZHN0KHNrYikpIDogZGV2LT5tdHU7CiAKLQlpZiAobXR1IDwgNjgpIHsKLQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKLQkJaXBfcnRfcHV0KHJ0KTsKLQkJZ290byB0eF9lcnJvcjsKLQl9Ci0JaWYgKHNrYl9kc3Qoc2tiKSkKLQkJc2tiX2RzdChza2IpLT5vcHMtPnVwZGF0ZV9wbXR1KHNrYl9kc3Qoc2tiKSwgbXR1KTsKKwkJaWYgKG10dSA8IDY4KSB7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQkJaXBfcnRfcHV0KHJ0KTsKKwkJCWdvdG8gdHhfZXJyb3I7CisJCX0KIAotCWRmIHw9IChvbGRfaXBoLT5mcmFnX29mZiZodG9ucyhJUF9ERikpOworCQlpZiAoc2tiX2RzdChza2IpKQorCQkJc2tiX2RzdChza2IpLT5vcHMtPnVwZGF0ZV9wbXR1KHNrYl9kc3Qoc2tiKSwgbXR1KTsKIAotCWlmICgob2xkX2lwaC0+ZnJhZ19vZmYmaHRvbnMoSVBfREYpKSAmJiBtdHUgPCBudG9ocyhvbGRfaXBoLT50b3RfbGVuKSkgewotCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7Ci0JCWlwX3J0X3B1dChydCk7Ci0JCWdvdG8gdHhfZXJyb3I7CisJCWlmICgob2xkX2lwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpICYmCisJCSAgICBtdHUgPCBudG9ocyhvbGRfaXBoLT50b3RfbGVuKSkgeworCQkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsCisJCQkJICBodG9ubChtdHUpKTsKKwkJCWlwX3J0X3B1dChydCk7CisJCQlnb3RvIHR4X2Vycm9yOworCQl9CiAJfQogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDYzMGE1NmQuLjk5NTA4ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTQ4Myw4ICs0ODMsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpKSA9PSBOVUxMKQorCWlmICgoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgPT0gTlVMTCkgeworCQlkZXZfcHV0KGRldik7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwl9CiAJSVBWNF9ERVZDT05GKGluX2Rldi0+Y25mLCBNQ19GT1JXQVJESU5HKSsrOwogCWlwX3J0X211bHRpY2FzdF9ldmVudChpbl9kZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDY4YWZjNmUuLmZlMWE2NDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC03NTAsNiArNzUwLDggQEAKIAlCVUdfT04obmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rICE9IE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2ssCiAJCQkgICBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKTsKKwlCVUdfT04obmZfY3RfbmF0X29mZnNldCAhPSBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfbmF0X29mZnNldCwgbmZfbmF0X2dldF9vZmZzZXQpOwogCXJldHVybiAwOwogCiAgY2xlYW51cF9leHRlbmQ6CkBAIC03NjQsNiArNzY2LDcgQEAKIAluZl9jdF9leHRlbmRfdW5yZWdpc3RlcigmbmF0X2V4dGVuZCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZXFfYWRqdXN0X2hvb2ssIE5VTEwpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9jdF9uYXRfb2Zmc2V0LCBOVUxMKTsKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKaW5kZXggMDkxNzJhNi4uZjk1MjBmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCkBAIC03Myw2ICs3MywyOCBAQAogCURVTVBfT0ZGU0VUKHRoaXNfd2F5KTsKIH0KIAorLyogR2V0IHRoZSBvZmZzZXQgdmFsdWUsIGZvciBjb25udHJhY2sgKi8KK3MxNiBuZl9uYXRfZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCisJCSAgICAgIHUzMiBzZXEpCit7CisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQgPSBuZmN0X25hdChjdCk7CisJc3RydWN0IG5mX25hdF9zZXEgKnRoaXNfd2F5OworCXMxNiBvZmZzZXQ7CisKKwlpZiAoIW5hdCkKKwkJcmV0dXJuIDA7CisKKwl0aGlzX3dheSA9ICZuYXQtPnNlcVtkaXJdOworCXNwaW5fbG9ja19iaCgmbmZfbmF0X3NlcW9mc19sb2NrKTsKKwlvZmZzZXQgPSBhZnRlcihzZXEsIHRoaXNfd2F5LT5jb3JyZWN0aW9uX3BvcykKKwkJID8gdGhpc193YXktPm9mZnNldF9hZnRlciA6IHRoaXNfd2F5LT5vZmZzZXRfYmVmb3JlOworCXNwaW5fdW5sb2NrX2JoKCZuZl9uYXRfc2Vxb2ZzX2xvY2spOworCisJcmV0dXJuIG9mZnNldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9nZXRfb2Zmc2V0KTsKKwogLyogRnJvYnMgZGF0YSBpbnNpZGUgdGhpcyBwYWNrZXQsIHdoaWNoIGlzIGxpbmVhci4gKi8KIHN0YXRpYyB2b2lkIG1hbmdsZV9jb250ZW50cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLApAQCAtMTg5LDExICsyMTEsNiBAQAogCQlhZGp1c3RfdGNwX3NlcXVlbmNlKG50b2hsKHRjcGgtPnNlcSksCiAJCQkJICAgIChpbnQpcmVwX2xlbiAtIChpbnQpbWF0Y2hfbGVuLAogCQkJCSAgICBjdCwgY3RpbmZvKTsKLQkJLyogVGVsbCBUQ1Agd2luZG93IHRyYWNraW5nIGFib3V0IHNlcSBjaGFuZ2UgKi8KLQkJbmZfY29ubnRyYWNrX3RjcF91cGRhdGUoc2tiLCBpcF9oZHJsZW4oc2tiKSwKLQkJCQkJY3QsIENUSU5GTzJESVIoY3RpbmZvKSwKLQkJCQkJKGludClyZXBfbGVuIC0gKGludCltYXRjaF9sZW4pOwotCiAJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX05BVFNFUUFESiwgY3QpOwogCX0KIAlyZXR1cm4gMTsKQEAgLTQxNSwxMiArNDMyLDcgQEAKIAl0Y3BoLT5zZXEgPSBuZXdzZXE7CiAJdGNwaC0+YWNrX3NlcSA9IG5ld2FjazsKIAotCWlmICghbmZfbmF0X3NhY2tfYWRqdXN0KHNrYiwgdGNwaCwgY3QsIGN0aW5mbykpCi0JCXJldHVybiAwOwotCi0JbmZfY29ubnRyYWNrX3RjcF91cGRhdGUoc2tiLCBpcF9oZHJsZW4oc2tiKSwgY3QsIGRpciwgc2Vxb2ZmKTsKLQotCXJldHVybiAxOworCXJldHVybiBuZl9uYXRfc2Fja19hZGp1c3Qoc2tiLCB0Y3BoLCBjdCwgY3RpbmZvKTsKIH0KIAogLyogU2V0dXAgTkFUIG9uIHRoaXMgZXhwZWN0ZWQgY29ubnRyYWNrIHNvIGl0IGZvbGxvd3MgbWFzdGVyLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA3NTdjOTE3Li5hYjk5NmY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzUyLDEzICszNTIsMjQgQEAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwotCWVyciA9IG1lbWNweV9mcm9taW92ZWNlbmQoKHZvaWQgKilpcGgsIGZyb20sIDAsIGxlbmd0aCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcl9mYXVsdDsKKwllcnIgPSAtRUZBVUxUOworCWlmIChtZW1jcHlfZnJvbWlvdmVjZW5kKCh2b2lkICopaXBoLCBmcm9tLCAwLCBsZW5ndGgpKQorCQlnb3RvIGVycm9yX2ZyZWU7CiAKLQkvKiBXZSBkb24ndCBtb2RpZnkgaW52YWxpZCBoZWFkZXIgKi8KIAlpcGhsZW4gPSBpcGgtPmlobCAqIDQ7Ci0JaWYgKGlwaGxlbiA+PSBzaXplb2YoKmlwaCkgJiYgaXBobGVuIDw9IGxlbmd0aCkgeworCisJLyoKKwkgKiBXZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgaXAgaGVhZGVyLCBidXQgd2UgZG8gbmVlZCB0bworCSAqIGJlIHN1cmUgdGhhdCBpdCB3b24ndCBjYXVzZSBwcm9ibGVtcyBsYXRlciBhbG9uZyB0aGUgbmV0d29yaworCSAqIHN0YWNrLiAgU3BlY2lmaWNhbGx5IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXBoLT5paGwgaXMgYQorCSAqIHNhbmUgdmFsdWUuICBJZiBpaGwgcG9pbnRzIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgcGFzc2VkCisJICogaW4sIHJlamVjdCB0aGUgZnJhbWUgYXMgaW52YWxpZAorCSAqLworCWVyciA9IC1FSU5WQUw7CisJaWYgKGlwaGxlbiA+IGxlbmd0aCkKKwkJZ290byBlcnJvcl9mcmVlOworCisJaWYgKGlwaGxlbiA+PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtPnNhZGRyKQogCQkJaXBoLT5zYWRkciA9IHJ0LT5ydF9zcmM7CiAJCWlwaC0+Y2hlY2sgICA9IDA7CkBAIC0zODEsOCArMzkyLDcgQEAKIG91dDoKIAlyZXR1cm4gMDsKIAotZXJyb3JfZmF1bHQ6Ci0JZXJyID0gLUVGQVVMVDsKK2Vycm9yX2ZyZWU6CiAJa2ZyZWVfc2tiKHNrYik7CiBlcnJvcjoKIAlJUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBiYjQxOTkyLi41YjEwNTBhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTE4NTQsNyArMTg1NCw3IEBACiAJCQlnb3RvIGVfaW52YWw7CiAJCXNwZWNfZHN0ID0gaW5ldF9zZWxlY3RfYWRkcihkZXYsIDAsIFJUX1NDT1BFX0xJTkspOwogCX0gZWxzZSBpZiAoZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgMCwgdG9zLCAwLAotCQkJCQlkZXYsICZzcGVjX2RzdCwgJml0YWcpIDwgMCkKKwkJCQkJZGV2LCAmc3BlY19kc3QsICZpdGFnLCAwKSA8IDApCiAJCWdvdG8gZV9pbnZhbDsKIAogCXJ0aCA9IGRzdF9hbGxvYygmaXB2NF9kc3Rfb3BzKTsKQEAgLTE5NjcsNyArMTk2Nyw3IEBACiAKIAogCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2FkZHIsIGRhZGRyLCB0b3MsIEZJQl9SRVNfT0lGKCpyZXMpLAotCQkJCSAgaW5fZGV2LT5kZXYsICZzcGVjX2RzdCwgJml0YWcpOworCQkJCSAgaW5fZGV2LT5kZXYsICZzcGVjX2RzdCwgJml0YWcsIHNrYi0+bWFyayk7CiAJaWYgKGVyciA8IDApIHsKIAkJaXBfaGFuZGxlX21hcnRpYW5fc291cmNlKGluX2Rldi0+ZGV2LCBpbl9kZXYsIHNrYiwgZGFkZHIsCiAJCQkJCSBzYWRkcik7CkBAIC0yMTQxLDcgKzIxNDEsNyBAQAogCQlpbnQgcmVzdWx0OwogCQlyZXN1bHQgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCBkYWRkciwgdG9zLAogCQkJCQkgICAgIG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4LAotCQkJCQkgICAgIGRldiwgJnNwZWNfZHN0LCAmaXRhZyk7CisJCQkJCSAgICAgZGV2LCAmc3BlY19kc3QsICZpdGFnLCBza2ItPm1hcmspOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCWdvdG8gbWFydGlhbl9zb3VyY2U7CiAJCWlmIChyZXN1bHQpCkBAIC0yMTcwLDcgKzIxNzAsNyBAQAogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAllbHNlIHsKIAkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgMCwgdG9zLCAwLCBkZXYsICZzcGVjX2RzdCwKLQkJCQkJICAmaXRhZyk7CisJCQkJCSAgJml0YWcsIHNrYi0+bWFyayk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBtYXJ0aWFuX3NvdXJjZTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNjRkMGFmNi4uZjE4MTNiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTMyNiw2ICszMjYsNDMgQEAKIAogRVhQT1JUX1NZTUJPTCh0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKTsKIAorLyogQ29udmVydCBzZWNvbmRzIHRvIHJldHJhbnNtaXRzIGJhc2VkIG9uIGluaXRpYWwgYW5kIG1heCB0aW1lb3V0ICovCitzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCit7CisJdTggcmVzID0gMDsKKworCWlmIChzZWNvbmRzID4gMCkgeworCQlpbnQgcGVyaW9kID0gdGltZW91dDsKKworCQlyZXMgPSAxOworCQl3aGlsZSAoc2Vjb25kcyA+IHBlcmlvZCAmJiByZXMgPCAyNTUpIHsKKwkJCXJlcysrOworCQkJdGltZW91dCA8PD0gMTsKKwkJCWlmICh0aW1lb3V0ID4gcnRvX21heCkKKwkJCQl0aW1lb3V0ID0gcnRvX21heDsKKwkJCXBlcmlvZCArPSB0aW1lb3V0OworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qIENvbnZlcnQgcmV0cmFuc21pdHMgdG8gc2Vjb25kcyBiYXNlZCBvbiBpbml0aWFsIGFuZCBtYXggdGltZW91dCAqLworc3RhdGljIGludCByZXRyYW5zX3RvX3NlY3ModTggcmV0cmFucywgaW50IHRpbWVvdXQsIGludCBydG9fbWF4KQoreworCWludCBwZXJpb2QgPSAwOworCisJaWYgKHJldHJhbnMgPiAwKSB7CisJCXBlcmlvZCA9IHRpbWVvdXQ7CisJCXdoaWxlICgtLXJldHJhbnMpIHsKKwkJCXRpbWVvdXQgPDw9IDE7CisJCQlpZiAodGltZW91dCA+IHJ0b19tYXgpCisJCQkJdGltZW91dCA9IHJ0b19tYXg7CisJCQlwZXJpb2QgKz0gdGltZW91dDsKKwkJfQorCX0KKwlyZXR1cm4gcGVyaW9kOworfQorCiAvKgogICoJV2FpdCBmb3IgYSBUQ1AgZXZlbnQuCiAgKgpAQCAtMTE0Niw3ICsxMTgzLDkgQEAKICNpZiBUQ1BfREVCVUcKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAotCVdBUk5fT04oc2tiICYmICFiZWZvcmUodHAtPmNvcGllZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSkpOworCVdBUk4oc2tiICYmICFiZWZvcmUodHAtPmNvcGllZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSksCisJICAgICBLRVJOX0lORk8gImNsZWFudXAgcmJ1ZiBidWc6IGNvcGllZCAlWCBzZXEgJVggcmN2bnh0ICVYXG4iLAorCSAgICAgdHAtPmNvcGllZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgdHAtPnJjdl9ueHQpOwogI2VuZGlmCiAKIAlpZiAoaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzaykpIHsKQEAgLTEzOTMsMTEgKzE0MzIsMTMgQEAKIAkJCS8qIE5vdyB0aGF0IHdlIGhhdmUgdHdvIHJlY2VpdmUgcXVldWVzIHRoaXMKIAkJCSAqIHNob3VsZG4ndCBoYXBwZW4uCiAJCQkgKi8KLQkJCWlmIChiZWZvcmUoKnNlcSwgVENQX1NLQl9DQihza2IpLT5zZXEpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVjdm1zZyBidWc6IGNvcGllZCAlWCAiCi0JCQkJICAgICAgICJzZXEgJVhcbiIsICpzZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJCWlmIChXQVJOKGJlZm9yZSgqc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSksCisJCQkgICAgIEtFUk5fSU5GTyAicmVjdm1zZyBidWc6IGNvcGllZCAlWCAiCisJCQkJICAgICAgICJzZXEgJVggcmN2bnh0ICVYIGZsICVYXG4iLCAqc2VxLAorCQkJCSAgICAgICBUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdHAtPnJjdl9ueHQsCisJCQkJICAgICAgIGZsYWdzKSkKIAkJCQlicmVhazsKLQkJCX0KKwogCQkJb2Zmc2V0ID0gKnNlcSAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJaWYgKHRjcF9oZHIoc2tiKS0+c3luKQogCQkJCW9mZnNldC0tOwpAQCAtMTQwNSw3ICsxNDQ2LDEwIEBACiAJCQkJZ290byBmb3VuZF9va19za2I7CiAJCQlpZiAodGNwX2hkcihza2IpLT5maW4pCiAJCQkJZ290byBmb3VuZF9maW5fb2s7Ci0JCQlXQVJOX09OKCEoZmxhZ3MgJiBNU0dfUEVFSykpOworCQkJV0FSTighKGZsYWdzICYgTVNHX1BFRUspLCBLRVJOX0lORk8gInJlY3Ztc2cgYnVnIDI6ICIKKwkJCQkJImNvcGllZCAlWCBzZXEgJVggcmN2bnh0ICVYIGZsICVYXG4iLAorCQkJCQkqc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCQkJdHAtPnJjdl9ueHQsIGZsYWdzKTsKIAkJfQogCiAJCS8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi8KQEAgLTIxNjMsMTYgKzIyMDcsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRDUF9ERUZFUl9BQ0NFUFQ6Ci0JCWljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ID0gMDsKLQkJaWYgKHZhbCA+IDApIHsKLQkJCS8qIFRyYW5zbGF0ZSB2YWx1ZSBpbiBzZWNvbmRzIHRvIG51bWJlciBvZgotCQkJICogcmV0cmFuc21pdHMgKi8KLQkJCXdoaWxlIChpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA8IDMyICYmCi0JCQkgICAgICAgdmFsID4gKChUQ1BfVElNRU9VVF9JTklUIC8gSFopIDw8Ci0JCQkJICAgICAgIGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0KSkKLQkJCQlpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCsrOwotCQkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQrKzsKLQkJfQorCQkvKiBUcmFuc2xhdGUgdmFsdWUgaW4gc2Vjb25kcyB0byBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KKwkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPQorCQkJc2Vjc190b19yZXRyYW5zKHZhbCwgVENQX1RJTUVPVVRfSU5JVCAvIEhaLAorCQkJCQlUQ1BfUlRPX01BWCAvIEhaKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRDUF9XSU5ET1dfQ0xBTVA6CkBAIC0yMzUzLDggKzIzOTEsOCBAQAogCQkJdmFsID0gKHZhbCA/IDogc3lzY3RsX3RjcF9maW5fdGltZW91dCkgLyBIWjsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfREVGRVJfQUNDRVBUOgotCQl2YWwgPSAhaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPyAwIDoKLQkJCSgoVENQX1RJTUVPVVRfSU5JVCAvIEhaKSA8PCAoaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgLSAxKSk7CisJCXZhbCA9IHJldHJhbnNfdG9fc2VjcyhpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCwKKwkJCQkgICAgICBUQ1BfVElNRU9VVF9JTklUIC8gSFosIFRDUF9SVE9fTUFYIC8gSFopOwogCQlicmVhazsKIAljYXNlIFRDUF9XSU5ET1dfQ0xBTVA6CiAJCXZhbCA9IHRwLT53aW5kb3dfY2xhbXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggNjI0YzNjOS4uNGMwMzU5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNjQxLDggKzY0MSw4IEBACiAJaWYgKCEoZmxnICYgVENQX0ZMQUdfQUNLKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBJZiBUQ1BfREVGRVJfQUNDRVBUIGlzIHNldCwgZHJvcCBiYXJlIEFDSy4gKi8KLQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCAmJgorCS8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqLworCWlmIChyZXEtPnJldHJhbnMgPCBpbmV0X2NzayhzayktPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ICYmCiAJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSA9PSB0Y3BfcnNrKHJlcSktPnJjdl9pc24gKyAxKSB7CiAJCWluZXRfcnNrKHJlcSktPmFja2VkID0gMTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDZlYzZhOGEuLjBmYTlmNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC04NDEsNiArODQxLDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorCisvKioKKyAqCWZpcnN0X3BhY2tldF9sZW5ndGgJLSByZXR1cm4gbGVuZ3RoIG9mIGZpcnN0IHBhY2tldCBpbiByZWNlaXZlIHF1ZXVlCisgKglAc2s6IHNvY2tldAorICoKKyAqCURyb3BzIGFsbCBiYWQgY2hlY2tzdW0gZnJhbWVzLCB1bnRpbCBhIHZhbGlkIG9uZSBpcyBmb3VuZC4KKyAqCVJldHVybnMgdGhlIGxlbmd0aCBvZiBmb3VuZCBza2IsIG9yIDAgaWYgbm9uZSBpcyBmb3VuZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBmaXJzdF9wYWNrZXRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Rfa2lsbCwgKnJjdnEgPSAmc2stPnNrX3JlY2VpdmVfcXVldWU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcmVzOworCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZsaXN0X2tpbGwpOworCisJc3Bpbl9sb2NrX2JoKCZyY3ZxLT5sb2NrKTsKKwl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHJjdnEpKSAhPSBOVUxMICYmCisJCXVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgeworCQlVRFBfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVURQX01JQl9JTkVSUk9SUywKKwkJCQkgSVNfVURQTElURShzaykpOworCQlfX3NrYl91bmxpbmsoc2tiLCByY3ZxKTsKKwkJX19za2JfcXVldWVfdGFpbCgmbGlzdF9raWxsLCBza2IpOworCX0KKwlyZXMgPSBza2IgPyBza2ItPmxlbiA6IDA7CisJc3Bpbl91bmxvY2tfYmgoJnJjdnEtPmxvY2spOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJmxpc3Rfa2lsbCkpIHsKKwkJbG9ja19zb2NrKHNrKTsKKwkJX19za2JfcXVldWVfcHVyZ2UoJmxpc3Rfa2lsbCk7CisJCXNrX21lbV9yZWNsYWltX3BhcnRpYWwoc2spOworCQlyZWxlYXNlX3NvY2soc2spOworCX0KKwlyZXR1cm4gcmVzOworfQorCiAvKgogICoJSU9DVEwgcmVxdWVzdHMgYXBwbGljYWJsZSB0byB0aGUgVURQIHByb3RvY29sCiAgKi8KQEAgLTg1NywyMSArODkzLDE2IEBACiAKIAljYXNlIFNJT0NJTlE6CiAJewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQl1bnNpZ25lZCBsb25nIGFtb3VudDsKKwkJdW5zaWduZWQgaW50IGFtb3VudCA9IGZpcnN0X3BhY2tldF9sZW5ndGgoc2spOwogCi0JCWFtb3VudCA9IDA7Ci0JCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCWlmIChza2IgIT0gTlVMTCkgeworCQlpZiAoYW1vdW50KQogCQkJLyoKIAkJCSAqIFdlIHdpbGwgb25seSByZXR1cm4gdGhlIGFtb3VudAogCQkJICogb2YgdGhpcyBwYWNrZXQgc2luY2UgdGhhdCBpcyBhbGwKIAkJCSAqIHRoYXQgd2lsbCBiZSByZWFkLgogCQkJICovCi0JCQlhbW91bnQgPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJCQlhbW91bnQgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCiAJCXJldHVybiBwdXRfdXNlcihhbW91bnQsIChpbnQgX191c2VyICopYXJnKTsKIAl9CiAKQEAgLTk2OCw5ICs5OTksNyBAQAogCQllcnIgPSB1bGVuOwogCiBvdXRfZnJlZToKLQlsb2NrX3NvY2soc2spOwotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwotCXJlbGVhc2Vfc29jayhzayk7CisJc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHNrLCBza2IpOwogb3V0OgogCXJldHVybiBlcnI7CiAKQEAgLTE1NDAsMjkgKzE1NjksMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IGRhdGFncmFtX3BvbGwoZmlsZSwgc29jaywgd2FpdCk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JaW50IAlpc19saXRlID0gSVNfVURQTElURShzayk7CiAKIAkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBjaGVja3N1bSBlcnJvcnMgKi8KLQlpZiAoKG1hc2sgJiBQT0xMUkROT1JNKSAmJgotCSAgICAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJgotCSAgICAhKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpIHsKLQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcmN2cSA9ICZzay0+c2tfcmVjZWl2ZV9xdWV1ZTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQlzcGluX2xvY2tfYmgoJnJjdnEtPmxvY2spOwotCQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHJjdnEpKSAhPSBOVUxMICYmCi0JCSAgICAgICB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCVVEUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLAotCQkJCQlVRFBfTUlCX0lORVJST1JTLCBpc19saXRlKTsKLQkJCV9fc2tiX3VubGluayhza2IsIHJjdnEpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnJjdnEtPmxvY2spOwotCi0JCS8qIG5vdGhpbmcgdG8gc2VlLCBtb3ZlIGFsb25nICovCi0JCWlmIChza2IgPT0gTlVMTCkKLQkJCW1hc2sgJj0gfihQT0xMSU4gfCBQT0xMUkROT1JNKTsKLQl9CisJaWYgKChtYXNrICYgUE9MTFJETk9STSkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYKKwkgICAgIShzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pICYmICFmaXJzdF9wYWNrZXRfbGVuZ3RoKHNrKSkKKwkJbWFzayAmPSB+KFBPTExJTiB8IFBPTExSRE5PUk0pOwogCiAJcmV0dXJuIG1hc2s7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCAxNGY1NGViLi40ZjdhYWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC00OTYsMTMgKzQ5NiwxNyBAQAogCQkJZ290byBlX2ludmFsOwogCiAJCWlmICh2YWwpIHsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKIAkJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIHNrLT5za19ib3VuZF9kZXZfaWYgIT0gdmFsKQogCQkJCWdvdG8gZV9pbnZhbDsKIAotCQkJaWYgKF9fZGV2X2dldF9ieV9pbmRleChuZXQsIHZhbCkgPT0gTlVMTCkgeworCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIHZhbCk7CisJCQlpZiAoIWRldikgewogCQkJCXJldHYgPSAtRU5PREVWOwogCQkJCWJyZWFrOwogCQkJfQorCQkJZGV2X3B1dChkZXYpOwogCQl9CiAJCW5wLT5tY2FzdF9vaWYgPSB2YWw7CiAJCXJldHYgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCAzYTYwZjEyLi5jZjUzOGVkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMjg4LDkgKzI4OCw3IEBACiAJCWVyciA9IHVsZW47CiAKIG91dF9mcmVlOgotCWxvY2tfc29jayhzayk7Ci0Jc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKKwlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc2ssIHNrYik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCmluZGV4IGJjMDY0ZDcuLmNlOGUwZTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTg1LDEwICs4NSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKLQkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCi0JICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KLQlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCBiZDc2NWYzLi44OWUyMzhiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC0xMjMsMTMgKzEyMywxOCBAQAogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKLQkJCQkJICAgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKK2ludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKIAlpbnQgcmV0OwogCXU4ICpzdGF0ZTsKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCiAJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwogCiAJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCkBAIC0xNDMsNyArMTQ4LDYgQEAKIAogCS8qIEhXIHNoYWxsIG5vdCBkZW55IGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCiAJaWYgKFdBUk5fT04ocmV0KSkgewotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CiAJCS8qCiAJCSAqIFdlIG1heSBoYXZlIHBlbmRpbmcgcGFja2V0cyBnZXQgc3R1Y2sgaW4gdGhpcyBjYXNlLi4uCiAJCSAqIE5vdCBib3RoZXJpbmcgd2l0aCBhIHdvcmthcm91bmQgZm9yIG5vdy4KQEAgLTE3MywxMiArMTc3LDE0IEBACiAKIAkvKiBjaGVjayBpZiB0aGUgVElEIHdhaXRzIGZvciBhZGRCQSByZXNwb25zZSAqLwogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgeworCWlmICgoKnN0YXRlICYgKEhUX0FEREJBX1JFUVVFU1RFRF9NU0sgfCBIVF9BRERCQV9SRUNFSVZFRF9NU0spKSAhPQorCQkJCQkJSFRfQUREQkFfUkVRVUVTVEVEX01TSykgewogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lciBleHBpcmVkIG9uIHRpZCAlZCBidXQgd2UgYXJlIG5vdCAiCi0JCQkJImV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsIHRpZCk7CisJCQkJIihvciBubyBsb25nZXIpIGV4cGVjdGluZyBhZGRCQSByZXNwb25zZSB0aGVyZSIsCisJCQl0aWQpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CkBAIC01MjMsMTEgKzUyOSw2IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCiAJcmV0ID0gX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKIAogIHVubG9jazoKQEAgLTU0Myw3ICs1NDQsNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCByZXQgPSAwOwogCi0JaWYgKFdBUk5fT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikpCisJaWYgKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkKQEAgLTY2OCwyNCArNjY5LDIzIEBACiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAKLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkKKwkJZ290byBvdXQ7CiAKIAlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQogCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCi0JZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisJZGVsX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwogCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQogCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQl1OCBjdXJzdGF0ZSA9ICpzdGF0ZTsKQEAgLTY5OSw1ICs2OTksNyBAQAogCX0gZWxzZSB7CiAJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19JTklUSUFUT1IpOwogCX0KKworIG91dDoKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCA1NjA4ZjZjLi43YjUxMzFiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKKysrIGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC03Miw2ICs3Miw5IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IHJldDsKIAorCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKIAlpZiAoIW5sODAyMTFfdHlwZV9jaGVjayh0eXBlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTgxLDkgKzg0LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJiBwYXJhbXMtPm1lc2hfaWRfbGVuKQogCQlpZWVlODAyMTFfc2RhdGFfc2V0X21lc2hfaWQoc2RhdGEsCiAJCQkJCSAgICBwYXJhbXMtPm1lc2hfaWRfbGVuLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuYwppbmRleCAwODkxYmZiLi5jZGM1OGU2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaHQuYworKysgYi9uZXQvbWFjODAyMTEvaHQuYwpAQCAtMTQxLDcgKzE0MSw2IEBACiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJdTE2IHRpZCwgcGFyYW1zOwogCXUxNiBpbml0aWF0b3I7CiAKQEAgLTE1Myw3ICsxNTIsNyBAQAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJkZWxiYSBmcm9tICVwTSAoJXMpIHRpZCAlZCByZWFzb24gY29kZSAlZFxuIiwKIAkJCW1nbXQtPnNhLCBpbml0aWF0b3IgPyAiaW5pdGlhdG9yIiA6ICJyZWNpcGllbnQiLCB0aWQsCi0JCQltZ210LT51LmFjdGlvbi51LmRlbGJhLnJlYXNvbl9jb2RlKTsKKwkJCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUpKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KIAogCWlmIChpbml0aWF0b3IgPT0gV0xBTl9CQUNLX0lOSVRJQVRPUikKQEAgLTE2MSwxMCArMTYwLDkgQEAKIAkJCQkJCSBXTEFOX0JBQ0tfSU5JVElBVE9SLCAwKTsKIAllbHNlIHsgLyogV0xBTl9CQUNLX1JFQ0lQSUVOVCAqLwogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXSA9Ci0JCQkJSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOworCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykKKwkJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsCisJCQkJCQkJV0xBTl9CQUNLX1JFQ0lQSUVOVCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKCZsb2NhbC0+aHcsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkJICAgICBXTEFOX0JBQ0tfUkVDSVBJRU5UKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCA5MjBlYzg3Li5mMTM2MmYzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTczLDYgKzczLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTggKnBvczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAJdTMyIGJzc19jaGFuZ2U7CiAJdTggc3VwcF9yYXRlc1tJRUVFODAyMTFfTUFYX1NVUFBfUkFURVNdOwogCkBAIC0xNzcsOCArMTc4LDkgQEAKIAltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsCiAJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpKTsKIAotCWNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAotCQkJCSAgbWdtdCwgc2tiLT5sZW4sIDAsIEdGUF9LRVJORUwpOworCWJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAorCQkJCQltZ210LCBza2ItPmxlbiwgMCwgR0ZQX0tFUk5FTCk7CisJY2ZnODAyMTFfcHV0X2Jzcyhic3MpOwogCWNmZzgwMjExX2lic3Nfam9pbmVkKHNkYXRhLT5kZXYsIGlmaWJzcy0+YnNzaWQsIEdGUF9LRVJORUwpOwogfQogCkBAIC01MzgsMTMgKzU0MCwxMiBAQAogCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKIAkJCQkgICAgICAgY2FwYWJpbGl0eSk7CiAKKwlpZiAoYnNzKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlpZiAoYnNzKQogCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgogCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCi0JaWYgKGJzcyAmJiBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTikpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKIAkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzLT5jYnNzLmJzc2lkKTsKQEAgLTU1Miw4ICs1NTMsNyBAQAogCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CiAJCXJldHVybjsKLQl9IGVsc2UgaWYgKGJzcykKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJfQogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKQEAgLTgyOSw3ICs4MjksNyBAQAogCQlpZiAoIXNkYXRhLT51Lmlic3Muc3NpZF9sZW4pCiAJCQljb250aW51ZTsKIAkJc2RhdGEtPnUuaWJzcy5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKLQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCQltb2RfdGltZXIoJnNkYXRhLT51Lmlic3MudGltZXIsIDApOwogCX0KIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNTg4MDA1Yy4uMTBkMzE2ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTY2Miw2ICs2NjIsMTQgQEAKIAlib29sIHN1c3BlbmRlZDsKIAogCS8qCisJICogUmVzdW1pbmcgaXMgdHJ1ZSB3aGlsZSBzdXNwZW5kZWQsIGJ1dCB3aGVuIHdlJ3JlIHJlcHJvZ3JhbW1pbmcgdGhlCisJICogaGFyZHdhcmUgLS0gYXQgdGhhdCB0aW1lIGl0J3MgYWxsb3dlZCB0byB1c2UgaWVlZTgwMjExX3F1ZXVlX3dvcmsoKQorCSAqIGFnYWluIGV2ZW4gdGhvdWdoIHNvbWUgb3RoZXIgcGFydHMgb2YgdGhlIHN0YWNrIGFyZSBzdGlsbCBzdXNwZW5kZWQKKwkgKiBhbmQgd2Ugc3RpbGwgZHJvcCByZWNlaXZlZCBmcmFtZXMgdG8gYXZvaWQgd2FraW5nIHRoZSBzdGFjay4KKwkgKi8KKwlib29sIHJlc3VtaW5nOworCisJLyoKIAkgKiBxdWllc2NpbmcgaXMgdHJ1ZSBkdXJpbmcgdGhlIHN1c3BlbmQgcHJvY2VzcyBfb25seV8gdG8KIAkgKiBlYXNlIHRpbWVyIGNhbmNlbGxpbmcgZXRjLgogCSAqLwpAQCAtMTA4Myw2ICsxMDkxLDggQEAKIAogaW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKIAkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKK2ludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKIAogLyogU3BlY3RydW0gbWFuYWdlbWVudCAqLwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggZTEyYTc4Ni4uMjliODJlOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAgKiBAaHdtcF9pZTogaHdtcCBpbmZvcm1hdGlvbiBlbGVtZW50IChQUkVQIG9yIFBSRVEpCiAgKgogICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXRoIHJvdXRpbmcgaW5mb3JtYXRpb24gdG8gdGhlIG9yaWdpbmF0b3IgYW5kIHRoZQotICogdHJhbnNtaXR0ZXIgb2YgYSBIV01QIFBSRVEgb3IgUFJFUCBmcmFtLgorICogdHJhbnNtaXR0ZXIgb2YgYSBIV01QIFBSRVEgb3IgUFJFUCBmcmFtZS4KICAqCiAgKiBSZXR1cm5zOiBtZXRyaWMgdG8gZnJhbWUgb3JpZ2luYXRvciBvciAwIGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIGZ1cnRoZXIKICAqIHByb2Nlc3NlZApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggOGQyNmU5Yi4uZGM1MDQ5ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xNDU3LDggKzE0NTcsNyBAQAogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKLQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJa2ZyZWUod2spOworCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7CiAJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCBjMDE1ODhmLi43MTcwYmY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMjE2NCwxMSArMjE2NCwxNyBAQAogCiAJc2tiID0gcnguc2tiOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCWlmIChyeC5zZGF0YSAmJiBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKKwkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhyeC5zZGF0YSwgJnJ4LCBoZHIpOworCQlpZiAocHJlcGFyZXMpCisJCQlwcmV2ID0gcnguc2RhdGE7CisJfSBlbHNlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQkJY29udGludWU7CiAKIAkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMjQ0Nyw2ICsyNDUzLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAKKwlXQVJOX09OX09OQ0Uoc29mdGlycV9jb3VudCgpID09IDApOworCiAJaWYgKFdBUk5fT04oc3RhdHVzLT5iYW5kIDwgMCB8fAogCQkgICAgc3RhdHVzLT5iYW5kID49IElFRUU4MDIxMV9OVU1fQkFORFMpKQogCQlnb3RvIGRyb3A7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IGVlYzAwMTQuLjU5NGYyMzEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkJCQkJICAgICB1LmFwKTsKIAogCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfQURELCAmc3RhLT5zdGEpOworCQlzZGF0YSA9IHN0YS0+c2RhdGE7CiAJfQogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKQEAgLTQ5Niw2ICs0OTcsNyBAQAogCiAJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9SRU1PVkUsCiAJCQkgICAgICAgJigqc3RhKS0+c3RhKTsKKwkJc2RhdGEgPSAoKnN0YSktPnNkYXRhOwogCX0KIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IGZkNDAyODIuLmVhYTQxMTggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQAogCQkJCWlmICh0bXBfc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHRtcF9zZGF0YS0+ZGV2LT5kZXZfYWRkciwKLQkJCQkJCSAgICAgICBoZHItPmFkZHIyKSkgeworCQkJCQkJICAgICAgIGhkci0+YWRkcjIpID09IDApIHsKIAkJCQkJZGV2X2hvbGQodG1wX3NkYXRhLT5kZXYpOwogCQkJCQlkZXZfcHV0KHNkYXRhLT5kZXYpOwogCQkJCQlzZGF0YSA9IHRtcF9zZGF0YTsKQEAgLTE3MDQsNyArMTcwNCw4IEBACiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHIuYWRkcjEpKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHIuYWRkcjEpOwotCQlpZiAoc3RhKQorCQkvKiBYWFg6IGluIHRoZSBmdXR1cmUsIHVzZSBzZGF0YSB0byBsb29rIHVwIHRoZSBzdGEgKi8KKwkJaWYgKHN0YSAmJiBzdGEtPnNkYXRhID09IHNkYXRhKQogCQkJc3RhX2ZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBkZDY1NjQzLi5lNmMwOGRhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKLQkJa2ZyZWUoc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAkJaWYgKFdBUk5fT04oIWluZm8tPmNvbnRyb2wudmlmKSkgewotCQkJa2ZyZWUoc2tiKTsKKwkJCWtmcmVlX3NrYihza2IpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNTIwLDkgKzUyMCw5IEBACiAgKi8KIHN0YXRpYyBib29sIGllZWU4MDIxMV9jYW5fcXVldWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLSAgICAgICAgaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwgInF1ZXVlaW5nIGllZWU4MDIxMSB3b3JrIHdoaWxlICIKLQkJICJnb2luZyB0byBzdXNwZW5kXG4iKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCAmJiAhbG9jYWwtPnJlc3VtaW5nLAorCQkgInF1ZXVlaW5nIGllZWU4MDIxMSB3b3JrIHdoaWxlIGdvaW5nIHRvIHN1c3BlbmRcbiIpKQorCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMjUsMTMgKzEwMjUsOSBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlczsKLQlib29sIGZyb21fc3VzcGVuZCA9IGxvY2FsLT5zdXNwZW5kZWQ7CiAKLQkvKgotCSAqIFdlJ3JlIGdvaW5nIHRvIHN0YXJ0IHRoZSBoYXJkd2FyZSwgYXQgdGhhdCBwb2ludAotCSAqIHdlIGFyZSBubyBsb25nZXIgc3VzcGVuZGVkIGFuZCBjYW4gUlggZnJhbWVzLgotCSAqLwotCWxvY2FsLT5zdXNwZW5kZWQgPSBmYWxzZTsKKwlpZiAobG9jYWwtPnN1c3BlbmRlZCkKKwkJbG9jYWwtPnJlc3VtaW5nID0gdHJ1ZTsKIAogCS8qIHJlc3RhcnQgaGFyZHdhcmUgKi8KIAlpZiAobG9jYWwtPm9wZW5fY291bnQpIHsKQEAgLTExMjksMTEgKzExMjUsMTQgQEAKIAkgKiBJZiB0aGlzIGlzIGZvciBodyByZXN0YXJ0IHRoaW5ncyBhcmUgc3RpbGwgcnVubmluZy4KIAkgKiBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhhdCBsYXRlciwgaG93ZXZlci4KIAkgKi8KLQlpZiAoIWZyb21fc3VzcGVuZCkKKwlpZiAoIWxvY2FsLT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCiAjaWZkZWYgQ09ORklHX1BNCisJLyogZmlyc3Qgc2V0IHN1c3BlbmRlZCBmYWxzZSwgdGhlbiByZXN1bWluZyAqLwogCWxvY2FsLT5zdXNwZW5kZWQgPSBmYWxzZTsKKwltYigpOworCWxvY2FsLT5yZXN1bWluZyA9IGZhbHNlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN3aXRjaChzZGF0YS0+dmlmLnR5cGUpIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjYTZlNjhkLi5iOTE2OGMxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0xMzUxLDYgKzEzNTEsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzMTYgKCpuZl9jdF9uYXRfb2Zmc2V0KShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkJdTMyIHNlcSk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9uYXRfb2Zmc2V0KTsKKwogaW50IG5mX2Nvbm50cmFja19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgcmV0OwpAQCAtMTM2OCw2ICsxMzczLDkgQEAKIAkJLyogRm9yIHVzZSBieSBSRUpFQ1QgdGFyZ2V0ICovCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9jdF9hdHRhY2gsIG5mX2Nvbm50cmFja19hdHRhY2gpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfZGVzdHJveSwgZGVzdHJveV9jb25udHJhY2spOworCisJCS8qIEhvd3RvIGdldCBOQVQgb2Zmc2V0cyAqLworCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfY3RfbmF0X29mZnNldCwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDk3YTgyYmEuLmJhMmI3NjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC00OTIsNiArNDkyLDIxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKK3N0YXRpYyBpbmxpbmUgczE2IG5hdF9vZmZzZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkJICAgICB1MzIgc2VxKQoreworCXR5cGVvZihuZl9jdF9uYXRfb2Zmc2V0KSBnZXRfb2Zmc2V0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX2N0X25hdF9vZmZzZXQpOworCisJcmV0dXJuIGdldF9vZmZzZXQgIT0gTlVMTCA/IGdldF9vZmZzZXQoY3QsIGRpciwgc2VxKSA6IDA7Cit9CisjZGVmaW5lIE5BVF9PRkZTRVQocGYsIGN0LCBkaXIsIHNlcSkgXAorCShwZiA9PSBORlBST1RPX0lQVjQgPyBuYXRfb2Zmc2V0KGN0LCBkaXIsIHNlcSkgOiAwKQorI2Vsc2UKKyNkZWZpbmUgTkFUX09GRlNFVChwZiwgY3QsIGRpciwgc2VxKQkwCisjZW5kaWYKKwogc3RhdGljIGJvb2wgdGNwX2luX3dpbmRvdyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgIHN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlLAogCQkJICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLApAQCAtNTA2LDYgKzUyMSw3IEBACiAJc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqcmVjZWl2ZXIgPSAmc3RhdGUtPnNlZW5bIWRpcl07CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUgPSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlOwogCV9fdTMyIHNlcSwgYWNrLCBzYWNrLCBlbmQsIHdpbiwgc3dpbjsKKwlzMTYgcmVjZWl2ZXJfb2Zmc2V0OwogCWJvb2wgcmVzOwogCiAJLyoKQEAgLTUxOSwxMSArNTM1LDE2IEBACiAJaWYgKHJlY2VpdmVyLT5mbGFncyAmIElQX0NUX1RDUF9GTEFHX1NBQ0tfUEVSTSkKIAkJdGNwX3NhY2soc2tiLCBkYXRhb2ZmLCB0Y3BoLCAmc2Fjayk7CiAKKwkvKiBUYWtlIGludG8gYWNjb3VudCBOQVQgc2VxdWVuY2UgbnVtYmVyIG1hbmdsaW5nICovCisJcmVjZWl2ZXJfb2Zmc2V0ID0gTkFUX09GRlNFVChwZiwgY3QsICFkaXIsIGFjayAtIDEpOworCWFjayAtPSByZWNlaXZlcl9vZmZzZXQ7CisJc2FjayAtPSByZWNlaXZlcl9vZmZzZXQ7CisKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogU1RBUlRcbiIpOwogCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiAiKTsKIAluZl9jdF9kdW1wX3R1cGxlKHR1cGxlKTsKLQlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSBzYWNrPSV1IHdpbj0ldSBlbmQ9JXVcbiIsCi0JCSBzZXEsIGFjaywgc2Fjaywgd2luLCBlbmQpOworCXByX2RlYnVnKCJzZXE9JXUgYWNrPSV1KyglZCkgc2Fjaz0ldSsoJWQpIHdpbj0ldSBlbmQ9JXVcbiIsCisJCSBzZXEsIGFjaywgcmVjZWl2ZXJfb2Zmc2V0LCBzYWNrLCByZWNlaXZlcl9vZmZzZXQsIHdpbiwgZW5kKTsKIAlwcl9kZWJ1ZygidGNwX2luX3dpbmRvdzogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKIAkJICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKIAkJIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCkBAIC02MTMsOCArNjM0LDggQEAKIAogCXByX2RlYnVnKCJ0Y3BfaW5fd2luZG93OiAiKTsKIAluZl9jdF9kdW1wX3R1cGxlKHR1cGxlKTsKLQlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSBzYWNrID0ldSB3aW49JXUgZW5kPSV1XG4iLAotCQkgc2VxLCBhY2ssIHNhY2ssIHdpbiwgZW5kKTsKKwlwcl9kZWJ1Zygic2VxPSV1IGFjaz0ldSsoJWQpIHNhY2s9JXUrKCVkKSB3aW49JXUgZW5kPSV1XG4iLAorCQkgc2VxLCBhY2ssIHJlY2VpdmVyX29mZnNldCwgc2FjaywgcmVjZWl2ZXJfb2Zmc2V0LCB3aW4sIGVuZCk7CiAJcHJfZGVidWcoInRjcF9pbl93aW5kb3c6IHNlbmRlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laSAiCiAJCSAicmVjZWl2ZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWlcbiIsCiAJCSBzZW5kZXItPnRkX2VuZCwgc2VuZGVyLT50ZF9tYXhlbmQsIHNlbmRlci0+dGRfbWF4d2luLApAQCAtNzAwLDcgKzcyMSw3IEBACiAJCQliZWZvcmUoc2VxLCBzZW5kZXItPnRkX21heGVuZCArIDEpID8KIAkJCWFmdGVyKGVuZCwgc2VuZGVyLT50ZF9lbmQgLSByZWNlaXZlci0+dGRfbWF4d2luIC0gMSkgPwogCQkJYmVmb3JlKHNhY2ssIHJlY2VpdmVyLT50ZF9lbmQgKyAxKSA/Ci0JCQlhZnRlcihhY2ssIHJlY2VpdmVyLT50ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSkgPyAiQlVHIgorCQkJYWZ0ZXIoc2FjaywgcmVjZWl2ZXItPnRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkgPyAiQlVHIgogCQkJOiAiQUNLIGlzIHVuZGVyIHRoZSBsb3dlciBib3VuZCAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQgQUNLKSIKIAkJCTogIkFDSyBpcyBvdmVyIHRoZSB1cHBlciBib3VuZCAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpIgogCQkJOiAiU0VRIGlzIHVuZGVyIHRoZSBsb3dlciBib3VuZCAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpIgpAQCAtNzE1LDM5ICs3MzYsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAotLyogVXBkYXRlIHNlbmRlci0+dGRfZW5kIGFmdGVyIE5BVCBzdWNjZXNzZnVsbHkgbWFuZ2xlZCB0aGUgcGFja2V0ICovCi0vKiBDYWxsZXIgbXVzdCBsaW5lYXJpemUgc2tiIGF0IHRjcCBoZWFkZXIuICovCi12b2lkIG5mX2Nvbm50cmFja190Y3BfdXBkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGludCBkaXIsCi0JCQkgICAgIHMxNiBvZmZzZXQpCi17Ci0JY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCA9IChjb25zdCB2b2lkICopc2tiLT5kYXRhICsgZGF0YW9mZjsKLQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSAmY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl07Ci0JY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqcmVjZWl2ZXIgPSAmY3QtPnByb3RvLnRjcC5zZWVuWyFkaXJdOwotCV9fdTMyIGVuZDsKLQotCWVuZCA9IHNlZ21lbnRfc2VxX3BsdXNfbGVuKG50b2hsKHRjcGgtPnNlcSksIHNrYi0+bGVuLCBkYXRhb2ZmLCB0Y3BoKTsKLQotCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwotCS8qCi0JICogV2UgaGF2ZSB0byB3b3JyeSBmb3IgdGhlIGFjayBpbiB0aGUgcmVwbHkgcGFja2V0IG9ubHkuLi4KLQkgKi8KLQlpZiAoY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kICsgb2Zmc2V0ID09IGVuZCkKLQkJY3QtPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kID0gZW5kOwotCWN0LT5wcm90by50Y3AubGFzdF9lbmQgPSBlbmQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJmN0LT5sb2NrKTsKLQlwcl9kZWJ1ZygidGNwX3VwZGF0ZTogc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1IHNjYWxlPSVpICIKLQkJICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKLQkJIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCi0JCSBzZW5kZXItPnRkX3NjYWxlLAotCQkgcmVjZWl2ZXItPnRkX2VuZCwgcmVjZWl2ZXItPnRkX21heGVuZCwgcmVjZWl2ZXItPnRkX21heHdpbiwKLQkJIHJlY2VpdmVyLT50ZF9zY2FsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfdGNwX3VwZGF0ZSk7Ci0jZW5kaWYKLQogI2RlZmluZQlUSF9GSU4JMHgwMQogI2RlZmluZQlUSF9TWU4JMHgwMgogI2RlZmluZQlUSF9SU1QJMHgwNApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggYzkzNDk0Zi4uZDY1ZDM0OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xMjgsOSArMTI4LDggQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCAqc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKFJDVSkKIHsKLQlyY3VfcmVhZF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAogCWlmICgqcG9zID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCiAJCXJldHVybiBOVUxMOwpAQCAtMTQ5LDkgKzE0OCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLQlfX3JlbGVhc2VzKFJDVSkKIHsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQpAQCAtMTYxLDcgKzE1OSw3IEBACiAJc3RydWN0IG5mX2xvZ2dlciAqdDsKIAlpbnQgcmV0OwogCi0JbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOworCWxvZ2dlciA9IG5mX2xvZ2dlcnNbKnBvc107CiAKIAlpZiAoIWxvZ2dlcikKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CkBAIC0xNzEsMjIgKzE2OSwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbKnBvc10sIGxpc3RbKnBvc10pIHsKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCB0LT5uYW1lKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgewogCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIAogCXJldHVybiBzZXFfcHJpbnRmKHMsICIpXG4iKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCmluZGV4IDY4MDk4MDkuLjM4ZjAzZjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsCiAJCSAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqbWFzaywKLQkJICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCkKKwkJICAgICAgdV9pbnQ4X3QgZmFtaWx5KQogewogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqZm91bmQ7CiAJc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uICpjb25uOwpAQCAtMTEzLDggKzExMyw3IEBACiAJYm9vbCBhZGRpdCA9IHRydWU7CiAJaW50IG1hdGNoZXMgPSAwOwogCi0KLQlpZiAobWF0Y2gtPmZhbWlseSA9PSBORlBST1RPX0lQVjYpCisJaWYgKGZhbWlseSA9PSBORlBST1RPX0lQVjYpCiAJCWhhc2ggPSAmZGF0YS0+aXBoYXNoW2Nvbm5saW1pdF9pcGhhc2g2KGFkZHIsIG1hc2spXTsKIAllbHNlCiAJCWhhc2ggPSAmZGF0YS0+aXBoYXNoW2Nvbm5saW1pdF9pcGhhc2goYWRkci0+aXAgJiBtYXNrLT5pcCldOwpAQCAtMTU3LDggKzE1Niw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzYW1lX3NvdXJjZV9uZXQoYWRkciwgbWFzaywgJmNvbm4tPnR1cGxlLnNyYy51MywKLQkJICAgIG1hdGNoLT5mYW1pbHkpKQorCQlpZiAoc2FtZV9zb3VyY2VfbmV0KGFkZHIsIG1hc2ssICZjb25uLT50dXBsZS5zcmMudTMsIGZhbWlseSkpCiAJCQkvKiBzYW1lIHNvdXJjZSBuZXR3b3JrIC0+IGJlIGNvdW50ZWQhICovCiAJCQkrK21hdGNoZXM7CiAJCW5mX2N0X3B1dChmb3VuZF9jdCk7CkBAIC0yMDcsNyArMjA1LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmaW5mby0+ZGF0YS0+bG9jayk7CiAJY29ubmVjdGlvbnMgPSBjb3VudF90aGVtKGluZm8tPmRhdGEsIHR1cGxlX3B0ciwgJmFkZHIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICZpbmZvLT5tYXNrLCBwYXItPm1hdGNoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgJmluZm8tPm1hc2ssIHBhci0+ZmFtaWx5KTsKIAlzcGluX3VubG9ja19iaCgmaW5mby0+ZGF0YS0+bG9jayk7CiAKIAlpZiAoY29ubmVjdGlvbnMgPCAwKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKaW5kZXggMmU4MDg5ZS4uMjc3M2JlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAKIAlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIHN0YXRlLiAqLwogCXItPm1hc3RlciA9IHByaXY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwppbmRleCA2M2UxOTA1Li40ZDFhNDFiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKnNmOwotCWludCBlcnIgPSBFTk9FTlQ7CisJaW50IGVyciA9IC1FTk9FTlQ7CiAKIAlpZiAoIW9zZl9hdHRyc1tPU0ZfQVRUUl9GSU5HRVJdKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGQ3ZWNjYTAuLmYyZDExNmEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtOTgyLDEwICs5ODIsNyBAQAogCQlnb3RvIG91dF9wdXQ7CiAKIAlzaXplX21heCA9IHBvLT50eF9yaW5nLmZyYW1lX3NpemUKLQkJLSBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykKLQkJLSBwby0+dHBfaGRybGVuCi0JCS0gTExfQUxMT0NBVEVEX1NQQUNFKGRldikKLQkJLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKTsKKwkJLSAocG8tPnRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTsKIAogCWlmIChzaXplX21heCA+IGRldi0+bXR1ICsgcmVzZXJ2ZSkKIAkJc2l6ZV9tYXggPSBkZXYtPm10dSArIHJlc2VydmU7CmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IGJhMmVmYjkuLmEwMDFmN2MgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvY29yZS5jCisrKyBiL25ldC9yZmtpbGwvY29yZS5jCkBAIC0xMTg5LDYgKzExODksNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJma2lsbF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSByZmtpbGxfZm9wX29wZW4sCiAJLnJlYWQJCT0gcmZraWxsX2ZvcF9yZWFkLAogCS53cml0ZQkJPSByZmtpbGxfZm9wX3dyaXRlLApkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IDk0NzhkOWIuLmYzZTIxOTggMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYworKysgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKQEAgLTU3OCwxOCArNTc4LDE4IEBACiAKIC8qCiAgKglDaGVjayB0aGF0IHRoZSBkZXZpY2UgZ2l2ZW4gaXMgYSB2YWxpZCBBWC4yNSBpbnRlcmZhY2UgdGhhdCBpcyAidXAiLgorICogCWNhbGxlZCB3aGl0aCBSVE5MCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9heDI1X2Rldl9nZXQoY2hhciAqZGV2bmFtZSkKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9heDI1X2Rldl9maW5kKGNoYXIgKmRldm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCWlmICgoZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgZGV2bmFtZSkpID09IE5VTEwpCisJaWYgKChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRldm5hbWUpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9VUCkgJiYgZGV2LT50eXBlID09IEFSUEhSRF9BWDI1KQogCQlyZXR1cm4gZGV2OwogCi0JZGV2X3B1dChkZXYpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC03MjAsMjcgKzcyMCwyMyBAQAogCWNhc2UgU0lPQ0FERFJUOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvc2Vfcm91dGUsIGFyZywgc2l6ZW9mKHN0cnVjdCByb3NlX3JvdXRlX3N0cnVjdCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICgoZGV2ID0gcm9zZV9heDI1X2Rldl9nZXQocm9zZV9yb3V0ZS5kZXZpY2UpKSA9PSBOVUxMKQorCQlpZiAoKGRldiA9IHJvc2VfYXgyNV9kZXZfZmluZChyb3NlX3JvdXRlLmRldmljZSkpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHJvc2VfZGV2X2V4aXN0cygmcm9zZV9yb3V0ZS5hZGRyZXNzKSkgeyAvKiBDYW4ndCBhZGQgcm91dGVzIHRvIG91cnNlbGYgKi8KLQkJCWRldl9wdXQoZGV2KTsKKwkJaWYgKHJvc2VfZGV2X2V4aXN0cygmcm9zZV9yb3V0ZS5hZGRyZXNzKSkgLyogQ2FuJ3QgYWRkIHJvdXRlcyB0byBvdXJzZWxmICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCQlpZiAocm9zZV9yb3V0ZS5tYXNrID4gMTApIC8qIE1hc2sgY2FuJ3QgYmUgbW9yZSB0aGFuIDEwIGRpZ2l0cyAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChyb3NlX3JvdXRlLm5kaWdpcyA+IEFYMjVfTUFYX0RJR0lTKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWVyciA9IHJvc2VfYWRkX25vZGUoJnJvc2Vfcm91dGUsIGRldik7Ci0JCWRldl9wdXQoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAogCWNhc2UgU0lPQ0RFTFJUOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvc2Vfcm91dGUsIGFyZywgc2l6ZW9mKHN0cnVjdCByb3NlX3JvdXRlX3N0cnVjdCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICgoZGV2ID0gcm9zZV9heDI1X2Rldl9nZXQocm9zZV9yb3V0ZS5kZXZpY2UpKSA9PSBOVUxMKQorCQlpZiAoKGRldiA9IHJvc2VfYXgyNV9kZXZfZmluZChyb3NlX3JvdXRlLmRldmljZSkpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZXJyID0gcm9zZV9kZWxfbm9kZSgmcm9zZV9yb3V0ZSwgZGV2KTsKLQkJZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gZXJyOwogCiAJY2FzZSBTSU9DUlNDTFJSVDoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCA5NmMwZWQxLi42YjAzNTlhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC0zNCw3ICszNCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcGVkaXRfcG9saWN5W1RDQV9QRURJVF9NQVggKyAxXSA9IHsKLQlbVENBX1BFRElUX1BBUk1TXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNmX3BlZGl0KSB9LAorCVtUQ0FfUEVESVRfUEFSTVNdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19wZWRpdCkgfSwKIH07CiAKIHN0YXRpYyBpbnQgdGNmX3BlZGl0X2luaXQoc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3QgbmxhdHRyICplc3QsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCA2YTUzNjk0Li43Y2Y2YzBmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCXRjbSA9IE5MTVNHX0RBVEEobmxoKTsKIAl0Y20tPnRjbV9mYW1pbHkgPSBBRl9VTlNQRUM7CiAJdGNtLT50Y21fX3BhZDEgPSAwOwotCXRjbS0+dGNtX19wYWQxID0gMDsKKwl0Y20tPnRjbV9fcGFkMiA9IDA7CiAJdGNtLT50Y21faWZpbmRleCA9IHFkaXNjX2Rldih0cC0+cSktPmlmaW5kZXg7CiAJdGNtLT50Y21fcGFyZW50ID0gdHAtPmNsYXNzaWQ7CiAJdGNtLT50Y21faW5mbyA9IFRDX0hfTUFLRSh0cC0+cHJpbywgdHAtPnByb3RvY29sKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggODQ1MDk2MC4uN2VlZDc3YSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTE0ODUsMTUgKzE0ODUsMTMgQEAKICAqIGxvY2FsIGVuZHBvaW50IGFuZCB0aGUgcmVtb3RlIHBlZXIuCiAgKi8KIGludCBzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9lcChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkgICAgIGdmcF90IGdmcCkKKwkJCQkgICAgIHNjdHBfc2NvcGVfdCBzY29wZSwgZ2ZwX3QgZ2ZwKQogewotCXNjdHBfc2NvcGVfdCBzY29wZTsKIAlpbnQgZmxhZ3M7CiAKIAkvKiBVc2Ugc2NvcGluZyBydWxlcyB0byBkZXRlcm1pbmUgdGhlIHN1YnNldCBvZiBhZGRyZXNzZXMgZnJvbQogCSAqIHRoZSBlbmRwb2ludC4KIAkgKi8KLQlzY29wZSA9IHNjdHBfc2NvcGUoJmFzb2MtPnBlZXIuYWN0aXZlX3BhdGgtPmlwYWRkcik7CiAJZmxhZ3MgPSAoUEZfSU5FVDYgPT0gYXNvYy0+YmFzZS5zay0+c2tfZmFtaWx5KSA/IFNDVFBfQUREUjZfQUxMT1dFRCA6IDA7CiAJaWYgKGFzb2MtPnBlZXIuaXB2NF9hZGRyZXNzKQogCQlmbGFncyB8PSBTQ1RQX0FERFI0X1BFRVJTVVBQOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggYzlmMjBlMi4uMjNlNWU5NyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC00MjMsMTYgKzQyMyw2IEBACiAJCWlmICgocmVhc29uID09IFNDVFBfUlRYUl9GQVNUX1JUWCAgJiYKIAkJCSAgICAoY2h1bmstPmZhc3RfcmV0cmFuc21pdCA9PSBTQ1RQX05FRURfRlJUWCkpIHx8CiAJCSAgICAocmVhc29uICE9IFNDVFBfUlRYUl9GQVNUX1JUWCAgJiYgIWNodW5rLT50c25fZ2FwX2Fja2VkKSkgewotCQkJLyogSWYgdGhpcyBjaHVuayB3YXMgc2VudCBsZXNzIHRoZW4gMSBydG8gYWdvLCBkbyBub3QKLQkJCSAqIHJldHJhbnNtaXQgdGhpcyBjaHVuaywgYnV0IGdpdmUgdGhlIHBlZXIgdGltZQotCQkJICogdG8gYWNrbm93bGVnZSBpdC4gIERvIHRoaXMgb25seSB3aGVuCi0JCQkgKiByZXRyYW5zbWl0dGluZyBkdWUgdG8gVDMgdGltZW91dC4KLQkJCSAqLwotCQkJaWYgKHJlYXNvbiA9PSBTQ1RQX1JUWFJfVDNfUlRYICYmCi0JCQkgICAgdGltZV9iZWZvcmUoamlmZmllcywgY2h1bmstPnNlbnRfYXQgKwotCQkJCQkJIHRyYW5zcG9ydC0+bGFzdF9ydG8pKQotCQkJCWNvbnRpbnVlOwotCiAJCQkvKiBSRkMgMjk2MCA2LjIuMSBQcm9jZXNzaW5nIGEgUmVjZWl2ZWQgU0FDSwogCQkJICoKIAkJCSAqIEMpIEFueSB0aW1lIGEgREFUQSBjaHVuayBpcyBtYXJrZWQgZm9yCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggODY3NGQ0OS4uZWZhNTE2YiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNDgwLDcgKzQ4MCw2IEBACiAJICogdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGFuIG91dHN0YW5kaW5nIEhCLgogCSAqLwogCWlmICghaXNfaGIgfHwgdHJhbnNwb3J0LT5oYl9zZW50KSB7Ci0JCXRyYW5zcG9ydC0+bGFzdF9ydG8gPSB0cmFuc3BvcnQtPnJ0bzsKIAkJdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCBjOGZhZTE5Li5kNGRmNDUwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtMzg0LDYgKzM4NCwxMSBAQAogCWlmICghbmV3X2Fzb2MpCiAJCWdvdG8gbm9tZW07CiAKKwlpZiAoc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAobmV3X2Fzb2MsCisJCQkJCSAgICAgc2N0cF9zY29wZShzY3RwX3NvdXJjZShjaHVuaykpLAorCQkJCQkgICAgIEdGUF9BVE9NSUMpIDwgMCkKKwkJZ290byBub21lbV9pbml0OworCiAJLyogVGhlIGNhbGwsIHNjdHBfcHJvY2Vzc19pbml0KCksIGNhbiBmYWlsIG9uIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KIAlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAogCQkJICAgICAgIHNjdHBfc291cmNlKGNodW5rKSwKQEAgLTQwMSw5ICs0MDYsNiBAQAogCQlsZW4gPSBudG9ocyhlcnJfY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSAtCiAJCQlzaXplb2Yoc2N0cF9jaHVua2hkcl90KTsKIAotCWlmIChzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9lcChuZXdfYXNvYywgR0ZQX0FUT01JQykgPCAwKQotCQlnb3RvIG5vbWVtX2luaXQ7Ci0KIAlyZXBsID0gc2N0cF9tYWtlX2luaXRfYWNrKG5ld19hc29jLCBjaHVuaywgR0ZQX0FUT01JQywgbGVuKTsKIAlpZiAoIXJlcGwpCiAJCWdvdG8gbm9tZW1faW5pdDsKQEAgLTE0NTIsNiArMTQ1NCwxMCBAQAogCWlmICghbmV3X2Fzb2MpCiAJCWdvdG8gbm9tZW07CiAKKwlpZiAoc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAobmV3X2Fzb2MsCisJCQkJc2N0cF9zY29wZShzY3RwX3NvdXJjZShjaHVuaykpLCBHRlBfQVRPTUlDKSA8IDApCisJCWdvdG8gbm9tZW07CisKIAkvKiBJbiB0aGUgb3V0Ym91bmQgSU5JVCBBQ0sgdGhlIGVuZHBvaW50IE1VU1QgY29weSBpdHMgY3VycmVudAogCSAqIFZlcmlmaWNhdGlvbiBUYWcgYW5kIFBlZXJzIFZlcmlmaWNhdGlvbiB0YWcgaW50byBhIHJlc2VydmVkCiAJICogcGxhY2UgKGxvY2FsIHRpZS10YWcgYW5kIHBlciB0aWUtdGFnKSB3aXRoaW4gdGhlIHN0YXRlIGNvb2tpZS4KQEAgLTE0ODgsOSArMTQ5NCw2IEBACiAJCQlzaXplb2Yoc2N0cF9jaHVua2hkcl90KTsKIAl9CiAKLQlpZiAoc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAobmV3X2Fzb2MsIEdGUF9BVE9NSUMpIDwgMCkKLQkJZ290byBub21lbTsKLQogCXJlcGwgPSBzY3RwX21ha2VfaW5pdF9hY2sobmV3X2Fzb2MsIGNodW5rLCBHRlBfQVRPTUlDLCBsZW4pOwogCWlmICghcmVwbCkKIAkJZ290byBub21lbTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggYzhkMDU3NS4uM2E5NWZjYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTEwODAsNiArMTA4MCwxMyBAQAogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KKworCQkJZXJyID0gc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAoYXNvYywgc2NvcGUsCisJCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisKIAkJfQogCiAJCS8qIFByaW1lIHRoZSBwZWVyJ3MgdHJhbnNwb3J0IHN0cnVjdHVyZXMuICAqLwpAQCAtMTA5NSwxMSArMTEwMiw2IEBACiAJCXdhbGtfc2l6ZSArPSBhZi0+c29ja2FkZHJfbGVuOwogCX0KIAotCWVyciA9IHNjdHBfYXNzb2Nfc2V0X2JpbmRfYWRkcl9mcm9tX2VwKGFzb2MsIEdGUF9LRVJORUwpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCiAJLyogSW4gY2FzZSB0aGUgdXNlciBvZiBzY3RwX2Nvbm5lY3R4KCkgd2FudHMgYW4gYXNzb2NpYXRpb24KIAkgKiBpZCBiYWNrLCBhc3NpZ24gb25lIG5vdy4KIAkgKi8KQEAgLTEyNzQsMjIgKzEyNzYsMzAgQEAKIH0KIAogLyoKLSAqIE5ldyAoaG9wZWZ1bGx5IGZpbmFsKSBpbnRlcmZhY2UgZm9yIHRoZSBBUEkuICBUaGUgb3B0aW9uIGJ1ZmZlciBpcyB1c2VkCi0gKiBib3RoIGZvciB0aGUgcmV0dXJuZWQgYXNzb2NpYXRpb24gaWQgYW5kIHRoZSBhZGRyZXNzZXMuCisgKiBOZXcgKGhvcGVmdWxseSBmaW5hbCkgaW50ZXJmYWNlIGZvciB0aGUgQVBJLgorICogV2UgdXNlIHRoZSBzY3RwX2dldGFkZHJzX29sZCBzdHJ1Y3R1cmUgc28gdGhhdCB1c2Utc3BhY2UgbGlicmFyeQorICogY2FuIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucy4gICBUaGUgb25seSBkZWZmZXJlbnQgcGFydAorICogaXMgdGhhdCB3ZSBzdG9yZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgYWRkcmVzcyBidWZmZXIgaW50byB0aGUKKyAqIGFkZHJzX251bSBzdHJ1Y3R1cmUgbWVtYmVyLiAgVGhhdCB3YXkgd2UgY2FuIHJlLXVzZSB0aGUgZXhpc3RpbmcKKyAqIGNvZGUuCiAgKi8KIFNDVFBfU1RBVElDIGludCBzY3RwX2dldHNvY2tvcHRfY29ubmVjdHgzKHN0cnVjdCBzb2NrKiBzaywgaW50IGxlbiwKIAkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwKIAkJCQkJaW50IF9fdXNlciAqb3B0bGVuKQogeworCXN0cnVjdCBzY3RwX2dldGFkZHJzX29sZCBwYXJhbTsKIAlzY3RwX2Fzc29jX3QgYXNzb2NfaWQgPSAwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGxlbiA8IHNpemVvZihhc3NvY19pZCkpCisJaWYgKGxlbiA8IHNpemVvZihwYXJhbSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbSwgb3B0dmFsLCBzaXplb2YocGFyYW0pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAllcnIgPSBfX3NjdHBfc2V0c29ja29wdF9jb25uZWN0eChzaywKLQkJCShzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICopKG9wdHZhbCArIHNpemVvZihhc3NvY19pZCkpLAotCQkJbGVuIC0gc2l6ZW9mKGFzc29jX2lkKSwgJmFzc29jX2lkKTsKKwkJCShzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICopcGFyYW0uYWRkcnMsCisJCQlwYXJhbS5hZGRyX251bSwgJmFzc29jX2lkKTsKIAogCWlmIChlcnIgPT0gMCB8fCBlcnIgPT0gLUVJTlBST0dSRVNTKSB7CiAJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmYXNzb2NfaWQsIHNpemVvZihhc3NvY19pZCkpKQpAQCAtMTY4OSw2ICsxNjk5LDExIEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJYXNvYyA9IG5ld19hc29jOworCQllcnIgPSBzY3RwX2Fzc29jX3NldF9iaW5kX2FkZHJfZnJvbV9lcChhc29jLCBzY29wZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQogCiAJCS8qIElmIHRoZSBTQ1RQX0lOSVQgYW5jaWxsYXJ5IGRhdGEgaXMgc3BlY2lmaWVkLCBzZXQgYWxsCiAJCSAqIHRoZSBhc3NvY2lhdGlvbiBpbml0IHZhbHVlcyBhY2NvcmRpbmdseS4KQEAgLTE3MTgsMTEgKzE3MzMsNiBAQAogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KLQkJZXJyID0gc2N0cF9hc3NvY19zZXRfYmluZF9hZGRyX2Zyb21fZXAoYXNvYywgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQogCX0KIAogCS8qIEFTU0VSVDogd2UgaGF2ZSBhIHZhbGlkIGFzc29jaWF0aW9uIGF0IHRoaXMgcG9pbnQuICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwppbmRleCBjMjU2ZTQ4Li4zN2ExMTg0ZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkgKiBnaXZlbiBkZXN0aW5hdGlvbiB0cmFuc3BvcnQgYWRkcmVzcywgc2V0IFJUTyB0byB0aGUgcHJvdG9jb2wKIAkgKiBwYXJhbWV0ZXIgJ1JUTy5Jbml0aWFsJy4KIAkgKi8KLQlwZWVyLT5sYXN0X3J0byA9IHBlZXItPnJ0byA9IG1zZWNzX3RvX2ppZmZpZXMoc2N0cF9ydG9faW5pdGlhbCk7CisJcGVlci0+cnRvID0gbXNlY3NfdG9famlmZmllcyhzY3RwX3J0b19pbml0aWFsKTsKIAlwZWVyLT5ydHQgPSAwOwogCXBlZXItPnJ0dHZhciA9IDA7CiAJcGVlci0+c3J0dCA9IDA7CkBAIC0zMDgsNyArMzA4LDggQEAKIAkJLyogSW5pdGlhbGl6ZSBzay0+c2tfcmN2X3NhZGRyLCBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZQogCQkgKiBhc3NvY2lhdGlvbidzIGFjdGl2ZSBwYXRoIGZvciBnZXRzb2NrbmFtZSgpLgogCQkgKi8KLQkJaWYgKGFzb2MgJiYgKHRyYW5zcG9ydCA9PSBhc29jLT5wZWVyLmFjdGl2ZV9wYXRoKSkKKwkJaWYgKGFzb2MgJiYgKCFhc29jLT5wZWVyLnByaW1hcnlfcGF0aCB8fAorCQkJCSh0cmFuc3BvcnQgPT0gYXNvYy0+cGVlci5hY3RpdmVfcGF0aCkpKQogCQkJb3B0LT5wZi0+YWYtPnRvX3NrX3NhZGRyKCZ0cmFuc3BvcnQtPnNhZGRyLAogCQkJCQkJIGFzb2MtPmJhc2Uuc2spOwogCX0gZWxzZQpAQCAtMzg1LDcgKzM4Niw2IEBACiAJCXRwLT5ydG8gPSB0cC0+YXNvYy0+cnRvX21heDsKIAogCXRwLT5ydHQgPSBydHQ7Ci0JdHAtPmxhc3RfcnRvID0gdHAtPnJ0bzsKIAogCS8qIFJlc2V0IHJ0b19wZW5kaW5nIHNvIHRoYXQgYSBuZXcgUlRUIG1lYXN1cmVtZW50IGlzIHN0YXJ0ZWQgd2hlbiBhCiAJICogbmV3IGRhdGEgY2h1bmsgaXMgc2VudC4KQEAgLTYwMSw3ICs2MDEsNyBAQAogCSAqLwogCXQtPmN3bmQgPSBtaW4oNCphc29jLT5wYXRobXR1LCBtYXhfdChfX3UzMiwgMiphc29jLT5wYXRobXR1LCA0MzgwKSk7CiAJdC0+c3N0aHJlc2ggPSBhc29jLT5wZWVyLmkuYV9yd25kOwotCXQtPmxhc3RfcnRvID0gdC0+cnRvID0gYXNvYy0+cnRvX2luaXRpYWw7CisJdC0+cnRvID0gYXNvYy0+cnRvX2luaXRpYWw7CiAJdC0+cnR0ID0gMDsKIAl0LT5zcnR0ID0gMDsKIAl0LT5ydHR2YXIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hZGRyLmMgYi9uZXQvc3VucnBjL2FkZHIuYwppbmRleCAyMmU4ZmQ4Li5jNzQ1MGM4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2FkZHIuYworKysgYi9uZXQvc3VucnBjL2FkZHIuYwpAQCAtMzA2LDI0ICszMDYsMjUgQEAKICAqIEBzYXA6IGJ1ZmZlciBpbnRvIHdoaWNoIHRvIHBsYW50IHNvY2tldCBhZGRyZXNzCiAgKiBAc2FsZW46IHNpemUgb2YgYnVmZmVyCiAgKgorICogQHVhZGRyIGRvZXMgbm90IGhhdmUgdG8gYmUgJ1wwJy10ZXJtaW5hdGVkLCBidXQgc3RyaWN0X3N0cnRvdWwoKSBhbmQKKyAqIHJwY19wdG9uKCkgcmVxdWlyZSBwcm9wZXIgc3RyaW5nIHRlcm1pbmF0aW9uIHRvIGJlIHN1Y2Nlc3NmdWwuCisgKgogICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc29ja2V0IGFkZHJlc3MgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlCiAgKiB6ZXJvIGlzIHJldHVybmVkLgogICovCiBzaXplX3QgcnBjX3VhZGRyMnNvY2thZGRyKGNvbnN0IGNoYXIgKnVhZGRyLCBjb25zdCBzaXplX3QgdWFkZHJfbGVuLAogCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgY29uc3Qgc2l6ZV90IHNhbGVuKQogewotCWNoYXIgKmMsIGJ1ZltSUENCSU5EX01BWFVBRERSTEVOXTsKKwljaGFyICpjLCBidWZbUlBDQklORF9NQVhVQUREUkxFTiArIHNpemVvZignXDAnKV07CiAJdW5zaWduZWQgbG9uZyBwb3J0bG8sIHBvcnRoaTsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwogCi0JaWYgKHVhZGRyX2xlbiA+IHNpemVvZihidWYpKQorCWlmICh1YWRkcl9sZW4gPiBSUENCSU5EX01BWFVBRERSTEVOKQogCQlyZXR1cm4gMDsKIAogCW1lbWNweShidWYsIHVhZGRyLCB1YWRkcl9sZW4pOwogCi0JYnVmW3VhZGRyX2xlbl0gPSAnXG4nOwotCWJ1Zlt1YWRkcl9sZW4gKyAxXSA9ICdcMCc7Ci0KKwlidWZbdWFkZHJfbGVuXSA9ICdcMCc7CiAJYyA9IHN0cnJjaHIoYnVmLCAnLicpOwogCWlmICh1bmxpa2VseShjID09IE5VTEwpKQogCQlyZXR1cm4gMDsKQEAgLTMzMiw5ICszMzMsNyBAQAogCWlmICh1bmxpa2VseShwb3J0bG8gPiAyNTUpKQogCQlyZXR1cm4gMDsKIAotCWNbMF0gPSAnXG4nOwotCWNbMV0gPSAnXDAnOwotCisJKmMgPSAnXDAnOwogCWMgPSBzdHJyY2hyKGJ1ZiwgJy4nKTsKIAlpZiAodW5saWtlbHkoYyA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CkBAIC0zNDUsOCArMzQ0LDcgQEAKIAogCXBvcnQgPSAodW5zaWduZWQgc2hvcnQpKChwb3J0aGkgPDwgOCkgfCBwb3J0bG8pOwogCi0JY1swXSA9ICdcMCc7Ci0KKwkqYyA9ICdcMCc7CiAJaWYgKHJwY19wdG9uKGJ1Ziwgc3RybGVuKGJ1ZiksIHNhcCwgc2FsZW4pID09IDApCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IGNjYzVlODMuLjFjMjQ2YTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJcnFzdHAtPnJxX3hwcnRfY3R4dCA9IE5VTEw7CiAKIAkJZHByaW50aygic3ZjOiBzZXJ2aWNlICVwLCByZWxlYXNpbmcgc2tiICVwXG4iLCBycXN0cCwgc2tiKTsKLQkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7CisJCXNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZChzdnNrLT5za19zaywgc2tiKTsKIAl9CiB9CiAKQEAgLTU3OCw3ICs1NzgsNyBAQAogCQkJCSJzdmM6IHJlY2VpdmVkIHVua25vd24gY29udHJvbCBtZXNzYWdlICVkLyVkOyAiCiAJCQkJImRyb3BwaW5nIFJQQyByZXBseSBkYXRhZ3JhbVxuIiwKIAkJCQkJY21oLT5jbXNnX2xldmVsLCBjbWgtPmNtc2dfdHlwZSk7Ci0JCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc3Zzay0+c2tfc2ssIHNrYik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTg4LDE4ICs1ODgsMTggQEAKIAkJaWYgKGNzdW1fcGFydGlhbF9jb3B5X3RvX3hkcigmcnFzdHAtPnJxX2FyZywgc2tiKSkgewogCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQkvKiBjaGVja3N1bSBlcnJvciAqLwotCQkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7CisJCQlza2JfZnJlZV9kYXRhZ3JhbV9sb2NrZWQoc3Zzay0+c2tfc2ssIHNrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7CisJCXNrYl9mcmVlX2RhdGFncmFtX2xvY2tlZChzdnNrLT5za19zaywgc2tiKTsKIAl9IGVsc2UgewogCQkvKiB3ZSBjYW4gdXNlIGl0IGluLXBsYWNlICovCiAJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfYmFzZSA9IHNrYi0+ZGF0YSArCiAJCQlzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gbGVuOwogCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQkJc2tiX2ZyZWVfZGF0YWdyYW1fbG9ja2VkKHN2c2stPnNrX3NrLCBza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnFzdHAtPnJxX3hwcnRfY3R4dCA9IHNrYjsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCA1MWFiNDk3Li5mYzgyMGNkIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMDc0LDYgKzEwNzQsOCBAQAogCWVyciA9IC1FQ09OTlJFRlVTRUQ7CiAJaWYgKG90aGVyLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKQogCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKG90aGVyLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJaWYgKHVuaXhfcmVjdnFfZnVsbChvdGhlcikpIHsKIAkJZXJyID0gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IDJhMzNkOGIuLjY4YjMyMTkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtMzU4LDYgKzM1OCw3IEBACiAJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIAogdm9pZCBjZmc4MDIxMV9jb25uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIGJvb2wgY2ZnODAyMTFfc21lX2ZhaWxlZF9yZWFzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCiAvKiBpbnRlcm5hbCBoZWxwZXJzICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCA3OWQyZWVjLi4wYTZiN2EwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTYyLDYgKzYyLDcgQEAKIAl1OCAqaWUgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7CiAJaW50IGksIGllb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5hc3NvY19yZXNwLnZhcmlhYmxlKTsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MgPSBOVUxMOworCWJvb2wgbmVlZF9jb25uZWN0X3Jlc3VsdCA9IHRydWU7CiAKIAl3ZGV2X2xvY2sod2Rldik7CiAKQEAgLTk0LDYgKzk1LDE0IEBACiAJCX0KIAogCQlXQVJOX09OKCFic3MpOworCX0gZWxzZSBpZiAod2Rldi0+Y29ubikgeworCQljZmc4MDIxMV9zbWVfZmFpbGVkX2Fzc29jKHdkZXYpOworCQluZWVkX2Nvbm5lY3RfcmVzdWx0ID0gZmFsc2U7CisJCS8qCisJCSAqIGRvIG5vdCBjYWxsIGNvbm5lY3RfcmVzdWx0KCkgbm93IGJlY2F1c2UgdGhlCisJCSAqIHNtZSB3aWxsIHNjaGVkdWxlIHdvcmsgdGhhdCBkb2VzIGl0IGxhdGVyLgorCQkgKi8KKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCF3ZGV2LT5jb25uICYmIHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfSURMRSkgewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggZWRkYWIwOS4uY2EzYzkyYSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC00MDI5LDcgKzQwMjksNyBAQAogCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhpbmZvKTsKIAlpZiAoSVNfRVJSKHJkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIocmRldik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9ydG5sOwogCX0KIAogCW5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKHBpZCk7CkBAIC00MDQ5LDYgKzQwNDksNyBAQAogCXB1dF9uZXQobmV0KTsKICBvdXQ6CiAJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7Cisgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NtZS5jIGIvbmV0L3dpcmVsZXNzL3NtZS5jCmluZGV4IDkzYzNlZDMuLjlmMGIyODAgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zbWUuYworKysgYi9uZXQvd2lyZWxlc3Mvc21lLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAkJQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVElORywKIAkJQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVEVfTkVYVCwKIAkJQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVElORywKKwkJQ0ZHODAyMTFfQ09OTl9ERUFVVEhfQVNTT0NfRkFJTCwKIAl9IHN0YXRlOwogCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CiAJdTggKmllOwpAQCAtMTQ4LDYgKzE0OSwxMiBAQAogCQkJCQkgICAgICAgTlVMTCwgMCwKIAkJCQkJICAgICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKIAkJcmV0dXJuIGVycjsKKwljYXNlIENGRzgwMjExX0NPTk5fREVBVVRIX0FTU09DX0ZBSUw6CisJCV9fY2ZnODAyMTFfbWxtZV9kZWF1dGgocmRldiwgd2Rldi0+bmV0ZGV2LCBwYXJhbXMtPmJzc2lkLAorCQkJCSAgICAgICBOVUxMLCAwLAorCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CisJCS8qIHJldHVybiBhbiBlcnJvciBzbyB0aGF0IHdlIGNhbGwgX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgpICovCisJCXJldHVybiAtRUlOVkFMOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE1OCw2ICsxNjUsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsIGNvbm5fd29yayk7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwl1OCBic3NpZF9idWZbRVRIX0FMRU5dLCAqYnNzaWQgPSBOVUxMOwogCiAJcnRubF9sb2NrKCk7CiAJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOwpAQCAtMTczLDEwICsxODEsMTMgQEAKIAkJCXdkZXZfdW5sb2NrKHdkZXYpOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKHdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCkgeworCQkJbWVtY3B5KGJzc2lkX2J1Ziwgd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLCBFVEhfQUxFTik7CisJCQlic3NpZCA9IGJzc2lkX2J1ZjsKKwkJfQogCQlpZiAoY2ZnODAyMTFfY29ubl9kb193b3JrKHdkZXYpKQogCQkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgKLQkJCQkJd2Rldi0+bmV0ZGV2LAotCQkJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQsCisJCQkJCXdkZXYtPm5ldGRldiwgYnNzaWQsCiAJCQkJCU5VTEwsIDAsIE5VTEwsIDAsCiAJCQkJCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCiAJCQkJCWZhbHNlLCBOVUxMKTsKQEAgLTMzNyw2ICszNDgsMTUgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBjZmc4MDIxMV9zbWVfZmFpbGVkX2Fzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fREVBVVRIX0FTU09DX0ZBSUw7CisJc2NoZWR1bGVfd29yaygmcmRldi0+Y29ubl93b3JrKTsKK30KKwogdm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKIAkJCSAgICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKIAkJCSAgICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9LY29uZmlnIGIvc2FtcGxlcy9LY29uZmlnCmluZGV4IGI5MmJkZTMuLmU0YmU4NGEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvS2NvbmZpZworKysgYi9zYW1wbGVzL0tjb25maWcKQEAgLTQwLDUgKzQwLDExIEBACiAJZGVmYXVsdCBtCiAJZGVwZW5kcyBvbiBTQU1QTEVfS1BST0JFUyAmJiBLUkVUUFJPQkVTCiAKK2NvbmZpZyBTQU1QTEVfSFdfQlJFQUtQT0lOVAorCXRyaXN0YXRlICJCdWlsZCBrZXJuZWwgaGFyZHdhcmUgYnJlYWtwb2ludCBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGUgb25seSIKKwlkZXBlbmRzIG9uIEhBVkVfSFdfQlJFQUtQT0lOVCAmJiBtCisJaGVscAorCSAgVGhpcyBidWlsZHMga2VybmVsIGhhcmR3YXJlIGJyZWFrcG9pbnQgZXhhbXBsZSBtb2R1bGVzLgorCiBlbmRpZiAjIFNBTVBMRVMKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NYWtlZmlsZSBiL3NhbXBsZXMvTWFrZWZpbGUKaW5kZXggNDMzNDNhMC4uMGYxNWU2ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZQorKysgYi9zYW1wbGVzL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAogIyBNYWtlZmlsZSBmb3IgTGludXggc2FtcGxlcyBjb2RlCiAKLW9iai0kKENPTkZJR19TQU1QTEVTKQkrPSBrb2JqZWN0LyBrcHJvYmVzLyB0cmFjZXBvaW50cy8gdHJhY2VfZXZlbnRzLworb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IGtvYmplY3QvIGtwcm9iZXMvIHRyYWNlcG9pbnRzLyB0cmFjZV9ldmVudHMvIFwKKwkJCSAgIGh3X2JyZWFrcG9pbnQvCmRpZmYgLS1naXQgYS9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvTWFrZWZpbGUgYi9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1YzMxYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU0FNUExFX0hXX0JSRUFLUE9JTlQpICs9IGRhdGFfYnJlYWtwb2ludC5vCmRpZmYgLS1naXQgYS9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMgYi9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1MjU1MAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9kYXRhX2JyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDg3IEBACisvKgorICogZGF0YV9icmVha3BvaW50LmMgLSBTYW1wbGUgSFcgQnJlYWtwb2ludCBmaWxlIHRvIHdhdGNoIGtlcm5lbCBkYXRhIGFkZHJlc3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIHVzYWdlOiBpbnNtb2QgZGF0YV9icmVha3BvaW50LmtvIGtzeW09PGtzeW1fbmFtZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcGxhY2VzIGEgYnJlYWtwb2ludCBvdmVyIGtzeW1fbmFtZSBrZXJuZWwKKyAqIHZhcmlhYmxlIHVzaW5nIEhhcmR3YXJlIEJyZWFrcG9pbnQgcmVnaXN0ZXIuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgd2hpY2gKKyAqIHByaW50cyBhIGJhY2t0cmFjZSBpcyBpbnZva2VkIGV2ZXJ5dGltZSBhIHdyaXRlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24KKyAqIHRoYXQgdmFyaWFibGUuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDkKKyAqCisgKiBBdXRob3I6IEsuUHJhc2FkIDxwcmFzYWRAbGludXgudm5ldC5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE5lZWRlZCBieSBhbGwgbW9kdWxlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBOZWVkZWQgZm9yIEtFUk5fSU5GTyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIE5lZWRlZCBmb3IgdGhlIG1hY3JvcyAqLworI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgorCitzdHJ1Y3QgcGVyZl9ldmVudCAqKnNhbXBsZV9oYnA7CisKK3N0YXRpYyBjaGFyIGtzeW1fbmFtZVtLU1lNX05BTUVfTEVOXSA9ICJwaWRfbWF4IjsKK21vZHVsZV9wYXJhbV9zdHJpbmcoa3N5bSwga3N5bV9uYW1lLCBLU1lNX05BTUVfTEVOLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moa3N5bSwgIktlcm5lbCBzeW1ib2wgdG8gbW9uaXRvcjsgdGhpcyBtb2R1bGUgd2lsbCByZXBvcnQgYW55IgorCQkJIiB3cml0ZSBvcGVyYXRpb25zIG9uIHRoZSBrZXJuZWwgc3ltYm9sIik7CisKK3N0YXRpYyB2b2lkIHNhbXBsZV9oYnBfaGFuZGxlcihzdHJ1Y3QgcGVyZl9ldmVudCAqdGVtcCwgdm9pZCAqZGF0YSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlcyB2YWx1ZSBpcyBjaGFuZ2VkXG4iLCBrc3ltX25hbWUpOworCWR1bXBfc3RhY2soKTsKKwlwcmludGsoS0VSTl9JTkZPICJEdW1wIHN0YWNrIGZyb20gc2FtcGxlX2hicF9oYW5kbGVyXG4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaHdfYnJlYWtfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCURFRklORV9CUkVBS1BPSU5UX0FUVFIoYXR0cik7CisKKwlhdHRyLmJwX2FkZHIgPSBrYWxsc3ltc19sb29rdXBfbmFtZShrc3ltX25hbWUpOworCWF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKwlhdHRyLmJwX3R5cGUgPSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I7CisKKwlzYW1wbGVfaGJwID0gcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KCZhdHRyLCBzYW1wbGVfaGJwX2hhbmRsZXIpOworCWlmIChJU19FUlIoc2FtcGxlX2hicCkpIHsKKwkJcmV0ID0gUFRSX0VSUihzYW1wbGVfaGJwKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkhXIEJyZWFrcG9pbnQgZm9yICVzIHdyaXRlIGluc3RhbGxlZFxuIiwga3N5bV9uYW1lKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXByaW50ayhLRVJOX0lORk8gIkJyZWFrcG9pbnQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaHdfYnJlYWtfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludChzYW1wbGVfaGJwKTsKKwlwcmludGsoS0VSTl9JTkZPICJIVyBCcmVha3BvaW50IGZvciAlcyB3cml0ZSB1bmluc3RhbGxlZFxuIiwga3N5bV9uYW1lKTsKK30KKworbW9kdWxlX2luaXQoaHdfYnJlYWtfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoaHdfYnJlYWtfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJLLlByYXNhZCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJrc3ltIGJyZWFrcG9pbnQiKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCA4N2JiYjhiLi5iYzQxMTRmIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0yLDcgKzIsNyBAQAogIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCiAjIChjKSAyMDA1LCBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4gKHRoZSB1Z2x5IGJpdCkKICMgKGMpIDIwMDcsMjAwOCwgQW5keSBXaGl0Y3JvZnQgPGFwd0B1ay5pYm0uY29tPiAobmV3IGNvbmRpdGlvbnMsIHRlc3Qgc3VpdGUpCi0jIChjKSAyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisjIChjKSAyMDA4LDIwMDksIEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAKIHVzZSBzdHJpY3Q7CkBAIC0xMCw3ICsxMCw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMjknOworbXkgJFYgPSAnMC4zMCc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTEzMCw3ICsxMzAsMTAgQEAKIAogbXkgJGVtaXR0ZWRfY29ycnVwdCA9IDA7CiAKLW91ciAkSWRlbnQgICAgICAgPSBxcntbQS1aYS16X11bQS1aYS16XGRfXSp9Oworb3VyICRJZGVudAk9IHFyeworCQkJW0EtWmEtel9dW0EtWmEtelxkX10qCisJCQkoPzpccypcI1wjXHMqW0EtWmEtel9dW0EtWmEtelxkX10qKSoKKwkJfXg7CiBvdXIgJFN0b3JhZ2UJPSBxcntleHRlcm58c3RhdGljfGFzbWxpbmthZ2V9Owogb3VyICRTcGFyc2UJPSBxcnsKIAkJCV9fdXNlcnwKQEAgLTk5NywyMyArMTAwMCwyNSBAQAogCiBzdWIgcG9zc2libGUgewogCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOwotCi0JcHJpbnQgIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOwotCWlmICgkcG9zc2libGUgIX4gLyg/OgorCW15ICRub3RQZXJtaXR0ZWQgPSBxcnsoPzoKIAkJXig/OgogCQkJJE1vZGlmaWVyfAogCQkJJFN0b3JhZ2V8CiAJCQkkVHlwZXwKLQkJCURFRklORV9cUyt8CisJCQlERUZJTkVfXFMrCisJCSkkfAorCQleKD86CiAJCQlnb3RvfAogCQkJcmV0dXJufAogCQkJY2FzZXwKIAkJCWVsc2V8CiAJCQlhc218X19hc21fX3wKIAkJCWRvCi0JCSkkfAorCQkpKD86XHN8JCl8CiAJCV4oPzp0eXBlZGVmfHN0cnVjdHxlbnVtKVxiCi0JICAgICkveCkgeworCSAgICApfXg7CisJd2FybiAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAkbm90UGVybWl0dGVkKSB7CiAJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KIAkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CkBAIC0xMDIyLDggKzEwMjcsMTAgQEAKIAkJfSBlbHNpZiAoJHBvc3NpYmxlID1+IC9ccy8pIHsKIAkJCSRwb3NzaWJsZSA9fiBzL1xzKiRUeXBlXHMqLy9nOwogCQkJZm9yIG15ICRtb2RpZmllciAoc3BsaXQoJyAnLCAkcG9zc2libGUpKSB7Ci0JCQkJd2FybiAiTU9ESUZJRVI6ICRtb2RpZmllciAoJHBvc3NpYmxlKSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlKTsKLQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJaWYgKCRtb2RpZmllciAhfiAkbm90UGVybWl0dGVkKSB7CisJCQkJCXdhcm4gIk1PRElGSUVSOiAkbW9kaWZpZXIgKCRwb3NzaWJsZSkgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSk7CisJCQkJCXB1c2goQG1vZGlmaWVyTGlzdCwgJG1vZGlmaWVyKTsKKwkJCQl9CiAJCQl9CiAKIAkJfSBlbHNlIHsKQEAgLTExMzgsNiArMTE0NSw3IEBACiAJIyBzdXBwcmVzc2lvbiBmbGFncwogCW15ICVzdXBwcmVzc19pZmJyYWNlczsKIAlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKKwlteSAlc3VwcHJlc3NfZXhwb3J0OwogCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KQEAgLTEyMzAsNyArMTIzOCw2IEBACiAJCSRsaW5lbnIrKzsKIAogCQlteSAkcmF3bGluZSA9ICRyYXdsaW5lc1skbGluZW5yIC0gMV07Ci0JCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CiAKICNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCiAJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewpAQCAtMTI0Nyw2ICsxMjU0LDcgQEAKIAogCQkJJXN1cHByZXNzX2lmYnJhY2VzID0gKCk7CiAJCQklc3VwcHJlc3Nfd2hpbGV0cmFpbGVycyA9ICgpOworCQkJJXN1cHByZXNzX2V4cG9ydCA9ICgpOwogCQkJbmV4dDsKIAogIyB0cmFjayB0aGUgbGluZSBudW1iZXIgYXMgd2UgbW92ZSB0aHJvdWdoIHRoZSBodW5rLCBub3RlIHRoYXQKQEAgLTEyNzAsNiArMTI3OCw4IEBACiAJCQkkcmVhbGNudC0tOwogCQl9CiAKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKKwogI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKIAkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JHJlYWxsaW5lOiAiIGlmICgkZW1hY3MgJiYgJGZpbGUpOwogCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokbGluZW5yOiAiIGlmICgkZW1hY3MgJiYgISRmaWxlKTsKQEAgLTE0MjAsMTMgKzE0MzAsMjIgQEAKIAkJfQogCiAjIENoZWNrIGZvciBwb3RlbnRpYWwgJ2JhcmUnIHR5cGVzCi0JCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQsCisJCSAgICAkcmVhbGxpbmVfbmV4dCk7CiAJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgewogCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KIAkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKIAkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOwogCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CiAKKwkJCSMgRmluZCB0aGUgcmVhbCBuZXh0IGxpbmUuCisJCQkkcmVhbGxpbmVfbmV4dCA9ICRsaW5lX25yX25leHQ7CisJCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkJICAgICghZGVmaW5lZCAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSB8fAorCQkJICAgICBzdWJzdHIoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0sICRvZmZfbmV4dCkgPX4gL15ccyokLykpIHsKKwkJCQkkcmVhbGxpbmVfbmV4dCsrOworCQkJfQorCiAJCQlteSAkcyA9ICRzdGF0OwogCQkJJHMgPX4gcy97LiokLy9zOwogCkBAIC0xNjYxLDggKzE2ODAsOCBAQAogCQl9CiAKICMgY2hlY2sgZm9yIGluaXRpYWxpc2F0aW9uIHRvIGFnZ3JlZ2F0ZXMgb3BlbiBicmFjZSBvbiB0aGUgbmV4dCBsaW5lCi0JCWlmICgkcHJldmxpbmUgPX4gLyREZWNsYXJlXHMqJElkZW50XHMqPVxzKiQvICYmCi0JCSAgICAkbGluZSA9fiAvXi5ccyp7LykgeworCQlpZiAoJGxpbmUgPX4gL14uXHMqey8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvKD86XnxbXj1dKT1ccyokLykgewogCQkJRVJST1IoInRoYXQgb3BlbiBicmFjZSB7IHNob3VsZCBiZSBvbiB0aGUgcHJldmlvdXMgbGluZVxuIiAuICRoZXJlcHJldik7CiAJCX0KIApAQCAtMTY4NywyMSArMTcwNiw0MCBAQAogCQkkbGluZSA9fiBzQC8vLipAQDsKIAkJJG9wbGluZSA9fiBzQC8vLipAQDsKIAotI0VYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24gY2xvc2luZyB9LgotCQlpZiAoKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8pIHx8Ci0JCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjIEVYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgdGhpbmcgaXQgaXMgZXhwb3J0aW5nLCBjb25zaWRlcgorIyB0aGUgd2hvbGUgc3RhdGVtZW50LgorI3ByaW50ICJBUFcgPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPlxuIjsKKwkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJICAgIGV4aXN0cyAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSAmJgorCQkgICAgIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gJiYKKwkJICAgICgkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CiAJCQlteSAkbmFtZSA9ICQxOwotCQkJaWYgKCRwcmV2bGluZSAhfiAvKD86Ci0JCQkJXi59fAorCQkJaWYgKCRzdGF0ICF+IC8oPzoKKwkJCQlcbi59XHMqJHwKIAkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAogCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKLQkJCQleLiRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8Ci0JCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKT9ccyooPzo7fD18XFspCisJCQkJXi4oPzokU3RvcmFnZVxzKyk/JFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKKwkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpKlxzKig/Ojt8PXxcW3xcKCkKIAkJCSAgICApL3gpIHsKLQkJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKKyNwcmludCAiRk9PIEE8JGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0+IHN0YXQ8JHN0YXQ+IG5hbWU8JG5hbWU+XG4iOworCQkJCSRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAxOwogCQkJfQogCQl9CisJCWlmICghZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ICYmCisJCSAgICAkcHJldmxpbmUgPX4gL14uXHMqJC8gJiYKKwkJICAgICgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisjcHJpbnQgIkZPTyBCIDwkbGluZXNbJGxpbmVuciAtIDFdPlxuIjsKKwkJCSRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPSAyOworCQl9CisJCWlmIChkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gPT0gMikgeworCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CisJCX0KIAogIyBjaGVjayBmb3IgZXh0ZXJuYWwgaW5pdGlhbGlzZXJzLgogCQlpZiAoJGxpbmUgPX4gL14uJFR5cGVccyokSWRlbnRccyooPzpccyskTW9kaWZpZXIpKlxzKj1ccyooMHxOVUxMfGZhbHNlKVxzKjsvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kYXRhLmMgYi9zY3JpcHRzL2R0Yy9kYXRhLmMKaW5kZXggZGQyZTNkMy4uZmU1NTVlOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvZGF0YS5jCisrKyBiL3NjcmlwdHMvZHRjL2RhdGEuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJcmV0dXJuIGQ7CiB9CiAKLXN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX21hcmtlcnMoc3RydWN0IGRhdGEgZCwgc3RydWN0IG1hcmtlciAqbSkKK3N0YXRpYyBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9tYXJrZXJzKHN0cnVjdCBkYXRhIGQsIHN0cnVjdCBtYXJrZXIgKm0pCiB7CiAJc3RydWN0IG1hcmtlciAqKm1wID0gJmQubWFya2VyczsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmwgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubAppbmRleCA0NGRiZmQzLi5hNjI3YmJlIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubAorKysgYi9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubApAQCAtMTgsNyArMTgsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBCiAgKi8KIAotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IHl5bGluZW5vCislb3B0aW9uIG5veXl3cmFwIG5vaW5wdXQgbm91bnB1dCB5eWxpbmVubwogCiAleCBJTkNMVURFCiAleCBCWVRFU1RSSU5HCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZCBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCmluZGV4IGFjMzkyY2IuLmUyN2NjNjMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCisrKyBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM0CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQogI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKICNkZWZpbmUgRkxFWF9CRVRBCiAjZW5kaWYKQEAgLTU0LDcgKzU0LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KIAogLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLwogI2lmbmRlZiBJTlQ4X01JTgpAQCAtODUsNiArODQsOCBAQAogI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKICNlbmRpZgogCisjZW5kaWYgLyogISBDOTkgKi8KKwogI2VuZGlmIC8qICEgRkxFWElOVF9IICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMTQxLDcgKzE0MiwxNSBAQAogCiAvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwogI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQogI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KQEAgLTE5MiwxMyArMjAxLDYgQEAKIAogI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKIAotLyogVGhlIGZvbGxvd2luZyBpcyBiZWNhdXNlIHdlIGNhbm5vdCBwb3J0YWJseSBnZXQgb3VyIGhhbmRzIG9uIHNpemVfdAotICogKHdpdGhvdXQgYXV0b2NvbmYncyBoZWxwLCB3aGljaCBpc24ndCBhdmFpbGFibGUgYmVjYXVzZSB3ZSB3YW50Ci0gKiBmbGV4LWdlbmVyYXRlZCBzY2FubmVycyB0byBjb21waWxlIG9uIHRoZWlyIG93bikuCi0gKiBHaXZlbiB0aGF0IHRoZSBzdGFuZGFyZCBoYXMgZGVjcmVlZCB0aGF0IHNpemVfdCBleGlzdHMgc2luY2UgMTk4OSwKLSAqIEkgZ3Vlc3Mgd2UgY2FuIGFmZm9yZCB0byBkZXBlbmQgb24gaXQuIE1hbm9qLgotICovCi0KICNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKICNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKQEAgLTYwNCw2ICs2MDYsNyBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0EKICAqLworI2RlZmluZSBZWV9OT19JTlBVVCAxCiAKIAogCkBAIC02MzQsNyArNjM3LDcgQEAKIAogc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKIHN0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCk7Ci0jbGluZSA2MzggImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDY0MSAiZHRjLWxleGVyLmxleC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAogI2RlZmluZSBJTkNMVURFIDEKQEAgLTY1Niw2ICs2NTksMzUgQEAKIAogc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKIAorLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHl5bGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lkIHl5c2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK2ludCB5eWdldF9sZW5nICh2b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAodm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCiAvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgogICogc2VjdGlvbiAxLgogICovCkBAIC02ODgsNyArNzIwLDEyIEBACiAKIC8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KICNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrICovCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgMTYzODQKKyNlbHNlCiAjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmIC8qIF9faWE2NF9fICovCiAjZW5kaWYKIAogLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KQEAgLTY5Niw3ICs3MzMsNyBAQAogLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCiAgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgogICovCi0jZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkpIHt9IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLApAQCAtNzA3LDcgKzc0NCw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJaW50IG47IFwKKwkJc2l6ZV90IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtNzkxLDcgKzgyOCw3IEBACiAgICAgCiAjbGluZSA2NCAiZHRjLWxleGVyLmwiCiAKLSNsaW5lIDc5NSAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgODMyICJkdGMtbGV4ZXIubGV4LmMiCiAKIAlpZiAoICEoeXlfaW5pdCkgKQogCQl7CkBAIC0xMTE2LDcgKzExNTMsNyBAQAogI2xpbmUgMjIyICJkdGMtbGV4ZXIubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDExMjAgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDExNTcgImR0Yy1sZXhlci5sZXguYyIKIAogCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKIAkJewpAQCAtMTg0MCw4ICsxODc3LDggQEAKIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCiAgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCiAgKiAKICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMgYi9zY3JpcHRzL2R0Yy9saWJmZHQvZmR0X3JvLmMKaW5kZXggZmJiYmE0NC4uMjJlNjkyOSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvbGliZmR0L2ZkdF9yby5jCisrKyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJCQkJCSAgICAgJnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSk7CiB9CiAKLWludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQogewogCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKIAljb25zdCBjaGFyICpwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jIGIvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jCmluZGV4IGViZWI2ZWIuLjE1MjFmZjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYworKysgYi9zY3JpcHRzL2R0Yy90cmVlc291cmNlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkJZnB1dGMoJ1x0JywgZik7CiB9CiAKLWludCBpc3N0cmluZyhjaGFyIGMpCitzdGF0aWMgaW50IGlzc3RyaW5nKGNoYXIgYykKIHsKIAlyZXR1cm4gKGlzcHJpbnQoYykKIAkJfHwgKGMgPT0gJ1wwJykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKaW5kZXggOTcxZTAxMS4uMjg3NDY3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKQEAgLTEsNCArMSw0IEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4yICovCisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCiAvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1MIEFOU0ktQyAtYSAtQyAtRSAtZyAtSCBpc19yZXNlcnZlZF9oYXNoIC1rICcxLDMsJCcgLU4gaXNfcmVzZXJ2ZWRfd29yZCAtcCAtdCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmICAqLwogCiAjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCkBAIC0zMCw3ICszMCw5IEBACiAKICNsaW5lIDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAKLSNsaW5lIDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCitzdHJ1Y3QgcmVzd29yZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCAqaXNfcmVzZXJ2ZWRfd29yZChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworI2xpbmUgNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKIHN0cnVjdCByZXN3b3JkIHsgY29uc3QgY2hhciAqbmFtZTsgaW50IHRva2VuOyB9OwogLyogbWF4aW11bSBrZXkgcmFuZ2UgPSA2MiwgZHVwbGljYXRlcyA9IDAgKi8KIApAQCAtNzgsNiArODAsOSBAQAogCiAjaWZkZWYgX19HTlVDX18KIF9faW5saW5lCisjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjZW5kaWYKICNlbmRpZgogY29uc3Qgc3RydWN0IHJlc3dvcmQgKgogaXNfcmVzZXJ2ZWRfd29yZCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtOTQsMTA1ICs5OSwxMDUgQEAKICAgc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkIHdvcmRsaXN0W10gPQogICAgIHsKICAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0jbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbSIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXNtX18iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX190eXBlb2ZfXyIsIFRZUEVPRl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0IiwgQ09OU1RfS0VZV30sCi0jbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKICNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAorI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fY29uc3RfXyIsIENPTlNUX0tFWVd9LAotI2xpbmUgMTggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAogI2xpbmUgMjAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCisjbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAorI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotI2xpbmUgMzIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiY2hhciIsIENIQVJfS0VZV30sCi0jbGluZSAzMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic3RydWN0IiwgU1RSVUNUX0tFWVd9LAotI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19yZXN0cmljdF9fIiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgMTAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hdHRyaWJ1dGUiLCBBVFRSSUJVVEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19leHRlbnNpb25fXyIsIEVYVEVOU0lPTl9LRVlXfSwKLSNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImVudW0iLCBFTlVNX0tFWVd9LAotI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX192b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZXh0ZXJuIiwgRVhURVJOX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fc2lnbmVkIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRSIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZW9mIiwgVFlQRU9GX0tFWVd9LAotI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZWRlZiIsIFRZUEVERUZfS0VZV30sCi0jbGluZSAxNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDMxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImF1dG8iLCBBVVRPX0tFWVd9LAotI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ1bnNpZ25lZCIsIFVOU0lHTkVEX0tFWVd9LAotI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCi0jbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJzaG9ydCIsIFNIT1JUX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfSwKLSNsaW5lIDM0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImRvdWJsZSIsIERPVUJMRV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5lIDQxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InJlZ2lzdGVyIiwgUkVHSVNURVJfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX0Jvb2wiLCBCT09MX0tFWVd9LAotI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic2lnbmVkIiwgU0lHTkVEX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDQwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImxvbmciLCBMT05HX0tFWVd9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKaW5kZXggNWVmMzczMy4uOGZlOTc3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCkBAIC0xLDQgKzEsNiBAQAogJXsKK3N0cnVjdCByZXN3b3JkOworc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkICppc19yZXNlcnZlZF93b3JkKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CiAlfQogc3RydWN0IHJlc3dvcmQgeyBjb25zdCBjaGFyICpuYW1lOyBpbnQgdG9rZW47IH0KICUlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCBjZGI0NGI2Li44MWE2N2E0IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTUsMTUgKzUsMTUgQEAKICMgUHJpbnQgc2VsZWN0ZWQgTUFJTlRBSU5FUlMgaW5mb3JtYXRpb24gZm9yCiAjIHRoZSBmaWxlcyBtb2RpZmllZCBpbiBhIHBhdGNoIG9yIGZvciBhIGZpbGUKICMKLSMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIDxwYXRjaD4KLSMgICAgICAgIHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIC1mIDxmaWxlPgorIyB1c2FnZTogcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSA8cGF0Y2g+CisjICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwgW09QVElPTlNdIC1mIDxmaWxlPgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKIAogbXkgJFAgPSAkMDsKLW15ICRWID0gJzAuMjAnOworbXkgJFYgPSAnMC4yMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTM3LDYgKzM3LDcgQEAKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKK215ICRrZXl3b3JkcyA9IDE7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CiBteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CkBAIC04NCw2ICs4NSw3IEBACiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEzMiw2ICsxMzQsOCBAQAogIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3IgdHlwZS92YWx1ZSBwYWlycwogCiBteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNoOworCiBvcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7CiB3aGlsZSAoPE1BSU5UPikgewogICAgIG15ICRsaW5lID0gJF87CkBAIC0xNDksNiArMTUzLDggQEAKIAkgICAgaWYgKCgtZCAkdmFsdWUpKSB7CiAJCSR2YWx1ZSA9fiBzQChbXi9dKSRAJDEvQDsKIAkgICAgfQorCX0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCSAgICAka2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOwogCX0KIAlwdXNoKEB0eXBldmFsdWUsICIkdHlwZTokdmFsdWUiKTsKICAgICB9IGVsc2lmICghL14oXHMpKiQvKSB7CkBAIC0xODgsNiArMTk0LDcgQEAKIAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3JkX3R2aSA9ICgpOwogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewogICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKQEAgLTE5OCwxMSArMjA1LDI0IEBACiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgeworCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CisJICAgIHdoaWxlICg8RklMRT4pIHsKKwkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgY2xvc2UoRklMRSk7CisJfQogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOwogCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CisJICAgIG15ICRwYXRjaF9saW5lID0gJF87CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKQEAgLTIxMyw2ICsyMzMsMTIgQEAKIAkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKIAkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CiAJCX0KKwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXlsrLV0uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yODYsNiArMzEyLDEzIEBACiAgICAgfQogfQogCitpZiAoJGtleXdvcmRzKSB7CisgICAgQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5d29yZF90dmkpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKyAgICB9Cit9CisKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKQEAgLTM4NCw2ICs0MTcsNyBAQAogCiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIApAQCAtNDg2LDcgKzUyMCw2IEBACiB9CiAKIHN1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKLQogICAgIG15ICgkaW5kZXgpID0gQF87CiAKICAgICB3aGlsZSAoJGluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDZkNjljN2MuLjgwNTk5ZTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDcgQEAKIAkkPCAtcyAkKEtjb25maWcpCiAKIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKIAkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCkBAIC00NCw3ICs0NCw3IEBACiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKIGxvY2FseWVzY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZwogCSQoUSlzZWQgLWkgcy89bS89eS8gLnRtcC5jb25maWcKIAkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCVwKIAkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQlcCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCmluZGV4IGRjM2U4MTguLmZkYzcxMTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCkBAIC0xNjAsNyArMTYwLDE1IEBACiAKIC8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCiAjaWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNlCiAjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgpAQCAtODAyLDcgKzgxMCw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTgxMCw3ICs4MTgsNyBAQAogCSp0ZXh0ID0gMDsKIH0KIAotdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CiAJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgewpAQCAtODI0LDcgKzgzMiw3IEBACiAJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAotdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCXRleHQgPSBtYWxsb2Moc2l6ZSArIDEpOwogCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOwpAQCAtOTE0LDcgKzkyMiwxMiBAQAogCiAvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCiAjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQogI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLwogI2VuZGlmCiAKIC8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCkBAIC05MjIsNyArOTM1LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggemNvbmZ0ZXh0LCB6Y29uZmxlbmcsIDEsIHpjb25mb3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHpjb25mdGV4dCwgemNvbmZsZW5nLCAxLCB6Y29uZm91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTIwNjAsOCArMjA3Myw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCmluZGV4IDk1OTg0ZGIuLjBkODAwODIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAorKysgYi9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKQEAgLTQzLDcgKzQzLDYgQEAKICMgICAgbWFrZSBvbGRjb25maWcKICMKIG15ICRjb25maWcgPSAiLmNvbmZpZyI7Ci1teSAkbGludXhwYXRoID0gIi4iOwogCiBteSAkdW5hbWUgPSBgdW5hbWUgLXJgOwogY2hvbXAgJHVuYW1lOwpAQCAtMTExLDcgKzExMCwxMSBAQAogCiBmaW5kX2NvbmZpZzsKIAotbXkgQG1ha2VmaWxlcyA9IGBmaW5kICRsaW51eHBhdGggLW5hbWUgTWFrZWZpbGVgOworIyBHZXQgdGhlIGJ1aWxkIHNvdXJjZSBhbmQgdG9wIGxldmVsIEtjb25maWcgZmlsZSAocGFzc2VkIGluKQorbXkgJGtzb3VyY2UgPSAkQVJHVlswXTsKK215ICRrY29uZmlnID0gJEFSR1ZbMV07CisKK215IEBtYWtlZmlsZXMgPSBgZmluZCAka3NvdXJjZSAtbmFtZSBNYWtlZmlsZWA7CiBteSAlZGVwZW5kczsKIG15ICVzZWxlY3RzOwogbXkgJXByb21wdHM7CkBAIC0xMTksOSArMTIyLDYgQEAKIG15ICR2YXI7CiBteSAkY29udCA9IDA7CiAKLSMgR2V0IHRoZSB0b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNzZWQgaW4pCi1teSAka2NvbmZpZyA9ICRBUkdWWzBdOwotCiAjIHByZXZlbnQgcmVjdXJzaW9uCiBteSAlcmVhZF9rY29uZmlnczsKIApAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgbXkgJGNvbmZpZzsKICAgICBteSBAa2NvbmZpZ3M7CiAKLSAgICBvcGVuKEtJTiwgJGtjb25maWcpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAka2NvbmZpZyI7CisgICAgb3BlbihLSU4sICIka3NvdXJjZS8ka2NvbmZpZyIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAka2NvbmZpZyI7CiAgICAgd2hpbGUgKDxLSU4+KSB7CiAJY2hvbXA7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgppbmRleCAyNWVmNWQwLi5kOGJjNzQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCkBAIC05LDYgKzksOCBAQAogCiBzdHJ1Y3Qga2NvbmZfaWQ7CiAKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworCiAlJQogbWFpbm1lbnUsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkQKIG1lbnUsCQlUX01FTlUsCQlURl9DT01NQU5ECmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKaW5kZXggNWM3M2Q1MTMzLi5jMTc0OGZhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkCkBAIC0zMCw2ICszMCw4IEBACiAjZW5kaWYKIAogc3RydWN0IGtjb25mX2lkOworCitzdGF0aWMgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9sb29rdXAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKIC8qIG1heGltdW0ga2V5IHJhbmdlID0gNDcsIGR1cGxpY2F0ZXMgPSAwICovCiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmwgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubAppbmRleCAyMWZmNjljLi5kOGY3MjM2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYubAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubApAQCAtMzksNyArMzksNyBAQAogc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKLXZvaWQgbmV3X3N0cmluZyh2b2lkKQorc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CkBAIC00Nyw3ICs0Nyw3IEBACiAJKnRleHQgPSAwOwogfQogCi12b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKIHsKIAlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXplICsgMTsKIAlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7CkBAIC02MSw3ICs2MSw3IEBACiAJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAotdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCXRleHQgPSBtYWxsb2Moc2l6ZSArIDEpOwogCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAppbmRleCA5NWRmODMzLi42ZTlkY2Q1IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZApAQCAtMSwyNCArMSwyMyBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMS4gICovCiAKIC8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICAKKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgogICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCisgICAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAogLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCiAgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawpAQCAtMjksNyArMjgsNyBAQAogICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCiAgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KKyAgIAogICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgogICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwogCkBAIC00Nyw3ICs0Niw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjEiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTU1LDE3ICs1NCw4NCBAQAogLyogUHVyZSBwYXJzZXJzLiAgKi8KICNkZWZpbmUgWVlQVVJFIDAKIAorLyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKwogLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KICNkZWZpbmUgWVlMU1BfTkVFREVEIDAKIAogLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNkZWZpbmUgeXlwYXJzZSB6Y29uZnBhcnNlCi0jZGVmaW5lIHl5bGV4ICAgemNvbmZsZXgKLSNkZWZpbmUgeXllcnJvciB6Y29uZmVycm9yCi0jZGVmaW5lIHl5bHZhbCAgemNvbmZsdmFsCi0jZGVmaW5lIHl5Y2hhciAgemNvbmZjaGFyCi0jZGVmaW5lIHl5ZGVidWcgemNvbmZkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHpjb25mbmVycnMKKyNkZWZpbmUgeXlwYXJzZSAgICAgICAgIHpjb25mcGFyc2UKKyNkZWZpbmUgeXlsZXggICAgICAgICAgIHpjb25mbGV4CisjZGVmaW5lIHl5ZXJyb3IgICAgICAgICB6Y29uZmVycm9yCisjZGVmaW5lIHl5bHZhbCAgICAgICAgICB6Y29uZmx2YWwKKyNkZWZpbmUgeXljaGFyICAgICAgICAgIHpjb25mY2hhcgorI2RlZmluZSB5eWRlYnVnICAgICAgICAgemNvbmZkZWJ1ZworI2RlZmluZSB5eW5lcnJzICAgICAgICAgemNvbmZuZXJycworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQorCisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitpbnQgY2RlYnVnID0gUFJJTlREOworCitleHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOworc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7CitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKKworc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbMjU3XTsKKworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OworCisjZGVmaW5lIFlZREVCVUcgMAorI2lmIFlZREVCVUcKKyNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFCisjZW5kaWYKKworCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5lIFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZWVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgogCiAKIC8qIFRva2Vucy4gICovCkBAIC0xMDgsMTI5ICsxNzQsMzYgQEAKICAgICAgVF9OT1QgPSAyODkKICAgIH07CiAjZW5kaWYKLS8qIFRva2Vucy4gICovCi0jZGVmaW5lIFRfTUFJTk1FTlUgMjU4Ci0jZGVmaW5lIFRfTUVOVSAyNTkKLSNkZWZpbmUgVF9FTkRNRU5VIDI2MAotI2RlZmluZSBUX1NPVVJDRSAyNjEKLSNkZWZpbmUgVF9DSE9JQ0UgMjYyCi0jZGVmaW5lIFRfRU5EQ0hPSUNFIDI2MwotI2RlZmluZSBUX0NPTU1FTlQgMjY0Ci0jZGVmaW5lIFRfQ09ORklHIDI2NQotI2RlZmluZSBUX01FTlVDT05GSUcgMjY2Ci0jZGVmaW5lIFRfSEVMUCAyNjcKLSNkZWZpbmUgVF9IRUxQVEVYVCAyNjgKLSNkZWZpbmUgVF9JRiAyNjkKLSNkZWZpbmUgVF9FTkRJRiAyNzAKLSNkZWZpbmUgVF9ERVBFTkRTIDI3MQotI2RlZmluZSBUX09QVElPTkFMIDI3MgotI2RlZmluZSBUX1BST01QVCAyNzMKLSNkZWZpbmUgVF9UWVBFIDI3NAotI2RlZmluZSBUX0RFRkFVTFQgMjc1Ci0jZGVmaW5lIFRfU0VMRUNUIDI3NgotI2RlZmluZSBUX1JBTkdFIDI3NwotI2RlZmluZSBUX09QVElPTiAyNzgKLSNkZWZpbmUgVF9PTiAyNzkKLSNkZWZpbmUgVF9XT1JEIDI4MAotI2RlZmluZSBUX1dPUkRfUVVPVEUgMjgxCi0jZGVmaW5lIFRfVU5FUVVBTCAyODIKLSNkZWZpbmUgVF9DTE9TRV9QQVJFTiAyODMKLSNkZWZpbmUgVF9PUEVOX1BBUkVOIDI4NAotI2RlZmluZSBUX0VPTCAyODUKLSNkZWZpbmUgVF9PUiAyODYKLSNkZWZpbmUgVF9BTkQgMjg3Ci0jZGVmaW5lIFRfRVFVQUwgMjg4Ci0jZGVmaW5lIFRfTk9UIDI4OQogCiAKIAotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCi0jaW5jbHVkZSAibGtjLmgiCi0KLSNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCi0KLSNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKLQotI2RlZmluZSBQUklOVEQJCTB4MDAwMQotI2RlZmluZSBERUJVR19QQVJTRQkweDAwMDIKLQotaW50IGNkZWJ1ZyA9IFBSSU5URDsKLQotZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKLXN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOwotc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOwotc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOwotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7Ci0KLXN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoWzI1N107Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKLQotI2RlZmluZSBZWURFQlVHIDAKLSNpZiBZWURFQlVHCi0jZGVmaW5lIFlZRVJST1JfVkVSQk9TRQotI2VuZGlmCi0KLQotLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0KIHsKKworCiAJY2hhciAqc3RyaW5nOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKIAlzdHJ1Y3QgZXhwciAqZXhwcjsKIAlzdHJ1Y3QgbWVudSAqbWVudTsKIAlzdHJ1Y3Qga2NvbmZfaWQgKmlkOwotfQotLyogTGluZSAxODcgb2YgeWFjYy5jLiAgKi8KIAotCVlZU1RZUEU7CisKKworfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICNlbmRpZgogCiAKLQogLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogCiAKLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCisvKiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCisKIAogCiAjaWZkZWYgc2hvcnQKQEAgLTMwNiwxNCArMjc5LDE0IEBACiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIGludAotWVlJRCAoaW50IGkpCitZWUlEIChpbnQgeXlpKQogI2Vsc2UKIHN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7CitZWUlEICh5eWkpCisgICAgaW50IHl5aTsKICNlbmRpZgogewotICByZXR1cm4gaTsKKyAgcmV0dXJuIHl5aTsKIH0KICNlbmRpZgogCkBAIC0zOTQsOSArMzY3LDkgQEAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OworICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKIAogLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KICMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQpAQCAtNDMwLDEyICs0MDMsMTIgQEAKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCiAgICAgZG8JCQkJCQkJCQlcCiAgICAgICB7CQkJCQkJCQkJXAogCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKIAl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCiAJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAogICAgICAgfQkJCQkJCQkJCVwKQEAgLTU1OCwxOCArNTMxLDE4IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAxMDQsICAgMTA0LCAgIDEwNiwgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywKLSAgICAgMTE0LCAgIDExOCwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTI2LAotICAgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMzAsICAgMTMxLCAgIDEzNSwgICAxMzYsICAgMTQyLCAgIDE1MCwgICAxNTYsCi0gICAgIDE2NCwgICAxNzQsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDE5MiwKLSAgICAgMTk4LCAgIDIwOCwgICAyMTQsICAgMjIwLCAgIDIyMywgICAyMjUsICAgMjM2LCAgIDIzNywgICAyNDIsICAgMjUxLAotICAgICAyNTYsICAgMjY0LCAgIDI2NywgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NiwgICAyODIsCi0gICAgIDI5MywgICAyOTksICAgMzA5LCAgIDMxMSwgICAzMTYsICAgMzI0LCAgIDMzMiwgICAzMzUsICAgMzM3LCAgIDMzOCwKLSAgICAgMzM5LCAgIDM0NCwgICAzNTEsICAgMzU2LCAgIDM2NCwgICAzNjcsICAgMzY5LCAgIDM3MCwgICAzNzEsICAgMzc0LAotICAgICAzODIsICAgMzg5LCAgIDM5NiwgICA0MDIsICAgNDA5LCAgIDQxMSwgICA0MTIsICAgNDEzLCAgIDQxNiwgICA0MjQsCi0gICAgIDQyNiwgICA0MzEsICAgNDMyLCAgIDQzNSwgICA0MzYsICAgNDM3LCAgIDQ0MSwgICA0NDIsICAgNDQ1LCAgIDQ0NiwKLSAgICAgNDQ5LCAgIDQ1MCwgICA0NTEsICAgNDUyLCAgIDQ1MywgICA0NTQsICAgNDU1LCAgIDQ1OCwgICA0NTksICAgNDYyLAotICAgICA0NjMKKyAgICAgICAwLCAgIDEwNywgICAxMDcsICAgMTA5LCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAorICAgICAxMTcsICAgMTIxLCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjksCisgICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAxMzQsICAgMTM4LCAgIDEzOSwgICAxNDUsICAgMTUzLCAgIDE1OSwKKyAgICAgMTY3LCAgIDE3NywgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODcsICAgMTk1LAorICAgICAyMDEsICAgMjExLCAgIDIxNywgICAyMjMsICAgMjI2LCAgIDIyOCwgICAyMzksICAgMjQwLCAgIDI0NSwgICAyNTQsCisgICAgIDI1OSwgICAyNjcsICAgMjcwLCAgIDI3MiwgICAyNzMsICAgMjc0LCAgIDI3NSwgICAyNzYsICAgMjc5LCAgIDI4NSwKKyAgICAgMjk2LCAgIDMwMiwgICAzMTIsICAgMzE0LCAgIDMxOSwgICAzMjcsICAgMzM1LCAgIDMzOCwgICAzNDAsICAgMzQxLAorICAgICAzNDIsICAgMzQ3LCAgIDM1NCwgICAzNTksICAgMzY3LCAgIDM3MCwgICAzNzIsICAgMzczLCAgIDM3NCwgICAzNzcsCisgICAgIDM4NSwgICAzOTIsICAgMzk5LCAgIDQwNSwgICA0MTIsICAgNDE0LCAgIDQxNSwgICA0MTYsICAgNDE5LCAgIDQyNywKKyAgICAgNDI5LCAgIDQzNCwgICA0MzUsICAgNDM4LCAgIDQzOSwgICA0NDAsICAgNDQ0LCAgIDQ0NSwgICA0NDgsICAgNDQ5LAorICAgICA0NTIsICAgNDUzLCAgIDQ1NCwgICA0NTUsICAgNDU2LCAgIDQ1NywgICA0NTgsICAgNDYxLCAgIDQ2MiwgICA0NjUsCisgICAgIDQ2NgogfTsKICNlbmRpZgogCkBAIC05ODUsMTcgKzk1OCwyMCBAQAogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCiAgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKLSAgICB5eXR5cGVfaW50MTYgKnRvcDsKK3l5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCisgICAgeXl0eXBlX2ludDE2ICp5eWJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnl5dG9wOwogI2VuZGlmCiB7CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBmb3IgKDsgeXlib3R0b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQogICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKQEAgLTEwMjksMTEgKzEwMDUsMTEgQEAKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAogCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCiAJCSAgICAgICAJCSAgICAgICApOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CiB9CiAKQEAgLTEzNDMsMTAgKzEzMTksOCBAQAogCWJyZWFrOwogICAgIH0KIH0KLQwKIAogLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQogI2lmZGVmIFlZUEFSU0VfUEFSQU0KICNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKIGludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKQEAgLTEzNjIsMTEgKzEzMzYsMTAgQEAKICNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KIAogCi0KLS8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBpbnQgeXljaGFyOwogCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCiBZWVNUWVBFIHl5bHZhbDsKIAogLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KQEAgLTEzNzQsOSArMTM0Nyw5IEBACiAKIAogCi0vKi0tLS0tLS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cGFyc2Ugb3IgeXlwdXNoX3BhcnNlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCkBAIC0xNDAwLDE0ICsxMzczLDM5IEBACiAjZW5kaWYKICNlbmRpZgogewotICAKLSAgaW50IHl5c3RhdGU7CisKKworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKworICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMuCisgICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZUEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKICAgaW50IHl5bjsKICAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW47CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisKICNpZiBZWUVSUk9SX1ZFUkJPU0UKICAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCiAgIGNoYXIgeXltc2didWZbMTI4XTsKQEAgLTE0MTUsNTEgKzE0MTMsMjggQEAKICAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CiAjZW5kaWYKIAotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAotICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotCi0KICNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKIAotICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLQogICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgogICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCiAgIGludCB5eWxlbiA9IDA7CiAKKyAgeXl0b2tlbiA9IDA7CisgIHl5c3MgPSB5eXNzYTsKKyAgeXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CiAKICAgeXlzdGF0ZSA9IDA7CiAgIHl5ZXJyc3RhdHVzID0gMDsKICAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICB5eWNoYXIgPSBZWUVNUFRZOyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLwogCiAgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCiAgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawogICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCiAgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQogICB5eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIApAQCAtMTQ4OSw3ICsxNDY0LDYgQEAKIAlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CiAJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CiAKLQogCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQogCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKIAkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CkBAIC0xNDk3LDcgKzE0NzEsNiBAQAogCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAogCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCiAJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQogCQkgICAgJnl5c3RhY2tzaXplKTsKIAogCXl5c3MgPSB5eXNzMTsKQEAgLTE1MjAsOSArMTQ5Myw4IEBACiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQogCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQorCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQogCWlmICh5eXNzMSAhPSB5eXNzYSkKIAkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwpAQCAtMTUzMyw3ICsxNTA1LDYgQEAKICAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CiAgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOwogCi0KICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKIAkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CiAKQEAgLTE1NDMsNiArMTUxNCw5IEBACiAKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKIAorICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCiAgIGdvdG8geXliYWNrdXA7CiAKIC8qLS0tLS0tLS0tLS0uCkBAIC0xNTUxLDE2ICsxNTI1LDE2IEBACiB5eWJhY2t1cDoKIAogICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBAIC0xNTkyLDIwICsxNTY2LDE2IEBACiAgICAgICBnb3RvIHl5cmVkdWNlOwogICAgIH0KIAotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KICAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgogICAgICBzdGF0dXMuICAqLwogICBpZiAoeXllcnJzdGF0dXMpCiAgICAgeXllcnJzdGF0dXMtLTsKIAotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlFT0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7CiAKICAgeXlzdGF0ZSA9IHl5bjsKICAgKisreXl2c3AgPSB5eWx2YWw7CkBAIC0yMDI5LDcgKzE5OTksNiBAQAogICAgIGJyZWFrOwogCiAKLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwogCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CkBAIC0yMDQxLDcgKzIwMTAsNiBAQAogCiAgICorK3l5dnNwID0geXl2YWw7CiAKLQogICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQogICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKICAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLwpAQCAtMjEwNiw3ICsyMDc0LDcgQEAKIAogICBpZiAoeXllcnJzdGF0dXMgPT0gMykKICAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbgogCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCkBAIC0yMTIzLDcgKzIwOTEsNyBAQAogCX0KICAgICB9CiAKLSAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKICAgICAgdG9rZW4uICAqLwogICBnb3RvIHl5ZXJybGFiMTsKIApAQCAtMjE4MCw5ICsyMTQ4LDYgQEAKICAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgICAgfQogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQogICAqKyt5eXZzcCA9IHl5bHZhbDsKIAogCkBAIC0yMjA3LDcgKzIxNzIsNyBAQAogICB5eXJlc3VsdCA9IDE7CiAgIGdvdG8geXlyZXR1cm47CiAKLSNpZm5kZWYgeXlvdmVyZmxvdworI2lmICFkZWZpbmVkKHl5b3ZlcmZsb3cpIHx8IFlZRVJST1JfVkVSQk9TRQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgogfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjIxOCw3ICsyMTgzLDcgQEAKICNlbmRpZgogCiB5eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKKyAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQogICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAogCQkgeXl0b2tlbiwgJnl5bHZhbCk7CiAgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKQEAgLTIyODQsNyArMjI0OSw3IEBACiAJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CiB9CiAKLWNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKIHsKIAlzd2l0Y2ggKHRva2VuKSB7CiAJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwpAQCAtMjM0OCw3ICsyMzEzLDcgQEAKICNlbmRpZgogfQogCi12b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQogewogCWNvbnN0IGNoYXIgKnA7CiAJaW50IGxlbjsKQEAgLTIzNjUsNyArMjMzMCw3IEBACiAJcHV0YygnIicsIG91dCk7CiB9CiAKLXZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCitzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQppbmRleCA5NzEwYjgyLi44YzQzNDkxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYueQorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQpAQCAtMTQsOCArMTQsNiBAQAogI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKLQogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQogCiAjZGVmaW5lIFBSSU5URAkJMHgwMDAxCkBAIC0xMDAsNiArOTgsMTEgQEAKIAkJbWVudV9lbmRfbWVudSgpOwogfSBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQogCisleworLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovCisjaW5jbHVkZSAiemNvbmYuaGFzaC5jIgorJX0KKwogJSUKIGlucHV0OiBzdG10X2xpc3Q7CiAKQEAgLTUwMSw3ICs1MDQsNyBAQAogCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOwogfQogCi1jb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQorc3RhdGljIGNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCiB7CiAJc3dpdGNoICh0b2tlbikgewogCWNhc2UgVF9NRU5VOgkJcmV0dXJuICJtZW51IjsKQEAgLTU2NSw3ICs1NjgsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgbGVuOwpAQCAtNTgyLDcgKzU4NSw3IEBACiAJcHV0YygnIicsIG91dCk7CiB9CiAKLXZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCitzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IGVhOWY4YTUuLjI0MTMxMGUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTE4NTIsMTAgKzE4NTIsMTcgQEAKIAlteSAkdHJhY2Vwb2ludG5hbWUgPSAwOwogCW15ICR0cmFjZXBvaW50YXJncyA9IDA7CiAKLQlpZigkcHJvdG90eXBlID1+IG0vVFJBQ0VfRVZFTlRcKCguKj8pLC8pIHsKKwlpZiAoJHByb3RvdHlwZSA9fiBtL1RSQUNFX0VWRU5UXCgoLio/KSwvKSB7CiAJCSR0cmFjZXBvaW50bmFtZSA9ICQxOwogCX0KLQlpZigkcHJvdG90eXBlID1+IG0vVFBfUFJPVE9cKCguKj8pXCkvKSB7CisJaWYgKCRwcm90b3R5cGUgPX4gbS9ERUZJTkVfU0lOR0xFX0VWRU5UXCgoLio/KSwvKSB7CisJCSR0cmFjZXBvaW50bmFtZSA9ICQxOworCX0KKwlpZiAoJHByb3RvdHlwZSA9fiBtL0RFRklORV9FVkVOVFwoKC4qPyksKC4qPyksLykgeworCQkkdHJhY2Vwb2ludG5hbWUgPSAkMjsKKwl9CisJJHRyYWNlcG9pbnRuYW1lID1+IHMvXlxzKy8vOyAjc3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCisJaWYgKCRwcm90b3R5cGUgPX4gbS9UUF9QUk9UT1woKC4qPylcKS8pIHsKIAkJJHRyYWNlcG9pbnRhcmdzID0gJDE7CiAJfQogCWlmICgoJHRyYWNlcG9pbnRuYW1lIGVxIDApIHx8ICgkdHJhY2Vwb2ludGFyZ3MgZXEgMCkpIHsKQEAgLTE5MjAsNyArMTkyNyw5IEBACiAJaWYgKCRwcm90b3R5cGUgPX4gL1NZU0NBTExfREVGSU5FLykgewogCQlzeXNjYWxsX211bmdlKCk7CiAJfQotCWlmICgkcHJvdG90eXBlID1+IC9UUkFDRV9FVkVOVC8pIHsKKwlpZiAoJHByb3RvdHlwZSA9fiAvVFJBQ0VfRVZFTlQvIHx8ICRwcm90b3R5cGUgPX4gL0RFRklORV9FVkVOVC8gfHwKKwkgICAgJHByb3RvdHlwZSA9fiAvREVGSU5FX1NJTkdMRV9FVkVOVC8pCisJewogCQl0cmFjZXBvaW50X211bmdlKCRmaWxlKTsKIAl9CiAJZHVtcF9mdW5jdGlvbigkcHJvdG90eXBlLCAkZmlsZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IDA5MGQzMDAuLmYwZDE0NDUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC02LDc3ICs2LDkzIEBACiAjICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgb2Zmc2V0cyB0byB0aGUgY2FsbHMgdG8gbWNvdW50LgogIwogIwotIyBXaGF0IHdlIHdhbnQgdG8gZW5kIHVwIHdpdGggaXMgYSBzZWN0aW9uIGluIHZtbGludXggY2FsbGVkCi0jIF9fbWNvdW50X2xvYyB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBwb2ludGVycyB0byBhbGwgdGhlCi0jIGNhbGwgc2l0ZXMgaW4gdGhlIGtlcm5lbCB0aGF0IGNhbGwgbWNvdW50LiBMYXRlciBvbiBib290IHVwLCB0aGUga2VybmVsCi0jIHdpbGwgcmVhZCB0aGlzIGxpc3QsIHNhdmUgdGhlIGxvY2F0aW9ucyBhbmQgdHVybiB0aGVtIGludG8gbm9wcy4KLSMgV2hlbiB0cmFjaW5nIG9yIHByb2ZpbGluZyBpcyBsYXRlciBlbmFibGVkLCB0aGVzZSBsb2NhdGlvbnMgd2lsbCB0aGVuCi0jIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHBvaW50ZXJzIHRvIHNvbWUgZnVuY3Rpb24uCisjIFdoYXQgd2Ugd2FudCB0byBlbmQgdXAgd2l0aCB0aGlzIGlzIHRoYXQgZWFjaCBvYmplY3QgZmlsZSB3aWxsIGhhdmUgYQorIyBzZWN0aW9uIGNhbGxlZCBfX21jb3VudF9sb2MgdGhhdCB3aWxsIGhvbGQgdGhlIGxpc3Qgb2YgcG9pbnRlcnMgdG8gbWNvdW50CisjIGNhbGxlcnMuIEFmdGVyIGZpbmFsIGxpbmtpbmcsIHRoZSB2bWxpbnV4IHdpbGwgaGF2ZSB3aXRoaW4gLmluaXQuZGF0YSB0aGUKKyMgbGlzdCBvZiBhbGwgY2FsbGVycyB0byBtY291bnQgYmV0d2VlbiBfX3N0YXJ0X21jb3VudF9sb2MgYW5kIF9fc3RvcF9tY291bnRfbG9jLgorIyBMYXRlciBvbiBib290IHVwLCB0aGUga2VybmVsIHdpbGwgcmVhZCB0aGlzIGxpc3QsIHNhdmUgdGhlIGxvY2F0aW9ucyBhbmQgdHVybgorIyB0aGVtIGludG8gbm9wcy4gV2hlbiB0cmFjaW5nIG9yIHByb2ZpbGluZyBpcyBsYXRlciBlbmFibGVkLCB0aGVzZSBsb2NhdGlvbnMKKyMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCBiYWNrIHRvIHBvaW50ZXJzIHRvIHNvbWUgZnVuY3Rpb24uCiAjCiAjIFRoaXMgaXMgbm8gZWFzeSBmZWF0LiBUaGlzIHNjcmlwdCBpcyBjYWxsZWQganVzdCBhZnRlciB0aGUgb3JpZ2luYWwKICMgb2JqZWN0IGlzIGNvbXBpbGVkIGFuZCBiZWZvcmUgaXQgaXMgbGlua2VkLgogIwotIyBUaGUgcmVmZXJlbmNlcyB0byB0aGUgY2FsbCBzaXRlcyBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBzZWN0aW9uIG9mIHRleHQKLSMgdGhhdCB0aGUgY2FsbCBzaXRlIGlzIGluLiBIZW5jZSwgYWxsIGZ1bmN0aW9ucyBpbiBhIHNlY3Rpb24gdGhhdAotIyBoYXMgYSBjYWxsIHNpdGUgdG8gbWNvdW50LCB3aWxsIGhhdmUgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKLSMgdGhlIHNlY3Rpb24gYW5kIG5vdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4KKyMgV2hlbiBwYXJzZSB0aGlzIG9iamVjdCBmaWxlIHVzaW5nICdvYmpkdW1wJywgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGNhbGwKKyMgc2l0ZXMgYXJlIG9mZnNldHMgZnJvbSB0aGUgc2VjdGlvbiB0aGF0IHRoZSBjYWxsIHNpdGUgaXMgaW4uIEhlbmNlLCBhbGwKKyMgZnVuY3Rpb25zIGluIGEgc2VjdGlvbiB0aGF0IGhhcyBhIGNhbGwgc2l0ZSB0byBtY291bnQsIHdpbGwgaGF2ZSB0aGUKKyMgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbiBhbmQgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjIGZ1bmN0aW9uLgogIwotIyBUaGUgdHJpY2sgaXMgdG8gZmluZCBhIHdheSB0byByZWNvcmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbi4KLSMgVGhlIHdheSB3ZSBkbyB0aGlzIGlzIHRvIGxvb2sgYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzZWN0aW9uCi0jIHdoaWNoIHdpbGwgYWxzbyBiZSB0aGUgbG9jYXRpb24gb2YgdGhhdCBzZWN0aW9uIGFmdGVyIGZpbmFsIGxpbmsuCisjIEJ1dCB3aGVyZSB0aGlzIHNlY3Rpb24gd2lsbCByZXNpZGUgZmluYWxseSBpbiB2bWxpbnggaXMgdW5kZXRlcm1pbmVkIGF0CisjIHRoaXMgcG9pbnQuIFNvIHdlIGNhbid0IHVzZSB0aGlzIGtpbmQgb2Ygb2Zmc2V0cyB0byByZWNvcmQgdGhlIGZpbmFsCisjIGFkZHJlc3Mgb2YgdGhpcyBjYWxsIHNpdGUuCisjCisjIFRoZSB0cmljayBpcyB0byBjaGFuZ2UgdGhlIGNhbGwgb2Zmc2V0IHJlZmVycmluZyB0aGUgc3RhcnQgb2YgYSBzZWN0aW9uIHRvCisjIHJlZmVycmluZyBhIGZ1bmN0aW9uIHN5bWJvbCBpbiB0aGlzIHNlY3Rpb24uIER1cmluZyB0aGUgbGluayBzdGVwLCAnbGQnIHdpbGwKKyMgY29tcHV0ZSB0aGUgZmluYWwgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIGluZm9ybWF0aW9uIHdlIHJlY29yZC4KKyMKICMgZS5nLgogIwogIyAgLnNlY3Rpb24gIi5zY2hlZC50ZXh0IiwgImF4IgotIyAgLmdsb2JsIG15X2Z1bmMKLSMgIG15X2Z1bmM6CiAjICAgICAgICBbLi4uXQotIyAgICAgICAgY2FsbCBtY291bnQgIChvZmZzZXQ6IDB4NSkKKyMgIGZ1bmMxOgorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIGNhbGwgbWNvdW50ICAob2Zmc2V0OiAweDEwKQogIyAgICAgICAgWy4uLl0KICMgICAgICAgIHJldAotIyAgb3RoZXJfZnVuYzoKKyMgIC5nbG9ibCBmdW4yCisjICBmdW5jMjogICAgICAgICAgICAgKG9mZnNldDogMHgyMCkKICMgICAgICAgIFsuLi5dCi0jICAgICAgICBjYWxsIG1jb3VudCAob2Zmc2V0OiAweDFiKQorIyAgICAgICAgWy4uLl0KKyMgICAgICAgIHJldAorIyAgZnVuYzM6CisjICAgICAgICBbLi4uXQorIyAgICAgICAgY2FsbCBtY291bnQgKG9mZnNldDogMHgzMCkKICMgICAgICAgIFsuLi5dCiAjCiAjIEJvdGggcmVsb2NhdGlvbiBvZmZzZXRzIGZvciB0aGUgbWNvdW50cyBpbiB0aGUgYWJvdmUgZXhhbXBsZSB3aWxsIGJlCi0jIG9mZnNldCBmcm9tIC5zY2hlZC50ZXh0LiBJZiB3ZSBtYWtlIGFub3RoZXIgZmlsZSBjYWxsZWQgdG1wLnMgd2l0aDoKKyMgb2Zmc2V0IGZyb20gLnNjaGVkLnRleHQuIElmIHdlIGNob29zZSBnbG9iYWwgc3ltYm9sIGZ1bmMyIGFzIGEgcmVmZXJlbmNlIGFuZAorIyBtYWtlIGFub3RoZXIgZmlsZSBjYWxsZWQgdG1wLnMgd2l0aCB0aGUgbmV3IG9mZnNldHM6CiAjCiAjICAuc2VjdGlvbiBfX21jb3VudF9sb2MKLSMgIC5xdWFkICBteV9mdW5jICsgMHg1Ci0jICAucXVhZCAgbXlfZnVuYyArIDB4MWIKKyMgIC5xdWFkICBmdW5jMiAtIDB4MTAKKyMgIC5xdWFkICBmdW5jMiArIDB4MTAKICMKLSMgV2UgY2FuIHRoZW4gY29tcGlsZSB0aGlzIHRtcC5zIGludG8gdG1wLm8sIGFuZCBsaW5rIGl0IHRvIHRoZSBvcmlnaW5hbAorIyBXZSBjYW4gdGhlbiBjb21waWxlIHRoaXMgdG1wLnMgaW50byB0bXAubywgYW5kIGxpbmsgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwKICMgb2JqZWN0LgogIwotIyBCdXQgdGhpcyBnZXRzIGhhcmQgaWYgbXlfZnVuYyBpcyBub3QgZ2xvYmwgKGEgc3RhdGljIGZ1bmN0aW9uKS4KLSMgSW4gc3VjaCBhIGNhc2Ugd2UgaGF2ZToKKyMgSW4gb3VyIGFsZ29yaXRobSwgd2Ugd2lsbCBjaG9vc2UgdGhlIGZpcnN0IGdsb2JhbCBmdW5jdGlvbiB3ZSBtZWV0IGluIHRoaXMKKyMgc2VjdGlvbiBhcyB0aGUgcmVmZXJlbmNlLiBCdXQgdGhpcyBnZXRzIGhhcmQgaWYgdGhlcmUgaXMgbm8gZ2xvYmFsIGZ1bmN0aW9ucworIyBpbiB0aGlzIHNlY3Rpb24uIEluIHN1Y2ggYSBjYXNlIHdlIGhhdmUgdG8gc2VsZWN0IGEgbG9jYWwgb25lLiBFLmcuIGZ1bmMxOgogIwogIyAgLnNlY3Rpb24gIi5zY2hlZC50ZXh0IiwgImF4IgotIyAgbXlfZnVuYzoKKyMgIGZ1bmMxOgogIyAgICAgICAgWy4uLl0KLSMgICAgICAgIGNhbGwgbWNvdW50ICAob2Zmc2V0OiAweDUpCisjICAgICAgICBjYWxsIG1jb3VudCAgKG9mZnNldDogMHgxMCkKICMgICAgICAgIFsuLi5dCiAjICAgICAgICByZXQKLSMgIG90aGVyX2Z1bmM6CisjICBmdW5jMjoKICMgICAgICAgIFsuLi5dCi0jICAgICAgICBjYWxsIG1jb3VudCAob2Zmc2V0OiAweDFiKQorIyAgICAgICAgY2FsbCBtY291bnQgKG9mZnNldDogMHgyMCkKICMgICAgICAgIFsuLi5dCisjICAuc2VjdGlvbiAib3RoZXIuc2VjdGlvbiIKICMKICMgSWYgd2UgbWFrZSB0aGUgdG1wLnMgdGhlIHNhbWUgYXMgYWJvdmUsIHdoZW4gd2UgbGluayB0b2dldGhlciB3aXRoCi0jIHRoZSBvcmlnaW5hbCBvYmplY3QsIHdlIHdpbGwgZW5kIHVwIHdpdGggdHdvIHN5bWJvbHMgZm9yIG15X2Z1bmM6CisjIHRoZSBvcmlnaW5hbCBvYmplY3QsIHdlIHdpbGwgZW5kIHVwIHdpdGggdHdvIHN5bWJvbHMgZm9yIGZ1bmMxOgogIyBvbmUgbG9jYWwsIG9uZSBnbG9iYWwuICBBZnRlciBmaW5hbCBjb21waWxlLCB3ZSB3aWxsIGVuZCB1cCB3aXRoCi0jIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gbXlfZnVuYy4KKyMgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBmdW5jMSBvciBhIHdyb25nIHJlZmVyZW5jZSB0byBhbm90aGVyIGdsb2JhbAorIyBmdW5jMSBpbiBvdGhlciBmaWxlcy4KICMKICMgU2luY2UgbG9jYWwgb2JqZWN0cyBjYW4gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcywgd2UgbmVlZCB0byBmaW5kCiAjIGEgd2F5IHRvIG1ha2UgdG1wLm8gcmVmZXJlbmNlIHRoZSBsb2NhbCBvYmplY3RzIG9mIHRoZSBvcmlnaW5hbCBvYmplY3QKLSMgZmlsZSBhZnRlciBpdCBpcyBsaW5rZWQgdG9nZXRoZXIuIFRvIGRvIHRoaXMsIHdlIGNvbnZlcnQgdGhlIG15X2Z1bmMKKyMgZmlsZSBhZnRlciBpdCBpcyBsaW5rZWQgdG9nZXRoZXIuIFRvIGRvIHRoaXMsIHdlIGNvbnZlcnQgZnVuYzEKICMgaW50byBhIGdsb2JhbCBzeW1ib2wgYmVmb3JlIGxpbmtpbmcgdG1wLm8uIFRoZW4gYWZ0ZXIgd2UgbGluayB0bXAubwotIyB3ZSB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSBzeW1ib2wgZm9yIG15X2Z1bmMgdGhhdCBpcyBnbG9iYWwuCi0jIFdlIGNhbiBjb252ZXJ0IG15X2Z1bmMgYmFjayBpbnRvIGEgbG9jYWwgc3ltYm9sIGFuZCB3ZSBhcmUgZG9uZS4KKyMgd2Ugd2lsbCBvbmx5IGhhdmUgYSBzaW5nbGUgc3ltYm9sIGZvciBmdW5jMSB0aGF0IGlzIGdsb2JhbC4KKyMgV2UgY2FuIGNvbnZlcnQgZnVuYzEgYmFjayBpbnRvIGEgbG9jYWwgc3ltYm9sIGFuZCB3ZSBhcmUgZG9uZS4KICMKICMgSGVyZSBhcmUgdGhlIHN0ZXBzIHdlIHRha2U6CiAjCi0jIDEpIFJlY29yZCBhbGwgdGhlIGxvY2FsIHN5bWJvbHMgYnkgdXNpbmcgJ25tJworIyAxKSBSZWNvcmQgYWxsIHRoZSBsb2NhbCBhbmQgd2VhayBzeW1ib2xzIGJ5IHVzaW5nICdubScKICMgMikgVXNlIG9iamR1bXAgdG8gZmluZCBhbGwgdGhlIGNhbGwgc2l0ZSBvZmZzZXRzIGFuZCBzZWN0aW9ucyBmb3IKICMgICAgbWNvdW50LgogIyAzKSBDb21waWxlIHRoZSBsaXN0IGludG8gaXRzIG93biBvYmplY3QuCkBAIC04NiwxMCArMTAyLDggQEAKICMgNikgTGluayB0b2dldGhlciB0aGlzIG5ldyBvYmplY3Qgd2l0aCB0aGUgbGlzdCBvYmplY3QuCiAjIDcpIENvbnZlcnQgdGhlIGxvY2FsIGZ1bmN0aW9ucyBiYWNrIHRvIGxvY2FsIHN5bWJvbHMgYW5kIHJlbmFtZQogIyAgICB0aGUgcmVzdWx0IGFzIHRoZSBvcmlnaW5hbCBvYmplY3QuCi0jICAgIEVuZC4KICMgOCkgTGluayB0aGUgb2JqZWN0IHdpdGggdGhlIGxpc3Qgb2JqZWN0LgogIyA5KSBNb3ZlIHRoZSByZXN1bHQgYmFjayB0byB0aGUgb3JpZ2luYWwgb2JqZWN0LgotIyAgICBFbmQuCiAjCiAKIHVzZSBzdHJpY3Q7CkBAIC05OSw3ICsxMTMsNyBAQAogCiBteSAkViA9ICcwLjEnOwogCi1pZiAoJCNBUkdWIDwgNykgeworaWYgKCQjQVJHViAhPSAxMCkgewogCXByaW50ICJ1c2FnZTogJFAgYXJjaCBiaXRzIG9iamR1bXAgb2JqY29weSBjYyBsZCBubSBybSBtdiBpc19tb2R1bGUgaW5wdXRmaWxlXG4iOwogCXByaW50ICJ2ZXJzaW9uOiAkVlxuIjsKIAlleGl0KDEpOwpAQCAtMTA5LDcgKzEyMyw3IEBACiAgICAgJGxkLCAkbm0sICRybSwgJG12LCAkaXNfbW9kdWxlLCAkaW5wdXRmaWxlKSA9IEBBUkdWOwogCiAjIFRoaXMgZmlsZSByZWZlcnMgdG8gbWNvdW50IGFuZCBzaG91bGRuJ3QgYmUgZnRyYWNlZCwgc28gbGV0cycgaWdub3JlIGl0Ci1pZiAoJGlucHV0ZmlsZSBlcSAia2VybmVsL3RyYWNlL2Z0cmFjZS5vIikgeworaWYgKCRpbnB1dGZpbGUgPX4gbSxrZXJuZWwvdHJhY2UvZnRyYWNlXC5vJCwpIHsKICAgICBleGl0KDApOwogfQogCkBAIC0xMTksNiArMTMzLDcgQEAKICAgICAgIi5zY2hlZC50ZXh0IiA9PiAxLAogICAgICAiLnNwaW5sb2NrLnRleHQiID0+IDEsCiAgICAgICIuaXJxZW50cnkudGV4dCIgPT4gMSwKKyAgICAgIi50ZXh0LnVubGlrZWx5IiA9PiAxLAogKTsKIAogJG9iamR1bXAgPSAib2JqZHVtcCIgaWYgKChsZW5ndGggJG9iamR1bXApID09IDApOwpAQCAtMTM3LDEzICsxNTIsNDcgQEAKIG15ICVjb252ZXJ0OwkJIyBMaXN0IG9mIGxvY2FsIGZ1bmN0aW9ucyB1c2VkIHRoYXQgbmVlZHMgY29udmVyc2lvbgogCiBteSAkdHlwZTsKLW15ICRubV9yZWdleDsJCSMgRmluZCB0aGUgbG9jYWwgZnVuY3Rpb25zIChyZXR1cm4gZnVuY3Rpb24pCitteSAkbG9jYWxfcmVnZXg7CSMgTWF0Y2ggYSBsb2NhbCBmdW5jdGlvbiAocmV0dXJuIGZ1bmN0aW9uKQorbXkgJHdlYWtfcmVnZXg7IAkjIE1hdGNoIGEgd2VhayBmdW5jdGlvbiAocmV0dXJuIGZ1bmN0aW9uKQogbXkgJHNlY3Rpb25fcmVnZXg7CSMgRmluZCB0aGUgc3RhcnQgb2YgYSBzZWN0aW9uCiBteSAkZnVuY3Rpb25fcmVnZXg7CSMgRmluZCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uCiAJCQkjICAgIChyZXR1cm4gb2Zmc2V0IGFuZCBmdW5jIG5hbWUpCiBteSAkbWNvdW50X3JlZ2V4OwkjIEZpbmQgdGhlIGNhbGwgc2l0ZSB0byBtY291bnQgKHJldHVybiBvZmZzZXQpCiBteSAkYWxpZ25tZW50OwkJIyBUaGUgLmFsaWduIHZhbHVlIHRvIHVzZSBmb3IgJG1jb3VudF9zZWN0aW9uCiBteSAkc2VjdGlvbl90eXBlOwkjIFNlY3Rpb24gaGVhZGVyIHBsdXMgcG9zc2libGUgYWxpZ25tZW50IGNvbW1hbmQKK215ICRjYW5fdXNlX2xvY2FsID0gMDsgCSMgSWYgd2UgY2FuIHVzZSBsb2NhbCBmdW5jdGlvbiByZWZlcmVuY2VzCisKKyMgU2h1dCB1cCByZWNvcmRtY291bnQgaWYgdXNlciBoYXMgb2xkZXIgb2JqY29weQorbXkgJHF1aWV0X3JlY29yZG1jb3VudCA9ICIudG1wX3F1aWV0X3JlY29yZG1jb3VudCI7CitteSAkcHJpbnRfd2FybmluZyA9IDE7CiskcHJpbnRfd2FybmluZyA9IDAgaWYgKCAtZiAkcXVpZXRfcmVjb3JkbWNvdW50KTsKKworIyMKKyMgY2hlY2tfb2JqY29weSAtIHdoZXRoZXIgb2JqY29weSBzdXBwb3J0cyAtLWdsb2JhbGl6ZS1zeW1ib2xzCisjCisjICAtLWdsb2JhbGl6ZS1zeW1ib2xzIGNhbWUgb3V0IGluIDIuMTcsIHdlIG11c3QgdGVzdCB0aGUgdmVyc2lvbgorIyAgb2Ygb2JqY29weSwgYW5kIGlmIGl0IGlzIGxlc3MgdGhhbiAyLjE3LCB0aGVuIHdlIGNhbiBub3QKKyMgIHJlY29yZCBsb2NhbCBmdW5jdGlvbnMuCitzdWIgY2hlY2tfb2JqY29weQoreworICAgIG9wZW4gKElOLCAiJG9iamNvcHkgLS12ZXJzaW9uIHwiKSBvciBkaWUgImVycm9yIHJ1bm5pbmcgJG9iamNvcHkiOworICAgIHdoaWxlICg8SU4+KSB7CisJaWYgKC9vYmpjb3B5LipccyhcZCspXC4oXGQrKS8pIHsKKwkgICAgJGNhbl91c2VfbG9jYWwgPSAxIGlmICgkMSA+IDIgfHwgKCQxID09IDIgJiYgJDIgPj0gMTcpKTsKKwkgICAgbGFzdDsKKwl9CisgICAgfQorICAgIGNsb3NlIChJTik7CisKKyAgICBpZiAoISRjYW5fdXNlX2xvY2FsICYmICRwcmludF93YXJuaW5nKSB7CisJcHJpbnQgU1RERVJSICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBvYmpjb3B5IHZlcnNpb24gb3IgdmVyc2lvbiAiIC4KKwkgICAgImlzIGxlc3MgdGhhbiAyLjE3LlxuIiAuCisJICAgICJcdExvY2FsIGZ1bmN0aW9uIHJlZmVyZW5jZXMgYXJlIGRpc2FibGVkLlxuIjsKKwlvcGVuIChRVUlFVCwgIj4kcXVpZXRfcmVjb3JkbWNvdW50Iik7CisJcHJpbnRmIFFVSUVUICJEaXNhYmxlcyB0aGUgd2FybmluZyBmcm9tIHJlY29yZG1jb3VudC5wbFxuIjsKKwljbG9zZSBRVUlFVDsKKyAgICB9Cit9CiAKIGlmICgkYXJjaCBlcSAieDg2IikgewogICAgIGlmICgkYml0cyA9PSA2NCkgewpAQCAtMTU3LDcgKzIwNiw4IEBACiAjIFdlIGJhc2UgdGhlIGRlZmF1bHRzIG9mZiBvZiBpMzg2LCB0aGUgb3RoZXIgYXJjaHMgbWF5CiAjIGZlZWwgZnJlZSB0byBjaGFuZ2UgdGhlbSBpbiB0aGUgYmVsb3cgaWYgc3RhdGVtZW50cy4KICMKLSRubV9yZWdleCA9ICJeWzAtOWEtZkEtRl0rXFxzK3RcXHMrKFxcUyspIjsKKyRsb2NhbF9yZWdleCA9ICJeWzAtOWEtZkEtRl0rXFxzK3RcXHMrKFxcUyspIjsKKyR3ZWFrX3JlZ2V4ID0gIl5bMC05YS1mQS1GXStcXHMrKFt3V10pXFxzKyhcXFMrKSI7CiAkc2VjdGlvbl9yZWdleCA9ICJEaXNhc3NlbWJseSBvZiBzZWN0aW9uXFxzKyhcXFMrKToiOwogJGZ1bmN0aW9uX3JlZ2V4ID0gIl4oWzAtOWEtZkEtRl0rKVxccys8KC4qPyk+OiI7CiAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6LipcXHNtY291bnRcJCI7CkBAIC0yMDYsNyArMjU2LDcgQEAKICAgICAkY2MgLj0gIiAtbTMyIjsKIAogfSBlbHNpZiAoJGFyY2ggZXEgInBvd2VycGMiKSB7Ci0gICAgJG5tX3JlZ2V4ID0gIl5bMC05YS1mQS1GXStcXHMrdFxccysoXFwuP1xcUyspIjsKKyAgICAkbG9jYWxfcmVnZXggPSAiXlswLTlhLWZBLUZdK1xccyt0XFxzKyhcXC4/XFxTKykiOwogICAgICRmdW5jdGlvbl9yZWdleCA9ICJeKFswLTlhLWZBLUZdKylcXHMrPChcXC4/Lio/KT46IjsKICAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6LipcXHNcXC4/X21jb3VudFwkIjsKIApAQCAtMjc4LDQ0ICszMjgsMTcgQEAKIG15ICRtY291bnRfcyA9ICRkaXJuYW1lIC4gIi8udG1wX21jXyIgLiAkcHJlZml4IC4gIi5zIjsKIG15ICRtY291bnRfbyA9ICRkaXJuYW1lIC4gIi8udG1wX21jXyIgLiAkcHJlZml4IC4gIi5vIjsKIAotIwotIyAtLWdsb2JhbGl6ZS1zeW1ib2xzIGNhbWUgb3V0IGluIDIuMTcsIHdlIG11c3QgdGVzdCB0aGUgdmVyc2lvbgotIyBvZiBvYmpjb3B5LCBhbmQgaWYgaXQgaXMgbGVzcyB0aGFuIDIuMTcsIHRoZW4gd2UgY2FuIG5vdAotIyByZWNvcmQgbG9jYWwgZnVuY3Rpb25zLgotbXkgJHVzZV9sb2NhbHMgPSAwMTsKLW15ICRsb2NhbF93YXJuX29uY2UgPSAwOwotbXkgJGZvdW5kX3ZlcnNpb24gPSAwOwotCi1vcGVuIChJTiwgIiRvYmpjb3B5IC0tdmVyc2lvbiB8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpjb3B5IjsKLXdoaWxlICg8SU4+KSB7Ci0gICAgaWYgKC9vYmpjb3B5LipccyhcZCspXC4oXGQrKS8pIHsKLQlteSAkbWFqb3IgPSAkMTsKLQlteSAkbWlub3IgPSAkMjsKLQotCSRmb3VuZF92ZXJzaW9uID0gMTsKLQlpZiAoJG1ham9yIDwgMiB8fAotCSAgICAoJG1ham9yID09IDIgJiYgJG1pbm9yIDwgMTcpKSB7Ci0JICAgICR1c2VfbG9jYWxzID0gMDsKLQl9Ci0JbGFzdDsKLSAgICB9Ci19Ci1jbG9zZSAoSU4pOwotCi1pZiAoISRmb3VuZF92ZXJzaW9uKSB7Ci0gICAgcHJpbnQgU1RERVJSICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBvYmpjb3B5IHZlcnNpb24uXG4iIC4KLQkiXHREaXNhYmxpbmcgbG9jYWwgZnVuY3Rpb24gcmVmZXJlbmNlcy5cbiI7Ci19CitjaGVja19vYmpjb3B5KCk7CiAKICMKICMgU3RlcCAxOiBmaW5kIGFsbCB0aGUgbG9jYWwgKHN0YXRpYyBmdW5jdGlvbnMpIGFuZCB3ZWFrIHN5bWJvbHMuCi0jICAgICAgICAndCcgaXMgbG9jYWwsICd3L1cnIGlzIHdlYWsgKHdlIG5ldmVyIHVzZSBhIHdlYWsgZnVuY3Rpb24pCisjICAgICAgICAgJ3QnIGlzIGxvY2FsLCAndy9XJyBpcyB3ZWFrCiAjCiBvcGVuIChJTiwgIiRubSAkaW5wdXRmaWxlfCIpIHx8IGRpZSAiZXJyb3IgcnVubmluZyAkbm0iOwogd2hpbGUgKDxJTj4pIHsKLSAgICBpZiAoLyRubV9yZWdleC8pIHsKKyAgICBpZiAoLyRsb2NhbF9yZWdleC8pIHsKIAkkbG9jYWxzeyQxfSA9IDE7Ci0gICAgfSBlbHNpZiAoL15bMC05YS1mQS1GXStccysoW3dXXSlccysoXFMrKS8pIHsKKyAgICB9IGVsc2lmICgvJHdlYWtfcmVnZXgvKSB7CiAJJHdlYWt7JDJ9ID0gJDE7CiAgICAgfQogfQpAQCAtMzMzLDI2ICszNTYsMjAgQEAKICMKIHN1YiB1cGRhdGVfZnVuY3MKIHsKLSAgICByZXR1cm4gaWYgKCQjb2Zmc2V0cyA8IDApOworICAgIHJldHVybiB1bmxlc3MgKCRyZWZfZnVuYyBhbmQgQG9mZnNldHMpOwogCi0gICAgZGVmaW5lZCgkcmVmX2Z1bmMpIHx8IGRpZSAiTm8gZnVuY3Rpb24gdG8gcmVmZXJlbmNlIjsKLQotICAgICMgQSBzZWN0aW9uIG9ubHkgaGFkIGEgd2VhayBmdW5jdGlvbiwgdG8gcmVwcmVzZW50IGl0LgotICAgICMgVW5mb3J0dW5hdGVseSwgYSB3ZWFrIGZ1bmN0aW9uIG1heSBiZSBvdmVyd3JpdHRlbiBieSBhbm90aGVyCi0gICAgIyBmdW5jdGlvbiBvZiB0aGUgc2FtZSBuYW1lLCBtYWtpbmcgYWxsIHRoZXNlIG9mZnNldHMgaW5jb3JyZWN0LgotICAgICMgVG8gYmUgc2FmZSwgd2Ugc2ltcGx5IHByaW50IGEgd2FybmluZyBhbmQgYmFpbC4KKyAgICAjIFNhbml0eSBjaGVjayBvbiB3ZWFrIGZ1bmN0aW9uLiBBIHdlYWsgZnVuY3Rpb24gbWF5IGJlIG92ZXJ3cml0dGVuIGJ5CisgICAgIyBhbm90aGVyIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUsIG1ha2luZyBhbGwgdGhlc2Ugb2Zmc2V0cyBpbmNvcnJlY3QuCiAgICAgaWYgKGRlZmluZWQgJHdlYWt7JHJlZl9mdW5jfSkgewotCXByaW50IFNUREVSUgotCSAgICAiJGlucHV0ZmlsZTogV0FSTklORzogcmVmZXJlbmNpbmcgd2VhayBmdW5jdGlvbiIgLgorCWRpZSAiJGlucHV0ZmlsZTogRVJST1I6IHJlZmVyZW5jaW5nIHdlYWsgZnVuY3Rpb24iIC4KIAkgICAgIiAkcmVmX2Z1bmMgZm9yIG1jb3VudFxuIjsKLQlyZXR1cm47CiAgICAgfQogCiAgICAgIyBpcyB0aGlzIGZ1bmN0aW9uIHN0YXRpYz8gSWYgc28sIG5vdGUgdGhpcyBmYWN0LgogICAgIGlmIChkZWZpbmVkICRsb2NhbHN7JHJlZl9mdW5jfSkgewogCiAJIyBvbmx5IHVzZSBsb2NhbHMgaWYgb2JqY29weSBzdXBwb3J0cyBnbG9iYWxpemUtc3ltYm9scwotCWlmICghJHVzZV9sb2NhbHMpIHsKKwlpZiAoISRjYW5fdXNlX2xvY2FsKSB7CiAJICAgIHJldHVybjsKIAl9CiAJJGNvbnZlcnR7JHJlZl9mdW5jfSA9IDE7CkBAIC0zNzgsOSArMzk1LDI3IEBACiAKIG15ICR0ZXh0OwogCisKKyMgcmVhZCBoZWFkZXJzIGZpcnN0CiBteSAkcmVhZF9oZWFkZXJzID0gMTsKIAogd2hpbGUgKDxJTj4pIHsKKworICAgIGlmICgkcmVhZF9oZWFkZXJzICYmIC8kbWNvdW50X3NlY3Rpb24vKSB7CisJIworCSMgU29tZWhvdyB0aGUgbWFrZSBwcm9jZXNzIGNhbiBleGVjdXRlIHRoaXMgc2NyaXB0IG9uIGFuCisJIyBvYmplY3QgdHdpY2UuIElmIGl0IGRvZXMsIHdlIHdvdWxkIGR1cGxpY2F0ZSB0aGUgbWNvdW50CisJIyBzZWN0aW9uIGFuZCBpdCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0cmFjZXIgc2VsZiB0ZXN0CisJIyB0byBmYWlsLiBDaGVjayBpZiB0aGUgbWNvdW50IHNlY3Rpb24gZXhpc3RzLCBhbmQgaWYgaXQgZG9lcywKKwkjIHdhcm4gYW5kIGV4aXQuCisJIworCXByaW50IFNUREVSUiAiRVJST1I6ICRtY291bnRfc2VjdGlvbiBhbHJlYWR5IGluICRpbnB1dGZpbGVcbiIgLgorCSAgICAiXHRUaGlzIG1heSBiZSBhbiBpbmRpY2F0aW9uIHRoYXQgeW91ciBidWlsZCBpcyBjb3JydXB0ZWQuXG4iIC4KKwkgICAgIlx0RGVsZXRlICRpbnB1dGZpbGUgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhlIHNhbWUgb2JqZWN0IGZpbGVcbiIgLgorCSAgICAiXHRzdGlsbCBjYXVzZXMgYW4gaXNzdWUsIHRoZW4gZGlzYWJsZSBDT05GSUdfRFlOQU1JQ19GVFJBQ0UuXG4iOworCWV4aXQoLTEpOworICAgIH0KKwogICAgICMgaXMgaXQgYSBzZWN0aW9uPwogICAgIGlmICgvJHNlY3Rpb25fcmVnZXgvKSB7CiAJJHJlYWRfaGVhZGVycyA9IDA7CkBAIC0zOTIsNyArNDI3LDcgQEAKIAkgICAgJHJlYWRfZnVuY3Rpb24gPSAwOwogCX0KIAkjIHByaW50IG91dCBhbnkgcmVjb3JkZWQgb2Zmc2V0cwotCXVwZGF0ZV9mdW5jcygpIGlmIChkZWZpbmVkKCRyZWZfZnVuYykpOworCXVwZGF0ZV9mdW5jcygpOwogCiAJIyByZXNldCBhbGwgbWFya2VycyBhbmQgYXJyYXlzCiAJJHRleHRfZm91bmQgPSAwOwpAQCAtNDIxLDIxICs0NTYsNyBAQAogCQkkb2Zmc2V0ID0gaGV4ICQxOwogCSAgICB9CiAJfQotICAgIH0gZWxzaWYgKCRyZWFkX2hlYWRlcnMgJiYgLyRtY291bnRfc2VjdGlvbi8pIHsKLQkjCi0JIyBTb21laG93IHRoZSBtYWtlIHByb2Nlc3MgY2FuIGV4ZWN1dGUgdGhpcyBzY3JpcHQgb24gYW4KLQkjIG9iamVjdCB0d2ljZS4gSWYgaXQgZG9lcywgd2Ugd291bGQgZHVwbGljYXRlIHRoZSBtY291bnQKLQkjIHNlY3Rpb24gYW5kIGl0IHdpbGwgY2F1c2UgdGhlIGZ1bmN0aW9uIHRyYWNlciBzZWxmIHRlc3QKLQkjIHRvIGZhaWwuIENoZWNrIGlmIHRoZSBtY291bnQgc2VjdGlvbiBleGlzdHMsIGFuZCBpZiBpdCBkb2VzLAotCSMgd2FybiBhbmQgZXhpdC4KLQkjCi0JcHJpbnQgU1RERVJSICJFUlJPUjogJG1jb3VudF9zZWN0aW9uIGFscmVhZHkgaW4gJGlucHV0ZmlsZVxuIiAuCi0JICAgICJcdFRoaXMgbWF5IGJlIGFuIGluZGljYXRpb24gdGhhdCB5b3VyIGJ1aWxkIGlzIGNvcnJ1cHRlZC5cbiIgLgotCSAgICAiXHREZWxldGUgJGlucHV0ZmlsZSBhbmQgdHJ5IGFnYWluLiBJZiB0aGUgc2FtZSBvYmplY3QgZmlsZVxuIiAuCi0JICAgICJcdHN0aWxsIGNhdXNlcyBhbiBpc3N1ZSwgdGhlbiBkaXNhYmxlIENPTkZJR19EWU5BTUlDX0ZUUkFDRS5cbiI7Ci0JZXhpdCgtMSk7CiAgICAgfQotCiAgICAgIyBpcyB0aGlzIGEgY2FsbCBzaXRlIHRvIG1jb3VudD8gSWYgc28sIHJlY29yZCBpdCB0byBwcmludCBsYXRlcgogICAgIGlmICgkdGV4dF9mb3VuZCAmJiAvJG1jb3VudF9yZWdleC8pIHsKIAkkb2Zmc2V0c1skI29mZnNldHMgKyAxXSA9IGhleCAkMTsKQEAgLTQ0Myw3ICs0NjQsNyBAQAogfQogCiAjIGR1bXAgb3V0IGFueW1vcmUgb2Zmc2V0cyB0aGF0IG1heSBoYXZlIGJlZW4gZm91bmQKLXVwZGF0ZV9mdW5jcygpIGlmIChkZWZpbmVkKCRyZWZfZnVuYykpOwordXBkYXRlX2Z1bmNzKCk7CiAKICMgSWYgd2UgZGlkIG5vdCBmaW5kIGFueSBtY291bnQgY2FsbGVycywgd2UgYXJlIGRvbmUgKGRvIG5vdGhpbmcpLgogaWYgKCEkb3BlbmVkKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlbGludXgvTWFrZWZpbGUgYi9zY3JpcHRzL3NlbGludXgvTWFrZWZpbGUKaW5kZXggY2E0YjFlYy4uZTgwNDlkYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9zZWxpbnV4L01ha2VmaWxlCisrKyBiL3NjcmlwdHMvc2VsaW51eC9NYWtlZmlsZQpAQCAtMSwyICsxLDIgQEAKLXN1YmRpci15IDo9IG1kcAotc3ViZGlyLQkrPSBtZHAKK3N1YmRpci15IDo9IG1kcCBnZW5oZWFkZXJzCitzdWJkaXItCSs9IG1kcCBnZW5oZWFkZXJzCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlbGludXgvZ2VuaGVhZGVycy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9zZWxpbnV4L2dlbmhlYWRlcnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBiNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9zZWxpbnV4L2dlbmhlYWRlcnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnZW5oZWFkZXJzCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlbGludXgvZ2VuaGVhZGVycy9NYWtlZmlsZSBiL3NjcmlwdHMvc2VsaW51eC9nZW5oZWFkZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2IxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3NlbGludXgvZ2VuaGVhZGVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK2hvc3Rwcm9ncy15CTo9IGdlbmhlYWRlcnMKK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUlzZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUKKworYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KQorY2xlYW4tZmlsZXMJOj0gJChob3N0cHJvZ3MteSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2VsaW51eC9nZW5oZWFkZXJzL2dlbmhlYWRlcnMuYyBiL3NjcmlwdHMvc2VsaW51eC9nZW5oZWFkZXJzL2dlbmhlYWRlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDYyNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9zZWxpbnV4L2dlbmhlYWRlcnMvZ2VuaGVhZGVycy5jCkBAIC0wLDAgKzEsMTE4IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK3N0cnVjdCBzZWN1cml0eV9jbGFzc19tYXBwaW5nIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnBlcm1zW3NpemVvZih1bnNpZ25lZCkgKiA4ICsgMV07Cit9OworCisjaW5jbHVkZSAiY2xhc3NtYXAuaCIKKyNpbmNsdWRlICJpbml0aWFsX3NpZF90b19zdHJpbmcuaCIKKworI2RlZmluZSBtYXgoeCwgeSkgKCgoaW50KSh4KSA+IChpbnQpKHkpKSA/IHggOiB5KQorCitjb25zdCBjaGFyICpwcm9nbmFtZTsKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlwcmludGYoInVzYWdlOiAlcyBmbGFzay5oIGF2X3Blcm1pc3Npb25zLmhcbiIsIHByb2duYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgY2hhciAqc3RvdXBwZXJ4KGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciAqczIgPSBzdHJkdXAocyk7CisJY2hhciAqcDsKKworCWlmICghczIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogIG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKwkJZXhpdCgzKTsKKwl9CisKKwlmb3IgKHAgPSBzMjsgKnA7IHArKykKKwkJKnAgPSB0b3VwcGVyKCpwKTsKKwlyZXR1cm4gczI7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGksIGosIGs7CisJaW50IGlzaWRzX2xlbjsKKwlGSUxFICpmb3V0OworCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCisJaWYgKGFyZ2MgPCAzKQorCQl1c2FnZSgpOworCisJZm91dCA9IGZvcGVuKGFyZ3ZbMV0sICJ3Iik7CisJaWYgKCFmb3V0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmc6ICAlc1xuIiwKKwkJCWFyZ3ZbMV0sIHN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMik7CisJfQorCisJZm9yIChpID0gMDsgc2VjY2xhc3NfbWFwW2ldLm5hbWU7IGkrKykgeworCQlzdHJ1Y3Qgc2VjdXJpdHlfY2xhc3NfbWFwcGluZyAqbWFwID0gJnNlY2NsYXNzX21hcFtpXTsKKwkJbWFwLT5uYW1lID0gc3RvdXBwZXJ4KG1hcC0+bmFtZSk7CisJCWZvciAoaiA9IDA7IG1hcC0+cGVybXNbal07IGorKykKKwkJCW1hcC0+cGVybXNbal0gPSBzdG91cHBlcngobWFwLT5wZXJtc1tqXSk7CisJfQorCisJaXNpZHNfbGVuID0gc2l6ZW9mKGluaXRpYWxfc2lkX3RvX3N0cmluZykgLyBzaXplb2YgKGNoYXIgKik7CisJZm9yIChpID0gMTsgaSA8IGlzaWRzX2xlbjsgaSsrKQorCQlpbml0aWFsX3NpZF90b19zdHJpbmdbaV0gPSBzdG91cHBlcngoaW5pdGlhbF9zaWRfdG9fc3RyaW5nW2ldKTsKKworCWZwcmludGYoZm91dCwgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAqL1xuIik7CisJZnByaW50Zihmb3V0LCAiI2lmbmRlZiBfU0VMSU5VWF9GTEFTS19IX1xuI2RlZmluZSBfU0VMSU5VWF9GTEFTS19IX1xuXG4iKTsKKworCWZvciAoaSA9IDA7IHNlY2NsYXNzX21hcFtpXS5uYW1lOyBpKyspIHsKKwkJc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgKm1hcCA9ICZzZWNjbGFzc19tYXBbaV07CisJCWZwcmludGYoZm91dCwgIiNkZWZpbmUgU0VDQ0xBU1NfJXMiLCBtYXAtPm5hbWUpOworCQlmb3IgKGogPSAwOyBqIDwgbWF4KDEsIDQwIC0gc3RybGVuKG1hcC0+bmFtZSkpOyBqKyspCisJCQlmcHJpbnRmKGZvdXQsICIgIik7CisJCWZwcmludGYoZm91dCwgIiUyZFxuIiwgaSsxKTsKKwl9CisKKwlmcHJpbnRmKGZvdXQsICJcbiIpOworCisJZm9yIChpID0gMTsgaSA8IGlzaWRzX2xlbjsgaSsrKSB7CisJCWNoYXIgKnMgPSBpbml0aWFsX3NpZF90b19zdHJpbmdbaV07CisJCWZwcmludGYoZm91dCwgIiNkZWZpbmUgU0VDSU5JVFNJRF8lcyIsIHMpOworCQlmb3IgKGogPSAwOyBqIDwgbWF4KDEsIDQwIC0gc3RybGVuKHMpKTsgaisrKQorCQkJZnByaW50Zihmb3V0LCAiICIpOworCQlmcHJpbnRmKGZvdXQsICIlMmRcbiIsIGkpOworCX0KKwlmcHJpbnRmKGZvdXQsICJcbiNkZWZpbmUgU0VDSU5JVFNJRF9OVU0gJWRcbiIsIGktMSk7CisJZnByaW50Zihmb3V0LCAiXG4jZW5kaWZcbiIpOworCWZjbG9zZShmb3V0KTsKKworCWZvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworCWlmICghZm91dCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nOiAgJXNcbiIsCisJCQlhcmd2WzJdLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDQpOworCX0KKworCWZwcmludGYoZm91dCwgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAqL1xuIik7CisJZnByaW50Zihmb3V0LCAiI2lmbmRlZiBfU0VMSU5VWF9BVl9QRVJNSVNTSU9OU19IX1xuI2RlZmluZSBfU0VMSU5VWF9BVl9QRVJNSVNTSU9OU19IX1xuXG4iKTsKKworCWZvciAoaSA9IDA7IHNlY2NsYXNzX21hcFtpXS5uYW1lOyBpKyspIHsKKwkJc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgKm1hcCA9ICZzZWNjbGFzc19tYXBbaV07CisJCWZvciAoaiA9IDA7IG1hcC0+cGVybXNbal07IGorKykgeworCQkJZnByaW50Zihmb3V0LCAiI2RlZmluZSAlc19fJXMiLCBtYXAtPm5hbWUsCisJCQkJbWFwLT5wZXJtc1tqXSk7CisJCQlmb3IgKGsgPSAwOyBrIDwgbWF4KDEsIDQwIC0gc3RybGVuKG1hcC0+bmFtZSkgLSBzdHJsZW4obWFwLT5wZXJtc1tqXSkpOyBrKyspCisJCQkJZnByaW50Zihmb3V0LCAiICIpOworCQkJZnByaW50Zihmb3V0LCAiMHglMDh4VUxcbiIsICgxPDxqKSk7CisJCX0KKwl9CisKKwlmcHJpbnRmKGZvdXQsICJcbiNlbmRpZlxuIik7CisJZmNsb3NlKGZvdXQpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL3NlbGludXgvbWRwL21kcC5jIGIvc2NyaXB0cy9zZWxpbnV4L21kcC9tZHAuYwppbmRleCBiNGNlZDg1Li42MmIzNGNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL3NlbGludXgvbWRwL21kcC5jCisrKyBiL3NjcmlwdHMvc2VsaW51eC9tZHAvbWRwLmMKQEAgLTI5LDg2ICsyOSwyNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiZmxhc2suaCIKLQogc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqbmFtZSkKIHsKIAlwcmludGYoInVzYWdlOiAlcyBbLW1dIHBvbGljeV9maWxlIGNvbnRleHRfZmlsZVxuIiwgbmFtZSk7CiAJZXhpdCgxKTsKIH0KIAotc3RhdGljIHZvaWQgZmluZF9jb21tb25fbmFtZShjaGFyICpjbmFtZSwgY2hhciAqZGVzdCwgaW50IGxlbikKLXsKLQljaGFyICpzdGFydCwgKmVuZDsKLQotCXN0YXJ0ID0gc3RyY2hyKGNuYW1lLCAnXycpKzE7Ci0JZW5kID0gc3RyY2hyKHN0YXJ0LCAnXycpOwotCWlmICghc3RhcnQgfHwgIWVuZCB8fCBzdGFydC1jbmFtZSA+IGxlbiB8fCBlbmQtc3RhcnQgPiBsZW4pIHsKLQkJcHJpbnRmKCJFcnJvciB3aXRoIGNvbW1vbnMgZGVmaW5lc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCXN0cm5jcHkoZGVzdCwgc3RhcnQsIGVuZC1zdGFydCk7Ci0JZGVzdFtlbmQtc3RhcnRdID0gJ1wwJzsKLX0KLQotI2RlZmluZSBTXyh4KSB4LAotc3RhdGljIGNoYXIgKmNsYXNzbGlzdFtdID0gewotI2luY2x1ZGUgImNsYXNzX3RvX3N0cmluZy5oIgotCU5VTEwKKy8qIENsYXNzL3Blcm0gbWFwcGluZyBzdXBwb3J0ICovCitzdHJ1Y3Qgc2VjdXJpdHlfY2xhc3NfbWFwcGluZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpwZXJtc1tzaXplb2YodW5zaWduZWQpICogOCArIDFdOwogfTsKLSN1bmRlZiBTXwogCisjaW5jbHVkZSAiY2xhc3NtYXAuaCIKICNpbmNsdWRlICJpbml0aWFsX3NpZF90b19zdHJpbmcuaCIKIAotI2RlZmluZSBUQl8oeCkgY2hhciAqeFtdID0gewotI2RlZmluZSBURV8oeCkgTlVMTCB9OwotI2RlZmluZSBTXyh4KSB4LAotI2luY2x1ZGUgImNvbW1vbl9wZXJtX3RvX3N0cmluZy5oIgotI3VuZGVmIFRCXwotI3VuZGVmIFRFXwotI3VuZGVmIFNfCi0KLXN0cnVjdCBjb21tb24gewotCWNoYXIgKmNuYW1lOwotCWNoYXIgKipwZXJtczsKLX07Ci1zdHJ1Y3QgY29tbW9uIGNvbW1vbltdID0gewotI2RlZmluZSBUQl8oeCkgeyAjeCwgeCB9LAotI2RlZmluZSBTXyh4KQotI2RlZmluZSBURV8oeCkKLSNpbmNsdWRlICJjb21tb25fcGVybV90b19zdHJpbmcuaCIKLSN1bmRlZiBUQl8KLSN1bmRlZiBURV8KLSN1bmRlZiBTXwotfTsKLQotI2RlZmluZSBTXyh4LCB5LCB6KSB7eCwgI3l9LAotc3RydWN0IGF2X2luaGVyaXQgewotCWludCBjbGFzczsKLQljaGFyICpjb21tb247Ci19Owotc3RydWN0IGF2X2luaGVyaXQgYXZfaW5oZXJpdFtdID0gewotI2luY2x1ZGUgImF2X2luaGVyaXQuaCIKLX07Ci0jdW5kZWYgU18KLQotI2luY2x1ZGUgImF2X3Blcm1pc3Npb25zLmgiCi0jZGVmaW5lIFNfKHgsIHksIHopIHt4LCB5LCB6fSwKLXN0cnVjdCBhdl9wZXJtcyB7Ci0JaW50IGNsYXNzOwotCWludCBwZXJtX2k7Ci0JY2hhciAqcGVybV9zOwotfTsKLXN0cnVjdCBhdl9wZXJtcyBhdl9wZXJtc1tdID0gewotI2luY2x1ZGUgImF2X3Blcm1fdG9fc3RyaW5nLmgiCi19OwotI3VuZGVmIFNfCi0KIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJaW50IGksIGosIG1scyA9IDA7CisJaW50IGluaXRpYWxfc2lkX3RvX3N0cmluZ19sZW47CiAJY2hhciAqKmFyZywgKnBvbG91dCwgKmN0eG91dDsKLQlpbnQgY2xhc3NsaXN0X2xlbiwgaW5pdGlhbF9zaWRfdG9fc3RyaW5nX2xlbjsKKwogCUZJTEUgKmZvdXQ7CiAKIAlpZiAoYXJnYyA8IDMpCkBAIC0xMjcsNjQgKzY4LDI1IEBACiAJCXVzYWdlKGFyZ3ZbMF0pOwogCX0KIAotCWNsYXNzbGlzdF9sZW4gPSBzaXplb2YoY2xhc3NsaXN0KSAvIHNpemVvZihjaGFyICopOwogCS8qIHByaW50IG91dCB0aGUgY2xhc3NlcyAqLwotCWZvciAoaT0xOyBpIDwgY2xhc3NsaXN0X2xlbjsgaSsrKSB7Ci0JCWlmKGNsYXNzbGlzdFtpXSkKLQkJCWZwcmludGYoZm91dCwgImNsYXNzICVzXG4iLCBjbGFzc2xpc3RbaV0pOwotCQllbHNlCi0JCQlmcHJpbnRmKGZvdXQsICJjbGFzcyB1c2VyJWRcbiIsIGkpOwotCX0KKwlmb3IgKGkgPSAwOyBzZWNjbGFzc19tYXBbaV0ubmFtZTsgaSsrKQorCQlmcHJpbnRmKGZvdXQsICJjbGFzcyAlc1xuIiwgc2VjY2xhc3NfbWFwW2ldLm5hbWUpOwogCWZwcmludGYoZm91dCwgIlxuIik7CiAKIAlpbml0aWFsX3NpZF90b19zdHJpbmdfbGVuID0gc2l6ZW9mKGluaXRpYWxfc2lkX3RvX3N0cmluZykgLyBzaXplb2YgKGNoYXIgKik7CiAJLyogcHJpbnQgb3V0IHRoZSBzaWRzICovCi0JZm9yIChpPTE7IGkgPCBpbml0aWFsX3NpZF90b19zdHJpbmdfbGVuOyBpKyspCisJZm9yIChpID0gMTsgaSA8IGluaXRpYWxfc2lkX3RvX3N0cmluZ19sZW47IGkrKykKIAkJZnByaW50Zihmb3V0LCAic2lkICVzXG4iLCBpbml0aWFsX3NpZF90b19zdHJpbmdbaV0pOwogCWZwcmludGYoZm91dCwgIlxuIik7CiAKLQkvKiBwcmludCBvdXQgdGhlIGNvbW1vbnMgKi8KLQlmb3IgKGk9MDsgaTwgc2l6ZW9mKGNvbW1vbikvc2l6ZW9mKHN0cnVjdCBjb21tb24pOyBpKyspIHsKLQkJY2hhciBjbmFtZVsxMDFdOwotCQlmaW5kX2NvbW1vbl9uYW1lKGNvbW1vbltpXS5jbmFtZSwgY25hbWUsIDEwMCk7Ci0JCWNuYW1lWzEwMF0gPSAnXDAnOwotCQlmcHJpbnRmKGZvdXQsICJjb21tb24gJXNcbntcbiIsIGNuYW1lKTsKLQkJZm9yIChqPTA7IGNvbW1vbltpXS5wZXJtc1tqXTsgaisrKQotCQkJZnByaW50Zihmb3V0LCAiXHQlc1xuIiwgY29tbW9uW2ldLnBlcm1zW2pdKTsKLQkJZnByaW50Zihmb3V0LCAifVxuXG4iKTsKLQl9Ci0JZnByaW50Zihmb3V0LCAiXG4iKTsKLQogCS8qIHByaW50IG91dCB0aGUgY2xhc3MgcGVybWlzc2lvbnMgKi8KLQlmb3IgKGk9MTsgaSA8IGNsYXNzbGlzdF9sZW47IGkrKykgewotCQlpZiAoY2xhc3NsaXN0W2ldKSB7Ci0JCQlpbnQgZmlyc3RwZXJtID0gLTEsIG51bXBlcm1zID0gMDsKLQotCQkJZnByaW50Zihmb3V0LCAiY2xhc3MgJXNcbiIsIGNsYXNzbGlzdFtpXSk7Ci0JCQkvKiBkb2VzIGl0IGluaGVyaXQgZnJvbSBhIGNvbW1vbj8gKi8KLQkJCWZvciAoaj0wOyBqIDwgc2l6ZW9mKGF2X2luaGVyaXQpL3NpemVvZihzdHJ1Y3QgYXZfaW5oZXJpdCk7IGorKykKLQkJCQlpZiAoYXZfaW5oZXJpdFtqXS5jbGFzcyA9PSBpKQotCQkJCQlmcHJpbnRmKGZvdXQsICJpbmhlcml0cyAlc1xuIiwgYXZfaW5oZXJpdFtqXS5jb21tb24pOwotCi0JCQlmb3IgKGo9MDsgaiA8IHNpemVvZihhdl9wZXJtcykvc2l6ZW9mKHN0cnVjdCBhdl9wZXJtcyk7IGorKykgewotCQkJCWlmIChhdl9wZXJtc1tqXS5jbGFzcyA9PSBpKSB7Ci0JCQkJCWlmIChmaXJzdHBlcm0gPT0gLTEpCi0JCQkJCQlmaXJzdHBlcm0gPSBqOwotCQkJCQludW1wZXJtcysrOwotCQkJCX0KLQkJCX0KLQkJCWlmICghbnVtcGVybXMpIHsKLQkJCQlmcHJpbnRmKGZvdXQsICJcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlmcHJpbnRmKGZvdXQsICJ7XG4iKTsKLQkJCS8qIHByaW50IG91dCB0aGUgYXZfcGVybXMgKi8KLQkJCWZvciAoaj0wOyBqIDwgbnVtcGVybXM7IGorKykgewotCQkJCWZwcmludGYoZm91dCwgIlx0JXNcbiIsIGF2X3Blcm1zW2ZpcnN0cGVybStqXS5wZXJtX3MpOwotCQkJfQotCQkJZnByaW50Zihmb3V0LCAifVxuXG4iKTsKLQkJfQorCWZvciAoaSA9IDA7IHNlY2NsYXNzX21hcFtpXS5uYW1lOyBpKyspIHsKKwkJc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgKm1hcCA9ICZzZWNjbGFzc19tYXBbaV07CisJCWZwcmludGYoZm91dCwgImNsYXNzICVzXG4iLCBtYXAtPm5hbWUpOworCQlmcHJpbnRmKGZvdXQsICJ7XG4iKTsKKwkJZm9yIChqID0gMDsgbWFwLT5wZXJtc1tqXTsgaisrKQorCQkJZnByaW50Zihmb3V0LCAiXHQlc1xuIiwgbWFwLT5wZXJtc1tqXSk7CisJCWZwcmludGYoZm91dCwgIn1cblxuIik7CiAJfQogCWZwcmludGYoZm91dCwgIlxuIik7CiAKQEAgLTE5NywzMSArOTksMzQgQEAKIAkvKiB0eXBlcywgcm9sZXMsIGFuZCBhbGxvd3MgKi8KIAlmcHJpbnRmKGZvdXQsICJ0eXBlIGJhc2VfdDtcbiIpOwogCWZwcmludGYoZm91dCwgInJvbGUgYmFzZV9yIHR5cGVzIHsgYmFzZV90IH07XG4iKTsKLQlmb3IgKGk9MTsgaSA8IGNsYXNzbGlzdF9sZW47IGkrKykgewotCQlpZiAoY2xhc3NsaXN0W2ldKQotCQkJZnByaW50Zihmb3V0LCAiYWxsb3cgYmFzZV90IGJhc2VfdDolcyAqO1xuIiwgY2xhc3NsaXN0W2ldKTsKLQkJZWxzZQotCQkJZnByaW50Zihmb3V0LCAiYWxsb3cgYmFzZV90IGJhc2VfdDp1c2VyJWQgKjtcbiIsIGkpOwotCX0KKwlmb3IgKGkgPSAwOyBzZWNjbGFzc19tYXBbaV0ubmFtZTsgaSsrKQorCQlmcHJpbnRmKGZvdXQsICJhbGxvdyBiYXNlX3QgYmFzZV90OiVzICo7XG4iLAorCQkJc2VjY2xhc3NfbWFwW2ldLm5hbWUpOwogCWZwcmludGYoZm91dCwgInVzZXIgdXNlcl91IHJvbGVzIHsgYmFzZV9yIH07XG4iKTsKIAlmcHJpbnRmKGZvdXQsICJcbiIpOwogCiAJLyogZGVmYXVsdCBzaWRzICovCi0JZm9yIChpPTE7IGkgPCBpbml0aWFsX3NpZF90b19zdHJpbmdfbGVuOyBpKyspCisJZm9yIChpID0gMTsgaSA8IGluaXRpYWxfc2lkX3RvX3N0cmluZ19sZW47IGkrKykKIAkJZnByaW50Zihmb3V0LCAic2lkICVzIHVzZXJfdTpiYXNlX3I6YmFzZV90XG4iLCBpbml0aWFsX3NpZF90b19zdHJpbmdbaV0pOwogCWZwcmludGYoZm91dCwgIlxuIik7CiAKLQogCWZwcmludGYoZm91dCwgImZzX3VzZV94YXR0ciBleHQyIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CiAJZnByaW50Zihmb3V0LCAiZnNfdXNlX3hhdHRyIGV4dDMgdXNlcl91OmJhc2VfcjpiYXNlX3Q7XG4iKTsKKwlmcHJpbnRmKGZvdXQsICJmc191c2VfeGF0dHIgZXh0NCB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCWZwcmludGYoZm91dCwgImZzX3VzZV94YXR0ciBqZnMgdXNlcl91OmJhc2VfcjpiYXNlX3Q7XG4iKTsKIAlmcHJpbnRmKGZvdXQsICJmc191c2VfeGF0dHIgeGZzIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CiAJZnByaW50Zihmb3V0LCAiZnNfdXNlX3hhdHRyIHJlaXNlcmZzIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CisJZnByaW50Zihmb3V0LCAiZnNfdXNlX3hhdHRyIGpmZnMyIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CisJZnByaW50Zihmb3V0LCAiZnNfdXNlX3hhdHRyIGdmczIgdXNlcl91OmJhc2VfcjpiYXNlX3Q7XG4iKTsKKwlmcHJpbnRmKGZvdXQsICJmc191c2VfeGF0dHIgbHVzdHJlIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CiAKKwlmcHJpbnRmKGZvdXQsICJmc191c2VfdGFzayBldmVudHBvbGxmcyB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCWZwcmludGYoZm91dCwgImZzX3VzZV90YXNrIHBpcGVmcyB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCWZwcmludGYoZm91dCwgImZzX3VzZV90YXNrIHNvY2tmcyB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCisJZnByaW50Zihmb3V0LCAiZnNfdXNlX3RyYW5zIG1xdWV1ZSB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCWZwcmludGYoZm91dCwgImZzX3VzZV90cmFucyBkZXZwdHMgdXNlcl91OmJhc2VfcjpiYXNlX3Q7XG4iKTsKKwlmcHJpbnRmKGZvdXQsICJmc191c2VfdHJhbnMgaHVnZXRsYmZzIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CiAJZnByaW50Zihmb3V0LCAiZnNfdXNlX3RyYW5zIHRtcGZzIHVzZXJfdTpiYXNlX3I6YmFzZV90O1xuIik7CiAJZnByaW50Zihmb3V0LCAiZnNfdXNlX3RyYW5zIHNobSB1c2VyX3U6YmFzZV9yOmJhc2VfdDtcbiIpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCBmYjM2M2NkLi4yMjZiOTU1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTkxLDI4ICs5MSw2IEBACiAJICBpbXBsZW1lbnQgcGF0aG5hbWUgYmFzZWQgYWNjZXNzIGNvbnRyb2xzLgogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIAotY29uZmlnIFNFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCi0JYm9vbCAiRmlsZSBQT1NJWCBDYXBhYmlsaXRpZXMiCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGZpbGVzeXN0ZW0gY2FwYWJpbGl0aWVzLCBhbGxvd2luZyB5b3UgdG8gZ2l2ZQotCSAgYmluYXJpZXMgYSBzdWJzZXQgb2Ygcm9vdCdzIHBvd2VycyB3aXRob3V0IHVzaW5nIHNldHVpZCAwLgotCi0JICBJZiBpbiBkb3VidCwgYW5zd2VyIE4uCi0KLWNvbmZpZyBTRUNVUklUWV9ST09UUExVRwotCWJvb2wgIlJvb3QgUGx1ZyBTdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCPXkgJiYgU0VDVVJJVFkKLQloZWxwCi0JICBUaGlzIGlzIGEgc2FtcGxlIExTTSBtb2R1bGUgdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGFzIHN1Y2guCi0JICBJdCBwcmV2ZW50cyBhbnkgcHJvZ3JhbXMgcnVubmluZyB3aXRoIGVnaWQgPT0gMCBpZiBhIHNwZWNpZmljCi0JICBVU0IgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCi0KLQkgIFNlZSA8aHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD02Mjc5PiBmb3IKLQkgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2R1bGUuCi0KLQkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCi0KIGNvbmZpZyBJTlRFTF9UWFQKIAlib29sICJFbmFibGUgSW50ZWwoUikgVHJ1c3RlZCBFeGVjdXRpb24gVGVjaG5vbG9neSAoSW50ZWwoUikgVFhUKSIKIAlkZXBlbmRzIG9uIEhBVkVfSU5URUxfVFhUCkBAIC0xNjUsNSArMTQzLDM3IEBACiAKIHNvdXJjZSBzZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKIAorY2hvaWNlCisJcHJvbXB0ICJEZWZhdWx0IHNlY3VyaXR5IG1vZHVsZSIKKwlkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpZiBTRUNVUklUWV9TRUxJTlVYCisJZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlmIFNFQ1VSSVRZX1NNQUNLCisJZGVmYXVsdCBERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpZiBTRUNVUklUWV9UT01PWU8KKwlkZWZhdWx0IERFRkFVTFRfU0VDVVJJVFlfREFDCisKKwloZWxwCisJICBTZWxlY3QgdGhlIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGlmIHRoZQorCSAga2VybmVsIHBhcmFtZXRlciBzZWN1cml0eT0gaXMgbm90IHNwZWNpZmllZC4KKworCWNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVgKKwkJYm9vbCAiU0VMaW51eCIgaWYgU0VDVVJJVFlfU0VMSU5VWD15CisKKwljb25maWcgREVGQVVMVF9TRUNVUklUWV9TTUFDSworCQlib29sICJTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCIgaWYgU0VDVVJJVFlfU01BQ0s9eQorCisJY29uZmlnIERFRkFVTFRfU0VDVVJJVFlfVE9NT1lPCisJCWJvb2wgIlRPTU9ZTyIgaWYgU0VDVVJJVFlfVE9NT1lPPXkKKworCWNvbmZpZyBERUZBVUxUX1NFQ1VSSVRZX0RBQworCQlib29sICJVbml4IERpc2NyZXRpb25hcnkgQWNjZXNzIENvbnRyb2xzIgorCitlbmRjaG9pY2UKKworY29uZmlnIERFRkFVTFRfU0VDVVJJVFkKKwlzdHJpbmcKKwlkZWZhdWx0ICJzZWxpbnV4IiBpZiBERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVgKKwlkZWZhdWx0ICJzbWFjayIgaWYgREVGQVVMVF9TRUNVUklUWV9TTUFDSworCWRlZmF1bHQgInRvbW95byIgaWYgREVGQVVMVF9TRUNVUklUWV9UT01PWU8KKwlkZWZhdWx0ICIiIGlmIERFRkFVTFRfU0VDVVJJVFlfREFDCisKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvTWFrZWZpbGUgYi9zZWN1cml0eS9NYWtlZmlsZQppbmRleCA5NWVjYzA2Li5iYjQ0ZTM1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9NYWtlZmlsZQpAQCAtMTgsNyArMTgsNiBAQAogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKQkJKz0gc21hY2svYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX0FVRElUKQkJCSs9IGxzbV9hdWRpdC5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKQkJKz0gdG9tb3lvL2J1aWx0LWluLm8KLW9iai0kKENPTkZJR19TRUNVUklUWV9ST09UUExVRykJCSs9IHJvb3RfcGx1Zy5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFVklDRSkJCSs9IGRldmljZV9jZ3JvdXAubwogCiAjIE9iamVjdCBpbnRlZ3JpdHkgZmlsZSBsaXN0cwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IGZjZTA3YTcuLjVjNzAwZTEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTMwOCw2ICszMDgsMjIgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBjYXBfcGF0aF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICBtb2RlX3QgbW9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXBfcGF0aF9jaG93bihzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwX3BhdGhfY2hyb290KHN0cnVjdCBwYXRoICpyb290KQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgY2FwX2ZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spCkBAIC00MDUsNyArNDIxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYXBfa2VybmVsX21vZHVsZV9yZXF1ZXN0KHZvaWQpCitzdGF0aWMgaW50IGNhcF9rZXJuZWxfbW9kdWxlX3JlcXVlc3QoY2hhciAqa21vZF9uYW1lKQogewogCXJldHVybiAwOwogfQpAQCAtOTc3LDYgKzk5Myw5IEBACiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcGF0aF9saW5rKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBwYXRoX3JlbmFtZSk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcGF0aF90cnVuY2F0ZSk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcGF0aF9jaG1vZCk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcGF0aF9jaG93bik7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcGF0aF9jaHJvb3QpOwogI2VuZGlmCiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgZmlsZV9wZXJtaXNzaW9uKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBmaWxlX2FsbG9jX3NlY3VyaXR5KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggZmUzMDc1MS4uZjgwMGZkYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb21tb24gY2FwYWJpbGl0aWVzLCBuZWVkZWQgYnkgY2FwYWJpbGl0eS5vIGFuZCByb290X3BsdWcubworLyogQ29tbW9uIGNhcGFiaWxpdGllcywgbmVlZGVkIGJ5IGNhcGFiaWxpdHkuby4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3Myw3ICsxNzMsNiBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBjYXBfaW5oX2lzX2NhcHBlZCh2b2lkKQogewotI2lmZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUwogCiAJLyogdGhleSBhcmUgc28gbGltaXRlZCB1bmxlc3MgdGhlIGN1cnJlbnQgdGFzayBoYXMgdGhlIENBUF9TRVRQQ0FQCiAJICogY2FwYWJpbGl0eQpAQCAtMTgxLDcgKzE4MCw2IEBACiAJaWYgKGNhcF9jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBDQVBfU0VUUENBUCwKIAkJCVNFQ1VSSVRZX0NBUF9BVURJVCkgPT0gMCkKIAkJcmV0dXJuIDA7Ci0jZW5kaWYKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjM5LDggKzIzNyw2IEBACiAJYnBybS0+Y2FwX2VmZmVjdGl2ZSA9IGZhbHNlOwogfQogCi0jaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCi0KIC8qKgogICogY2FwX2lub2RlX25lZWRfa2lsbHByaXYgLSBEZXRlcm1pbmUgaWYgaW5vZGUgY2hhbmdlIGFmZmVjdHMgcHJpdmlsZWdlcwogICogQGRlbnRyeTogVGhlIGlub2RlL2RlbnRyeSBpbiBiZWluZyBjaGFuZ2VkIHdpdGggY2hhbmdlIG1hcmtlZCBBVFRSX0tJTExfUFJJVgpAQCAtNDIxLDQ5ICs0MTcsNiBAQAogCXJldHVybiByYzsKIH0KIAotI2Vsc2UKLWludCBjYXBfaW5vZGVfbmVlZF9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYXBfaW5vZGVfa2lsbHByaXYoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiAwOwotfQotCi1pbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlzayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhICpjcHVfY2FwcykKLXsKLQltZW1zZXQoY3B1X2NhcHMsIDAsIHNpemVvZihzdHJ1Y3QgY3B1X3Zmc19jYXBfZGF0YSkpOwotIAlyZXR1cm4gLUVOT0RBVEE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9maWxlX2NhcHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgYm9vbCAqZWZmZWN0aXZlKQotewotCWJwcm1fY2xlYXJfY2FwcyhicHJtKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKgotICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBleGVjJ2luZyBwcm9jZXNzJ3MgbmV3IHBlcm1pdHRlZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlCi0gKiBsaW1pdGVkIHRvIGp1c3Qgd2hhdCBpdCBhbHJlYWR5IGhhcy4KLSAqCi0gKiBUaGlzIHByZXZlbnRzIHByb2Nlc3NlcyB0aGF0IGFyZSBiZWluZyBwdHJhY2VkIGZyb20gZ2FpbmluZyBhY2Nlc3MgdG8KLSAqIENBUF9TRVRQQ0FQLCB1bmxlc3MgdGhlIHByb2Nlc3MgdGhleSdyZSB0cmFjaW5nIGFscmVhZHkgaGFzIGl0LCBhbmQgdGhlCi0gKiBiaW5hcnkgdGhleSdyZSBleGVjdXRpbmcgaGFzIGZpbGVjYXBzIHRoYXQgZWxldmF0ZSBpdC4KLSAqCi0gKiAgUmV0dXJucyAxIGlmIHRoZXkgc2hvdWxkIGJlIGxpbWl0ZWQsIDAgaWYgdGhleSBhcmUgbm90LgotICovCi1zdGF0aWMgaW5saW5lIGludCBjYXBfbGltaXRfcHRyYWNlZF90YXJnZXQodm9pZCkKLXsKLSNpZm5kZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCi0JaWYgKGNhcGFibGUoQ0FQX1NFVFBDQVApKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCXJldHVybiAxOwotfQotCiAvKioKICAqIGNhcF9icHJtX3NldF9jcmVkcyAtIFNldCB1cCB0aGUgcHJvcG9zZWQgY3JlZGVudGlhbHMgZm9yIGV4ZWN2ZSgpLgogICogQGJwcm06IFRoZSBleGVjdXRpb24gcGFyYW1ldGVycywgaW5jbHVkaW5nIHRoZSBwcm9wb3NlZCBjcmVkcwpAQCAtNTIzLDkgKzQ3Niw4IEBACiAJCQluZXctPmV1aWQgPSBuZXctPnVpZDsKIAkJCW5ldy0+ZWdpZCA9IG5ldy0+Z2lkOwogCQl9Ci0JCWlmIChjYXBfbGltaXRfcHRyYWNlZF90YXJnZXQoKSkKLQkJCW5ldy0+Y2FwX3Blcm1pdHRlZCA9IGNhcF9pbnRlcnNlY3QobmV3LT5jYXBfcGVybWl0dGVkLAotCQkJCQkJCSAgIG9sZC0+Y2FwX3Blcm1pdHRlZCk7CisJCW5ldy0+Y2FwX3Blcm1pdHRlZCA9IGNhcF9pbnRlcnNlY3QobmV3LT5jYXBfcGVybWl0dGVkLAorCQkJCQkJICAgb2xkLT5jYXBfcGVybWl0dGVkKTsKIAl9CiAKIAluZXctPnN1aWQgPSBuZXctPmZzdWlkID0gbmV3LT5ldWlkOwpAQCAtNzM5LDcgKzY5MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMKIC8qCiAgKiBSYXRpb25hbGU6IGNvZGUgY2FsbGluZyB0YXNrX3NldHNjaGVkdWxlciwgdGFza19zZXRpb3ByaW8sIGFuZAogICogdGFza19zZXRuaWNlLCBhc3N1bWVzIHRoYXQKQEAgLTgyMCwyMiArNzcxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UKLWludCBjYXBfdGFza19zZXRzY2hlZHVsZXIgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHBvbGljeSwKLQkJCSAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqbHApCi17Ci0JcmV0dXJuIDA7Ci19Ci1pbnQgY2FwX3Rhc2tfc2V0aW9wcmlvIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpb3ByaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci1pbnQgY2FwX3Rhc2tfc2V0bmljZSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKioKICAqIGNhcF90YXNrX3ByY3RsIC0gSW1wbGVtZW50IHByb2Nlc3MgY29udHJvbCBmdW5jdGlvbnMgZm9yIHRoaXMgc2VjdXJpdHkgbW9kdWxlCiAgKiBAb3B0aW9uOiBUaGUgcHJvY2VzcyBjb250cm9sIGZ1bmN0aW9uIHJlcXVlc3RlZApAQCAtODY2LDcgKzgwMSw2IEBACiAJCWVycm9yID0gISFjYXBfcmFpc2VkKG5ldy0+Y2FwX2JzZXQsIGFyZzIpOwogCQlnb3RvIG5vX2NoYW5nZTsKIAotI2lmZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUwogCWNhc2UgUFJfQ0FQQlNFVF9EUk9QOgogCQllcnJvciA9IGNhcF9wcmN0bF9kcm9wKG5ldywgYXJnMik7CiAJCWlmIChlcnJvciA8IDApCkBAIC05MTcsOCArODUxLDYgQEAKIAkJZXJyb3IgPSBuZXctPnNlY3VyZWJpdHM7CiAJCWdvdG8gbm9fY2hhbmdlOwogCi0jZW5kaWYgLyogZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyAqLwotCiAJY2FzZSBQUl9HRVRfS0VFUENBUFM6CiAJCWlmIChpc3NlY3VyZShTRUNVUkVfS0VFUF9DQVBTKSkKIAkJCWVycm9yID0gMTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwppbmRleCA1M2Q5NzY0Li4zZDc4NDZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogY29uZmlnIElNQQogCWJvb2wgIkludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKSIKIAlkZXBlbmRzIG9uIEFDUEkKKwlkZXBlbmRzIG9uIFNFQ1VSSVRZCiAJc2VsZWN0IFNFQ1VSSVRZRlMKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19ITUFDCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKaW5kZXggYjhkZDY5My4uYTRlMmIxZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtNTgsMTEgKzU4LDExIEBACiAKIAlpZiAoIWltYV9pbml0aWFsaXplZCkKIAkJcmV0dXJuIGlpbnQ7Ci0JaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWludCA9IGttZW1fY2FjaGVfYWxsb2MoaWludF9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghaWludCkKIAkJcmV0dXJuIGlpbnQ7CiAKLQlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9GUyk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDJmYjI4ZWYuLjA2ZWM3MjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtODczLDcgKzg3Myw3IEBACiAJLyogb3RoZXJ3aXNlIHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgcmVjb3JkZWQgaW4gdGhlCiAJICogYXV0aG9yaXNhdGlvbiBrZXkgKGFueSBLRVlfU1BFQ18qX0tFWVJJTkcpICovCiAJaWYgKHJpbmdpZCA+PSBLRVlfU1BFQ19SRVFVRVNUT1JfS0VZUklORykgewotCQkqX2Rlc3Rfa2V5cmluZyA9IHJrYS0+ZGVzdF9rZXlyaW5nOworCQkqX2Rlc3Rfa2V5cmluZyA9IGtleV9nZXQocmthLT5kZXN0X2tleXJpbmcpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xzbV9hdWRpdC5jIGIvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKaW5kZXggM2JiOTBiNi4uNTFiZDBmZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKKysrIGIvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKQEAgLTM1NCw2ICszNTQsMTAgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZgorCWNhc2UgTFNNX0FVRElUX0RBVEFfS01PRDoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBrbW9kPSIpOworCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBhLT51Lmttb2RfbmFtZSk7CisJCWJyZWFrOwogCX0gLyogc3dpdGNoIChhLT50eXBlKSAqLwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9taW5fYWRkci5jIGIvc2VjdXJpdHkvbWluX2FkZHIuYwppbmRleCBjODQ0ZWVkLi5mYzQzYzlkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9taW5fYWRkci5jCisrKyBiL3NlY3VyaXR5L21pbl9hZGRyLmMKQEAgLTMzLDYgKzMzLDkgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCiAJcmV0ID0gcHJvY19kb3Vsb25ndmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAKIAl1cGRhdGVfbW1hcF9taW5fYWRkcigpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvcm9vdF9wbHVnLmMgYi9zZWN1cml0eS9yb290X3BsdWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3ZmZhNi4uMDAwMDAwMAotLS0gYS9zZWN1cml0eS9yb290X3BsdWcuYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBSb290IFBsdWcgc2FtcGxlIExTTSBtb2R1bGUKLSAqCi0gKiBPcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIGEgTGludXggSm91cm5hbC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAqCi0gKiBQcmV2ZW50cyBhbnkgcHJvZ3JhbXMgcnVubmluZyB3aXRoIGVnaWQgPT0gMCBpZiBhIHNwZWNpZmljIFVTQiBkZXZpY2UKLSAqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBzeXN0ZW0uICBZZXMsIGl0IGNhbiBiZSBnb3R0ZW4gYXJvdW5kLCBidXQgaXMgYQotICogbmljZSBzdGFydGluZyBwb2ludCBmb3IgcGVvcGxlIHRvIHBsYXkgd2l0aCwgYW5kIGxlYXJuIHRoZSBMU00KLSAqIGludGVyZmFjZS4KLSAqCi0gKiBJZiB5b3Ugd2FudCB0byB0dXJuIHRoaXMgaW50byBzb21ldGhpbmcgd2l0aCBhIHNlbWJsYW5jZSBvZiBzZWN1cml0eSwKLSAqIHlvdSBuZWVkIHRvIGhvb2sgdGhlIHRhc2tfKiBmdW5jdGlvbnMgYWxzby4KLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD02Mjc5IGZvciBtb3JlIGluZm9ybWF0aW9uCi0gKiBhYm91dCB0aGlzIGNvZGUuCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCi0gKglMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotCi0vKiBkZWZhdWx0IGlzIGEgZ2VuZXJpYyB0eXBlIG9mIHVzYiB0byBzZXJpYWwgY29udmVydGVyICovCi1zdGF0aWMgaW50IHZlbmRvcl9pZCA9IDB4MDU1NzsKLXN0YXRpYyBpbnQgcHJvZHVjdF9pZCA9IDB4MjAwODsKLQotbW9kdWxlX3BhcmFtKHZlbmRvcl9pZCwgdWludCwgMDQwMCk7Ci1tb2R1bGVfcGFyYW0ocHJvZHVjdF9pZCwgdWludCwgMDQwMCk7Ci0KLS8qIHNob3VsZCB3ZSBwcmludCBvdXQgZGVidWcgbWVzc2FnZXMgKi8KLXN0YXRpYyBpbnQgZGVidWcgPSAwOwotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2MDApOwotCi0jZGVmaW5lIE1ZX05BTUUgInJvb3RfcGx1ZyIKLQotI2RlZmluZSByb290X2RiZyhmbXQsIGFyZy4uLikJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaWYgKGRlYnVnKQkJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlczogIiBmbXQgLAlcCi0JCQkJTVlfTkFNRSAsIF9fZnVuY19fICwgCVwKLQkJCQkjIyBhcmcpOwkJCVwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50IHJvb3RwbHVnX2Jwcm1fY2hlY2tfc2VjdXJpdHkgKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKLQotCXJvb3RfZGJnKCJmaWxlICVzLCBlX3VpZCA9ICVkLCBlX2dpZCA9ICVkXG4iLAotCQkgYnBybS0+ZmlsZW5hbWUsIGJwcm0tPmNyZWQtPmV1aWQsIGJwcm0tPmNyZWQtPmVnaWQpOwotCi0JaWYgKGJwcm0tPmNyZWQtPmVnaWQgPT0gMCkgewotCQlkZXYgPSB1c2JfZmluZF9kZXZpY2UodmVuZG9yX2lkLCBwcm9kdWN0X2lkKTsKLQkJaWYgKCFkZXYpIHsKLQkJCXJvb3RfZGJnKCJlX2dpZCA9IDAsIGFuZCBkZXZpY2Ugbm90IGZvdW5kLCAiCi0JCQkJICJ0YXNrIG5vdCBhbGxvd2VkIHRvIHJ1bi4uLlxuIik7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9Ci0JCXVzYl9wdXRfZGV2KGRldik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyByb290cGx1Z19zZWN1cml0eV9vcHMgPSB7Ci0JLmJwcm1fY2hlY2tfc2VjdXJpdHkgPQkJcm9vdHBsdWdfYnBybV9jaGVja19zZWN1cml0eSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJvb3RwbHVnX2luaXQgKHZvaWQpCi17Ci0JLyogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIHNlY3VyaXR5IGZyYW1ld29yayAqLwotCWlmIChyZWdpc3Rlcl9zZWN1cml0eSAoJnJvb3RwbHVnX3NlY3VyaXR5X29wcykpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gCi0JCQkiRmFpbHVyZSByZWdpc3RlcmluZyBSb290IFBsdWcgbW9kdWxlIHdpdGggdGhlIGtlcm5lbFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcHJpbnRrIChLRVJOX0lORk8gIlJvb3QgUGx1ZyBtb2R1bGUgaW5pdGlhbGl6ZWQsICIKLQkJInZlbmRvcl9pZCA9ICU0LjR4LCBwcm9kdWN0IGlkID0gJTQuNHhcbiIsIHZlbmRvcl9pZCwgcHJvZHVjdF9pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXNlY3VyaXR5X2luaXRjYWxsIChyb290cGx1Z19pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IGM0YzY3MzIuLjI0ZTA2MGIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYsOSArMTYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogLyogQm9vdC10aW1lIExTTSB1c2VyIGNob2ljZSAqLwotc3RhdGljIF9faW5pdGRhdGEgY2hhciBjaG9zZW5fbHNtW1NFQ1VSSVRZX05BTUVfTUFYICsgMV07CitzdGF0aWMgX19pbml0ZGF0YSBjaGFyIGNob3Nlbl9sc21bU0VDVVJJVFlfTkFNRV9NQVggKyAxXSA9CisJQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk7CiAKIC8qIHRoaW5ncyB0aGF0IGxpdmUgaW4gY2FwYWJpbGl0eS5jICovCiBleHRlcm4gc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgZGVmYXVsdF9zZWN1cml0eV9vcHM7CkBAIC03OSw4ICs4MSwxMCBAQAogICoKICAqIFJldHVybiB0cnVlIGlmOgogICoJLVRoZSBwYXNzZWQgTFNNIGlzIHRoZSBvbmUgY2hvc2VuIGJ5IHVzZXIgYXQgYm9vdCB0aW1lLAotICoJLW9yIHVzZXIgZGlkbid0IHNwZWNpZnkgYSBzcGVjaWZpYyBMU00gYW5kIHdlJ3JlIHRoZSBmaXJzdCB0byBhc2sKLSAqCSBmb3IgcmVnaXN0cmF0aW9uIHBlcm1pc3Npb24sCisgKgktb3IgdGhlIHBhc3NlZCBMU00gaXMgY29uZmlndXJlZCBhcyB0aGUgZGVmYXVsdCBhbmQgdGhlIHVzZXIgZGlkIG5vdAorICoJIGNob29zZSBhbiBhbHRlcm5hdGUgTFNNIGF0IGJvb3QgdGltZSwKKyAqCS1vciB0aGVyZSBpcyBubyBkZWZhdWx0IExTTSBzZXQgYW5kIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEKKyAqCSBzcGVjaWZpYyBMU00gYW5kIHdlJ3JlIHRoZSBmaXJzdCB0byBhc2sgZm9yIHJlZ2lzdHJhdGlvbiBwZXJtaXNzaW9uLAogICoJLW9yIHRoZSBwYXNzZWQgTFNNIGlzIGN1cnJlbnRseSBsb2FkZWQuCiAgKiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KICAqLwpAQCAtMjM1LDcgKzIzOSwxMiBAQAogCiBpbnQgc2VjdXJpdHlfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmJwcm1fY2hlY2tfc2VjdXJpdHkoYnBybSk7CisJaW50IHJldDsKKworCXJldCA9IHNlY3VyaXR5X29wcy0+YnBybV9jaGVja19zZWN1cml0eShicHJtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBpbWFfYnBybV9jaGVjayhicHJtKTsKIH0KIAogdm9pZCBzZWN1cml0eV9icHJtX2NvbW1pdHRpbmdfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKQEAgLTM1MiwxMiArMzYxLDIxIEBACiAKIGludCBzZWN1cml0eV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWludCByZXQ7CisKIAlpbm9kZS0+aV9zZWN1cml0eSA9IE5VTEw7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfYWxsb2Nfc2VjdXJpdHkoaW5vZGUpOworCXJldCA9ICBzZWN1cml0eV9vcHMtPmlub2RlX2FsbG9jX3NlY3VyaXR5KGlub2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGltYV9pbm9kZV9hbGxvYyhpbm9kZSk7CisJaWYgKHJldCkKKwkJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBzZWN1cml0eV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CisJaW1hX2lub2RlX2ZyZWUoaW5vZGUpOwogCXNlY3VyaXR5X29wcy0+aW5vZGVfZnJlZV9zZWN1cml0eShpbm9kZSk7CiB9CiAKQEAgLTQzNCw2ICs0NTIsMjYgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF90cnVuY2F0ZShwYXRoLCBsZW5ndGgsIHRpbWVfYXR0cnMpOwogfQorCitpbnQgc2VjdXJpdHlfcGF0aF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJbW9kZV90IG1vZGUpCit7CisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfY2htb2QoZGVudHJ5LCBtbnQsIG1vZGUpOworfQorCitpbnQgc2VjdXJpdHlfcGF0aF9jaG93bihzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCit7CisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkpCisJCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCitpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3Qoc3RydWN0IHBhdGggKnBhdGgpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF9jaHJvb3QocGF0aCk7Cit9CiAjZW5kaWYKIAogaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKQEAgLTYyOCw2ICs2NjYsOCBAQAogdm9pZCBzZWN1cml0eV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc2VjdXJpdHlfb3BzLT5maWxlX2ZyZWVfc2VjdXJpdHkoZmlsZSk7CisJaWYgKGZpbGUtPmZfZGVudHJ5KQorCQlpbWFfZmlsZV9mcmVlKGZpbGUpOwogfQogCiBpbnQgc2VjdXJpdHlfZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC02MzksNyArNjc5LDEyIEBACiAJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcl9vbmx5KQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmZpbGVfbW1hcChmaWxlLCByZXFwcm90LCBwcm90LCBmbGFncywgYWRkciwgYWRkcl9vbmx5KTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2VjdXJpdHlfb3BzLT5maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIGFkZHJfb25seSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKIH0KIAogaW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwKQEAgLTcxOSw5ICs3NjQsOSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMobmV3LCBpbm9kZSk7CiB9CiAKLWludCBzZWN1cml0eV9rZXJuZWxfbW9kdWxlX3JlcXVlc3Qodm9pZCkKK2ludCBzZWN1cml0eV9rZXJuZWxfbW9kdWxlX3JlcXVlc3QoY2hhciAqa21vZF9uYW1lKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPmtlcm5lbF9tb2R1bGVfcmVxdWVzdCgpOworCXJldHVybiBzZWN1cml0eV9vcHMtPmtlcm5lbF9tb2R1bGVfcmVxdWVzdChrbW9kX25hbWUpOwogfQogCiBpbnQgc2VjdXJpdHlfdGFza19zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC8uZ2l0aWdub3JlIGIvc2VjdXJpdHkvc2VsaW51eC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTA0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9zZWxpbnV4Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACithdl9wZXJtaXNzaW9ucy5oCitmbGFzay5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQppbmRleCBkNDdmYzVlLi5mMDEzOTgyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKQEAgLTE4LDUgKzE4LDEzIEBACiAKIHNlbGludXgtJChDT05GSUdfTkVUTEFCRUwpICs9IG5ldGxhYmVsLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1Jc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlCitFWFRSQV9DRkxBR1MgKz0gLUlzZWN1cml0eS9zZWxpbnV4IC1Jc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlCiAKKyQob2JqKS9hdmMubzogJChvYmopL2ZsYXNrLmgKKworcXVpZXRfY21kX2ZsYXNrID0gR0VOICAgICAkKG9iaikvZmxhc2suaCAkKG9iaikvYXZfcGVybWlzc2lvbnMuaAorICAgICAgY21kX2ZsYXNrID0gc2NyaXB0cy9zZWxpbnV4L2dlbmhlYWRlcnMvZ2VuaGVhZGVycyAkKG9iaikvZmxhc2suaCAkKG9iaikvYXZfcGVybWlzc2lvbnMuaAorCit0YXJnZXRzICs9IGZsYXNrLmgKKyQob2JqKS9mbGFzay5oOiAkKHNyYykvaW5jbHVkZS9jbGFzc21hcC5oIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZmxhc2spCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBiNGI1ZGExLi5mMmRkZTI2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTMxLDQzICszMSw3IEBACiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJhdmNfc3MuaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdl9wZXJtX3RvX3N0cmluZyBhdl9wZXJtX3RvX3N0cmluZ1tdID0gewotI2RlZmluZSBTXyhjLCB2LCBzKSB7IGMsIHYsIHMgfSwKLSNpbmNsdWRlICJhdl9wZXJtX3RvX3N0cmluZy5oIgotI3VuZGVmIFNfCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqY2xhc3NfdG9fc3RyaW5nW10gPSB7Ci0jZGVmaW5lIFNfKHMpIHMsCi0jaW5jbHVkZSAiY2xhc3NfdG9fc3RyaW5nLmgiCi0jdW5kZWYgU18KLX07Ci0KLSNkZWZpbmUgVEJfKHMpIHN0YXRpYyBjb25zdCBjaGFyICpzW10gPSB7Ci0jZGVmaW5lIFRFXyhzKSB9OwotI2RlZmluZSBTXyhzKSBzLAotI2luY2x1ZGUgImNvbW1vbl9wZXJtX3RvX3N0cmluZy5oIgotI3VuZGVmIFRCXwotI3VuZGVmIFRFXwotI3VuZGVmIFNfCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXZfaW5oZXJpdCBhdl9pbmhlcml0W10gPSB7Ci0jZGVmaW5lIFNfKGMsIGksIGIpIHsJLnRjbGFzcyA9IGMsXAotCQkJLmNvbW1vbl9wdHMgPSBjb21tb25fIyNpIyNfcGVybV90b19zdHJpbmcsXAotCQkJLmNvbW1vbl9iYXNlID0gIGIgfSwKLSNpbmNsdWRlICJhdl9pbmhlcml0LmgiCi0jdW5kZWYgU18KLX07Ci0KLWNvbnN0IHN0cnVjdCBzZWxpbnV4X2NsYXNzX3Blcm0gc2VsaW51eF9jbGFzc19wZXJtID0gewotCS5hdl9wZXJtX3RvX3N0cmluZyA9IGF2X3Blcm1fdG9fc3RyaW5nLAotCS5hdl9wdHNfbGVuID0gQVJSQVlfU0laRShhdl9wZXJtX3RvX3N0cmluZyksCi0JLmNsYXNzX3RvX3N0cmluZyA9IGNsYXNzX3RvX3N0cmluZywKLQkuY3RzX2xlbiA9IEFSUkFZX1NJWkUoY2xhc3NfdG9fc3RyaW5nKSwKLQkuYXZfaW5oZXJpdCA9IGF2X2luaGVyaXQsCi0JLmF2X2luaGVyaXRfbGVuID0gQVJSQVlfU0laRShhdl9pbmhlcml0KQotfTsKKyNpbmNsdWRlICJjbGFzc21hcC5oIgogCiAjZGVmaW5lIEFWQ19DQUNIRV9TTE9UUwkJCTUxMgogI2RlZmluZSBBVkNfREVGX0NBQ0hFX1RIUkVTSE9MRAkJNTEyCkBAIC0xMzksNTIgKzEwMywyOCBAQAogICovCiBzdGF0aWMgdm9pZCBhdmNfZHVtcF9hdihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgdTE2IHRjbGFzcywgdTMyIGF2KQogewotCWNvbnN0IGNoYXIgKipjb21tb25fcHRzID0gTlVMTDsKLQl1MzIgY29tbW9uX2Jhc2UgPSAwOwotCWludCBpLCBpMiwgcGVybTsKKwljb25zdCBjaGFyICoqcGVybXM7CisJaW50IGksIHBlcm07CiAKIAlpZiAoYXYgPT0gMCkgewogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG51bGwiKTsKIAkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF2X2luaGVyaXQpOyBpKyspIHsKLQkJaWYgKGF2X2luaGVyaXRbaV0udGNsYXNzID09IHRjbGFzcykgewotCQkJY29tbW9uX3B0cyA9IGF2X2luaGVyaXRbaV0uY29tbW9uX3B0czsKLQkJCWNvbW1vbl9iYXNlID0gYXZfaW5oZXJpdFtpXS5jb21tb25fYmFzZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCXBlcm1zID0gc2VjY2xhc3NfbWFwW3RjbGFzcy0xXS5wZXJtczsKIAogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgeyIpOwogCWkgPSAwOwogCXBlcm0gPSAxOwotCXdoaWxlIChwZXJtIDwgY29tbW9uX2Jhc2UpIHsKLQkJaWYgKHBlcm0gJiBhdikgewotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiAlcyIsIGNvbW1vbl9wdHNbaV0pOworCXdoaWxlIChpIDwgKHNpemVvZihhdikgKiA4KSkgeworCQlpZiAoKHBlcm0gJiBhdikgJiYgcGVybXNbaV0pIHsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgJXMiLCBwZXJtc1tpXSk7CiAJCQlhdiAmPSB+cGVybTsKIAkJfQogCQlpKys7CiAJCXBlcm0gPDw9IDE7CiAJfQogCi0Jd2hpbGUgKGkgPCBzaXplb2YoYXYpICogOCkgewotCQlpZiAocGVybSAmIGF2KSB7Ci0JCQlmb3IgKGkyID0gMDsgaTIgPCBBUlJBWV9TSVpFKGF2X3Blcm1fdG9fc3RyaW5nKTsgaTIrKykgewotCQkJCWlmICgoYXZfcGVybV90b19zdHJpbmdbaTJdLnRjbGFzcyA9PSB0Y2xhc3MpICYmCi0JCQkJICAgIChhdl9wZXJtX3RvX3N0cmluZ1tpMl0udmFsdWUgPT0gcGVybSkpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGkyIDwgQVJSQVlfU0laRShhdl9wZXJtX3RvX3N0cmluZykpIHsKLQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzIiwKLQkJCQkJCSBhdl9wZXJtX3RvX3N0cmluZ1tpMl0ubmFtZSk7Ci0JCQkJYXYgJj0gfnBlcm07Ci0JCQl9Ci0JCX0KLQkJaSsrOwotCQlwZXJtIDw8PSAxOwotCX0KLQogCWlmIChhdikKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiAweCV4IiwgYXYpOwogCkBAIC0yMTksOCArMTU5LDggQEAKIAkJa2ZyZWUoc2NvbnRleHQpOwogCX0KIAotCUJVR19PTih0Y2xhc3MgPj0gQVJSQVlfU0laRShjbGFzc190b19zdHJpbmcpIHx8ICFjbGFzc190b19zdHJpbmdbdGNsYXNzXSk7Ci0JYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiB0Y2xhc3M9JXMiLCBjbGFzc190b19zdHJpbmdbdGNsYXNzXSk7CisJQlVHX09OKHRjbGFzcyA+PSBBUlJBWV9TSVpFKHNlY2NsYXNzX21hcCkpOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgdGNsYXNzPSVzIiwgc2VjY2xhc3NfbWFwW3RjbGFzcy0xXS5uYW1lKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggYmIyMzBkNS4uYzk2ZDYzZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtOTEsNyArOTEsNiBAQAogCiAjZGVmaW5lIE5VTV9TRUxfTU5UX09QVFMgNQogCi1leHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKIGV4dGVybiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2VjdXJpdHlfb3BzOwogCkBAIC0zMzM4LDkgKzMzMzcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9tb2R1bGVfcmVxdWVzdCh2b2lkKQorc3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9tb2R1bGVfcmVxdWVzdChjaGFyICprbW9kX25hbWUpCiB7Ci0JcmV0dXJuIHRhc2tfaGFzX3N5c3RlbShjdXJyZW50LCBTWVNURU1fX01PRFVMRV9SRVFVRVNUKTsKKwl1MzIgc2lkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKKworCXNpZCA9IHRhc2tfc2lkKGN1cnJlbnQpOworCisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEtNT0QpOworCWFkLnUua21vZF9uYW1lID0ga21vZF9uYW1lOworCisJcmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIFNFQ0lOSVRTSURfS0VSTkVMLCBTRUNDTEFTU19TWVNURU0sCisJCQkgICAgU1lTVEVNX19NT0RVTEVfUkVRVUVTVCwgJmFkKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cGdpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHBpZF90IHBnaWQpCkBAIC00NzE0LDEwICs0NzIyLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uID49IFBPTElDWURCX1ZFUlNJT05fTkxDTEFTUykKLQkJZXJyID0gc2VsaW51eF9ubG1zZ19wZXJtKHNrLCBza2IpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc2VsaW51eF9ubG1zZ19wZXJtKHNrLCBza2IpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXBhYmlsaXR5KQpAQCAtNTgzMCwxMiArNTgzNSwxMiBAQAogCXNlbGludXhfZGlzYWJsZWQgPSAxOwogCXNlbGludXhfZW5hYmxlZCA9IDA7CiAKLQkvKiBUcnkgdG8gZGVzdHJveSB0aGUgYXZjIG5vZGUgY2FjaGUgKi8KLQlhdmNfZGlzYWJsZSgpOwotCiAJLyogUmVzZXQgc2VjdXJpdHlfb3BzIHRvIHRoZSBzZWNvbmRhcnkgbW9kdWxlLCBkdW1teSBvciBjYXBhYmlsaXR5LiAqLwogCXNlY3VyaXR5X29wcyA9IHNlY29uZGFyeV9vcHM7CiAKKwkvKiBUcnkgdG8gZGVzdHJveSB0aGUgYXZjIG5vZGUgY2FjaGUgKi8KKwlhdmNfZGlzYWJsZSgpOworCiAJLyogVW5yZWdpc3RlciBuZXRmaWx0ZXIgaG9va3MuICovCiAJc2VsaW51eF9uZl9pcF9leGl0KCk7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfaW5oZXJpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmVkY2Q3Li4wMDAwMDAwCi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuICBEbyBub3QgZWRpdC4gKi8KLSAgIFNfKFNFQ0NMQVNTX0RJUiwgZmlsZSwgMHgwMDAyMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfRklMRSwgZmlsZSwgMHgwMDAyMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfTE5LX0ZJTEUsIGZpbGUsIDB4MDAwMjAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBmaWxlLCAweDAwMDIwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19CTEtfRklMRSwgZmlsZSwgMHgwMDAyMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfU09DS19GSUxFLCBmaWxlLCAweDAwMDIwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIGZpbGUsIDB4MDAwMjAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX1VEUF9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfUkFXSVBfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX1BBQ0tFVF9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfS0VZX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfVU5JWF9ER1JBTV9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfVFVOX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19JUEMsIGlwYywgMHgwMDAwMDIwMFVMKQotICAgU18oU0VDQ0xBU1NfU0VNLCBpcGMsIDB4MDAwMDAyMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX01TR1EsIGlwYywgMHgwMDAwMDIwMFVMKQotICAgU18oU0VDQ0xBU1NfU0hNLCBpcGMsIDB4MDAwMDAyMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfUk9VVEVfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfRklSRVdBTExfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfVENQRElBR19TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfTkVUTElOS19ORkxPR19TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfTkVUTElOS19YRlJNX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX1NFTElOVVhfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfRE5SVF9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQotICAgU18oU0VDQ0xBU1NfQVBQTEVUQUxLX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCi0gICBTXyhTRUNDTEFTU19EQ0NQX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjY4M2FkLi4wMDAwMDAwCi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAqLwotICAgU18oU0VDQ0xBU1NfRklMRVNZU1RFTSwgRklMRVNZU1RFTV9fTU9VTlQsICJtb3VudCIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19SRU1PVU5ULCAicmVtb3VudCIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19VTk1PVU5ULCAidW5tb3VudCIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19HRVRBVFRSLCAiZ2V0YXR0ciIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19SRUxBQkVMRlJPTSwgInJlbGFiZWxmcm9tIikKLSAgIFNfKFNFQ0NMQVNTX0ZJTEVTWVNURU0sIEZJTEVTWVNURU1fX1JFTEFCRUxUTywgInJlbGFiZWx0byIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19UUkFOU0lUSU9OLCAidHJhbnNpdGlvbiIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19BU1NPQ0lBVEUsICJhc3NvY2lhdGUiKQotICAgU18oU0VDQ0xBU1NfRklMRVNZU1RFTSwgRklMRVNZU1RFTV9fUVVPVEFNT0QsICJxdW90YW1vZCIpCi0gICBTXyhTRUNDTEFTU19GSUxFU1lTVEVNLCBGSUxFU1lTVEVNX19RVU9UQUdFVCwgInF1b3RhZ2V0IikKLSAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19BRERfTkFNRSwgImFkZF9uYW1lIikKLSAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19SRU1PVkVfTkFNRSwgInJlbW92ZV9uYW1lIikKLSAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19SRVBBUkVOVCwgInJlcGFyZW50IikKLSAgIFNfKFNFQ0NMQVNTX0RJUiwgRElSX19TRUFSQ0gsICJzZWFyY2giKQotICAgU18oU0VDQ0xBU1NfRElSLCBESVJfX1JNRElSLCAicm1kaXIiKQotICAgU18oU0VDQ0xBU1NfRElSLCBESVJfX09QRU4sICJvcGVuIikKLSAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VYRUNVVEVfTk9fVFJBTlMsICJleGVjdXRlX25vX3RyYW5zIikKLSAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VOVFJZUE9JTlQsICJlbnRyeXBvaW50IikKLSAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX0VYRUNNT0QsICJleGVjbW9kIikKLSAgIFNfKFNFQ0NMQVNTX0ZJTEUsIEZJTEVfX09QRU4sICJvcGVuIikKLSAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ1VURV9OT19UUkFOUywgImV4ZWN1dGVfbm9fdHJhbnMiKQotICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19FTlRSWVBPSU5ULCAiZW50cnlwb2ludCIpCi0gICBTXyhTRUNDTEFTU19DSFJfRklMRSwgQ0hSX0ZJTEVfX0VYRUNNT0QsICJleGVjbW9kIikKLSAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fT1BFTiwgIm9wZW4iKQotICAgU18oU0VDQ0xBU1NfQkxLX0ZJTEUsIEJMS19GSUxFX19PUEVOLCAib3BlbiIpCi0gICBTXyhTRUNDTEFTU19TT0NLX0ZJTEUsIFNPQ0tfRklMRV9fT1BFTiwgIm9wZW4iKQotICAgU18oU0VDQ0xBU1NfRklGT19GSUxFLCBGSUZPX0ZJTEVfX09QRU4sICJvcGVuIikKLSAgIFNfKFNFQ0NMQVNTX0ZELCBGRF9fVVNFLCAidXNlIikKLSAgIFNfKFNFQ0NMQVNTX1RDUF9TT0NLRVQsIFRDUF9TT0NLRVRfX0NPTk5FQ1RUTywgImNvbm5lY3R0byIpCi0gICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBUQ1BfU09DS0VUX19ORVdDT05OLCAibmV3Y29ubiIpCi0gICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBUQ1BfU09DS0VUX19BQ0NFUFRGUk9NLCAiYWNjZXB0ZnJvbSIpCi0gICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBUQ1BfU09DS0VUX19OT0RFX0JJTkQsICJub2RlX2JpbmQiKQotICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fTkFNRV9DT05ORUNULCAibmFtZV9jb25uZWN0IikKLSAgIFNfKFNFQ0NMQVNTX1VEUF9TT0NLRVQsIFVEUF9TT0NLRVRfX05PREVfQklORCwgIm5vZGVfYmluZCIpCi0gICBTXyhTRUNDTEFTU19SQVdJUF9TT0NLRVQsIFJBV0lQX1NPQ0tFVF9fTk9ERV9CSU5ELCAibm9kZV9iaW5kIikKLSAgIFNfKFNFQ0NMQVNTX05PREUsIE5PREVfX1RDUF9SRUNWLCAidGNwX3JlY3YiKQotICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fVENQX1NFTkQsICJ0Y3Bfc2VuZCIpCi0gICBTXyhTRUNDTEFTU19OT0RFLCBOT0RFX19VRFBfUkVDViwgInVkcF9yZWN2IikKLSAgIFNfKFNFQ0NMQVNTX05PREUsIE5PREVfX1VEUF9TRU5ELCAidWRwX3NlbmQiKQotICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkFXSVBfUkVDViwgInJhd2lwX3JlY3YiKQotICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkFXSVBfU0VORCwgInJhd2lwX3NlbmQiKQotICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fRU5GT1JDRV9ERVNULCAiZW5mb3JjZV9kZXN0IikKLSAgIFNfKFNFQ0NMQVNTX05PREUsIE5PREVfX0RDQ1BfUkVDViwgImRjY3BfcmVjdiIpCi0gICBTXyhTRUNDTEFTU19OT0RFLCBOT0RFX19EQ0NQX1NFTkQsICJkY2NwX3NlbmQiKQotICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkVDVkZST00sICJyZWN2ZnJvbSIpCi0gICBTXyhTRUNDTEFTU19OT0RFLCBOT0RFX19TRU5EVE8sICJzZW5kdG8iKQotICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19UQ1BfUkVDViwgInRjcF9yZWN2IikKLSAgIFNfKFNFQ0NMQVNTX05FVElGLCBORVRJRl9fVENQX1NFTkQsICJ0Y3Bfc2VuZCIpCi0gICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX1VEUF9SRUNWLCAidWRwX3JlY3YiKQotICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19VRFBfU0VORCwgInVkcF9zZW5kIikKLSAgIFNfKFNFQ0NMQVNTX05FVElGLCBORVRJRl9fUkFXSVBfUkVDViwgInJhd2lwX3JlY3YiKQotICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19SQVdJUF9TRU5ELCAicmF3aXBfc2VuZCIpCi0gICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX0RDQ1BfUkVDViwgImRjY3BfcmVjdiIpCi0gICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX0RDQ1BfU0VORCwgImRjY3Bfc2VuZCIpCi0gICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX0lOR1JFU1MsICJpbmdyZXNzIikKLSAgIFNfKFNFQ0NMQVNTX05FVElGLCBORVRJRl9fRUdSRVNTLCAiZWdyZXNzIikKLSAgIFNfKFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCwgVU5JWF9TVFJFQU1fU09DS0VUX19DT05ORUNUVE8sICJjb25uZWN0dG8iKQotICAgU18oU0VDQ0xBU1NfVU5JWF9TVFJFQU1fU09DS0VULCBVTklYX1NUUkVBTV9TT0NLRVRfX05FV0NPTk4sICJuZXdjb25uIikKLSAgIFNfKFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCwgVU5JWF9TVFJFQU1fU09DS0VUX19BQ0NFUFRGUk9NLCAiYWNjZXB0ZnJvbSIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19GT1JLLCAiZm9yayIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19UUkFOU0lUSU9OLCAidHJhbnNpdGlvbiIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdDSExELCAic2lnY2hsZCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdLSUxMLCAic2lna2lsbCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdTVE9QLCAic2lnc3RvcCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdOVUxMLCAic2lnbnVsbCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdOQUwsICJzaWduYWwiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAicHRyYWNlIikKLSAgIFNfKFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX0dFVFNDSEVELCAiZ2V0c2NoZWQiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VUU0NIRUQsICJzZXRzY2hlZCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19HRVRTRVNTSU9OLCAiZ2V0c2Vzc2lvbiIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19HRVRQR0lELCAiZ2V0cGdpZCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TRVRQR0lELCAic2V0cGdpZCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19HRVRDQVAsICJnZXRjYXAiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VUQ0FQLCAic2V0Y2FwIikKLSAgIFNfKFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1NIQVJFLCAic2hhcmUiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fR0VUQVRUUiwgImdldGF0dHIiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VURVhFQywgInNldGV4ZWMiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VURlNDUkVBVEUsICJzZXRmc2NyZWF0ZSIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19OT0FUU0VDVVJFLCAibm9hdHNlY3VyZSIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TSUdJTkgsICJzaWdpbmgiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VUUkxJTUlULCAic2V0cmxpbWl0IikKLSAgIFNfKFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1JMSU1JVElOSCwgInJsaW1pdGluaCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19EWU5UUkFOU0lUSU9OLCAiZHludHJhbnNpdGlvbiIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TRVRDVVJSRU5ULCAic2V0Y3VycmVudCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDTUVNLCAiZXhlY21lbSIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19FWEVDU1RBQ0ssICJleGVjc3RhY2siKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fRVhFQ0hFQVAsICJleGVjaGVhcCIpCi0gICBTXyhTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19TRVRLRVlDUkVBVEUsICJzZXRrZXljcmVhdGUiKQotICAgU18oU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fU0VUU09DS0NSRUFURSwgInNldHNvY2tjcmVhdGUiKQotICAgU18oU0VDQ0xBU1NfTVNHUSwgTVNHUV9fRU5RVUVVRSwgImVucXVldWUiKQotICAgU18oU0VDQ0xBU1NfTVNHLCBNU0dfX1NFTkQsICJzZW5kIikKLSAgIFNfKFNFQ0NMQVNTX01TRywgTVNHX19SRUNFSVZFLCAicmVjZWl2ZSIpCi0gICBTXyhTRUNDTEFTU19TSE0sIFNITV9fTE9DSywgImxvY2siKQotICAgU18oU0VDQ0xBU1NfU0VDVVJJVFksIFNFQ1VSSVRZX19DT01QVVRFX0FWLCAiY29tcHV0ZV9hdiIpCi0gICBTXyhTRUNDTEFTU19TRUNVUklUWSwgU0VDVVJJVFlfX0NPTVBVVEVfQ1JFQVRFLCAiY29tcHV0ZV9jcmVhdGUiKQotICAgU18oU0VDQ0xBU1NfU0VDVVJJVFksIFNFQ1VSSVRZX19DT01QVVRFX01FTUJFUiwgImNvbXB1dGVfbWVtYmVyIikKLSAgIFNfKFNFQ0NMQVNTX1NFQ1VSSVRZLCBTRUNVUklUWV9fQ0hFQ0tfQ09OVEVYVCwgImNoZWNrX2NvbnRleHQiKQotICAgU18oU0VDQ0xBU1NfU0VDVVJJVFksIFNFQ1VSSVRZX19MT0FEX1BPTElDWSwgImxvYWRfcG9saWN5IikKLSAgIFNfKFNFQ0NMQVNTX1NFQ1VSSVRZLCBTRUNVUklUWV9fQ09NUFVURV9SRUxBQkVMLCAiY29tcHV0ZV9yZWxhYmVsIikKLSAgIFNfKFNFQ0NMQVNTX1NFQ1VSSVRZLCBTRUNVUklUWV9fQ09NUFVURV9VU0VSLCAiY29tcHV0ZV91c2VyIikKLSAgIFNfKFNFQ0NMQVNTX1NFQ1VSSVRZLCBTRUNVUklUWV9fU0VURU5GT1JDRSwgInNldGVuZm9yY2UiKQotICAgU18oU0VDQ0xBU1NfU0VDVVJJVFksIFNFQ1VSSVRZX19TRVRCT09MLCAic2V0Ym9vbCIpCi0gICBTXyhTRUNDTEFTU19TRUNVUklUWSwgU0VDVVJJVFlfX1NFVFNFQ1BBUkFNLCAic2V0c2VjcGFyYW0iKQotICAgU18oU0VDQ0xBU1NfU0VDVVJJVFksIFNFQ1VSSVRZX19TRVRDSEVDS1JFUVBST1QsICJzZXRjaGVja3JlcXByb3QiKQotICAgU18oU0VDQ0xBU1NfU1lTVEVNLCBTWVNURU1fX0lQQ19JTkZPLCAiaXBjX2luZm8iKQotICAgU18oU0VDQ0xBU1NfU1lTVEVNLCBTWVNURU1fX1NZU0xPR19SRUFELCAic3lzbG9nX3JlYWQiKQotICAgU18oU0VDQ0xBU1NfU1lTVEVNLCBTWVNURU1fX1NZU0xPR19NT0QsICJzeXNsb2dfbW9kIikKLSAgIFNfKFNFQ0NMQVNTX1NZU1RFTSwgU1lTVEVNX19TWVNMT0dfQ09OU09MRSwgInN5c2xvZ19jb25zb2xlIikKLSAgIFNfKFNFQ0NMQVNTX1NZU1RFTSwgU1lTVEVNX19NT0RVTEVfUkVRVUVTVCwgIm1vZHVsZV9yZXF1ZXN0IikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX0NIT1dOLCAiY2hvd24iKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fREFDX09WRVJSSURFLCAiZGFjX292ZXJyaWRlIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX0RBQ19SRUFEX1NFQVJDSCwgImRhY19yZWFkX3NlYXJjaCIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19GT1dORVIsICJmb3duZXIiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fRlNFVElELCAiZnNldGlkIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX0tJTEwsICJraWxsIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX1NFVEdJRCwgInNldGdpZCIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19TRVRVSUQsICJzZXR1aWQiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU0VUUENBUCwgInNldHBjYXAiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fTElOVVhfSU1NVVRBQkxFLCAibGludXhfaW1tdXRhYmxlIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX05FVF9CSU5EX1NFUlZJQ0UsICJuZXRfYmluZF9zZXJ2aWNlIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX05FVF9CUk9BRENBU1QsICJuZXRfYnJvYWRjYXN0IikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX05FVF9BRE1JTiwgIm5ldF9hZG1pbiIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19ORVRfUkFXLCAibmV0X3JhdyIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19JUENfTE9DSywgImlwY19sb2NrIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX0lQQ19PV05FUiwgImlwY19vd25lciIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19TWVNfTU9EVUxFLCAic3lzX21vZHVsZSIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19TWVNfUkFXSU8sICJzeXNfcmF3aW8iKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU1lTX0NIUk9PVCwgInN5c19jaHJvb3QiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU1lTX1BUUkFDRSwgInN5c19wdHJhY2UiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU1lTX1BBQ0NULCAic3lzX3BhY2N0IikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX1NZU19BRE1JTiwgInN5c19hZG1pbiIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19TWVNfQk9PVCwgInN5c19ib290IikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX1NZU19OSUNFLCAic3lzX25pY2UiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU1lTX1JFU09VUkNFLCAic3lzX3Jlc291cmNlIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX1NZU19USU1FLCAic3lzX3RpbWUiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fU1lTX1RUWV9DT05GSUcsICJzeXNfdHR5X2NvbmZpZyIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19NS05PRCwgIm1rbm9kIikKLSAgIFNfKFNFQ0NMQVNTX0NBUEFCSUxJVFksIENBUEFCSUxJVFlfX0xFQVNFLCAibGVhc2UiKQotICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fQVVESVRfV1JJVEUsICJhdWRpdF93cml0ZSIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19BVURJVF9DT05UUk9MLCAiYXVkaXRfY29udHJvbCIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19TRVRGQ0FQLCAic2V0ZmNhcCIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZMiwgQ0FQQUJJTElUWTJfX01BQ19PVkVSUklERSwgIm1hY19vdmVycmlkZSIpCi0gICBTXyhTRUNDTEFTU19DQVBBQklMSVRZMiwgQ0FQQUJJTElUWTJfX01BQ19BRE1JTiwgIm1hY19hZG1pbiIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX1JPVVRFX1NPQ0tFVCwgTkVUTElOS19ST1VURV9TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfUk9VVEVfU09DS0VULCBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVCwgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfRklSRVdBTExfU09DS0VULCBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX1RDUERJQUdfU09DS0VULCBORVRMSU5LX1RDUERJQUdfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX1RDUERJQUdfU09DS0VULCBORVRMSU5LX1RDUERJQUdfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfWEZSTV9TT0NLRVQsIE5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfWEZSTV9TT0NLRVQsIE5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQotICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQotICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSwgIm5sbXNnX3JlbGF5IikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYsICJubG1zZ19yZWFkcHJpdiIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCwgIm5sbXNnX3R0eV9hdWRpdCIpCi0gICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKLSAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCi0gICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1NFTkRUTywgInNlbmR0byIpCi0gICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NLCAicmVjdmZyb20iKQotICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRVRDT05URVhULCAic2V0Y29udGV4dCIpCi0gICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1BPTE1BVENILCAicG9sbWF0Y2giKQotICAgU18oU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1NFTkQsICJzZW5kIikKLSAgIFNfKFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19SRUNWLCAicmVjdiIpCi0gICBTXyhTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fUkVMQUJFTFRPLCAicmVsYWJlbHRvIikKLSAgIFNfKFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19GTE9XX0lOLCAiZmxvd19pbiIpCi0gICBTXyhTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fRkxPV19PVVQsICJmbG93X291dCIpCi0gICBTXyhTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fRk9SV0FSRF9JTiwgImZvcndhcmRfaW4iKQotICAgU18oU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX0ZPUldBUkRfT1VULCAiZm9yd2FyZF9vdXQiKQotICAgU18oU0VDQ0xBU1NfS0VZLCBLRVlfX1ZJRVcsICJ2aWV3IikKLSAgIFNfKFNFQ0NMQVNTX0tFWSwgS0VZX19SRUFELCAicmVhZCIpCi0gICBTXyhTRUNDTEFTU19LRVksIEtFWV9fV1JJVEUsICJ3cml0ZSIpCi0gICBTXyhTRUNDTEFTU19LRVksIEtFWV9fU0VBUkNILCAic2VhcmNoIikKLSAgIFNfKFNFQ0NMQVNTX0tFWSwgS0VZX19MSU5LLCAibGluayIpCi0gICBTXyhTRUNDTEFTU19LRVksIEtFWV9fU0VUQVRUUiwgInNldGF0dHIiKQotICAgU18oU0VDQ0xBU1NfS0VZLCBLRVlfX0NSRUFURSwgImNyZWF0ZSIpCi0gICBTXyhTRUNDTEFTU19EQ0NQX1NPQ0tFVCwgRENDUF9TT0NLRVRfX05PREVfQklORCwgIm5vZGVfYmluZCIpCi0gICBTXyhTRUNDTEFTU19EQ0NQX1NPQ0tFVCwgRENDUF9TT0NLRVRfX05BTUVfQ09OTkVDVCwgIm5hbWVfY29ubmVjdCIpCi0gICBTXyhTRUNDTEFTU19NRU1QUk9URUNULCBNRU1QUk9URUNUX19NTUFQX1pFUk8sICJtbWFwX3plcm8iKQotICAgU18oU0VDQ0xBU1NfUEVFUiwgUEVFUl9fUkVDViwgInJlY3YiKQotICAgU18oU0VDQ0xBU1NfS0VSTkVMX1NFUlZJQ0UsIEtFUk5FTF9TRVJWSUNFX19VU0VfQVNfT1ZFUlJJREUsICJ1c2VfYXNfb3ZlcnJpZGUiKQotICAgU18oU0VDQ0xBU1NfS0VSTkVMX1NFUlZJQ0UsIEtFUk5FTF9TRVJWSUNFX19DUkVBVEVfRklMRVNfQVMsICJjcmVhdGVfZmlsZXNfYXMiKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0NmQ2MS4uMDAwMDAwMAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0vKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuICBEbyBub3QgZWRpdC4gKi8KLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBDT01NT05fRklMRV9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIENPTU1PTl9GSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBDT01NT05fRklMRV9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIENPTU1PTl9GSUxFX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBDT01NT05fRklMRV9fUkVMQUJFTEZST00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIENPTU1PTl9GSUxFX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBDT01NT05fRklMRV9fVU5MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIENPTU1PTl9GSUxFX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX1JFTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBDT01NT05fRklMRV9fRVhFQ1VURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIENPTU1PTl9GSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgQ09NTU9OX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBDT01NT05fRklMRV9fTU9VTlRPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgQ09NTU9OX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBDT01NT05fU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIENPTU1PTl9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgQ09NTU9OX0lQQ19fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBDT01NT05fSVBDX19ERVNUUk9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIENPTU1PTl9JUENfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgQ09NTU9OX0lQQ19fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBDT01NT05fSVBDX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIENPTU1PTl9JUENfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgQ09NTU9OX0lQQ19fQVNTT0NJQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBDT01NT05fSVBDX19VTklYX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIENPTU1PTl9JUENfX1VOSVhfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgRklMRVNZU1RFTV9fTU9VTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIEZJTEVTWVNURU1fX1JFTU9VTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBGSUxFU1lTVEVNX19VTk1PVU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgRklMRVNZU1RFTV9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIEZJTEVTWVNURU1fX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBGSUxFU1lTVEVNX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgRklMRVNZU1RFTV9fVFJBTlNJVElPTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIEZJTEVTWVNURU1fX0FTU09DSUFURSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBGSUxFU1lTVEVNX19RVU9UQU1PRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgRklMRVNZU1RFTV9fUVVPVEFHRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIERJUl9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBESVJfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgRElSX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIERJUl9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBESVJfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgRElSX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIERJUl9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBESVJfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgRElSX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIERJUl9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBESVJfX1VOTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgRElSX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIERJUl9fUkVOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBESVJfX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgRElSX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIERJUl9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBESVJfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgRElSX19BRERfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIERJUl9fUkVNT1ZFX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBESVJfX1JFUEFSRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgRElSX19TRUFSQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIERJUl9fUk1ESVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBESVJfX09QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgRklMRV9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIEZJTEVfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBGSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgRklMRV9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIEZJTEVfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBGSUxFX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgRklMRV9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIEZJTEVfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBGSUxFX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgRklMRV9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIEZJTEVfX1VOTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBGSUxFX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgRklMRV9fUkVOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIEZJTEVfX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBGSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgRklMRV9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIEZJTEVfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBGSUxFX19FWEVDVVRFX05PX1RSQU5TICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgRklMRV9fRU5UUllQT0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIEZJTEVfX0VYRUNNT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBGSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgTE5LX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIExOS19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBMTktfRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgTE5LX0ZJTEVfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIExOS19GSUxFX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBMTktfRklMRV9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgTE5LX0ZJTEVfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIExOS19GSUxFX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBMTktfRklMRV9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgTE5LX0ZJTEVfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIExOS19GSUxFX19VTkxJTksgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBMTktfRklMRV9fTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgTE5LX0ZJTEVfX1JFTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIExOS19GSUxFX19FWEVDVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBMTktfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgTE5LX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIExOS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBDSFJfRklMRV9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIENIUl9GSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBDSFJfRklMRV9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIENIUl9GSUxFX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBDSFJfRklMRV9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIENIUl9GSUxFX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBDSFJfRklMRV9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX1VOTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIENIUl9GSUxFX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBDSFJfRklMRV9fUkVOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIENIUl9GSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBDSFJfRklMRV9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIENIUl9GSUxFX19FWEVDVVRFX05PX1RSQU5TICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBDSFJfRklMRV9fRU5UUllQT0lOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgQ0hSX0ZJTEVfX0VYRUNNT0QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIENIUl9GSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBCTEtfRklMRV9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgQkxLX0ZJTEVfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIEJMS19GSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBCTEtfRklMRV9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgQkxLX0ZJTEVfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIEJMS19GSUxFX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBCTEtfRklMRV9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgQkxLX0ZJTEVfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIEJMS19GSUxFX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBCTEtfRklMRV9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgQkxLX0ZJTEVfX1VOTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIEJMS19GSUxFX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBCTEtfRklMRV9fUkVOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgQkxLX0ZJTEVfX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIEJMS19GSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBCTEtfRklMRV9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgQkxLX0ZJTEVfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIEJMS19GSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBTT0NLX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgU09DS19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBTT0NLX0ZJTEVfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgU09DS19GSUxFX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBTT0NLX0ZJTEVfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgU09DS19GSUxFX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBTT0NLX0ZJTEVfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgU09DS19GSUxFX19VTkxJTksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBTT0NLX0ZJTEVfX1JFTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgU09DS19GSUxFX19FWEVDVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBTT0NLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgU09DS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIFNPQ0tfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBGSUZPX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgRklGT19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIEZJRk9fRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBGSUZPX0ZJTEVfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgRklGT19GSUxFX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIEZJRk9fRklMRV9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBGSUZPX0ZJTEVfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgRklGT19GSUxFX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIEZJRk9fRklMRV9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBGSUZPX0ZJTEVfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgRklGT19GSUxFX19VTkxJTksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIEZJRk9fRklMRV9fTElOSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBGSUZPX0ZJTEVfX1JFTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgRklGT19GSUxFX19FWEVDVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIEZJRk9fRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBGSUZPX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgRklGT19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIEZJRk9fRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBGRF9fVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFNPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBTT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgU09DS0VUX19DUkVBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFNPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBTT0NLRVRfX1NFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgU09DS0VUX19MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFNPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBTT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgU09DS0VUX19BUFBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFNPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBTT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgU09DS0VUX19MSVNURU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIFNPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBTT0NLRVRfX0dFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgU09DS0VUX19TRVRPUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIFNPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBTT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgU09DS0VUX19TRU5EVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIFNPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBTT0NLRVRfX1NFTkRfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBUQ1BfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBUQ1BfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19DT05ORUNUVE8gICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fTkVXQ09OTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMFVMCi0jZGVmaW5lIFRDUF9TT0NLRVRfX0FDQ0VQVEZST00gICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVTAotI2RlZmluZSBUQ1BfU09DS0VUX19OT0RFX0JJTkQgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVUwKLSNkZWZpbmUgVENQX1NPQ0tFVF9fTkFNRV9DT05ORUNUICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBVRFBfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBVRFBfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgVURQX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIFVEUF9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBVRFBfU09DS0VUX19OT0RFX0JJTkQgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19DUkVBVEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX1NFVEFUVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19MT0NLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19BUFBFTkQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19MSVNURU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX0dFVE9QVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19TRVRPUFQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19TRU5EVE8gICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBSQVdJUF9TT0NLRVRfX1NFTkRfTVNHICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgUkFXSVBfU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIFJBV0lQX1NPQ0tFVF9fTk9ERV9CSU5EICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVTAotI2RlZmluZSBOT0RFX19UQ1BfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTk9ERV9fVENQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5PREVfX1VEUF9SRUNWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBOT0RFX19VRFBfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTk9ERV9fUkFXSVBfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5PREVfX1JBV0lQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBOT0RFX19FTkZPUkNFX0RFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTk9ERV9fRENDUF9SRUNWICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5PREVfX0RDQ1BfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBOT0RFX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTk9ERV9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVElGX19UQ1BfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBORVRJRl9fVENQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgTkVUSUZfX1VEUF9SRUNWICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIE5FVElGX19VRFBfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBORVRJRl9fUkFXSVBfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgTkVUSUZfX1JBV0lQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIE5FVElGX19EQ0NQX1JFQ1YgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBORVRJRl9fRENDUF9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgTkVUSUZfX0lOR1JFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIE5FVElGX19FR1JFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIFBBQ0tFVF9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBQQUNLRVRfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgUEFDS0VUX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBLRVlfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBLRVlfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBLRVlfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBLRVlfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBLRVlfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBLRVlfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBLRVlfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgS0VZX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIEtFWV9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgVU5JWF9TVFJFQU1fU09DS0VUX19DT05ORUNUVE8gICAgICAgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIFVOSVhfU1RSRUFNX1NPQ0tFVF9fTkVXQ09OTiAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBVTklYX1NUUkVBTV9TT0NLRVRfX0FDQ0VQVEZST00gICAgICAgICAgICAweDAxMDAwMDAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBUVU5fU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBUVU5fU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBUVU5fU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBUVU5fU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBUVU5fU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBUVU5fU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBUVU5fU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgVFVOX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIFRVTl9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBQUk9DRVNTX19GT1JLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgUFJPQ0VTU19fVFJBTlNJVElPTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFBST0NFU1NfX1NJR0NITEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBQUk9DRVNTX19TSUdLSUxMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgUFJPQ0VTU19fU0lHU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFBST0NFU1NfX1NJR05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBQUk9DRVNTX19TSUdOQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgUFJPQ0VTU19fUFRSQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFBST0NFU1NfX0dFVFNDSEVEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBQUk9DRVNTX19TRVRTQ0hFRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fR0VUU0VTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIFBST0NFU1NfX0dFVFBHSUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBQUk9DRVNTX19TRVRQR0lEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fR0VUQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX1NFVENBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBQUk9DRVNTX19TSEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX1NFVEVYRUMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBQUk9DRVNTX19TRVRGU0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fTk9BVFNFQ1VSRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX1NJR0lOSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBQUk9DRVNTX19TRVRSTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fUkxJTUlUSU5IICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX0RZTlRSQU5TSVRJT04gICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBQUk9DRVNTX19TRVRDVVJSRU5UICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fRVhFQ01FTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX0VYRUNTVEFDSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDBVTAotI2RlZmluZSBQUk9DRVNTX19FWEVDSEVBUCAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwVUwKLSNkZWZpbmUgUFJPQ0VTU19fU0VUS0VZQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMFVMCi0jZGVmaW5lIFBST0NFU1NfX1NFVFNPQ0tDUkVBVEUgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDBVTAotI2RlZmluZSBJUENfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgSVBDX19ERVNUUk9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIElQQ19fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBJUENfX1NFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgSVBDX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIElQQ19fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBJUENfX0FTU09DSUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgSVBDX19VTklYX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIElQQ19fVU5JWF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBTRU1fX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgU0VNX19ERVNUUk9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFNFTV9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBTRU1fX1NFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgU0VNX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFNFTV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBTRU1fX0FTU09DSUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgU0VNX19VTklYX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFNFTV9fVU5JWF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBNU0dRX19DUkVBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTVNHUV9fREVTVFJPWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE1TR1FfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBNU0dRX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTVNHUV9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE1TR1FfX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBNU0dRX19BU1NPQ0lBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTVNHUV9fVU5JWF9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE1TR1FfX1VOSVhfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBNU0dRX19FTlFVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTVNHX19TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIE1TR19fUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBTSE1fX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgU0hNX19ERVNUUk9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFNITV9fR0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBTSE1fX1NFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgU0hNX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIFNITV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBTSE1fX0FTU09DSUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgU0hNX19VTklYX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIFNITV9fVU5JWF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBTSE1fX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgU0VDVVJJVFlfX0NPTVBVVEVfQVYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFNFQ1VSSVRZX19DT01QVVRFX0NSRUFURSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBTRUNVUklUWV9fQ09NUFVURV9NRU1CRVIgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgU0VDVVJJVFlfX0NIRUNLX0NPTlRFWFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFNFQ1VSSVRZX19MT0FEX1BPTElDWSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBTRUNVUklUWV9fQ09NUFVURV9SRUxBQkVMICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgU0VDVVJJVFlfX0NPTVBVVEVfVVNFUiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIFNFQ1VSSVRZX19TRVRFTkZPUkNFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBTRUNVUklUWV9fU0VUQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgU0VDVVJJVFlfX1NFVFNFQ1BBUkFNICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIFNFQ1VSSVRZX19TRVRDSEVDS1JFUVBST1QgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBTWVNURU1fX0lQQ19JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgU1lTVEVNX19TWVNMT0dfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIFNZU1RFTV9fU1lTTE9HX01PRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBTWVNURU1fX1NZU0xPR19DT05TT0xFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgU1lTVEVNX19NT0RVTEVfUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX0NIT1dOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBDQVBBQklMSVRZX19EQUNfT1ZFUlJJREUgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fREFDX1JFQURfU0VBUkNIICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX0ZPV05FUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBDQVBBQklMSVRZX19GU0VUSUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fS0lMTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX1NFVEdJRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TRVRVSUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fU0VUUENBUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX0xJTlVYX0lNTVVUQUJMRSAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19ORVRfQklORF9TRVJWSUNFICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fTkVUX0JST0FEQ0FTVCAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX05FVF9BRE1JTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19ORVRfUkFXICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fSVBDX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX0lQQ19PV05FUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TWVNfTU9EVUxFICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fU1lTX1JBV0lPICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX1NZU19DSFJPT1QgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TWVNfUFRSQUNFICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fU1lTX1BBQ0NUICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX1NZU19BRE1JTiAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TWVNfQk9PVCAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fU1lTX05JQ0UgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX1NZU19SRVNPVVJDRSAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TWVNfVElNRSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fU1lTX1RUWV9DT05GSUcgICAgICAgICAgICAgICAgMHgwNDAwMDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX01LTk9EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19MRUFTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWV9fQVVESVRfV1JJVEUgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMFVMCi0jZGVmaW5lIENBUEFCSUxJVFlfX0FVRElUX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBVTAotI2RlZmluZSBDQVBBQklMSVRZX19TRVRGQ0FQICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwVUwKLSNkZWZpbmUgQ0FQQUJJTElUWTJfX01BQ19PVkVSUklERSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIENBUEFCSUxJVFkyX19NQUNfQURNSU4gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX1JPVVRFX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ST1VURV9TT0NLRVRfX05MTVNHX1JFQUQgICAgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfUk9VVEVfU09DS0VUX19OTE1TR19XUklURSAgICAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19XUklURSAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19TRVRBVFRSICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19SRUxBQkVMVE8gICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19DT05ORUNUICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19HRVRPUFQgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19SRUNWRlJPTSAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19TRU5EX01TRyAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19GSVJFV0FMTF9TT0NLRVRfX05MTVNHX1JFQUQgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTExfU09DS0VUX19OTE1TR19XUklURSAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX1dSSVRFICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19DUkVBVEUgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX1NFVEFUVFIgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19MT0NLICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19BUFBFTkQgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19MSVNURU4gICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX0dFVE9QVCAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19TRVRPUFQgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19TRU5EVE8gICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX1NFTkRfTVNHICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX1RDUERJQUdfU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19UQ1BESUFHX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfVENQRElBR19TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ORkxPR19TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfTkZMT0dfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX05GTE9HX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19YRlJNX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1JFQUQgICAgICAgICAgIDB4MDA0MDAwMDBVTAotI2RlZmluZSBORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSAgICAgICAgICAweDAwODAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19XUklURSAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAweDAwMDAwMTAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgMHgwMDAwMDIwMFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19DT05ORUNUICAgICAgICAgICAweDAwMDAwODAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgMHgwMDAwMTAwMFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgIDB4MDAwMDIwMDBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAweDAwMDA0MDAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgMHgwMDAwODAwMFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgIDB4MDAwMTAwMDBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAweDAwMDIwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgMHgwMDA0MDAwMFVMCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWF9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgIDB4MDAwODAwMDBVTAotI2RlZmluZSBORVRMSU5LX1NFTElOVVhfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAweDAwMTAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19TRUxJTlVYX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgMHgwMDIwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19DUkVBVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX1NFVEFUVFIgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19MT0NLICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19BUFBFTkQgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19MSVNURU4gICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX0dFVE9QVCAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19TRVRPUFQgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19TRU5EVE8gICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX1NFTkRfTVNHICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgICAgMHgwMDgwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICAgICAgIDB4MDEwMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYgICAgICAweDAyMDAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCAgICAgMHgwNDAwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19DUkVBVEUgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1NFVEFUVFIgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19MT0NLICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19BUFBFTkQgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19MSVNURU4gICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX0dFVE9QVCAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19TRVRPUFQgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19TRU5EVE8gICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1NFTkRfTVNHICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgICAgICAweDAwNDAwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgICAgMHgwMDgwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAweDAwMDAwMDgwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0ROUlRfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19ETlJUX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfRE5SVF9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBBU1NPQ0lBVElPTl9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgQVNTT0NJQVRJT05fX1JFQ1ZGUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIEFTU09DSUFUSU9OX19TRVRDT05URVhUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBBU1NPQ0lBVElPTl9fUE9MTUFUQ0ggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX0lPQ1RMICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19SRUFEICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fV1JJVEUgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX0NSRUFURSAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19HRVRBVFRSICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fU0VUQVRUUiAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX0xPQ0sgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19SRUxBQkVMRlJPTSAweDAwMDAwMDgwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX1JFTEFCRUxUTyAgMHgwMDAwMDEwMFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19BUFBFTkQgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fQklORCAgICAgICAweDAwMDAwNDAwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX0NPTk5FQ1QgICAgMHgwMDAwMDgwMFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19MSVNURU4gICAgIDB4MDAwMDEwMDBVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fQUNDRVBUICAgICAweDAwMDAyMDAwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX0dFVE9QVCAgICAgMHgwMDAwNDAwMFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19TRVRPUFQgICAgIDB4MDAwMDgwMDBVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fU0hVVERPV04gICAweDAwMDEwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX1JFQ1ZGUk9NICAgMHgwMDAyMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19TRU5EVE8gICAgIDB4MDAwNDAwMDBVTAotI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVF9fUkVDVl9NU0cgICAweDAwMDgwMDAwVUwKLSNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX1NFTkRfTVNHICAgMHgwMDEwMDAwMFVMCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19OQU1FX0JJTkQgIDB4MDAyMDAwMDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19DUkVBVEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fR0VUQVRUUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1NFVEFUVFIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19MT0NLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fUkVMQUJFTEZST00gICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19BUFBFTkQgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fQklORCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0NPTk5FQ1QgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19MSVNURU4gICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fQUNDRVBUICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0dFVE9QVCAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19TRVRPUFQgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fU0hVVERPV04gICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1JFQ1ZGUk9NICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19TRU5EVE8gICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fUkVDVl9NU0cgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1NFTkRfTVNHICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19OQU1FX0JJTkQgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgUEFDS0VUX19TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIFBBQ0tFVF9fUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAotI2RlZmluZSBQQUNLRVRfX1JFTEFCRUxUTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKLSNkZWZpbmUgUEFDS0VUX19GTE9XX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCi0jZGVmaW5lIFBBQ0tFVF9fRkxPV19PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBQQUNLRVRfX0ZPUldBUkRfSU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKLSNkZWZpbmUgUEFDS0VUX19GT1JXQVJEX09VVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCi0jZGVmaW5lIEtFWV9fVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBLRVlfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKLSNkZWZpbmUgS0VZX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCi0jZGVmaW5lIEtFWV9fU0VBUkNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAotI2RlZmluZSBLRVlfX0xJTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKLSNkZWZpbmUgS0VZX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCi0jZGVmaW5lIEtFWV9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAotI2RlZmluZSBEQ0NQX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKLSNkZWZpbmUgRENDUF9TT0NLRVRfX05PREVfQklORCAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFVMCi0jZGVmaW5lIERDQ1BfU09DS0VUX19OQU1FX0NPTk5FQ1QgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVTAotI2RlZmluZSBNRU1QUk9URUNUX19NTUFQX1pFUk8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKLSNkZWZpbmUgUEVFUl9fUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCi0jZGVmaW5lIEtFUk5FTF9TRVJWSUNFX19VU0VfQVNfT1ZFUlJJREUgICAgICAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBLRVJORUxfU0VSVklDRV9fQ1JFQVRFX0ZJTEVTX0FTICAgICAgICAgICAweDAwMDAwMDAyVUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmNfc3MuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmNfc3MuaAppbmRleCBiYjFlYzgwLi40Njc3YWE1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjX3NzLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Y19zcy5oCkBAIC0xMCwyNiArMTAsMTMgQEAKIAogaW50IGF2Y19zc19yZXNldCh1MzIgc2Vxbm8pOwogCi1zdHJ1Y3QgYXZfcGVybV90b19zdHJpbmcgewotCXUxNiB0Y2xhc3M7Ci0JdTMyIHZhbHVlOworLyogQ2xhc3MvcGVybSBtYXBwaW5nIHN1cHBvcnQgKi8KK3N0cnVjdCBzZWN1cml0eV9jbGFzc19tYXBwaW5nIHsKIAljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnBlcm1zW3NpemVvZih1MzIpICogOCArIDFdOwogfTsKIAotc3RydWN0IGF2X2luaGVyaXQgewotCWNvbnN0IGNoYXIgKipjb21tb25fcHRzOwotCXUzMiBjb21tb25fYmFzZTsKLQl1MTYgdGNsYXNzOwotfTsKLQotc3RydWN0IHNlbGludXhfY2xhc3NfcGVybSB7Ci0JY29uc3Qgc3RydWN0IGF2X3Blcm1fdG9fc3RyaW5nICphdl9wZXJtX3RvX3N0cmluZzsKLQl1MzIgYXZfcHRzX2xlbjsKLQl1MzIgY3RzX2xlbjsKLQljb25zdCBjaGFyICoqY2xhc3NfdG9fc3RyaW5nOwotCWNvbnN0IHN0cnVjdCBhdl9pbmhlcml0ICphdl9pbmhlcml0OwotCXUzMiBhdl9pbmhlcml0X2xlbjsKLX07CitleHRlcm4gc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgc2VjY2xhc3NfbWFwW107CiAKICNlbmRpZiAvKiBfU0VMSU5VWF9BVkNfU1NfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWI5Mjk5Li4wMDAwMDAwCi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAqLwotLyoKLSAqIFNlY3VyaXR5IG9iamVjdCBjbGFzcyBkZWZpbml0aW9ucwotICovCi0gICAgU18oTlVMTCkKLSAgICBTXygic2VjdXJpdHkiKQotICAgIFNfKCJwcm9jZXNzIikKLSAgICBTXygic3lzdGVtIikKLSAgICBTXygiY2FwYWJpbGl0eSIpCi0gICAgU18oImZpbGVzeXN0ZW0iKQotICAgIFNfKCJmaWxlIikKLSAgICBTXygiZGlyIikKLSAgICBTXygiZmQiKQotICAgIFNfKCJsbmtfZmlsZSIpCi0gICAgU18oImNocl9maWxlIikKLSAgICBTXygiYmxrX2ZpbGUiKQotICAgIFNfKCJzb2NrX2ZpbGUiKQotICAgIFNfKCJmaWZvX2ZpbGUiKQotICAgIFNfKCJzb2NrZXQiKQotICAgIFNfKCJ0Y3Bfc29ja2V0IikKLSAgICBTXygidWRwX3NvY2tldCIpCi0gICAgU18oInJhd2lwX3NvY2tldCIpCi0gICAgU18oIm5vZGUiKQotICAgIFNfKCJuZXRpZiIpCi0gICAgU18oIm5ldGxpbmtfc29ja2V0IikKLSAgICBTXygicGFja2V0X3NvY2tldCIpCi0gICAgU18oImtleV9zb2NrZXQiKQotICAgIFNfKCJ1bml4X3N0cmVhbV9zb2NrZXQiKQotICAgIFNfKCJ1bml4X2RncmFtX3NvY2tldCIpCi0gICAgU18oInNlbSIpCi0gICAgU18oIm1zZyIpCi0gICAgU18oIm1zZ3EiKQotICAgIFNfKCJzaG0iKQotICAgIFNfKCJpcGMiKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oIm5ldGxpbmtfcm91dGVfc29ja2V0IikKLSAgICBTXygibmV0bGlua19maXJld2FsbF9zb2NrZXQiKQotICAgIFNfKCJuZXRsaW5rX3RjcGRpYWdfc29ja2V0IikKLSAgICBTXygibmV0bGlua19uZmxvZ19zb2NrZXQiKQotICAgIFNfKCJuZXRsaW5rX3hmcm1fc29ja2V0IikKLSAgICBTXygibmV0bGlua19zZWxpbnV4X3NvY2tldCIpCi0gICAgU18oIm5ldGxpbmtfYXVkaXRfc29ja2V0IikKLSAgICBTXygibmV0bGlua19pcDZmd19zb2NrZXQiKQotICAgIFNfKCJuZXRsaW5rX2RucnRfc29ja2V0IikKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oImFzc29jaWF0aW9uIikKLSAgICBTXygibmV0bGlua19rb2JqZWN0X3VldmVudF9zb2NrZXQiKQotICAgIFNfKCJhcHBsZXRhbGtfc29ja2V0IikKLSAgICBTXygicGFja2V0IikKLSAgICBTXygia2V5IikKLSAgICBTXyhOVUxMKQotICAgIFNfKCJkY2NwX3NvY2tldCIpCi0gICAgU18oIm1lbXByb3RlY3QiKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKCJwZWVyIikKLSAgICBTXygiY2FwYWJpbGl0eTIiKQotICAgIFNfKE5VTEwpCi0gICAgU18oTlVMTCkKLSAgICBTXyhOVUxMKQotICAgIFNfKE5VTEwpCi0gICAgU18oImtlcm5lbF9zZXJ2aWNlIikKLSAgICBTXygidHVuX3NvY2tldCIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NtYXAuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzJlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NtYXAuaApAQCAtMCwwICsxLDE1MCBAQAorI2RlZmluZSBDT01NT05fRklMRV9TT0NLX1BFUk1TICJpb2N0bCIsICJyZWFkIiwgIndyaXRlIiwgImNyZWF0ZSIsIFwKKyAgICAiZ2V0YXR0ciIsICJzZXRhdHRyIiwgImxvY2siLCAicmVsYWJlbGZyb20iLCAicmVsYWJlbHRvIiwgImFwcGVuZCIKKworI2RlZmluZSBDT01NT05fRklMRV9QRVJNUyBDT01NT05fRklMRV9TT0NLX1BFUk1TLCAidW5saW5rIiwgImxpbmsiLCBcCisgICAgInJlbmFtZSIsICJleGVjdXRlIiwgInN3YXBvbiIsICJxdW90YW9uIiwgIm1vdW50b24iCisKKyNkZWZpbmUgQ09NTU9OX1NPQ0tfUEVSTVMgQ09NTU9OX0ZJTEVfU09DS19QRVJNUywgImJpbmQiLCAiY29ubmVjdCIsIFwKKyAgICAibGlzdGVuIiwgImFjY2VwdCIsICJnZXRvcHQiLCAic2V0b3B0IiwgInNodXRkb3duIiwgInJlY3Zmcm9tIiwgIFwKKyAgICAic2VuZHRvIiwgInJlY3ZfbXNnIiwgInNlbmRfbXNnIiwgIm5hbWVfYmluZCIKKworI2RlZmluZSBDT01NT05fSVBDX1BFUk1TICJjcmVhdGUiLCAiZGVzdHJveSIsICJnZXRhdHRyIiwgInNldGF0dHIiLCAicmVhZCIsIFwKKwkgICAgIndyaXRlIiwgImFzc29jaWF0ZSIsICJ1bml4X3JlYWQiLCAidW5peF93cml0ZSIKKworc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgc2VjY2xhc3NfbWFwW10gPSB7CisJeyAic2VjdXJpdHkiLAorCSAgeyAiY29tcHV0ZV9hdiIsICJjb21wdXRlX2NyZWF0ZSIsICJjb21wdXRlX21lbWJlciIsCisJICAgICJjaGVja19jb250ZXh0IiwgImxvYWRfcG9saWN5IiwgImNvbXB1dGVfcmVsYWJlbCIsCisJICAgICJjb21wdXRlX3VzZXIiLCAic2V0ZW5mb3JjZSIsICJzZXRib29sIiwgInNldHNlY3BhcmFtIiwKKwkgICAgInNldGNoZWNrcmVxcHJvdCIsIE5VTEwgfSB9LAorCXsgInByb2Nlc3MiLAorCSAgeyAiZm9yayIsICJ0cmFuc2l0aW9uIiwgInNpZ2NobGQiLCAic2lna2lsbCIsCisJICAgICJzaWdzdG9wIiwgInNpZ251bGwiLCAic2lnbmFsIiwgInB0cmFjZSIsICJnZXRzY2hlZCIsICJzZXRzY2hlZCIsCisJICAgICJnZXRzZXNzaW9uIiwgImdldHBnaWQiLCAic2V0cGdpZCIsICJnZXRjYXAiLCAic2V0Y2FwIiwgInNoYXJlIiwKKwkgICAgImdldGF0dHIiLCAic2V0ZXhlYyIsICJzZXRmc2NyZWF0ZSIsICJub2F0c2VjdXJlIiwgInNpZ2luaCIsCisJICAgICJzZXRybGltaXQiLCAicmxpbWl0aW5oIiwgImR5bnRyYW5zaXRpb24iLCAic2V0Y3VycmVudCIsCisJICAgICJleGVjbWVtIiwgImV4ZWNzdGFjayIsICJleGVjaGVhcCIsICJzZXRrZXljcmVhdGUiLAorCSAgICAic2V0c29ja2NyZWF0ZSIsIE5VTEwgfSB9LAorCXsgInN5c3RlbSIsCisJICB7ICJpcGNfaW5mbyIsICJzeXNsb2dfcmVhZCIsICJzeXNsb2dfbW9kIiwKKwkgICAgInN5c2xvZ19jb25zb2xlIiwgIm1vZHVsZV9yZXF1ZXN0IiwgTlVMTCB9IH0sCisJeyAiY2FwYWJpbGl0eSIsCisJICB7ICJjaG93biIsICJkYWNfb3ZlcnJpZGUiLCAiZGFjX3JlYWRfc2VhcmNoIiwKKwkgICAgImZvd25lciIsICJmc2V0aWQiLCAia2lsbCIsICJzZXRnaWQiLCAic2V0dWlkIiwgInNldHBjYXAiLAorCSAgICAibGludXhfaW1tdXRhYmxlIiwgIm5ldF9iaW5kX3NlcnZpY2UiLCAibmV0X2Jyb2FkY2FzdCIsCisJICAgICJuZXRfYWRtaW4iLCAibmV0X3JhdyIsICJpcGNfbG9jayIsICJpcGNfb3duZXIiLCAic3lzX21vZHVsZSIsCisJICAgICJzeXNfcmF3aW8iLCAic3lzX2Nocm9vdCIsICJzeXNfcHRyYWNlIiwgInN5c19wYWNjdCIsICJzeXNfYWRtaW4iLAorCSAgICAic3lzX2Jvb3QiLCAic3lzX25pY2UiLCAic3lzX3Jlc291cmNlIiwgInN5c190aW1lIiwKKwkgICAgInN5c190dHlfY29uZmlnIiwgIm1rbm9kIiwgImxlYXNlIiwgImF1ZGl0X3dyaXRlIiwKKwkgICAgImF1ZGl0X2NvbnRyb2wiLCAic2V0ZmNhcCIsIE5VTEwgfSB9LAorCXsgImZpbGVzeXN0ZW0iLAorCSAgeyAibW91bnQiLCAicmVtb3VudCIsICJ1bm1vdW50IiwgImdldGF0dHIiLAorCSAgICAicmVsYWJlbGZyb20iLCAicmVsYWJlbHRvIiwgInRyYW5zaXRpb24iLCAiYXNzb2NpYXRlIiwgInF1b3RhbW9kIiwKKwkgICAgInF1b3RhZ2V0IiwgTlVMTCB9IH0sCisJeyAiZmlsZSIsCisJICB7IENPTU1PTl9GSUxFX1BFUk1TLAorCSAgICAiZXhlY3V0ZV9ub190cmFucyIsICJlbnRyeXBvaW50IiwgImV4ZWNtb2QiLCAib3BlbiIsIE5VTEwgfSB9LAorCXsgImRpciIsCisJICB7IENPTU1PTl9GSUxFX1BFUk1TLCAiYWRkX25hbWUiLCAicmVtb3ZlX25hbWUiLAorCSAgICAicmVwYXJlbnQiLCAic2VhcmNoIiwgInJtZGlyIiwgIm9wZW4iLCBOVUxMIH0gfSwKKwl7ICJmZCIsIHsgInVzZSIsIE5VTEwgfSB9LAorCXsgImxua19maWxlIiwKKwkgIHsgQ09NTU9OX0ZJTEVfUEVSTVMsIE5VTEwgfSB9LAorCXsgImNocl9maWxlIiwKKwkgIHsgQ09NTU9OX0ZJTEVfUEVSTVMsCisJICAgICJleGVjdXRlX25vX3RyYW5zIiwgImVudHJ5cG9pbnQiLCAiZXhlY21vZCIsICJvcGVuIiwgTlVMTCB9IH0sCisJeyAiYmxrX2ZpbGUiLAorCSAgeyBDT01NT05fRklMRV9QRVJNUywgIm9wZW4iLCBOVUxMIH0gfSwKKwl7ICJzb2NrX2ZpbGUiLAorCSAgeyBDT01NT05fRklMRV9QRVJNUywgIm9wZW4iLCBOVUxMIH0gfSwKKwl7ICJmaWZvX2ZpbGUiLAorCSAgeyBDT01NT05fRklMRV9QRVJNUywgIm9wZW4iLCBOVUxMIH0gfSwKKwl7ICJzb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTCB9IH0sCisJeyAidGNwX3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAiY29ubmVjdHRvIiwgIm5ld2Nvbm4iLCAiYWNjZXB0ZnJvbSIsICJub2RlX2JpbmQiLCAibmFtZV9jb25uZWN0IiwKKwkgICAgTlVMTCB9IH0sCisJeyAidWRwX3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAibm9kZV9iaW5kIiwgTlVMTCB9IH0sCisJeyAicmF3aXBfc29ja2V0IiwKKwkgIHsgQ09NTU9OX1NPQ0tfUEVSTVMsCisJICAgICJub2RlX2JpbmQiLCBOVUxMIH0gfSwKKwl7ICJub2RlIiwKKwkgIHsgInRjcF9yZWN2IiwgInRjcF9zZW5kIiwgInVkcF9yZWN2IiwgInVkcF9zZW5kIiwKKwkgICAgInJhd2lwX3JlY3YiLCAicmF3aXBfc2VuZCIsICJlbmZvcmNlX2Rlc3QiLAorCSAgICAiZGNjcF9yZWN2IiwgImRjY3Bfc2VuZCIsICJyZWN2ZnJvbSIsICJzZW5kdG8iLCBOVUxMIH0gfSwKKwl7ICJuZXRpZiIsCisJICB7ICAidGNwX3JlY3YiLCAidGNwX3NlbmQiLCAidWRwX3JlY3YiLCAidWRwX3NlbmQiLAorCSAgICAgInJhd2lwX3JlY3YiLCAicmF3aXBfc2VuZCIsICJkY2NwX3JlY3YiLCAiZGNjcF9zZW5kIiwKKwkgICAgICJpbmdyZXNzIiwgImVncmVzcyIsIE5VTEwgfSB9LAorCXsgIm5ldGxpbmtfc29ja2V0IiwKKwkgIHsgQ09NTU9OX1NPQ0tfUEVSTVMsIE5VTEwgfSB9LAorCXsgInBhY2tldF9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTCB9IH0sCisJeyAia2V5X3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLCBOVUxMIH0gfSwKKwl7ICJ1bml4X3N0cmVhbV9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgImNvbm5lY3R0byIsICJuZXdjb25uIiwgImFjY2VwdGZyb20iLCBOVUxMCisJICB9IH0sCisJeyAidW5peF9kZ3JhbV9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTAorCSAgfSB9LAorCXsgInNlbSIsCisJICB7IENPTU1PTl9JUENfUEVSTVMsIE5VTEwgfSB9LAorCXsgIm1zZyIsIHsgInNlbmQiLCAicmVjZWl2ZSIsIE5VTEwgfSB9LAorCXsgIm1zZ3EiLAorCSAgeyBDT01NT05fSVBDX1BFUk1TLCAiZW5xdWV1ZSIsIE5VTEwgfSB9LAorCXsgInNobSIsCisJICB7IENPTU1PTl9JUENfUEVSTVMsICJsb2NrIiwgTlVMTCB9IH0sCisJeyAiaXBjIiwKKwkgIHsgQ09NTU9OX0lQQ19QRVJNUywgTlVMTCB9IH0sCisJeyAibmV0bGlua19yb3V0ZV9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywKKwkgICAgIm5sbXNnX3JlYWQiLCAibmxtc2dfd3JpdGUiLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX2ZpcmV3YWxsX3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAibmxtc2dfcmVhZCIsICJubG1zZ193cml0ZSIsIE5VTEwgfSB9LAorCXsgIm5ldGxpbmtfdGNwZGlhZ19zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywKKwkgICAgIm5sbXNnX3JlYWQiLCAibmxtc2dfd3JpdGUiLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX25mbG9nX3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX3hmcm1fc29ja2V0IiwKKwkgIHsgQ09NTU9OX1NPQ0tfUEVSTVMsCisJICAgICJubG1zZ19yZWFkIiwgIm5sbXNnX3dyaXRlIiwgTlVMTCB9IH0sCisJeyAibmV0bGlua19zZWxpbnV4X3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX2F1ZGl0X3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAibmxtc2dfcmVhZCIsICJubG1zZ193cml0ZSIsICJubG1zZ19yZWxheSIsICJubG1zZ19yZWFkcHJpdiIsCisJICAgICJubG1zZ190dHlfYXVkaXQiLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX2lwNmZ3X3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAibmxtc2dfcmVhZCIsICJubG1zZ193cml0ZSIsIE5VTEwgfSB9LAorCXsgIm5ldGxpbmtfZG5ydF9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTCB9IH0sCisJeyAiYXNzb2NpYXRpb24iLAorCSAgeyAic2VuZHRvIiwgInJlY3Zmcm9tIiwgInNldGNvbnRleHQiLCAicG9sbWF0Y2giLCBOVUxMIH0gfSwKKwl7ICJuZXRsaW5rX2tvYmplY3RfdWV2ZW50X3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLCBOVUxMIH0gfSwKKwl7ICJhcHBsZXRhbGtfc29ja2V0IiwKKwkgIHsgQ09NTU9OX1NPQ0tfUEVSTVMsIE5VTEwgfSB9LAorCXsgInBhY2tldCIsCisJICB7ICJzZW5kIiwgInJlY3YiLCAicmVsYWJlbHRvIiwgImZsb3dfaW4iLCAiZmxvd19vdXQiLAorCSAgICAiZm9yd2FyZF9pbiIsICJmb3J3YXJkX291dCIsIE5VTEwgfSB9LAorCXsgImtleSIsCisJICB7ICJ2aWV3IiwgInJlYWQiLCAid3JpdGUiLCAic2VhcmNoIiwgImxpbmsiLCAic2V0YXR0ciIsICJjcmVhdGUiLAorCSAgICBOVUxMIH0gfSwKKwl7ICJkY2NwX3NvY2tldCIsCisJICB7IENPTU1PTl9TT0NLX1BFUk1TLAorCSAgICAibm9kZV9iaW5kIiwgIm5hbWVfY29ubmVjdCIsIE5VTEwgfSB9LAorCXsgIm1lbXByb3RlY3QiLCB7ICJtbWFwX3plcm8iLCBOVUxMIH0gfSwKKwl7ICJwZWVyIiwgeyAicmVjdiIsIE5VTEwgfSB9LAorCXsgImNhcGFiaWxpdHkyIiwgeyAibWFjX292ZXJyaWRlIiwgIm1hY19hZG1pbiIsIE5VTEwgfSB9LAorCXsgImtlcm5lbF9zZXJ2aWNlIiwgeyAidXNlX2FzX292ZXJyaWRlIiwgImNyZWF0ZV9maWxlc19hcyIsIE5VTEwgfSB9LAorCXsgInR1bl9zb2NrZXQiLAorCSAgeyBDT01NT05fU09DS19QRVJNUywgTlVMTCB9IH0sCisJeyBOVUxMIH0KKyAgfTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jb21tb25fcGVybV90b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jb21tb25fcGVybV90b19zdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1YjZlMmYuLjAwMDAwMDAKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NvbW1vbl9wZXJtX3RvX3N0cmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiAgRG8gbm90IGVkaXQuICovCi1UQl8oY29tbW9uX2ZpbGVfcGVybV90b19zdHJpbmcpCi0gICAgU18oImlvY3RsIikKLSAgICBTXygicmVhZCIpCi0gICAgU18oIndyaXRlIikKLSAgICBTXygiY3JlYXRlIikKLSAgICBTXygiZ2V0YXR0ciIpCi0gICAgU18oInNldGF0dHIiKQotICAgIFNfKCJsb2NrIikKLSAgICBTXygicmVsYWJlbGZyb20iKQotICAgIFNfKCJyZWxhYmVsdG8iKQotICAgIFNfKCJhcHBlbmQiKQotICAgIFNfKCJ1bmxpbmsiKQotICAgIFNfKCJsaW5rIikKLSAgICBTXygicmVuYW1lIikKLSAgICBTXygiZXhlY3V0ZSIpCi0gICAgU18oInN3YXBvbiIpCi0gICAgU18oInF1b3Rhb24iKQotICAgIFNfKCJtb3VudG9uIikKLVRFXyhjb21tb25fZmlsZV9wZXJtX3RvX3N0cmluZykKLQotVEJfKGNvbW1vbl9zb2NrZXRfcGVybV90b19zdHJpbmcpCi0gICAgU18oImlvY3RsIikKLSAgICBTXygicmVhZCIpCi0gICAgU18oIndyaXRlIikKLSAgICBTXygiY3JlYXRlIikKLSAgICBTXygiZ2V0YXR0ciIpCi0gICAgU18oInNldGF0dHIiKQotICAgIFNfKCJsb2NrIikKLSAgICBTXygicmVsYWJlbGZyb20iKQotICAgIFNfKCJyZWxhYmVsdG8iKQotICAgIFNfKCJhcHBlbmQiKQotICAgIFNfKCJiaW5kIikKLSAgICBTXygiY29ubmVjdCIpCi0gICAgU18oImxpc3RlbiIpCi0gICAgU18oImFjY2VwdCIpCi0gICAgU18oImdldG9wdCIpCi0gICAgU18oInNldG9wdCIpCi0gICAgU18oInNodXRkb3duIikKLSAgICBTXygicmVjdmZyb20iKQotICAgIFNfKCJzZW5kdG8iKQotICAgIFNfKCJyZWN2X21zZyIpCi0gICAgU18oInNlbmRfbXNnIikKLSAgICBTXygibmFtZV9iaW5kIikKLVRFXyhjb21tb25fc29ja2V0X3Blcm1fdG9fc3RyaW5nKQotCi1UQl8oY29tbW9uX2lwY19wZXJtX3RvX3N0cmluZykKLSAgICBTXygiY3JlYXRlIikKLSAgICBTXygiZGVzdHJveSIpCi0gICAgU18oImdldGF0dHIiKQotICAgIFNfKCJzZXRhdHRyIikKLSAgICBTXygicmVhZCIpCi0gICAgU18oIndyaXRlIikKLSAgICBTXygiYXNzb2NpYXRlIikKLSAgICBTXygidW5peF9yZWFkIikKLSAgICBTXygidW5peF93cml0ZSIpCi1URV8oY29tbW9uX2lwY19wZXJtX3RvX3N0cmluZykKLQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2ZsYXNrLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0ODUwMC4uMDAwMDAwMAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAqLwotI2lmbmRlZiBfU0VMSU5VWF9GTEFTS19IXwotI2RlZmluZSBfU0VMSU5VWF9GTEFTS19IXwotCi0vKgotICogU2VjdXJpdHkgb2JqZWN0IGNsYXNzIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgU0VDQ0xBU1NfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0VDQ0xBU1NfUFJPQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU0VDQ0xBU1NfU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgU0VDQ0xBU1NfQ0FQQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgU0VDQ0xBU1NfRklMRVNZU1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgU0VDQ0xBU1NfRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgU0VDQ0xBU1NfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0VDQ0xBU1NfRkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgU0VDQ0xBU1NfTE5LX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgU0VDQ0xBU1NfQ0hSX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNFQ0NMQVNTX0JMS19GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBTRUNDTEFTU19TT0NLX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgU0VDQ0xBU1NfRklGT19GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFNFQ0NMQVNTX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBTRUNDTEFTU19UQ1BfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0VDQ0xBU1NfVURQX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNFQ0NMQVNTX1JBV0lQX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBTRUNDTEFTU19OT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgU0VDQ0xBU1NfTkVUSUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFNFQ0NMQVNTX05FVExJTktfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBTRUNDTEFTU19QQUNLRVRfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgU0VDQ0xBU1NfS0VZX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBTRUNDTEFTU19VTklYX0RHUkFNX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgU0VDQ0xBU1NfU0VNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFNFQ0NMQVNTX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBTRUNDTEFTU19NU0dRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgU0VDQ0xBU1NfU0hNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFNFQ0NMQVNTX0lQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBTRUNDTEFTU19ORVRMSU5LX1JPVVRFX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgNDMKLSNkZWZpbmUgU0VDQ0xBU1NfTkVUTElOS19GSVJFV0FMTF9TT0NLRVQgICAgICAgICAgICAgICAgIDQ0Ci0jZGVmaW5lIFNFQ0NMQVNTX05FVExJTktfVENQRElBR19TT0NLRVQgICAgICAgICAgICAgICAgICA0NQotI2RlZmluZSBTRUNDTEFTU19ORVRMSU5LX05GTE9HX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgNDYKLSNkZWZpbmUgU0VDQ0xBU1NfTkVUTElOS19YRlJNX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgIDQ3Ci0jZGVmaW5lIFNFQ0NMQVNTX05FVExJTktfU0VMSU5VWF9TT0NLRVQgICAgICAgICAgICAgICAgICA0OAotI2RlZmluZSBTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgNDkKLSNkZWZpbmUgU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQgICAgICAgICAgICAgICAgICAgIDUwCi0jZGVmaW5lIFNFQ0NMQVNTX05FVExJTktfRE5SVF9TT0NLRVQgICAgICAgICAgICAgICAgICAgICA1MQotI2RlZmluZSBTRUNDTEFTU19BU1NPQ0lBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQKLSNkZWZpbmUgU0VDQ0xBU1NfTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVQgICAgICAgICAgIDU1Ci0jZGVmaW5lIFNFQ0NMQVNTX0FQUExFVEFMS19TT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICA1NgotI2RlZmluZSBTRUNDTEFTU19QQUNLRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTcKLSNkZWZpbmUgU0VDQ0xBU1NfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4Ci0jZGVmaW5lIFNFQ0NMQVNTX0RDQ1BfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MAotI2RlZmluZSBTRUNDTEFTU19NRU1QUk9URUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEKLSNkZWZpbmUgU0VDQ0xBU1NfUEVFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4Ci0jZGVmaW5lIFNFQ0NMQVNTX0NBUEFCSUxJVFkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OQotI2RlZmluZSBTRUNDTEFTU19LRVJORUxfU0VSVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgNzQKLSNkZWZpbmUgU0VDQ0xBU1NfVFVOX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc1Ci0KLS8qCi0gKiBTZWN1cml0eSBpZGVudGlmaWVyIGluZGljZXMgZm9yIGluaXRpYWwgZW50aXRpZXMKLSAqLwotI2RlZmluZSBTRUNJTklUU0lEX0tFUk5FTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNFQ0lOSVRTSURfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU0VDSU5JVFNJRF9VTkxBQkVMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTRUNJTklUU0lEX0ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNFQ0lOSVRTSURfRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgU0VDSU5JVFNJRF9GSUxFX0xBQkVMUyAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBTRUNJTklUU0lEX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNFQ0lOSVRTSURfQU5ZX1NPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgU0VDSU5JVFNJRF9QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBTRUNJTklUU0lEX05FVElGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBTRUNJTklUU0lEX05FVE1TRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBTRUNJTklUU0lEX05PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBTRUNJTklUU0lEX0lHTVBfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBTRUNJTklUU0lEX0lDTVBfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBTRUNJTklUU0lEX1RDUF9TT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9NT0RQUk9CRSAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9GUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9LRVJORUwgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9ORVQgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9ORVRfVU5JWCAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9WTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBTRUNJTklUU0lEX1NZU0NUTF9ERVYgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBTRUNJTklUU0lEX0tNT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBTRUNJTklUU0lEX1BPTElDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBTRUNJTklUU0lEX1NDTVBfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBTRUNJTklUU0lEX0RFVk5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotCi0jZGVmaW5lIFNFQ0lOSVRTSURfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaAppbmRleCBjYTgzNTc5Li4yNTUzMjY2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaApAQCAtOTcsMTEgKzk3LDE4IEBACiAjZGVmaW5lIEFWRF9GTEFHU19QRVJNSVNTSVZFCTB4MDAwMQogCiBpbnQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwgdTMyIHRzaWQsCi0JdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKLQlzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7CisJCQl1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAorCQkJc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOworCitpbnQgc2VjdXJpdHlfY29tcHV0ZV9hdl91c2VyKHUzMiBzc2lkLCB1MzIgdHNpZCwKKwkJCSAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKKwkJCSAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOwogCiBpbnQgc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQodTMyIHNzaWQsIHUzMiB0c2lkLAotCXUxNiB0Y2xhc3MsIHUzMiAqb3V0X3NpZCk7CisJCQkgICAgdTE2IHRjbGFzcywgdTMyICpvdXRfc2lkKTsKKworaW50IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkX3VzZXIodTMyIHNzaWQsIHUzMiB0c2lkLAorCQkJCSB1MTYgdGNsYXNzLCB1MzIgKm91dF9zaWQpOwogCiBpbnQgc2VjdXJpdHlfbWVtYmVyX3NpZCh1MzIgc3NpZCwgdTMyIHRzaWQsCiAJdTE2IHRjbGFzcywgdTMyICpvdXRfc2lkKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IGI0ZmM1MDYuLmZhYjM2ZmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJaWYgKGxlbmd0aCA8IDApCiAJCWdvdG8gb3V0MjsKIAotCWxlbmd0aCA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXEsICZhdmQpOworCWxlbmd0aCA9IHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcSwgJmF2ZCk7CiAJaWYgKGxlbmd0aCA8IDApCiAJCWdvdG8gb3V0MjsKIApAQCAtNTcxLDcgKzU3MSw3IEBACiAJaWYgKGxlbmd0aCA8IDApCiAJCWdvdG8gb3V0MjsKIAotCWxlbmd0aCA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNzaWQsIHRzaWQsIHRjbGFzcywgJm5ld3NpZCk7CisJbGVuZ3RoID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWRfdXNlcihzc2lkLCB0c2lkLCB0Y2xhc3MsICZuZXdzaWQpOwogCWlmIChsZW5ndGggPCAwKQogCQlnb3RvIG91dDI7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvTWFrZWZpbGUgYi9zZWN1cml0eS9zZWxpbnV4L3NzL01ha2VmaWxlCmluZGV4IGJhZDc4NzcuLjE1ZDRlNjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIHRoZSBTRUxpbnV4IHNlY3VyaXR5IHNlcnZlciBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZS4KICMKIAotRVhUUkFfQ0ZMQUdTICs9IC1Jc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlCitFWFRSQV9DRkxBR1MgKz0gLUlzZWN1cml0eS9zZWxpbnV4IC1Jc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlCiBvYmoteSA6PSBzcy5vCiAKIHNzLXkgOj0gZWJpdG1hcC5vIGhhc2h0YWIubyBzeW10YWIubyBzaWR0YWIubyBhdnRhYi5vIHBvbGljeWRiLm8gc2VydmljZXMubyBjb25kaXRpb25hbC5vIG1scy5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwppbmRleCBiNTQwN2YxLi4zZjJiMjcwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogCQl9CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSBBVlRBQl9DSEFOR0U6Ci0JCWlmICh0Y2xhc3MgPT0gU0VDQ0xBU1NfUFJPQ0VTUykKKwkJaWYgKHRjbGFzcyA9PSBwb2xpY3lkYi5wcm9jZXNzX2NsYXNzKQogCQkJLyogVXNlIHRoZSBwcm9jZXNzIE1MUyBhdHRyaWJ1dGVzLiAqLwogCQkJcmV0dXJuIG1sc19jb250ZXh0X2NweShuZXdjb250ZXh0LCBzY29udGV4dCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCA3MmU0YTU0Li5mMDM2NjcyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC03MTMsNyArNzEzLDYgQEAKIAkJCWViaXRtYXBfZGVzdHJveSgmcC0+dHlwZV9hdHRyX21hcFtpXSk7CiAJfQogCWtmcmVlKHAtPnR5cGVfYXR0cl9tYXApOwotCWtmcmVlKHAtPnVuZGVmaW5lZF9wZXJtcyk7CiAJZWJpdG1hcF9kZXN0cm95KCZwLT5wb2xpY3ljYXBzKTsKIAllYml0bWFwX2Rlc3Ryb3koJnAtPnBlcm1pc3NpdmVfbWFwKTsKIApAQCAtMTY0MCw2ICsxNjM5LDQwIEBACiAKIGV4dGVybiBpbnQgc3NfaW5pdGlhbGl6ZWQ7CiAKK3UxNiBzdHJpbmdfdG9fc2VjdXJpdHlfY2xhc3Moc3RydWN0IHBvbGljeWRiICpwLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGFzc19kYXR1bSAqY2xhZGF0dW07CisKKwljbGFkYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHAtPnBfY2xhc3Nlcy50YWJsZSwgbmFtZSk7CisJaWYgKCFjbGFkYXR1bSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xhZGF0dW0tPnZhbHVlOworfQorCit1MzIgc3RyaW5nX3RvX2F2X3Blcm0oc3RydWN0IHBvbGljeWRiICpwLCB1MTYgdGNsYXNzLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGFzc19kYXR1bSAqY2xhZGF0dW07CisJc3RydWN0IHBlcm1fZGF0dW0gKnBlcmRhdHVtID0gTlVMTDsKKwlzdHJ1Y3QgY29tbW9uX2RhdHVtICpjb21kYXR1bTsKKworCWlmICghdGNsYXNzIHx8IHRjbGFzcyA+IHAtPnBfY2xhc3Nlcy5ucHJpbSkKKwkJcmV0dXJuIDA7CisKKwljbGFkYXR1bSA9IHAtPmNsYXNzX3ZhbF90b19zdHJ1Y3RbdGNsYXNzLTFdOworCWNvbWRhdHVtID0gY2xhZGF0dW0tPmNvbWRhdHVtOworCWlmIChjb21kYXR1bSkKKwkJcGVyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChjb21kYXR1bS0+cGVybWlzc2lvbnMudGFibGUsCisJCQkJCSAgbmFtZSk7CisJaWYgKCFwZXJkYXR1bSkKKwkJcGVyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChjbGFkYXR1bS0+cGVybWlzc2lvbnMudGFibGUsCisJCQkJCSAgbmFtZSk7CisJaWYgKCFwZXJkYXR1bSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMVUgPDwgKHBlcmRhdHVtLT52YWx1ZS0xKTsKK30KKwogLyoKICAqIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIGEgcG9saWN5IGRhdGFiYXNlIGJpbmFyeQogICogcmVwcmVzZW50YXRpb24gZmlsZSBpbnRvIGEgcG9saWN5IGRhdGFiYXNlIHN0cnVjdHVyZS4KQEAgLTE4NjEsNiArMTg5NCwxNiBAQAogCWlmIChyYykKIAkJZ290byBiYWQ7CiAKKwlwLT5wcm9jZXNzX2NsYXNzID0gc3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzKHAsICJwcm9jZXNzIik7CisJaWYgKCFwLT5wcm9jZXNzX2NsYXNzKQorCQlnb3RvIGJhZDsKKwlwLT5wcm9jZXNzX3RyYW5zX3Blcm1zID0gc3RyaW5nX3RvX2F2X3Blcm0ocCwgcC0+cHJvY2Vzc19jbGFzcywKKwkJCQkJCSAgICJ0cmFuc2l0aW9uIik7CisJcC0+cHJvY2Vzc190cmFuc19wZXJtcyB8PSBzdHJpbmdfdG9fYXZfcGVybShwLCBwLT5wcm9jZXNzX2NsYXNzLAorCQkJCQkJICAgICJkeW50cmFuc2l0aW9uIik7CisJaWYgKCFwLT5wcm9jZXNzX3RyYW5zX3Blcm1zKQorCQlnb3RvIGJhZDsKKwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5vY29uX251bTsgaSsrKSB7CiAJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSk7CiAJCWlmIChyYyA8IDApCkBAIC0yMTAxLDcgKzIxNDQsNyBAQAogCQkJCQlnb3RvIGJhZDsKIAkJCQlydC0+dGFyZ2V0X2NsYXNzID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAkJCX0gZWxzZQotCQkJCXJ0LT50YXJnZXRfY2xhc3MgPSBTRUNDTEFTU19QUk9DRVNTOworCQkJCXJ0LT50YXJnZXRfY2xhc3MgPSBwLT5wcm9jZXNzX2NsYXNzOwogCQkJaWYgKCFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnNvdXJjZV90eXBlKSB8fAogCQkJICAgICFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnRhcmdldF90eXBlKSB8fAogCQkJICAgICFwb2xpY3lkYl9jbGFzc19pc3ZhbGlkKHAsIHJ0LT50YXJnZXRfY2xhc3MpKSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgKaW5kZXggNTUxNTJkNC4uY2RjYzU3MCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaApAQCAtMjU0LDcgKzI1NCw5IEBACiAKIAl1bnNpZ25lZCBpbnQgcmVqZWN0X3Vua25vd24gOiAxOwogCXVuc2lnbmVkIGludCBhbGxvd191bmtub3duIDogMTsKLQl1MzIgKnVuZGVmaW5lZF9wZXJtczsKKworCXUxNiBwcm9jZXNzX2NsYXNzOworCXUzMiBwcm9jZXNzX3RyYW5zX3Blcm1zOwogfTsKIAogZXh0ZXJuIHZvaWQgcG9saWN5ZGJfZGVzdHJveShzdHJ1Y3QgcG9saWN5ZGIgKnApOwpAQCAtMjk1LDUgKzI5Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK2V4dGVybiB1MTYgc3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzKHN0cnVjdCBwb2xpY3lkYiAqcCwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdTMyIHN0cmluZ190b19hdl9wZXJtKHN0cnVjdCBwb2xpY3lkYiAqcCwgdTE2IHRjbGFzcywgY29uc3QgY2hhciAqbmFtZSk7CisKICNlbmRpZgkvKiBfU1NfUE9MSUNZREJfSF8gKi8KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGZmMTc4MjAuLmQ2YmIyMGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTY1LDE2ICs2NSwxMCBAQAogI2luY2x1ZGUgImF1ZGl0LmgiCiAKIGV4dGVybiB2b2lkIHNlbG5sX25vdGlmeV9wb2xpY3lsb2FkKHUzMiBzZXFubyk7Ci11bnNpZ25lZCBpbnQgcG9saWN5ZGJfbG9hZGVkX3ZlcnNpb247CiAKIGludCBzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyOwogaW50IHNlbGludXhfcG9saWN5Y2FwX29wZW5wZXJtOwogCi0vKgotICogVGhpcyBpcyBkZWNsYXJlZCBpbiBhdmMuYwotICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlbGludXhfY2xhc3NfcGVybSBzZWxpbnV4X2NsYXNzX3Blcm07Ci0KIHN0YXRpYyBERUZJTkVfUldMT0NLKHBvbGljeV9yd2xvY2spOwogCiBzdGF0aWMgc3RydWN0IHNpZHRhYiBzaWR0YWI7CkBAIC05OCw2ICs5MiwxNjUgQEAKIAkJCQkgICAgIHUxNiB0Y2xhc3MsCiAJCQkJICAgICB1MzIgcmVxdWVzdGVkLAogCQkJCSAgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOworCitzdHJ1Y3Qgc2VsaW51eF9tYXBwaW5nIHsKKwl1MTYgdmFsdWU7IC8qIHBvbGljeSB2YWx1ZSAqLworCXVuc2lnbmVkIG51bV9wZXJtczsKKwl1MzIgcGVybXNbc2l6ZW9mKHUzMikgKiA4XTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2VsaW51eF9tYXBwaW5nICpjdXJyZW50X21hcHBpbmc7CitzdGF0aWMgdTE2IGN1cnJlbnRfbWFwcGluZ19zaXplOworCitzdGF0aWMgaW50IHNlbGludXhfc2V0X21hcHBpbmcoc3RydWN0IHBvbGljeWRiICpwb2wsCisJCQkgICAgICAgc3RydWN0IHNlY3VyaXR5X2NsYXNzX21hcHBpbmcgKm1hcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2VsaW51eF9tYXBwaW5nICoqb3V0X21hcF9wLAorCQkJICAgICAgIHUxNiAqb3V0X21hcF9zaXplKQoreworCXN0cnVjdCBzZWxpbnV4X21hcHBpbmcgKm91dF9tYXAgPSBOVUxMOworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBzZWxpbnV4X21hcHBpbmcpOworCXUxNiBpLCBqOworCXVuc2lnbmVkIGs7CisJYm9vbCBwcmludF91bmtub3duX2hhbmRsZSA9IGZhbHNlOworCisJLyogRmluZCBudW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgaW5wdXQgbWFwcGluZyAqLworCWlmICghbWFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpID0gMDsKKwl3aGlsZSAobWFwW2ldLm5hbWUpCisJCWkrKzsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY2xhc3MgcmVjb3JkcywgcGx1cyBvbmUgZm9yIGNsYXNzIHplcm8gKi8KKwlvdXRfbWFwID0ga2NhbGxvYygrK2ksIHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghb3V0X21hcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTdG9yZSB0aGUgcmF3IGNsYXNzIGFuZCBwZXJtaXNzaW9uIHZhbHVlcyAqLworCWogPSAwOworCXdoaWxlIChtYXBbal0ubmFtZSkgeworCQlzdHJ1Y3Qgc2VjdXJpdHlfY2xhc3NfbWFwcGluZyAqcF9pbiA9IG1hcCArIChqKyspOworCQlzdHJ1Y3Qgc2VsaW51eF9tYXBwaW5nICpwX291dCA9IG91dF9tYXAgKyBqOworCisJCS8qIEFuIGVtcHR5IGNsYXNzIHN0cmluZyBza2lwcyBhaGVhZCAqLworCQlpZiAoIXN0cmNtcChwX2luLT5uYW1lLCAiIikpIHsKKwkJCXBfb3V0LT5udW1fcGVybXMgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlwX291dC0+dmFsdWUgPSBzdHJpbmdfdG9fc2VjdXJpdHlfY2xhc3MocG9sLCBwX2luLT5uYW1lKTsKKwkJaWYgKCFwX291dC0+dmFsdWUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiU0VMaW51eDogIENsYXNzICVzIG5vdCBkZWZpbmVkIGluIHBvbGljeS5cbiIsCisJCQkgICAgICAgcF9pbi0+bmFtZSk7CisJCQlpZiAocG9sLT5yZWplY3RfdW5rbm93bikKKwkJCQlnb3RvIGVycjsKKwkJCXBfb3V0LT5udW1fcGVybXMgPSAwOworCQkJcHJpbnRfdW5rbm93bl9oYW5kbGUgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlrID0gMDsKKwkJd2hpbGUgKHBfaW4tPnBlcm1zICYmIHBfaW4tPnBlcm1zW2tdKSB7CisJCQkvKiBBbiBlbXB0eSBwZXJtaXNzaW9uIHN0cmluZyBza2lwcyBhaGVhZCAqLworCQkJaWYgKCEqcF9pbi0+cGVybXNba10pIHsKKwkJCQlrKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwX291dC0+cGVybXNba10gPSBzdHJpbmdfdG9fYXZfcGVybShwb2wsIHBfb3V0LT52YWx1ZSwKKwkJCQkJCQkgICAgcF9pbi0+cGVybXNba10pOworCQkJaWYgKCFwX291dC0+cGVybXNba10pIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICJTRUxpbnV4OiAgUGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3kuXG4iLAorCQkJCSAgICAgICBwX2luLT5wZXJtc1trXSwgcF9pbi0+bmFtZSk7CisJCQkJaWYgKHBvbC0+cmVqZWN0X3Vua25vd24pCisJCQkJCWdvdG8gZXJyOworCQkJCXByaW50X3Vua25vd25faGFuZGxlID0gdHJ1ZTsKKwkJCX0KKworCQkJaysrOworCQl9CisJCXBfb3V0LT5udW1fcGVybXMgPSBrOworCX0KKworCWlmIChwcmludF91bmtub3duX2hhbmRsZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU0VMaW51eDogdGhlIGFib3ZlIHVua25vd24gY2xhc3NlcyBhbmQgcGVybWlzc2lvbnMgd2lsbCBiZSAlc1xuIiwKKwkJICAgICAgIHBvbC0+YWxsb3dfdW5rbm93biA/ICJhbGxvd2VkIiA6ICJkZW5pZWQiKTsKKworCSpvdXRfbWFwX3AgPSBvdXRfbWFwOworCSpvdXRfbWFwX3NpemUgPSBpOworCXJldHVybiAwOworZXJyOgorCWtmcmVlKG91dF9tYXApOworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogR2V0IHJlYWwsIHBvbGljeSB2YWx1ZXMgZnJvbSBtYXBwZWQgdmFsdWVzCisgKi8KKworc3RhdGljIHUxNiB1bm1hcF9jbGFzcyh1MTYgdGNsYXNzKQoreworCWlmICh0Y2xhc3MgPCBjdXJyZW50X21hcHBpbmdfc2l6ZSkKKwkJcmV0dXJuIGN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnZhbHVlOworCisJcmV0dXJuIHRjbGFzczsKK30KKworc3RhdGljIHUzMiB1bm1hcF9wZXJtKHUxNiB0Y2xhc3MsIHUzMiB0cGVybSkKK3sKKwlpZiAodGNsYXNzIDwgY3VycmVudF9tYXBwaW5nX3NpemUpIHsKKwkJdW5zaWduZWQgaTsKKwkJdTMyIGtwZXJtID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY3VycmVudF9tYXBwaW5nW3RjbGFzc10ubnVtX3Blcm1zOyBpKyspCisJCQlpZiAodHBlcm0gJiAoMTw8aSkpIHsKKwkJCQlrcGVybSB8PSBjdXJyZW50X21hcHBpbmdbdGNsYXNzXS5wZXJtc1tpXTsKKwkJCQl0cGVybSAmPSB+KDE8PGkpOworCQkJfQorCQlyZXR1cm4ga3Blcm07CisJfQorCisJcmV0dXJuIHRwZXJtOworfQorCitzdGF0aWMgdm9pZCBtYXBfZGVjaXNpb24odTE2IHRjbGFzcywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQsCisJCQkgaW50IGFsbG93X3Vua25vd24pCit7CisJaWYgKHRjbGFzcyA8IGN1cnJlbnRfbWFwcGluZ19zaXplKSB7CisJCXVuc2lnbmVkIGksIG4gPSBjdXJyZW50X21hcHBpbmdbdGNsYXNzXS5udW1fcGVybXM7CisJCXUzMiByZXN1bHQ7CisKKwkJZm9yIChpID0gMCwgcmVzdWx0ID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKGF2ZC0+YWxsb3dlZCAmIGN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnBlcm1zW2ldKQorCQkJCXJlc3VsdCB8PSAxPDxpOworCQkJaWYgKGFsbG93X3Vua25vd24gJiYgIWN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnBlcm1zW2ldKQorCQkJCXJlc3VsdCB8PSAxPDxpOworCQl9CisJCWF2ZC0+YWxsb3dlZCA9IHJlc3VsdDsKKworCQlmb3IgKGkgPSAwLCByZXN1bHQgPSAwOyBpIDwgbjsgaSsrKQorCQkJaWYgKGF2ZC0+YXVkaXRhbGxvdyAmIGN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnBlcm1zW2ldKQorCQkJCXJlc3VsdCB8PSAxPDxpOworCQlhdmQtPmF1ZGl0YWxsb3cgPSByZXN1bHQ7CisKKwkJZm9yIChpID0gMCwgcmVzdWx0ID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKGF2ZC0+YXVkaXRkZW55ICYgY3VycmVudF9tYXBwaW5nW3RjbGFzc10ucGVybXNbaV0pCisJCQkJcmVzdWx0IHw9IDE8PGk7CisJCQlpZiAoIWFsbG93X3Vua25vd24gJiYgIWN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnBlcm1zW2ldKQorCQkJCXJlc3VsdCB8PSAxPDxpOworCQl9CisJCS8qCisJCSAqIEluIGNhc2UgdGhlIGtlcm5lbCBoYXMgYSBidWcgYW5kIHJlcXVlc3RzIGEgcGVybWlzc2lvbgorCQkgKiBiZXR3ZWVuIG51bV9wZXJtcyBhbmQgdGhlIG1heGltdW0gcGVybWlzc2lvbiBudW1iZXIsIHdlCisJCSAqIHNob3VsZCBhdWRpdCB0aGF0IGRlbmlhbAorCQkgKi8KKwkJZm9yICg7IGkgPCAoc2l6ZW9mKHUzMikqOCk7IGkrKykKKwkJCXJlc3VsdCB8PSAxPDxpOworCQlhdmQtPmF1ZGl0ZGVueSA9IHJlc3VsdDsKKwl9Cit9CisKKwogLyoKICAqIFJldHVybiB0aGUgYm9vbGVhbiB2YWx1ZSBvZiBhIGNvbnN0cmFpbnQgZXhwcmVzc2lvbgogICogd2hlbiBpdCBpcyBhcHBsaWVkIHRvIHRoZSBzcGVjaWZpZWQgc291cmNlIGFuZCB0YXJnZXQKQEAgLTQ2NywyMSArNjIwLDkgQEAKIAlzdHJ1Y3QgY2xhc3NfZGF0dW0gKnRjbGFzc19kYXR1bTsKIAlzdHJ1Y3QgZWJpdG1hcCAqc2F0dHIsICp0YXR0cjsKIAlzdHJ1Y3QgZWJpdG1hcF9ub2RlICpzbm9kZSwgKnRub2RlOwotCWNvbnN0IHN0cnVjdCBzZWxpbnV4X2NsYXNzX3Blcm0gKmtkZWZzID0gJnNlbGludXhfY2xhc3NfcGVybTsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAogCS8qCi0JICogUmVtYXAgZXh0ZW5kZWQgTmV0bGluayBjbGFzc2VzIGZvciBvbGQgcG9saWN5IHZlcnNpb25zLgotCSAqIERvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBzb2NrZXRfdHlwZV90b19zZWN1cml0eV9jbGFzcygpCi0JICogaW4gY2FzZSBhIG5ld2VyIHBvbGljeSB2ZXJzaW9uIGlzIGxvYWRlZCwgYWxsb3dpbmcgc29ja2V0cwotCSAqIHRvIHJlbWFpbiBpbiB0aGUgY29ycmVjdCBjbGFzcy4KLQkgKi8KLQlpZiAocG9saWN5ZGJfbG9hZGVkX3ZlcnNpb24gPCBQT0xJQ1lEQl9WRVJTSU9OX05MQ0xBU1MpCi0JCWlmICh0Y2xhc3MgPj0gU0VDQ0xBU1NfTkVUTElOS19ST1VURV9TT0NLRVQgJiYKLQkJICAgIHRjbGFzcyA8PSBTRUNDTEFTU19ORVRMSU5LX0ROUlRfU09DS0VUKQotCQkJdGNsYXNzID0gU0VDQ0xBU1NfTkVUTElOS19TT0NLRVQ7Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgdGhlIGFjY2VzcyB2ZWN0b3JzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4KIAkgKi8KIAlhdmQtPmFsbG93ZWQgPSAwOwpAQCAtNDkwLDMzICs2MzEsMTEgQEAKIAlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwogCWF2ZC0+ZmxhZ3MgPSAwOwogCi0JLyoKLQkgKiBDaGVjayBmb3IgYWxsIHRoZSBpbnZhbGlkIGNhc2VzLgotCSAqIC0gdGNsYXNzIDAKLQkgKiAtIHRjbGFzcyA+IHBvbGljeSBhbmQgPiBrZXJuZWwKLQkgKiAtIHRjbGFzcyA+IHBvbGljeSBidXQgaXMgYSB1c2Vyc3BhY2UgY2xhc3MKLQkgKiAtIHRjbGFzcyA+IHBvbGljeSBidXQgd2UgZG8gbm90IGFsbG93IHVua25vd25zCi0JICovCi0JaWYgKHVubGlrZWx5KCF0Y2xhc3MpKQotCQlnb3RvIGludmFsX2NsYXNzOwotCWlmICh1bmxpa2VseSh0Y2xhc3MgPiBwb2xpY3lkYi5wX2NsYXNzZXMubnByaW0pKQotCQlpZiAodGNsYXNzID4ga2RlZnMtPmN0c19sZW4gfHwKLQkJICAgICFrZGVmcy0+Y2xhc3NfdG9fc3RyaW5nW3RjbGFzc10gfHwKLQkJICAgICFwb2xpY3lkYi5hbGxvd191bmtub3duKQotCQkJZ290byBpbnZhbF9jbGFzczsKLQotCS8qCi0JICogS2VybmVsIGNsYXNzIGFuZCB3ZSBhbGxvdyB1bmtub3duIHNvIHBhZCB0aGUgYWxsb3cgZGVjaXNpb24KLQkgKiB0aGUgcGFkIHdpbGwgYmUgYWxsIDEgZm9yIHVua25vd24gY2xhc3Nlcy4KLQkgKi8KLQlpZiAodGNsYXNzIDw9IGtkZWZzLT5jdHNfbGVuICYmIHBvbGljeWRiLmFsbG93X3Vua25vd24pCi0JCWF2ZC0+YWxsb3dlZCA9IHBvbGljeWRiLnVuZGVmaW5lZF9wZXJtc1t0Y2xhc3MgLSAxXTsKLQotCS8qCi0JICogTm90IGluIHBvbGljeS4gU2luY2UgZGVjaXNpb24gaXMgY29tcGxldGVkIChhbGwgMSBvciBhbGwgMCkgcmV0dXJuLgotCSAqLwotCWlmICh1bmxpa2VseSh0Y2xhc3MgPiBwb2xpY3lkYi5wX2NsYXNzZXMubnByaW0pKQotCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkoIXRjbGFzcyB8fCB0Y2xhc3MgPiBwb2xpY3lkYi5wX2NsYXNzZXMubnByaW0pKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgSW52YWxpZCBjbGFzcyAlaHVcbiIsIHRjbGFzcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXRjbGFzc19kYXR1bSA9IHBvbGljeWRiLmNsYXNzX3ZhbF90b19zdHJ1Y3RbdGNsYXNzIC0gMV07CiAKQEAgLTU2OCw4ICs2ODcsOCBAQAogCSAqIHJvbGUgaXMgY2hhbmdpbmcsIHRoZW4gY2hlY2sgdGhlIChjdXJyZW50X3JvbGUsIG5ld19yb2xlKQogCSAqIHBhaXIuCiAJICovCi0JaWYgKHRjbGFzcyA9PSBTRUNDTEFTU19QUk9DRVNTICYmCi0JICAgIChhdmQtPmFsbG93ZWQgJiAoUFJPQ0VTU19fVFJBTlNJVElPTiB8IFBST0NFU1NfX0RZTlRSQU5TSVRJT04pKSAmJgorCWlmICh0Y2xhc3MgPT0gcG9saWN5ZGIucHJvY2Vzc19jbGFzcyAmJgorCSAgICAoYXZkLT5hbGxvd2VkICYgcG9saWN5ZGIucHJvY2Vzc190cmFuc19wZXJtcykgJiYKIAkgICAgc2NvbnRleHQtPnJvbGUgIT0gdGNvbnRleHQtPnJvbGUpIHsKIAkJZm9yIChyYSA9IHBvbGljeWRiLnJvbGVfYWxsb3c7IHJhOyByYSA9IHJhLT5uZXh0KSB7CiAJCQlpZiAoc2NvbnRleHQtPnJvbGUgPT0gcmEtPnJvbGUgJiYKQEAgLTU3Nyw4ICs2OTYsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghcmEpCi0JCQlhdmQtPmFsbG93ZWQgJj0gfihQUk9DRVNTX19UUkFOU0lUSU9OIHwKLQkJCQkJICBQUk9DRVNTX19EWU5UUkFOU0lUSU9OKTsKKwkJCWF2ZC0+YWxsb3dlZCAmPSB+cG9saWN5ZGIucHJvY2Vzc190cmFuc19wZXJtczsKIAl9CiAKIAkvKgpAQCAtNTkwLDIxICs3MDgsNiBAQAogCQkJCSB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKIAogCXJldHVybiAwOwotCi1pbnZhbF9jbGFzczoKLQlpZiAoIXRjbGFzcyB8fCB0Y2xhc3MgPiBrZGVmcy0+Y3RzX2xlbiB8fAotCSAgICAha2RlZnMtPmNsYXNzX3RvX3N0cmluZ1t0Y2xhc3NdKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIGNsYXNzICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCB0Y2xhc3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEtub3duIHRvIHRoZSBrZXJuZWwsIGJ1dCBub3QgdG8gdGhlIHBvbGljeS4KLQkgKiBIYW5kbGUgYXMgYSBkZW5pYWwgKGFsbG93ZWQgaXMgMCkuCi0JICovCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2VjdXJpdHlfdmFsaWR0cmFuc19oYW5kbGVfZmFpbChzdHJ1Y3QgY29udGV4dCAqb2NvbnRleHQsCkBAIC02MzYsMTMgKzczOSwxNCBAQAogfQogCiBpbnQgc2VjdXJpdHlfdmFsaWRhdGVfdHJhbnNpdGlvbih1MzIgb2xkc2lkLCB1MzIgbmV3c2lkLCB1MzIgdGFza3NpZCwKLQkJCQkgdTE2IHRjbGFzcykKKwkJCQkgdTE2IG9yaWdfdGNsYXNzKQogewogCXN0cnVjdCBjb250ZXh0ICpvY29udGV4dDsKIAlzdHJ1Y3QgY29udGV4dCAqbmNvbnRleHQ7CiAJc3RydWN0IGNvbnRleHQgKnRjb250ZXh0OwogCXN0cnVjdCBjbGFzc19kYXR1bSAqdGNsYXNzX2RhdHVtOwogCXN0cnVjdCBjb25zdHJhaW50X25vZGUgKmNvbnN0cmFpbnQ7CisJdTE2IHRjbGFzczsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFzc19pbml0aWFsaXplZCkKQEAgLTY1MCwxNiArNzU0LDcgQEAKIAogCXJlYWRfbG9jaygmcG9saWN5X3J3bG9jayk7CiAKLQkvKgotCSAqIFJlbWFwIGV4dGVuZGVkIE5ldGxpbmsgY2xhc3NlcyBmb3Igb2xkIHBvbGljeSB2ZXJzaW9ucy4KLQkgKiBEbyB0aGlzIGhlcmUgcmF0aGVyIHRoYW4gc29ja2V0X3R5cGVfdG9fc2VjdXJpdHlfY2xhc3MoKQotCSAqIGluIGNhc2UgYSBuZXdlciBwb2xpY3kgdmVyc2lvbiBpcyBsb2FkZWQsIGFsbG93aW5nIHNvY2tldHMKLQkgKiB0byByZW1haW4gaW4gdGhlIGNvcnJlY3QgY2xhc3MuCi0JICovCi0JaWYgKHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uIDwgUE9MSUNZREJfVkVSU0lPTl9OTENMQVNTKQotCQlpZiAodGNsYXNzID49IFNFQ0NMQVNTX05FVExJTktfUk9VVEVfU09DS0VUICYmCi0JCSAgICB0Y2xhc3MgPD0gU0VDQ0xBU1NfTkVUTElOS19ETlJUX1NPQ0tFVCkKLQkJCXRjbGFzcyA9IFNFQ0NMQVNTX05FVExJTktfU09DS0VUOworCXRjbGFzcyA9IHVubWFwX2NsYXNzKG9yaWdfdGNsYXNzKTsKIAogCWlmICghdGNsYXNzIHx8IHRjbGFzcyA+IHBvbGljeWRiLnBfY2xhc3Nlcy5ucHJpbSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIGNsYXNzICVkXG4iLApAQCAtNzkyLDYgKzg4NywzOCBAQAogfQogCiAKK3N0YXRpYyBpbnQgc2VjdXJpdHlfY29tcHV0ZV9hdl9jb3JlKHUzMiBzc2lkLAorCQkJCSAgICB1MzIgdHNpZCwKKwkJCQkgICAgdTE2IHRjbGFzcywKKwkJCQkgICAgdTMyIHJlcXVlc3RlZCwKKwkJCQkgICAgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCit7CisJc3RydWN0IGNvbnRleHQgKnNjb250ZXh0ID0gTlVMTCwgKnRjb250ZXh0ID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOworCWlmICghc2NvbnRleHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3NpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7CisJaWYgKCF0Y29udGV4dCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSBjb250ZXh0X3N0cnVjdF9jb21wdXRlX2F2KHNjb250ZXh0LCB0Y29udGV4dCwgdGNsYXNzLAorCQkJCSAgICAgICByZXF1ZXN0ZWQsIGF2ZCk7CisKKwkvKiBwZXJtaXNzaXZlIGRvbWFpbj8gKi8KKwlpZiAoZWJpdG1hcF9nZXRfYml0KCZwb2xpY3lkYi5wZXJtaXNzaXZlX21hcCwgc2NvbnRleHQtPnR5cGUpKQorCQlhdmQtPmZsYWdzIHw9IEFWRF9GTEFHU19QRVJNSVNTSVZFOworCisJcmV0dXJuIHJjOworfQorCiAvKioKICAqIHNlY3VyaXR5X2NvbXB1dGVfYXYgLSBDb21wdXRlIGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zLgogICogQHNzaWQ6IHNvdXJjZSBzZWN1cml0eSBpZGVudGlmaWVyCkBAIC04MDcsMTIgKzkzNCw0OSBAQAogICovCiBpbnQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwKIAkJCXUzMiB0c2lkLAotCQkJdTE2IHRjbGFzcywKLQkJCXUzMiByZXF1ZXN0ZWQsCisJCQl1MTYgb3JpZ190Y2xhc3MsCisJCQl1MzIgb3JpZ19yZXF1ZXN0ZWQsCiAJCQlzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKLQlzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQgPSBOVUxMLCAqdGNvbnRleHQgPSBOVUxMOwotCWludCByYyA9IDA7CisJdTE2IHRjbGFzczsKKwl1MzIgcmVxdWVzdGVkOworCWludCByYzsKKworCXJlYWRfbG9jaygmcG9saWN5X3J3bG9jayk7CisKKwlpZiAoIXNzX2luaXRpYWxpemVkKQorCQlnb3RvIGFsbG93OworCisJcmVxdWVzdGVkID0gdW5tYXBfcGVybShvcmlnX3RjbGFzcywgb3JpZ19yZXF1ZXN0ZWQpOworCXRjbGFzcyA9IHVubWFwX2NsYXNzKG9yaWdfdGNsYXNzKTsKKwlpZiAodW5saWtlbHkob3JpZ190Y2xhc3MgJiYgIXRjbGFzcykpIHsKKwkJaWYgKHBvbGljeWRiLmFsbG93X3Vua25vd24pCisJCQlnb3RvIGFsbG93OworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXZfY29yZShzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKKwltYXBfZGVjaXNpb24ob3JpZ190Y2xhc3MsIGF2ZCwgcG9saWN5ZGIuYWxsb3dfdW5rbm93bik7CitvdXQ6CisJcmVhZF91bmxvY2soJnBvbGljeV9yd2xvY2spOworCXJldHVybiByYzsKK2FsbG93OgorCWF2ZC0+YWxsb3dlZCA9IDB4ZmZmZmZmZmY7CisJYXZkLT5hdWRpdGFsbG93ID0gMDsKKwlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CisJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKKwlhdmQtPmZsYWdzID0gMDsKKwlyYyA9IDA7CisJZ290byBvdXQ7Cit9CisKK2ludCBzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIodTMyIHNzaWQsCisJCQkgICAgIHUzMiB0c2lkLAorCQkJICAgICB1MTYgdGNsYXNzLAorCQkJICAgICB1MzIgcmVxdWVzdGVkLAorCQkJICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKK3sKKwlpbnQgcmM7CiAKIAlpZiAoIXNzX2luaXRpYWxpemVkKSB7CiAJCWF2ZC0+YWxsb3dlZCA9IDB4ZmZmZmZmZmY7CkBAIC04MjMsMjkgKzk4Nyw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZwb2xpY3lfcndsb2NrKTsKLQotCXNjb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBzc2lkKTsKLQlpZiAoIXNjb250ZXh0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIHNzaWQpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7Ci0JaWYgKCF0Y29udGV4dCkgewotCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IGNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc2NvbnRleHQsIHRjb250ZXh0LCB0Y2xhc3MsCi0JCQkJICAgICAgIHJlcXVlc3RlZCwgYXZkKTsKLQotCS8qIHBlcm1pc3NpdmUgZG9tYWluPyAqLwotCWlmIChlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBlcm1pc3NpdmVfbWFwLCBzY29udGV4dC0+dHlwZSkpCi0JICAgIGF2ZC0+ZmxhZ3MgfD0gQVZEX0ZMQUdTX1BFUk1JU1NJVkU7Ci1vdXQ6CisJcmMgPSBzZWN1cml0eV9jb21wdXRlX2F2X2NvcmUoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIGF2ZCk7CiAJcmVhZF91bmxvY2soJnBvbGljeV9yd2xvY2spOwogCXJldHVybiByYzsKIH0KQEAgLTEyMDQsMjAgKzEzNDYsMjIgQEAKIAogc3RhdGljIGludCBzZWN1cml0eV9jb21wdXRlX3NpZCh1MzIgc3NpZCwKIAkJCQl1MzIgdHNpZCwKLQkJCQl1MTYgdGNsYXNzLAorCQkJCXUxNiBvcmlnX3RjbGFzcywKIAkJCQl1MzIgc3BlY2lmaWVkLAotCQkJCXUzMiAqb3V0X3NpZCkKKwkJCQl1MzIgKm91dF9zaWQsCisJCQkJYm9vbCBrZXJuKQogewogCXN0cnVjdCBjb250ZXh0ICpzY29udGV4dCA9IE5VTEwsICp0Y29udGV4dCA9IE5VTEwsIG5ld2NvbnRleHQ7CiAJc3RydWN0IHJvbGVfdHJhbnMgKnJvbGV0ciA9IE5VTEw7CiAJc3RydWN0IGF2dGFiX2tleSBhdmtleTsKIAlzdHJ1Y3QgYXZ0YWJfZGF0dW0gKmF2ZGF0dW07CiAJc3RydWN0IGF2dGFiX25vZGUgKm5vZGU7CisJdTE2IHRjbGFzczsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFzc19pbml0aWFsaXplZCkgewotCQlzd2l0Y2ggKHRjbGFzcykgewotCQljYXNlIFNFQ0NMQVNTX1BST0NFU1M6CisJCXN3aXRjaCAob3JpZ190Y2xhc3MpIHsKKwkJY2FzZSBTRUNDTEFTU19QUk9DRVNTOiAvKiBrZXJuZWwgdmFsdWUgKi8KIAkJCSpvdXRfc2lkID0gc3NpZDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTIzMSw2ICsxMzc1LDExIEBACiAKIAlyZWFkX2xvY2soJnBvbGljeV9yd2xvY2spOwogCisJaWYgKGtlcm4pCisJCXRjbGFzcyA9IHVubWFwX2NsYXNzKG9yaWdfdGNsYXNzKTsKKwllbHNlCisJCXRjbGFzcyA9IG9yaWdfdGNsYXNzOworCiAJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOwogCWlmICghc2NvbnRleHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCkBAIC0xMjYwLDEzICsxNDA5LDExIEBACiAJfQogCiAJLyogU2V0IHRoZSByb2xlIGFuZCB0eXBlIHRvIGRlZmF1bHQgdmFsdWVzLiAqLwotCXN3aXRjaCAodGNsYXNzKSB7Ci0JY2FzZSBTRUNDTEFTU19QUk9DRVNTOgorCWlmICh0Y2xhc3MgPT0gcG9saWN5ZGIucHJvY2Vzc19jbGFzcykgewogCQkvKiBVc2UgdGhlIGN1cnJlbnQgcm9sZSBhbmQgdHlwZSBvZiBwcm9jZXNzLiAqLwogCQluZXdjb250ZXh0LnJvbGUgPSBzY29udGV4dC0+cm9sZTsKIAkJbmV3Y29udGV4dC50eXBlID0gc2NvbnRleHQtPnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJfSBlbHNlIHsKIAkJLyogVXNlIHRoZSB3ZWxsLWRlZmluZWQgb2JqZWN0IHJvbGUuICovCiAJCW5ld2NvbnRleHQucm9sZSA9IE9CSkVDVF9SX1ZBTDsKIAkJLyogVXNlIHRoZSB0eXBlIG9mIHRoZSByZWxhdGVkIG9iamVjdC4gKi8KQEAgLTEyOTcsOCArMTQ0NCw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGNsYXNzLXNwZWNpZmljIGNoYW5nZXMuICovCi0Jc3dpdGNoICh0Y2xhc3MpIHsKLQljYXNlIFNFQ0NMQVNTX1BST0NFU1M6CisJaWYgICh0Y2xhc3MgPT0gcG9saWN5ZGIucHJvY2Vzc19jbGFzcykgewogCQlpZiAoc3BlY2lmaWVkICYgQVZUQUJfVFJBTlNJVElPTikgewogCQkJLyogTG9vayBmb3IgYSByb2xlIHRyYW5zaXRpb24gcnVsZS4gKi8KIAkJCWZvciAocm9sZXRyID0gcG9saWN5ZGIucm9sZV90cjsgcm9sZXRyOwpAQCAtMTMxMSw5ICsxNDU3LDYgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCiAJLyogU2V0IHRoZSBNTFMgYXR0cmlidXRlcy4KQEAgLTEzNTgsNyArMTUwMSwxNyBAQAogCQkJICAgIHUxNiB0Y2xhc3MsCiAJCQkgICAgdTMyICpvdXRfc2lkKQogewotCXJldHVybiBzZWN1cml0eV9jb21wdXRlX3NpZChzc2lkLCB0c2lkLCB0Y2xhc3MsIEFWVEFCX1RSQU5TSVRJT04sIG91dF9zaWQpOworCXJldHVybiBzZWN1cml0eV9jb21wdXRlX3NpZChzc2lkLCB0c2lkLCB0Y2xhc3MsIEFWVEFCX1RSQU5TSVRJT04sCisJCQkJICAgIG91dF9zaWQsIHRydWUpOworfQorCitpbnQgc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWRfdXNlcih1MzIgc3NpZCwKKwkJCQkgdTMyIHRzaWQsCisJCQkJIHUxNiB0Y2xhc3MsCisJCQkJIHUzMiAqb3V0X3NpZCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfY29tcHV0ZV9zaWQoc3NpZCwgdHNpZCwgdGNsYXNzLCBBVlRBQl9UUkFOU0lUSU9OLAorCQkJCSAgICBvdXRfc2lkLCBmYWxzZSk7CiB9CiAKIC8qKgpAQCAtMTM3OSw3ICsxNTMyLDggQEAKIAkJCXUxNiB0Y2xhc3MsCiAJCQl1MzIgKm91dF9zaWQpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X2NvbXB1dGVfc2lkKHNzaWQsIHRzaWQsIHRjbGFzcywgQVZUQUJfTUVNQkVSLCBvdXRfc2lkKTsKKwlyZXR1cm4gc2VjdXJpdHlfY29tcHV0ZV9zaWQoc3NpZCwgdHNpZCwgdGNsYXNzLCBBVlRBQl9NRU1CRVIsIG91dF9zaWQsCisJCQkJICAgIGZhbHNlKTsKIH0KIAogLyoqCkBAIC0xNDAwLDE0NCArMTU1NCw4IEBACiAJCQl1MTYgdGNsYXNzLAogCQkJdTMyICpvdXRfc2lkKQogewotCXJldHVybiBzZWN1cml0eV9jb21wdXRlX3NpZChzc2lkLCB0c2lkLCB0Y2xhc3MsIEFWVEFCX0NIQU5HRSwgb3V0X3NpZCk7Ci19Ci0KLS8qCi0gKiBWZXJpZnkgdGhhdCBlYWNoIGtlcm5lbCBjbGFzcyB0aGF0IGlzIGRlZmluZWQgaW4gdGhlCi0gKiBwb2xpY3kgaXMgY29ycmVjdAotICovCi1zdGF0aWMgaW50IHZhbGlkYXRlX2NsYXNzZXMoc3RydWN0IHBvbGljeWRiICpwKQotewotCWludCBpLCBqOwotCXN0cnVjdCBjbGFzc19kYXR1bSAqY2xhZGF0dW07Ci0Jc3RydWN0IHBlcm1fZGF0dW0gKnBlcmRhdHVtOwotCXUzMiBucHJpbSwgdG1wLCBjb21tb25fcHRzX2xlbiwgcGVybV92YWwsIHBvbF92YWw7Ci0JdTE2IGNsYXNzX3ZhbDsKLQljb25zdCBzdHJ1Y3Qgc2VsaW51eF9jbGFzc19wZXJtICprZGVmcyA9ICZzZWxpbnV4X2NsYXNzX3Blcm07Ci0JY29uc3QgY2hhciAqZGVmX2NsYXNzLCAqZGVmX3Blcm0sICpwb2xfY2xhc3M7Ci0Jc3RydWN0IHN5bXRhYiAqcGVybXM7Ci0JYm9vbCBwcmludF91bmtub3duX2hhbmRsZSA9IDA7Ci0KLQlpZiAocC0+YWxsb3dfdW5rbm93bikgewotCQl1MzIgbnVtX2NsYXNzZXMgPSBrZGVmcy0+Y3RzX2xlbjsKLQkJcC0+dW5kZWZpbmVkX3Blcm1zID0ga2NhbGxvYyhudW1fY2xhc3Nlcywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCQlpZiAoIXAtPnVuZGVmaW5lZF9wZXJtcykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZvciAoaSA9IDE7IGkgPCBrZGVmcy0+Y3RzX2xlbjsgaSsrKSB7Ci0JCWRlZl9jbGFzcyA9IGtkZWZzLT5jbGFzc190b19zdHJpbmdbaV07Ci0JCWlmICghZGVmX2NsYXNzKQotCQkJY29udGludWU7Ci0JCWlmIChpID4gcC0+cF9jbGFzc2VzLm5wcmltKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIlNFTGludXg6ICBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCi0JCQkgICAgICAgZGVmX2NsYXNzKTsKLQkJCWlmIChwLT5yZWplY3RfdW5rbm93bikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChwLT5hbGxvd191bmtub3duKQotCQkJCXAtPnVuZGVmaW5lZF9wZXJtc1tpLTFdID0gfjBVOwotCQkJcHJpbnRfdW5rbm93bl9oYW5kbGUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJcG9sX2NsYXNzID0gcC0+cF9jbGFzc192YWxfdG9fbmFtZVtpLTFdOwotCQlpZiAoc3RyY21wKHBvbF9jbGFzcywgZGVmX2NsYXNzKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIlNFTGludXg6ICBjbGFzcyAlZCBpcyBpbmNvcnJlY3QsIGZvdW5kICVzIGJ1dCBzaG91bGQgYmUgJXNcbiIsCi0JCQkgICAgICAgaSwgcG9sX2NsYXNzLCBkZWZfY2xhc3MpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IGtkZWZzLT5hdl9wdHNfbGVuOyBpKyspIHsKLQkJY2xhc3NfdmFsID0ga2RlZnMtPmF2X3Blcm1fdG9fc3RyaW5nW2ldLnRjbGFzczsKLQkJcGVybV92YWwgPSBrZGVmcy0+YXZfcGVybV90b19zdHJpbmdbaV0udmFsdWU7Ci0JCWRlZl9wZXJtID0ga2RlZnMtPmF2X3Blcm1fdG9fc3RyaW5nW2ldLm5hbWU7Ci0JCWlmIChjbGFzc192YWwgPiBwLT5wX2NsYXNzZXMubnByaW0pCi0JCQljb250aW51ZTsKLQkJcG9sX2NsYXNzID0gcC0+cF9jbGFzc192YWxfdG9fbmFtZVtjbGFzc192YWwtMV07Ci0JCWNsYWRhdHVtID0gaGFzaHRhYl9zZWFyY2gocC0+cF9jbGFzc2VzLnRhYmxlLCBwb2xfY2xhc3MpOwotCQlCVUdfT04oIWNsYWRhdHVtKTsKLQkJcGVybXMgPSAmY2xhZGF0dW0tPnBlcm1pc3Npb25zOwotCQlucHJpbSA9IDEgPDwgKHBlcm1zLT5ucHJpbSAtIDEpOwotCQlpZiAocGVybV92YWwgPiBucHJpbSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJTRUxpbnV4OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCi0JCQkgICAgICAgZGVmX3Blcm0sIHBvbF9jbGFzcyk7Ci0JCQlpZiAocC0+cmVqZWN0X3Vua25vd24pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAocC0+YWxsb3dfdW5rbm93bikKLQkJCQlwLT51bmRlZmluZWRfcGVybXNbY2xhc3NfdmFsLTFdIHw9IHBlcm1fdmFsOwotCQkJcHJpbnRfdW5rbm93bl9oYW5kbGUgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQkJcGVyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChwZXJtcy0+dGFibGUsIGRlZl9wZXJtKTsKLQkJaWYgKHBlcmRhdHVtID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJTRUxpbnV4OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZm91bmQgaW4gcG9saWN5LCBiYWQgcG9saWN5XG4iLAotCQkJICAgICAgIGRlZl9wZXJtLCBwb2xfY2xhc3MpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcG9sX3ZhbCA9IDEgPDwgKHBlcmRhdHVtLT52YWx1ZSAtIDEpOwotCQlpZiAocG9sX3ZhbCAhPSBwZXJtX3ZhbCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIlNFTGludXg6ICBwZXJtaXNzaW9uICVzIGluIGNsYXNzICVzIGhhcyBpbmNvcnJlY3QgdmFsdWVcbiIsCi0JCQkgICAgICAgZGVmX3Blcm0sIHBvbF9jbGFzcyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwga2RlZnMtPmF2X2luaGVyaXRfbGVuOyBpKyspIHsKLQkJY2xhc3NfdmFsID0ga2RlZnMtPmF2X2luaGVyaXRbaV0udGNsYXNzOwotCQlpZiAoY2xhc3NfdmFsID4gcC0+cF9jbGFzc2VzLm5wcmltKQotCQkJY29udGludWU7Ci0JCXBvbF9jbGFzcyA9IHAtPnBfY2xhc3NfdmFsX3RvX25hbWVbY2xhc3NfdmFsLTFdOwotCQljbGFkYXR1bSA9IGhhc2h0YWJfc2VhcmNoKHAtPnBfY2xhc3Nlcy50YWJsZSwgcG9sX2NsYXNzKTsKLQkJQlVHX09OKCFjbGFkYXR1bSk7Ci0JCWlmICghY2xhZGF0dW0tPmNvbWRhdHVtKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiU0VMaW51eDogIGNsYXNzICVzIHNob3VsZCBoYXZlIGFuIGluaGVyaXRzIGNsYXVzZSBidXQgZG9lcyBub3RcbiIsCi0JCQkgICAgICAgcG9sX2NsYXNzKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXRtcCA9IGtkZWZzLT5hdl9pbmhlcml0W2ldLmNvbW1vbl9iYXNlOwotCQljb21tb25fcHRzX2xlbiA9IDA7Ci0JCXdoaWxlICghKHRtcCAmIDB4MDEpKSB7Ci0JCQljb21tb25fcHRzX2xlbisrOwotCQkJdG1wID4+PSAxOwotCQl9Ci0JCXBlcm1zID0gJmNsYWRhdHVtLT5jb21kYXR1bS0+cGVybWlzc2lvbnM7Ci0JCWZvciAoaiA9IDA7IGogPCBjb21tb25fcHRzX2xlbjsgaisrKSB7Ci0JCQlkZWZfcGVybSA9IGtkZWZzLT5hdl9pbmhlcml0W2ldLmNvbW1vbl9wdHNbal07Ci0JCQlpZiAoaiA+PSBwZXJtcy0+bnByaW0pIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJTRUxpbnV4OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZGVmaW5lZCBpbiBwb2xpY3lcbiIsCi0JCQkJICAgICAgIGRlZl9wZXJtLCBwb2xfY2xhc3MpOwotCQkJCWlmIChwLT5yZWplY3RfdW5rbm93bikKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJaWYgKHAtPmFsbG93X3Vua25vd24pCi0JCQkJCXAtPnVuZGVmaW5lZF9wZXJtc1tjbGFzc192YWwtMV0gfD0gKDEgPDwgaik7Ci0JCQkJcHJpbnRfdW5rbm93bl9oYW5kbGUgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJcGVyZGF0dW0gPSBoYXNodGFiX3NlYXJjaChwZXJtcy0+dGFibGUsIGRlZl9wZXJtKTsKLQkJCWlmIChwZXJkYXR1bSA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJTRUxpbnV4OiAgcGVybWlzc2lvbiAlcyBpbiBjbGFzcyAlcyBub3QgZm91bmQgaW4gcG9saWN5LCBiYWQgcG9saWN5XG4iLAotCQkJCSAgICAgICBkZWZfcGVybSwgcG9sX2NsYXNzKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChwZXJkYXR1bS0+dmFsdWUgIT0gaiArIDEpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIlNFTGludXg6ICBwZXJtaXNzaW9uICVzIGluIGNsYXNzICVzIGhhcyBpbmNvcnJlY3QgdmFsdWVcbiIsCi0JCQkJICAgICAgIGRlZl9wZXJtLCBwb2xfY2xhc3MpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCWlmIChwcmludF91bmtub3duX2hhbmRsZSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU0VMaW51eDogdGhlIGFib3ZlIHVua25vd24gY2xhc3NlcyBhbmQgcGVybWlzc2lvbnMgd2lsbCBiZSAlc1xuIiwKLQkJCShzZWN1cml0eV9nZXRfYWxsb3dfdW5rbm93bigpID8gImFsbG93ZWQiIDogImRlbmllZCIpKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VjdXJpdHlfY29tcHV0ZV9zaWQoc3NpZCwgdHNpZCwgdGNsYXNzLCBBVlRBQl9DSEFOR0UsIG91dF9zaWQsCisJCQkJICAgIGZhbHNlKTsKIH0KIAogLyogQ2xvbmUgdGhlIFNJRCBpbnRvIHRoZSBuZXcgU0lEIHRhYmxlLiAqLwpAQCAtMTcxMCw4ICsxNzI4LDEwIEBACiB7CiAJc3RydWN0IHBvbGljeWRiIG9sZHBvbGljeWRiLCBuZXdwb2xpY3lkYjsKIAlzdHJ1Y3Qgc2lkdGFiIG9sZHNpZHRhYiwgbmV3c2lkdGFiOworCXN0cnVjdCBzZWxpbnV4X21hcHBpbmcgKm9sZG1hcCwgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGNvbnZlcnRfY29udGV4dF9hcmdzIGFyZ3M7CiAJdTMyIHNlcW5vOworCXUxNiBtYXBfc2l6ZTsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBwb2xpY3lfZmlsZSBmaWxlID0geyBkYXRhLCBsZW4gfSwgKmZwID0gJmZpbGU7CiAKQEAgLTE3MjEsMjIgKzE3NDEsMTkgQEAKIAkJCWF2dGFiX2NhY2hlX2Rlc3Ryb3koKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWlmIChzZWxpbnV4X3NldF9tYXBwaW5nKCZwb2xpY3lkYiwgc2VjY2xhc3NfbWFwLAorCQkJCQkmY3VycmVudF9tYXBwaW5nLAorCQkJCQkmY3VycmVudF9tYXBwaW5nX3NpemUpKSB7CisJCQlwb2xpY3lkYl9kZXN0cm95KCZwb2xpY3lkYik7CisJCQlhdnRhYl9jYWNoZV9kZXN0cm95KCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlpZiAocG9saWN5ZGJfbG9hZF9pc2lkcygmcG9saWN5ZGIsICZzaWR0YWIpKSB7CiAJCQlwb2xpY3lkYl9kZXN0cm95KCZwb2xpY3lkYik7CiAJCQlhdnRhYl9jYWNoZV9kZXN0cm95KCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkvKiBWZXJpZnkgdGhhdCB0aGUga2VybmVsIGRlZmluZWQgY2xhc3NlcyBhcmUgY29ycmVjdC4gKi8KLQkJaWYgKHZhbGlkYXRlX2NsYXNzZXMoJnBvbGljeWRiKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIlNFTGludXg6ICB0aGUgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIGlzIGluY29ycmVjdFxuIik7Ci0JCQlzaWR0YWJfZGVzdHJveSgmc2lkdGFiKTsKLQkJCXBvbGljeWRiX2Rlc3Ryb3koJnBvbGljeWRiKTsKLQkJCWF2dGFiX2NhY2hlX2Rlc3Ryb3koKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCXNlY3VyaXR5X2xvYWRfcG9saWN5Y2FwcygpOwotCQlwb2xpY3lkYl9sb2FkZWRfdmVyc2lvbiA9IHBvbGljeWRiLnBvbGljeXZlcnM7CiAJCXNzX2luaXRpYWxpemVkID0gMTsKIAkJc2Vxbm8gPSArK2xhdGVzdF9ncmFudGluZzsKIAkJc2VsaW51eF9jb21wbGV0ZV9pbml0KCk7CkBAIC0xNzU5LDEzICsxNzc2LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JLyogVmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBkZWZpbmVkIGNsYXNzZXMgYXJlIGNvcnJlY3QuICovCi0JaWYgKHZhbGlkYXRlX2NsYXNzZXMoJm5ld3BvbGljeWRiKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJTRUxpbnV4OiAgdGhlIGRlZmluaXRpb24gb2YgYSBjbGFzcyBpcyBpbmNvcnJlY3RcbiIpOwotCQlyYyA9IC1FSU5WQUw7CisJaWYgKHNlbGludXhfc2V0X21hcHBpbmcoJm5ld3BvbGljeWRiLCBzZWNjbGFzc19tYXAsCisJCQkJJm1hcCwgJm1hcF9zaXplKSkKIAkJZ290byBlcnI7Ci0JfQogCiAJcmMgPSBzZWN1cml0eV9wcmVzZXJ2ZV9ib29scygmbmV3cG9saWN5ZGIpOwogCWlmIChyYykgewpAQCAtMTc5OSwxMyArMTgxMiwxNiBAQAogCW1lbWNweSgmcG9saWN5ZGIsICZuZXdwb2xpY3lkYiwgc2l6ZW9mIHBvbGljeWRiKTsKIAlzaWR0YWJfc2V0KCZzaWR0YWIsICZuZXdzaWR0YWIpOwogCXNlY3VyaXR5X2xvYWRfcG9saWN5Y2FwcygpOworCW9sZG1hcCA9IGN1cnJlbnRfbWFwcGluZzsKKwljdXJyZW50X21hcHBpbmcgPSBtYXA7CisJY3VycmVudF9tYXBwaW5nX3NpemUgPSBtYXBfc2l6ZTsKIAlzZXFubyA9ICsrbGF0ZXN0X2dyYW50aW5nOwotCXBvbGljeWRiX2xvYWRlZF92ZXJzaW9uID0gcG9saWN5ZGIucG9saWN5dmVyczsKIAl3cml0ZV91bmxvY2tfaXJxKCZwb2xpY3lfcndsb2NrKTsKIAogCS8qIEZyZWUgdGhlIG9sZCBwb2xpY3lkYiBhbmQgU0lEIHRhYmxlLiAqLwogCXBvbGljeWRiX2Rlc3Ryb3koJm9sZHBvbGljeWRiKTsKIAlzaWR0YWJfZGVzdHJveSgmb2xkc2lkdGFiKTsKKwlrZnJlZShvbGRtYXApOwogCiAJYXZjX3NzX3Jlc2V0KHNlcW5vKTsKIAlzZWxubF9ub3RpZnlfcG9saWN5bG9hZChzZXFubyk7CkBAIC0xODE1LDYgKzE4MzEsNyBAQAogCXJldHVybiAwOwogCiBlcnI6CisJa2ZyZWUobWFwKTsKIAlzaWR0YWJfZGVzdHJveSgmbmV3c2lkdGFiKTsKIAlwb2xpY3lkYl9kZXN0cm95KCZuZXdwb2xpY3lkYik7CiAJcmV0dXJuIHJjOwpAQCAtMjA5MSw3ICsyMTA4LDcgQEAKIAl9CiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBteW5lbDsgaSsrKSB7CiAJCXJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoZnJvbXNpZCwgbXlzaWRzW2ldLAotCQkJCQkgIFNFQ0NMQVNTX1BST0NFU1MsCisJCQkJCSAgU0VDQ0xBU1NfUFJPQ0VTUywgLyoga2VybmVsIHZhbHVlICovCiAJCQkJCSAgUFJPQ0VTU19fVFJBTlNJVElPTiwgQVZDX1NUUklDVCwKIAkJCQkJICBOVUxMKTsKIAkJaWYgKCFyYykKQEAgLTIxMTksMTAgKzIxMzYsMTEgQEAKICAqLwogaW50IHNlY3VyaXR5X2dlbmZzX3NpZChjb25zdCBjaGFyICpmc3R5cGUsCiAJCSAgICAgICBjaGFyICpwYXRoLAotCQkgICAgICAgdTE2IHNjbGFzcywKKwkJICAgICAgIHUxNiBvcmlnX3NjbGFzcywKIAkJICAgICAgIHUzMiAqc2lkKQogewogCWludCBsZW47CisJdTE2IHNjbGFzczsKIAlzdHJ1Y3QgZ2VuZnMgKmdlbmZzOwogCXN0cnVjdCBvY29udGV4dCAqYzsKIAlpbnQgcmMgPSAwLCBjbXAgPSAwOwpAQCAtMjEzMiw2ICsyMTUwLDggQEAKIAogCXJlYWRfbG9jaygmcG9saWN5X3J3bG9jayk7CiAKKwlzY2xhc3MgPSB1bm1hcF9jbGFzcyhvcmlnX3NjbGFzcyk7CisKIAlmb3IgKGdlbmZzID0gcG9saWN5ZGIuZ2VuZnM7IGdlbmZzOyBnZW5mcyA9IGdlbmZzLT5uZXh0KSB7CiAJCWNtcCA9IHN0cmNtcChmc3R5cGUsIGdlbmZzLT5mc3R5cGUpOwogCQlpZiAoY21wIDw9IDApCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKaW5kZXggM2M4YmQ4ZS4uZTBkMDM1NCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMTg3LDYgKzE4Nyw4IEBACiAJCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKIAkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKIHsKKwljb25zdCBjaGFyICpjb25zdCBzdGFydCA9IGZpbGVuYW1lOworCWJvb2wgaW5fcmVwZXRpdGlvbiA9IGZhbHNlOwogCWJvb2wgY29udGFpbnNfcGF0dGVybiA9IGZhbHNlOwogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIGQ7CkBAIC0yMTIsOSArMjE0LDEzIEBACiAJCWlmIChjID09ICcvJykKIAkJCWdvdG8gb3V0OwogCX0KLQl3aGlsZSAoKGMgPSAqZmlsZW5hbWUrKykgIT0gJ1wwJykgeworCXdoaWxlICgxKSB7CisJCWMgPSAqZmlsZW5hbWUrKzsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CiAJCWlmIChjID09ICdcXCcpIHsKLQkJCXN3aXRjaCAoKGMgPSAqZmlsZW5hbWUrKykpIHsKKwkJCWMgPSAqZmlsZW5hbWUrKzsKKwkJCXN3aXRjaCAoYykgewogCQkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLwogCQkJCWNvbnRpbnVlOwogCQkJY2FzZSAnJCc6ICAgLyogIlwkIiAqLwpAQCAtMjMxLDYgKzIzNywyMiBAQAogCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCiAJCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7CiAJCQkJY29udGludWU7CisJCQljYXNlICd7JzogICAvKiAiL1x7IiAqLworCQkJCWlmIChmaWxlbmFtZSAtIDMgPCBzdGFydCB8fAorCQkJCSAgICAqKGZpbGVuYW1lIC0gMykgIT0gJy8nKQorCQkJCQlicmVhazsKKwkJCQlpZiAocGF0dGVybl90eXBlID09IC0xKQorCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCisJCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7CisJCQkJaW5fcmVwZXRpdGlvbiA9IHRydWU7CisJCQkJY29udGludWU7CisJCQljYXNlICd9JzogICAvKiAiXH0vIiAqLworCQkJCWlmICgqZmlsZW5hbWUgIT0gJy8nKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIWluX3JlcGV0aXRpb24pCisJCQkJCWJyZWFrOworCQkJCWluX3JlcGV0aXRpb24gPSBmYWxzZTsKKwkJCQljb250aW51ZTsKIAkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLwogCQkJY2FzZSAnMSc6CiAJCQljYXNlICcyJzoKQEAgLTI0Niw2ICsyNjgsOCBAQAogCQkJCQljb250aW51ZTsgLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLwogCQkJfQogCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoaW5fcmVwZXRpdGlvbiAmJiBjID09ICcvJykgeworCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAodG9tb3lvX2lzX2ludmFsaWQoYykpIHsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNTQsNiArMjc4LDggQEAKIAkJaWYgKCFjb250YWluc19wYXR0ZXJuKQogCQkJZ290byBvdXQ7CiAJfQorCWlmIChpbl9yZXBldGl0aW9uKQorCQlnb3RvIG91dDsKIAlyZXR1cm4gdHJ1ZTsKICBvdXQ6CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIHBhdGhuYW1lICclcydcbiIsIGZ1bmN0aW9uLApAQCAtMzYwLDMzICszODYsNiBAQAogfQogCiAvKioKLSAqIHRvbW95b19wYXRoX2RlcHRoIC0gRXZhbHVhdGUgdGhlIG51bWJlciBvZiAnLycgaW4gYSBzdHJpbmcuCi0gKgotICogQHBhdGhuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgotICoKLSAqIFJldHVybnMgcGF0aCBkZXB0aCBvZiB0aGUgc3RyaW5nLgotICoKLSAqIEkgc2NvcmUgMiBmb3IgZWFjaCBvZiB0aGUgJy8nIGluIHRoZSBAcGF0aG5hbWUKLSAqIGFuZCBzY29yZSAxIGlmIHRoZSBAcGF0aG5hbWUgZW5kcyB3aXRoICcvJy4KLSAqLwotc3RhdGljIGludCB0b21veW9fcGF0aF9kZXB0aChjb25zdCBjaGFyICpwYXRobmFtZSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAocGF0aG5hbWUpIHsKLQkJY29uc3QgY2hhciAqZXAgPSBwYXRobmFtZSArIHN0cmxlbihwYXRobmFtZSk7Ci0JCWlmIChwYXRobmFtZSA8IGVwLS0pIHsKLQkJCWlmICgqZXAgIT0gJy8nKQotCQkJCWkrKzsKLQkJCXdoaWxlIChwYXRobmFtZSA8PSBlcCkKLQkJCQlpZiAoKmVwLS0gPT0gJy8nKQotCQkJCQlpICs9IDI7Ci0JCX0KLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLS8qKgogICogdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoIC0gRXZhbHVhdGUgdGhlIGluaXRpYWwgbGVuZ3RoIHdpdGhvdXQgYSBwYXR0ZXJuIGluIGEgdG9rZW4uCiAgKgogICogQGZpbGVuYW1lOiBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgpAQCAtNDQ0LDExICs0NDMsMTAgQEAKIAlwdHItPmlzX2RpciA9IGxlbiAmJiAobmFtZVtsZW4gLSAxXSA9PSAnLycpOwogCXB0ci0+aXNfcGF0dGVybmVkID0gKHB0ci0+Y29uc3RfbGVuIDwgbGVuKTsKIAlwdHItPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBsZW4pOwotCXB0ci0+ZGVwdGggPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKTsKIH0KIAogLyoqCi0gKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yIC0gUGF0dGVybiBtYXRjaGluZyB3aXRob3V0ICcvJyBjaGFyYWN0ZXIKKyAqIHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIgLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgJy8nIGNoYXJhY3RlcgogICogYW5kICJcLSIgcGF0dGVybi4KICAqCiAgKiBAZmlsZW5hbWU6ICAgICBUaGUgc3RhcnQgb2Ygc3RyaW5nIHRvIGNoZWNrLgpAQCAtNDU4LDEwICs0NTYsMTAgQEAKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCi0JCQkJCSAgICBjb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3N0YXRpYyBib29sIHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSBjb25zdCBjaGFyICpmaWxlbmFtZV9lbmQsCisJCQkJCSBjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCiB7CiAJd2hpbGUgKGZpbGVuYW1lIDwgZmlsZW5hbWVfZW5kICYmIHBhdHRlcm4gPCBwYXR0ZXJuX2VuZCkgewogCQljaGFyIGM7CkBAIC01MTksNyArNTE3LDcgQEAKIAkJY2FzZSAnKic6CiAJCWNhc2UgJ0AnOgogCQkJZm9yIChpID0gMDsgaSA8PSBmaWxlbmFtZV9lbmQgLSBmaWxlbmFtZTsgaSsrKSB7Ci0JCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoCisJCQkJaWYgKHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoCiAJCQkJCQkgICAgZmlsZW5hbWUgKyBpLCBmaWxlbmFtZV9lbmQsCiAJCQkJCQkgICAgcGF0dGVybiArIDEsIHBhdHRlcm5fZW5kKSkKIAkJCQkJcmV0dXJuIHRydWU7CkBAIC01NTAsNyArNTQ4LDcgQEAKIAkJCQkJaisrOwogCQkJfQogCQkJZm9yIChpID0gMTsgaSA8PSBqOyBpKyspIHsKLQkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMigKKwkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMigKIAkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKIAkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKQEAgLTU2Nyw3ICs1NjUsNyBAQAogfQogCiAvKioKLSAqIHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCB3aXRob3V0ICcvJyBjaGFyYWN0ZXIuCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4gLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgd2l0aG91dCAnLycgY2hhcmFjdGVyLgogICoKICAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCiAgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KQEAgLTU3Niw3ICs1NzQsNyBAQAogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgbWF0Y2hlcyBAcGF0dGVybiwgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCitzdGF0aWMgYm9vbCB0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4oY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKIAkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybiwKIAkJCQkJICAgY29uc3QgY2hhciAqcGF0dGVybl9lbmQpCkBAIC01ODksMTAgKzU4NywxMCBAQAogCQkvKiBTcGxpdCBhdCAiXC0iIHBhdHRlcm4uICovCiAJCWlmICgqcGF0dGVybisrICE9ICdcXCcgfHwgKnBhdHRlcm4rKyAhPSAnLScpCiAJCQljb250aW51ZTsKLQkJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwKLQkJCQkJCQkgZmlsZW5hbWVfZW5kLAotCQkJCQkJCSBwYXR0ZXJuX3N0YXJ0LAotCQkJCQkJCSBwYXR0ZXJuIC0gMik7CisJCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybjIoZmlsZW5hbWUsCisJCQkJCQkgICAgICBmaWxlbmFtZV9lbmQsCisJCQkJCQkgICAgICBwYXR0ZXJuX3N0YXJ0LAorCQkJCQkJICAgICAgcGF0dGVybiAtIDIpOwogCQlpZiAoZmlyc3QpCiAJCQlyZXN1bHQgPSAhcmVzdWx0OwogCQlpZiAocmVzdWx0KQpAQCAtNjAwLDY0ICs1OTgsMzUgQEAKIAkJZmlyc3QgPSBmYWxzZTsKIAkJcGF0dGVybl9zdGFydCA9IHBhdHRlcm47CiAJfQotCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoZmlsZW5hbWUsIGZpbGVuYW1lX2VuZCwKLQkJCQkJCSBwYXR0ZXJuX3N0YXJ0LCBwYXR0ZXJuX2VuZCk7CisJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc19wYXR0ZXJuMihmaWxlbmFtZSwgZmlsZW5hbWVfZW5kLAorCQkJCQkgICAgICBwYXR0ZXJuX3N0YXJ0LCBwYXR0ZXJuX2VuZCk7CiAJcmV0dXJuIGZpcnN0ID8gcmVzdWx0IDogIXJlc3VsdDsKIH0KIAogLyoqCi0gKiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4gLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgotICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCi0gKiBAcGF0dGVybjogIFRoZSBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4yIC0gRG8gcGF0aG5hbWUgcGF0dGVybiBtYXRjaGluZy4KICAqCi0gKiBSZXR1cm5zIHRydWUgaWYgbWF0Y2hlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICogQGY6IFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAcDogVGhlIHN0YXJ0IG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KICAqCi0gKiBUaGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCi0gKiAgIFxcICAgICBcIGl0c2VsZi4KLSAqICAgXG9vbyAgIE9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYnl0ZS4KLSAqICAgXCogICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycuCi0gKiAgIFxAICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDAgY2hhcmFjdGVyIG90aGVyIHRoYW4gJy8nIG9yICcuJy4KLSAqICAgXD8gICAgIDEgYnl0ZSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycuCi0gKiAgIFwkICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgZGVjaW1hbCBkaWdpdC4KLSAqICAgXCsgICAgIDEgZGVjaW1hbCBkaWdpdC4KLSAqICAgXFggICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBoZXhhZGVjaW1hbCBkaWdpdC4KLSAqICAgXHggICAgIDEgaGV4YWRlY2ltYWwgZGlnaXQuCi0gKiAgIFxBICAgICBNb3JlIHRoYW4gb3IgZXF1YWxzIHRvIDEgYWxwaGFiZXQgY2hhcmFjdGVyLgotICogICBcYSAgICAgMSBhbHBoYWJldCBjaGFyYWN0ZXIuCi0gKiAgIFwtICAgICBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KKyAqIFJldHVybnMgdHJ1ZSBpZiBAZiBtYXRjaGVzIEBwLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLWJvb2wgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKLQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4pCitzdGF0aWMgYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4yKGNvbnN0IGNoYXIgKmYsIGNvbnN0IGNoYXIgKnApCiB7Ci0JLyoKLQkgIGlmICghZmlsZW5hbWUgfHwgIXBhdHRlcm4pCi0JICByZXR1cm4gZmFsc2U7Ci0JKi8KLQljb25zdCBjaGFyICpmID0gZmlsZW5hbWUtPm5hbWU7Ci0JY29uc3QgY2hhciAqcCA9IHBhdHRlcm4tPm5hbWU7Ci0JY29uc3QgaW50IGxlbiA9IHBhdHRlcm4tPmNvbnN0X2xlbjsKKwljb25zdCBjaGFyICpmX2RlbGltaXRlcjsKKwljb25zdCBjaGFyICpwX2RlbGltaXRlcjsKIAotCS8qIElmIEBwYXR0ZXJuIGRvZXNuJ3QgY29udGFpbiBwYXR0ZXJuLCBJIGNhbiB1c2Ugc3RyY21wKCkuICovCi0JaWYgKCFwYXR0ZXJuLT5pc19wYXR0ZXJuZWQpCi0JCXJldHVybiAhdG9tb3lvX3BhdGhjbXAoZmlsZW5hbWUsIHBhdHRlcm4pOwotCS8qIERvbnQgY29tcGFyZSBpZiB0aGUgbnVtYmVyIG9mICcvJyBkaWZmZXJzLiAqLwotCWlmIChmaWxlbmFtZS0+ZGVwdGggIT0gcGF0dGVybi0+ZGVwdGgpCi0JCXJldHVybiBmYWxzZTsKLQkvKiBDb21wYXJlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IHBhdHRlcm5zLiAqLwotCWlmIChzdHJuY21wKGYsIHAsIGxlbikpCi0JCXJldHVybiBmYWxzZTsKLQlmICs9IGxlbjsKLQlwICs9IGxlbjsKLQkvKiBNYWluIGxvb3AuIENvbXBhcmUgZWFjaCBkaXJlY3RvcnkgY29tcG9uZW50LiAqLwogCXdoaWxlICgqZiAmJiAqcCkgewotCQljb25zdCBjaGFyICpmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOwotCQljb25zdCBjaGFyICpwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOworCQlmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOwogCQlpZiAoIWZfZGVsaW1pdGVyKQogCQkJZl9kZWxpbWl0ZXIgPSBmICsgc3RybGVuKGYpOworCQlwX2RlbGltaXRlciA9IHN0cmNocihwLCAnLycpOwogCQlpZiAoIXBfZGVsaW1pdGVyKQogCQkJcF9kZWxpbWl0ZXIgPSBwICsgc3RybGVuKHApOwotCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybihmLCBmX2RlbGltaXRlciwKLQkJCQkJCSAgICBwLCBwX2RlbGltaXRlcikpCisJCWlmICgqcCA9PSAnXFwnICYmICoocCArIDEpID09ICd7JykKKwkJCWdvdG8gcmVjdXJzaXZlOworCQlpZiAoIXRvbW95b19maWxlX21hdGNoZXNfcGF0dGVybihmLCBmX2RlbGltaXRlciwgcCwKKwkJCQkJCSBwX2RlbGltaXRlcikpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCWYgPSBmX2RlbGltaXRlcjsKIAkJaWYgKCpmKQpAQCAtNjcxLDYgKzY0MCw3OSBAQAogCSAgICAgICAoKihwICsgMSkgPT0gJyonIHx8ICoocCArIDEpID09ICdAJykpCiAJCXAgKz0gMjsKIAlyZXR1cm4gISpmICYmICEqcDsKKyByZWN1cnNpdmU6CisJLyoKKwkgKiBUaGUgIlx7IiBwYXR0ZXJuIGlzIHBlcm1pdHRlZCBvbmx5IGFmdGVyICcvJyBjaGFyYWN0ZXIuCisJICogVGhpcyBndWFyYW50ZWVzIHRoYXQgYmVsb3cgIioocCAtIDEpIiBpcyBzYWZlLgorCSAqIEFsc28sIHRoZSAiXH0iIHBhdHRlcm4gaXMgcGVybWl0dGVkIG9ubHkgYmVmb3JlICcvJyBjaGFyYWN0ZXIKKwkgKiBzbyB0aGF0ICJceyIgKyAiXH0iIHBhaXIgd2lsbCBub3QgYnJlYWsgdGhlICJcLSIgb3BlcmF0b3IuCisJICovCisJaWYgKCoocCAtIDEpICE9ICcvJyB8fCBwX2RlbGltaXRlciA8PSBwICsgMyB8fCAqcF9kZWxpbWl0ZXIgIT0gJy8nIHx8CisJICAgICoocF9kZWxpbWl0ZXIgLSAxKSAhPSAnfScgfHwgKihwX2RlbGltaXRlciAtIDIpICE9ICdcXCcpCisJCXJldHVybiBmYWxzZTsgLyogQmFkIHBhdHRlcm4uICovCisJZG8geworCQkvKiBDb21wYXJlIGN1cnJlbnQgY29tcG9uZW50IHdpdGggcGF0dGVybi4gKi8KKwkJaWYgKCF0b21veW9fZmlsZV9tYXRjaGVzX3BhdHRlcm4oZiwgZl9kZWxpbWl0ZXIsIHAgKyAyLAorCQkJCQkJIHBfZGVsaW1pdGVyIC0gMikpCisJCQlicmVhazsKKwkJLyogUHJvY2VlZCB0byBuZXh0IGNvbXBvbmVudC4gKi8KKwkJZiA9IGZfZGVsaW1pdGVyOworCQlpZiAoISpmKQorCQkJYnJlYWs7CisJCWYrKzsKKwkJLyogQ29udGludWUgY29tcGFyaXNvbi4gKi8KKwkJaWYgKHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybjIoZiwgcF9kZWxpbWl0ZXIgKyAxKSkKKwkJCXJldHVybiB0cnVlOworCQlmX2RlbGltaXRlciA9IHN0cmNocihmLCAnLycpOworCX0gd2hpbGUgKGZfZGVsaW1pdGVyKTsKKwlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworfQorCisvKioKKyAqIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgKgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gY2hlY2suCisgKiBAcGF0dGVybjogIFRoZSBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIG1hdGNoZXMsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisgKiAgIFxcICAgICBcIGl0c2VsZi4KKyAqICAgXG9vbyAgIE9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGEgYnl0ZS4KKyAqICAgXCogICAgIFplcm8gb3IgbW9yZSByZXBldGl0aW9ucyBvZiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gJy8nLgorICogICBcQCAgICAgWmVybyBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiAnLycgb3IgJy4nLgorICogICBcPyAgICAgMSBieXRlIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXCQgICAgIE9uZSBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGRlY2ltYWwgZGlnaXRzLgorICogICBcKyAgICAgMSBkZWNpbWFsIGRpZ2l0LgorICogICBcWCAgICAgT25lIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLgorICogICBceCAgICAgMSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAqICAgXEEgICAgIE9uZSBvciBtb3JlIHJlcGV0aXRpb25zIG9mIGFscGhhYmV0IGNoYXJhY3RlcnMuCisgKiAgIFxhICAgICAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqCisgKiAgIFwtICAgICBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KKyAqCisgKiAgIC9ce2Rpclx9LyAgICcvJyArICdPbmUgb3IgbW9yZSByZXBldGl0aW9ucyBvZiBkaXIvJyAoZS5nLiAvZGlyLyAvZGlyL2Rpci8KKyAqICAgICAgICAgICAgICAgL2Rpci9kaXIvZGlyLyApLgorICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKQoreworCWNvbnN0IGNoYXIgKmYgPSBmaWxlbmFtZS0+bmFtZTsKKwljb25zdCBjaGFyICpwID0gcGF0dGVybi0+bmFtZTsKKwljb25zdCBpbnQgbGVuID0gcGF0dGVybi0+Y29uc3RfbGVuOworCisJLyogSWYgQHBhdHRlcm4gZG9lc24ndCBjb250YWluIHBhdHRlcm4sIEkgY2FuIHVzZSBzdHJjbXAoKS4gKi8KKwlpZiAoIXBhdHRlcm4tPmlzX3BhdHRlcm5lZCkKKwkJcmV0dXJuICF0b21veW9fcGF0aGNtcChmaWxlbmFtZSwgcGF0dGVybik7CisJLyogRG9uJ3QgY29tcGFyZSBkaXJlY3RvcnkgYW5kIG5vbi1kaXJlY3RvcnkuICovCisJaWYgKGZpbGVuYW1lLT5pc19kaXIgIT0gcGF0dGVybi0+aXNfZGlyKQorCQlyZXR1cm4gZmFsc2U7CisJLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBwYXR0ZXJucy4gKi8KKwlpZiAoc3RybmNtcChmLCBwLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJZiArPSBsZW47CisJcCArPSBsZW47CisJcmV0dXJuIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybjIoZiwgcCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCmluZGV4IDMxZGY1NDEuLjkyMTY5ZDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uaAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTU2LDkgKzU2LDYgQEAKICAqICg1KSAiaXNfcGF0dGVybmVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibmFtZSIgY29udGFpbnMgd2lsZGNhcmQKICAqICAgICBjaGFyYWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UuIFRoaXMgYWxsb3dzIFRPTU9ZTyB0byB1c2UgImhhc2giIGFuZAogICogICAgIHN0cmNtcCgpIGZvciBzdHJpbmcgY29tcGFyaXNvbiBpZiAiaXNfcGF0dGVybmVkIiBpcyBmYWxzZS4KLSAqICg2KSAiZGVwdGgiIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIG51bWJlciBvZiAiLyIgY2hhcmFjdGVycyBpbiAibmFtZSIuCi0gKiAgICAgVGhpcyBhbGxvd3MgVE9NT1lPIHRvIGF2b2lkIGNvbXBhcmluZyB0d28gcGF0aG5hbWVzIHdoaWNoIG5ldmVyIG1hdGNoCi0gKiAgICAgKGUuZy4gd2hldGhlciAiL3Zhci93d3cvaHRtbC9pbmRleC5odG1sIiBtYXRjaGVzICIvdG1wL3NoLXRoZC1cJCIpLgogICovCiBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTY2LDcgKzYzLDYgQEAKIAl1MTYgY29uc3RfbGVuOyAgICAgLyogPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSkgICAgICovCiAJYm9vbCBpc19kaXI7ICAgICAgIC8qID0gdG9tb3lvX3N0cmVuZHN3aXRoKG5hbWUsICIvIikgICAgICAqLwogCWJvb2wgaXNfcGF0dGVybmVkOyAvKiA9IHRvbW95b19wYXRoX2NvbnRhaW5zX3BhdHRlcm4obmFtZSkgKi8KLQl1MTYgZGVwdGg7ICAgICAgICAgLyogPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKSAgICAgICAgICAgICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwppbmRleCA1ZjJlMzMyLi45MTdmNTY0IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYworKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMTMsNiArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKwogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInJlYWxwYXRoLmgiCiAKQEAgLTI2Myw3ICsyNjUsOCBAQAogICogdGFibGUuIEZyZXF1ZW5jeSBvZiBhcHBlbmRpbmcgc3RyaW5ncyBpcyB2ZXJ5IGxvdy4gU28gd2UgZG9uJ3QgbmVlZAogICogbGFyZ2UgKGUuZy4gNjRrKSBoYXNoIHNpemUuIDI1NiB3aWxsIGJlIHN1ZmZpY2llbnQuCiAgKi8KLSNkZWZpbmUgVE9NT1lPX01BWF9IQVNIIDI1NgorI2RlZmluZSBUT01PWU9fSEFTSF9CSVRTICA4CisjZGVmaW5lIFRPTU9ZT19NQVhfSEFTSCAoMXU8PFRPTU9ZT19IQVNIX0JJVFMpCiAKIC8qCiAgKiB0b21veW9fbmFtZV9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBsaW5raW5nCkBAIC0zMTUsNiArMzE4LDcgQEAKIAlzdHJ1Y3QgdG9tb3lvX2ZyZWVfbWVtb3J5X2Jsb2NrX2xpc3QgKmZtYjsKIAlpbnQgbGVuOwogCWNoYXIgKmNwOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiBOVUxMOwpAQCAtMzI1LDkgKzMyOSwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOworCWhlYWQgPSAmdG9tb3lvX25hbWVfbGlzdFtoYXNoX2xvbmcoaGFzaCwgVE9NT1lPX0hBU0hfQklUUyldOworCiAJbXV0ZXhfbG9jaygmbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbmFtZV9saXN0W2hhc2ggJSBUT01PWU9fTUFYX0hBU0hdLAotCQkJICAgICBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKGhhc2ggPT0gcHRyLT5lbnRyeS5oYXNoICYmICFzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTM2NSw3ICszNzAsNyBAQAogCXRvbW95b19maWxsX3BhdGhfaW5mbygmcHRyLT5lbnRyeSk7CiAJZm1iLT5wdHIgKz0gbGVuOwogCWZtYi0+bGVuIC09IGxlbjsKLQlsaXN0X2FkZF90YWlsKCZwdHItPmxpc3QsICZ0b21veW9fbmFtZV9saXN0W2hhc2ggJSBUT01PWU9fTUFYX0hBU0hdKTsKKwlsaXN0X2FkZF90YWlsKCZwdHItPmxpc3QsIGhlYWQpOwogCWlmIChmbWItPmxlbiA9PSAwKSB7CiAJCWxpc3RfZGVsKCZmbWItPmxpc3QpOwogCQlrZnJlZShmbWIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggMWYwZjgyMS4uNmMxNjBhMCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC01MDQsNiArNTA0LDEwIEBACiAJaW50IGVycjsKIAogCWFhY2lfcGNtX2h3X2ZyZWUoc3Vic3RyZWFtKTsKKwlpZiAoYWFjaXJ1bi0+cGNtX29wZW4pIHsKKwkJc25kX2FjOTdfcGNtX2Nsb3NlKGFhY2lydW4tPnBjbSk7CisJCWFhY2lydW4tPnBjbV9vcGVuID0gMDsKKwl9CiAKIAllcnIgPSBkZXZkbWFfaHdfYWxsb2MoTlVMTCwgc3Vic3RyZWFtLAogCQkJICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKQEAgLTUxNyw3ICs1MjEsNyBAQAogCWVsc2UKIAkJZXJyID0gc25kX2FjOTdfcGNtX29wZW4oYWFjaXJ1bi0+cGNtLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAogCQkJCQlwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKLQkJCQkJYWFjaXJ1bi0+cGNtLT5yWzFdLnNsb3RzKTsKKwkJCQkJYWFjaXJ1bi0+cGNtLT5yWzBdLnNsb3RzKTsKIAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMGMxNDQwMS4uYzY5YzYwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC05NTMsMTEgKzk1MywxMiBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX25vdGlmeSAqbm90aWZ5OwogCWNoYXIgc3RyWzE2XTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWlmIChzbmRfQlVHX09OKCFwY20gfHwgIWRldmljZSkpCisJaWYgKHNuZF9CVUdfT04oIWRldmljZSB8fCAhZGV2aWNlLT5kZXZpY2VfZGF0YSkpCiAJCXJldHVybiAtRU5YSU87CisJcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJZXJyID0gc25kX3BjbV9hZGQocGNtKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IGMwYWRjMTQuLjcwZDZmMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0yNDgsNyArMjQ4LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwgJnMtPnN1YnN0cmVhbXMsIGxpc3QpIHsKIAkJaWYgKHN1YnN0cmVhbS0+b3BlbmVkKSB7CiAJCQlpZiAoc3RyZWFtID09IFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUIHx8Ci0JCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkpCisJCQkgICAgIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkgfHwKKwkJCSAgICAhc3Vic3RyZWFtLT5hcHBlbmQpCiAJCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN1YmRldmljZSA8IDAgfHwgc3ViZGV2aWNlID09IHN1YnN0cmVhbS0+bnVtYmVyKSB7CkBAIC0yNjYsMTcgKzI2NywyMSBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0Jc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwotCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCisJaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50ID09IDApIHsKKwkJZXJyID0gc25kX3Jhd21pZGlfcnVudGltZV9jcmVhdGUoc3Vic3RyZWFtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzdWJzdHJlYW0tPm9wcy0+b3BlbihzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXN1YnN0cmVhbS0+b3BlbmVkID0gMTsKIAkJc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZyA9IDA7Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQotCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDE7CisJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKKwkJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwl9CisJc3Vic3RyZWFtLT51c2VfY291bnQrKzsKIAlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOwogCXJldHVybiAwOwogfQpAQCAtMjk3LDI3ICszMDIsMjcgQEAKIAkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCiAJCQkJICAgICAgIG1vZGUsICZzaW5wdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewogCQllcnIgPSBhc3NpZ25fc3Vic3RyZWFtKHJtaWRpLCBzdWJkZXZpY2UsCiAJCQkJICAgICAgIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKIAkJCQkgICAgICAgbW9kZSwgJnNvdXRwdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKHNpbnB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCBtb2RlKTsKIAkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9fZXJyb3I7CisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoc291dHB1dCkgewogCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc291dHB1dCwgbW9kZSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpZiAoc2lucHV0KQogCQkJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCAwKTsKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiAKQEAgLTMyNSwxMyArMzMwLDYgQEAKIAlyZmlsZS0+aW5wdXQgPSBzaW5wdXQ7CiAJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7CiAJcmV0dXJuIDA7Ci0KLSAgICAgIF9fZXJyb3I6Ci0JaWYgKHNpbnB1dCAmJiBzaW5wdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzaW5wdXQpOwotCWlmIChzb3V0cHV0ICYmIHNvdXRwdXQtPnJ1bnRpbWUpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKLQlyZXR1cm4gZXJyOwogfQogCiAvKiBjYWxsZWQgZnJvbSBzb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jICovCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNmJhMDY2Yy4uMjUyZTA0YyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZXZzLCAiUENNIGRldmljZXMgIyAoMC00KSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9zdWJzdHJlYW1zLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwY21fc3Vic3RyZWFtcywgIlBDTSBzdWJzdHJlYW1zICMgKDEtMTYpIGZvciBkdW1teSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xMjgpIGZvciBkdW1teSBkcml2ZXIuIik7CiAvL21vZHVsZV9wYXJhbV9hcnJheShtaWRpX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiAvL01PRFVMRV9QQVJNX0RFU0MobWlkaV9kZXZzLCAiTUlESSBkZXZpY2VzICMgKDAtMikgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbShmYWtlX2J1ZmZlciwgYm9vbCwgMDQ0NCk7CkBAIC04MDgsOCArODA4LDYgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CiAKLQlpZiAoc25kX0JVR19PTighZHVtbXkpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaW5pdCgmZHVtbXktPm1peGVyX2xvY2spOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJEdW1teSBNaXhlciIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCmluZGV4IDg0Y2MyNjUuLmUxMTQ1YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCkBAIC0zOSwyNSArMzksMjAgQEAKIC8qIHdyaXRlIHRoZSBwb3J0IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV4cGlyZSB0aW1lIGluIG5zOwogICogY2FsbGVkIGF0IHRoZSB0cmlnZ2VyLXN0YXJ0IGFuZCBpbiBocnRpbWVyIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdTY0IHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyX2NudCwgdmFsOwogCXU2NCBuczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hpcC0+dGhhbGYpIHsKIAkJb3V0YihjaGlwLT52YWw2MSwgMHg2MSk7CiAJCWNoaXAtPnRoYWxmID0gMDsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJCXJldHVybiAwOwogCQlyZXR1cm4gY2hpcC0+bnNfcmVtOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCXJldHVybiAwOwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CkBAIC04OCwyNCArODMsMTcgQEAKIAlyZXR1cm4gbnM7CiB9CiAKLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB2b2lkIHBjc3BfcG9pbnRlcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBwZXJpb2RzX2VsYXBzZWQsIHBvaW50ZXJfdXBkYXRlOwogCXNpemVfdCBwZXJpb2RfYnl0ZXMsIGJ1ZmZlcl9ieXRlczsKLQl1bnNpZ25lZCBsb25nIG5zOworCWludCBwZXJpb2RzX2VsYXBzZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOwotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoaGFuZGxlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAkvKiB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uICovCiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCXJldHVybjsKIAogCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCWJ1ZmZlcl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtMTM0LDYgKzEyMiwyNiBAQAogCiAJaWYgKHBlcmlvZHNfZWxhcHNlZCkKIAkJdGFza2xldF9zY2hlZHVsZSgmcGNzcF9wY21fdGFza2xldCk7Cit9CisKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKKwlpbnQgcG9pbnRlcl91cGRhdGU7CisJdTY0IG5zOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSB8fCAhY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKKwlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGNoaXApOworCWlmICghbnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENTUDogdW5leHBlY3RlZCBzdG9wXG4iKTsKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCWlmIChwb2ludGVyX3VwZGF0ZSkKKwkJcGNzcF9wb2ludGVyX3VwZGF0ZShjaGlwKTsKIAogCWhydGltZXJfZm9yd2FyZChoYW5kbGUsIGhydGltZXJfZ2V0X2V4cGlyZXMoaGFuZGxlKSwgbnNfdG9fa3RpbWUobnMpKTsKIApAQCAtMTQyLDggKzE1MCw2IEBACiAKIHN0YXRpYyBpbnQgcGNzcF9zdGFydF9wbGF5aW5nKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQl1bnNpZ25lZCBsb25nIG5zOwotCiAjaWYgUENTUF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHN0YXJ0X3BsYXlpbmcgY2FsbGVkXG4iKTsKICNlbmRpZgpAQCAtMTU5LDExICsxNjUsNyBAQAogCWF0b21pY19zZXQoJmNoaXAtPnRpbWVyX2FjdGl2ZSwgMSk7CiAJY2hpcC0+dGhhbGYgPSAwOwogCi0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZSgmcGNzcF9jaGlwLnRpbWVyKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gLUVJTzsKLQotCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIG5zKSwgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgMCksIEhSVElNRVJfTU9ERV9SRUwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMjEgKzIzNCwyMiBAQAogc3RhdGljIGludCBzbmRfcGNzcF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKLQkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWlcbiIsCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLwotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMpOwotI2VuZGlmCiAJcGNzcF9zeW5jX3N0b3AoY2hpcCk7CiAJY2hpcC0+cGxheWJhY2tfcHRyID0gMDsKIAljaGlwLT5wZXJpb2RfcHRyID0gMDsKIAljaGlwLT5mbXRfc2l6ZSA9CiAJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSA+PiAzOwogCWNoaXAtPmlzX3NpZ25lZCA9IHNuZF9wY21fZm9ybWF0X3NpZ25lZChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CisjaWYgUENTUF9ERUJVRworCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCisJCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpIGZzaXplPSVpXG4iLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzLAorCQkJY2hpcC0+Zm10X3NpemUpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCmluZGV4IDE5OWIwMzMuLjkwM2JjODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmICh0cmVibGUgIT0gY2hpcC0+dHJlYmxlKSB7CiAJCWNoaXAtPnRyZWJsZSA9IHRyZWJsZTsKICNpZiBQQ1NQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVpXG4iLCBQQ1NQX1JBVEUoKSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVsaVxuIiwgUENTUF9SQVRFKCkpOwogI2VuZGlmCiAJCWNoYW5nZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDc5M2I3ZjQuLjNmM2MzZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMjE5LDcgKzIxOSw5IEBACiAgICAgICogIE1pZCBsZXZlbCBzdHVmZgogICAgICAqLwogCi1zdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7IC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07CitzdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7CisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChkbWFzb3VuZC5sb2NrKQorfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvdW5kX3NpbGVuY2Uodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9oZXgyaGV4LmMgYi9zb3VuZC9vc3MvaGV4MmhleC5jCmluZGV4IDU0NjBmYWEuLjA0MWVmNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9oZXgyaGV4LmMKKysrIGIvc291bmQvb3NzL2hleDJoZXguYwpAQCAtMTIsNyArMTIsNyBAQAogI2RlZmluZSBNQVhfU0laRSAoMjU2KjEwMjQpCiB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfU0laRV07CiAKLWludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIGludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQogewogCWludCBsPTAsIGMsIGk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jb21tb24uYyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwppbmRleCA3N2QwZTVlLi5jZTRkYjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKKysrIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQkvKiBwcmludGsoS0VSTl9XQVJOICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCQkJCTsKIAkJfQogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJCQkJOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2Vzcy5jIGIvc291bmQvb3NzL3NiX2Vzcy5jCmluZGV4IDE4MGU5NWMuLjUxYTNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9lc3MuYworKysgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDo7Ci0JCQkvKiBwcmludGsoS0VSTl9XQVJOICJFU1M6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIkVTUzogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggZTkyNDQ5Mi4uZjQ3ZjllMiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC02MjQsNiArNjI0LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKKwlpZiAoc25kX0JVR19PTighaCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaGFybW9ueV9kaXNhYmxlX2ludGVycnVwdHMoaCk7CiAJCiAgICAJZXJyID0gc25kX3BjbV9uZXcoaC0+Y2FyZCwgImhhcm1vbnkiLCAwLCAxLCAxLCAmcGNtKTsKQEAgLTg2NSwxMSArODY4LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogc25kX2hhcm1vbnlfbWl4ZXJfaW5pdChzdHJ1Y3Qgc25kX2hhcm1vbnkgKmgpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gaC0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGlkeCwgZXJyOwogCiAJaWYgKHNuZF9CVUdfT04oIWgpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwljYXJkID0gaC0+Y2FyZDsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiSGFybW9ueSBHYWluIGNvbnRyb2wgaW50ZXJmYWNlIik7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEhBUk1PTllfQ09OVFJPTFM7IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGZiNWVlM2MuLjc1YzYwMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0yNTksNyArMjU5LDYgQEAKIAogY29uZmlnIFNORF9DUzU1MzVBVURJTwogCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IEF1ZGlvIgotCWRlcGVuZHMgb24gWDg2ICYmICFYODZfNjQKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBiNDU4ZDIwLi5hYWY0ZGE2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC05NzMsNyArOTczLDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiZnJlZV92b2ljZTogY2hhbm5lbD0lZFxuIixwdm9pY2UtPm51bWJlcik7Ci0JaWYgKHB2b2ljZSA9PSBOVUxMIHx8ICFwdm9pY2UtPnVzZSkKKwlpZiAoIXB2b2ljZS0+dXNlKQogCQlyZXR1cm47CiAJc25kX2FsaV9jbGVhcl92b2ljZXMoY29kZWMsIHB2b2ljZS0+bnVtYmVyLCBwdm9pY2UtPm51bWJlcik7CiAJc3Bpbl9sb2NrX2lycSgmY29kZWMtPnZvaWNlX2FsbG9jKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGM5YWQxODIuLjY1MTdmNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNzIyLDkgKzcyMiwxMCBAQAogCQkgICBjaGlwLT5sYXN0X2NtZFthZGRyXSk7CiAJY2hpcC0+c2luZ2xlX2NtZCA9IDE7CiAJYnVzLT5yZXNwb25zZV9yZXNldCA9IDA7Ci0JLyogcmUtaW5pdGlhbGl6ZSBDT1JCL1JJUkIgKi8KKwkvKiByZWxlYXNlIENPUkIvUklSQiAqLwogCWF6eF9mcmVlX2NtZF9pbyhjaGlwKTsKLQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CisJLyogZGlzYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgKi8KKwlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSAmIH5JQ0g2X0dDVExfVU5TT0wpOwogCXJldHVybiAtMTsKIH0KIApAQCAtODY1LDcgKzg2Niw5IEBACiAJfQogCiAJLyogQWNjZXB0IHVuc29saWNpdGVkIHJlc3BvbnNlcyAqLwotCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwgSUNINl9HQ1RMX1VOU09MKTsKKwlpZiAoIWNoaXAtPnNpbmdsZV9jbWQpCisJCWF6eF93cml0ZWwoY2hpcCwgR0NUTCwgYXp4X3JlYWRsKGNoaXAsIEdDVEwpIHwKKwkJCSAgIElDSDZfR0NUTF9VTlNPTCk7CiAKIAkvKiBkZXRlY3QgY29kZWNzICovCiAJaWYgKCFjaGlwLT5jb2RlY19tYXNrKSB7CkBAIC05ODAsNyArOTgzLDggQEAKIAlhenhfaW50X2VuYWJsZShjaGlwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIGNvZGVjIGNvbW1hbmQgSS9PICovCi0JYXp4X2luaXRfY21kX2lvKGNoaXApOworCWlmICghY2hpcC0+c2luZ2xlX2NtZCkKKwkJYXp4X2luaXRfY21kX2lvKGNoaXApOwogCiAJLyogcHJvZ3JhbSB0aGUgcG9zaXRpb24gYnVmZmVyICovCiAJYXp4X3dyaXRlbChjaGlwLCBEUExCQVNFLCAodTMyKWNoaXAtPnBvc2J1Zi5hZGRyKTsKQEAgLTI2NzQsNiArMjY3OCw3IEBACiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNDRiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1ZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTkwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAzZmJiYzhjLi45MDU4NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTE5MjcsNiArMTkyOCwxMSBAQAogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2NhcHNyY19uaWRzWzFdID0geyAweDE3IH07CiAjZGVmaW5lIENYVDUwNjZfU1BESUZfT1VUCTB4MjEKIAorLyogT0xQQydzIG1pY3JvcGhvbmUgcG9ydCBpcyBEQyBjb3VwbGVkIGZvciB1c2Ugd2l0aCBleHRlcm5hbCBzZW5zb3JzLAorICogdGhlcmVmb3JlIHdlIHVzZSBhIDUwJSBtaWMgYmlhcyBpbiBvcmRlciB0byBjZW50ZXIgdGhlIGlucHV0IHNpZ25hbCB3aXRoCisgKiB0aGUgREMgaW5wdXQgcmFuZ2Ugb2YgdGhlIGNvZGVjLiAqLworI2RlZmluZSBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTIFBJTl9WUkVGNTAKKwogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNjZfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwpAQCAtMTk4MCw5ICsxOTg2LDEwIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0gewogCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCiAKIAkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLwogCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LApAQCAtMjIzNSw3ICsyMjQyLDcgQEAKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCiAKIAkvKiBQb3J0IEI6IGV4dGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBDWFQ1MDY2X09MUENfRVhUX01JQ19CSUFTfSwKIAogCS8qIFBvcnQgQzogaW50ZXJuYWwgbWljcm9waG9uZSAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMjMyNSw2ICsyMzMyLDcgQEAKIAkJICAgICAgQ1hUNTA2Nl9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjUsICJEZWxsIiwKIAkJICAgICAgQ1hUNTA2Nl9ERUxMX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJe30KIH07CiAKQEAgLTIzNTIsNiArMjM2MCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKKwlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yMzgzLDYgKzIzOTIsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKKwkJc3BlYy0+ZXh0X21pY19iaWFzID0gQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUzsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCmluZGV4IDlmYjYwMjcuLjZhZmRhYjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwpAQCAtMzk3LDYgKzM5Nyw3IEBACiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfbnZoZG1pW10gPSB7CiAJeyAuaWQgPSAweDEwZGUwMDAyLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwMywgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDUsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA2LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQN0EgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwNjcsIC5uYW1lID0gIk1DUDY3IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfMmNoIH0sCkBAIC00MDYsNiArNDA3LDcgQEAKIAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDAyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDMiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNSIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA2Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA2NyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBjMDhjYTY2Li43MDU4MzcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtOTY1LDYgKzk2NSw4IEBACiAJdW5zaWduZWQgaW50IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAlpbnQgaTsKIAorCWlmICghbmlkKQorCQlyZXR1cm47CiAJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwpAQCAtNDY4Miw5ICs0Njg0LDkgQEAKIAkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKIAkJZWxzZSB7CiAJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOwotCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKLQkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKIAkJCQlicmVhazsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CiAJCX0KIAl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKQEAgLTYyNDcsNyArNjI0OSw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4NDU0MCwgIkZhdm9yaXQgMTAwWFMiLCBBTEMyNjBfRkFWT1JJVDEwMCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwOCwgIkhQIGQ1NzAwIiwgQUxDMjYwX0hQXzMwMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9IUF8zMDEzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfQVVUTyksIC8qIG5vIHF1aXJrICovCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMCwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTEsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEyLCAiSFAiLCBBTEMyNjBfSFBfREM3NjAwKSwKQEAgLTg5MDksMTAgKzg5MTEsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzODAwLCAiTWFjYm9va1BybyA0LDEiLCBBTEM4ODVfTUJQMyksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4M2UwMCwgImlNYWMgMjQgQWx1bWludW0iLCBBTEM4ODVfSU1BQzI0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZjAwLCAiTWFjYm9vayA1LDEiLCBBTEM4ODVfTUI1KSwKLQkvKiBGSVhNRTogSFAgamFjayBzZW5zZSBzZWVtcyBub3Qgd29ya2luZyBmb3IgTUJQIDUsMSwgc28gYXBwYXJlbnRseQotCSAqIG5vIHBlcmZlY3Qgc29sdXRpb24geWV0CisJLyogRklYTUU6IEhQIGphY2sgc2Vuc2Ugc2VlbXMgbm90IHdvcmtpbmcgZm9yIE1CUCA1LDEgb3IgNSwyLAorCSAqIHNvIGFwcGFyZW50bHkgbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC05ODExLDkgKzk4MTQsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtMTE0NTgsNiArMTE0NjEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDI1LCAiU29ueSBWQUlPIFoyMU1OIiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDM1LCAiU29ueSBWQUlPIFZHTi1GVzE3MEoiLCBBTEMyNjJfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA0NywgIlNvbnkgVkFJTyBUeXBlIEciLCBBTEMyNjJfQVVUTyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAogCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLApAQCAtMTI2MDIsNyArMTI2MDcsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIE1pbmk5IiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMjgsIDB4ZmZmMCwgMHgwMmIwLAorCQkJIkRlbGwgSW5zcGlyb24gTWluaTkvVm9zdHJvIEE5MCIsIEFMQzI2OF9ERUxMKSwKIAkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOwogCSAqIGF1dG8tcHJvYmluZyBzZWVtcyB3b3JraW5nIGZpbmUKIAkgKi8KQEAgLTE3Mzc0LDcgKzE3MzgwLDcgQEAKIAogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KICNkZWZpbmUgYWxjNjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMgXAotCWFsYzg4MF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzCisJYWxjODgyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNjZjMDg3Ni4uODZkZTMwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KQEAgLTE1ODksNiArMTU5MCw4IEBACiAJCQkJIkRlbGwgU3R1ZGlvIDE3IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmUsCiAJCQkJIkRlbGwgU3R1ZGlvIDE1NTUiLCBTVEFDX0RFTExfTTZfRE1JQyksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJiZCwKKwkJCQkiRGVsbCBTdHVkaW8gMTU1NyIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0xNjkzLDYgKzE2OTYsOCBAQAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhENzFCWFhfUkVGKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmYiwKIAkJICAgICAgIkhQIGR2NC0xMjIybnIiLCBTVEFDX0hQX0RWNF8xMjIyTlIpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MTcyMCwKKwkJCSAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzA4MCwKIAkJICAgICAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4MzBmMCwKQEAgLTQ2NjUsNiArNDY3MCwyNiBAQAogCX0KIH0KIAorc3RhdGljIGludCBocF9ic2VyaWVzX3N5c3RlbSh1MzIgc3Vic3lzdGVtX2lkKQoreworCXN3aXRjaCAoc3Vic3lzdGVtX2lkKSB7CisJY2FzZSAweDEwM2MzMDdlOgorCWNhc2UgMHgxMDNjMzA3ZjoKKwljYXNlIDB4MTAzYzMwODA6CisJY2FzZSAweDEwM2MzMDgxOgorCWNhc2UgMHgxMDNjMTcyMjoKKwljYXNlIDB4MTAzYzE3MjM6CisJY2FzZSAweDEwM2MxNzI0OgorCWNhc2UgMHgxMDNjMTcyNToKKwljYXNlIDB4MTAzYzE3MjY6CisJY2FzZSAweDEwM2MxNzI3OgorCWNhc2UgMHgxMDNjMTcyODoKKwljYXNlIDB4MTAzYzE3Mjk6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCBzdGFjOTJoZF9wcm9jX2hvb2soc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAogCQkJICAgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQpAQCAtNDc1NCw2ICs0Nzc5LDExIEBACiAJCWVsc2UKIAkJCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsgLyogd2hpdGUgKi8KIAorCQlpZiAoaHBfYnNlcmllc19zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKKwkJCS8qIExFRCBzdGF0ZSBpcyBpbnZlcnRlZCBvbiB0aGVzZSBzeXN0ZW1zICovCisJCQlzcGVjLT5ncGlvX2RhdGEgXj0gc3BlYy0+Z3Bpb19sZWQ7CisJCX0KKwogCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCiAJCQkgICAgICBzcGVjLT5ncGlvX2RpciwKIAkJCSAgICAgIHNwZWMtPmdwaW9fZGF0YSk7CkBAIC01MjQzLDYgKzUyNzMsNyBAQAogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwogCXN0cnVjdCBoZGFfdmVyYiAqdW5tdXRlX2luaXQgPSBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXQ7CisJdW5zaWduZWQgaW50IHBpbl9jZmc7CiAJaW50IGVyciA9IDA7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CkBAIC01NDI2LDYgKzU0NTcsNDUgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKGhwX2JzZXJpZXNfc3lzdGVtKGNvZGVjLT5zdWJzeXN0ZW1faWQpKSB7CisJCXBpbl9jZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MGYpOworCQlpZiAoZ2V0X2RlZmNmZ19kZXZpY2UocGluX2NmZykgPT0gQUNfSkFDS19MSU5FX09VVCB8fAorCQkJZ2V0X2RlZmNmZ19kZXZpY2UocGluX2NmZykgPT0gQUNfSkFDS19TUEVBS0VSICB8fAorCQkJZ2V0X2RlZmNmZ19kZXZpY2UocGluX2NmZykgPT0gQUNfSkFDS19IUF9PVVQpIHsKKwkJCS8qIEl0IHdhcyBjaGFuZ2VkIGluIHRoZSBCSU9TIHRvIGp1c3Qgc2F0aXNmeSBNUyBEVE0uCisJCQkgKiBMZXRzIHR1cm4gaXQgYmFjayBpbnRvIHNsYXZlZCBIUAorCQkJICovCisJCQlwaW5fY2ZnID0gKHBpbl9jZmcgJiAofkFDX0RFRkNGR19ERVZJQ0UpKQorCQkJCQl8IChBQ19KQUNLX0hQX09VVCA8PAorCQkJCQkJQUNfREVGQ0ZHX0RFVklDRV9TSElGVCk7CisJCQlwaW5fY2ZnID0gKHBpbl9jZmcgJiAofihBQ19ERUZDRkdfREVGX0FTU09DCisJCQkJCQkJfCBBQ19ERUZDRkdfU0VRVUVOQ0UpKSkKKwkJCQkJCQkJfCAweDFmOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCBwaW5fY2ZnKTsKKwkJfQorCX0KKworCWlmICgoY29kZWMtPnN1YnN5c3RlbV9pZCA+PiAxNikgPT0gUENJX1ZFTkRPUl9JRF9IUCkgeworCQljb25zdCBzdHJ1Y3QgZG1pX2RldmljZSAqZGV2ID0gTlVMTDsKKwkJd2hpbGUgKChkZXYgPSBkbWlfZmluZF9kZXZpY2UoRE1JX0RFVl9UWVBFX09FTV9TVFJJTkcsCisJCQkJCSAgICAgIE5VTEwsIGRldikpKSB7CisJCQlpZiAoc3RyY21wKGRldi0+bmFtZSwgIkhQX011dGVfTEVEXzEiKSkgeworCQkJCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCQkJCWNhc2UgMHgxMTFkNzYwODoKKwkJCQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4MTExZDc2MDA6CisJCQkJY2FzZSAweDExMWQ3NjAxOgorCQkJCWNhc2UgMHgxMTFkNzYwMjoKKwkJCQljYXNlIDB4MTExZDc2MDM6CisJCQkJCXNwZWMtPmdwaW9fbGVkID0gMHgwODsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWlmIChzcGVjLT5ncGlvX2xlZCkgewogCQlzcGVjLT5ncGlvX21hc2sgfD0gc3BlYy0+Z3Bpb19sZWQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKaW5kZXggOWRhMmRhZS4uZDA2MzE0OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaApAQCAtMzgyLDggKzM4Miw4IEBACiAjaWZkZWYgQ09ORklHX1BNCiAJaW50ICgqcG1fc3VzcGVuZCkoc3RydWN0IHNuZF9pY2UxNzEyICopOwogCWludCAoKnBtX3Jlc3VtZSkoc3RydWN0IHNuZF9pY2UxNzEyICopOwotCWludCBwbV9zdXNwZW5kX2VuYWJsZWQ6MTsKLQlpbnQgcG1fc2F2ZWRfaXNfc3BkaWZfbWFzdGVyOjE7CisJdW5zaWduZWQgaW50IHBtX3N1c3BlbmRfZW5hYmxlZDoxOworCXVuc2lnbmVkIGludCBwbV9zYXZlZF9pc19zcGRpZl9tYXN0ZXI6MTsKIAl1bnNpZ25lZCBpbnQgcG1fc2F2ZWRfc3BkaWZfY3RybDsKIAl1bnNpZ25lZCBjaGFyIHBtX3NhdmVkX3NwZGlmX2NmZzsKIAl1bnNpZ25lZCBpbnQgcG1fc2F2ZWRfcm91dGU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCmluZGV4IGM3NTUxNWYuLjZhOWZlZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCkBAIC0xMTAwLDcgKzExMDAsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9kaWd5X2hkMl9yZXN1bWUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCitzdGF0aWMgaW50IHByb2RpZ3lfaGQyX3Jlc3VtZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAkvKiBpbml0aWFsaXplIGFrNDM5NiBjb2RlYyBhbmQgcmVzdG9yZSBwcmV2aW91cyBtaXhlciB2b2x1bWVzICovCiAJc3RydWN0IHByb2RpZ3lfaGlmaV9zcGVjICpzcGVjID0gaWNlLT5zcGVjOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA3NTQ4NjdlLi5hYWMyMGZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMTk1MCw2ICsxOTUwLDEyIEBACiAJfSwKIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxNDQsCisJCS5uYW1lID0gIlNvbnkiLAorCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDRkLAogCQkuc3ViZGV2aWNlID0gMHg4MTk3LAogCQkubmFtZSA9ICJTb255IFMxWFAiLAogCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggOTE2ODNhMy4uOGEzMzJkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0zODYsNiArMzg2LDcgQEAKIAogCXN0cnVjdCBzbmRfcGNtICpwY21zWzJdOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqZHhzX2NvbnRyb2xzWzRdOwogCiAJc3RydWN0IHNuZF9hYzk3X2J1cyAqYWM5N19idXM7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwpAQCAtMTIxNiw5ICsxMjE3LDkgQEAKIAogCiAvKgotICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2IGFuZCB2aWE4MjN4IERTWAorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2CiAgKi8KLXN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOwpAQCAtMTIzMCw2ICsxMjMxLDMyIEBACiB9CiAKIC8qCisgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IERYUworICovCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2OworCXVuc2lnbmVkIGludCBzdHJlYW07CisJaW50IGVycjsKKworCXZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOworCWlmICgoZXJyID0gc25kX3ZpYTgyeHhfcGNtX29wZW4oY2hpcCwgdmlhZGV2LCBzdWJzdHJlYW0pKSA8IDApCisJCXJldHVybiBlcnI7CisJc3RyZWFtID0gdmlhZGV2LT5yZWdfb2Zmc2V0IC8gMHgxMDsKKwlpZiAoY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0pIHsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMF0gPSAwOworCQljaGlwLT5wbGF5YmFja192b2x1bWVbc3RyZWFtXVsxXSA9IDA7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgJj0KKwkJCX5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKKwkJCSAgICAgICBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLAorCQkJICAgICAgICZjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+aWQpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTgyM3ggbXVsdGktY2hhbm5lbAogICovCiBzdGF0aWMgaW50IHNuZF92aWE4MjMzX211bHRpX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMzAyLDEwICsxMzI5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHN0cmVhbTsKKworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgfD0KKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKKwkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIHNuZF92aWE4Mnh4X3BjbV9jbG9zZShzdWJzdHJlYW0pOworfQorCiAKIC8qIHZpYTY4NiBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTY4Nl9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4gPQkJc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbiwKKwkub3BlbiA9CQlzbmRfdmlhNjg2X3BsYXliYWNrX29wZW4sCiAJLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCkBAIC0xMzMxLDggKzEzNzQsOCBAQAogCiAvKiB2aWE4MjN4IERTWCBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTgyMzNfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCi0JLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAorCS5vcGVuID0JCXNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0Jc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2UsCiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF92aWE4Mnh4X2h3X3BhcmFtcywKIAkuaHdfZnJlZSA9CXNuZF92aWE4Mnh4X2h3X2ZyZWUsCkBAIC0xNzA5LDggKzE3NTIsOSBAQAogCS5kZXZpY2UgPSAwLAogCS8qIC5zdWJkZXZpY2Ugc2V0IGxhdGVyICovCiAJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCi0JLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKLQkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEKSwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUsCiAJLmluZm8gPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX2luZm8sCiAJLmdldCA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfZ2V0LAogCS5wdXQgPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX3B1dCwKQEAgLTE5NDgsNiArMTk5Miw3IEBACiAJCQkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwga2N0bCk7CiAJCQkJaWYgKGVyciA8IDApCiAJCQkJCXJldHVybiBlcnI7CisJCQkJY2hpcC0+ZHhzX2NvbnRyb2xzW2ldID0ga2N0bDsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDdkZWE3NGIuLjc3MTdlMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmbGluay0+ZGV2KTsKIAogCXBkYWNmLT5pbmRleCA9IGk7CiAJY2FyZF9saXN0W2ldID0gY2FyZDsKQEAgLTE0MiwxMiArMTQyLDEwIEBACiAJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKIAotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UIHwgSVJRX0ZPUkNFRF9QVUxTRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9GT1JDRURfUFVMU0U7CiAJLy8gbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAotCWxpbmstPmlycS5JUlFJbmZvMSA9IDAgLyogfCBJUlFfTEVWRUxfSUQgKi87CiAJbGluay0+aXJxLkhhbmRsZXIgPSBwZGFjZl9pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gcGRhY2Y7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwpAQCAtMjE3LDIwICsyMTUsMjUgQEAKICAqIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgcGRhY2ZfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmID0gbGluay0+cHJpdjsKLQlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IHJldDsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInBkYWNmX2NvbmZpZyBjYWxsZWRcbiIpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDU7CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAlpZiAoc25kX3BkYWNmX2Fzc2lnbl9yZXNvdXJjZXMocGRhY2YsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKSA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtMjM4LDggKzI0MSw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmcGRhY2YtPm5vZGU7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA3NDQ1Y2M4Li43YmUzYjMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMTYxLDExICsxNjEsOSBAQAogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAJbGluay0+aW8uTnVtUG9ydHMxID0gMTY7CiAKLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKIAotCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9ICZzbmRfdnhfaXJxX2hhbmRsZXI7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gY2hpcDsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKQEAgLTIxMywxNCArMjExLDExIEBACiAgKiBjb25maWd1cmF0aW9uIGNhbGxiYWNrCiAgKi8KIAotI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCi1kbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQotCiBzdGF0aWMgaW50IHZ4cG9ja2V0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IGxpbmstPnByaXY7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqdnhwID0gKHN0cnVjdCBzbmRfdnhwb2NrZXQgKiljaGlwOwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAidnhwb2NrZXRfY29uZmlnIGNhbGxlZFxuIik7CiAKQEAgLTIzNSwxMSArMjMwLDE5IEBACiAJCXN0cmNweShjaGlwLT5jYXJkLT5kcml2ZXIsIHZ4cDQ0MF9ody5uYW1lKTsKIAl9CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCi0JY2hpcC0+ZGV2ID0gJmhhbmRsZV90b19kZXYobGluayk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwljaGlwLT5kZXYgPSAmbGluay0+ZGV2OwogCXNuZF9jYXJkX3NldF9kZXYoY2hpcC0+Y2FyZCwgY2hpcC0+ZGV2KTsKIAogCWlmIChzbmRfdnhwb2NrZXRfYXNzaWduX3Jlc291cmNlcyhjaGlwLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgPCAwKQpAQCAtMjQ4LDggKzI1MSw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmdnhwLT5ub2RlOwogCXJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggYmQyMzM4YS4uMDUxOWM2MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAKIG1lbnVjb25maWcgU05EX1BQQwogCWJvb2wgIlBvd2VyUEMgc291bmQgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IFBQQzMyCisJZGVwZW5kcyBvbiBQUEMKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzb3VuZCBkZXZpY2VzIHNwZWNpZmljIHRvIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4KZGlmZiAtLWdpdCBhL3NvdW5kL3NoL2FpY2EuYyBiL3NvdW5kL3NoL2FpY2EuYwppbmRleCA1ODNhMzY5Li5hMGRmNDAxIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9haWNhLmMKKysrIGIvc291bmQvc2gvYWljYS5jCkBAIC00OSw2ICs0OSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyZWFtY2FzdCBBSUNBIHNvdW5kIChwY20pIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7WWFtYWhhL1NFR0EsIEFJQ0F9fSIpOworTU9EVUxFX0ZJUk1XQVJFKCJhaWNhX2Zpcm13YXJlLmJpbiIpOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogI2RlZmluZSBDQVJEX05BTUUgIkFJQ0EiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKaW5kZXggMGI4ZGNiNS4uOTBhMDI2NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpAQCAtMjY1LDggKzI2NSw4IEBACiAjZGVmaW5lIFVQUEVSX0dST1VQICgoMTw8OCkgfCAoMTw8OSkgfCAoMTw8MTApIHwgKDE8PDExKSAgICAgICAgfCAoMTw8MTUpKQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNyX3ZhbGlkX21hc2tbXSA9IHsKIAlMT1dFUl9HUk9VUHxVUFBFUl9HUk9VUCwJLyogTm9ybWFsLCBib3NyIC0gMCovCi0JTE9XRVJfR1JPVVB8VVBQRVJfR1JPVVAsCS8qIE5vcm1hbCwgYm9zciAtIDEqLwogCUxPV0VSX0dST1VQLAkJCS8qIFVzYiwgYm9zciAtIDAqLworCUxPV0VSX0dST1VQfFVQUEVSX0dST1VQLAkvKiBOb3JtYWwsIGJvc3IgLSAxKi8KIAlVUFBFUl9HUk9VUCwJCQkvKiBVc2IsIGJvc3IgLSAxKi8KIH07CiAvKgpAQCAtNjI1LDExICs2MjUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0JaW50IGk7CiAJdTE2IHJlZzsKIAogCS8qIFN5bmMgcmVnX2NhY2hlIHdpdGggdGhlIGhhcmR3YXJlICovCi0JZm9yIChyZWcgPSAwOyByZWcgPCBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3JlZyk7IGkrKykgeworCWZvciAocmVnID0gMDsgcmVnIDwgVExWMzIwQUlDMjNfUkVTRVQ7IHJlZysrKSB7CiAJCXUxNiB2YWwgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKTsKIAkJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwppbmRleCAyZGVlOTgzLi42NTNhMzYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKQEAgLTIxLDcgKzIxLDE4IEBACiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBTTkRfU09DX0NYMjA0NDIKIAloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEFtc3RyYWQgRGVsdGEuCisJICBTYXkgWSAgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgIGZvciBTb0MgYXVkaW8gZGV2aWNlICBjb25uZWN0ZWQgdG8KKwkgIGEgaGFuZHNldCBhbmQgYSBzcGVha2VycGhvbmUgZm91bmQgb24gQW1zdHJhZCBFMyAoRGVsdGEpIHZpZGVvcGhvbmUuCisKKwkgIE5vdGUgdGhhdCBpbiBvcmRlciB0byBnZXQgdGhvc2UgZGV2aWNlcyBmdWxseSBzdXBwb3J0ZWQsICB5b3UgaGF2ZSB0bworCSAgYnVpbGQgIHRoZSBrZXJuZWwgIHdpdGggIHN0YW5kYXJkICBzZXJpYWwgcG9ydCAgZHJpdmVyICBpbmNsdWRlZCAgYW5kCisJICBjb25maWd1cmVkIGZvciBhdCBsZWFzdCA0IHBvcnRzLiAgVGhlbiwgZnJvbSB1c2Vyc3BhY2UsIHlvdSBtdXN0IGxvYWQKKwkgIGEgbGluZSBkaXNjaXBsaW5lICMxOSBvbiB0aGUgbW9kZW0gKHR0eVMzKSBzZXJpYWwgbGluZS4gIFRoZSBzaW1wbGVzdAorCSAgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBpbnN0YWxsIHV0aWwtbGludXgtbmcgIGFuZCB1c2UgdGhlIGluY2x1ZGVkCisJICBsZGF0dGFjaCAgdXRpbGl0eS4gIFRoaXMgIGNhbiBiZSAgc3RhcnRlZCAgYXV0b21hdGljYWxseSAgZnJvbSAgdWRldiwKKwkgIGEgc2ltcGxlIHJ1bGUgbGlrZSB0aGlzIG9uZSBzaG91bGQgZG8gdGhlIHRyaWNrIChpdCBkb2VzIGZvciBtZSk6CisJICAJQUNUSU9OPT0iYWRkIiwgS0VSTkVMPT0iY29udHJvbEMwIiwgXAorCQkJCVJVTis9Ii91c3Ivc2Jpbi9sZGF0dGFjaCAxOSAvZGV2L3R0eVMzIgogCiBjb25maWcgU05EX09NQVBfU09DX09TSzU5MTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIG9tYXAgb3NrNTkxMiIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCmluZGV4IDU3MzU5NDUuLjZhODI5ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwpAQCAtMTk1LDggKzE5NSwxMiBAQAogCWVsc2UKIAkJb21hcF9lbmFibGVfZG1hX2lycShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0ZSQU1FX0lSUSk7CiAKLQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKLQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CisJaWYgKCEoY3B1X2NsYXNzX2lzX29tYXAxKCkpKSB7CisJCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsCisJCQkJCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsCisJCQkJCQlPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCmluZGV4IDkxMTRjMjYuLjEzYWEzODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcDNldm0uYwpAQCAtMTQ0LDQgKzE0NCw0IEBACiAKIE1PRFVMRV9BVVRIT1IoIkFudWogQWdnYXJ3YWwgPGFudWouYWdnYXJ3YWxAdGkuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBPTUFQMyBFVk0iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEx2MiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCBhZDIxOWFhLi4wY2QwNmY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiAgfFB8IDwtLS0gVFdMNDAzMCA8LS0tLS0tLS0tIExpbmUgSW4gYW5kIE1JQ3MKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzW10gPSB7Ci0JU05EX1NPQ19EQVBNX0RBQygiUENNIERBQyIsICJQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiUENNIERBQyIsICJIaUZpIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIAlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXBsaWZpZXIiLCBTTkRfU09DX05PUE0sCiAJCQkgICAwLCAwLCBOVUxMLCAwLCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQsCiAJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC0xODEsNiArMTgxLDcgQEAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRkwiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSEZSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlZJQlJBIik7CiAKIAlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0cywKIAkJCQlBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwppbmRleCA1Y2JiZGM4Li4xZjM1YzZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKQEAgLTc1LDExICs3NSwxOSBAQAogewogCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWRtYV9hZGRyX3QgcG9zID0gcHJ0ZC0+ZG1hX3BvczsKKwl1bnNpZ25lZCBpbnQgbGltaXQ7CiAJaW50IHJldDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IHBydGQtPmRtYV9saW1pdCkgeworCWlmIChzM2NfZG1hX2hhc19jaXJjdWxhcigpKSB7CisJCWxpbWl0ID0gKHBydGQtPmRtYV9lbmQgLSBwcnRkLT5kbWFfc3RhcnQpIC8gcHJ0ZC0+ZG1hX3BlcmlvZDsKKwl9IGVsc2UKKwkJbGltaXQgPSBwcnRkLT5kbWFfbGltaXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGxvYWRlZCAlZCwgbGltaXQgJWRcbiIsIF9fZnVuY19fLCBwcnRkLT5kbWFfbG9hZGVkLCBsaW1pdCk7CisKKwl3aGlsZSAocHJ0ZC0+ZG1hX2xvYWRlZCA8IGxpbWl0KSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKIAogCQlwcl9kZWJ1ZygiZG1hX2xvYWRlZDogJWRcbiIsIHBydGQtPmRtYV9sb2FkZWQpOwpAQCAtMTIzLDcgKzEzMSw3IEBACiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7Ci0JaWYgKHBydGQtPnN0YXRlICYgU1RfUlVOTklORykgeworCWlmIChwcnRkLT5zdGF0ZSAmIFNUX1JVTk5JTkcgJiYgIXMzY19kbWFfaGFzX2NpcmN1bGFyKCkpIHsKIAkJcHJ0ZC0+ZG1hX2xvYWRlZC0tOwogCQlzM2MyNHh4X3BjbV9lbnF1ZXVlKHN1YnN0cmVhbSk7CiAJfQpAQCAtMTY0LDYgKzE3MiwxMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGRtYSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKworCQkvKiB1c2UgdGhlIGNpcmN1bGFyIGJ1ZmZlcmluZyBpZiB3ZSBoYXZlIGl0IGF2YWlsYWJsZS4gKi8KKwkJaWYgKHMzY19kbWFfaGFzX2NpcmN1bGFyKCkpCisJCQlzM2MyNDEwX2RtYV9zZXRmbGFncyhwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJCSAgICAgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKTsKIAl9CiAKIAlzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4ocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKaW5kZXggM2MwNmM0MC4uMTA1YTc3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0yMjAsNiArMjIwLDggQEAKIAkJZ290byBlcnI7CiAJfQogCisJY2xrX2VuYWJsZShpMnMtPmlpc19jY2xrKTsKKwogCXJldCA9IHMzY19pMnN2Ml9wcm9iZShwZGV2LCBkYWksIGkycywgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfY2xrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA3ZmYwNGFkLi4wYTFiMmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtODM0LDYgKzgzNCw5IEBACiAjZGVmaW5lIHNvY19yZXN1bWUJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKK307CisKIHN0YXRpYyB2b2lkIHNuZF9zb2NfaW5zdGFudGlhdGVfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBjb250YWluZXJfb2YoY2FyZC0+ZGV2LApAQCAtODc3LDYgKzg4MCwxMSBAQAogCQkJYWM5NyA9IDE7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CisJCWlmICghY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMpCisJCQljYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWktPm9wcyA9ICZudWxsX2RhaV9vcHM7CisJfQorCiAJLyogSWYgd2UgaGF2ZSBBQzk3IGluIHRoZSBzeXN0ZW0gdGhlbiBkb24ndCB3YWl0IGZvciB0aGUKIAkgKiBjb2RlYy4gIFRoaXMgd2lsbCBuZWVkIHJldmlzaXRpbmcgaWYgd2UgaGF2ZSB0byBoYW5kbGUKIAkgKiBzeXN0ZW1zIHdpdGggbWl4ZWQgQUM5NyBhbmQgbm9uLUFDOTcgcGFydHMuICBPbmx5IGNoZWNrIGZvcgpAQCAtMjMyOSw5ICsyMzM3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVsbF9kYWlfb3BzID0gewotfTsKLQogLyoqCiAgKiBzbmRfc29jX3JlZ2lzdGVyX2RhaSAtIFJlZ2lzdGVyIGEgREFJIHdpdGggdGhlIEFTb0MgY29yZQogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggOGRlNmY5ZC4uNjZkNGMxNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTk3Myw5ICs5NzMsMTkgQEAKIAkJCWlmICghdy0+cG93ZXJfY2hlY2spCiAJCQkJY29udGludWU7CiAKLQkJCXBvd2VyID0gdy0+cG93ZXJfY2hlY2sodyk7Ci0JCQlpZiAocG93ZXIpCi0JCQkJc3lzX3Bvd2VyID0gMTsKKwkJCS8qIElmIHdlJ3JlIHN1c3BlbmRpbmcgdGhlbiBwdWxsIGRvd24gYWxsIHRoZSAKKwkJCSAqIHBvd2VyLiAqLworCQkJc3dpdGNoIChldmVudCkgeworCQkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX1NVU1BFTkQ6CisJCQkJcG93ZXIgPSAwOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXBvd2VyID0gdy0+cG93ZXJfY2hlY2sodyk7CisJCQkJaWYgKHBvd2VyKQorCQkJCQlzeXNfcG93ZXIgPSAxOworCQkJCWJyZWFrOworCQkJfQogCiAJCQlpZiAody0+cG93ZXIgPT0gcG93ZXIpCiAJCQkJY29udGludWU7CkBAIC05OTksOCArMTAwOSwxMiBAQAogCQljYXNlIFNORF9TT0NfREFQTV9TVFJFQU1fUkVTVU1FOgogCQkJc3lzX3Bvd2VyID0gMTsKIAkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFQTV9TVFJFQU1fU1VTUEVORDoKKwkJCXN5c19wb3dlciA9IDA7CisJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUDoKIAkJCXN5c19wb3dlciA9IGNvZGVjLT5iaWFzX2xldmVsICE9IFNORF9TT0NfQklBU19TVEFOREJZOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMjA3Miw5ICsyMDg2LDkgQEAKIAkJCX0KIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAKIAlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIGV2ZW50KTsKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJZHVtcF9kYXBtKGNvZGVjLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCmluZGV4IDEyMWFmMDYuLjg2YjJjM2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCkBAIC02MiwxMCArNjIsMTQgQEAKIGFjdGl2YXRlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LAogCSAgICAgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWIpCiB7CisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwogCWlmIChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlkZXYtPnN1Yl9wbGF5YmFja1tzdWItPm51bWJlcl0gPSBzdWI7CiAJZWxzZQogCQlkZXYtPnN1Yl9jYXB0dXJlW3N1Yi0+bnVtYmVyXSA9IHN1YjsKKworCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI2OSwxNiArMjczLDIyIEBACiB7CiAJaW50IGluZGV4ID0gc3ViLT5udW1iZXI7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3ViKTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwdHI7CisKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOwogCiAJaWYgKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpCi0JCXJldHVybiBTTkRSVl9QQ01fUE9TX1hSVU47CisJCXB0ciA9IFNORFJWX1BDTV9QT1NfWFJVTjsKIAogCWlmIChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKKwkJcHRyID0gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKIAkJCQkJZGV2LT5hdWRpb19vdXRfYnVmX3Bvc1tpbmRleF0pOwogCWVsc2UKLQkJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCisJCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhzdWItPnJ1bnRpbWUsCiAJCQkJCWRldi0+YXVkaW9faW5fYnVmX3Bvc1tpbmRleF0pOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBwdHI7CiB9CiAKIC8qIG9wZXJhdG9ycyBmb3IgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5jIGIvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCmluZGV4IDgzZTZjMTMuLmEzZjAyZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYworKysgYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJpbnB1dC5oIgogCiBNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjE5Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDJ9LCIKIAkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgUmlnS29udHJvbDN9LCIKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggOGU3Zjc4OS4uZTlhM2E5ZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTIxMCw3ICsyMTAsNyBAQAogLyoKICAqLwogCi0jZGVmaW5lIGNvbWJpbmVfd29yZChzKSAgICAoKCpzKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKKyNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKihzKSkgfCAoKHVuc2lnbmVkIGludCkocylbMV0gPDwgOCkpCiAjZGVmaW5lIGNvbWJpbmVfdHJpcGxlKHMpICAoY29tYmluZV93b3JkKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzJdIDw8IDE2KSkKICNkZWZpbmUgY29tYmluZV9xdWFkKHMpICAgIChjb21iaW5lX3RyaXBsZShzKSB8ICgodW5zaWduZWQgaW50KShzKVszXSA8PCAyNCkpCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggOWVmY2ZkMC4uYzk5ODIyMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTEwNzEsNiArMTA3MSwxNSBAQAogCWNoYW5uZWxzID0gKGZ0clswXSAtIDcpIC8gY3NpemUgLSAxOwogCiAJbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiwgY3NpemUpOworCS8qIG1hc3RlciBjb25maWd1cmF0aW9uIHF1aXJrcyAqLworCXN3aXRjaCAoc3RhdGUtPmNoaXAtPnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKDB4MDhiYiwgMHgyNzAyKToKKwkJc25kX3ByaW50ayhLRVJOX0lORk8KKwkJCSAgICJ1c2JtaXhlcjogbWFzdGVyIHZvbHVtZSBxdWlyayBmb3IgUENNMjcwMiBjaGlwXG4iKTsKKwkJLyogZGlzYWJsZSBub24tZnVuY3Rpb25hbCB2b2x1bWUgY29udHJvbCAqLworCQltYXN0ZXJfYml0cyAmPSB+KDEgPDwgKFVTQl9GRUFUVVJFX1ZPTFVNRSAtIDEpKTsKKwkJYnJlYWs7CisJfQogCWlmIChjaGFubmVscyA+IDApCiAJCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiArIGNzaXplLCBjc2l6ZSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCmluZGV4IDA4NTRmMTEuLmZlMDg2NjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQorKysgYi90b29scy9wZXJmLy5naXRpZ25vcmUKQEAgLTEyLDYgKzEyLDcgQEAKIHBlcmYqLnhtbAogcGVyZiouaHRtbAogY29tbW9uLWNtZHMuaAorcGVyZi5kYXRhCiB0YWdzCiBUQUdTCiBjc2NvcGUqCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1iZW5jaC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1iZW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1MjVhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJlbmNoLnR4dApAQCAtMCwwICsxLDEyMCBAQAorcGVyZi1iZW5jaCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtYmVuY2ggLSBHZW5lcmFsIGZyYW1ld29yayBmb3IgYmVuY2htYXJrIHN1aXRlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGJlbmNoJyBbPGNvbW1vbiBvcHRpb25zPl0gPHN1YnN5c3RlbT4gPHN1aXRlPiBbPG9wdGlvbnM+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgJ3BlcmYgYmVuY2gnIGNvbW1hbmQgaXMgZ2VuZXJhbCBmcmFtZXdvcmsgZm9yIGJlbmNobWFyayBzdWl0ZXMuCisKK0NPTU1PTiBPUFRJT05TCistLS0tLS0tLS0tLS0tLQorLWY6OgorLS1mb3JtYXQ9OjoKK1NwZWNpZnkgZm9ybWF0IHN0eWxlLgorQ3VycmVudCBhdmFpbGFibGUgZm9ybWF0IHN0eWxlcyBhcmUsCisKKydkZWZhdWx0Jzo6CitEZWZhdWx0IHN0eWxlLiBUaGlzIGlzIG1haW5seSBmb3IgaHVtYW4gcmVhZGluZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJSBwZXJmIGJlbmNoIHNjaGVkIHBpcGUgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoIG5vIHN0eWxlIHNwZWNpZnkKKyhleGVjdXRpbmcgMTAwMDAwMCBwaXBlIG9wZXJhdGlvbnMgYmV0d2VlbiB0d28gdGFza3MpCisgICAgICAgIFRvdGFsIHRpbWU6NS44NTUgc2VjCisgICAgICAgICAgICAgICAgNS44NTUwNjEgdXNlY3Mvb3AKKwkJMTcwNzkyIG9wcy9zZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnc2ltcGxlJzo6CitUaGlzIHNpbXBsZSBzdHlsZSBpcyBmcmllbmRseSBmb3IgYXV0b21hdGVkCitwcm9jZXNzaW5nIGJ5IHNjcmlwdHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgcGVyZiBiZW5jaCAtLWZvcm1hdD1zaW1wbGUgc2NoZWQgcGlwZSAgICAgICMgc3BlY2lmaWVkIHNpbXBsZQorNS45ODgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTVUJTWVNURU0KKy0tLS0tLS0tLQorCisnc2NoZWQnOjoKKwlTY2hlZHVsZXIgYW5kIElQQyBtZWNoYW5pc21zLgorCitTVUlURVMgRk9SICdzY2hlZCcKK35+fn5+fn5+fn5+fn5+fn5+fgorKm1lc3NhZ2luZyo6OgorU3VpdGUgZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2Ugb2Ygc2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtcy4KK0Jhc2VkIG9uIGhhY2tiZW5jaCBieSBSdXN0eSBSdXNzZWxsLgorCitPcHRpb25zIG9mICpwaXBlKgorXl5eXl5eXl5eXl5eXl5eXl4KKy1wOjoKKy0tcGlwZTo6CitVc2UgcGlwZSgpIGluc3RlYWQgb2Ygc29ja2V0cGFpcigpCisKKy10OjoKKy0tdGhyZWFkOjoKK0JlIG11bHRpIHRocmVhZCBpbnN0ZWFkIG9mIG11bHRpIHByb2Nlc3MKKworLWc6OgorLS1ncm91cD06OgorU3BlY2lmeSBudW1iZXIgb2YgZ3JvdXBzCisKKy1sOjoKKy0tbG9vcD06OgorU3BlY2lmeSBudW1iZXIgb2YgbG9vcHMKKworRXhhbXBsZSBvZiAqbWVzc2FnaW5nKgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyUgcGVyZiBiZW5jaCBzY2hlZCBtZXNzYWdpbmcgICAgICAgICAgICAgICAgICMgcnVuIHdpdGggZGVmYXVsdAorb3B0aW9ucyAoMjAgc2VuZGVyIGFuZCByZWNlaXZlciBwcm9jZXNzZXMgcGVyIGdyb3VwKQorKDEwIGdyb3VwcyA9PSA0MDAgcHJvY2Vzc2VzIHJ1bikKKworICAgICAgVG90YWwgdGltZTowLjMwOCBzZWMKKworJSBwZXJmIGJlbmNoIHNjaGVkIG1lc3NhZ2luZyAtdCAtZyAyMCAgICAgICAgIyBiZSBtdWx0aS10aHJlYWQsd2l0aCAyMCBncm91cHMKKygyMCBzZW5kZXIgYW5kIHJlY2VpdmVyIHRocmVhZHMgcGVyIGdyb3VwKQorKDIwIGdyb3VwcyA9PSA4MDAgdGhyZWFkcyBydW4pCisKKyAgICAgIFRvdGFsIHRpbWU6MC41ODIgc2VjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKnBpcGUqOjoKK1N1aXRlIGZvciBwaXBlKCkgc3lzdGVtIGNhbGwuCitCYXNlZCBvbiBwaXBlLXRlc3QtMW0uYyBieSBJbmdvIE1vbG5hci4KKworT3B0aW9ucyBvZiAqcGlwZSoKK15eXl5eXl5eXl5eXl5eXl5eCistbDo6CistLWxvb3A9OjoKK1NwZWNpZnkgbnVtYmVyIG9mIGxvb3BzLgorCitFeGFtcGxlIG9mICpwaXBlKgorXl5eXl5eXl5eXl5eXl5eXl4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislIHBlcmYgYmVuY2ggc2NoZWQgcGlwZQorKGV4ZWN1dGluZyAxMDAwMDAwIHBpcGUgb3BlcmF0aW9ucyBiZXR3ZWVuIHR3byB0YXNrcykKKworICAgICAgICBUb3RhbCB0aW1lOjguMDkxIHNlYworICAgICAgICAgICAgICAgIDguMDkxODMzIHVzZWNzL29wCisgICAgICAgICAgICAgICAgMTIzNTgxIG9wcy9zZWMKKworJSBwZXJmIGJlbmNoIHNjaGVkIHBpcGUgLWwgMTAwMCAgICAgICAgICAgICAgIyBsb29wIDEwMDAKKyhleGVjdXRpbmcgMTAwMCBwaXBlIG9wZXJhdGlvbnMgYmV0d2VlbiB0d28gdGFza3MpCisKKyAgICAgICAgVG90YWwgdGltZTowLjAxNiBzZWMKKyAgICAgICAgICAgICAgICAxNi45NDgwMDAgdXNlY3Mvb3AKKyAgICAgICAgICAgICAgICA1OTAwNCBvcHMvc2VjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWxpc3QudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI2NDJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1saXN0LnR4dApAQCAtMCwwICsxLDM0IEBACitwZXJmLWJ1aWxkaWQtbGlzdCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1idWlsZGlkLWxpc3QgLSBMaXN0IHRoZSBidWlsZGlkcyBpbiBhIHBlcmYuZGF0YSBmaWxlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgYnVpbGRpZC1saXN0IDxvcHRpb25zPicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGJ1aWxkaWRzIGZvdW5kIGluIGEgcGVyZi5kYXRhIGZpbGUsIHNvIHRoYXQgb3RoZXIKK3Rvb2xzIGNhbiBiZSB1c2VkIHRvIGZldGNoIHBhY2thZ2VzIHdpdGggbWF0Y2hpbmcgc3ltYm9sIHRhYmxlcyBmb3IgdXNlIGJ5CitwZXJmIHJlcG9ydC4KKworT1BUSU9OUworLS0tLS0tLQorLWk6OgorLS1pbnB1dD06OgorICAgICAgICBJbnB1dCBmaWxlIG5hbWUuIChkZWZhdWx0OiBwZXJmLmRhdGEpCistZjo6CistLWZvcmNlOjoKKwlEb24ndCBkbyBvd25lcnNoaXAgdmFsaWRhdGlvbi4KKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgbW9yZSB2ZXJib3NlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRvcFsxXSwKK2xpbmtwZXJmOnBlcmYtcmVwb3J0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1rbWVtLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWttZW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjBjZTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1rbWVtLnR4dApAQCAtMCwwICsxLDQ0IEBACitwZXJmLWttZW0oMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYta21lbSAtIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBrZXJuZWwgbWVtb3J5KHNsYWIpIHByb3BlcnRpZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisncGVyZiBrbWVtJyB7cmVjb3JkfSBbPG9wdGlvbnM+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoZXJlJ3MgdHdvIHZhcmlhbnRzIG9mIHBlcmYga21lbToKKworICAncGVyZiBrbWVtIHJlY29yZCA8Y29tbWFuZD4nIHRvIHJlY29yZCB0aGUga21lbSBldmVudHMKKyAgb2YgYW4gYXJiaXRyYXJ5IHdvcmtsb2FkLgorCisgICdwZXJmIGttZW0nIHRvIHJlcG9ydCBrZXJuZWwgbWVtb3J5IHN0YXRpc3RpY3MuCisKK09QVElPTlMKKy0tLS0tLS0KKy1pIDxmaWxlPjo6CistLWlucHV0PTxmaWxlPjo6CisJU2VsZWN0IHRoZSBpbnB1dCBmaWxlIChkZWZhdWx0OiBwZXJmLmRhdGEpCisKKy0tc3RhdD08Y2FsbGVyfGFsbG9jPjo6CisJU2VsZWN0IHBlciBjYWxsc2l0ZSBvciBwZXIgYWxsb2NhdGlvbiBzdGF0aXN0aWNzCisKKy1zIDxrZXlbLGtleTIuLi5dPjo6CistLXNvcnQ9PGtleVssa2V5Mi4uLl0+OjoKKwlTb3J0IHRoZSBvdXRwdXQgKGRlZmF1bHQ6IGZyYWcsaGl0LGJ5dGVzKQorCistbCA8bnVtPjo6CistLWxpbmU9PG51bT46OgorCVByaW50IG4gbGluZXMgb25seQorCistLXJhdy1pcDo6CisJUHJpbnQgcmF3IGlwIGluc3RlYWQgb2Ygc3ltYm9sCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjcwNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CkBAIC0wLDAgKzEsNDkgQEAKK3BlcmYtcHJvYmUoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1wcm9iZSAtIERlZmluZSBuZXcgZHluYW1pYyB0cmFjZXBvaW50cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHByb2JlJyBbb3B0aW9uc10gLS1hZGQgJ1BST0JFJyBbLS1hZGQgJ1BST0JFJyAuLi5dCitvcgorJ3BlcmYgcHJvYmUnIFtvcHRpb25zXSAnUFJPQkUnIFsnUFJPQkUnIC4uLl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBkZWZpbmVzIGR5bmFtaWMgdHJhY2Vwb2ludCBldmVudHMsIGJ5IHN5bWJvbCBhbmQgcmVnaXN0ZXJzCit3aXRob3V0IGRlYnVnaW5mbywgb3IgYnkgQyBleHByZXNzaW9ucyAoQyBsaW5lIG51bWJlcnMsIEMgZnVuY3Rpb24gbmFtZXMsCithbmQgQyBsb2NhbCB2YXJpYWJsZXMpIHdpdGggZGVidWdpbmZvLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1rOjoKKy0tdm1saW51eD1QQVRIOjoKKwlTcGVjaWZ5IHZtbGludXggcGF0aCB3aGljaCBoYXMgZGVidWdpbmZvIChEd2FyZiBiaW5hcnkpLgorCistdjo6CistLXZlcmJvc2U6OgorICAgICAgICBCZSBtb3JlIHZlcmJvc2UgKHNob3cgcGFyc2VkIGFyZ3VtZW50cywgZXRjKS4KKworLWE6OgorLS1hZGQ6OgorCURlZmluZSBhIHByb2JlIHBvaW50IChzZWUgUFJPQkUgU1lOVEFYIGZvciBkZXRhaWwpCisKK1BST0JFIFNZTlRBWAorLS0tLS0tLS0tLS0tCitQcm9iZSBwb2ludHMgYXJlIGRlZmluZWQgYnkgZm9sbG93aW5nIHN5bnRheC4KKworICJGVU5DWytPRkZTfDpSTE58JXJldHVybl1bQFNSQ118U1JDOkFMTiBbQVJHIC4uLl0iCisKKydGVU5DJyBzcGVjaWZpZXMgYSBwcm9iZWQgZnVuY3Rpb24gbmFtZSwgYW5kIGl0IG1heSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM7ICcrT0ZGUycgaXMgdGhlIG9mZnNldCBmcm9tIGZ1bmN0aW9uIGVudHJ5IGFkZHJlc3MgaW4gYnl0ZXMsICdSTE4nIGlzIHRoZSByZWxhdGl2ZS1saW5lIG51bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5IGxpbmUsIGFuZCAnJXJldHVybicgbWVhbnMgdGhhdCBpdCBwcm9iZXMgZnVuY3Rpb24gcmV0dXJuLiBJbiBhZGRpdGlvbiwgJ1NSQycgc3BlY2lmaWVzIGEgc291cmNlIGZpbGUgd2hpY2ggaGFzIHRoYXQgZnVuY3Rpb24uCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBwcm9iZSBwb2ludCBieSB0aGUgc291cmNlIGxpbmUgbnVtYmVyIGJ5IHVzaW5nICdTUkM6QUxOJyBzeW50YXgsIHdoZXJlICdTUkMnIGlzIHRoZSBzb3VyY2UgZmlsZSBwYXRoIGFuZCAnQUxOJyBpcyB0aGUgbGluZSBudW1iZXIuCisnQVJHJyBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50cyBvZiB0aGlzIHByb2JlIHBvaW50LiBZb3UgY2FuIHVzZSB0aGUgbmFtZSBvZiBsb2NhbCB2YXJpYWJsZSwgb3Iga3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQgKGUuZy4gJHJldHZhbCwgJWF4LCBldGMpLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtwZXJmOnBlcmYtdHJhY2VbMV0sIGxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAppbmRleCAwZmYyM2RlLi5mYzQ2YzBiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKQEAgLTI2LDExICsyNiwxOSBAQAogCiAtZTo6CiAtLWV2ZW50PTo6Ci0JU2VsZWN0IHRoZSBQTVUgZXZlbnQuIFNlbGVjdGlvbiBjYW4gYmUgYSBzeW1ib2xpYyBldmVudCBuYW1lCi0JKHVzZSAncGVyZiBsaXN0JyB0byBsaXN0IGFsbCBldmVudHMpIG9yIGEgcmF3IFBNVQotCWV2ZW50IChldmVudHNlbCt1bWFzaykgaW4gdGhlIGZvcm0gb2Ygck5OTiB3aGVyZSBOTk4gaXMgYQotCWhleGFkZWNpbWFsIGV2ZW50IGRlc2NyaXB0b3IuCisJU2VsZWN0IHRoZSBQTVUgZXZlbnQuIFNlbGVjdGlvbiBjYW4gYmU6CiAKKyAgICAgICAgLSBhIHN5bWJvbGljIGV2ZW50IG5hbWUJKHVzZSAncGVyZiBsaXN0JyB0byBsaXN0IGFsbCBldmVudHMpCisKKyAgICAgICAgLSBhIHJhdyBQTVUgZXZlbnQgKGV2ZW50c2VsK3VtYXNrKSBpbiB0aGUgZm9ybSBvZiByTk5OIHdoZXJlIE5OTiBpcyBhCisJICBoZXhhZGVjaW1hbCBldmVudCBkZXNjcmlwdG9yLgorCisgICAgICAgIC0gYSBoYXJkd2FyZSBicmVha3BvaW50IGV2ZW50IGluIHRoZSBmb3JtIG9mICdcbWVtOmFkZHJbOmFjY2Vzc10nCisgICAgICAgICAgd2hlcmUgYWRkciBpcyB0aGUgYWRkcmVzcyBpbiBtZW1vcnkgeW91IHdhbnQgdG8gYnJlYWsgaW4uCisgICAgICAgICAgQWNjZXNzIGlzIHRoZSBtZW1vcnkgYWNjZXNzIHR5cGUgKHJlYWQsIHdyaXRlLCBleGVjdXRlKSBpdCBjYW4KKyAgICAgICAgICBiZSBwYXNzZWQgYXMgZm9sbG93czogJ1xtZW06YWRkcls6W3JdW3ddW3hdXScuCisgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcHJvZmlsZSByZWFkLXdyaXRlIGFjY2Vzc2VzIGluIDB4MTAwMCwganVzdCBzZXQKKyAgICAgICAgICAnbWVtOjB4MTAwMDpydycuCiAtYTo6CiAgICAgICAgIFN5c3RlbS13aWRlIGNvbGxlY3Rpb24uCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CmluZGV4IDU5ZjBiODQuLjlkY2NiMTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dApAQCAtMjQsMTEgKzI0LDExIEBACiAtLWRzb3M9OjoKIAlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKIAlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KLS1uCi0tLXNob3ctbnItc2FtcGxlcworLW46OgorLS1zaG93LW5yLXNhbXBsZXM6OgogCVNob3cgdGhlIG51bWJlciBvZiBzYW1wbGVzIGZvciBlYWNoIHN5bWJvbAotLVQKLS0tdGhyZWFkcworLVQ6OgorLS10aHJlYWRzOjoKIAlTaG93IHBlci10aHJlYWQgZXZlbnQgY291bnRlcnMKIC1DOjoKIC0tY29tbXM9OjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CmluZGV4IGE3OTEwMDkuLjRiMTc4ODMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dApAQCAtMzEsOSArMzEsMTIgQEAKIC13OjoKIC0td2lkdGg9OjoKICAgICAgICAgU2VsZWN0IHRoZSB3aWR0aCBvZiB0aGUgU1ZHIGZpbGUgKGRlZmF1bHQ6IDEwMDApCi0tcDo6CistUDo6CiAtLXBvd2VyLW9ubHk6OgogICAgICAgICBPbmx5IG91dHB1dCB0aGUgQ1BVIHBvd2VyIHNlY3Rpb24gb2YgdGhlIGRpYWdyYW0KKy1wOjoKKy0tcHJvY2Vzczo6CisgICAgICAgIFNlbGVjdCB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXksIGJ5IG5hbWUgb3IgUElECiAKIAogU0VFIEFMU08KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcGVybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNTVmNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CkBAIC0wLDAgKzEsMjE5IEBACitwZXJmLXRyYWNlLXBlcmwoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXRyYWNlLXBlcmwgLSBQcm9jZXNzIHRyYWNlIGRhdGEgd2l0aCBhIFBlcmwgc2NyaXB0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdHJhY2UnIFstcyBbbGFuZ106c2NyaXB0Wy5leHRdIF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgcGVyZiB0cmFjZSBvcHRpb24gaXMgdXNlZCB0byBwcm9jZXNzIHBlcmYgdHJhY2UgZGF0YSB1c2luZyBwZXJmJ3MKK2J1aWx0LWluIFBlcmwgaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUGVybCBzY3JpcHQsIGlmIGFueS4KKworU1RBUlRFUiBTQ1JJUFRTCistLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhdm9pZCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgYnkgcnVubmluZyAncGVyZiB0cmFjZQorLWcgcGVybCcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgorVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKK3RoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKK2ZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgorCitZb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgorfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3BlcmwgZm9yIHR5cGljYWwgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8KK2RvIGJhc2ljIHRoaW5ncyBsaWtlIGFnZ3JlZ2F0ZSBldmVudCBkYXRhLCBwcmludCByZXN1bHRzLCBldGMuICBBbHNvLAordGhlIGNoZWNrLXBlcmYtdHJhY2UucGwgc2NyaXB0LCB3aGlsZSBub3QgaW50ZXJlc3RpbmcgZm9yIGl0cyByZXN1bHRzLAorYXR0ZW1wdHMgdG8gZXhlcmNpc2UgYWxsIG9mIHRoZSBtYWluIHNjcmlwdGluZyBmZWF0dXJlcy4KKworRVZFTlQgSEFORExFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1doZW4gcGVyZiB0cmFjZSBpcyBpbnZva2VkIHVzaW5nIGEgdHJhY2Ugc2NyaXB0LCBhIHVzZXItZGVmaW5lZAorJ2hhbmRsZXIgZnVuY3Rpb24nIGlzIGNhbGxlZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UuICBJZiB0aGVyZSdzCitubyBoYW5kbGVyIGZ1bmN0aW9uIGRlZmluZWQgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZSwgdGhlIGV2ZW50IGlzCitpZ25vcmVkIChvciBwYXNzZWQgdG8gYSAndHJhY2VfaGFuZGxlZCcgZnVuY3Rpb24sIHNlZSBiZWxvdykgYW5kIHRoZQorbmV4dCBldmVudCBpcyBwcm9jZXNzZWQuCisKK01vc3Qgb2YgdGhlIGV2ZW50J3MgZmllbGQgdmFsdWVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZQoraGFuZGxlciBmdW5jdGlvbjsgc29tZSBvZiB0aGUgbGVzcyBjb21tb24gb25lcyBhcmVuJ3QgLSB0aG9zZSBhcmUKK2F2YWlsYWJsZSBhcyBjYWxscyBiYWNrIGludG8gdGhlIHBlcmYgZXhlY3V0YWJsZSAoc2VlIGJlbG93KS4KKworQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwZXJmIHJlY29yZCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlY29yZAorYWxsIHNjaGVkX3dha2V1cCBldmVudHMgaW4gdGhlIHN5c3RlbToKKworICMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBzY2hlZDpzY2hlZF93YWtldXAKKworVHJhY2VzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCB1c2luZyBhIHNjcmlwdCBzaG91bGQgYmUgcmVjb3JkZWQgd2l0aAordGhlIGFib3ZlIG9wdGlvbnM6IC1jIDEgc2F5cyB0byBzYW1wbGUgZXZlcnkgZXZlbnQsIC1hIHRvIGVuYWJsZQorc3lzdGVtLXdpZGUgY29sbGVjdGlvbiwgLU0gdG8gbXVsdGlwbGV4IHRoZSBvdXRwdXQsIGFuZCAtUiB0byBjb2xsZWN0CityYXcgc2FtcGxlcy4KKworVGhlIGZvcm1hdCBmaWxlIGZvciB0aGUgc2NoZWRfd2FrZXAgZXZlbnQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZpZWxkcworKHNlZSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAvZm9ybWF0KToKKworLS0tLQorIGZvcm1hdDoKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOworCisgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKyAgICAgICAgZmllbGQ6cGlkX3QgcGlkOworICAgICAgICBmaWVsZDppbnQgcHJpbzsKKyAgICAgICAgZmllbGQ6aW50IHN1Y2Nlc3M7CisgICAgICAgIGZpZWxkOmludCB0YXJnZXRfY3B1OworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhpcyBldmVudCB3b3VsZCBiZSBkZWZpbmVkIGFzOgorCistLS0tCitzdWIgc2NoZWQ6OnNjaGVkX3dha2V1cAoreworICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywKKyAgICAgICAkY29tbW9uX25zZWNzLCAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorICAgICAgICRjb21tLCAkcGlkLCAkcHJpbywgJHN1Y2Nlc3MsICR0YXJnZXRfY3B1KSA9IEBfOworfQorLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiB0YWtlcyB0aGUgZm9ybSBzdWJzeXN0ZW06OmV2ZW50X25hbWUuCisKK1RoZSAkY29tbW9uXyogYXJndW1lbnRzIGluIHRoZSBoYW5kbGVyJ3MgYXJndW1lbnQgbGlzdCBhcmUgdGhlIHNldCBvZgorYXJndW1lbnRzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnM7IHNvbWUgb2YgdGhlIGZpZWxkcyBjb3JyZXNwb25kCit0byB0aGUgY29tbW9uXyogZmllbGRzIGluIHRoZSBmb3JtYXQgZmlsZSwgYnV0IHNvbWUgYXJlIHN5bnRoZXNpemVkLAorYW5kIHNvbWUgb2YgdGhlIGNvbW1vbl8qIGZpZWxkcyBhcmVuJ3QgY29tbW9uIGVub3VnaCB0byB0byBiZSBwYXNzZWQKK3RvIGV2ZXJ5IGV2ZW50IGFzIGFyZ3VtZW50cyBidXQgYXJlIGF2YWlsYWJsZSBhcyBsaWJyYXJ5IGZ1bmN0aW9ucy4KKworSGVyZSdzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBvZiB0aGUgaW52YXJpYW50IGV2ZW50IGFyZ3M6CisKKyAkZXZlbnRfbmFtZSAJICAJICAgIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0ZXh0CisgJGNvbnRleHQJCSAgICBhbiBvcGFxdWUgJ2Nvb2tpZScgdXNlZCBpbiBjYWxscyBiYWNrIGludG8gcGVyZgorICRjb21tb25fY3B1CQkgICAgdGhlIGNwdSB0aGUgZXZlbnQgb2NjdXJyZWQgb24KKyAkY29tbW9uX3NlY3MJCSAgICB0aGUgc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKKyAkY29tbW9uX25zZWNzCQkgICAgdGhlIG5zZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAorICRjb21tb25fcGlkCQkgICAgdGhlIHBpZCBvZiB0aGUgY3VycmVudCB0YXNrCisgJGNvbW1vbl9jb21tCQkgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcworCitBbGwgb2YgdGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGV2ZW50J3MgZm9ybWF0IGZpbGUgaGF2ZQorY291bnRlcnBhcnRzIGFzIGhhbmRsZXIgZnVuY3Rpb24gYXJndW1lbnRzIG9mIHRoZSBzYW1lIG5hbWUsIGFzIGNhbiBiZQorc2VlbiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KKworVGhlIGFib3ZlIHByb3ZpZGVzIHRoZSBiYXNpY3MgbmVlZGVkIHRvIGRpcmVjdGx5IGFjY2VzcyBldmVyeSBmaWVsZCBvZgorZXZlcnkgZXZlbnQgaW4gYSB0cmFjZSwgd2hpY2ggY292ZXJzIDkwJSBvZiB3aGF0IHlvdSBuZWVkIHRvIGtub3cgdG8KK3dyaXRlIGEgdXNlZnVsIHRyYWNlIHNjcmlwdC4gIFRoZSBzZWN0aW9ucyBiZWxvdyBjb3ZlciB0aGUgcmVzdC4KKworU0NSSVBUIExBWU9VVAorLS0tLS0tLS0tLS0tLQorCitFdmVyeSBwZXJmIHRyYWNlIFBlcmwgc2NyaXB0IHNob3VsZCBzdGFydCBieSBzZXR0aW5nIHVwIGEgUGVybCBtb2R1bGUKK3NlYXJjaCBwYXRoIGFuZCAndXNlJ2luZyBhIGZldyBzdXBwb3J0IG1vZHVsZXMgKHNlZSBtb2R1bGUKK2Rlc2NyaXB0aW9ucyBiZWxvdyk6CisKKy0tLS0KKyB1c2UgbGliICIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliIjsKKyB1c2UgbGliICIuL1BlcmYtVHJhY2UtVXRpbC9saWIiOworIHVzZSBQZXJmOjpUcmFjZTo6Q29yZTsKKyB1c2UgUGVyZjo6VHJhY2U6OkNvbnRleHQ7CisgdXNlIFBlcmY6OlRyYWNlOjpVdGlsOworLS0tLQorCitUaGUgcmVzdCBvZiB0aGUgc2NyaXB0IGNhbiBjb250YWluIGhhbmRsZXIgZnVuY3Rpb25zIGFuZCBzdXBwb3J0CitmdW5jdGlvbnMgaW4gYW55IG9yZGVyLgorCitBc2lkZSBmcm9tIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBkaXNjdXNzZWQgYWJvdmUsIGV2ZXJ5IHNjcmlwdAorY2FuIGltcGxlbWVudCBhIHNldCBvZiBvcHRpb25hbCBmdW5jdGlvbnM6CisKKyp0cmFjZV9iZWdpbiosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBiZWZvcmUgYW55IGV2ZW50IGlzIHByb2Nlc3NlZCBhbmQKK2dpdmVzIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gc2V0dXAgdGFza3M6CisKKy0tLS0KKyBzdWIgdHJhY2VfYmVnaW4KKyB7CisgfQorLS0tLQorCisqdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCisgcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKKyBhcyBkaXNwbGF5IHJlc3VsdHM6CisKKy0tLS0KK3N1YiB0cmFjZV9lbmQKK3sKK30KKy0tLS0KKworKnRyYWNlX3VuaGFuZGxlZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBmb3IgYW55IGV2ZW50IHRoYXQKKyBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgaXQuICBUaGUgc3RhbmRhcmQgc2V0Cisgb2YgY29tbW9uIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGludG8gaXQ6CisKKy0tLS0KK3N1YiB0cmFjZV91bmhhbmRsZWQKK3sKKyAgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLAorICAgICAgICAkY29tbW9uX25zZWNzLCAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfOworfQorLS0tLQorCitUaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQorYnVpbHQtaW4gcGVyZiB0cmFjZSBQZXJsIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgorCitBVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQordmlhIHRoZSB2YXJpb3VzIFBlcmY6OlRyYWNlOjoqIFBlcmwgbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAordmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICd1c2UKK1BlcmY6OlRyYWNlOjpYWFgnIGxpbmUgdG8geW91ciBwZXJmIHRyYWNlIHNjcmlwdC4KKworUGVyZjo6VHJhY2U6OkNvcmUgTW9kdWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KKworVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQorc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncworYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKK2ZpbGVzOgorCisgIGZsYWdfc3RyKCRldmVudF9uYW1lLCAkZmllbGRfbmFtZSwgJGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byAkZmllbGRfdmFsdWUgZm9yIHRoZSBmbGFnIGZpZWxkICRmaWVsZF9uYW1lIG9mIGV2ZW50ICRldmVudF9uYW1lCisgIHN5bWJvbF9zdHIoJGV2ZW50X25hbWUsICRmaWVsZF9uYW1lLCAkZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvICRmaWVsZF92YWx1ZSBmb3IgdGhlIHN5bWJvbGljIGZpZWxkICRmaWVsZF9uYW1lIG9mIGV2ZW50ICRldmVudF9uYW1lCisKK1BlcmY6OlRyYWNlOjpDb250ZXh0IE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWUgb2YgdGhlICdjb21tb24nIGZpZWxkcyBpbiB0aGUgZXZlbnQgZm9ybWF0IGZpbGUgYXJlbid0IGFsbCB0aGF0Citjb21tb24sIGJ1dCBuZWVkIHRvIGJlIG1hZGUgYWNjZXNzaWJsZSB0byB1c2VyIHNjcmlwdHMgbm9uZXRoZWxlc3MuCisKK1BlcmY6OlRyYWNlOjpDb250ZXh0IGRlZmluZXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2FjY2VzcyB0aGlzIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZXZlbnQuICBFYWNoIG9mIHRoZXNlCitmdW5jdGlvbnMgZXhwZWN0cyBhICRjb250ZXh0IHZhcmlhYmxlLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUKKyRjb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAorYXJndW1lbnQuCisKKyBjb21tb25fcGMoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fcHJlZW1wdCBjb3VudCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fZmxhZ3MoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fZmxhZ3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50CisgY29tbW9uX2xvY2tfZGVwdGgoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKworUGVyZjo6VHJhY2U6OlV0aWwgTW9kdWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdXNlIHdpdGggcGVyZiB0cmFjZToKKworICBuc2Vjcygkc2VjcywgJG5zZWNzKSAtIHJldHVybnMgdG90YWwgbnNlY3MgZ2l2ZW4gc2Vjcy9uc2VjcyBwYWlyCisgIG5zZWNzX3NlY3MoJG5zZWNzKSAtIHJldHVybnMgd2hvbGUgc2VjcyBwb3J0aW9uIGdpdmVuIG5zZWNzCisgIG5zZWNzX25zZWNzKCRuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcworICBuc2Vjc19zdHIoJG5zZWNzKSAtIHJldHVybnMgcHJpbnRhYmxlIHN0cmluZyBpbiB0aGUgZm9ybSBzZWNzLm5zZWNzCisgIGF2ZygkdG90YWwsICRuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmluZGV4IDQxZWQ3NTMuLjA3MDY1ZWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKQEAgLTIwLDYgKzIwLDE1IEBACiAtLWR1bXAtcmF3LXRyYWNlPTo6CiAgICAgICAgIERpc3BsYXkgdmVyYm9zZSBkdW1wIG9mIHRoZSB0cmFjZSBkYXRhLgogCistczo6CistLXNjcmlwdD06OgorICAgICAgICBQcm9jZXNzIHRyYWNlIGRhdGEgd2l0aCB0aGUgZ2l2ZW4gc2NyaXB0IChbbGFuZ106c2NyaXB0Wy5leHRdKS4KKworLWc6OgorLS1nZW4tc2NyaXB0PTo6CisgICAgICAgIEdlbmVyYXRlIHBlcmYtdHJhY2UuW2V4dF0gc3RhcnRlciBzY3JpcHQgZm9yIGdpdmVuIGxhbmd1YWdlLAorICAgICAgICB1c2luZyBjdXJyZW50IHBlcmYuZGF0YS4KKwogU0VFIEFMU08KIC0tLS0tLS0tCi1saW5rcGVyZjpwZXJmLXJlY29yZFsxXQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtdHJhY2UtcGVybFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggNTg4MTk0My4uMjNlYzY2MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogYWxsOjoKIAogIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KKyMgRGVmaW5lIFY9MiB0byBoYXZlIGFuIGV2ZW4gbW9yZSB2ZXJib3NlIGNvbXBpbGUuCiAjCiAjIERlZmluZSBTTlBSSU5URl9SRVRVUk5TX0JPR1VTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKICMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKQEAgLTE0NSw2ICsxNDYsMTAgQEAKICMgRGVmaW5lIE5PX0VYVEVSTkFMX0dSRVAgaWYgeW91IGRvbid0IHdhbnQgInBlcmYgZ3JlcCIgdG8gZXZlciBjYWxsCiAjIHlvdXIgZXh0ZXJuYWwgZ3JlcCAoZS5nLiwgaWYgeW91ciBzeXN0ZW0gbGFja3MgZ3JlcCwgaWYgaXRzIGdyZXAgaXMKICMgYnJva2VuLCBvciBzcGF3bmluZyBleHRlcm5hbCBwcm9jZXNzIGlzIHNsb3dlciB0aGFuIGJ1aWx0LWluIGdyZXAgcGVyZiBoYXMpLgorIworIyBEZWZpbmUgTERGTEFHUz0tc3RhdGljIHRvIGJ1aWxkIGEgc3RhdGljIGJpbmFyeS4KKyMKKyMgRGVmaW5lIEVYVFJBX0NGTEFHUz0tbTY0IG9yIEVYVFJBX0NGTEFHUz0tbTMyIGFzIGFwcHJvcHJpYXRlIGZvciBjcm9zcy1idWlsZHMuCiAKIFBFUkYtVkVSU0lPTi1GSUxFOiAuRk9SQ0UtUEVSRi1WRVJTSU9OLUZJTEUKIAlAJChTSEVMTF9QQVRIKSB1dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTE1NywyMSArMTYyLDEzIEBACiB1bmFtZV9QIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1wIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIHVuYW1lX1YgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXYgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogCi0jIElmIHdlJ3JlIG9uIGEgNjQtYml0IGtlcm5lbCwgdXNlIC1tNjQKLWlmbmRlZiBOT182NEJJVAotCWlmbmVxICgkKHBhdHN1YnN0ICU2NCwlLCQodW5hbWVfTSkpLCQodW5hbWVfTSkpCi0JICBNNjQgOj0gLW02NAotCWVuZGlmCi1lbmRpZgotCiAjIENGTEFHUyBhbmQgTERGTEFHUyBhcmUgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAKICMKICMgSW5jbHVkZSBzYW5lciB3YXJuaW5ncyBoZXJlLCB3aGljaCBjYW4gY2F0Y2ggYnVnczoKICMKIAotRVhUUkFfV0FSTklOR1MgOj0gLVdjYXN0LWFsaWduCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdAorRVhUUkFfV0FSTklOR1MgOj0gLVdmb3JtYXQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXNlY3VyaXR5CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC15MmsKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc2hhZG93CkBAIC0xOTQsOCArMTkxLDE1IEBACiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0cmljdC1wcm90b3R5cGVzCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAogCi1DRkxBR1MgPSAkKE02NCkgLWdnZGIzIC1XYWxsIC1XZXh0cmEgLXN0ZD1nbnU5OSAtV2Vycm9yIC1PNiAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKQotTERGTEFHUyA9IC1scHRocmVhZCAtbHJ0IC1sZWxmIC1sbQoraWZlcSAoIiQob3JpZ2luIERFQlVHKSIsICJjb21tYW5kIGxpbmUiKQorICBQRVJGX0RFQlVHID0gJChERUJVRykKK2VuZGlmCitpZm5kZWYgUEVSRl9ERUJVRworICBDRkxBR1NfT1BUSU1JWkUgPSAtTzYKK2VuZGlmCisKK0NGTEFHUyA9IC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAkKENGTEFHU19PUFRJTUlaRSkgLURfRk9SVElGWV9TT1VSQ0U9MiAkKEVYVFJBX1dBUk5JTkdTKSAkKEVYVFJBX0NGTEFHUykKK0VYVExJQlMgPSAtbHB0aHJlYWQgLWxydCAtbGVsZiAtbG0KIEFMTF9DRkxBR1MgPSAkKENGTEFHUykKIEFMTF9MREZMQUdTID0gJChMREZMQUdTKQogU1RSSVAgPz0gc3RyaXAKQEAgLTI0Niw2ICsyNTAsOSBAQAogIyBleHBsaWNpdGx5IHdoYXQgYXJjaGl0ZWN0dXJlIHRvIGNoZWNrIGZvci4gRml4IHRoaXMgdXAgZm9yIHlvdXJzLi4KIFNQQVJTRV9GTEFHUyA9IC1EX19CSUdfRU5ESUFOX18gLURfX3Bvd2VycGNfXwogCitpZmVxICgkKHNoZWxsIHNoIC1jICJlY2hvICdpbnQgZm9vKHZvaWQpIHtjaGFyIFhbMl07IHJldHVybiAzO30nIHwgJChDQykgLXggYyAtYyAtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtIC1vIC9kZXYvbnVsbCAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKKyAgQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKK2VuZGlmCiAKIAogIyMjIC0tLSBFTkQgQ09ORklHVVJBVElPTiBTRUNUSU9OIC0tLQpAQCAtMzIxLDggKzMyOCwyOCBAQAogTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvbGlzdC5oCitMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9jdHlwZS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgva2VybmVsLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaAorTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYml0b3BzLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vc3dhYi5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3N5c3RlbS5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAogTElCX0ggKz0gcGVyZi5oCitMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAorTElCX0ggKz0gdXRpbC9ldmVudC5oCiBMSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaAogTElCX0ggKz0gdXRpbC9wYXJzZS1vcHRpb25zLmgKQEAgLTMzNiwxNSArMzYzLDIyIEBACiBMSUJfSCArPSB1dGlsL3J1bi1jb21tYW5kLmgKIExJQl9IICs9IHV0aWwvc2lnY2hhaW4uaAogTElCX0ggKz0gdXRpbC9zeW1ib2wuaAotTElCX0ggKz0gdXRpbC9tb2R1bGUuaAogTElCX0ggKz0gdXRpbC9jb2xvci5oCiBMSUJfSCArPSB1dGlsL3ZhbHVlcy5oCitMSUJfSCArPSB1dGlsL3NvcnQuaAorTElCX0ggKz0gdXRpbC9oaXN0LmgKK0xJQl9IICs9IHV0aWwvdGhyZWFkLmgKK0xJQl9IICs9IHV0aWwvZGF0YV9tYXAuaAorTElCX0ggKz0gdXRpbC9wcm9iZS1maW5kZXIuaAorTElCX0ggKz0gdXRpbC9wcm9iZS1ldmVudC5oCiAKIExJQl9PQkpTICs9IHV0aWwvYWJzcGF0aC5vCiBMSUJfT0JKUyArPSB1dGlsL2FsaWFzLm8KIExJQl9PQkpTICs9IHV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9IHV0aWwvY3R5cGUubworTElCX09CSlMgKz0gdXRpbC9kZWJ1Z2ZzLm8KIExJQl9PQkpTICs9IHV0aWwvZW52aXJvbm1lbnQubworTElCX09CSlMgKz0gdXRpbC9ldmVudC5vCiBMSUJfT0JKUyArPSB1dGlsL2V4ZWNfY21kLm8KIExJQl9PQkpTICs9IHV0aWwvaGVscC5vCiBMSUJfT0JKUyArPSB1dGlsL2xldmVuc2h0ZWluLm8KQEAgLTM1Miw2ICszODYsOSBAQAogTElCX09CSlMgKz0gdXRpbC9wYXJzZS1ldmVudHMubwogTElCX09CSlMgKz0gdXRpbC9wYXRoLm8KIExJQl9PQkpTICs9IHV0aWwvcmJ0cmVlLm8KK0xJQl9PQkpTICs9IHV0aWwvYml0bWFwLm8KK0xJQl9PQkpTICs9IHV0aWwvaHdlaWdodC5vCitMSUJfT0JKUyArPSB1dGlsL2ZpbmRfbmV4dF9iaXQubwogTElCX09CSlMgKz0gdXRpbC9ydW4tY29tbWFuZC5vCiBMSUJfT0JKUyArPSB1dGlsL3F1b3RlLm8KIExJQl9PQkpTICs9IHV0aWwvc3RyYnVmLm8KQEAgLTM2MSw3ICszOTgsNiBAQAogTElCX09CSlMgKz0gdXRpbC93cmFwcGVyLm8KIExJQl9PQkpTICs9IHV0aWwvc2lnY2hhaW4ubwogTElCX09CSlMgKz0gdXRpbC9zeW1ib2wubwotTElCX09CSlMgKz0gdXRpbC9tb2R1bGUubwogTElCX09CSlMgKz0gdXRpbC9jb2xvci5vCiBMSUJfT0JKUyArPSB1dGlsL3BhZ2VyLm8KIExJQl9PQkpTICs9IHV0aWwvaGVhZGVyLm8KQEAgLTM3MywxMSArNDA5LDI1IEBACiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LWluZm8ubworTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8KIExJQl9PQkpTICs9IHV0aWwvc3ZnaGVscGVyLm8KK0xJQl9PQkpTICs9IHV0aWwvc29ydC5vCitMSUJfT0JKUyArPSB1dGlsL2hpc3QubworTElCX09CSlMgKz0gdXRpbC9kYXRhX21hcC5vCitMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWV2ZW50Lm8KIAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tYW5ub3RhdGUubworCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1iZW5jaC5vCisKKyMgQmVuY2htYXJrIG1vZHVsZXMKK0JVSUxUSU5fT0JKUyArPSBiZW5jaC9zY2hlZC1tZXNzYWdpbmcubworQlVJTFRJTl9PQkpTICs9IGJlbmNoL3NjaGVkLXBpcGUubworQlVJTFRJTl9PQkpTICs9IGJlbmNoL21lbS1tZW1jcHkubworCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluLWJ1aWxkaWQtbGlzdC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1saXN0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlY29yZC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZXBvcnQubwpAQCAtMzg1LDkgKzQzNSwxNiBAQAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdGltZWNoYXJ0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRvcC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10cmFjZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1wcm9iZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1rbWVtLm8KIAogUEVSRkxJQlMgPSAkKExJQl9GSUxFKQogCitpZmVxICgkKFYpLCAyKQorCVFVSUVUX1NUREVSUiA9ICI+L2Rldi9udWxsIgorZWxzZQorCVFVSUVUX1NUREVSUiA9ICI+L2Rldi9udWxsIDI+JjEiCitlbmRpZgogIwogIyBQbGF0Zm9ybSBzcGVjaWZpYyB0d2Vha3MKICMKQEAgLTQxNSwzMiArNDcyLDU4IEBACiAJUFRIUkVBRF9MSUJTID0KIGVuZGlmCiAKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKLQltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsKTsKK2lmZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQUQsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKK2lmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxnbnUvbGliYy12ZXJzaW9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBjb25zdCBjaGFyICogdmVyc2lvbiA9IGdudV9nZXRfbGliY192ZXJzaW9uKCk7IHJldHVybiAobG9uZyl2ZXJzaW9uOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKKwltc2cgOj0gJChlcnJvciBObyBnbnUvbGliYy12ZXJzaW9uLmggZm91bmQsIHBsZWFzZSBpbnN0YWxsIGdsaWJjLWRldltlbF0vZ2xpYmMtc3RhdGljKTsKK2VuZGlmCisKKwlpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRF9NTUFQLCAwKTsgcmV0dXJuIChsb25nKWVsZjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCisJCUJBU0lDX0NGTEFHUyArPSAtRExJQkVMRl9OT19NTUFQCisJZW5kaWYKK2Vsc2UKKwltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsIGFuZCBnbGliYy1kZXZbZWxdKTsKK2VuZGlmCisKK2lmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi9kd2FyZi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8bGliZHdhcmYvbGliZHdhcmYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IER3YXJmX0RlYnVnIGRiZzsgRHdhcmZfRXJyb3IgZXJyOyBEd2FyZl9SYW5nZXMgKnJuZzsgZHdhcmZfaW5pdCgwLCBEV19ETENfUkVBRCwgMCwgMCwgJmRiZywgJmVycik7IGR3YXJmX2dldF9yYW5nZXMoZGJnLCAwLCAmcm5nLCAwLCAwLCAmZXJyKTsgcmV0dXJuIChsb25nKWRiZzsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWxkd2FyZiAtbGVsZiAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKKwltc2cgOj0gJCh3YXJuaW5nIE5vIGxpYmR3YXJmLmggZm91bmQgb3Igb2xkIGxpYmR3YXJmLmggZm91bmQsIGRpc2FibGVzIGR3YXJmIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGxpYmR3YXJmLWRldi9saWJkd2FyZi1kZXZlbCA+PSAyMDA4MTIzMSk7CisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCRFdBUkYKK2Vsc2UKKwlFWFRMSUJTICs9IC1sZWxmIC1sZHdhcmYKKwlMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWZpbmRlci5vCitlbmRpZgorCitQRVJMX0VNQkVEX0xET1BUUyA9IGBwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0cyAyPi9kZXYvbnVsbGAKK1BFUkxfRU1CRURfQ0NPUFRTID0gYHBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzIDI+L2Rldi9udWxsYAorCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8RVhURVJOLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxwZXJsLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBwZXJsX2FsbG9jKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQRVJMX0VNQkVEX0NDT1BUUykgLW8gL2Rldi9udWxsICQoUEVSTF9FTUJFRF9MRE9QVFMpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUEVSTAorZWxzZQorCUFMTF9MREZMQUdTICs9ICQoUEVSTF9FTUJFRF9MRE9QVFMpCisJTElCX09CSlMgKz0gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KIGVuZGlmCiAKIGlmZGVmIE5PX0RFTUFOR0xFCiAJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVNQU5HTEUKIGVsc2UKLQloYXNfYmZkIDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGJmZC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgYmZkX2RlbWFuZ2xlKDAsIDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpIC1sYmZkID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IikKKwloYXNfYmZkIDo9ICQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGJmZC5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgYmZkX2RlbWFuZ2xlKDAsIDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgLWxiZmQgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IikKIAogCWlmZXEgKCQoaGFzX2JmZCkseSkKIAkJRVhUTElCUyArPSAtbGJmZAogCWVsc2UKLQkJaGFzX2JmZF9pYmVydHkgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgLWxiZmQgLWxpYmVydHkgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKQorCQloYXNfYmZkX2liZXJ0eSA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxiZmQuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGJmZF9kZW1hbmdsZSgwLCAwLCAwKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1sYmZkIC1saWJlcnR5ICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpCiAJCWlmZXEgKCQoaGFzX2JmZF9pYmVydHkpLHkpCiAJCQlFWFRMSUJTICs9IC1sYmZkIC1saWJlcnR5CiAJCWVsc2UKLQkJCWhhc19iZmRfaWJlcnR5X3ogOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgLWxiZmQgLWxpYmVydHkgLWx6ID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IikKKwkJCWhhc19iZmRfaWJlcnR5X3ogOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCAtbGliZXJ0eSAtbHogIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IikKIAkJCWlmZXEgKCQoaGFzX2JmZF9pYmVydHlfeikseSkKIAkJCQlFWFRMSUJTICs9IC1sYmZkIC1saWJlcnR5IC1segogCQkJZWxzZQotCQkJCWhhc19jcGx1c19kZW1hbmdsZSA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsnOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGNwbHVzX2RlbWFuZ2xlKDAsIDApOyByZXR1cm4gMDsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpIC1saWJlcnR5ID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IikKKwkJCQloYXNfY3BsdXNfZGVtYW5nbGUgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ2V4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBjcGx1c19kZW1hbmdsZSgwLCAwKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1saWJlcnR5ICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpCiAJCQkJaWZlcSAoJChoYXNfY3BsdXNfZGVtYW5nbGUpLHkpCiAJCQkJCUVYVExJQlMgKz0gLWxpYmVydHkKIAkJCQkJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9DUExVU19ERU1BTkdMRQogCQkJCWVsc2UKLQkJCQkJbXNnIDo9ICQod2FybmluZyBObyBiZmQuaC9saWJiZmQgZm91bmQsIGluc3RhbGwgYmludXRpbHMtZGV2W2VsXSB0byBnYWluIHN5bWJvbCBkZW1hbmdsaW5nKQorCQkJCQltc2cgOj0gJCh3YXJuaW5nIE5vIGJmZC5oL2xpYmJmZCBmb3VuZCwgaW5zdGFsbCBiaW51dGlscy1kZXZbZWxdL3psaWItc3RhdGljIHRvIGdhaW4gc3ltYm9sIGRlbWFuZ2xpbmcpCiAJCQkJCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RFTUFOR0xFCiAJCQkJZW5kaWYKIAkJCWVuZGlmCkBAIC03NzcsNiArODYwLDI1IEBACiB1dGlsL3JidHJlZS5vOiAuLi8uLi9saWIvcmJ0cmVlLmMgUEVSRi1DRkxBR1MKIAkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvcmJ0cmVlLm8gLWMgJChBTExfQ0ZMQUdTKSAtREVUQ19QRVJGQ09ORklHPSciJChFVENfUEVSRkNPTkZJR19TUSkiJyAkPAogCisjIHNvbWUgcGVyZiB3YXJuaW5nIHBvbGljaWVzIGNhbid0IGZpdCB0byBsaWIvYml0bWFwLmMsIGVnOiBpdCB3YXJucyBhYm91dCB2YXJpYWJsZSBzaGFkb3dpbmcKKyMgZnJvbSA8c3RyaW5nLmg+IHRoYXQgY29tZXMgZnJvbSBrZXJuZWwgaGVhZGVycyB3cmFwcGluZy4KK0tCSVRNQVBfRkxBR1M9YGVjaG8gJChBTExfQ0ZMQUdTKSB8IHNlZCBzLy1Xc2hhZG93Ly8gfCBzZWQgcy8tV3N3aXRjaC1kZWZhdWx0Ly8gfCBzZWQgcy8tV2V4dHJhLy9gCisKK3V0aWwvYml0bWFwLm86IC4uLy4uL2xpYi9iaXRtYXAuYyBQRVJGLUNGTEFHUworCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC9iaXRtYXAubyAtYyAkKEtCSVRNQVBfRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CisKK3V0aWwvaHdlaWdodC5vOiAuLi8uLi9saWIvaHdlaWdodC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2h3ZWlnaHQubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CisKK3V0aWwvZmluZF9uZXh0X2JpdC5vOiAuLi8uLi9saWIvZmluZF9uZXh0X2JpdC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2ZpbmRfbmV4dF9iaXQubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CisKK3V0aWwvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUworCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAorCitzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubzogc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vIC1jICQoQUxMX0NGTEFHUykgJChQRVJMX0VNQkVEX0NDT1BUUykgLVduby1yZWR1bmRhbnQtZGVjbHMgLVduby1zdHJpY3QtcHJvdG90eXBlcyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1uZXN0ZWQtZXh0ZXJucyAkPAorCiBwZXJmLSUkWDogJS5vICQoUEVSRkxJQlMpCiAJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCiAKQEAgLTg4NCw2ICs5ODYsMTMgQEAKIGluc3RhbGw6IGFsbAogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJwogCSQoSU5TVEFMTCkgcGVyZiRYICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvYmluJworCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJworCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsLyoucGwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybCcKKwkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvTWFrZWZpbGUuUEwgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwnCisJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL1JFQURNRSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbCcKIGlmZGVmIEJVSUxUX0lOUwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpICQoQlVJTFRfSU5TKSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCkBAIC05NjksNyArMTA3OCw3IEBACiAjCSQoUk0pIGNvbmZpZ3VyZQogCiBjbGVhbjoKLQkkKFJNKSAqLm8gKi8qLm8gJChMSUJfRklMRSkKKwkkKFJNKSAqLm8gKi8qLm8gKi8qLyoubyAqLyovKi8qLm8gJChMSUJfRklMRSkKIAkkKFJNKSAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIHBlcmYkWAogCSQoUk0pICQoVEVTVF9QUk9HUkFNUykKIAkkKFJNKSAqLnNwZWMgKi5weWMgKi5weW8gKi8qLnB5YyAqLyoucHlvIGNvbW1vbi1jbWRzLmggVEFHUyB0YWdzIGNzY29wZSoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvYmVuY2guaCBiL3Rvb2xzL3BlcmYvYmVuY2gvYmVuY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc4MWM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9iZW5jaC9iZW5jaC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgQkVOQ0hfSAorI2RlZmluZSBCRU5DSF9ICisKK2V4dGVybiBpbnQgYmVuY2hfc2NoZWRfbWVzc2FnaW5nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgYmVuY2hfc2NoZWRfcGlwZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGJlbmNoX21lbV9tZW1jcHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKTsKKworI2RlZmluZSBCRU5DSF9GT1JNQVRfREVGQVVMVF9TVFIJImRlZmF1bHQiCisjZGVmaW5lIEJFTkNIX0ZPUk1BVF9ERUZBVUxUCQkwCisjZGVmaW5lIEJFTkNIX0ZPUk1BVF9TSU1QTEVfU1RSCQkic2ltcGxlIgorI2RlZmluZSBCRU5DSF9GT1JNQVRfU0lNUExFCQkxCisKKyNkZWZpbmUgQkVOQ0hfRk9STUFUX1VOS05PV04JCS0xCisKK2V4dGVybiBpbnQgYmVuY2hfZm9ybWF0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvbWVtLW1lbWNweS5jIGIvdG9vbHMvcGVyZi9iZW5jaC9tZW0tbWVtY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NzMxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvbWVtLW1lbWNweS5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogbWVtLW1lbWNweS5jCisgKgorICogbWVtY3B5OiBTaW1wbGUgbWVtb3J5IGNvcHkgaW4gdmFyaW91cyB3YXlzCisgKgorICogV3JpdHRlbiBieSBIaXRvc2hpIE1pdGFrZSA8bWl0YWtlQGRjbC5pbmZvLndhc2VkYS5hYy5qcD4KKyAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC91dGlsLmgiCisjaW5jbHVkZSAiLi4vdXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiLi4vdXRpbC9zdHJpbmcuaCIKKyNpbmNsdWRlICIuLi91dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgImJlbmNoLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBLIDEwMjQKKworc3RhdGljIGNvbnN0IGNoYXIJKmxlbmd0aF9zdHIJPSAiMU1CIjsKK3N0YXRpYyBjb25zdCBjaGFyCSpyb3V0aW5lCT0gImRlZmF1bHQiOworc3RhdGljIGludAkJdXNlX2Nsb2NrCT0gMDsKK3N0YXRpYyBpbnQJCWNsb2NrX2ZkOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnbCcsICJsZW5ndGgiLCAmbGVuZ3RoX3N0ciwgIjFNQiIsCisJCSAgICAiU3BlY2lmeSBsZW5ndGggb2YgbWVtb3J5IHRvIGNvcHkuICIKKwkJICAgICJhdmFpbGFibGUgdW5pdDogQiwgTUIsIEdCICh1cHBlciBhbmQgbG93ZXIpIiksCisJT1BUX1NUUklORygncicsICJyb3V0aW5lIiwgJnJvdXRpbmUsICJkZWZhdWx0IiwKKwkJICAgICJTcGVjaWZ5IHJvdXRpbmUgdG8gY29weSIpLAorCU9QVF9CT09MRUFOKCdjJywgImNsb2NrIiwgJnVzZV9jbG9jaywKKwkJICAgICJVc2UgQ1BVIGNsb2NrIGZvciBtZWFzdXJpbmciKSwKKwlPUFRfRU5EKCkKK307CisKK3N0cnVjdCByb3V0aW5lIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmRlc2M7CisJdm9pZCAqICgqZm4pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTsKK307CisKK3N0cnVjdCByb3V0aW5lIHJvdXRpbmVzW10gPSB7CisJeyAiZGVmYXVsdCIsCisJICAiRGVmYXVsdCBtZW1jcHkoKSBwcm92aWRlZCBieSBnbGliYyIsCisJICBtZW1jcHkgfSwKKwl7IE5VTEwsCisJICBOVUxMLAorCSAgTlVMTCAgIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmVuY2hfbWVtX21lbWNweV91c2FnZVtdID0geworCSJwZXJmIGJlbmNoIG1lbSBtZW1jcHkgPG9wdGlvbnM+IiwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBjbG9ja19hdHRyID0geworCS50eXBlCQk9IFBFUkZfVFlQRV9IQVJEV0FSRSwKKwkuY29uZmlnCQk9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUworfTsKKworc3RhdGljIHZvaWQgaW5pdF9jbG9jayh2b2lkKQoreworCWNsb2NrX2ZkID0gc3lzX3BlcmZfZXZlbnRfb3BlbigmY2xvY2tfYXR0ciwgZ2V0cGlkKCksIC0xLCAtMSwgMCk7CisKKwlpZiAoY2xvY2tfZmQgPCAwICYmIGVycm5vID09IEVOT1NZUykKKwkJZGllKCJObyBDT05GSUdfUEVSRl9FVkVOVFM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7CisJZWxzZQorCQlCVUdfT04oY2xvY2tfZmQgPCAwKTsKK30KKworc3RhdGljIHU2NCBnZXRfY2xvY2sodm9pZCkKK3sKKwlpbnQgcmV0OworCXU2NCBjbGs7CisKKwlyZXQgPSByZWFkKGNsb2NrX2ZkLCAmY2xrLCBzaXplb2YodTY0KSk7CisJQlVHX09OKHJldCAhPSBzaXplb2YodTY0KSk7CisKKwlyZXR1cm4gY2xrOworfQorCitzdGF0aWMgZG91YmxlIHRpbWV2YWwyZG91YmxlKHN0cnVjdCB0aW1ldmFsICp0cykKK3sKKwlyZXR1cm4gKGRvdWJsZSl0cy0+dHZfc2VjICsKKwkJKGRvdWJsZSl0cy0+dHZfdXNlYyAvIChkb3VibGUpMTAwMDAwMDsKK30KKworaW50IGJlbmNoX21lbV9tZW1jcHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJaW50IGk7CisJdm9pZCAqZHN0LCAqc3JjOworCXNpemVfdCBsZW5ndGg7CisJZG91YmxlIGJwcyA9IDAuMDsKKwlzdHJ1Y3QgdGltZXZhbCB0dl9zdGFydCwgdHZfZW5kLCB0dl9kaWZmOworCXU2NCBjbG9ja19zdGFydCwgY2xvY2tfZW5kLCBjbG9ja19kaWZmOworCisJY2xvY2tfc3RhcnQgPSBjbG9ja19lbmQgPSBjbG9ja19kaWZmID0gMFVMTDsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLAorCQkJICAgICBiZW5jaF9tZW1fbWVtY3B5X3VzYWdlLCAwKTsKKworCXR2X2RpZmYudHZfc2VjID0gMDsKKwl0dl9kaWZmLnR2X3VzZWMgPSAwOworCWxlbmd0aCA9IChzaXplX3QpcGVyZl9hdG9sbCgoY2hhciAqKWxlbmd0aF9zdHIpOworCisJaWYgKChzNjQpbGVuZ3RoIDw9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGxlbmd0aDolc1xuIiwgbGVuZ3RoX3N0cik7CisJCXJldHVybiAxOworCX0KKworCWZvciAoaSA9IDA7IHJvdXRpbmVzW2ldLm5hbWU7IGkrKykgeworCQlpZiAoIXN0cmNtcChyb3V0aW5lc1tpXS5uYW1lLCByb3V0aW5lKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoIXJvdXRpbmVzW2ldLm5hbWUpIHsKKwkJcHJpbnRmKCJVbmtub3duIHJvdXRpbmU6JXNcbiIsIHJvdXRpbmUpOworCQlwcmludGYoIkF2YWlsYWJsZSByb3V0aW5lcy4uLlxuIik7CisJCWZvciAoaSA9IDA7IHJvdXRpbmVzW2ldLm5hbWU7IGkrKykgeworCQkJcHJpbnRmKCJcdCVzIC4uLiAlc1xuIiwKKwkJCSAgICAgICByb3V0aW5lc1tpXS5uYW1lLCByb3V0aW5lc1tpXS5kZXNjKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwlkc3QgPSB6YWxsb2MobGVuZ3RoKTsKKwlpZiAoIWRzdCkKKwkJZGllKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgLSBtYXliZSBsZW5ndGggaXMgdG9vIGxhcmdlP1xuIik7CisKKwlzcmMgPSB6YWxsb2MobGVuZ3RoKTsKKwlpZiAoIXNyYykKKwkJZGllKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgLSBtYXliZSBsZW5ndGggaXMgdG9vIGxhcmdlP1xuIik7CisKKwlpZiAoYmVuY2hfZm9ybWF0ID09IEJFTkNIX0ZPUk1BVF9ERUZBVUxUKSB7CisJCXByaW50ZigiIyBDb3B5aW5nICVzIEJ5dGVzIGZyb20gJXAgdG8gJXAgLi4uXG5cbiIsCisJCSAgICAgICBsZW5ndGhfc3RyLCBzcmMsIGRzdCk7CisJfQorCisJaWYgKHVzZV9jbG9jaykgeworCQlpbml0X2Nsb2NrKCk7CisJCWNsb2NrX3N0YXJ0ID0gZ2V0X2Nsb2NrKCk7CisJfSBlbHNlIHsKKwkJQlVHX09OKGdldHRpbWVvZmRheSgmdHZfc3RhcnQsIE5VTEwpKTsKKwl9CisKKwlyb3V0aW5lc1tpXS5mbihkc3QsIHNyYywgbGVuZ3RoKTsKKworCWlmICh1c2VfY2xvY2spIHsKKwkJY2xvY2tfZW5kID0gZ2V0X2Nsb2NrKCk7CisJCWNsb2NrX2RpZmYgPSBjbG9ja19lbmQgLSBjbG9ja19zdGFydDsKKwl9IGVsc2UgeworCQlCVUdfT04oZ2V0dGltZW9mZGF5KCZ0dl9lbmQsIE5VTEwpKTsKKwkJdGltZXJzdWIoJnR2X2VuZCwgJnR2X3N0YXJ0LCAmdHZfZGlmZik7CisJCWJwcyA9IChkb3VibGUpKChkb3VibGUpbGVuZ3RoIC8gdGltZXZhbDJkb3VibGUoJnR2X2RpZmYpKTsKKwl9CisKKwlzd2l0Y2ggKGJlbmNoX2Zvcm1hdCkgeworCWNhc2UgQkVOQ0hfRk9STUFUX0RFRkFVTFQ6CisJCWlmICh1c2VfY2xvY2spIHsKKwkJCXByaW50ZigiICUxNGxmIENsb2NrL0J5dGVcbiIsCisJCQkgICAgICAgKGRvdWJsZSljbG9ja19kaWZmIC8gKGRvdWJsZSlsZW5ndGgpOworCQl9IGVsc2UgeworCQkJaWYgKGJwcyA8IEspCisJCQkJcHJpbnRmKCIgJTE0bGYgQi9TZWNcbiIsIGJwcyk7CisJCQllbHNlIGlmIChicHMgPCBLICogSykKKwkJCQlwcmludGYoIiAlMTRsZmQgS0IvU2VjXG4iLCBicHMgLyAxMDI0KTsKKwkJCWVsc2UgaWYgKGJwcyA8IEsgKiBLICogSykKKwkJCQlwcmludGYoIiAlMTRsZiBNQi9TZWNcbiIsIGJwcyAvIDEwMjQgLyAxMDI0KTsKKwkJCWVsc2UgeworCQkJCXByaW50ZigiICUxNGxmIEdCL1NlY1xuIiwKKwkJCQkgICAgICAgYnBzIC8gMTAyNCAvIDEwMjQgLyAxMDI0KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6CisJCWlmICh1c2VfY2xvY2spIHsKKwkJCXByaW50ZigiJTE0bGZcbiIsCisJCQkgICAgICAgKGRvdWJsZSljbG9ja19kaWZmIC8gKGRvdWJsZSlsZW5ndGgpOworCQl9IGVsc2UKKwkJCXByaW50ZigiJWxmXG4iLCBicHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiByZWFjaGluZyB0aGlzIG1lYW5zIHRoZXJlJ3Mgc29tZSBkaXNhc3RlcjogKi8KKwkJZGllKCJ1bmtub3duIGZvcm1hdDogJWRcbiIsIGJlbmNoX2Zvcm1hdCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1tZXNzYWdpbmcuYyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtbWVzc2FnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YTJhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtbWVzc2FnaW5nLmMKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKgorICogYnVpbHRpbi1iZW5jaC1tZXNzYWdpbmcuYworICoKKyAqIG1lc3NhZ2luZzogQmVuY2htYXJrIGZvciBzY2hlZHVsZXIgYW5kIElQQyBtZWNoYW5pc21zCisgKgorICogQmFzZWQgb24gaGFja2JlbmNoIGJ5IFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KKyAqIFBvcnRlZCB0byBwZXJmIGJ5IEhpdG9zaGkgTWl0YWtlIDxtaXRha2VAZGNsLmluZm8ud2FzZWRhLmFjLmpwPgorICoKKyAqLworCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwvdXRpbC5oIgorI2luY2x1ZGUgIi4uL3V0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgIi4uL2J1aWx0aW4uaCIKKyNpbmNsdWRlICJiZW5jaC5oIgorCisvKiBUZXN0IGdyb3VwcyBvZiAyMCBwcm9jZXNzZXMgc3ByYXlpbmcgdG8gMjAgcmVjZWl2ZXJzICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNkZWZpbmUgREFUQVNJWkUgMTAwCisKK3N0YXRpYyBpbnQgdXNlX3BpcGVzID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHRocmVhZF9tb2RlID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2dyb3VwcyA9IDEwOworCitzdHJ1Y3Qgc2VuZGVyX2NvbnRleHQgeworCXVuc2lnbmVkIGludCBudW1fZmRzOworCWludCByZWFkeV9vdXQ7CisJaW50IHdha2VmZDsKKwlpbnQgb3V0X2Zkc1swXTsKK307CisKK3N0cnVjdCByZWNlaXZlcl9jb250ZXh0IHsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhY2tldHM7CisJaW50IGluX2Zkc1syXTsKKwlpbnQgcmVhZHlfb3V0OworCWludCB3YWtlZmQ7Cit9OworCitzdGF0aWMgdm9pZCBiYXJmKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIChlcnJvcjogJXMpXG4iLCBtc2csIHN0cmVycm9yKGVycm5vKSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgZmRwYWlyKGludCBmZHNbMl0pCit7CisJaWYgKHVzZV9waXBlcykgeworCQlpZiAocGlwZShmZHMpID09IDApCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIGZkcykgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwliYXJmKHVzZV9waXBlcyA/ICJwaXBlKCkiIDogInNvY2tldHBhaXIoKSIpOworfQorCisvKiBCbG9jayB1bnRpbCB3ZSdyZSByZWFkeSB0byBnbyAqLworc3RhdGljIHZvaWQgcmVhZHkoaW50IHJlYWR5X291dCwgaW50IHdha2VmZCkKK3sKKwljaGFyIGR1bW15OworCXN0cnVjdCBwb2xsZmQgcG9sbGZkID0geyAuZmQgPSB3YWtlZmQsIC5ldmVudHMgPSBQT0xMSU4gfTsKKworCS8qIFRlbGwgdGhlbSB3ZSdyZSByZWFkeS4gKi8KKwlpZiAod3JpdGUocmVhZHlfb3V0LCAmZHVtbXksIDEpICE9IDEpCisJCWJhcmYoIkNMSUVOVDogcmVhZHkgd3JpdGUiKTsKKworCS8qIFdhaXQgZm9yICJHTyIgc2lnbmFsICovCisJaWYgKHBvbGwoJnBvbGxmZCwgMSwgLTEpICE9IDEpCisJCWJhcmYoInBvbGwiKTsKK30KKworLyogU2VuZGVyIHNwcmF5cyBsb29wcyBtZXNzYWdlcyBkb3duIGVhY2ggZmlsZSBkZXNjcmlwdG9yICovCitzdGF0aWMgdm9pZCAqc2VuZGVyKHN0cnVjdCBzZW5kZXJfY29udGV4dCAqY3R4KQoreworCWNoYXIgZGF0YVtEQVRBU0laRV07CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlyZWFkeShjdHgtPnJlYWR5X291dCwgY3R4LT53YWtlZmQpOworCisJLyogTm93IHB1bXAgdG8gZXZlcnkgcmVjZWl2ZXIuICovCisJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGN0eC0+bnVtX2ZkczsgaisrKSB7CisJCQlpbnQgcmV0LCBkb25lID0gMDsKKworYWdhaW46CisJCQlyZXQgPSB3cml0ZShjdHgtPm91dF9mZHNbal0sIGRhdGEgKyBkb25lLAorCQkJCSAgICBzaXplb2YoZGF0YSktZG9uZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQliYXJmKCJTRU5ERVI6IHdyaXRlIik7CisJCQlkb25lICs9IHJldDsKKwkJCWlmIChkb25lIDwgREFUQVNJWkUpCisJCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisKKy8qIE9uZSByZWNlaXZlciBwZXIgZmQgKi8KK3N0YXRpYyB2b2lkICpyZWNlaXZlcihzdHJ1Y3QgcmVjZWl2ZXJfY29udGV4dCogY3R4KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF0aHJlYWRfbW9kZSkKKwkJY2xvc2UoY3R4LT5pbl9mZHNbMV0pOworCisJLyogV2FpdCBmb3Igc3RhcnQuLi4gKi8KKwlyZWFkeShjdHgtPnJlYWR5X291dCwgY3R4LT53YWtlZmQpOworCisJLyogUmVjZWl2ZSB0aGVtIGFsbCAqLworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9wYWNrZXRzOyBpKyspIHsKKwkJY2hhciBkYXRhW0RBVEFTSVpFXTsKKwkJaW50IHJldCwgZG9uZSA9IDA7CisKK2FnYWluOgorCQlyZXQgPSByZWFkKGN0eC0+aW5fZmRzWzBdLCBkYXRhICsgZG9uZSwgREFUQVNJWkUgLSBkb25lKTsKKwkJaWYgKHJldCA8IDApCisJCQliYXJmKCJTRVJWRVI6IHJlYWQiKTsKKwkJZG9uZSArPSByZXQ7CisJCWlmIChkb25lIDwgREFUQVNJWkUpCisJCQlnb3RvIGFnYWluOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgcHRocmVhZF90IGNyZWF0ZV93b3JrZXIodm9pZCAqY3R4LCB2b2lkICooKmZ1bmMpKHZvaWQgKikpCit7CisJcHRocmVhZF9hdHRyX3QgYXR0cjsKKwlwdGhyZWFkX3QgY2hpbGRpZDsKKwlpbnQgZXJyOworCisJaWYgKCF0aHJlYWRfbW9kZSkgeworCQkvKiBwcm9jZXNzIG1vZGUgKi8KKwkJLyogRm9yayB0aGUgcmVjZWl2ZXIuICovCisJCXN3aXRjaCAoZm9yaygpKSB7CisJCWNhc2UgLTE6CisJCQliYXJmKCJmb3JrKCkiKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQkoKmZ1bmMpIChjdHgpOworCQkJZXhpdCgwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gKHB0aHJlYWRfdCkwOworCX0KKworCWlmIChwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cikgIT0gMCkKKwkJYmFyZigicHRocmVhZF9hdHRyX2luaXQ6Iik7CisKKyNpZm5kZWYgX19pYTY0X18KKwlpZiAocHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgUFRIUkVBRF9TVEFDS19NSU4pICE9IDApCisJCWJhcmYoInB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUiKTsKKyNlbmRpZgorCisJZXJyID0gcHRocmVhZF9jcmVhdGUoJmNoaWxkaWQsICZhdHRyLCBmdW5jLCBjdHgpOworCWlmIChlcnIgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXMgKCVkKVxuIiwKKwkJCXN0cmVycm9yKGVyciksIGVycik7CisJCWV4aXQoLTEpOworCX0KKwlyZXR1cm4gY2hpbGRpZDsKK30KKworc3RhdGljIHZvaWQgcmVhcF93b3JrZXIocHRocmVhZF90IGlkKQoreworCWludCBwcm9jX3N0YXR1czsKKwl2b2lkICp0aHJlYWRfc3RhdHVzOworCisJaWYgKCF0aHJlYWRfbW9kZSkgeworCQkvKiBwcm9jZXNzIG1vZGUgKi8KKwkJd2FpdCgmcHJvY19zdGF0dXMpOworCQlpZiAoIVdJRkVYSVRFRChwcm9jX3N0YXR1cykpCisJCQlleGl0KDEpOworCX0gZWxzZSB7CisJCXB0aHJlYWRfam9pbihpZCwgJnRocmVhZF9zdGF0dXMpOworCX0KK30KKworLyogT25lIGdyb3VwIG9mIHNlbmRlcnMgYW5kIHJlY2VpdmVycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBncm91cChwdGhyZWFkX3QgKnB0aCwKKwkJdW5zaWduZWQgaW50IG51bV9mZHMsCisJCWludCByZWFkeV9vdXQsCisJCWludCB3YWtlZmQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNlbmRlcl9jb250ZXh0ICpzbmRfY3R4ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VuZGVyX2NvbnRleHQpCisJCQkrIG51bV9mZHMgKiBzaXplb2YoaW50KSk7CisKKwlpZiAoIXNuZF9jdHgpCisJCWJhcmYoIm1hbGxvYygpIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZkczsgaSsrKSB7CisJCWludCBmZHNbMl07CisJCXN0cnVjdCByZWNlaXZlcl9jb250ZXh0ICpjdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKKworCQlpZiAoIWN0eCkKKwkJCWJhcmYoIm1hbGxvYygpIik7CisKKworCQkvKiBDcmVhdGUgdGhlIHBpcGUgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciAqLworCQlmZHBhaXIoZmRzKTsKKworCQljdHgtPm51bV9wYWNrZXRzID0gbnVtX2ZkcyAqIGxvb3BzOworCQljdHgtPmluX2Zkc1swXSA9IGZkc1swXTsKKwkJY3R4LT5pbl9mZHNbMV0gPSBmZHNbMV07CisJCWN0eC0+cmVhZHlfb3V0ID0gcmVhZHlfb3V0OworCQljdHgtPndha2VmZCA9IHdha2VmZDsKKworCQlwdGhbaV0gPSBjcmVhdGVfd29ya2VyKGN0eCwgKHZvaWQgKilyZWNlaXZlcik7CisKKwkJc25kX2N0eC0+b3V0X2Zkc1tpXSA9IGZkc1sxXTsKKwkJaWYgKCF0aHJlYWRfbW9kZSkKKwkJCWNsb3NlKGZkc1swXSk7CisJfQorCisJLyogTm93IHdlIGhhdmUgYWxsIHRoZSBmZHMsIGZvcmsgdGhlIHNlbmRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZkczsgaSsrKSB7CisJCXNuZF9jdHgtPnJlYWR5X291dCA9IHJlYWR5X291dDsKKwkJc25kX2N0eC0+d2FrZWZkID0gd2FrZWZkOworCQlzbmRfY3R4LT5udW1fZmRzID0gbnVtX2ZkczsKKworCQlwdGhbbnVtX2ZkcytpXSA9IGNyZWF0ZV93b3JrZXIoc25kX2N0eCwgKHZvaWQgKilzZW5kZXIpOworCX0KKworCS8qIENsb3NlIHRoZSBmZHMgd2UgaGF2ZSBsZWZ0ICovCisJaWYgKCF0aHJlYWRfbW9kZSkKKwkJZm9yIChpID0gMDsgaSA8IG51bV9mZHM7IGkrKykKKwkJCWNsb3NlKHNuZF9jdHgtPm91dF9mZHNbaV0pOworCisJLyogUmV0dXJuIG51bWJlciBvZiBjaGlsZHJlbiB0byByZWFwICovCisJcmV0dXJuIG51bV9mZHMgKiAyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oJ3AnLCAicGlwZSIsICZ1c2VfcGlwZXMsCisJCSAgICAiVXNlIHBpcGUoKSBpbnN0ZWFkIG9mIHNvY2tldHBhaXIoKSIpLAorCU9QVF9CT09MRUFOKCd0JywgInRocmVhZCIsICZ0aHJlYWRfbW9kZSwKKwkJICAgICJCZSBtdWx0aSB0aHJlYWQgaW5zdGVhZCBvZiBtdWx0aSBwcm9jZXNzIiksCisJT1BUX0lOVEVHRVIoJ2cnLCAiZ3JvdXAiLCAmbnVtX2dyb3VwcywKKwkJICAgICJTcGVjaWZ5IG51bWJlciBvZiBncm91cHMiKSwKKwlPUFRfSU5URUdFUignbCcsICJsb29wIiwgJmxvb3BzLAorCQkgICAgIlNwZWNpZnkgbnVtYmVyIG9mIGxvb3BzIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJlbmNoX3NjaGVkX21lc3NhZ2VfdXNhZ2VbXSA9IHsKKwkicGVyZiBiZW5jaCBzY2hlZCBtZXNzYWdpbmcgPG9wdGlvbnM+IiwKKwlOVUxMCit9OworCitpbnQgYmVuY2hfc2NoZWRfbWVzc2FnaW5nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJdW5zaWduZWQgaW50IGksIHRvdGFsX2NoaWxkcmVuOworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBzdG9wLCBkaWZmOworCXVuc2lnbmVkIGludCBudW1fZmRzID0gMjA7CisJaW50IHJlYWR5ZmRzWzJdLCB3YWtlZmRzWzJdOworCWNoYXIgZHVtbXk7CisJcHRocmVhZF90ICpwdGhfdGFiOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywKKwkJCSAgICAgYmVuY2hfc2NoZWRfbWVzc2FnZV91c2FnZSwgMCk7CisKKwlwdGhfdGFiID0gbWFsbG9jKG51bV9mZHMgKiAyICogbnVtX2dyb3VwcyAqIHNpemVvZihwdGhyZWFkX3QpKTsKKwlpZiAoIXB0aF90YWIpCisJCWJhcmYoIm1haW46bWFsbG9jKCkiKTsKKworCWZkcGFpcihyZWFkeWZkcyk7CisJZmRwYWlyKHdha2VmZHMpOworCisJdG90YWxfY2hpbGRyZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1fZ3JvdXBzOyBpKyspCisJCXRvdGFsX2NoaWxkcmVuICs9IGdyb3VwKHB0aF90YWIrdG90YWxfY2hpbGRyZW4sIG51bV9mZHMsCisJCQkJCXJlYWR5ZmRzWzFdLCB3YWtlZmRzWzBdKTsKKworCS8qIFdhaXQgZm9yIGV2ZXJ5b25lIHRvIGJlIHJlYWR5ICovCisJZm9yIChpID0gMDsgaSA8IHRvdGFsX2NoaWxkcmVuOyBpKyspCisJCWlmIChyZWFkKHJlYWR5ZmRzWzBdLCAmZHVtbXksIDEpICE9IDEpCisJCQliYXJmKCJSZWFkaW5nIGZvciByZWFkeWZkcyIpOworCisJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CisKKwkvKiBLaWNrIHRoZW0gb2ZmICovCisJaWYgKHdyaXRlKHdha2VmZHNbMV0sICZkdW1teSwgMSkgIT0gMSkKKwkJYmFyZigiV3JpdGluZyB0byBzdGFydCB0aGVtIik7CisKKwkvKiBSZWFwIHRoZW0gYWxsICovCisJZm9yIChpID0gMDsgaSA8IHRvdGFsX2NoaWxkcmVuOyBpKyspCisJCXJlYXBfd29ya2VyKHB0aF90YWJbaV0pOworCisJZ2V0dGltZW9mZGF5KCZzdG9wLCBOVUxMKTsKKworCXRpbWVyc3ViKCZzdG9wLCAmc3RhcnQsICZkaWZmKTsKKworCXN3aXRjaCAoYmVuY2hfZm9ybWF0KSB7CisJY2FzZSBCRU5DSF9GT1JNQVRfREVGQVVMVDoKKwkJcHJpbnRmKCIjICVkIHNlbmRlciBhbmQgcmVjZWl2ZXIgJXMgcGVyIGdyb3VwXG4iLAorCQkgICAgICAgbnVtX2ZkcywgdGhyZWFkX21vZGUgPyAidGhyZWFkcyIgOiAicHJvY2Vzc2VzIik7CisJCXByaW50ZigiIyAlZCBncm91cHMgPT0gJWQgJXMgcnVuXG5cbiIsCisJCSAgICAgICBudW1fZ3JvdXBzLCBudW1fZ3JvdXBzICogMiAqIG51bV9mZHMsCisJCSAgICAgICB0aHJlYWRfbW9kZSA/ICJ0aHJlYWRzIiA6ICJwcm9jZXNzZXMiKTsKKwkJcHJpbnRmKCIgJTE0czogJWx1LiUwM2x1IFtzZWNdXG4iLCAiVG90YWwgdGltZSIsCisJCSAgICAgICBkaWZmLnR2X3NlYywgZGlmZi50dl91c2VjLzEwMDApOworCQlicmVhazsKKwljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6CisJCXByaW50ZigiJWx1LiUwM2x1XG4iLCBkaWZmLnR2X3NlYywgZGlmZi50dl91c2VjLzEwMDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiByZWFjaGluZyBoZXJlIGlzIHNvbWV0aGluZyBkaXNhc3RlciAqLworCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZm9ybWF0OiVkXG4iLCBiZW5jaF9mb3JtYXQpOworCQlleGl0KDEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jIGIvdG9vbHMvcGVyZi9iZW5jaC9zY2hlZC1waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvc2NoZWQtcGlwZS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICoKKyAqIGJ1aWx0aW4tYmVuY2gtcGlwZS5jCisgKgorICogcGlwZTogQmVuY2htYXJrIGZvciBwaXBlKCkKKyAqCisgKiBCYXNlZCBvbiBwaXBlLXRlc3QtMW0uYyBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqICBodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vbWluZ28vY2ZzLXNjaGVkdWxlci90b29scy9waXBlLXRlc3QtMW0uYworICogUG9ydGVkIHRvIHBlcmYgYnkgSGl0b3NoaSBNaXRha2UgPG1pdGFrZUBkY2wuaW5mby53YXNlZGEuYWMuanA+CisgKgorICovCisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vdXRpbC91dGlsLmgiCisjaW5jbHVkZSAiLi4vdXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiLi4vYnVpbHRpbi5oIgorI2luY2x1ZGUgImJlbmNoLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIExPT1BTX0RFRkFVTFQgMTAwMDAwMAorc3RhdGljIGludCBsb29wcyA9IExPT1BTX0RFRkFVTFQ7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfSU5URUdFUignbCcsICJsb29wIiwgJmxvb3BzLAorCQkgICAgIlNwZWNpZnkgbnVtYmVyIG9mIGxvb3BzIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJlbmNoX3NjaGVkX3BpcGVfdXNhZ2VbXSA9IHsKKwkicGVyZiBiZW5jaCBzY2hlZCBwaXBlIDxvcHRpb25zPiIsCisJTlVMTAorfTsKKworaW50IGJlbmNoX3NjaGVkX3BpcGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJaW50IHBpcGVfMVsyXSwgcGlwZV8yWzJdOworCWludCBtID0gMCwgaTsKKwlzdHJ1Y3QgdGltZXZhbCBzdGFydCwgc3RvcCwgZGlmZjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0X3VzZWMgPSAwOworCisJLyoKKwkgKiB3aHkgZG9lcyAicmV0IiBleGlzdD8KKwkgKiBkaXNjYXJkaW5nIHJldHVybmVkIHZhbHVlIG9mIHJlYWQoKSwgd3JpdGUoKQorCSAqIGNhdXNlcyBlcnJvciBpbiBidWlsZGluZyBlbnZpcm9ubWVudCBmb3IgcGVyZgorCSAqLworCWludCByZXQsIHdhaXRfc3RhdDsKKwlwaWRfdCBwaWQsIHJldHBpZDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsCisJCQkgICAgIGJlbmNoX3NjaGVkX3BpcGVfdXNhZ2UsIDApOworCisJYXNzZXJ0KCFwaXBlKHBpcGVfMSkpOworCWFzc2VydCghcGlwZShwaXBlXzIpKTsKKworCXBpZCA9IGZvcmsoKTsKKwlhc3NlcnQocGlkID49IDApOworCisJZ2V0dGltZW9mZGF5KCZzdGFydCwgTlVMTCk7CisKKwlpZiAoIXBpZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgeworCQkJcmV0ID0gcmVhZChwaXBlXzFbMF0sICZtLCBzaXplb2YoaW50KSk7CisJCQlyZXQgPSB3cml0ZShwaXBlXzJbMV0sICZtLCBzaXplb2YoaW50KSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgeworCQkJcmV0ID0gd3JpdGUocGlwZV8xWzFdLCAmbSwgc2l6ZW9mKGludCkpOworCQkJcmV0ID0gcmVhZChwaXBlXzJbMF0sICZtLCBzaXplb2YoaW50KSk7CisJCX0KKwl9CisKKwlnZXR0aW1lb2ZkYXkoJnN0b3AsIE5VTEwpOworCXRpbWVyc3ViKCZzdG9wLCAmc3RhcnQsICZkaWZmKTsKKworCWlmIChwaWQpIHsKKwkJcmV0cGlkID0gd2FpdHBpZChwaWQsICZ3YWl0X3N0YXQsIDApOworCQlhc3NlcnQoKHJldHBpZCA9PSBwaWQpICYmIFdJRkVYSVRFRCh3YWl0X3N0YXQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChiZW5jaF9mb3JtYXQpIHsKKwljYXNlIEJFTkNIX0ZPUk1BVF9ERUZBVUxUOgorCQlwcmludGYoIiMgRXh0ZWN1dGVkICVkIHBpcGUgb3BlcmF0aW9ucyBiZXR3ZWVuIHR3byB0YXNrc1xuXG4iLAorCQkJbG9vcHMpOworCisJCXJlc3VsdF91c2VjID0gZGlmZi50dl9zZWMgKiAxMDAwMDAwOworCQlyZXN1bHRfdXNlYyArPSBkaWZmLnR2X3VzZWM7CisKKwkJcHJpbnRmKCIgJTE0czogJWx1LiUwM2x1IFtzZWNdXG5cbiIsICJUb3RhbCB0aW1lIiwKKwkJICAgICAgIGRpZmYudHZfc2VjLCBkaWZmLnR2X3VzZWMvMTAwMCk7CisKKwkJcHJpbnRmKCIgJTE0bGYgdXNlY3Mvb3BcbiIsCisJCSAgICAgICAoZG91YmxlKXJlc3VsdF91c2VjIC8gKGRvdWJsZSlsb29wcyk7CisJCXByaW50ZigiICUxNGQgb3BzL3NlY1xuIiwKKwkJICAgICAgIChpbnQpKChkb3VibGUpbG9vcHMgLworCQkJICAgICAoKGRvdWJsZSlyZXN1bHRfdXNlYyAvIChkb3VibGUpMTAwMDAwMCkpKTsKKwkJYnJlYWs7CisKKwljYXNlIEJFTkNIX0ZPUk1BVF9TSU1QTEU6CisJCXByaW50ZigiJWx1LiUwM2x1XG4iLAorCQkgICAgICAgZGlmZi50dl9zZWMsIGRpZmYudHZfdXNlYyAvIDEwMDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHJlYWNoaW5nIGhlcmUgaXMgc29tZXRoaW5nIGRpc2FzdGVyICovCisJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBmb3JtYXQ6JWRcbiIsIGJlbmNoX2Zvcm1hdCk7CisJCWV4aXQoMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCAxZWM3NDE2Li4wYmYyZThmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtMTksMjkgKzE5LDI2IEBACiAjaW5jbHVkZSAicGVyZi5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIAorI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9zb3J0LmgiCisjaW5jbHVkZSAidXRpbC9oaXN0LmgiCisjaW5jbHVkZSAidXRpbC9kYXRhX21hcC5oIgogCiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIAotc3RhdGljIGNoYXIJCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImNvbW0sc3ltYm9sIjsKLXN0YXRpYyBjaGFyCQkqc29ydF9vcmRlciA9IGRlZmF1bHRfc29ydF9vcmRlcjsKLQogc3RhdGljIGludAkJZm9yY2U7Ci1zdGF0aWMgaW50CQlpbnB1dDsKLXN0YXRpYyBpbnQJCXNob3dfbWFzayA9IFNIT1dfS0VSTkVMIHwgU0hPV19VU0VSIHwgU0hPV19IVjsKIAogc3RhdGljIGludAkJZnVsbF9wYXRoczsKIAogc3RhdGljIGludAkJcHJpbnRfbGluZTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcJcGFnZV9zaXplOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJbW1hcF93aW5kb3cgPSAzMjsKLQotc3RhdGljIHN0cnVjdCByYl9yb290CXRocmVhZHM7Ci1zdGF0aWMgc3RydWN0IHRocmVhZAkqbGFzdF9tYXRjaDsKLQorc3RydWN0IHN5bV9oaXN0IHsKKwl1NjQJCXN1bTsKKwl1NjQJCWlwWzBdOworfTsKIAogc3RydWN0IHN5bV9leHQgewogCXN0cnVjdCByYl9ub2RlCW5vZGU7CkBAIC00OSwyNDcgKzQ2LDM4IEBACiAJY2hhcgkJKnBhdGg7CiB9OwogCi0vKgotICogaGlzdG9ncmFtLCBzb3J0ZWQgb24gaXRlbSwgY29sbGVjdHMgY291bnRzCi0gKi8KLQotc3RhdGljIHN0cnVjdCByYl9yb290IGhpc3Q7Ci0KLXN0cnVjdCBoaXN0X2VudHJ5IHsKLQlzdHJ1Y3QgcmJfbm9kZQkgcmJfbm9kZTsKLQotCXN0cnVjdCB0aHJlYWQJICp0aHJlYWQ7Ci0Jc3RydWN0IG1hcAkgKm1hcDsKLQlzdHJ1Y3QgZHNvCSAqZHNvOwotCXN0cnVjdCBzeW1ib2wJICpzeW07Ci0JdTY0CSBpcDsKLQljaGFyCQkgbGV2ZWw7Ci0KLQl1aW50MzJfdAkgY291bnQ7CitzdHJ1Y3Qgc3ltX3ByaXYgeworCXN0cnVjdCBzeW1faGlzdAkqaGlzdDsKKwlzdHJ1Y3Qgc3ltX2V4dAkqZXh0OwogfTsKIAotLyoKLSAqIGNvbmZpZ3VyYWJsZSBzb3J0aW5nIGJpdHMKLSAqLwotCi1zdHJ1Y3Qgc29ydF9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCi0JY29uc3QgY2hhciAqaGVhZGVyOwotCi0JaW50NjRfdCAoKmNtcCkoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7Ci0JaW50NjRfdCAoKmNvbGxhcHNlKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKLQlzaXplX3QJKCpwcmludCkoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICopOworc3RhdGljIHN0cnVjdCBzeW1ib2xfY29uZiBzeW1ib2xfY29uZiA9IHsKKwkucHJpdl9zaXplCSAgPSBzaXplb2Yoc3RydWN0IHN5bV9wcml2KSwKKwkudHJ5X3ZtbGludXhfcGF0aCA9IHRydWUsCiB9OwogCi0vKiAtLXNvcnQgcGlkICovCitzdGF0aWMgY29uc3QgY2hhciAqc3ltX2hpc3RfZmlsdGVyOwogCi1zdGF0aWMgaW50NjRfdAotc29ydF9fdGhyZWFkX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQorc3RhdGljIGludCBzeW1ib2xfZmlsdGVyKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKLQlyZXR1cm4gcmlnaHQtPnRocmVhZC0+cGlkIC0gbGVmdC0+dGhyZWFkLT5waWQ7Ci19CisJaWYgKHN5bV9oaXN0X2ZpbHRlciA9PSBOVUxMIHx8CisJICAgIHN0cmNtcChzeW0tPm5hbWUsIHN5bV9oaXN0X2ZpbHRlcikgPT0gMCkgeworCQlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwkJY29uc3QgaW50IHNpemUgPSAoc2l6ZW9mKCpwcml2LT5oaXN0KSArCisJCQkJICAoc3ltLT5lbmQgLSBzeW0tPnN0YXJ0KSAqIHNpemVvZih1NjQpKTsKIAotc3RhdGljIHNpemVfdAotc29ydF9fdGhyZWFkX3ByaW50KEZJTEUgKmZwLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZikKLXsKLQlyZXR1cm4gZnByaW50ZihmcCwgIiUxNnM6JTVkIiwgc2VsZi0+dGhyZWFkLT5jb21tID86ICIiLCBzZWxmLT50aHJlYWQtPnBpZCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3RocmVhZCA9IHsKLQkuaGVhZGVyID0gIiAgICAgICAgIENvbW1hbmQ6ICBQaWQiLAotCS5jbXAJPSBzb3J0X190aHJlYWRfY21wLAotCS5wcmludAk9IHNvcnRfX3RocmVhZF9wcmludCwKLX07Ci0KLS8qIC0tc29ydCBjb21tICovCi0KLXN0YXRpYyBpbnQ2NF90Ci1zb3J0X19jb21tX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQotewotCXJldHVybiByaWdodC0+dGhyZWFkLT5waWQgLSBsZWZ0LT50aHJlYWQtPnBpZDsKLX0KLQotc3RhdGljIGludDY0X3QKLXNvcnRfX2NvbW1fY29sbGFwc2Uoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKLXsKLQljaGFyICpjb21tX2wgPSBsZWZ0LT50aHJlYWQtPmNvbW07Ci0JY2hhciAqY29tbV9yID0gcmlnaHQtPnRocmVhZC0+Y29tbTsKLQotCWlmICghY29tbV9sIHx8ICFjb21tX3IpIHsKLQkJaWYgKCFjb21tX2wgJiYgIWNvbW1fcikKLQkJCXJldHVybiAwOwotCQllbHNlIGlmICghY29tbV9sKQotCQkJcmV0dXJuIC0xOwotCQllbHNlCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gc3RyY21wKGNvbW1fbCwgY29tbV9yKTsKLX0KLQotc3RhdGljIHNpemVfdAotc29ydF9fY29tbV9wcmludChGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCi17Ci0JcmV0dXJuIGZwcmludGYoZnAsICIlMTZzIiwgc2VsZi0+dGhyZWFkLT5jb21tKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfY29tbSA9IHsKLQkuaGVhZGVyCQk9ICIgICAgICAgICBDb21tYW5kIiwKLQkuY21wCQk9IHNvcnRfX2NvbW1fY21wLAotCS5jb2xsYXBzZQk9IHNvcnRfX2NvbW1fY29sbGFwc2UsCi0JLnByaW50CQk9IHNvcnRfX2NvbW1fcHJpbnQsCi19OwotCi0vKiAtLXNvcnQgZHNvICovCi0KLXN0YXRpYyBpbnQ2NF90Ci1zb3J0X19kc29fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0Jc3RydWN0IGRzbyAqZHNvX2wgPSBsZWZ0LT5kc287Ci0Jc3RydWN0IGRzbyAqZHNvX3IgPSByaWdodC0+ZHNvOwotCi0JaWYgKCFkc29fbCB8fCAhZHNvX3IpIHsKLQkJaWYgKCFkc29fbCAmJiAhZHNvX3IpCi0JCQlyZXR1cm4gMDsKLQkJZWxzZSBpZiAoIWRzb19sKQotCQkJcmV0dXJuIC0xOwotCQllbHNlCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gc3RyY21wKGRzb19sLT5uYW1lLCBkc29fci0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLXNvcnRfX2Rzb19wcmludChGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCi17Ci0JaWYgKHNlbGYtPmRzbykKLQkJcmV0dXJuIGZwcmludGYoZnAsICIlLTI1cyIsIHNlbGYtPmRzby0+bmFtZSk7Ci0KLQlyZXR1cm4gZnByaW50ZihmcCwgIiUwMTZsbHggICAgICAgICAiLCAodTY0KXNlbGYtPmlwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfZHNvID0gewotCS5oZWFkZXIgPSAiU2hhcmVkIE9iamVjdCAgICAgICAgICAgICIsCi0JLmNtcAk9IHNvcnRfX2Rzb19jbXAsCi0JLnByaW50CT0gc29ydF9fZHNvX3ByaW50LAotfTsKLQotLyogLS1zb3J0IHN5bWJvbCAqLwotCi1zdGF0aWMgaW50NjRfdAotc29ydF9fc3ltX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQotewotCXU2NCBpcF9sLCBpcF9yOwotCi0JaWYgKGxlZnQtPnN5bSA9PSByaWdodC0+c3ltKQotCQlyZXR1cm4gMDsKLQotCWlwX2wgPSBsZWZ0LT5zeW0gPyBsZWZ0LT5zeW0tPnN0YXJ0IDogbGVmdC0+aXA7Ci0JaXBfciA9IHJpZ2h0LT5zeW0gPyByaWdodC0+c3ltLT5zdGFydCA6IHJpZ2h0LT5pcDsKLQotCXJldHVybiAoaW50NjRfdCkoaXBfciAtIGlwX2wpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zb3J0X19zeW1fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmKQotewotCXNpemVfdCByZXQgPSAwOwotCi0JaWYgKHZlcmJvc2UpCi0JCXJldCArPSBmcHJpbnRmKGZwLCAiJSMwMThsbHggICIsICh1NjQpc2VsZi0+aXApOwotCi0JaWYgKHNlbGYtPnN5bSkgewotCQlyZXQgKz0gZnByaW50ZihmcCwgIlslY10gJXMiLAotCQkJc2VsZi0+ZHNvID09IGtlcm5lbF9kc28gPyAnaycgOiAnLicsIHNlbGYtPnN5bS0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlIzAxNmxseCIsICh1NjQpc2VsZi0+aXApOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3N5bSA9IHsKLQkuaGVhZGVyID0gIlN5bWJvbCIsCi0JLmNtcAk9IHNvcnRfX3N5bV9jbXAsCi0JLnByaW50CT0gc29ydF9fc3ltX3ByaW50LAotfTsKLQotc3RhdGljIGludCBzb3J0X19uZWVkX2NvbGxhcHNlID0gMDsKLQotc3RydWN0IHNvcnRfZGltZW5zaW9uIHsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3Qgc29ydF9lbnRyeQkqZW50cnk7Ci0JaW50CQkJdGFrZW47Ci19OwotCi1zdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIHNvcnRfZGltZW5zaW9uc1tdID0gewotCXsgLm5hbWUgPSAicGlkIiwJLmVudHJ5ID0gJnNvcnRfdGhyZWFkLAl9LAotCXsgLm5hbWUgPSAiY29tbSIsCS5lbnRyeSA9ICZzb3J0X2NvbW0sCX0sCi0JeyAubmFtZSA9ICJkc28iLAkuZW50cnkgPSAmc29ydF9kc28sCX0sCi0JeyAubmFtZSA9ICJzeW1ib2wiLAkuZW50cnkgPSAmc29ydF9zeW0sCX0sCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKGhpc3RfZW50cnlfX3NvcnRfbGlzdCk7Ci0KLXN0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjaGFyICp0b2spCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzb3J0X2RpbWVuc2lvbnMpOyBpKyspIHsKLQkJc3RydWN0IHNvcnRfZGltZW5zaW9uICpzZCA9ICZzb3J0X2RpbWVuc2lvbnNbaV07Ci0KLQkJaWYgKHNkLT50YWtlbikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdHJuY2FzZWNtcCh0b2ssIHNkLT5uYW1lLCBzdHJsZW4odG9rKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2QtPmVudHJ5LT5jb2xsYXBzZSkKLQkJCXNvcnRfX25lZWRfY29sbGFwc2UgPSAxOwotCi0JCWxpc3RfYWRkX3RhaWwoJnNkLT5lbnRyeS0+bGlzdCwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCk7Ci0JCXNkLT50YWtlbiA9IDE7Ci0KKwkJcHJpdi0+aGlzdCA9IG1hbGxvYyhzaXplKTsKKwkJaWYgKHByaXYtPmhpc3QpCisJCQltZW1zZXQocHJpdi0+aGlzdCwgMCwgc2l6ZSk7CiAJCXJldHVybiAwOwogCX0KLQotCXJldHVybiAtRVNSQ0g7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90Ci1oaXN0X2VudHJ5X19jbXAoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKLXsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7Ci0JaW50NjRfdCBjbXAgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQljbXAgPSBzZS0+Y21wKGxlZnQsIHJpZ2h0KTsKLQkJaWYgKGNtcCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBjbXA7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90Ci1oaXN0X2VudHJ5X19jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQotewotCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKLQlpbnQ2NF90IGNtcCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlLCAmaGlzdF9lbnRyeV9fc29ydF9saXN0LCBsaXN0KSB7Ci0JCWludDY0X3QgKCpmKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKLQotCQlmID0gc2UtPmNvbGxhcHNlID86IHNlLT5jbXA7Ci0KLQkJY21wID0gZihsZWZ0LCByaWdodCk7Ci0JCWlmIChjbXApCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY21wOworCS8qCisJICogRklYTUU6IFdlIHNob3VsZCByZWFsbHkgZmlsdGVyIGl0IG91dCwgYXMgd2UgZG9uJ3Qgd2FudCB0byBnbyB0aHJ1IHN5bWJvbHMKKwkgKiB3ZSdyZSBub3QgaW50ZXJlc3RlZCwgYW5kIGlmIGEgRFNPIGVuZHMgdXAgd2l0aCBubyBzeW1ib2xzLCBkZWxldGUgaXQgdG9vLAorCSAqIGJ1dCByaWdodCBub3cgdGhlIGtlcm5lbCBsb2FkaW5nIHJvdXRpbmVzIGluIHN5bWJvbC5jIGJhaWwgb3V0IGlmIG5vIHN5bWJvbHMKKwkgKiBhcmUgZm91bmQsIGZpeCBpdCBsYXRlci4KKwkgKi8KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI5OSwzODAgKzg3LDgxIEBACiB7CiAJdW5zaWduZWQgaW50IHN5bV9zaXplLCBvZmZzZXQ7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXY7CisJc3RydWN0IHN5bV9oaXN0ICpoOwogCiAJaGUtPmNvdW50Kys7CiAKLQlpZiAoIXN5bSB8fCAhc3ltLT5oaXN0KQorCWlmICghc3ltIHx8ICFoZS0+bWFwKQorCQlyZXR1cm47CisKKwlwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CisJaWYgKCFwcml2LT5oaXN0KQogCQlyZXR1cm47CiAKIAlzeW1fc2l6ZSA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAlvZmZzZXQgPSBpcCAtIHN5bS0+c3RhcnQ7CiAKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIlczogaXA9JUx4XG4iLCBfX2Z1bmNfXywKKwkJCWhlLT5tYXAtPnVubWFwX2lwKGhlLT5tYXAsIGlwKSk7CisKIAlpZiAob2Zmc2V0ID49IHN5bV9zaXplKQogCQlyZXR1cm47CiAKLQlzeW0tPmhpc3Rfc3VtKys7Ci0Jc3ltLT5oaXN0W29mZnNldF0rKzsKKwloID0gcHJpdi0+aGlzdDsKKwloLT5zdW0rKzsKKwloLT5pcFtvZmZzZXRdKys7CiAKIAlpZiAodmVyYm9zZSA+PSAzKQogCQlwcmludGYoIiVwICVzOiBjb3VudCsrIFtpcDogJXAsICUwOEx4XSA9PiAlTGRcbiIsCiAJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhlLT5zeW0tPnN0YXJ0LAogCQkJaGUtPnN5bS0+bmFtZSwKIAkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpaXAsIGlwIC0gaGUtPnN5bS0+c3RhcnQsCi0JCQlzeW0tPmhpc3Rbb2Zmc2V0XSk7CisJCQloLT5pcFtvZmZzZXRdKTsKIH0KIAotc3RhdGljIGludAotaGlzdF9lbnRyeV9fYWRkKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgZHNvICpkc28sCi0JCXN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IGlwLCBjaGFyIGxldmVsKQorc3RhdGljIGludCBoaXN0X2VudHJ5X19hZGQoc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLCB1NjQgY291bnQpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmhpc3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7Ci0Jc3RydWN0IGhpc3RfZW50cnkgZW50cnkgPSB7Ci0JCS50aHJlYWQJPSB0aHJlYWQsCi0JCS5tYXAJPSBtYXAsCi0JCS5kc28JPSBkc28sCi0JCS5zeW0JPSBzeW0sCi0JCS5pcAk9IGlwLAotCQkubGV2ZWwJPSBsZXZlbCwKLQkJLmNvdW50CT0gMSwKLQl9OwotCWludCBjbXA7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJaGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQotCQljbXAgPSBoaXN0X2VudHJ5X19jbXAoJmVudHJ5LCBoZSk7Ci0KLQkJaWYgKCFjbXApIHsKLQkJCWhpc3RfaGl0KGhlLCBpcCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKGNtcCA8IDApCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JaGUgPSBtYWxsb2Moc2l6ZW9mKCpoZSkpOwotCWlmICghaGUpCisJYm9vbCBoaXQ7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlID0gX19oaXN0X2VudHJ5X19hZGQoYWwsIE5VTEwsIGNvdW50LCAmaGl0KTsKKwlpZiAoaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JKmhlID0gZW50cnk7Ci0JcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCAmaGlzdCk7Ci0KKwloaXN0X2hpdChoZSwgYWwtPmFkZHIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBoaXN0X2VudHJ5X19mcmVlKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCiB7Ci0JZnJlZShoZSk7Ci19CisJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAKLS8qCi0gKiBjb2xsYXBzZSB0aGUgaGlzdG9ncmFtCi0gKi8KKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlcFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZXZlbnQtPmlwLnBpZCwgKHZvaWQgKikobG9uZylldmVudC0+aXAuaXApOwogCi1zdGF0aWMgc3RydWN0IHJiX3Jvb3QgY29sbGFwc2VfaGlzdHM7Ci0KLXN0YXRpYyB2b2lkIGNvbGxhcHNlX19pbnNlcnRfZW50cnkoc3RydWN0IGhpc3RfZW50cnkgKmhlKQotewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZjb2xsYXBzZV9oaXN0cy5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyOwotCWludDY0X3QgY21wOwotCi0Jd2hpbGUgKCpwICE9IE5VTEwpIHsKLQkJcGFyZW50ID0gKnA7Ci0JCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQotCQljbXAgPSBoaXN0X2VudHJ5X19jb2xsYXBzZShpdGVyLCBoZSk7Ci0KLQkJaWYgKCFjbXApIHsKLQkJCWl0ZXItPmNvdW50ICs9IGhlLT5jb3VudDsKLQkJCWhpc3RfZW50cnlfX2ZyZWUoaGUpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKGNtcCA8IDApCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCAmY29sbGFwc2VfaGlzdHMpOwotfQotCi1zdGF0aWMgdm9pZCBjb2xsYXBzZV9fcmVzb3J0KHZvaWQpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5leHQ7Ci0Jc3RydWN0IGhpc3RfZW50cnkgKm47Ci0KLQlpZiAoIXNvcnRfX25lZWRfY29sbGFwc2UpCi0JCXJldHVybjsKLQotCW5leHQgPSByYl9maXJzdCgmaGlzdCk7Ci0Jd2hpbGUgKG5leHQpIHsKLQkJbiA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJbmV4dCA9IHJiX25leHQoJm4tPnJiX25vZGUpOwotCi0JCXJiX2VyYXNlKCZuLT5yYl9ub2RlLCAmaGlzdCk7Ci0JCWNvbGxhcHNlX19pbnNlcnRfZW50cnkobik7Ci0JfQotfQotCi0vKgotICogcmV2ZXJzZSB0aGUgbWFwLCBzb3J0IG9uIGNvdW50LgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBvdXRwdXRfaGlzdHM7Ci0KLXN0YXRpYyB2b2lkIG91dHB1dF9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmb3V0cHV0X2hpc3RzLnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJaXRlciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWlmIChoZS0+Y291bnQgPiBpdGVyLT5jb3VudCkKLQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZQotCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsICZvdXRwdXRfaGlzdHMpOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfX3Jlc29ydCh2b2lkKQotewotCXN0cnVjdCByYl9ub2RlICpuZXh0OwotCXN0cnVjdCBoaXN0X2VudHJ5ICpuOwotCXN0cnVjdCByYl9yb290ICp0cmVlID0gJmhpc3Q7Ci0KLQlpZiAoc29ydF9fbmVlZF9jb2xsYXBzZSkKLQkJdHJlZSA9ICZjb2xsYXBzZV9oaXN0czsKLQotCW5leHQgPSByYl9maXJzdCh0cmVlKTsKLQotCXdoaWxlIChuZXh0KSB7Ci0JCW4gPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCW5leHQgPSByYl9uZXh0KCZuLT5yYl9ub2RlKTsKLQotCQlyYl9lcmFzZSgmbi0+cmJfbm9kZSwgdHJlZSk7Ci0JCW91dHB1dF9faW5zZXJ0X2VudHJ5KG4pOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLAotCQkgICAgIHRvdGFsX21tYXAgPSAwLAotCQkgICAgIHRvdGFsX2NvbW0gPSAwLAotCQkgICAgIHRvdGFsX2ZvcmsgPSAwLAotCQkgICAgIHRvdGFsX3Vua25vd24gPSAwOwotCi1zdGF0aWMgaW50Ci1wcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKLXsKLQljaGFyIGxldmVsOwotCWludCBzaG93ID0gMDsKLQlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKLQl1NjQgaXAgPSBldmVudC0+aXAuaXA7Ci0Jc3RydWN0IG1hcCAqbWFwID0gTlVMTDsKLQotCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UIChJUCwgJWQpOiAlZDogJXBcbiIsCi0JCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWV2ZW50LT5pcC5waWQsCi0JCSh2b2lkICopKGxvbmcpaXApOwotCi0JZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwpIHsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCAmYWwsIHN5bWJvbF9maWx0ZXIpIDwgMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkgewotCQlzaG93ID0gU0hPV19LRVJORUw7Ci0JCWxldmVsID0gJ2snOwotCi0JCWRzbyA9IGtlcm5lbF9kc287Ci0KLQkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKLQotCX0gZWxzZSBpZiAoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19VU0VSKSB7Ci0KLQkJc2hvdyA9IFNIT1dfVVNFUjsKLQkJbGV2ZWwgPSAnLic7Ci0KLQkJbWFwID0gdGhyZWFkX19maW5kX21hcCh0aHJlYWQsIGlwKTsKLQkJaWYgKG1hcCAhPSBOVUxMKSB7Ci0JCQlpcCA9IG1hcC0+bWFwX2lwKG1hcCwgaXApOwotCQkJZHNvID0gbWFwLT5kc287Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogSWYgdGhpcyBpcyBvdXRzaWRlIG9mIGFsbCBrbm93biBtYXBzLAotCQkJICogYW5kIGlzIGEgbmVnYXRpdmUgYWRkcmVzcywgdHJ5IHRvIGxvb2sgaXQKLQkJCSAqIHVwIGluIHRoZSBrZXJuZWwgZHNvLCBhcyBpdCBtaWdodCBiZSBhCi0JCQkgKiB2c3lzY2FsbCAod2hpY2ggZXhlY3V0ZXMgaW4gdXNlci1tb2RlKToKLQkJCSAqLwotCQkJaWYgKChsb25nIGxvbmcpaXAgPCAwKQotCQkJCWRzbyA9IGtlcm5lbF9kc287Ci0JCX0KLQkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvID8gZHNvLT5uYW1lIDogIjxub3QgZm91bmQ+Iik7Ci0KLQl9IGVsc2UgewotCQlzaG93ID0gU0hPV19IVjsKLQkJbGV2ZWwgPSAnSCc7Ci0JCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKLQl9Ci0KLQlpZiAoc2hvdyAmIHNob3dfbWFzaykgewotCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBOVUxMOwotCi0JCWlmIChkc28pCi0JCQlzeW0gPSBkc28tPmZpbmRfc3ltYm9sKGRzbywgaXApOwotCi0JCWlmIChoaXN0X2VudHJ5X19hZGQodGhyZWFkLCBtYXAsIGRzbywgc3ltLCBpcCwgbGV2ZWwpKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJInByb2JsZW0gaW5jcmVtZW50aW5nIHN5bWJvbCBjb3VudCwgc2tpcHBpbmcgZXZlbnRcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCXRvdGFsKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcHJvY2Vzc19tbWFwX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKLQlzdHJ1Y3QgbWFwICptYXAgPSBtYXBfX25ldygmZXZlbnQtPm1tYXAsIE5VTEwsIDApOwotCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+bW1hcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0KLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfTU1BUCAlZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCi0JCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQlldmVudC0+bW1hcC5waWQsCi0JCSh2b2lkICopKGxvbmcpZXZlbnQtPm1tYXAuc3RhcnQsCi0JCSh2b2lkICopKGxvbmcpZXZlbnQtPm1tYXAubGVuLAotCQkodm9pZCAqKShsb25nKWV2ZW50LT5tbWFwLnBnb2ZmLAotCQlldmVudC0+bW1hcC5maWxlbmFtZSk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwgfHwgbWFwID09IE5VTEwpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl0aHJlYWRfX2luc2VydF9tYXAodGhyZWFkLCBtYXApOwotCXRvdGFsX21tYXArKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkOwotCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEX0NPTU06ICVzOiVkXG4iLAotCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJZXZlbnQtPmNvbW0uY29tbSwgZXZlbnQtPmNvbW0ucGlkKTsKLQotCWlmICh0aHJlYWQgPT0gTlVMTCB8fAotCSAgICB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXRvdGFsX2NvbW0rKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkOwotCXN0cnVjdCB0aHJlYWQgKnBhcmVudDsKLQotCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwotCXBhcmVudCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucHBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfRk9SSzogJWQ6JWRcbiIsCi0JCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQlldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnBwaWQpOwotCi0JLyoKLQkgKiBBIHRocmVhZCBjbG9uZSB3aWxsIGhhdmUgdGhlIHNhbWUgUElEIGZvciBib3RoCi0JICogcGFyZW50IGFuZCBjaGlsZC4KLQkgKi8KLQlpZiAodGhyZWFkID09IHBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXRocmVhZCB8fCAhcGFyZW50IHx8IHRocmVhZF9fZm9yayh0aHJlYWQsIHBhcmVudCkpIHsKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXRvdGFsX2ZvcmsrKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7Ci0JY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6Ci0JCXJldHVybiBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKLQotCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQkJcmV0dXJuIHByb2Nlc3NfbW1hcF9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKLQotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIHByb2Nlc3NfY29tbV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKLQotCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKLQkJcmV0dXJuIHByb2Nlc3NfZm9ya19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKLQkvKgotCSAqIFdlIGRvbnQgcHJvY2VzcyB0aGVtIHJpZ2h0IG5vdyBidXQgdGhleSBhcmUgZmluZToKLQkgKi8KLQotCWNhc2UgUEVSRl9SRUNPUkRfVEhST1RUTEU6Ci0JY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgotCQlyZXR1cm4gMDsKLQotCWRlZmF1bHQ6CisJaWYgKGhpc3RfZW50cnlfX2FkZCgmYWwsIDEpKSB7CisJCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCAiCisJCQkJInNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wYXJzZV9saW5lKEZJTEUgKmZpbGUsIHN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IHN0YXJ0LCB1NjQgbGVuKQorc3RhdGljIGludCBwYXJzZV9saW5lKEZJTEUgKmZpbGUsIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGxlbikKIHsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBoZS0+c3ltOwogCWNoYXIgKmxpbmUgPSBOVUxMLCAqdG1wLCAqdG1wMjsKIAlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9saW5lOwogCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2NvbG9yOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc2l6ZV90IGxpbmVfbGVuOworCXU2NCBzdGFydDsKIAlzNjQgbGluZV9pcDsKIAlpbnQgcmV0OwogCWNoYXIgKmM7CkBAIC03MDksMjIgKzE5OCwyNiBAQAogCQkJbGluZV9pcCA9IC0xOwogCX0KIAorCXN0YXJ0ID0gaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CisKIAlpZiAobGluZV9pcCAhPSAtMSkgewogCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAkJdW5zaWduZWQgaW50IGhpdHMgPSAwOwogCQlkb3VibGUgcGVyY2VudCA9IDAuMDsKIAkJY29uc3QgY2hhciAqY29sb3I7Ci0JCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gc3ltLT5wcml2OworCQlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwkJc3RydWN0IHN5bV9leHQgKnN5bV9leHQgPSBwcml2LT5leHQ7CisJCXN0cnVjdCBzeW1faGlzdCAqaCA9IHByaXYtPmhpc3Q7CiAKIAkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OwogCQlpZiAob2Zmc2V0IDwgbGVuKQotCQkJaGl0cyA9IHN5bS0+aGlzdFtvZmZzZXRdOworCQkJaGl0cyA9IGgtPmlwW29mZnNldF07CiAKIAkJaWYgKG9mZnNldCA8IGxlbiAmJiBzeW1fZXh0KSB7CiAJCQlwYXRoID0gc3ltX2V4dFtvZmZzZXRdLnBhdGg7CiAJCQlwZXJjZW50ID0gc3ltX2V4dFtvZmZzZXRdLnBlcmNlbnQ7Ci0JCX0gZWxzZSBpZiAoc3ltLT5oaXN0X3N1bSkKLQkJCXBlcmNlbnQgPSAxMDAuMCAqIGhpdHMgLyBzeW0tPmhpc3Rfc3VtOworCQl9IGVsc2UgaWYgKGgtPnN1bSkKKwkJCXBlcmNlbnQgPSAxMDAuMCAqIGhpdHMgLyBoLT5zdW07CiAKIAkJY29sb3IgPSBnZXRfcGVyY2VudF9jb2xvcihwZXJjZW50KTsKIApAQCAtNzc3LDkgKzI3MCwxMCBAQAogCXJiX2luc2VydF9jb2xvcigmc3ltX2V4dC0+bm9kZSwgJnJvb3Rfc3ltX2V4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfc291cmNlX2xpbmUoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZnJlZV9zb3VyY2VfbGluZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIGludCBsZW4pCiB7Ci0Jc3RydWN0IHN5bV9leHQgKnN5bV9leHQgPSBzeW0tPnByaXY7CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KGhlLT5zeW0pOworCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gcHJpdi0+ZXh0OwogCWludCBpOwogCiAJaWYgKCFzeW1fZXh0KQpAQCAtNzg5LDI2ICsyODMsMzAgQEAKIAkJZnJlZShzeW1fZXh0W2ldLnBhdGgpOwogCWZyZWUoc3ltX2V4dCk7CiAKLQlzeW0tPnByaXYgPSBOVUxMOworCXByaXYtPmV4dCA9IE5VTEw7CiAJcm9vdF9zeW1fZXh0ID0gUkJfUk9PVDsKIH0KIAogLyogR2V0IHRoZSBmaWxlbmFtZTpsaW5lIGZvciB0aGUgY29sb3JlZCBlbnRyaWVzICovCiBzdGF0aWMgdm9pZAotZ2V0X3NvdXJjZV9saW5lKHN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IHN0YXJ0LCBpbnQgbGVuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2dldF9zb3VyY2VfbGluZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIGludCBsZW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogeworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CisJdTY0IHN0YXJ0OwogCWludCBpOwogCWNoYXIgY21kW1BBVEhfTUFYICogMl07CiAJc3RydWN0IHN5bV9leHQgKnN5bV9leHQ7CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CisJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKIAotCWlmICghc3ltLT5oaXN0X3N1bSkKKwlpZiAoIWgtPnN1bSkKIAkJcmV0dXJuOwogCi0Jc3ltLT5wcml2ID0gY2FsbG9jKGxlbiwgc2l6ZW9mKHN0cnVjdCBzeW1fZXh0KSk7Ci0JaWYgKCFzeW0tPnByaXYpCisJc3ltX2V4dCA9IHByaXYtPmV4dCA9IGNhbGxvYyhsZW4sIHNpemVvZihzdHJ1Y3Qgc3ltX2V4dCkpOworCWlmICghcHJpdi0+ZXh0KQogCQlyZXR1cm47CiAKLQlzeW1fZXh0ID0gc3ltLT5wcml2OworCXN0YXJ0ID0gaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJY2hhciAqcGF0aCA9IE5VTEw7CkBAIC04MTYsNyArMzE0LDcgQEAKIAkJdTY0IG9mZnNldDsKIAkJRklMRSAqZnA7CiAKLQkJc3ltX2V4dFtpXS5wZXJjZW50ID0gMTAwLjAgKiBzeW0tPmhpc3RbaV0gLyBzeW0tPmhpc3Rfc3VtOworCQlzeW1fZXh0W2ldLnBlcmNlbnQgPSAxMDAuMCAqIGgtPmlwW2ldIC8gaC0+c3VtOwogCQlpZiAoc3ltX2V4dFtpXS5wZXJjZW50IDw9IDAuNSkKIAkJCWNvbnRpbnVlOwogCkBAIC04NzAsMzMgKzM2OCwzNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IHN5bWJvbCAqc3ltKQorc3RhdGljIHZvaWQgYW5ub3RhdGVfc3ltKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKIHsKLQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGRzby0+bmFtZSwgKmRfZmlsZW5hbWU7Ci0JdTY0IHN0YXJ0LCBlbmQsIGxlbjsKKwlzdHJ1Y3QgbWFwICptYXAgPSBoZS0+bWFwOworCXN0cnVjdCBkc28gKmRzbyA9IG1hcC0+ZHNvOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGhlLT5zeW07CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkc28tPmxvbmdfbmFtZSwgKmRfZmlsZW5hbWU7CisJdTY0IGxlbjsKIAljaGFyIGNvbW1hbmRbUEFUSF9NQVgqMl07CiAJRklMRSAqZmlsZTsKIAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybjsKLQlpZiAoc3ltLT5tb2R1bGUpCi0JCWZpbGVuYW1lID0gc3ltLT5tb2R1bGUtPnBhdGg7Ci0JZWxzZSBpZiAoZHNvID09IGtlcm5lbF9kc28pCi0JCWZpbGVuYW1lID0gdm1saW51eF9uYW1lOwogCi0Jc3RhcnQgPSBzeW0tPm9ial9zdGFydDsKLQlpZiAoIXN0YXJ0KQotCQlzdGFydCA9IHN5bS0+c3RhcnQ7CisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSVMeCwgZW5kPSVMeFxuIiwKKwkJCV9fZnVuY19fLCBmaWxlbmFtZSwgc3ltLT5uYW1lLAorCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAorCQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSk7CisKIAlpZiAoZnVsbF9wYXRocykKIAkJZF9maWxlbmFtZSA9IGZpbGVuYW1lOwogCWVsc2UKIAkJZF9maWxlbmFtZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKIAotCWVuZCA9IHN0YXJ0ICsgc3ltLT5lbmQgLSBzeW0tPnN0YXJ0ICsgMTsKIAlsZW4gPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAKIAlpZiAocHJpbnRfbGluZSkgewotCQlnZXRfc291cmNlX2xpbmUoc3ltLCBzdGFydCwgbGVuLCBmaWxlbmFtZSk7CisJCWdldF9zb3VyY2VfbGluZShoZSwgbGVuLCBmaWxlbmFtZSk7CiAJCXByaW50X3N1bW1hcnkoZmlsZW5hbWUpOwogCX0KIApAQCAtOTA1LDEwICs0MDQsMTIgQEAKIAlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKIAlpZiAodmVyYm9zZSA+PSAyKQotCQlwcmludGYoImFubm90YXRpbmcgWyVwXSAlMzBzIDogWyVwXSAlMzBzXG4iLCBkc28sIGRzby0+bmFtZSwgc3ltLCBzeW0tPm5hbWUpOworCQlwcmludGYoImFubm90YXRpbmcgWyVwXSAlMzBzIDogWyVwXSAlMzBzXG4iLAorCQkgICAgICAgZHNvLCBkc28tPmxvbmdfbmFtZSwgc3ltLCBzeW0tPm5hbWUpOwogCiAJc3ByaW50Zihjb21tYW5kLCAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzfGdyZXAgLXYgJXMiLAotCQkJKHU2NClzdGFydCwgKHU2NCllbmQsIGZpbGVuYW1lLCBmaWxlbmFtZSk7CisJCW1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPnN0YXJ0KSwgbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+ZW5kKSwKKwkJZmlsZW5hbWUsIGZpbGVuYW1lKTsKIAogCWlmICh2ZXJib3NlID49IDMpCiAJCXByaW50ZigiZG9pbmc6ICVzXG4iLCBjb21tYW5kKTsKQEAgLTkxOCwxNTkgKzQxOSw3OCBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJaWYgKHBhcnNlX2xpbmUoZmlsZSwgc3ltLCBzdGFydCwgbGVuKSA8IDApCisJCWlmIChwYXJzZV9saW5lKGZpbGUsIGhlLCBsZW4pIDwgMCkKIAkJCWJyZWFrOwogCX0KIAogCXBjbG9zZShmaWxlKTsKIAlpZiAocHJpbnRfbGluZSkKLQkJZnJlZV9zb3VyY2VfbGluZShzeW0sIGxlbik7CisJCWZyZWVfc291cmNlX2xpbmUoaGUsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmRfYW5ub3RhdGlvbnModm9pZCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0Jc3RydWN0IGRzbyAqZHNvOwotCWludCBjb3VudCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRzbywgJmRzb3MsIG5vZGUpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJm91dHB1dF9oaXN0cyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCXN0cnVjdCBzeW1fcHJpdiAqcHJpdjsKIAotCQlmb3IgKG5kID0gcmJfZmlyc3QoJmRzby0+c3ltcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CisJCWlmIChoZS0+c3ltID09IE5VTEwpCisJCQljb250aW51ZTsKIAotCQkJaWYgKHN5bS0+aGlzdCkgewotCQkJCWFubm90YXRlX3N5bShkc28sIHN5bSk7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJfQorCQlwcml2ID0gc3ltYm9sX19wcml2KGhlLT5zeW0pOworCQlpZiAocHJpdi0+aGlzdCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJYW5ub3RhdGVfc3ltKGhlKTsKKwkJLyoKKwkJICogU2luY2Ugd2UgaGF2ZSBhIGhpc3RfZW50cnkgcGVyIElQIGZvciB0aGUgc2FtZSBzeW1ib2wsIGZyZWUKKwkJICogaGUtPnN5bS0+aGlzdCB0byBzaWduYWwgd2UgYWxyZWFkeSBwcm9jZXNzZWQgdGhpcyBzeW1ib2wuCisJCSAqLworCQlmcmVlKHByaXYtPmhpc3QpOworCQlwcml2LT5oaXN0ID0gTlVMTDsKIAl9Ci0KLQlpZiAoIWNvdW50KQotCQlwcmludGYoIiBFcnJvcjogc3ltYm9sICclcycgbm90IHByZXNlbnQgYW1vbmdzdCB0aGUgc2FtcGxlcy5cbiIsIHN5bV9oaXN0X2ZpbHRlcik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAorCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorfTsKKwogc3RhdGljIGludCBfX2NtZF9hbm5vdGF0ZSh2b2lkKQogewotCWludCByZXQsIHJjID0gRVhJVF9GQUlMVVJFOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGhlYWQgPSAwOwotCXN0cnVjdCBzdGF0IGlucHV0X3N0YXQ7Ci0JZXZlbnRfdCAqZXZlbnQ7Ci0JdWludDMyX3Qgc2l6ZTsKLQljaGFyICpidWY7CisJc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHRocmVhZCAqaWRsZTsKKwlpbnQgcmV0OwogCi0JcmVnaXN0ZXJfaWRsZV90aHJlYWQoJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlpZGxlID0gcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKIAotCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0IDwgMCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKLQkJZXhpdCgtMSk7Ci0JfQorCXJldCA9IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCisJCQkJICAgICAgJmV2ZW50X19jd2RsZW4sICZldmVudF9fY3dkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZnN0YXQoaW5wdXQsICZpbnB1dF9zdGF0KTsKLQlpZiAocmV0IDwgMCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKLQkJZXhpdCgtMSk7Ci0JfQotCi0JaWYgKCFmb3JjZSAmJiBpbnB1dF9zdGF0LnN0X3VpZCAmJiAoaW5wdXRfc3RhdC5zdF91aWQgIT0gZ2V0ZXVpZCgpKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgImZpbGU6ICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdFxuIiwgaW5wdXRfbmFtZSk7Ci0JCWV4aXQoLTEpOwotCX0KLQotCWlmICghaW5wdXRfc3RhdC5zdF9zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCWV4aXQoMCk7Ci0JfQotCi0JaWYgKGxvYWRfa2VybmVsKCkgPCAwKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIGxvYWQga2VybmVsIHN5bWJvbHMiKTsKLQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQl9Ci0KLXJlbWFwOgotCWJ1ZiA9IChjaGFyICopbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAotCQkJICAgTUFQX1NIQVJFRCwgaW5wdXQsIG9mZnNldCk7Ci0JaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIG1tYXAgZmlsZSIpOwotCQlleGl0KC0xKTsKLQl9Ci0KLW1vcmU6Ci0JZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0JaWYgKCFzaXplKQotCQlzaXplID0gODsKLQotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7Ci0JCWludCBtdW5tYXBfcmV0OwotCi0JCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwotCi0JCW9mZnNldCArPSBzaGlmdDsKLQkJaGVhZCAtPSBzaGlmdDsKLQkJZ290byByZW1hcDsKLQl9Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCi0JZHVtcF9wcmludGYoIiVwIFslcF06IGV2ZW50OiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZylldmVudC0+aGVhZGVyLnNpemUsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOwotCi0JaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCkgPCAwKSB7Ci0KLQkJZHVtcF9wcmludGYoIiVwIFslcF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAotCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKLQotCQl0b3RhbF91bmtub3duKys7Ci0KLQkJLyoKLQkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKLQkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCi0JCSAqLwotCi0JCWlmICh1bmxpa2VseShoZWFkICYgNykpCi0JCQloZWFkICY9IH43VUxMOwotCi0JCXNpemUgPSA4OwotCX0KLQotCWhlYWQgKz0gc2l6ZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkIDwgKHVuc2lnbmVkIGxvbmcpaW5wdXRfc3RhdC5zdF9zaXplKQotCQlnb3RvIG1vcmU7Ci0KLQlyYyA9IEVYSVRfU1VDQ0VTUzsKLQljbG9zZShpbnB1dCk7Ci0KLQlkdW1wX3ByaW50ZigiICAgICAgSVAgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWwpOwotCWR1bXBfcHJpbnRmKCIgICAgbW1hcCBldmVudHM6ICUxMGxkXG4iLCB0b3RhbF9tbWFwKTsKLQlkdW1wX3ByaW50ZigiICAgIGNvbW0gZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfY29tbSk7Ci0JZHVtcF9wcmludGYoIiAgICBmb3JrIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX2ZvcmspOwotCWR1bXBfcHJpbnRmKCIgdW5rbm93biBldmVudHM6ICUxMGxkXG4iLCB0b3RhbF91bmtub3duKTsKLQotCWlmIChkdW1wX3RyYWNlKQorCWlmIChkdW1wX3RyYWNlKSB7CisJCWV2ZW50X19wcmludF90b3RhbHMoKTsKIAkJcmV0dXJuIDA7CisJfQogCi0JaWYgKHZlcmJvc2UgPj0gMykKLQkJdGhyZWFkc19fZnByaW50ZihzdGRvdXQsICZ0aHJlYWRzKTsKKwlpZiAodmVyYm9zZSA+IDMpCisJCXRocmVhZHNfX2ZwcmludGYoc3Rkb3V0KTsKIAotCWlmICh2ZXJib3NlID49IDIpCisJaWYgKHZlcmJvc2UgPiAyKQogCQlkc29zX19mcHJpbnRmKHN0ZG91dCk7CiAKIAljb2xsYXBzZV9fcmVzb3J0KCk7Ci0Jb3V0cHV0X19yZXNvcnQoKTsKKwlvdXRwdXRfX3Jlc29ydChldmVudF9fdG90YWxbMF0pOwogCiAJZmluZF9hbm5vdGF0aW9ucygpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYW5ub3RhdGVfdXNhZ2VbXSA9IHsKQEAgLTEwODgsOCArNTA4LDkgQEAKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKIAlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAogCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCi0JT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnZtbGludXhfbmFtZSwgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAotCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmbW9kdWxlcywKKwlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmc3ltYm9sX2NvbmYudm1saW51eF9uYW1lLAorCQkgICAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCisJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKIAlPUFRfQk9PTEVBTignbCcsICJwcmludC1saW5lIiwgJnByaW50X2xpbmUsCiAJCSAgICAicHJpbnQgbWF0Y2hpbmcgc291cmNlIGxpbmVzIChtYXkgYmUgc2xvdykiKSwKQEAgLTExMTUsOSArNTM2LDggQEAKIAogaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0Jc3ltYm9sX19pbml0KCk7Ci0KLQlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCWlmIChzeW1ib2xfX2luaXQoJnN5bWJvbF9jb25mKSA8IDApCisJCXJldHVybiAtMTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGFubm90YXRlX3VzYWdlLCAwKTsKIApAQCAtMTEzNCwxMCArNTU0LDEzIEBACiAJCXN5bV9oaXN0X2ZpbHRlciA9IGFyZ3ZbMF07CiAJfQogCi0JaWYgKCFzeW1faGlzdF9maWx0ZXIpCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhhbm5vdGF0ZV91c2FnZSwgb3B0aW9ucyk7Ci0KIAlzZXR1cF9wYWdlcigpOwogCisJaWYgKGZpZWxkX3NlcCAmJiAqZmllbGRfc2VwID09ICcuJykgeworCQlmcHV0cygiJy4nIGlzIHRoZSBvbmx5IG5vbiB2YWxpZCAtLWZpZWxkLXNlcGFyYXRvciBhcmd1bWVudFxuIiwKKwkJCQlzdGRlcnIpOworCQlleGl0KDEyOSk7CisJfQorCiAJcmV0dXJuIF9fY21kX2Fubm90YXRlKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1iZW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDNlYjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2J1aWx0aW4tYmVuY2guYwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqCisgKiBidWlsdGluLWJlbmNoLmMKKyAqCisgKiBHZW5lcmFsIGJlbmNobWFya2luZyBzdWJzeXN0ZW0gcHJvdmlkZWQgYnkgcGVyZgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgSGl0b3NoaSBNaXRha2UgPG1pdGFrZUBkY2wuaW5mby53YXNlZGEuYWMuanA+CisgKgorICovCisKKy8qCisgKgorICogQXZhaWxhYmxlIHN1YnN5c3RlbSBsaXN0OgorICogIHNjaGVkIC4uLiBzY2hlZHVsZXIgYW5kIElQQyBtZWNoYW5pc20KKyAqICBtZW0gICAuLi4gbWVtb3J5IGFjY2VzcyBwZXJmb3JtYW5jZQorICoKKyAqLworCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJiZW5jaC9iZW5jaC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IGJlbmNoX3N1aXRlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnN1bW1hcnk7CisJaW50ICgqZm4pKGludCwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfc3VpdGUgc2NoZWRfc3VpdGVzW10gPSB7CisJeyAibWVzc2FnaW5nIiwKKwkgICJCZW5jaG1hcmsgZm9yIHNjaGVkdWxlciBhbmQgSVBDIG1lY2hhbmlzbXMiLAorCSAgYmVuY2hfc2NoZWRfbWVzc2FnaW5nIH0sCisJeyAicGlwZSIsCisJICAiRmxvb2Qgb2YgY29tbXVuaWNhdGlvbiBvdmVyIHBpcGUoKSBiZXR3ZWVuIHR3byBwcm9jZXNzZXMiLAorCSAgYmVuY2hfc2NoZWRfcGlwZSAgICAgIH0sCisJeyBOVUxMLAorCSAgTlVMTCwKKwkgIE5VTEwgICAgICAgICAgICAgICAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IGJlbmNoX3N1aXRlIG1lbV9zdWl0ZXNbXSA9IHsKKwl7ICJtZW1jcHkiLAorCSAgIlNpbXBsZSBtZW1vcnkgY29weSBpbiB2YXJpb3VzIHdheXMiLAorCSAgYmVuY2hfbWVtX21lbWNweSB9LAorCXsgTlVMTCwKKwkgIE5VTEwsCisJICBOVUxMICAgICAgICAgICAgIH0KK307CisKK3N0cnVjdCBiZW5jaF9zdWJzeXMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqc3VtbWFyeTsKKwlzdHJ1Y3QgYmVuY2hfc3VpdGUgKnN1aXRlczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfc3Vic3lzIHN1YnN5c3RlbXNbXSA9IHsKKwl7ICJzY2hlZCIsCisJICAic2NoZWR1bGVyIGFuZCBJUEMgbWVjaGFuaXNtIiwKKwkgIHNjaGVkX3N1aXRlcyB9LAorCXsgIm1lbSIsCisJICAibWVtb3J5IGFjY2VzcyBwZXJmb3JtYW5jZSIsCisJICBtZW1fc3VpdGVzIH0sCisJeyBOVUxMLAorCSAgTlVMTCwKKwkgIE5VTEwgICAgICAgfQorfTsKKworc3RhdGljIHZvaWQgZHVtcF9zdWl0ZXMoaW50IHN1YnN5c19pbmRleCkKK3sKKwlpbnQgaTsKKworCXByaW50ZigiTGlzdCBvZiBhdmFpbGFibGUgc3VpdGVzIGZvciAlcy4uLlxuXG4iLAorCSAgICAgICBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0ubmFtZSk7CisKKwlmb3IgKGkgPSAwOyBzdWJzeXN0ZW1zW3N1YnN5c19pbmRleF0uc3VpdGVzW2ldLm5hbWU7IGkrKykKKwkJcHJpbnRmKCJcdCVzOiAlc1xuIiwKKwkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0ubmFtZSwKKwkJICAgICAgIHN1YnN5c3RlbXNbc3Vic3lzX2luZGV4XS5zdWl0ZXNbaV0uc3VtbWFyeSk7CisKKwlwcmludGYoIlxuIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgY2hhciAqYmVuY2hfZm9ybWF0X3N0cjsKK2ludCBiZW5jaF9mb3JtYXQgPSBCRU5DSF9GT1JNQVRfREVGQVVMVDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gYmVuY2hfb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2YnLCAiZm9ybWF0IiwgJmJlbmNoX2Zvcm1hdF9zdHIsICJkZWZhdWx0IiwKKwkJICAgICJTcGVjaWZ5IGZvcm1hdCBzdHlsZSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiZW5jaF91c2FnZVtdID0geworCSJwZXJmIGJlbmNoIFs8Y29tbW9uIG9wdGlvbnM+XSA8c3Vic3lzdGVtPiA8c3VpdGU+IFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBwcmludF91c2FnZSh2b2lkKQoreworCWludCBpOworCisJcHJpbnRmKCJVc2FnZTogXG4iKTsKKwlmb3IgKGkgPSAwOyBiZW5jaF91c2FnZVtpXTsgaSsrKQorCQlwcmludGYoIlx0JXNcbiIsIGJlbmNoX3VzYWdlW2ldKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoIkxpc3Qgb2YgYXZhaWxhYmxlIHN1YnN5c3RlbXMuLi5cblxuIik7CisKKwlmb3IgKGkgPSAwOyBzdWJzeXN0ZW1zW2ldLm5hbWU7IGkrKykKKwkJcHJpbnRmKCJcdCVzOiAlc1xuIiwKKwkJICAgICAgIHN1YnN5c3RlbXNbaV0ubmFtZSwgc3Vic3lzdGVtc1tpXS5zdW1tYXJ5KTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgYmVuY2hfc3RyMmludChjaGFyICpzdHIpCit7CisJaWYgKCFzdHIpCisJCXJldHVybiBCRU5DSF9GT1JNQVRfREVGQVVMVDsKKworCWlmICghc3RyY21wKHN0ciwgQkVOQ0hfRk9STUFUX0RFRkFVTFRfU1RSKSkKKwkJcmV0dXJuIEJFTkNIX0ZPUk1BVF9ERUZBVUxUOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCBCRU5DSF9GT1JNQVRfU0lNUExFX1NUUikpCisJCXJldHVybiBCRU5DSF9GT1JNQVRfU0lNUExFOworCisJcmV0dXJuIEJFTkNIX0ZPUk1BVF9VTktOT1dOOworfQorCitpbnQgY21kX2JlbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlpbnQgaSwgaiwgc3RhdHVzID0gMDsKKworCWlmIChhcmdjIDwgMikgeworCQkvKiBObyBzdWJzeXN0ZW0gc3BlY2lmaWVkLiAqLworCQlwcmludF91c2FnZSgpOworCQlnb3RvIGVuZDsKKwl9CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBiZW5jaF9vcHRpb25zLCBiZW5jaF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwliZW5jaF9mb3JtYXQgPSBiZW5jaF9zdHIyaW50KGJlbmNoX2Zvcm1hdF9zdHIpOworCWlmIChiZW5jaF9mb3JtYXQgPT0gQkVOQ0hfRk9STUFUX1VOS05PV04pIHsKKwkJcHJpbnRmKCJVbmtub3duIGZvcm1hdCBkZXNjcmlwdG9yOiVzXG4iLCBiZW5jaF9mb3JtYXRfc3RyKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGFyZ2MgPCAxKSB7CisJCXByaW50X3VzYWdlKCk7CisJCWdvdG8gZW5kOworCX0KKworCWZvciAoaSA9IDA7IHN1YnN5c3RlbXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmIChzdHJjbXAoc3Vic3lzdGVtc1tpXS5uYW1lLCBhcmd2WzBdKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhcmdjIDwgMikgeworCQkJLyogTm8gc3VpdGUgc3BlY2lmaWVkLiAqLworCQkJZHVtcF9zdWl0ZXMoaSk7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWZvciAoaiA9IDA7IHN1YnN5c3RlbXNbaV0uc3VpdGVzW2pdLm5hbWU7IGorKykgeworCQkJaWYgKHN0cmNtcChzdWJzeXN0ZW1zW2ldLnN1aXRlc1tqXS5uYW1lLCBhcmd2WzFdKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGJlbmNoX2Zvcm1hdCA9PSBCRU5DSF9GT1JNQVRfREVGQVVMVCkKKwkJCQlwcmludGYoIiMgUnVubmluZyAlcy8lcyBiZW5jaG1hcmsuLi5cbiIsCisJCQkJICAgICAgIHN1YnN5c3RlbXNbaV0ubmFtZSwKKwkJCQkgICAgICAgc3Vic3lzdGVtc1tpXS5zdWl0ZXNbal0ubmFtZSk7CisJCQlzdGF0dXMgPSBzdWJzeXN0ZW1zW2ldLnN1aXRlc1tqXS5mbihhcmdjIC0gMSwKKwkJCQkJCQkgICAgYXJndiArIDEsIHByZWZpeCk7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItaCIpIHx8ICFzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpKSB7CisJCQlkdW1wX3N1aXRlcyhpKTsKKwkJCWdvdG8gZW5kOworCQl9CisKKwkJcHJpbnRmKCJVbmtub3duIHN1aXRlOiVzIGZvciAlc1xuIiwgYXJndlsxXSwgYXJndlswXSk7CisJCXN0YXR1cyA9IDE7CisJCWdvdG8gZW5kOworCX0KKworCXByaW50ZigiVW5rbm93biBzdWJzeXN0ZW06JXNcbiIsIGFyZ3ZbMF0pOworCXN0YXR1cyA9IDE7CisKK2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWU5ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogYnVpbHRpbi1idWlsZGlkLWxpc3QuYworICoKKyAqIEJ1aWx0aW4gYnVpbGRpZC1saXN0IGNvbW1hbmQ6IGxpc3QgYnVpbGRpZHMgaW4gcGVyZi5kYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKK3N0YXRpYyBpbnQgZm9yY2U7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsZGlkX2xpc3RfdXNhZ2VbXSA9IHsKKwkicGVyZiByZXBvcnQgWzxvcHRpb25zPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCQkgICAgICAgaW50IGZlYXQsIGludCBmZCkKK3sKKwlpZiAoZmVhdCAhPSBIRUFERVJfQlVJTERfSUQpCisJCXJldHVybiAwOworCisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJcHJfd2FybmluZygiRmFpbGVkIHRvIGxzZWVrIHRvICVMZCBvZmZzZXQgZm9yIGJ1aWxkaWRzIVxuIiwKKwkJCSAgIHNlbGYtPm9mZnNldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2NtZF9idWlsZGlkX2xpc3Qodm9pZCkKK3sKKwlpbnQgZXJyID0gLTE7CisJc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CisJc3RydWN0IHN0YXQgaW5wdXRfc3RhdDsKKwlpbnQgaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKKworCWlmIChpbnB1dCA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIGlucHV0X25hbWUpOworCQlpZiAoIXN0cmNtcChpbnB1dF9uYW1lLCAicGVyZi5kYXRhIikpCisJCQlwcl9lcnIoIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOworCQlwcl9lcnIoIlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGZzdGF0KGlucHV0LCAmaW5wdXRfc3RhdCk7CisJaWYgKGVyciA8IDApIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghZm9yY2UgJiYgaW5wdXRfc3RhdC5zdF91aWQgJiYgKGlucHV0X3N0YXQuc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKKwkJcHJfZXJyKCJmaWxlICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdFxuIiwKKwkJICAgICAgIGlucHV0X25hbWUpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAoIWlucHV0X3N0YXQuc3Rfc2l6ZSkgeworCQlwcl9pbmZvKCJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gLTE7CisJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWlmIChoZWFkZXIgPT0gTlVMTCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlpZiAocGVyZl9maWxlX2hlYWRlcl9fcmVhZCgmZl9oZWFkZXIsIGhlYWRlciwgaW5wdXQpIDwgMCkgeworCQlwcl93YXJuaW5nKCJpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoaGVhZGVyLCBpbnB1dCwKKwkJCQkgICAgICAgICBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2Vzc19idWlsZGlkcyk7CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0KTsKK291dF9jbG9zZToKKwljbG9zZShpbnB1dCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IGNtZF9idWlsZGlkX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGJ1aWxkaWRfbGlzdF91c2FnZSwgMCk7CisJc2V0dXBfcGFnZXIoKTsKKwlyZXR1cm4gX19jbWRfYnVpbGRpZF9saXN0KCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4taGVscC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwppbmRleCA0ZmI4NzM0Li45ZjgxMGIxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKQEAgLTYxLDggKzYxLDcgQEAKIHsKIAlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKnZpZXdlcjsKIAotCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQotCXsKKwlmb3IgKHZpZXdlciA9IG1hbl92aWV3ZXJfaW5mb19saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkgewogCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdmlld2VyLT5uYW1lKSkKIAkJCXJldHVybiB2aWV3ZXItPmluZm87CiAJfQpAQCAtMTE1LDcgKzExNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKIHsKIAlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgewogCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLwpAQCAtMTI5LDcgKzEyOCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9rb25xdWVyb3IoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKIAlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgewpAQCAtMTU3LDcgKzE1Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX21hbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWlmICghcGF0aCkKIAkJcGF0aCA9ICJtYW4iOwpAQCAtMTgwLDcgKzE3OSw3IEBACiAKIAl3aGlsZSAoKnApCiAJCXAgPSAmKCgqcCktPm5leHQpOwotCSpwID0gY2FsbG9jKDEsIChzaXplb2YoKipwKSArIGxlbiArIDEpKTsKKwkqcCA9IHphbGxvYyhzaXplb2YoKipwKSArIGxlbiArIDEpOwogCXN0cm5jcHkoKCpwKS0+bmFtZSwgbmFtZSwgbGVuKTsKIH0KIApAQCAtMTk1LDcgKzE5NCw3IEBACiAJCQkJICAgc2l6ZV90IGxlbiwKIAkJCQkgICBjb25zdCBjaGFyICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5ldyA9IGNhbGxvYygxLCBzaXplb2YoKm5ldykgKyBsZW4gKyAxKTsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5ldyA9IHphbGxvYyhzaXplb2YoKm5ldykgKyBsZW4gKyAxKTsKIAogCXN0cm5jcHkobmV3LT5uYW1lLCBuYW1lLCBsZW4pOwogCW5ldy0+aW5mbyA9IHN0cmR1cCh2YWx1ZSk7CkBAIC0zNjQsOSArMzYzLDggQEAKIAogCXNldHVwX21hbl9wYXRoKCk7CiAJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQotCXsKIAkJZXhlY192aWV3ZXIodmlld2VyLT5uYW1lLCBwYWdlKTsgLyogd2lsbCByZXR1cm4gd2hlbiB1bmFibGUgKi8KLQl9CisKIAlpZiAoZmFsbGJhY2spCiAJCWV4ZWNfdmlld2VyKGZhbGxiYWNrLCBwYWdlKTsKIAlleGVjX3ZpZXdlcigibWFuIiwgcGFnZSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDdmZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtMCwwICsxLDgwNyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwZXJmLmgiCisKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCisKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9kYXRhX21hcC5oIgorCisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisKK3N0cnVjdCBhbGxvY19zdGF0OwordHlwZWRlZiBpbnQgKCpzb3J0X2ZuX3QpKHN0cnVjdCBhbGxvY19zdGF0ICosIHN0cnVjdCBhbGxvY19zdGF0ICopOworCitzdGF0aWMgY2hhciBjb25zdAkJKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKKworc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOworc3RhdGljIHU2NAkJCXNhbXBsZV90eXBlOworCitzdGF0aWMgaW50CQkJYWxsb2NfZmxhZzsKK3N0YXRpYyBpbnQJCQljYWxsZXJfZmxhZzsKKworc3RhdGljIGludAkJCWFsbG9jX2xpbmVzID0gLTE7CitzdGF0aWMgaW50CQkJY2FsbGVyX2xpbmVzID0gLTE7CisKK3N0YXRpYyBib29sCQkJcmF3X2lwOworCitzdGF0aWMgY2hhcgkJCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImZyYWcsaGl0LGJ5dGVzIjsKKworc3RhdGljIGludAkJCSpjcHVub2RlX21hcDsKK3N0YXRpYyBpbnQJCQltYXhfY3B1X251bTsKKworc3RydWN0IGFsbG9jX3N0YXQgeworCXU2NAljYWxsX3NpdGU7CisJdTY0CXB0cjsKKwl1NjQJYnl0ZXNfcmVxOworCXU2NAlieXRlc19hbGxvYzsKKwl1MzIJaGl0OworCXUzMglwaW5ncG9uZzsKKworCXNob3J0CWFsbG9jX2NwdTsKKworCXN0cnVjdCByYl9ub2RlIG5vZGU7Cit9OworCitzdGF0aWMgc3RydWN0IHJiX3Jvb3Qgcm9vdF9hbGxvY19zdGF0Oworc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3RfYWxsb2Nfc29ydGVkOworc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3RfY2FsbGVyX3N0YXQ7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3Qgcm9vdF9jYWxsZXJfc29ydGVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF9yZXF1ZXN0ZWQsIHRvdGFsX2FsbG9jYXRlZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2FsbG9jcywgbnJfY3Jvc3NfYWxsb2NzOworCitzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7CisJdTMyIHNpemU7CisJY2hhciBkYXRhWzBdOworfTsKKworI2RlZmluZSBQQVRIX1NZU19OT0RFCSIvc3lzL2RldmljZXMvc3lzdGVtL25vZGUiCisKK3N0YXRpYyB2b2lkIGluaXRfY3B1bm9kZV9tYXAodm9pZCkKK3sKKwlGSUxFICpmcDsKKwlpbnQgaTsKKworCWZwID0gZm9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2tlcm5lbF9tYXgiLCAiciIpOworCWlmICghZnApIHsKKwkJbWF4X2NwdV9udW0gPSA0MDk2OworCQlyZXR1cm47CisJfQorCisJaWYgKGZzY2FuZihmcCwgIiVkIiwgJm1heF9jcHVfbnVtKSA8IDEpCisJCWRpZSgiRmFpbGVkIHRvIHJlYWQgJ2tlcm5lbF9tYXgnIGZyb20gc3lzZnMiKTsKKwltYXhfY3B1X251bSsrOworCisJY3B1bm9kZV9tYXAgPSBjYWxsb2MobWF4X2NwdV9udW0sIHNpemVvZihpbnQpKTsKKwlpZiAoIWNwdW5vZGVfbWFwKQorCQlkaWUoImNhbGxvYyIpOworCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1X251bTsgaSsrKQorCQljcHVub2RlX21hcFtpXSA9IC0xOworCWZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2NwdW5vZGVfbWFwKHZvaWQpCit7CisJc3RydWN0IGRpcmVudCAqZGVudDEsICpkZW50MjsKKwlESVIgKmRpcjEsICpkaXIyOworCXVuc2lnbmVkIGludCBjcHUsIG1lbTsKKwljaGFyIGJ1ZltQQVRIX01BWF07CisKKwlpbml0X2NwdW5vZGVfbWFwKCk7CisKKwlkaXIxID0gb3BlbmRpcihQQVRIX1NZU19OT0RFKTsKKwlpZiAoIWRpcjEpCisJCXJldHVybjsKKworCXdoaWxlICh0cnVlKSB7CisJCWRlbnQxID0gcmVhZGRpcihkaXIxKTsKKwkJaWYgKCFkZW50MSkKKwkJCWJyZWFrOworCisJCWlmIChzc2NhbmYoZGVudDEtPmRfbmFtZSwgIm5vZGUldSIsICZtZW0pIDwgMSkKKwkJCWNvbnRpbnVlOworCisJCXNucHJpbnRmKGJ1ZiwgUEFUSF9NQVgsICIlcy8lcyIsIFBBVEhfU1lTX05PREUsIGRlbnQxLT5kX25hbWUpOworCQlkaXIyID0gb3BlbmRpcihidWYpOworCQlpZiAoIWRpcjIpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKHRydWUpIHsKKwkJCWRlbnQyID0gcmVhZGRpcihkaXIyKTsKKwkJCWlmICghZGVudDIpCisJCQkJYnJlYWs7CisJCQlpZiAoc3NjYW5mKGRlbnQyLT5kX25hbWUsICJjcHUldSIsICZjcHUpIDwgMSkKKwkJCQljb250aW51ZTsKKwkJCWNwdW5vZGVfbWFwW2NwdV0gPSBtZW07CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9hbGxvY19zdGF0KHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLCB1bnNpZ25lZCBsb25nIHB0ciwKKwkJCSAgICAgIGludCBieXRlc19yZXEsIGludCBieXRlc19hbGxvYywgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5vZGUgPSAmcm9vdF9hbGxvY19zdGF0LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGFsbG9jX3N0YXQgKmRhdGEgPSBOVUxMOworCisJd2hpbGUgKCpub2RlKSB7CisJCXBhcmVudCA9ICpub2RlOworCQlkYXRhID0gcmJfZW50cnkoKm5vZGUsIHN0cnVjdCBhbGxvY19zdGF0LCBub2RlKTsKKworCQlpZiAocHRyID4gZGF0YS0+cHRyKQorCQkJbm9kZSA9ICYoKm5vZGUpLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAocHRyIDwgZGF0YS0+cHRyKQorCQkJbm9kZSA9ICYoKm5vZGUpLT5yYl9sZWZ0OworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAoZGF0YSAmJiBkYXRhLT5wdHIgPT0gcHRyKSB7CisJCWRhdGEtPmhpdCsrOworCQlkYXRhLT5ieXRlc19yZXEgKz0gYnl0ZXNfcmVxOworCQlkYXRhLT5ieXRlc19hbGxvYyArPSBieXRlc19yZXE7CisJfSBlbHNlIHsKKwkJZGF0YSA9IG1hbGxvYyhzaXplb2YoKmRhdGEpKTsKKwkJaWYgKCFkYXRhKQorCQkJZGllKCJtYWxsb2MiKTsKKwkJZGF0YS0+cHRyID0gcHRyOworCQlkYXRhLT5waW5ncG9uZyA9IDA7CisJCWRhdGEtPmhpdCA9IDE7CisJCWRhdGEtPmJ5dGVzX3JlcSA9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgPSBieXRlc19hbGxvYzsKKworCQlyYl9saW5rX25vZGUoJmRhdGEtPm5vZGUsIHBhcmVudCwgbm9kZSk7CisJCXJiX2luc2VydF9jb2xvcigmZGF0YS0+bm9kZSwgJnJvb3RfYWxsb2Nfc3RhdCk7CisJfQorCWRhdGEtPmNhbGxfc2l0ZSA9IGNhbGxfc2l0ZTsKKwlkYXRhLT5hbGxvY19jcHUgPSBjcHU7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9jYWxsZXJfc3RhdCh1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCSAgICAgIGludCBieXRlc19yZXEsIGludCBieXRlc19hbGxvYykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5vZGUgPSAmcm9vdF9jYWxsZXJfc3RhdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBhbGxvY19zdGF0ICpkYXRhID0gTlVMTDsKKworCXdoaWxlICgqbm9kZSkgeworCQlwYXJlbnQgPSAqbm9kZTsKKwkJZGF0YSA9IHJiX2VudHJ5KCpub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisKKwkJaWYgKGNhbGxfc2l0ZSA+IGRhdGEtPmNhbGxfc2l0ZSkKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKGNhbGxfc2l0ZSA8IGRhdGEtPmNhbGxfc2l0ZSkKKwkJCW5vZGUgPSAmKCpub2RlKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRhdGEgJiYgZGF0YS0+Y2FsbF9zaXRlID09IGNhbGxfc2l0ZSkgeworCQlkYXRhLT5oaXQrKzsKKwkJZGF0YS0+Ynl0ZXNfcmVxICs9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfcmVxOworCX0gZWxzZSB7CisJCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpkYXRhKSk7CisJCWlmICghZGF0YSkKKwkJCWRpZSgibWFsbG9jIik7CisJCWRhdGEtPmNhbGxfc2l0ZSA9IGNhbGxfc2l0ZTsKKwkJZGF0YS0+cGluZ3BvbmcgPSAwOworCQlkYXRhLT5oaXQgPSAxOworCQlkYXRhLT5ieXRlc19yZXEgPSBieXRlc19yZXE7CisJCWRhdGEtPmJ5dGVzX2FsbG9jID0gYnl0ZXNfYWxsb2M7CisKKwkJcmJfbGlua19ub2RlKCZkYXRhLT5ub2RlLCBwYXJlbnQsIG5vZGUpOworCQlyYl9pbnNlcnRfY29sb3IoJmRhdGEtPm5vZGUsICZyb290X2NhbGxlcl9zdGF0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYWxsb2NfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKKwkJCQlzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJCWludCBjcHUsCisJCQkJdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCwKKwkJCQlpbnQgbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZTsKKwl1bnNpZ25lZCBsb25nIHB0cjsKKwlpbnQgYnl0ZXNfcmVxOworCWludCBieXRlc19hbGxvYzsKKwlpbnQgbm9kZTEsIG5vZGUyOworCisJcHRyID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAicHRyIiwgcmF3LT5kYXRhKTsKKwljYWxsX3NpdGUgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJjYWxsX3NpdGUiLCByYXctPmRhdGEpOworCWJ5dGVzX3JlcSA9IHJhd19maWVsZF92YWx1ZShldmVudCwgImJ5dGVzX3JlcSIsIHJhdy0+ZGF0YSk7CisJYnl0ZXNfYWxsb2MgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJieXRlc19hbGxvYyIsIHJhdy0+ZGF0YSk7CisKKwlpbnNlcnRfYWxsb2Nfc3RhdChjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywgY3B1KTsKKwlpbnNlcnRfY2FsbGVyX3N0YXQoY2FsbF9zaXRlLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jKTsKKworCXRvdGFsX3JlcXVlc3RlZCArPSBieXRlc19yZXE7CisJdG90YWxfYWxsb2NhdGVkICs9IGJ5dGVzX2FsbG9jOworCisJaWYgKG5vZGUpIHsKKwkJbm9kZTEgPSBjcHVub2RlX21hcFtjcHVdOworCQlub2RlMiA9IHJhd19maWVsZF92YWx1ZShldmVudCwgIm5vZGUiLCByYXctPmRhdGEpOworCQlpZiAobm9kZTEgIT0gbm9kZTIpCisJCQlucl9jcm9zc19hbGxvY3MrKzsKKwl9CisJbnJfYWxsb2NzKys7Cit9CisKK3N0YXRpYyBpbnQgcHRyX2NtcChzdHJ1Y3QgYWxsb2Nfc3RhdCAqLCBzdHJ1Y3QgYWxsb2Nfc3RhdCAqKTsKK3N0YXRpYyBpbnQgY2FsbHNpdGVfY21wKHN0cnVjdCBhbGxvY19zdGF0ICosIHN0cnVjdCBhbGxvY19zdGF0ICopOworCitzdGF0aWMgc3RydWN0IGFsbG9jX3N0YXQgKnNlYXJjaF9hbGxvY19zdGF0KHVuc2lnbmVkIGxvbmcgcHRyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJCSAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKwkJCQkJICAgIHNvcnRfZm5fdCBzb3J0X2ZuKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdCBrZXkgPSB7IC5wdHIgPSBwdHIsIC5jYWxsX3NpdGUgPSBjYWxsX3NpdGUgfTsKKworCXdoaWxlIChub2RlKSB7CisJCXN0cnVjdCBhbGxvY19zdGF0ICpkYXRhOworCQlpbnQgY21wOworCisJCWRhdGEgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisKKwkJY21wID0gc29ydF9mbigma2V5LCBkYXRhKTsKKwkJaWYgKGNtcCA8IDApCisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIGRhdGE7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2ZyZWVfZXZlbnQoc3RydWN0IHJhd19ldmVudF9zYW1wbGUgKnJhdywKKwkJCSAgICAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJICAgICAgIGludCBjcHUsCisJCQkgICAgICAgdTY0IHRpbWVzdGFtcCBfX3VzZWQsCisJCQkgICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHB0cjsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdCAqc19hbGxvYywgKnNfY2FsbGVyOworCisJcHRyID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAicHRyIiwgcmF3LT5kYXRhKTsKKworCXNfYWxsb2MgPSBzZWFyY2hfYWxsb2Nfc3RhdChwdHIsIDAsICZyb290X2FsbG9jX3N0YXQsIHB0cl9jbXApOworCWlmICghc19hbGxvYykKKwkJcmV0dXJuOworCisJaWYgKGNwdSAhPSBzX2FsbG9jLT5hbGxvY19jcHUpIHsKKwkJc19hbGxvYy0+cGluZ3BvbmcrKzsKKworCQlzX2NhbGxlciA9IHNlYXJjaF9hbGxvY19zdGF0KDAsIHNfYWxsb2MtPmNhbGxfc2l0ZSwKKwkJCQkJICAgICAmcm9vdF9jYWxsZXJfc3RhdCwgY2FsbHNpdGVfY21wKTsKKwkJYXNzZXJ0KHNfY2FsbGVyKTsKKwkJc19jYWxsZXItPnBpbmdwb25nKys7CisJfQorCXNfYWxsb2MtPmFsbG9jX2NwdSA9IC0xOworfQorCitzdGF0aWMgdm9pZAorcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqbW9yZV9kYXRhLAorCQkgIGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSAqcmF3ID0gbW9yZV9kYXRhOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisJaW50IHR5cGU7CisKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUocmF3LT5kYXRhKTsKKwlldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImttYWxsb2MiKSB8fAorCSAgICAhc3RyY21wKGV2ZW50LT5uYW1lLCAia21lbV9jYWNoZV9hbGxvYyIpKSB7CisJCXByb2Nlc3NfYWxsb2NfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImttYWxsb2Nfbm9kZSIpIHx8CisJICAgICFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWVtX2NhY2hlX2FsbG9jX25vZGUiKSkgeworCQlwcm9jZXNzX2FsbG9jX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQsIDEpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJrZnJlZSIpIHx8CisJICAgICFzdHJjbXAoZXZlbnQtPm5hbWUsICJrbWVtX2NhY2hlX2ZyZWUiKSkgeworCQlwcm9jZXNzX2ZyZWVfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJdTY0IGlwID0gZXZlbnQtPmlwLmlwOworCXU2NCB0aW1lc3RhbXAgPSAtMTsKKwl1MzIgY3B1ID0gLTE7CisJdTY0IHBlcmlvZCA9IDE7CisJdm9pZCAqbW9yZV9kYXRhID0gZXZlbnQtPmlwLl9fbW9yZV9kYXRhOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7CisJCXRpbWVzdGFtcCA9ICoodTY0ICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSB7CisJCWNwdSA9ICoodTMyICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTMyKTsgLyogcmVzZXJ2ZWQgKi8KKwl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpIHsKKwkJcGVyaW9kID0gKih1NjQgKiltb3JlX2RhdGE7CisJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKKwl9CisKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKKwkJZXZlbnQtPmhlYWRlci5taXNjLAorCQlldmVudC0+aXAucGlkLCBldmVudC0+aXAudGlkLAorCQkodm9pZCAqKShsb25nKWlwLAorCQkobG9uZyBsb25nKXBlcmlvZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBtb3JlX2RhdGEsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FtcGxlX3R5cGVfY2hlY2sodTY0IHR5cGUpCit7CisJc2FtcGxlX3R5cGUgPSB0eXBlOworCisJaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgorCQkJIndpdGhvdXQgLVI/Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciBmaWxlX2hhbmRsZXIgPSB7CisJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCit9OworCitzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCit7CisJcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKKworCXJldHVybiBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLCAwLCAwLAorCQkJCSAgICAgICAmZXZlbnRfX2N3ZGxlbiwgJmV2ZW50X19jd2QpOworfQorCitzdGF0aWMgZG91YmxlIGZyYWdtZW50YXRpb24odW5zaWduZWQgbG9uZyBuX3JlcSwgdW5zaWduZWQgbG9uZyBuX2FsbG9jKQoreworCWlmIChuX2FsbG9jID09IDApCisJCXJldHVybiAwLjA7CisJZWxzZQorCQlyZXR1cm4gMTAwLjAgLSAoMTAwLjAgKiBuX3JlcSAvIG5fYWxsb2MpOworfQorCitzdGF0aWMgdm9pZCBfX3ByaW50X3Jlc3VsdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgaW50IG5fbGluZXMsIGludCBpc19jYWxsZXIpCit7CisJc3RydWN0IHJiX25vZGUgKm5leHQ7CisKKwlwcmludGYoIiUuMTAyc1xuIiwgZ3JhcGhfZG90dGVkX2xpbmUpOworCXByaW50ZigiICUtMzRzIHwiLCAgaXNfY2FsbGVyID8gIkNhbGxzaXRlIjogIkFsbG9jIFB0ciIpOworCXByaW50ZigiIFRvdGFsX2FsbG9jL1BlciB8IFRvdGFsX3JlcS9QZXIgICB8IEhpdCAgIHwgUGluZy1wb25nIHwgRnJhZ1xuIik7CisJcHJpbnRmKCIlLjEwMnNcbiIsIGdyYXBoX2RvdHRlZF9saW5lKTsKKworCW5leHQgPSByYl9maXJzdChyb290KTsKKworCXdoaWxlIChuZXh0ICYmIG5fbGluZXMtLSkgeworCQlzdHJ1Y3QgYWxsb2Nfc3RhdCAqZGF0YSA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBhbGxvY19zdGF0LAorCQkJCQkJICAgbm9kZSk7CisJCXN0cnVjdCBzeW1ib2wgKnN5bSA9IE5VTEw7CisJCWNoYXIgYnVmW0JVRlNJWl07CisJCXU2NCBhZGRyOworCisJCWlmIChpc19jYWxsZXIpIHsKKwkJCWFkZHIgPSBkYXRhLT5jYWxsX3NpdGU7CisJCQlpZiAoIXJhd19pcCkKKwkJCQlzeW0gPSB0aHJlYWRfX2ZpbmRfZnVuY3Rpb24oa3RocmVhZCwgYWRkciwgTlVMTCk7CisJCX0gZWxzZQorCQkJYWRkciA9IGRhdGEtPnB0cjsKKworCQlpZiAoc3ltICE9IE5VTEwpCisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMrJUx4Iiwgc3ltLT5uYW1lLAorCQkJCSBhZGRyIC0gc3ltLT5zdGFydCk7CisJCWVsc2UKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlI0x4IiwgYWRkcik7CisJCXByaW50ZigiICUtMzRzIHwiLCBidWYpOworCisJCXByaW50ZigiICU5bGx1LyUtNWx1IHwgJTlsbHUvJS01bHUgfCAlNmx1IHwgJThsdSB8ICU2LjNmJSVcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEtPmJ5dGVzX2FsbG9jLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZGF0YS0+Ynl0ZXNfYWxsb2MgLyBkYXRhLT5oaXQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEtPmJ5dGVzX3JlcSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWRhdGEtPmJ5dGVzX3JlcSAvIGRhdGEtPmhpdCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWRhdGEtPmhpdCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWRhdGEtPnBpbmdwb25nLAorCQkgICAgICAgZnJhZ21lbnRhdGlvbihkYXRhLT5ieXRlc19yZXEsIGRhdGEtPmJ5dGVzX2FsbG9jKSk7CisKKwkJbmV4dCA9IHJiX25leHQobmV4dCk7CisJfQorCisJaWYgKG5fbGluZXMgPT0gLTEpCisJCXByaW50ZigiIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgfCAuLi4gICAgfCAuLi4gICAgICB8IC4uLiAgIFxuIik7CisKKwlwcmludGYoIiUuMTAyc1xuIiwgZ3JhcGhfZG90dGVkX2xpbmUpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdW1tYXJ5KHZvaWQpCit7CisJcHJpbnRmKCJcblNVTU1BUllcbj09PT09PT1cbiIpOworCXByaW50ZigiVG90YWwgYnl0ZXMgcmVxdWVzdGVkOiAlbHVcbiIsIHRvdGFsX3JlcXVlc3RlZCk7CisJcHJpbnRmKCJUb3RhbCBieXRlcyBhbGxvY2F0ZWQ6ICVsdVxuIiwgdG90YWxfYWxsb2NhdGVkKTsKKwlwcmludGYoIlRvdGFsIGJ5dGVzIHdhc3RlZCBvbiBpbnRlcm5hbCBmcmFnbWVudGF0aW9uOiAlbHVcbiIsCisJICAgICAgIHRvdGFsX2FsbG9jYXRlZCAtIHRvdGFsX3JlcXVlc3RlZCk7CisJcHJpbnRmKCJJbnRlcm5hbCBmcmFnbWVudGF0aW9uOiAlZiUlXG4iLAorCSAgICAgICBmcmFnbWVudGF0aW9uKHRvdGFsX3JlcXVlc3RlZCwgdG90YWxfYWxsb2NhdGVkKSk7CisJcHJpbnRmKCJDcm9zcyBDUFUgYWxsb2NhdGlvbnM6ICVsdS8lbHVcbiIsIG5yX2Nyb3NzX2FsbG9jcywgbnJfYWxsb2NzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcmVzdWx0KHZvaWQpCit7CisJaWYgKGNhbGxlcl9mbGFnKQorCQlfX3ByaW50X3Jlc3VsdCgmcm9vdF9jYWxsZXJfc29ydGVkLCBjYWxsZXJfbGluZXMsIDEpOworCWlmIChhbGxvY19mbGFnKQorCQlfX3ByaW50X3Jlc3VsdCgmcm9vdF9hbGxvY19zb3J0ZWQsIGFsbG9jX2xpbmVzLCAwKTsKKwlwcmludF9zdW1tYXJ5KCk7Cit9CisKK3N0cnVjdCBzb3J0X2RpbWVuc2lvbiB7CisJY29uc3QgY2hhcgkJbmFtZVsyMF07CisJc29ydF9mbl90CQljbXA7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworfTsKKworc3RhdGljIExJU1RfSEVBRChjYWxsZXJfc29ydCk7CitzdGF0aWMgTElTVF9IRUFEKGFsbG9jX3NvcnQpOworCitzdGF0aWMgdm9pZCBzb3J0X2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGFsbG9jX3N0YXQgKmRhdGEsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpzb3J0X2xpc3QpCit7CisJc3RydWN0IHJiX25vZGUgKipuZXcgPSAmKHJvb3QtPnJiX25vZGUpOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc29ydDsKKworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBhbGxvY19zdGF0ICp0aGlzOworCQlpbnQgY21wID0gMDsKKworCQl0aGlzID0gcmJfZW50cnkoKm5ldywgc3RydWN0IGFsbG9jX3N0YXQsIG5vZGUpOworCQlwYXJlbnQgPSAqbmV3OworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc29ydCwgc29ydF9saXN0LCBsaXN0KSB7CisJCQljbXAgPSBzb3J0LT5jbXAoZGF0YSwgdGhpcyk7CisJCQlpZiAoY21wKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNtcCA+IDApCisJCQluZXcgPSAmKCgqbmV3KS0+cmJfbGVmdCk7CisJCWVsc2UKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9yaWdodCk7CisJfQorCisJcmJfbGlua19ub2RlKCZkYXRhLT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZkYXRhLT5ub2RlLCByb290KTsKK30KKworc3RhdGljIHZvaWQgX19zb3J0X3Jlc3VsdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IHJiX3Jvb3QgKnJvb3Rfc29ydGVkLAorCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpzb3J0X2xpc3QpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGFsbG9jX3N0YXQgKmRhdGE7CisKKwlmb3IgKDs7KSB7CisJCW5vZGUgPSByYl9maXJzdChyb290KTsKKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CisKKwkJcmJfZXJhc2Uobm9kZSwgcm9vdCk7CisJCWRhdGEgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYWxsb2Nfc3RhdCwgbm9kZSk7CisJCXNvcnRfaW5zZXJ0KHJvb3Rfc29ydGVkLCBkYXRhLCBzb3J0X2xpc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgc29ydF9yZXN1bHQodm9pZCkKK3sKKwlfX3NvcnRfcmVzdWx0KCZyb290X2FsbG9jX3N0YXQsICZyb290X2FsbG9jX3NvcnRlZCwgJmFsbG9jX3NvcnQpOworCV9fc29ydF9yZXN1bHQoJnJvb3RfY2FsbGVyX3N0YXQsICZyb290X2NhbGxlcl9zb3J0ZWQsICZjYWxsZXJfc29ydCk7Cit9CisKK3N0YXRpYyBpbnQgX19jbWRfa21lbSh2b2lkKQoreworCXNldHVwX3BhZ2VyKCk7CisJcmVhZF9ldmVudHMoKTsKKwlzb3J0X3Jlc3VsdCgpOworCXByaW50X3Jlc3VsdCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qga21lbV91c2FnZVtdID0geworCSJwZXJmIGttZW0gWzxvcHRpb25zPl0ge3JlY29yZH0iLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgcHRyX2NtcChzdHJ1Y3QgYWxsb2Nfc3RhdCAqbCwgc3RydWN0IGFsbG9jX3N0YXQgKnIpCit7CisJaWYgKGwtPnB0ciA8IHItPnB0cikKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGwtPnB0ciA+IHItPnB0cikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gcHRyX3NvcnRfZGltZW5zaW9uID0geworCS5uYW1lCT0gInB0ciIsCisJLmNtcAk9IHB0cl9jbXAsCit9OworCitzdGF0aWMgaW50IGNhbGxzaXRlX2NtcChzdHJ1Y3QgYWxsb2Nfc3RhdCAqbCwgc3RydWN0IGFsbG9jX3N0YXQgKnIpCit7CisJaWYgKGwtPmNhbGxfc2l0ZSA8IHItPmNhbGxfc2l0ZSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGwtPmNhbGxfc2l0ZSA+IHItPmNhbGxfc2l0ZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gY2FsbHNpdGVfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJPSAiY2FsbHNpdGUiLAorCS5jbXAJPSBjYWxsc2l0ZV9jbXAsCit9OworCitzdGF0aWMgaW50IGhpdF9jbXAoc3RydWN0IGFsbG9jX3N0YXQgKmwsIHN0cnVjdCBhbGxvY19zdGF0ICpyKQoreworCWlmIChsLT5oaXQgPCByLT5oaXQpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChsLT5oaXQgPiByLT5oaXQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIGhpdF9zb3J0X2RpbWVuc2lvbiA9IHsKKwkubmFtZQk9ICJoaXQiLAorCS5jbXAJPSBoaXRfY21wLAorfTsKKworc3RhdGljIGludCBieXRlc19jbXAoc3RydWN0IGFsbG9jX3N0YXQgKmwsIHN0cnVjdCBhbGxvY19zdGF0ICpyKQoreworCWlmIChsLT5ieXRlc19hbGxvYyA8IHItPmJ5dGVzX2FsbG9jKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAobC0+Ynl0ZXNfYWxsb2MgPiByLT5ieXRlc19hbGxvYykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gYnl0ZXNfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJPSAiYnl0ZXMiLAorCS5jbXAJPSBieXRlc19jbXAsCit9OworCitzdGF0aWMgaW50IGZyYWdfY21wKHN0cnVjdCBhbGxvY19zdGF0ICpsLCBzdHJ1Y3QgYWxsb2Nfc3RhdCAqcikKK3sKKwlkb3VibGUgeCwgeTsKKworCXggPSBmcmFnbWVudGF0aW9uKGwtPmJ5dGVzX3JlcSwgbC0+Ynl0ZXNfYWxsb2MpOworCXkgPSBmcmFnbWVudGF0aW9uKHItPmJ5dGVzX3JlcSwgci0+Ynl0ZXNfYWxsb2MpOworCisJaWYgKHggPCB5KQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoeCA+IHkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIGZyYWdfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJPSAiZnJhZyIsCisJLmNtcAk9IGZyYWdfY21wLAorfTsKKworc3RhdGljIGludCBwaW5ncG9uZ19jbXAoc3RydWN0IGFsbG9jX3N0YXQgKmwsIHN0cnVjdCBhbGxvY19zdGF0ICpyKQoreworCWlmIChsLT5waW5ncG9uZyA8IHItPnBpbmdwb25nKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAobC0+cGluZ3BvbmcgPiByLT5waW5ncG9uZykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gcGluZ3Bvbmdfc29ydF9kaW1lbnNpb24gPSB7CisJLm5hbWUJPSAicGluZ3BvbmciLAorCS5jbXAJPSBwaW5ncG9uZ19jbXAsCit9OworCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uICphdmFpbF9zb3J0c1tdID0geworCSZwdHJfc29ydF9kaW1lbnNpb24sCisJJmNhbGxzaXRlX3NvcnRfZGltZW5zaW9uLAorCSZoaXRfc29ydF9kaW1lbnNpb24sCisJJmJ5dGVzX3NvcnRfZGltZW5zaW9uLAorCSZmcmFnX3NvcnRfZGltZW5zaW9uLAorCSZwaW5ncG9uZ19zb3J0X2RpbWVuc2lvbiwKK307CisKKyNkZWZpbmUgTlVNX0FWQUlMX1NPUlRTCVwKKwkoaW50KShzaXplb2YoYXZhaWxfc29ydHMpIC8gc2l6ZW9mKHN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqKSkKKworc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gKnNvcnQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0FWQUlMX1NPUlRTOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXZhaWxfc29ydHNbaV0tPm5hbWUsIHRvaykpIHsKKwkJCXNvcnQgPSBtYWxsb2Moc2l6ZW9mKCpzb3J0KSk7CisJCQlpZiAoIXNvcnQpCisJCQkJZGllKCJtYWxsb2MiKTsKKwkJCW1lbWNweShzb3J0LCBhdmFpbF9zb3J0c1tpXSwgc2l6ZW9mKCpzb3J0KSk7CisJCQlsaXN0X2FkZF90YWlsKCZzb3J0LT5saXN0LCBsaXN0KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldHVwX3NvcnRpbmcoc3RydWN0IGxpc3RfaGVhZCAqc29ydF9saXN0LCBjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqdG9rOworCWNoYXIgKnN0ciA9IHN0cmR1cChhcmcpOworCisJaWYgKCFzdHIpCisJCWRpZSgic3RyZHVwIik7CisKKwl3aGlsZSAodHJ1ZSkgeworCQl0b2sgPSBzdHJzZXAoJnN0ciwgIiwiKTsKKwkJaWYgKCF0b2spCisJCQlicmVhazsKKwkJaWYgKHNvcnRfZGltZW5zaW9uX19hZGQodG9rLCBzb3J0X2xpc3QpIDwgMCkgeworCQkJZXJyb3IoIlVua25vd24gLS1zb3J0IGtleTogJyVzJyIsIHRvayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmcmVlKHN0cik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc29ydF9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fdXNlZCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY2FsbGVyX2ZsYWcgPiBhbGxvY19mbGFnKQorCQlyZXR1cm4gc2V0dXBfc29ydGluZygmY2FsbGVyX3NvcnQsIGFyZyk7CisJZWxzZQorCQlyZXR1cm4gc2V0dXBfc29ydGluZygmYWxsb2Nfc29ydCwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3N0YXRfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0cmNtcChhcmcsICJhbGxvYyIpID09IDApCisJCWFsbG9jX2ZsYWcgPSAoY2FsbGVyX2ZsYWcgKyAxKTsKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiY2FsbGVyIikgPT0gMCkKKwkJY2FsbGVyX2ZsYWcgPSAoYWxsb2NfZmxhZyArIDEpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmVfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlpbnQgbGluZXM7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJbGluZXMgPSBzdHJ0b3VsKGFyZywgTlVMTCwgMTApOworCisJaWYgKGNhbGxlcl9mbGFnID4gYWxsb2NfZmxhZykKKwkJY2FsbGVyX2xpbmVzID0gbGluZXM7CisJZWxzZQorCQlhbGxvY19saW5lcyA9IGxpbmVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGttZW1fb3B0aW9uc1tdID0geworCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAorCQkgICAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0NBTExCQUNLKDAsICJzdGF0IiwgTlVMTCwgIjxhbGxvYz58PGNhbGxlcj4iLAorCQkgICAgICJzdGF0IHNlbGVjdG9yLCBQYXNzICdhbGxvYycgb3IgJ2NhbGxlcicuIiwKKwkJICAgICBwYXJzZV9zdGF0X29wdCksCisJT1BUX0NBTExCQUNLKCdzJywgInNvcnQiLCBOVUxMLCAia2V5WyxrZXkyLi4uXSIsCisJCSAgICAgInNvcnQgYnkga2V5czogcHRyLCBjYWxsX3NpdGUsIGJ5dGVzLCBoaXQsIHBpbmdwb25nLCBmcmFnIiwKKwkJICAgICBwYXJzZV9zb3J0X29wdCksCisJT1BUX0NBTExCQUNLKCdsJywgImxpbmUiLCBOVUxMLCAibnVtIiwKKwkJICAgICAic2hvdyBuIGxpbnMiLAorCQkgICAgIHBhcnNlX2xpbmVfb3B0KSwKKwlPUFRfQk9PTEVBTigwLCAicmF3LWlwIiwgJnJhd19pcCwgInNob3cgcmF3IGlwIGluc3RlYWQgb2Ygc3ltYm9sIiksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKwkicmVjb3JkIiwKKwkiLWEiLAorCSItUiIsCisJIi1NIiwKKwkiLWYiLAorCSItYyIsICIxIiwKKwkiLWUiLCAia21lbTprbWFsbG9jIiwKKwkiLWUiLCAia21lbTprbWFsbG9jX25vZGUiLAorCSItZSIsICJrbWVtOmtmcmVlIiwKKwkiLWUiLCAia21lbTprbWVtX2NhY2hlX2FsbG9jIiwKKwkiLWUiLCAia21lbTprbWVtX2NhY2hlX2FsbG9jX25vZGUiLAorCSItZSIsICJrbWVtOmttZW1fY2FjaGVfZnJlZSIsCit9OworCitzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IHJlY19hcmdjLCBpLCBqOworCWNvbnN0IGNoYXIgKipyZWNfYXJndjsKKworCXJlY19hcmdjID0gQVJSQVlfU0laRShyZWNvcmRfYXJncykgKyBhcmdjIC0gMTsKKwlyZWNfYXJndiA9IGNhbGxvYyhyZWNfYXJnYyArIDEsIHNpemVvZihjaGFyICopKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKTsgaSsrKQorCQlyZWNfYXJndltpXSA9IHN0cmR1cChyZWNvcmRfYXJnc1tpXSk7CisKKwlmb3IgKGogPSAxOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyssIGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOworCisJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOworfQorCitpbnQgY21kX2ttZW0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCXN5bWJvbF9faW5pdCgwKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGttZW1fb3B0aW9ucywga21lbV91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyAmJiAhc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpCisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJZWxzZSBpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGttZW1fdXNhZ2UsIGttZW1fb3B0aW9ucyk7CisKKwlpZiAobGlzdF9lbXB0eSgmY2FsbGVyX3NvcnQpKQorCQlzZXR1cF9zb3J0aW5nKCZjYWxsZXJfc29ydCwgZGVmYXVsdF9zb3J0X29yZGVyKTsKKwlpZiAobGlzdF9lbXB0eSgmYWxsb2Nfc29ydCkpCisJCXNldHVwX3NvcnRpbmcoJmFsbG9jX3NvcnQsIGRlZmF1bHRfc29ydF9vcmRlcik7CisKKwlzZXR1cF9jcHVub2RlX21hcCgpOworCisJcmV0dXJuIF9fY21kX2ttZW0oKTsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThlMTFiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXByb2JlLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBidWlsdGluLXByb2JlLmMKKyAqCisgKiBCdWlsdGluIHByb2JlIGNvbW1hbmQ6IFNldCB1cCBwcm9iZSBldmVudHMgYnkgQyBleHByZXNzaW9uCisgKgorICogV3JpdHRlbiBieSBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjdW5kZWYgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInV0aWwvdXRpbC5oIgorI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIJLyogRm9yIGRlYnVnZnNfcGF0aCAqLworI2luY2x1ZGUgInV0aWwvcHJvYmUtZmluZGVyLmgiCisjaW5jbHVkZSAidXRpbC9wcm9iZS1ldmVudC5oIgorCisvKiBEZWZhdWx0IHZtbGludXggc2VhcmNoIHBhdGhzICovCisjZGVmaW5lIE5SX1NFQVJDSF9QQVRIIDMKK2NvbnN0IGNoYXIgKmRlZmF1bHRfc2VhcmNoX3BhdGhbTlJfU0VBUkNIX1BBVEhdID0geworIi9saWIvbW9kdWxlcy8lcy9idWlsZC92bWxpbnV4IiwJCS8qIEN1c3RvbSBidWlsZCBrZXJuZWwgKi8KKyIvdXNyL2xpYi9kZWJ1Zy9saWIvbW9kdWxlcy8lcy92bWxpbnV4IiwJLyogUmVkIEhhdCBkZWJ1Z2luZm8gKi8KKyIvYm9vdC92bWxpbnV4LWRlYnVnLSVzIiwJCQkvKiBVYnVudHUgKi8KK307CisKKyNkZWZpbmUgTUFYX1BBVEhfTEVOIDI1NgorI2RlZmluZSBNQVhfUFJPQkVTIDEyOAorCisvKiBTZXNzaW9uIG1hbmFnZW1lbnQgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHsKKwljaGFyICp2bWxpbnV4OworCWNoYXIgKnJlbGVhc2U7CisJaW50IG5lZWRfZHdhcmY7CisJaW50IG5yX3Byb2JlOworCXN0cnVjdCBwcm9iZV9wb2ludCBwcm9iZXNbTUFYX1BST0JFU107Cit9IHNlc3Npb247CisKK3N0YXRpYyBib29sIGxpc3Rpbmc7CisKKy8qIFBhcnNlIGFuIGV2ZW50IGRlZmluaXRpb24uIE5vdGUgdGhhdCBhbnkgZXJyb3IgbXVzdCBkaWUuICovCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIpCit7CisJc3RydWN0IHByb2JlX3BvaW50ICpwcCA9ICZzZXNzaW9uLnByb2Jlc1tzZXNzaW9uLm5yX3Byb2JlXTsKKworCXByX2RlYnVnKCJwcm9iZS1kZWZpbml0aW9uKCVkKTogJXNcbiIsIHNlc3Npb24ubnJfcHJvYmUsIHN0cik7CisJaWYgKCsrc2Vzc2lvbi5ucl9wcm9iZSA9PSBNQVhfUFJPQkVTKQorCQlkaWUoIlRvbyBtYW55IHByb2JlcyAoPiAlZCkgYXJlIHNwZWNpZmllZC4iLCBNQVhfUFJPQkVTKTsKKworCS8qIFBhcnNlIHBlcmYtcHJvYmUgZXZlbnQgaW50byBwcm9iZV9wb2ludCAqLworCXNlc3Npb24ubmVlZF9kd2FyZiA9IHBhcnNlX3BlcmZfcHJvYmVfZXZlbnQoc3RyLCBwcCk7CisKKwlwcl9kZWJ1ZygiJWQgYXJndW1lbnRzXG4iLCBwcC0+bnJfYXJncyk7Cit9CisKK3N0YXRpYyBpbnQgb3B0X2FkZF9wcm9iZV9ldmVudChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWlmIChzdHIpCisJCXBhcnNlX3Byb2JlX2V2ZW50KHN0cik7CisJcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTk9fTElCRFdBUkYKK3N0YXRpYyBpbnQgb3Blbl9kZWZhdWx0X3ZtbGludXgodm9pZCkKK3sKKwlzdHJ1Y3QgdXRzbmFtZSB1dHM7CisJY2hhciBmbmFtZVtNQVhfUEFUSF9MRU5dOworCWludCBmZCwgcmV0LCBpOworCisJcmV0ID0gdW5hbWUoJnV0cyk7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygidW5hbWUoKSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisJc2Vzc2lvbi5yZWxlYXNlID0gdXRzLnJlbGVhc2U7CisJZm9yIChpID0gMDsgaSA8IE5SX1NFQVJDSF9QQVRIOyBpKyspIHsKKwkJcmV0ID0gc25wcmludGYoZm5hbWUsIE1BWF9QQVRIX0xFTiwKKwkJCSAgICAgICBkZWZhdWx0X3NlYXJjaF9wYXRoW2ldLCBzZXNzaW9uLnJlbGVhc2UpOworCQlpZiAocmV0ID49IE1BWF9QQVRIX0xFTiB8fCByZXQgPCAwKSB7CisJCQlwcl9kZWJ1ZygiRmlsZW5hbWUoJWQsJXMpIGlzIHRvbyBsb25nLlxuIiwgaSwKKwkJCQl1dHMucmVsZWFzZSk7CisJCQllcnJubyA9IEUyQklHOworCQkJcmV0dXJuIC1FMkJJRzsKKwkJfQorCQlwcl9kZWJ1ZygidHJ5IHRvIG9wZW4gJXNcbiIsIGZuYW1lKTsKKwkJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJCWlmIChmZCA+PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBmZDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByb2JlX3VzYWdlW10gPSB7CisJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gJ1BST0JFREVGJyBbJ1BST0JFREVGJyAuLi5dIiwKKwkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWFkZCAnUFJPQkVERUYnIFstLWFkZCAnUFJPQkVERUYnIC4uLl0iLAorCSJwZXJmIHByb2JlIC0tbGlzdCIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgcGFyc2VkIGFyZ3VtZW50cywgZXRjKSIpLAorI2lmbmRlZiBOT19MSUJEV0FSRgorCU9QVF9TVFJJTkcoJ2snLCAidm1saW51eCIsICZzZXNzaW9uLnZtbGludXgsICJmaWxlIiwKKwkJInZtbGludXgvbW9kdWxlIHBhdGhuYW1lIiksCisjZW5kaWYKKwlPUFRfQk9PTEVBTignbCcsICJsaXN0IiwgJmxpc3RpbmcsICJsaXN0IHVwIGN1cnJlbnQgcHJvYmVzIiksCisJT1BUX0NBTExCQUNLKCdhJywgImFkZCIsIE5VTEwsCisjaWZkZWYgTk9fTElCRFdBUkYKKwkJIkZVTkNbK09GRlN8JXJldHVybl0gW0FSRyAuLi5dIiwKKyNlbHNlCisJCSJGVU5DWytPRkZTfCVyZXR1cm58OlJMTl1bQFNSQ118U1JDOkFMTiBbQVJHIC4uLl0iLAorI2VuZGlmCisJCSJwcm9iZSBwb2ludCBkZWZpbml0aW9uLCB3aGVyZVxuIgorCQkiXHRcdEdSUDpcdEdyb3VwIG5hbWUgKG9wdGlvbmFsKVxuIgorCQkiXHRcdE5BTUU6XHRFdmVudCBuYW1lXG4iCisJCSJcdFx0RlVOQzpcdEZ1bmN0aW9uIG5hbWVcbiIKKwkJIlx0XHRPRkZTOlx0T2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgKGluIGJ5dGUpXG4iCisJCSJcdFx0JXJldHVybjpcdFB1dCB0aGUgcHJvYmUgYXQgZnVuY3Rpb24gcmV0dXJuXG4iCisjaWZkZWYgTk9fTElCRFdBUkYKKwkJIlx0XHRBUkc6XHRQcm9iZSBhcmd1bWVudCAob25seSBcbiIKKyNlbHNlCisJCSJcdFx0U1JDOlx0U291cmNlIGNvZGUgcGF0aFxuIgorCQkiXHRcdFJMTjpcdFJlbGF0aXZlIGxpbmUgbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkuXG4iCisJCSJcdFx0QUxOOlx0QWJzb2x1dGUgbGluZSBudW1iZXIgaW4gZmlsZS5cbiIKKwkJIlx0XHRBUkc6XHRQcm9iZSBhcmd1bWVudCAobG9jYWwgdmFyaWFibGUgbmFtZSBvclxuIgorI2VuZGlmCisJCSJcdFx0XHRrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdC4pXG4iLAorCQlvcHRfYWRkX3Byb2JlX2V2ZW50KSwKKwlPUFRfRU5EKCkKK307CisKK2ludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCWludCBpLCBqLCByZXQ7CisjaWZuZGVmIE5PX0xJQkRXQVJGCisJaW50IGZkOworI2VuZGlmCisJc3RydWN0IHByb2JlX3BvaW50ICpwcDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHByb2JlX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlwYXJzZV9wcm9iZV9ldmVudChhcmd2W2ldKTsKKworCWlmICgoc2Vzc2lvbi5ucl9wcm9iZSA9PSAwICYmICFsaXN0aW5nKSB8fAorCSAgICAoc2Vzc2lvbi5ucl9wcm9iZSAhPSAwICYmIGxpc3RpbmcpKQorCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGxpc3RpbmcpIHsKKwkJc2hvd19wZXJmX3Byb2JlX2V2ZW50cygpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKQorI2lmZGVmIE5PX0xJQkRXQVJGCisJCWRpZSgiRGVidWdpbmZvLWFuYWx5c2lzIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbHNlCS8qICFOT19MSUJEV0FSRiAqLworCQlwcl9kZWJ1ZygiU29tZSBwcm9iZXMgcmVxdWlyZSBkZWJ1Z2luZm8uXG4iKTsKKworCWlmIChzZXNzaW9uLnZtbGludXgpCisJCWZkID0gb3BlbihzZXNzaW9uLnZtbGludXgsIE9fUkRPTkxZKTsKKwllbHNlCisJCWZkID0gb3Blbl9kZWZhdWx0X3ZtbGludXgoKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCisJCQlkaWUoIkNvdWxkIG5vdCBvcGVuIHZtbGludXgvbW9kdWxlIGZpbGUuIik7CisKKwkJcHJfd2FybmluZygiQ291bGQgbm90IG9wZW4gdm1saW51eC9tb2R1bGUgZmlsZS4iCisJCQkgICAiIFRyeSB0byB1c2Ugc3ltYm9scy5cbiIpOworCQlnb3RvIGVuZF9kd2FyZjsKKwl9CisKKwkvKiBTZWFyY2hpbmcgcHJvYmUgcG9pbnRzICovCisJZm9yIChqID0gMDsgaiA8IHNlc3Npb24ubnJfcHJvYmU7IGorKykgeworCQlwcCA9ICZzZXNzaW9uLnByb2Jlc1tqXTsKKwkJaWYgKHBwLT5mb3VuZCkKKwkJCWNvbnRpbnVlOworCisJCWxzZWVrKGZkLCBTRUVLX1NFVCwgMCk7CisJCXJldCA9IGZpbmRfcHJvYmVwb2ludChmZCwgcHApOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHNlc3Npb24ubmVlZF9kd2FyZikKKwkJCQlkaWUoIkNvdWxkIG5vdCBhbmFseXplIGRlYnVnaW5mby4iKTsKKworCQkJcHJfd2FybmluZygiQW4gZXJyb3Igb2NjdXJyZWQgaW4gZGVidWdpbmZvIGFuYWx5c2lzLiBUcnkgdG8gdXNlIHN5bWJvbHMuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gMCkJLyogTm8gZXJyb3IgYnV0IGZhaWxlZCB0byBmaW5kIHByb2JlIHBvaW50LiAqLworCQkJZGllKCJObyBwcm9iZSBwb2ludCBmb3VuZC4iKTsKKwl9CisJY2xvc2UoZmQpOworCitlbmRfZHdhcmY6CisjZW5kaWYgLyogIU5PX0xJQkRXQVJGICovCisKKwkvKiBTeW50aGVzaXplIHByb2JlcyB3aXRob3V0IGR3YXJmICovCisJZm9yIChqID0gMDsgaiA8IHNlc3Npb24ubnJfcHJvYmU7IGorKykgeworCQlwcCA9ICZzZXNzaW9uLnByb2Jlc1tqXTsKKwkJaWYgKHBwLT5mb3VuZCkJLyogVGhpcyBwcm9iZSBpcyBhbHJlYWR5IGZvdW5kLiAqLworCQkJY29udGludWU7CisKKwkJcmV0ID0gc3ludGhlc2l6ZV90cmFjZV9rcHJvYmVfZXZlbnQocHApOworCQlpZiAocmV0ID09IC1FMkJJRykKKwkJCWRpZSgicHJvYmUgcG9pbnQgZGVmaW5pdGlvbiBiZWNvbWVzIHRvbyBsb25nLiIpOworCQllbHNlIGlmIChyZXQgPCAwKQorCQkJZGllKCJGYWlsZWQgdG8gc3ludGhlc2l6ZSBhIHByb2JlIHBvaW50LiIpOworCX0KKworCS8qIFNldHRuZyB1cCBwcm9iZSBwb2ludHMgKi8KKwlhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzZXNzaW9uLnByb2Jlcywgc2Vzc2lvbi5ucl9wcm9iZSk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCAzZWVlZjMzLi4wZTUxOWM2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC0xNyw1NSArMTcsNTIgQEAKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCi0jaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgogCi0jZGVmaW5lIEFMSUdOKHgsIGEpCQlfX0FMSUdOX01BU0soeCwgKHR5cGVvZih4KSkoYSktMSkKLSNkZWZpbmUgX19BTElHTl9NQVNLKHgsIG1hc2spCSgoKHgpKyhtYXNrKSkmfihtYXNrKSkKLQogc3RhdGljIGludAkJCWZkW01BWF9OUl9DUFVTXVtNQVhfQ09VTlRFUlNdOwogCi1zdGF0aWMgbG9uZwkJCWRlZmF1bHRfaW50ZXJ2YWwJCT0gMTAwMDAwOworc3RhdGljIGxvbmcJCQlkZWZhdWx0X2ludGVydmFsCQk9ICAgICAgMDsKIAotc3RhdGljIGludAkJCW5yX2NwdXMJCQkJPSAwOworc3RhdGljIGludAkJCW5yX2NwdXMJCQkJPSAgICAgIDA7CiBzdGF0aWMgdW5zaWduZWQgaW50CQlwYWdlX3NpemU7Ci1zdGF0aWMgdW5zaWduZWQgaW50CQltbWFwX3BhZ2VzCQkJPSAxMjg7Ci1zdGF0aWMgaW50CQkJZnJlcQkJCQk9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50CQltbWFwX3BhZ2VzCQkJPSAgICAxMjg7CitzdGF0aWMgaW50CQkJZnJlcQkJCQk9ICAgMTAwMDsKIHN0YXRpYyBpbnQJCQlvdXRwdXQ7CiBzdGF0aWMgY29uc3QgY2hhcgkJKm91dHB1dF9uYW1lCQkJPSAicGVyZi5kYXRhIjsKLXN0YXRpYyBpbnQJCQlncm91cAkJCQk9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50CQlyZWFsdGltZV9wcmlvCQkJPSAwOwotc3RhdGljIGludAkJCXJhd19zYW1wbGVzCQkJPSAwOwotc3RhdGljIGludAkJCXN5c3RlbV93aWRlCQkJPSAwOwotc3RhdGljIGludAkJCXByb2ZpbGVfY3B1CQkJPSAtMTsKLXN0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOwotc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKLXN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gMTsKLXN0YXRpYyBpbnQJCQlmb3JjZQkJCQk9IDA7Ci1zdGF0aWMgaW50CQkJYXBwZW5kX2ZpbGUJCQk9IDA7Ci1zdGF0aWMgaW50CQkJY2FsbF9ncmFwaAkJCT0gMDsKLXN0YXRpYyBpbnQJCQlpbmhlcml0X3N0YXQJCQk9IDA7Ci1zdGF0aWMgaW50CQkJbm9fc2FtcGxlcwkJCT0gMDsKLXN0YXRpYyBpbnQJCQlzYW1wbGVfYWRkcmVzcwkJCT0gMDsKLXN0YXRpYyBpbnQJCQltdWx0aXBsZXgJCQk9IDA7Ci1zdGF0aWMgaW50CQkJbXVsdGlwbGV4X2ZkCQkJPSAtMTsKK3N0YXRpYyBpbnQJCQlncm91cAkJCQk9ICAgICAgMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJCXJlYWx0aW1lX3ByaW8JCQk9ICAgICAgMDsKK3N0YXRpYyBpbnQJCQlyYXdfc2FtcGxlcwkJCT0gICAgICAwOworc3RhdGljIGludAkJCXN5c3RlbV93aWRlCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJcHJvZmlsZV9jcHUJCQk9ICAgICAtMTsKK3N0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9ICAgICAtMTsKK3N0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gICAgIC0xOworc3RhdGljIGludAkJCWluaGVyaXQJCQkJPSAgICAgIDE7CitzdGF0aWMgaW50CQkJZm9yY2UJCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJYXBwZW5kX2ZpbGUJCQk9ICAgICAgMDsKK3N0YXRpYyBpbnQJCQljYWxsX2dyYXBoCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJaW5oZXJpdF9zdGF0CQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJbm9fc2FtcGxlcwkJCT0gICAgICAwOworc3RhdGljIGludAkJCXNhbXBsZV9hZGRyZXNzCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJbXVsdGlwbGV4CQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJbXVsdGlwbGV4X2ZkCQkJPSAgICAgLTE7CiAKLXN0YXRpYyBsb25nCQkJc2FtcGxlczsKK3N0YXRpYyBsb25nCQkJc2FtcGxlcwkJCQk9ICAgICAgMDsKIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbAkJbGFzdF9yZWFkOwogc3RhdGljIHN0cnVjdCB0aW1ldmFsCQl0aGlzX3JlYWQ7CiAKLXN0YXRpYyB1NjQJCQlieXRlc193cml0dGVuOworc3RhdGljIHU2NAkJCWJ5dGVzX3dyaXR0ZW4JCQk9ICAgICAgMDsKIAogc3RhdGljIHN0cnVjdCBwb2xsZmQJCWV2ZW50X2FycmF5W01BWF9OUl9DUFVTICogTUFYX0NPVU5URVJTXTsKIAotc3RhdGljIGludAkJCW5yX3BvbGw7Ci1zdGF0aWMgaW50CQkJbnJfY3B1Oworc3RhdGljIGludAkJCW5yX3BvbGwJCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJbnJfY3B1CQkJCT0gICAgICAwOwogCi1zdGF0aWMgaW50CQkJZmlsZV9uZXcgPSAxOworc3RhdGljIGludAkJCWZpbGVfbmV3CQkJPSAgICAgIDE7CiAKLXN0cnVjdCBwZXJmX2hlYWRlcgkJKmhlYWRlcjsKK3N0cnVjdCBwZXJmX2hlYWRlcgkJKmhlYWRlcgkJCQk9ICAgTlVMTDsKIAogc3RydWN0IG1tYXBfZGF0YSB7CiAJaW50CQkJY291bnRlcjsKQEAgLTExMyw2ICsxMTAsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHdyaXRlX2V2ZW50KGV2ZW50X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJLyoKKwkqIEFkZCBpdCB0byB0aGUgbGlzdCBvZiBEU09zLCBzbyB0aGF0IHdoZW4gd2UgZmluaXNoIHRoaXMKKwkgKiByZWNvcmQgc2Vzc2lvbiB3ZSBjYW4gcGljayB0aGUgYXZhaWxhYmxlIGJ1aWxkLWlkcy4KKwkgKi8KKwlpZiAoYnVmLT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9NTUFQKQorCQlkc29zX19maW5kbmV3KGJ1Zi0+bW1hcC5maWxlbmFtZSk7CisKKwl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQoreworCXdyaXRlX2V2ZW50KGV2ZW50LCBldmVudC0+aGVhZGVyLnNpemUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtbWFwX3JlYWQoc3RydWN0IG1tYXBfZGF0YSAqbWQpCiB7CiAJdW5zaWduZWQgaW50IGhlYWQgPSBtbWFwX3JlYWRfaGVhZChtZCk7CkBAIC0xNjEsMTQgKzE3NiwxNCBAQAogCQlzaXplID0gbWQtPm1hc2sgKyAxIC0gKG9sZCAmIG1kLT5tYXNrKTsKIAkJb2xkICs9IHNpemU7CiAKLQkJd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CisJCXdyaXRlX2V2ZW50KGJ1Ziwgc2l6ZSk7CiAJfQogCiAJYnVmID0gJmRhdGFbb2xkICYgbWQtPm1hc2tdOwogCXNpemUgPSBoZWFkIC0gb2xkOwogCW9sZCArPSBzaXplOwogCi0Jd3JpdGVfb3V0cHV0KGJ1Ziwgc2l6ZSk7CisJd3JpdGVfZXZlbnQoYnVmLCBzaXplKTsKIAogCW1kLT5wcmV2ID0gb2xkOwogCW1tYXBfd3JpdGVfdGFpbChtZCwgb2xkKTsKQEAgLTE5NSwxNjggKzIxMCw2IEBACiAJa2lsbChnZXRwaWQoKSwgc2lnbnIpOwogfQogCi1zdGF0aWMgcGlkX3QgcGlkX3N5bnRoZXNpemVfY29tbV9ldmVudChwaWRfdCBwaWQsIGludCBmdWxsKQotewotCXN0cnVjdCBjb21tX2V2ZW50IGNvbW1fZXY7Ci0JY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0JY2hhciBiZltCVUZTSVpdOwotCUZJTEUgKmZwOwotCXNpemVfdCBzaXplID0gMDsKLQlESVIgKnRhc2tzOwotCXN0cnVjdCBkaXJlbnQgZGlyZW50LCAqbmV4dDsKLQlwaWRfdCB0Z2lkID0gMDsKLQotCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiL3Byb2MvJWQvc3RhdHVzIiwgcGlkKTsKLQotCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0JaWYgKGZwID09IE5VTEwpIHsKLQkJLyoKLQkJICogV2UgcmFjZWQgd2l0aCBhIHRhc2sgZXhpdGluZyAtIGp1c3QgcmV0dXJuOgotCQkgKi8KLQkJaWYgKHZlcmJvc2UpCi0JCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtc2V0KCZjb21tX2V2LCAwLCBzaXplb2YoY29tbV9ldikpOwotCXdoaWxlICghY29tbV9ldi5jb21tWzBdIHx8ICFjb21tX2V2LnBpZCkgewotCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKQotCQkJZ290byBvdXRfZmFpbHVyZTsKLQotCQlpZiAobWVtY21wKGJmLCAiTmFtZToiLCA1KSA9PSAwKSB7Ci0JCQljaGFyICpuYW1lID0gYmYgKyA1OwotCQkJd2hpbGUgKCpuYW1lICYmIGlzc3BhY2UoKm5hbWUpKQotCQkJCSsrbmFtZTsKLQkJCXNpemUgPSBzdHJsZW4obmFtZSkgLSAxOwotCQkJbWVtY3B5KGNvbW1fZXYuY29tbSwgbmFtZSwgc2l6ZSsrKTsKLQkJfSBlbHNlIGlmIChtZW1jbXAoYmYsICJUZ2lkOiIsIDUpID09IDApIHsKLQkJCWNoYXIgKnRnaWRzID0gYmYgKyA1OwotCQkJd2hpbGUgKCp0Z2lkcyAmJiBpc3NwYWNlKCp0Z2lkcykpCi0JCQkJKyt0Z2lkczsKLQkJCXRnaWQgPSBjb21tX2V2LnBpZCA9IGF0b2kodGdpZHMpOwotCQl9Ci0JfQotCi0JY29tbV9ldi5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX0NPTU07Ci0Jc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih1NjQpKTsKLQljb21tX2V2LmhlYWRlci5zaXplID0gc2l6ZW9mKGNvbW1fZXYpIC0gKHNpemVvZihjb21tX2V2LmNvbW0pIC0gc2l6ZSk7Ci0KLQlpZiAoIWZ1bGwpIHsKLQkJY29tbV9ldi50aWQgPSBwaWQ7Ci0KLQkJd3JpdGVfb3V0cHV0KCZjb21tX2V2LCBjb21tX2V2LmhlYWRlci5zaXplKTsKLQkJZ290byBvdXRfZmNsb3NlOwotCX0KLQotCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiL3Byb2MvJWQvdGFzayIsIHBpZCk7Ci0KLQl0YXNrcyA9IG9wZW5kaXIoZmlsZW5hbWUpOwotCXdoaWxlICghcmVhZGRpcl9yKHRhc2tzLCAmZGlyZW50LCAmbmV4dCkgJiYgbmV4dCkgewotCQljaGFyICplbmQ7Ci0JCXBpZCA9IHN0cnRvbChkaXJlbnQuZF9uYW1lLCAmZW5kLCAxMCk7Ci0JCWlmICgqZW5kKQotCQkJY29udGludWU7Ci0KLQkJY29tbV9ldi50aWQgPSBwaWQ7Ci0KLQkJd3JpdGVfb3V0cHV0KCZjb21tX2V2LCBjb21tX2V2LmhlYWRlci5zaXplKTsKLQl9Ci0JY2xvc2VkaXIodGFza3MpOwotCi1vdXRfZmNsb3NlOgotCWZjbG9zZShmcCk7Ci0JcmV0dXJuIHRnaWQ7Ci0KLW91dF9mYWlsdXJlOgotCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3QgZ2V0IENPTU0gYW5kIHBnaWQsIG1hbGZvcm1lZCAlc1xuIiwKLQkJZmlsZW5hbWUpOwotCWV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotc3RhdGljIHZvaWQgcGlkX3N5bnRoZXNpemVfbW1hcF9zYW1wbGVzKHBpZF90IHBpZCwgcGlkX3QgdGdpZCkKLXsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQlGSUxFICpmcDsKLQotCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiL3Byb2MvJWQvbWFwcyIsIHBpZCk7Ci0KLQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotCWlmIChmcCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFdlIHJhY2VkIHdpdGggYSB0YXNrIGV4aXRpbmcgLSBqdXN0IHJldHVybjoKLQkJICovCi0JCWlmICh2ZXJib3NlKQotCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jd2hpbGUgKDEpIHsKLQkJY2hhciBiZltCVUZTSVpdLCAqcGJmID0gYmY7Ci0JCXN0cnVjdCBtbWFwX2V2ZW50IG1tYXBfZXYgPSB7Ci0JCQkuaGVhZGVyID0geyAudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAgfSwKLQkJfTsKLQkJaW50IG47Ci0JCXNpemVfdCBzaXplOwotCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJLyogMDA0MDAwMDAtMDA0MGMwMDAgci14cCAwMDAwMDAwMCBmZDowMSA0MTAzOCAgL2Jpbi9jYXQgKi8KLQkJbiA9IGhleDJ1NjQocGJmLCAmbW1hcF9ldi5zdGFydCk7Ci0JCWlmIChuIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlwYmYgKz0gbiArIDE7Ci0JCW4gPSBoZXgydTY0KHBiZiwgJm1tYXBfZXYubGVuKTsKLQkJaWYgKG4gPCAwKQotCQkJY29udGludWU7Ci0JCXBiZiArPSBuICsgMzsKLQkJaWYgKCpwYmYgPT0gJ3gnKSB7IC8qIHZtX2V4ZWMgKi8KLQkJCWNoYXIgKmV4ZWNuYW1lID0gc3RyY2hyKGJmLCAnLycpOwotCi0JCQkvKiBDYXRjaCBWRFNPICovCi0JCQlpZiAoZXhlY25hbWUgPT0gTlVMTCkKLQkJCQlleGVjbmFtZSA9IHN0cnN0cihiZiwgIlt2ZHNvXSIpOwotCi0JCQlpZiAoZXhlY25hbWUgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQotCQkJc2l6ZSA9IHN0cmxlbihleGVjbmFtZSk7Ci0JCQlleGVjbmFtZVtzaXplIC0gMV0gPSAnXDAnOyAvKiBSZW1vdmUgXG4gKi8KLQkJCW1lbWNweShtbWFwX2V2LmZpbGVuYW1lLCBleGVjbmFtZSwgc2l6ZSk7Ci0JCQlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOwotCQkJbW1hcF9ldi5sZW4gLT0gbW1hcF9ldi5zdGFydDsKLQkJCW1tYXBfZXYuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKG1tYXBfZXYpIC0KLQkJCQkJICAgICAgIChzaXplb2YobW1hcF9ldi5maWxlbmFtZSkgLSBzaXplKSk7Ci0JCQltbWFwX2V2LnBpZCA9IHRnaWQ7Ci0JCQltbWFwX2V2LnRpZCA9IHBpZDsKLQotCQkJd3JpdGVfb3V0cHV0KCZtbWFwX2V2LCBtbWFwX2V2LmhlYWRlci5zaXplKTsKLQkJfQotCX0KLQotCWZjbG9zZShmcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bnRoZXNpemVfYWxsKHZvaWQpCi17Ci0JRElSICpwcm9jOwotCXN0cnVjdCBkaXJlbnQgZGlyZW50LCAqbmV4dDsKLQotCXByb2MgPSBvcGVuZGlyKCIvcHJvYyIpOwotCi0Jd2hpbGUgKCFyZWFkZGlyX3IocHJvYywgJmRpcmVudCwgJm5leHQpICYmIG5leHQpIHsKLQkJY2hhciAqZW5kOwotCQlwaWRfdCBwaWQsIHRnaWQ7Ci0KLQkJcGlkID0gc3RydG9sKGRpcmVudC5kX25hbWUsICZlbmQsIDEwKTsKLQkJaWYgKCplbmQpIC8qIG9ubHkgaW50ZXJlc3RlZCBpbiBwcm9wZXIgbnVtZXJpY2FsIGRpcmVudHMgKi8KLQkJCWNvbnRpbnVlOwotCi0JCXRnaWQgPSBwaWRfc3ludGhlc2l6ZV9jb21tX2V2ZW50KHBpZCwgMSk7Ci0JCXBpZF9zeW50aGVzaXplX21tYXBfc2FtcGxlcyhwaWQsIHRnaWQpOwotCX0KLQotCWNsb3NlZGlyKHByb2MpOwotfQotCiBzdGF0aWMgaW50IGdyb3VwX2ZkOwogCiBzdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmdldF9oZWFkZXJfYXR0cihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphLCBpbnQgbnIpCkBAIC0zNjcsNyArMjIwLDExIEBACiAJCWhfYXR0ciA9IGhlYWRlci0+YXR0cltucl07CiAJfSBlbHNlIHsKIAkJaF9hdHRyID0gcGVyZl9oZWFkZXJfYXR0cl9fbmV3KGEpOwotCQlwZXJmX2hlYWRlcl9fYWRkX2F0dHIoaGVhZGVyLCBoX2F0dHIpOworCQlpZiAoaF9hdHRyICE9IE5VTEwpCisJCQlpZiAocGVyZl9oZWFkZXJfX2FkZF9hdHRyKGhlYWRlciwgaF9hdHRyKSA8IDApIHsKKwkJCQlwZXJmX2hlYWRlcl9hdHRyX19kZWxldGUoaF9hdHRyKTsKKwkJCQloX2F0dHIgPSBOVUxMOworCQkJfQogCX0KIAogCXJldHVybiBoX2F0dHI7CkBAIC0zNzUsOSArMjMyLDExIEBACiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9jb3VudGVyKGludCBjb3VudGVyLCBpbnQgY3B1LCBwaWRfdCBwaWQpCiB7CisJY2hhciAqZmlsdGVyID0gZmlsdGVyc1tjb3VudGVyXTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gYXR0cnMgKyBjb3VudGVyOwogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpoX2F0dHI7CiAJaW50IHRyYWNrID0gIWNvdW50ZXI7IC8qIG9ubHkgdGhlIGZpcnN0IGNvdW50ZXIgbmVlZHMgdGhlc2UgKi8KKwlpbnQgcmV0OwogCXN0cnVjdCB7CiAJCXU2NCBjb3VudDsKIAkJdTY0IHRpbWVfZW5hYmxlZDsKQEAgLTQyNiw3ICsyODUsNyBAQAogCWlmIChmZFtucl9jcHVdW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CiAKLQkJaWYgKGVyciA9PSBFUEVSTSkKKwkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKQogCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIik7CiAJCWVsc2UgaWYgKGVyciA9PSAgRU5PREVWICYmIHByb2ZpbGVfY3B1ICE9IC0xKQogCQkJZGllKCJObyBzdWNoIGRldmljZSAtIGRpZCB5b3Ugc3BlY2lmeSBhbiBvdXQtb2YtcmFuZ2UgcHJvZmlsZSBDUFU/XG4iKTsKQEAgLTQ0OCwxMSArMzA3LDE5IEBACiAJCXByaW50ZigiXG4iKTsKIAkJZXJyb3IoInBlcmZjb3VudGVyIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAoJXMpXG4iLAogCQkJZmRbbnJfY3B1XVtjb3VudGVyXSwgc3RyZXJyb3IoZXJyKSk7CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisJCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IQVJEV0FSRSAmJiBlcnIgPT0gRU9QTk9UU1VQUCkKKwkJCWRpZSgiTm8gaGFyZHdhcmUgc2FtcGxpbmcgaW50ZXJydXB0IGF2YWlsYWJsZS4gTm8gQVBJQz8gSWYgc28gdGhlbiB5b3UgY2FuIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBcImxhcGljXCIgYm9vdCBwYXJhbWV0ZXIgdG8gZm9yY2UtZW5hYmxlIGl0LlxuIik7CisjZW5kaWYKKwogCQlkaWUoIk5vIENPTkZJR19QRVJGX0VWRU5UUz15IGtlcm5lbCBzdXBwb3J0IGNvbmZpZ3VyZWQ/XG4iKTsKIAkJZXhpdCgtMSk7CiAJfQogCiAJaF9hdHRyID0gZ2V0X2hlYWRlcl9hdHRyKGF0dHIsIGNvdW50ZXIpOworCWlmIChoX2F0dHIgPT0gTlVMTCkKKwkJZGllKCJub21lbVxuIik7CiAKIAlpZiAoIWZpbGVfbmV3KSB7CiAJCWlmIChtZW1jbXAoJmhfYXR0ci0+YXR0ciwgYXR0ciwgc2l6ZW9mKCphdHRyKSkpIHsKQEAgLTQ2Niw3ICszMzMsMTAgQEAKIAkJZXhpdCgtMSk7CiAJfQogCi0JcGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKGhfYXR0ciwgcmVhZF9kYXRhLmlkKTsKKwlpZiAocGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKGhfYXR0ciwgcmVhZF9kYXRhLmlkKSA8IDApIHsKKwkJcHJfd2FybmluZygiTm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGlkXG4iKTsKKwkJZXhpdCgtMSk7CisJfQogCiAJYXNzZXJ0KGZkW25yX2NwdV1bY291bnRlcl0gPj0gMCk7CiAJZmNudGwoZmRbbnJfY3B1XVtjb3VudGVyXSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CkBAIC00ODAsNyArMzUwLDYgQEAKIAkJbXVsdGlwbGV4X2ZkID0gZmRbbnJfY3B1XVtjb3VudGVyXTsKIAogCWlmIChtdWx0aXBsZXggJiYgZmRbbnJfY3B1XVtjb3VudGVyXSAhPSBtdWx0aXBsZXhfZmQpIHsKLQkJaW50IHJldDsKIAogCQlyZXQgPSBpb2N0bChmZFtucl9jcHVdW2NvdW50ZXJdLCBQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVULCBtdWx0aXBsZXhfZmQpOwogCQlhc3NlcnQocmV0ICE9IC0xKTsKQEAgLTUwMCw2ICszNjksMTYgQEAKIAkJfQogCX0KIAorCWlmIChmaWx0ZXIgIT0gTlVMTCkgeworCQlyZXQgPSBpb2N0bChmZFtucl9jcHVdW2NvdW50ZXJdLAorCQkJICAgIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVIsIGZpbHRlcik7CisJCWlmIChyZXQpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gc2V0IGZpbHRlciB3aXRoICVkICglcylcbiIsIGVycm5vLAorCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoLTEpOworCQl9CisJfQorCiAJaW9jdGwoZmRbbnJfY3B1XVtjb3VudGVyXSwgUEVSRl9FVkVOVF9JT0NfRU5BQkxFKTsKIH0KIApAQCAtNTE4LDcgKzM5Nyw3IEBACiB7CiAJaGVhZGVyLT5kYXRhX3NpemUgKz0gYnl0ZXNfd3JpdHRlbjsKIAotCXBlcmZfaGVhZGVyX193cml0ZShoZWFkZXIsIG91dHB1dCk7CisJcGVyZl9oZWFkZXJfX3dyaXRlKGhlYWRlciwgb3V0cHV0LCB0cnVlKTsKIH0KIAogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQpAQCAtNTI3LDcgKzQwNiw3IEBACiAJc3RydWN0IHN0YXQgc3Q7CiAJcGlkX3QgcGlkID0gMDsKIAlpbnQgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgd2FraW5nID0gMDsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CkBAIC01NjEsMjIgKzQ0MCwyOSBAQAogCQlleGl0KC0xKTsKIAl9CiAKLQlpZiAoIWZpbGVfbmV3KQotCQloZWFkZXIgPSBwZXJmX2hlYWRlcl9fcmVhZChvdXRwdXQpOwotCWVsc2UKLQkJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKKwlpZiAoaGVhZGVyID09IE5VTEwpIHsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgcmVhZGluZyBwZXJmIGZpbGUgaGVhZGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAorCWlmICghZmlsZV9uZXcpIHsKKwkJZXJyID0gcGVyZl9oZWFkZXJfX3JlYWQoaGVhZGVyLCBvdXRwdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKHJhd19zYW1wbGVzKSB7Ci0JCXJlYWRfdHJhY2luZ19kYXRhKGF0dHJzLCBucl9jb3VudGVycyk7CisJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChoZWFkZXIsIEhFQURFUl9UUkFDRV9JTkZPKTsKIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgbnJfY291bnRlcnM7IGkrKykgewogCQkJaWYgKGF0dHJzW2ldLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7Ci0JCQkJcmVhZF90cmFjaW5nX2RhdGEoYXR0cnMsIG5yX2NvdW50ZXJzKTsKKwkJCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoaGVhZGVyLCBIRUFERVJfVFJBQ0VfSU5GTyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CisKIAlhdGV4aXQoYXRleGl0X2hlYWRlcik7CiAKIAlpZiAoIXN5c3RlbV93aWRlKSB7CkBAIC01OTQsMjUgKzQ4MCwzNiBAQAogCQl9CiAJfQogCi0JaWYgKGZpbGVfbmV3KQotCQlwZXJmX2hlYWRlcl9fd3JpdGUoaGVhZGVyLCBvdXRwdXQpOworCWlmIChmaWxlX25ldykgeworCQllcnIgPSBwZXJmX2hlYWRlcl9fd3JpdGUoaGVhZGVyLCBvdXRwdXQsIGZhbHNlKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAotCWlmICghc3lzdGVtX3dpZGUpIHsKLQkJcGlkX3QgdGdpZCA9IHBpZF9zeW50aGVzaXplX2NvbW1fZXZlbnQocGlkLCAwKTsKLQkJcGlkX3N5bnRoZXNpemVfbW1hcF9zYW1wbGVzKHBpZCwgdGdpZCk7Ci0JfSBlbHNlCi0JCXN5bnRoZXNpemVfYWxsKCk7CisJaWYgKCFzeXN0ZW1fd2lkZSkKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCk7CisJZWxzZQorCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOwogCiAJaWYgKHRhcmdldF9waWQgPT0gLTEgJiYgYXJnYykgewogCQlwaWQgPSBmb3JrKCk7CiAJCWlmIChwaWQgPCAwKQotCQkJcGVycm9yKCJmYWlsZWQgdG8gZm9yayIpOworCQkJZGllKCJmYWlsZWQgdG8gZm9yayIpOwogCiAJCWlmICghcGlkKSB7CiAJCQlpZiAoZXhlY3ZwKGFyZ3ZbMF0sIChjaGFyICoqKWFyZ3YpKSB7CiAJCQkJcGVycm9yKGFyZ3ZbMF0pOwogCQkJCWV4aXQoLTEpOwogCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdhaXQgYSBiaXQgZm9yIHRoZSBleGVjdidlZCBjaGlsZCB0byBhcHBlYXIKKwkJCSAqIGFuZCBiZSB1cGRhdGVkIGluIC9wcm9jCisJCQkgKiBGSVhNRTogRG8geW91IGtub3cgYSBsZXNzIGhldXJpc3RpY2FsIHNvbHV0aW9uPworCQkJICovCisJCQl1c2xlZXAoMTAwMCk7CisJCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLAorCQkJCQkJIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQpOwogCQl9CiAKIAkJY2hpbGRfcGlkID0gcGlkOwpAQCAtNjIzLDcgKzUyMCw3IEBACiAKIAkJcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSByZWFsdGltZV9wcmlvOwogCQlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyKDAsIFNDSEVEX0ZJRk8sICZwYXJhbSkpIHsKLQkJCXByaW50ZigiQ291bGQgbm90IHNldCByZWFsdGltZSBwcmlvcml0eS5cbiIpOworCQkJcHJfZXJyKCJDb3VsZCBub3Qgc2V0IHJlYWx0aW1lIHByaW9yaXR5LlxuIik7CiAJCQlleGl0KC0xKTsKIAkJfQogCX0KQEAgLTY0MSw3ICs1MzgsNyBAQAogCQlpZiAoaGl0cyA9PSBzYW1wbGVzKSB7CiAJCQlpZiAoZG9uZSkKIAkJCQlicmVhazsKLQkJCXJldCA9IHBvbGwoZXZlbnRfYXJyYXksIG5yX3BvbGwsIC0xKTsKKwkJCWVyciA9IHBvbGwoZXZlbnRfYXJyYXksIG5yX3BvbGwsIC0xKTsKIAkJCXdha2luZysrOwogCQl9CiAKQEAgLTY3Nyw2ICs1NzQsOCBAQAogCU9QVF9DQUxMQkFDSygnZScsICJldmVudCIsIE5VTEwsICJldmVudCIsCiAJCSAgICAgImV2ZW50IHNlbGVjdG9yLiB1c2UgJ3BlcmYgbGlzdCcgdG8gbGlzdCBhdmFpbGFibGUgZXZlbnRzIiwKIAkJICAgICBwYXJzZV9ldmVudHMpLAorCU9QVF9DQUxMQkFDSygwLCAiZmlsdGVyIiwgTlVMTCwgImZpbHRlciIsCisJCSAgICAgImV2ZW50IGZpbHRlciIsIHBhcnNlX2ZpbHRlciksCiAJT1BUX0lOVEVHRVIoJ3AnLCAicGlkIiwgJnRhcmdldF9waWQsCiAJCSAgICAicmVjb3JkIGV2ZW50cyBvbiBleGlzdGluZyBwaWQiKSwKIAlPUFRfSU5URUdFUigncicsICJyZWFsdGltZSIsICZyZWFsdGltZV9wcmlvLApAQCAtNzIwLDYgKzYxOSw4IEBACiB7CiAJaW50IGNvdW50ZXI7CiAKKwlzeW1ib2xfX2luaXQoMCk7CisKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCByZWNvcmRfdXNhZ2UsCiAJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCWlmICghYXJnYyAmJiB0YXJnZXRfcGlkID09IC0xICYmICFzeXN0ZW1fd2lkZSkKQEAgLTczMSw2ICs2MzIsMTggQEAKIAkJYXR0cnNbMF0uY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTOwogCX0KIAorCS8qCisJICogVXNlciBzcGVjaWZpZWQgY291bnQgb3ZlcnJpZGVzIGRlZmF1bHQgZnJlcXVlbmN5LgorCSAqLworCWlmIChkZWZhdWx0X2ludGVydmFsKQorCQlmcmVxID0gMDsKKwllbHNlIGlmIChmcmVxKSB7CisJCWRlZmF1bHRfaW50ZXJ2YWwgPSBmcmVxOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiZnJlcXVlbmN5IGFuZCBjb3VudCBhcmUgemVybywgYWJvcnRpbmdcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCiAJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspIHsKIAkJaWYgKGF0dHJzW2NvdW50ZXJdLnNhbXBsZV9wZXJpb2QpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAxOTY2OWMyLi4zODNjNGFiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0yNiwyMCArMjYsMTggQEAKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgogCisjaW5jbHVkZSAidXRpbC9kYXRhX21hcC5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCisjaW5jbHVkZSAidXRpbC9zb3J0LmgiCisjaW5jbHVkZSAidXRpbC9oaXN0LmgiCiAKIHN0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogCi1zdGF0aWMgY2hhcgkJZGVmYXVsdF9zb3J0X29yZGVyW10gPSAiY29tbSxkc28sc3ltYm9sIjsKLXN0YXRpYyBjaGFyCQkqc29ydF9vcmRlciA9IGRlZmF1bHRfc29ydF9vcmRlcjsKIHN0YXRpYyBjaGFyCQkqZHNvX2xpc3Rfc3RyLCAqY29tbV9saXN0X3N0ciwgKnN5bV9saXN0X3N0ciwKIAkJCSpjb2xfd2lkdGhfbGlzdF9zdHI7CiBzdGF0aWMgc3RydWN0IHN0cmxpc3QJKmRzb19saXN0LCAqY29tbV9saXN0LCAqc3ltX2xpc3Q7Ci1zdGF0aWMgY2hhcgkJKmZpZWxkX3NlcDsKIAogc3RhdGljIGludAkJZm9yY2U7Ci1zdGF0aWMgaW50CQlpbnB1dDsKLXN0YXRpYyBpbnQJCXNob3dfbWFzayA9IFNIT1dfS0VSTkVMIHwgU0hPV19VU0VSIHwgU0hPV19IVjsKIAogc3RhdGljIGludAkJZnVsbF9wYXRoczsKIHN0YXRpYyBpbnQJCXNob3dfbnJfc2FtcGxlczsKQEAgLTUwLDM3NCArNDgsMzggQEAKIHN0YXRpYyBjaGFyCQlkZWZhdWx0X3ByZXR0eV9wcmludGluZ19zdHlsZVtdID0gIm5vcm1hbCI7CiBzdGF0aWMgY2hhcgkJKnByZXR0eV9wcmludGluZ19zdHlsZSA9IGRlZmF1bHRfcHJldHR5X3ByaW50aW5nX3N0eWxlOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwlwYWdlX3NpemU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwltbWFwX3dpbmRvdyA9IDMyOwotCi1zdGF0aWMgY2hhcgkJZGVmYXVsdF9wYXJlbnRfcGF0dGVybltdID0gIl5zeXNffF5kb19wYWdlX2ZhdWx0IjsKLXN0YXRpYyBjaGFyCQkqcGFyZW50X3BhdHRlcm4gPSBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuOwotc3RhdGljIHJlZ2V4X3QJCXBhcmVudF9yZWdleDsKLQogc3RhdGljIGludAkJZXhjbHVkZV9vdGhlciA9IDE7CiAKIHN0YXRpYyBjaGFyCQljYWxsY2hhaW5fZGVmYXVsdF9vcHRbXSA9ICJmcmFjdGFsLDAuNSI7CiAKLXN0YXRpYyBpbnQJCWNhbGxjaGFpbjsKLQotc3RhdGljIGNoYXIJCV9fY3dkW1BBVEhfTUFYXTsKLXN0YXRpYyBjaGFyCQkqY3dkID0gX19jd2Q7Ci1zdGF0aWMgaW50CQljd2RsZW47Ci0KLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdAl0aHJlYWRzOwotc3RhdGljIHN0cnVjdCB0aHJlYWQJKmxhc3RfbWF0Y2g7Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcjsKIAotc3RhdGljCi1zdHJ1Y3QgY2FsbGNoYWluX3BhcmFtCWNhbGxjaGFpbl9wYXJhbSA9IHsKLQkubW9kZQk9IENIQUlOX0dSQVBIX1JFTCwKLQkubWluX3BlcmNlbnQgPSAwLjUKLX07Ci0KIHN0YXRpYyB1NjQJCXNhbXBsZV90eXBlOwogCi1zdGF0aWMgaW50IHJlcHNlcF9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgbjsKLQl2YV9saXN0IGFwOworc3RydWN0IHN5bWJvbF9jb25mCXN5bWJvbF9jb25mOwogCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JaWYgKCFmaWVsZF9zZXApCi0JCW4gPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7Ci0JZWxzZSB7Ci0JCWNoYXIgKmJmID0gTlVMTDsKLQkJbiA9IHZhc3ByaW50ZigmYmYsIGZtdCwgYXApOwotCQlpZiAobiA+IDApIHsKLQkJCWNoYXIgKnNlcCA9IGJmOwotCi0JCQl3aGlsZSAoMSkgewotCQkJCXNlcCA9IHN0cmNocihzZXAsICpmaWVsZF9zZXApOwotCQkJCWlmIChzZXAgPT0gTlVMTCkKLQkJCQkJYnJlYWs7Ci0JCQkJKnNlcCA9ICcuJzsKLQkJCX0KLQkJfQotCQlmcHV0cyhiZiwgZnApOwotCQlmcmVlKGJmKTsKLQl9Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkc29zX19jb2xfd2lkdGgsCi0JCSAgICBjb21tc19fY29sX3dpZHRoLAotCQkgICAgdGhyZWFkc19fY29sX3dpZHRoOwotCi0vKgotICogaGlzdG9ncmFtLCBzb3J0ZWQgb24gaXRlbSwgY29sbGVjdHMgY291bnRzCi0gKi8KLQotc3RhdGljIHN0cnVjdCByYl9yb290IGhpc3Q7Ci0KLXN0cnVjdCBoaXN0X2VudHJ5IHsKLQlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKLQotCXN0cnVjdCB0aHJlYWQJCSp0aHJlYWQ7Ci0Jc3RydWN0IG1hcAkJKm1hcDsKLQlzdHJ1Y3QgZHNvCQkqZHNvOwotCXN0cnVjdCBzeW1ib2wJCSpzeW07Ci0Jc3RydWN0IHN5bWJvbAkJKnBhcmVudDsKLQl1NjQJCQlpcDsKLQljaGFyCQkJbGV2ZWw7Ci0Jc3RydWN0IGNhbGxjaGFpbl9ub2RlCWNhbGxjaGFpbjsKLQlzdHJ1Y3QgcmJfcm9vdAkJc29ydGVkX2NoYWluOwotCi0JdTY0CQkJY291bnQ7Ci19OwotCi0vKgotICogY29uZmlndXJhYmxlIHNvcnRpbmcgYml0cwotICovCi0KLXN0cnVjdCBzb3J0X2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQljb25zdCBjaGFyICpoZWFkZXI7Ci0KLQlpbnQ2NF90ICgqY21wKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKLQlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwotCXNpemVfdAkoKnByaW50KShGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50IHdpZHRoKTsKLQl1bnNpZ25lZCBpbnQgKndpZHRoOwotCWJvb2wJZWxpZGU7Ci19OwotCi1zdGF0aWMgaW50NjRfdCBjbXBfbnVsbCh2b2lkICpsLCB2b2lkICpyKQotewotCWlmICghbCAmJiAhcikKLQkJcmV0dXJuIDA7Ci0JZWxzZSBpZiAoIWwpCi0JCXJldHVybiAtMTsKLQllbHNlCi0JCXJldHVybiAxOwotfQotCi0vKiAtLXNvcnQgcGlkICovCi0KLXN0YXRpYyBpbnQ2NF90Ci1zb3J0X190aHJlYWRfY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0JcmV0dXJuIHJpZ2h0LT50aHJlYWQtPnBpZCAtIGxlZnQtPnRocmVhZC0+cGlkOwotfQogCiBzdGF0aWMgc2l6ZV90Ci1zb3J0X190aHJlYWRfcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCitjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oRklMRSAqZnAsIGludCBsZWZ0X21hcmdpbikKIHsKLQlyZXR1cm4gcmVwc2VwX2ZwcmludGYoZnAsICIlKnM6JTVkIiwgd2lkdGggLSA2LAotCQkJICAgICAgc2VsZi0+dGhyZWFkLT5jb21tID86ICIiLCBzZWxmLT50aHJlYWQtPnBpZCk7Ci19CisJaW50IGk7CisJaW50IHJldDsKIAotc3RhdGljIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfdGhyZWFkID0gewotCS5oZWFkZXIgPSAiQ29tbWFuZDogIFBpZCIsCi0JLmNtcAk9IHNvcnRfX3RocmVhZF9jbXAsCi0JLnByaW50CT0gc29ydF9fdGhyZWFkX3ByaW50LAotCS53aWR0aAk9ICZ0aHJlYWRzX19jb2xfd2lkdGgsCi19OworCXJldCA9IGZwcmludGYoZnAsICIgICAgICAgICAgICAiKTsKIAotLyogLS1zb3J0IGNvbW0gKi8KLQotc3RhdGljIGludDY0X3QKLXNvcnRfX2NvbW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0JcmV0dXJuIHJpZ2h0LT50aHJlYWQtPnBpZCAtIGxlZnQtPnRocmVhZC0+cGlkOwotfQotCi1zdGF0aWMgaW50NjRfdAotc29ydF9fY29tbV9jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQotewotCWNoYXIgKmNvbW1fbCA9IGxlZnQtPnRocmVhZC0+Y29tbTsKLQljaGFyICpjb21tX3IgPSByaWdodC0+dGhyZWFkLT5jb21tOwotCi0JaWYgKCFjb21tX2wgfHwgIWNvbW1fcikKLQkJcmV0dXJuIGNtcF9udWxsKGNvbW1fbCwgY29tbV9yKTsKLQotCXJldHVybiBzdHJjbXAoY29tbV9sLCBjb21tX3IpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zb3J0X19jb21tX3ByaW50KEZJTEUgKmZwLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgdW5zaWduZWQgaW50IHdpZHRoKQotewotCXJldHVybiByZXBzZXBfZnByaW50ZihmcCwgIiUqcyIsIHdpZHRoLCBzZWxmLT50aHJlYWQtPmNvbW0pOwotfQotCi1zdGF0aWMgc3RydWN0IHNvcnRfZW50cnkgc29ydF9jb21tID0gewotCS5oZWFkZXIJCT0gIkNvbW1hbmQiLAotCS5jbXAJCT0gc29ydF9fY29tbV9jbXAsCi0JLmNvbGxhcHNlCT0gc29ydF9fY29tbV9jb2xsYXBzZSwKLQkucHJpbnQJCT0gc29ydF9fY29tbV9wcmludCwKLQkud2lkdGgJCT0gJmNvbW1zX19jb2xfd2lkdGgsCi19OwotCi0vKiAtLXNvcnQgZHNvICovCi0KLXN0YXRpYyBpbnQ2NF90Ci1zb3J0X19kc29fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0Jc3RydWN0IGRzbyAqZHNvX2wgPSBsZWZ0LT5kc287Ci0Jc3RydWN0IGRzbyAqZHNvX3IgPSByaWdodC0+ZHNvOwotCi0JaWYgKCFkc29fbCB8fCAhZHNvX3IpCi0JCXJldHVybiBjbXBfbnVsbChkc29fbCwgZHNvX3IpOwotCi0JcmV0dXJuIHN0cmNtcChkc29fbC0+bmFtZSwgZHNvX3ItPm5hbWUpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zb3J0X19kc29fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCi17Ci0JaWYgKHNlbGYtPmRzbykKLQkJcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJS0qcyIsIHdpZHRoLCBzZWxmLT5kc28tPm5hbWUpOwotCi0JcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJSpsbHgiLCB3aWR0aCwgKHU2NClzZWxmLT5pcCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X2RzbyA9IHsKLQkuaGVhZGVyID0gIlNoYXJlZCBPYmplY3QiLAotCS5jbXAJPSBzb3J0X19kc29fY21wLAotCS5wcmludAk9IHNvcnRfX2Rzb19wcmludCwKLQkud2lkdGgJPSAmZHNvc19fY29sX3dpZHRoLAotfTsKLQotLyogLS1zb3J0IHN5bWJvbCAqLwotCi1zdGF0aWMgaW50NjRfdAotc29ydF9fc3ltX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQotewotCXU2NCBpcF9sLCBpcF9yOwotCi0JaWYgKGxlZnQtPnN5bSA9PSByaWdodC0+c3ltKQotCQlyZXR1cm4gMDsKLQotCWlwX2wgPSBsZWZ0LT5zeW0gPyBsZWZ0LT5zeW0tPnN0YXJ0IDogbGVmdC0+aXA7Ci0JaXBfciA9IHJpZ2h0LT5zeW0gPyByaWdodC0+c3ltLT5zdGFydCA6IHJpZ2h0LT5pcDsKLQotCXJldHVybiAoaW50NjRfdCkoaXBfciAtIGlwX2wpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zb3J0X19zeW1fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGggX191c2VkKQotewotCXNpemVfdCByZXQgPSAwOwotCi0JaWYgKHZlcmJvc2UpCi0JCXJldCArPSByZXBzZXBfZnByaW50ZihmcCwgIiUjMDE4bGx4ICVjICIsICh1NjQpc2VsZi0+aXAsCi0JCQkJICAgICAgZHNvX19zeW10YWJfb3JpZ2luKHNlbGYtPmRzbykpOwotCi0JcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiWyVjXSAiLCBzZWxmLT5sZXZlbCk7Ci0JaWYgKHNlbGYtPnN5bSkgewotCQlyZXQgKz0gcmVwc2VwX2ZwcmludGYoZnAsICIlcyIsIHNlbGYtPnN5bS0+bmFtZSk7Ci0KLQkJaWYgKHNlbGYtPnN5bS0+bW9kdWxlKQotCQkJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiXHRbJXNdIiwKLQkJCQkJICAgICBzZWxmLT5zeW0tPm1vZHVsZS0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiJSMwMTZsbHgiLCAodTY0KXNlbGYtPmlwKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGxlZnRfbWFyZ2luOyBpKyspCisJCXJldCArPSBmcHJpbnRmKGZwLCAiICIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfc3ltID0gewotCS5oZWFkZXIgPSAiU3ltYm9sIiwKLQkuY21wCT0gc29ydF9fc3ltX2NtcCwKLQkucHJpbnQJPSBzb3J0X19zeW1fcHJpbnQsCi19OwotCi0vKiAtLXNvcnQgcGFyZW50ICovCi0KLXN0YXRpYyBpbnQ2NF90Ci1zb3J0X19wYXJlbnRfY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltX2wgPSBsZWZ0LT5wYXJlbnQ7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltX3IgPSByaWdodC0+cGFyZW50OwotCi0JaWYgKCFzeW1fbCB8fCAhc3ltX3IpCi0JCXJldHVybiBjbXBfbnVsbChzeW1fbCwgc3ltX3IpOwotCi0JcmV0dXJuIHN0cmNtcChzeW1fbC0+bmFtZSwgc3ltX3ItPm5hbWUpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zb3J0X19wYXJlbnRfcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCi17Ci0JcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJS0qcyIsIHdpZHRoLAotCQkJICAgICAgc2VsZi0+cGFyZW50ID8gc2VsZi0+cGFyZW50LT5uYW1lIDogIltvdGhlcl0iKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBwYXJlbnRfc3ltYm9sX19jb2xfd2lkdGg7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3BhcmVudCA9IHsKLQkuaGVhZGVyID0gIlBhcmVudCBzeW1ib2wiLAotCS5jbXAJPSBzb3J0X19wYXJlbnRfY21wLAotCS5wcmludAk9IHNvcnRfX3BhcmVudF9wcmludCwKLQkud2lkdGgJPSAmcGFyZW50X3N5bWJvbF9fY29sX3dpZHRoLAotfTsKLQotc3RhdGljIGludCBzb3J0X19uZWVkX2NvbGxhcHNlID0gMDsKLXN0YXRpYyBpbnQgc29ydF9faGFzX3BhcmVudCA9IDA7Ci0KLXN0cnVjdCBzb3J0X2RpbWVuc2lvbiB7Ci0JY29uc3QgY2hhcgkJKm5hbWU7Ci0Jc3RydWN0IHNvcnRfZW50cnkJKmVudHJ5OwotCWludAkJCXRha2VuOwotfTsKLQotc3RhdGljIHN0cnVjdCBzb3J0X2RpbWVuc2lvbiBzb3J0X2RpbWVuc2lvbnNbXSA9IHsKLQl7IC5uYW1lID0gInBpZCIsCS5lbnRyeSA9ICZzb3J0X3RocmVhZCwJfSwKLQl7IC5uYW1lID0gImNvbW0iLAkuZW50cnkgPSAmc29ydF9jb21tLAl9LAotCXsgLm5hbWUgPSAiZHNvIiwJLmVudHJ5ID0gJnNvcnRfZHNvLAl9LAotCXsgLm5hbWUgPSAic3ltYm9sIiwJLmVudHJ5ID0gJnNvcnRfc3ltLAl9LAotCXsgLm5hbWUgPSAicGFyZW50IiwJLmVudHJ5ID0gJnNvcnRfcGFyZW50LAl9LAotfTsKLQotc3RhdGljIExJU1RfSEVBRChoaXN0X2VudHJ5X19zb3J0X2xpc3QpOwotCi1zdGF0aWMgaW50IHNvcnRfZGltZW5zaW9uX19hZGQoY29uc3QgY2hhciAqdG9rKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc29ydF9kaW1lbnNpb25zKTsgaSsrKSB7Ci0JCXN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QgPSAmc29ydF9kaW1lbnNpb25zW2ldOwotCi0JCWlmIChzZC0+dGFrZW4pCi0JCQljb250aW51ZTsKLQotCQlpZiAoc3RybmNhc2VjbXAodG9rLCBzZC0+bmFtZSwgc3RybGVuKHRvaykpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHNkLT5lbnRyeS0+Y29sbGFwc2UpCi0JCQlzb3J0X19uZWVkX2NvbGxhcHNlID0gMTsKLQotCQlpZiAoc2QtPmVudHJ5ID09ICZzb3J0X3BhcmVudCkgewotCQkJaW50IHJldCA9IHJlZ2NvbXAoJnBhcmVudF9yZWdleCwgcGFyZW50X3BhdHRlcm4sIFJFR19FWFRFTkRFRCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJY2hhciBlcnJbQlVGU0laXTsKLQotCQkJCXJlZ2Vycm9yKHJldCwgJnBhcmVudF9yZWdleCwgZXJyLCBzaXplb2YoZXJyKSk7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHJlZ2V4OiAlc1xuJXMiLAotCQkJCQlwYXJlbnRfcGF0dGVybiwgZXJyKTsKLQkJCQlleGl0KC0xKTsKLQkJCX0KLQkJCXNvcnRfX2hhc19wYXJlbnQgPSAxOwotCQl9Ci0KLQkJbGlzdF9hZGRfdGFpbCgmc2QtPmVudHJ5LT5saXN0LCAmaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKLQkJc2QtPnRha2VuID0gMTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVTUkNIOwotfQotCi1zdGF0aWMgaW50NjRfdAotaGlzdF9lbnRyeV9fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCi17Ci0Jc3RydWN0IHNvcnRfZW50cnkgKnNlOwotCWludDY0X3QgY21wID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpIHsKLQkJY21wID0gc2UtPmNtcChsZWZ0LCByaWdodCk7Ci0JCWlmIChjbXApCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY21wOwotfQotCi1zdGF0aWMgaW50NjRfdAotaGlzdF9lbnRyeV9fY29sbGFwc2Uoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKLXsKLQlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7Ci0JaW50NjRfdCBjbXAgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgewotCQlpbnQ2NF90ICgqZikoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7Ci0KLQkJZiA9IHNlLT5jb2xsYXBzZSA/OiBzZS0+Y21wOwotCi0JCWNtcCA9IGYobGVmdCwgcmlnaHQpOwotCQlpZiAoY21wKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGNtcDsKLX0KLQotc3RhdGljIHNpemVfdCBpcGNoYWluX19mcHJpbnRmX2dyYXBoX2xpbmUoRklMRSAqZnAsIGludCBkZXB0aCwgaW50IGRlcHRoX21hc2spCitzdGF0aWMgc2l6ZV90IGlwY2hhaW5fX2ZwcmludGZfZ3JhcGhfbGluZShGSUxFICpmcCwgaW50IGRlcHRoLCBpbnQgZGVwdGhfbWFzaywKKwkJCQkJICBpbnQgbGVmdF9tYXJnaW4pCiB7CiAJaW50IGk7CiAJc2l6ZV90IHJldCA9IDA7CiAKLQlyZXQgKz0gZnByaW50ZihmcCwgIiVzIiwgIiAgICAgICAgICAgICAgICAiKTsKKwlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKIAkJaWYgKGRlcHRoX21hc2sgJiAoMSA8PCBpKSkKQEAgLTQzMiwxMiArOTQsMTIgQEAKIHN0YXRpYyBzaXplX3QKIGlwY2hhaW5fX2ZwcmludGZfZ3JhcGgoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW4sIGludCBkZXB0aCwKIAkJICAgICAgIGludCBkZXB0aF9tYXNrLCBpbnQgY291bnQsIHU2NCB0b3RhbF9zYW1wbGVzLAotCQkgICAgICAgaW50IGhpdHMpCisJCSAgICAgICBpbnQgaGl0cywgaW50IGxlZnRfbWFyZ2luKQogewogCWludCBpOwogCXNpemVfdCByZXQgPSAwOwogCi0JcmV0ICs9IGZwcmludGYoZnAsICIlcyIsICIgICAgICAgICAgICAgICAgIik7CisJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOwogCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CiAJCWlmIChkZXB0aF9tYXNrICYgKDEgPDwgaSkpCiAJCQlyZXQgKz0gZnByaW50ZihmcCwgInwiKTsKQEAgLTQ3NSw4ICsxMzcsOSBAQAogfQogCiBzdGF0aWMgc2l6ZV90Ci1jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKLQkJCXU2NCB0b3RhbF9zYW1wbGVzLCBpbnQgZGVwdGgsIGludCBkZXB0aF9tYXNrKQorX19jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoRklMRSAqZnAsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZiwKKwkJCSAgIHU2NCB0b3RhbF9zYW1wbGVzLCBpbnQgZGVwdGgsIGludCBkZXB0aF9tYXNrLAorCQkJICAgaW50IGxlZnRfbWFyZ2luKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDsKIAlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkOwpAQCAtNTE3LDcgKzE4MCw4IEBACiAJCSAqIEJ1dCB3ZSBrZWVwIHRoZSBvbGRlciBkZXB0aCBtYXNrIGZvciB0aGUgbGluZSBzZXBlcmF0b3IKIAkJICogdG8ga2VlcCB0aGUgbGV2ZWwgbGluayB1bnRpbCB3ZSByZWFjaCB0aGUgbGFzdCBjaGlsZAogCQkgKi8KLQkJcmV0ICs9IGlwY2hhaW5fX2ZwcmludGZfZ3JhcGhfbGluZShmcCwgZGVwdGgsIGRlcHRoX21hc2spOworCQlyZXQgKz0gaXBjaGFpbl9fZnByaW50Zl9ncmFwaF9saW5lKGZwLCBkZXB0aCwgZGVwdGhfbWFzaywKKwkJCQkJCSAgIGxlZnRfbWFyZ2luKTsKIAkJaSA9IDA7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZjaGlsZC0+dmFsLCBsaXN0KSB7CiAJCQlpZiAoY2hhaW4tPmlwID49IFBFUkZfQ09OVEVYVF9NQVgpCkBAIC01MjUsMTEgKzE4OSwxMyBAQAogCQkJcmV0ICs9IGlwY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoYWluLCBkZXB0aCwKIAkJCQkJCSAgICAgIG5ld19kZXB0aF9tYXNrLCBpKyssCiAJCQkJCQkgICAgICBuZXdfdG90YWwsCi0JCQkJCQkgICAgICBjdW11bCk7CisJCQkJCQkgICAgICBjdW11bCwKKwkJCQkJCSAgICAgIGxlZnRfbWFyZ2luKTsKIAkJfQotCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2dyYXBoKGZwLCBjaGlsZCwgbmV3X3RvdGFsLAotCQkJCQkJZGVwdGggKyAxLAotCQkJCQkJbmV3X2RlcHRoX21hc2sgfCAoMSA8PCBkZXB0aCkpOworCQlyZXQgKz0gX19jYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoaWxkLCBuZXdfdG90YWwsCisJCQkJCQkgIGRlcHRoICsgMSwKKwkJCQkJCSAgbmV3X2RlcHRoX21hc2sgfCAoMSA8PCBkZXB0aCksCisJCQkJCQkgIGxlZnRfbWFyZ2luKTsKIAkJbm9kZSA9IG5leHQ7CiAJfQogCkBAIC01NDMsMTIgKzIwOSw1MSBAQAogCiAJCXJldCArPSBpcGNoYWluX19mcHJpbnRmX2dyYXBoKGZwLCAmcmVtX2hpdHMsIGRlcHRoLAogCQkJCQkgICAgICBuZXdfZGVwdGhfbWFzaywgMCwgbmV3X3RvdGFsLAotCQkJCQkgICAgICByZW1haW5pbmcpOworCQkJCQkgICAgICByZW1haW5pbmcsIGxlZnRfbWFyZ2luKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCisKK3N0YXRpYyBzaXplX3QKK2NhbGxjaGFpbl9fZnByaW50Zl9ncmFwaChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAorCQkJIHU2NCB0b3RhbF9zYW1wbGVzLCBpbnQgbGVmdF9tYXJnaW4pCit7CisJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKwlib29sIHByaW50ZWQgPSBmYWxzZTsKKwlpbnQgaSA9IDA7CisJaW50IHJldCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmc2VsZi0+dmFsLCBsaXN0KSB7CisJCWlmIChjaGFpbi0+aXAgPj0gUEVSRl9DT05URVhUX01BWCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaSsrICYmIHNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9PSBTT1JUX1NZTSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcHJpbnRlZCkgeworCQkJcmV0ICs9IGNhbGxjaGFpbl9fZnByaW50Zl9sZWZ0X21hcmdpbihmcCwgbGVmdF9tYXJnaW4pOworCQkJcmV0ICs9IGZwcmludGYoZnAsICJ8XG4iKTsKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfbGVmdF9tYXJnaW4oZnAsIGxlZnRfbWFyZ2luKTsKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiLS0tIik7CisKKwkJCWxlZnRfbWFyZ2luICs9IDM7CisJCQlwcmludGVkID0gdHJ1ZTsKKwkJfSBlbHNlCisJCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2xlZnRfbWFyZ2luKGZwLCBsZWZ0X21hcmdpbik7CisKKwkJaWYgKGNoYWluLT5zeW0pCisJCQlyZXQgKz0gZnByaW50ZihmcCwgIiAlc1xuIiwgY2hhaW4tPnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCXJldCArPSBmcHJpbnRmKGZwLCAiICVwXG4iLCAodm9pZCAqKShsb25nKWNoYWluLT5pcCk7CisJfQorCisJcmV0ICs9IF9fY2FsbGNoYWluX19mcHJpbnRmX2dyYXBoKGZwLCBzZWxmLCB0b3RhbF9zYW1wbGVzLCAxLCAxLCBsZWZ0X21hcmdpbik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc2l6ZV90CiBjYWxsY2hhaW5fX2ZwcmludGZfZmxhdChGSUxFICpmcCwgc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAogCQkJdTY0IHRvdGFsX3NhbXBsZXMpCkBAIC01NzcsNyArMjgyLDcgQEAKIAogc3RhdGljIHNpemVfdAogaGlzdF9lbnRyeV9jYWxsY2hhaW5fX2ZwcmludGYoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLAotCQkJICAgICAgdTY0IHRvdGFsX3NhbXBsZXMpCisJCQkgICAgICB1NjQgdG90YWxfc2FtcGxlcywgaW50IGxlZnRfbWFyZ2luKQogewogCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwogCXN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hhaW47CkBAIC01OTcsOCArMzAyLDggQEAKIAkJCWJyZWFrOwogCQljYXNlIENIQUlOX0dSQVBIX0FCUzogLyogRmFsbGRvd24gKi8KIAkJY2FzZSBDSEFJTl9HUkFQSF9SRUw6Ci0JCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2dyYXBoKGZwLCBjaGFpbiwKLQkJCQkJCQl0b3RhbF9zYW1wbGVzLCAxLCAxKTsKKwkJCXJldCArPSBjYWxsY2hhaW5fX2ZwcmludGZfZ3JhcGgoZnAsIGNoYWluLCB0b3RhbF9zYW1wbGVzLAorCQkJCQkJCWxlZnRfbWFyZ2luKTsKIAkJY2FzZSBDSEFJTl9OT05FOgogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC02MTAsNyArMzE1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBzaXplX3QKIGhpc3RfZW50cnlfX2ZwcmludGYoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1NjQgdG90YWxfc2FtcGxlcykKIHsKQEAgLTY0NCw4ICszNDgsMTkgQEAKIAogCXJldCArPSBmcHJpbnRmKGZwLCAiXG4iKTsKIAotCWlmIChjYWxsY2hhaW4pCi0JCWhpc3RfZW50cnlfY2FsbGNoYWluX19mcHJpbnRmKGZwLCBzZWxmLCB0b3RhbF9zYW1wbGVzKTsKKwlpZiAoY2FsbGNoYWluKSB7CisJCWludCBsZWZ0X21hcmdpbiA9IDA7CisKKwkJaWYgKHNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9PSBTT1JUX0NPTU0pIHsKKwkJCXNlID0gbGlzdF9maXJzdF9lbnRyeSgmaGlzdF9lbnRyeV9fc29ydF9saXN0LCB0eXBlb2YoKnNlKSwKKwkJCQkJCWxpc3QpOworCQkJbGVmdF9tYXJnaW4gPSBzZS0+d2lkdGggPyAqc2UtPndpZHRoIDogMDsKKwkJCWxlZnRfbWFyZ2luIC09IHRocmVhZF9fY29tbV9sZW4oc2VsZi0+dGhyZWFkKTsKKwkJfQorCisJCWhpc3RfZW50cnlfY2FsbGNoYWluX19mcHJpbnRmKGZwLCBzZWxmLCB0b3RhbF9zYW1wbGVzLAorCQkJCQkgICAgICBsZWZ0X21hcmdpbik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5Myw2MyArNDA4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqCi1yZXNvbHZlX3N5bWJvbChzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN0cnVjdCBtYXAgKiptYXBwLAotCSAgICAgICBzdHJ1Y3QgZHNvICoqZHNvcCwgdTY0ICppcHApCi17Ci0Jc3RydWN0IGRzbyAqZHNvID0gZHNvcCA/ICpkc29wIDogTlVMTDsKLQlzdHJ1Y3QgbWFwICptYXAgPSBtYXBwID8gKm1hcHAgOiBOVUxMOwotCXU2NCBpcCA9ICppcHA7Ci0KLQlpZiAoIXRocmVhZCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoZHNvKQotCQlnb3RvIGdvdF9kc287Ci0KLQlpZiAobWFwKQotCQlnb3RvIGdvdF9tYXA7Ci0KLQltYXAgPSB0aHJlYWRfX2ZpbmRfbWFwKHRocmVhZCwgaXApOwotCWlmIChtYXAgIT0gTlVMTCkgewotCQkvKgotCQkgKiBXZSBoYXZlIHRvIGRvIHRoaXMgaGVyZSBhcyB3ZSBtYXkgaGF2ZSBhIGRzbwotCQkgKiB3aXRoIG5vIHN5bWJvbCBoaXQgdGhhdCBoYXMgYSBuYW1lIGxvbmdlciB0aGFuCi0JCSAqIHRoZSBvbmVzIHdpdGggc3ltYm9scyBzYW1wbGVkLgotCQkgKi8KLQkJaWYgKCFzb3J0X2Rzby5lbGlkZSAmJiAhbWFwLT5kc28tPnNsZW5fY2FsY3VsYXRlZCkKLQkJCWRzb19fY2FsY19jb2xfd2lkdGgobWFwLT5kc28pOwotCi0JCWlmIChtYXBwKQotCQkJKm1hcHAgPSBtYXA7Ci1nb3RfbWFwOgotCQlpcCA9IG1hcC0+bWFwX2lwKG1hcCwgaXApOwotCi0JCWRzbyA9IG1hcC0+ZHNvOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElmIHRoaXMgaXMgb3V0c2lkZSBvZiBhbGwga25vd24gbWFwcywKLQkJICogYW5kIGlzIGEgbmVnYXRpdmUgYWRkcmVzcywgdHJ5IHRvIGxvb2sgaXQKLQkJICogdXAgaW4gdGhlIGtlcm5lbCBkc28sIGFzIGl0IG1pZ2h0IGJlIGEKLQkJICogdnN5c2NhbGwgKHdoaWNoIGV4ZWN1dGVzIGluIHVzZXItbW9kZSk6Ci0JCSAqLwotCQlpZiAoKGxvbmcgbG9uZylpcCA8IDApCi0JCWRzbyA9IGtlcm5lbF9kc287Ci0JfQotCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzbyA/IGRzby0+bmFtZSA6ICI8bm90IGZvdW5kPiIpOwotCWR1bXBfcHJpbnRmKCIgLi4uLi4uIG1hcDogJUx4IC0+ICVMeFxuIiwgKmlwcCwgaXApOwotCSppcHAgID0gaXA7Ci0KLQlpZiAoZHNvcCkKLQkJKmRzb3AgPSBkc287Ci0KLQlpZiAoIWRzbykKLQkJcmV0dXJuIE5VTEw7Ci1nb3RfZHNvOgotCXJldHVybiBkc28tPmZpbmRfc3ltYm9sKGRzbywgaXApOwotfQotCiBzdGF0aWMgaW50IGNhbGxfX21hdGNoKHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlpZiAoc3ltLT5uYW1lICYmICFyZWdleGVjKCZwYXJlbnRfcmVnZXgsIHN5bS0+bmFtZSwgMCwgTlVMTCwgMCkpCkBAIC03NTgsMTEgKzQxNiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqKgotcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFwICptYXAgX191c2VkLAotCQkgICAgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sIHN0cnVjdCBoaXN0X2VudHJ5ICplbnRyeSkKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICoqcmVzb2x2ZV9jYWxsY2hhaW4oc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJCQkgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCisJCQkJCSBzdHJ1Y3Qgc3ltYm9sICoqcGFyZW50KQogewotCXU2NCBjb250ZXh0ID0gUEVSRl9DT05URVhUX01BWDsKKwl1OCBjcHVtb2RlID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOwogCXN0cnVjdCBzeW1ib2wgKipzeW1zID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtNzc2LDM0ICs0MzQsMzEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjaGFpbi0+bnI7IGkrKykgewogCQl1NjQgaXAgPSBjaGFpbi0+aXBzW2ldOwotCQlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwotCQlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCiAJCWlmIChpcCA+PSBQRVJGX0NPTlRFWFRfTUFYKSB7Ci0JCQljb250ZXh0ID0gaXA7CisJCQlzd2l0Y2ggKGlwKSB7CisJCQljYXNlIFBFUkZfQ09OVEVYVF9IVjoKKwkJCQljcHVtb2RlID0gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwlicmVhazsKKwkJCWNhc2UgUEVSRl9DT05URVhUX0tFUk5FTDoKKwkJCQljcHVtb2RlID0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CWJyZWFrOworCQkJY2FzZSBQRVJGX0NPTlRFWFRfVVNFUjoKKwkJCQljcHVtb2RlID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOwlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXN3aXRjaCAoY29udGV4dCkgewotCQljYXNlIFBFUkZfQ09OVEVYVF9IVjoKLQkJCWRzbyA9IGh5cGVydmlzb3JfZHNvOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEVSRl9DT05URVhUX0tFUk5FTDoKLQkJCWRzbyA9IGtlcm5lbF9kc287Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3ltID0gcmVzb2x2ZV9zeW1ib2wodGhyZWFkLCBOVUxMLCAmZHNvLCAmaXApOwotCi0JCWlmIChzeW0pIHsKLQkJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmIGNhbGxfX21hdGNoKHN5bSkgJiYKLQkJCSAgICAhZW50cnktPnBhcmVudCkKLQkJCQllbnRyeS0+cGFyZW50ID0gc3ltOworCQl0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbih0aHJlYWQsIGNwdW1vZGUsIE1BUF9fRlVOQ1RJT04sCisJCQkJCSAgIGlwLCAmYWwsIE5VTEwpOworCQlpZiAoYWwuc3ltICE9IE5VTEwpIHsKKwkJCWlmIChzb3J0X19oYXNfcGFyZW50ICYmICEqcGFyZW50ICYmCisJCQkgICAgY2FsbF9fbWF0Y2goYWwuc3ltKSkKKwkJCQkqcGFyZW50ID0gYWwuc3ltOwogCQkJaWYgKCFjYWxsY2hhaW4pCiAJCQkJYnJlYWs7Ci0JCQlzeW1zW2ldID0gc3ltOworCQkJc3ltc1tpXSA9IGFsLnN5bTsKIAkJfQogCX0KIApAQCAtODE0LDE3OCArNDY5LDMzIEBACiAgKiBjb2xsZWN0IGhpc3RvZ3JhbSBjb3VudHMKICAqLwogCi1zdGF0aWMgaW50Ci1oaXN0X2VudHJ5X19hZGQoc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBkc28gKmRzbywKLQkJc3RydWN0IHN5bWJvbCAqc3ltLCB1NjQgaXAsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAotCQljaGFyIGxldmVsLCB1NjQgY291bnQpCitzdGF0aWMgaW50IGhpc3RfZW50cnlfX2FkZChzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkgICBzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwgdTY0IGNvdW50KQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZoaXN0LnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHN5bWJvbCAqKnN5bXMgPSBOVUxMLCAqcGFyZW50ID0gTlVMTDsKKwlib29sIGhpdDsKIAlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7Ci0Jc3RydWN0IHN5bWJvbCAqKnN5bXMgPSBOVUxMOwotCXN0cnVjdCBoaXN0X2VudHJ5IGVudHJ5ID0gewotCQkudGhyZWFkCT0gdGhyZWFkLAotCQkubWFwCT0gbWFwLAotCQkuZHNvCT0gZHNvLAotCQkuc3ltCT0gc3ltLAotCQkuaXAJPSBpcCwKLQkJLmxldmVsCT0gbGV2ZWwsCi0JCS5jb3VudAk9IGNvdW50LAotCQkucGFyZW50ID0gTlVMTCwKLQkJLnNvcnRlZF9jaGFpbiA9IFJCX1JPT1QKLQl9OwotCWludCBjbXA7CiAKIAlpZiAoKHNvcnRfX2hhc19wYXJlbnQgfHwgY2FsbGNoYWluKSAmJiBjaGFpbikKLQkJc3ltcyA9IHJlc29sdmVfY2FsbGNoYWluKHRocmVhZCwgbWFwLCBjaGFpbiwgJmVudHJ5KTsKKwkJc3ltcyA9IHJlc29sdmVfY2FsbGNoYWluKGFsLT50aHJlYWQsIGNoYWluLCAmcGFyZW50KTsKIAotCXdoaWxlICgqcCAhPSBOVUxMKSB7Ci0JCXBhcmVudCA9ICpwOwotCQloZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWNtcCA9IGhpc3RfZW50cnlfX2NtcCgmZW50cnksIGhlKTsKLQotCQlpZiAoIWNtcCkgewotCQkJaGUtPmNvdW50ICs9IGNvdW50OwotCQkJaWYgKGNhbGxjaGFpbikgewotCQkJCWFwcGVuZF9jaGFpbigmaGUtPmNhbGxjaGFpbiwgY2hhaW4sIHN5bXMpOwotCQkJCWZyZWUoc3ltcyk7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChjbXAgPCAwKQotCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlCi0JCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCX0KLQotCWhlID0gbWFsbG9jKHNpemVvZigqaGUpKTsKLQlpZiAoIWhlKQorCWhlID0gX19oaXN0X2VudHJ5X19hZGQoYWwsIHBhcmVudCwgY291bnQsICZoaXQpOworCWlmIChoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQkqaGUgPSBlbnRyeTsKKworCWlmIChoaXQpCisJCWhlLT5jb3VudCArPSBjb3VudDsKKwogCWlmIChjYWxsY2hhaW4pIHsKLQkJY2FsbGNoYWluX2luaXQoJmhlLT5jYWxsY2hhaW4pOworCQlpZiAoIWhpdCkKKwkJCWNhbGxjaGFpbl9pbml0KCZoZS0+Y2FsbGNoYWluKTsKIAkJYXBwZW5kX2NoYWluKCZoZS0+Y2FsbGNoYWluLCBjaGFpbiwgc3ltcyk7CiAJCWZyZWUoc3ltcyk7CiAJfQotCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgJmhpc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKmhlKQotewotCWZyZWUoaGUpOwotfQotCi0vKgotICogY29sbGFwc2UgdGhlIGhpc3RvZ3JhbQotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBjb2xsYXBzZV9oaXN0czsKLQotc3RhdGljIHZvaWQgY29sbGFwc2VfX2luc2VydF9lbnRyeShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCi17Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJmNvbGxhcHNlX2hpc3RzLnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGhpc3RfZW50cnkgKml0ZXI7Ci0JaW50NjRfdCBjbXA7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJaXRlciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCi0JCWNtcCA9IGhpc3RfZW50cnlfX2NvbGxhcHNlKGl0ZXIsIGhlKTsKLQotCQlpZiAoIWNtcCkgewotCQkJaXRlci0+Y291bnQgKz0gaGUtPmNvdW50OwotCQkJaGlzdF9lbnRyeV9fZnJlZShoZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoY21wIDwgMCkKLQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZQotCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsICZjb2xsYXBzZV9oaXN0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxhcHNlX19yZXNvcnQodm9pZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqbjsKLQotCWlmICghc29ydF9fbmVlZF9jb2xsYXBzZSkKLQkJcmV0dXJuOwotCi0JbmV4dCA9IHJiX2ZpcnN0KCZoaXN0KTsKLQl3aGlsZSAobmV4dCkgewotCQluID0gcmJfZW50cnkobmV4dCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZSk7Ci0KLQkJcmJfZXJhc2UoJm4tPnJiX25vZGUsICZoaXN0KTsKLQkJY29sbGFwc2VfX2luc2VydF9lbnRyeShuKTsKLQl9Ci19Ci0KLS8qCi0gKiByZXZlcnNlIHRoZSBtYXAsIHNvcnQgb24gY291bnQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCByYl9yb290IG91dHB1dF9oaXN0czsKLQotc3RhdGljIHZvaWQgb3V0cHV0X19pbnNlcnRfZW50cnkoc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgbWluX2NhbGxjaGFpbl9oaXRzKQotewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZvdXRwdXRfaGlzdHMucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlcjsKLQotCWlmIChjYWxsY2hhaW4pCi0JCWNhbGxjaGFpbl9wYXJhbS5zb3J0KCZoZS0+c29ydGVkX2NoYWluLCAmaGUtPmNhbGxjaGFpbiwKLQkJCQkgICAgICBtaW5fY2FsbGNoYWluX2hpdHMsICZjYWxsY2hhaW5fcGFyYW0pOwotCi0Jd2hpbGUgKCpwICE9IE5VTEwpIHsKLQkJcGFyZW50ID0gKnA7Ci0JCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQotCQlpZiAoaGUtPmNvdW50ID4gaXRlci0+Y291bnQpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCAmb3V0cHV0X2hpc3RzKTsKLX0KLQotc3RhdGljIHZvaWQgb3V0cHV0X19yZXNvcnQodTY0IHRvdGFsX3NhbXBsZXMpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5leHQ7Ci0Jc3RydWN0IGhpc3RfZW50cnkgKm47Ci0Jc3RydWN0IHJiX3Jvb3QgKnRyZWUgPSAmaGlzdDsKLQl1NjQgbWluX2NhbGxjaGFpbl9oaXRzOwotCi0JbWluX2NhbGxjaGFpbl9oaXRzID0gdG90YWxfc2FtcGxlcyAqIChjYWxsY2hhaW5fcGFyYW0ubWluX3BlcmNlbnQgLyAxMDApOwotCi0JaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCi0JCXRyZWUgPSAmY29sbGFwc2VfaGlzdHM7Ci0KLQluZXh0ID0gcmJfZmlyc3QodHJlZSk7Ci0KLQl3aGlsZSAobmV4dCkgewotCQluID0gcmJfZW50cnkobmV4dCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZSk7Ci0KLQkJcmJfZXJhc2UoJm4tPnJiX25vZGUsIHRyZWUpOwotCQlvdXRwdXRfX2luc2VydF9lbnRyeShuLCBtaW5fY2FsbGNoYWluX2hpdHMpOwotCX0KLX0KLQogc3RhdGljIHNpemVfdCBvdXRwdXRfX2ZwcmludGYoRklMRSAqZnAsIHU2NCB0b3RhbF9zYW1wbGVzKQogewogCXN0cnVjdCBoaXN0X2VudHJ5ICpwb3M7CkBAIC0xMDgwLDEzICs1OTAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsID0gMCwKLQkJICAgICB0b3RhbF9tbWFwID0gMCwKLQkJICAgICB0b3RhbF9jb21tID0gMCwKLQkJICAgICB0b3RhbF9mb3JrID0gMCwKLQkJICAgICB0b3RhbF91bmtub3duID0gMCwKLQkJICAgICB0b3RhbF9sb3N0ID0gMDsKLQogc3RhdGljIGludCB2YWxpZGF0ZV9jaGFpbihzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwgZXZlbnRfdCAqZXZlbnQpCiB7CiAJdW5zaWduZWQgaW50IGNoYWluX3NpemU7CkBAIC0xMTAwLDMwICs2MDMsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQogewotCWNoYXIgbGV2ZWw7Ci0JaW50IHNob3cgPSAwOwotCXN0cnVjdCBkc28gKmRzbyA9IE5VTEw7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCXU2NCBpcCA9IGV2ZW50LT5pcC5pcDsKIAl1NjQgcGVyaW9kID0gMTsKLQlzdHJ1Y3QgbWFwICptYXAgPSBOVUxMOwogCXZvaWQgKm1vcmVfZGF0YSA9IGV2ZW50LT5pcC5fX21vcmVfZGF0YTsKIAlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiA9IE5VTEw7CiAJaW50IGNwdW1vZGU7Ci0KLQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5pcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkKTsKIAogCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1BFUklPRCkgewogCQlwZXJpb2QgPSAqKHU2NCAqKW1vcmVfZGF0YTsKIAkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwogCX0KIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCiAJCWV2ZW50LT5oZWFkZXIubWlzYywKIAkJZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLnRpZCwKIAkJKHZvaWQgKikobG9uZylpcCwKQEAgLTExMzcsNyArNjMyLDggQEAKIAkJZHVtcF9wcmludGYoIi4uLiBjaGFpbjogbnI6JUx1XG4iLCBjaGFpbi0+bnIpOwogCiAJCWlmICh2YWxpZGF0ZV9jaGFpbihjaGFpbiwgZXZlbnQpIDwgMCkgewotCQkJZXByaW50ZigiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsIHNraXBwaW5nIGl0LlxuIik7CisJCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKKwkJCQkgInNraXBwaW5nIGl0LlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xMTQ3LDE2MyArNjQzLDY0IEBACiAJCX0KIAl9CiAKLQlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKLQogCWlmICh0aHJlYWQgPT0gTlVMTCkgewotCQllcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KIAorCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOworCiAJaWYgKGNvbW1fbGlzdCAmJiAhc3RybGlzdF9faGFzX2VudHJ5KGNvbW1fbGlzdCwgdGhyZWFkLT5jb21tKSkKIAkJcmV0dXJuIDA7CiAKIAljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKLQlpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkgewotCQlzaG93ID0gU0hPV19LRVJORUw7Ci0JCWxldmVsID0gJ2snOworCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgY3B1bW9kZSwKKwkJCQkgICBNQVBfX0ZVTkNUSU9OLCBpcCwgJmFsLCBOVUxMKTsKKwkvKgorCSAqIFdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlIGFzIHdlIG1heSBoYXZlIGEgZHNvIHdpdGggbm8gc3ltYm9sIGhpdCB0aGF0CisJICogaGFzIGEgbmFtZSBsb25nZXIgdGhhbiB0aGUgb25lcyB3aXRoIHN5bWJvbHMgc2FtcGxlZC4KKwkgKi8KKwlpZiAoYWwubWFwICYmICFzb3J0X2Rzby5lbGlkZSAmJiAhYWwubWFwLT5kc28tPnNsZW5fY2FsY3VsYXRlZCkKKwkJZHNvX19jYWxjX2NvbF93aWR0aChhbC5tYXAtPmRzbyk7CiAKLQkJZHNvID0ga2VybmVsX2RzbzsKLQotCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOwotCi0JfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUikgewotCi0JCXNob3cgPSBTSE9XX1VTRVI7Ci0JCWxldmVsID0gJy4nOwotCi0JfSBlbHNlIHsKLQkJc2hvdyA9IFNIT1dfSFY7Ci0JCWxldmVsID0gJ0gnOwotCi0JCWRzbyA9IGh5cGVydmlzb3JfZHNvOwotCi0JCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKLQl9Ci0KLQlpZiAoc2hvdyAmIHNob3dfbWFzaykgewotCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSByZXNvbHZlX3N5bWJvbCh0aHJlYWQsICZtYXAsICZkc28sICZpcCk7Ci0KLQkJaWYgKGRzb19saXN0ICYmICghZHNvIHx8ICFkc28tPm5hbWUgfHwKLQkJCQkgIXN0cmxpc3RfX2hhc19lbnRyeShkc29fbGlzdCwgZHNvLT5uYW1lKSkpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAoc3ltX2xpc3QgJiYgKCFzeW0gfHwgIXN0cmxpc3RfX2hhc19lbnRyeShzeW1fbGlzdCwgc3ltLT5uYW1lKSkpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAoaGlzdF9lbnRyeV9fYWRkKHRocmVhZCwgbWFwLCBkc28sIHN5bSwgaXAsIGNoYWluLCBsZXZlbCwgcGVyaW9kKSkgewotCQkJZXByaW50ZigicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JdG90YWwgKz0gcGVyaW9kOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXByb2Nlc3NfbW1hcF9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7Ci0Jc3RydWN0IG1hcCAqbWFwID0gbWFwX19uZXcoJmV2ZW50LT5tbWFwLCBjd2QsIGN3ZGxlbik7Ci0KLQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5tbWFwLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9NTUFQICVkLyVkOiBbJXAoJXApIEAgJXBdOiAlc1xuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCWV2ZW50LT5tbWFwLnBpZCwKLQkJZXZlbnQtPm1tYXAudGlkLAotCQkodm9pZCAqKShsb25nKWV2ZW50LT5tbWFwLnN0YXJ0LAotCQkodm9pZCAqKShsb25nKWV2ZW50LT5tbWFwLmxlbiwKLQkJKHZvaWQgKikobG9uZylldmVudC0+bW1hcC5wZ29mZiwKLQkJZXZlbnQtPm1tYXAuZmlsZW5hbWUpOwotCi0JaWYgKHRocmVhZCA9PSBOVUxMIHx8IG1hcCA9PSBOVUxMKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwlpZiAoZHNvX2xpc3QgJiYKKwkgICAgKCFhbC5tYXAgfHwgIWFsLm1hcC0+ZHNvIHx8CisJICAgICAhKHN0cmxpc3RfX2hhc19lbnRyeShkc29fbGlzdCwgYWwubWFwLT5kc28tPnNob3J0X25hbWUpIHx8CisJICAgICAgIChhbC5tYXAtPmRzby0+c2hvcnRfbmFtZSAhPSBhbC5tYXAtPmRzby0+bG9uZ19uYW1lICYmCisJCXN0cmxpc3RfX2hhc19lbnRyeShkc29fbGlzdCwgYWwubWFwLT5kc28tPmxvbmdfbmFtZSkpKSkpCiAJCXJldHVybiAwOworCisJaWYgKHN5bV9saXN0ICYmIGFsLnN5bSAmJiAhc3RybGlzdF9faGFzX2VudHJ5KHN5bV9saXN0LCBhbC5zeW0tPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCWlmIChoaXN0X2VudHJ5X19hZGQoJmFsLCBjaGFpbiwgcGVyaW9kKSkgeworCQlwcl9kZWJ1ZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCBza2lwcGluZyBldmVudFxuIik7CisJCXJldHVybiAtMTsKIAl9CiAKLQl0aHJlYWRfX2luc2VydF9tYXAodGhyZWFkLCBtYXApOwotCXRvdGFsX21tYXArKzsKKwlldmVudF9fc3RhdHMudG90YWwgKz0gcGVyaW9kOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nlc3NfY29tbV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQogewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCk7CiAKLQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9DT01NOiAlczolZFxuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CisJZHVtcF9wcmludGYoIjogJXM6JWRcbiIsIGV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwKIAkgICAgdGhyZWFkX19zZXRfY29tbV9hZGp1c3QodGhyZWFkLCBldmVudC0+Y29tbS5jb21tKSkgewogCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JdG90YWxfY29tbSsrOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nlc3NfdGFza19ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7Ci0Jc3RydWN0IHRocmVhZCAqcGFyZW50OwotCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0JcGFyZW50ID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5wcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwotCi0JZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEXyVzOiAoJWQ6JWQpOiglZDolZClcbiIsCi0JCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQlldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfRk9SSyA/ICJGT1JLIiA6ICJFWElUIiwKLQkJZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay50aWQsCi0JCWV2ZW50LT5mb3JrLnBwaWQsIGV2ZW50LT5mb3JrLnB0aWQpOwotCi0JLyoKLQkgKiBBIHRocmVhZCBjbG9uZSB3aWxsIGhhdmUgdGhlIHNhbWUgUElEIGZvciBib3RoCi0JICogcGFyZW50IGFuZCBjaGlsZC4KLQkgKi8KLQlpZiAodGhyZWFkID09IHBhcmVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX0VYSVQpCi0JCXJldHVybiAwOwotCi0JaWYgKCF0aHJlYWQgfHwgIXBhcmVudCB8fCB0aHJlYWRfX2ZvcmsodGhyZWFkLCBwYXJlbnQpKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQl0b3RhbF9mb3JrKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9MT1NUOiBpZDolTGQ6IGxvc3Q6JUxkXG4iLAotCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJZXZlbnQtPmxvc3QuaWQsCi0JCWV2ZW50LT5sb3N0Lmxvc3QpOwotCi0JdG90YWxfbG9zdCArPSBldmVudC0+bG9zdC5sb3N0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXByb2Nlc3NfcmVhZF9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZWFkX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7CiAKQEAgLTEzMTksMjM4ICs3MTYsOTEgQEAKIAkJCQkJICAgZXZlbnQtPnJlYWQudmFsdWUpOwogCX0KIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9SRUFEOiAlZCAlZCAlcyAlTHVcbiIsCi0JCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCQlldmVudC0+cmVhZC5waWQsCi0JCQlldmVudC0+cmVhZC50aWQsCi0JCQlhdHRyID8gX19ldmVudF9uYW1lKGF0dHItPnR5cGUsIGF0dHItPmNvbmZpZykKLQkJCSAgICAgOiAiRkFJTCIsCi0JCQlldmVudC0+cmVhZC52YWx1ZSk7CisJZHVtcF9wcmludGYoIjogJWQgJWQgJXMgJUx1XG4iLCBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKKwkJICAgIGF0dHIgPyBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKSA6ICJGQUlMIiwKKwkJICAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQorc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayh1NjQgdHlwZSkKIHsKLQl0cmFjZV9ldmVudChldmVudCk7Ci0KLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgotCQlyZXR1cm4gcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX01NQVA6Ci0JCXJldHVybiBwcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX0NPTU06Ci0JCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX0ZPUks6Ci0JY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gcHJvY2Vzc190YXNrX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwotCi0JY2FzZSBQRVJGX1JFQ09SRF9MT1NUOgotCQlyZXR1cm4gcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwotCi0JY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgotCQlyZXR1cm4gcHJvY2Vzc19yZWFkX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwotCi0JLyoKLQkgKiBXZSBkb250IHByb2Nlc3MgdGhlbSByaWdodCBub3cgYnV0IHRoZXkgYXJlIGZpbmU6Ci0JICovCi0KLQljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgotCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19jbWRfcmVwb3J0KHZvaWQpCi17Ci0JaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7Ci0Jc3RydWN0IHN0YXQgaW5wdXRfc3RhdDsKLQlzdHJ1Y3QgdGhyZWFkICppZGxlOwotCWV2ZW50X3QgKmV2ZW50OwotCXVpbnQzMl90IHNpemU7Ci0JY2hhciAqYnVmOwotCi0JaWRsZSA9IHJlZ2lzdGVyX2lkbGVfdGhyZWFkKCZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0JdGhyZWFkX19jb21tX2FkanVzdChpZGxlKTsKLQotCWlmIChzaG93X3RocmVhZHMpCi0JCXBlcmZfcmVhZF92YWx1ZXNfaW5pdCgmc2hvd190aHJlYWRzX3ZhbHVlcyk7Ci0KLQlpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOwotCWlmIChpbnB1dCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICIgZmFpbGVkIHRvIG9wZW4gZmlsZTogJXMiLCBpbnB1dF9uYW1lKTsKLQkJaWYgKCFzdHJjbXAoaW5wdXRfbmFtZSwgInBlcmYuZGF0YSIpKQotCQkJZnByaW50ZihzdGRlcnIsICIgICh0cnkgJ3BlcmYgcmVjb3JkJyBmaXJzdCkiKTsKLQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwotCQlleGl0KC0xKTsKLQl9Ci0KLQlyZXQgPSBmc3RhdChpbnB1dCwgJmlucHV0X3N0YXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOwotCQlleGl0KC0xKTsKLQl9Ci0KLQlpZiAoIWZvcmNlICYmIGlucHV0X3N0YXQuc3RfdWlkICYmIChpbnB1dF9zdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290XG4iLCBpbnB1dF9uYW1lKTsKLQkJZXhpdCgtMSk7Ci0JfQotCi0JaWYgKCFpbnB1dF9zdGF0LnN0X3NpemUpIHsKLQkJZnByaW50ZihzdGRlcnIsICJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKLQkJZXhpdCgwKTsKLQl9Ci0KLQloZWFkZXIgPSBwZXJmX2hlYWRlcl9fcmVhZChpbnB1dCk7Ci0JaGVhZCA9IGhlYWRlci0+ZGF0YV9vZmZzZXQ7Ci0KLQlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOworCXNhbXBsZV90eXBlID0gdHlwZTsKIAogCWlmICghKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkgewogCQlpZiAoc29ydF9faGFzX3BhcmVudCkgewogCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtLXNvcnQgcGFyZW50LCBidXQgbm8iCiAJCQkJCSIgY2FsbGNoYWluIGRhdGEuIERpZCB5b3UgY2FsbCIKIAkJCQkJIiBwZXJmIHJlY29yZCB3aXRob3V0IC1nP1xuIik7Ci0JCQlleGl0KC0xKTsKKwkJCXJldHVybiAtMTsKIAkJfQogCQlpZiAoY2FsbGNoYWluKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgInNlbGVjdGVkIC1nIGJ1dCBubyBjYWxsY2hhaW4gZGF0YS4iCiAJCQkJCSIgRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkIHdpdGhvdXQiCiAJCQkJCSIgLWc/XG4iKTsKLQkJCWV4aXQoLTEpOworCQkJcmV0dXJuIC0xOwogCQl9CiAJfSBlbHNlIGlmIChjYWxsY2hhaW5fcGFyYW0ubW9kZSAhPSBDSEFJTl9OT05FICYmICFjYWxsY2hhaW4pIHsKIAkJCWNhbGxjaGFpbiA9IDE7CiAJCQlpZiAocmVnaXN0ZXJfY2FsbGNoYWluX3BhcmFtKCZjYWxsY2hhaW5fcGFyYW0pIDwgMCkgewogCQkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVnaXN0ZXIgY2FsbGNoYWluIgogCQkJCQkJIiBwYXJhbXNcbiIpOwotCQkJCWV4aXQoLTEpOworCQkJCXJldHVybiAtMTsKIAkJCX0KIAl9CiAKLQlpZiAobG9hZF9rZXJuZWwoKSA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gbG9hZCBrZXJuZWwgc3ltYm9scyIpOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCX0KKwlyZXR1cm4gMDsKK30KIAotCWlmICghZnVsbF9wYXRocykgewotCQlpZiAoZ2V0Y3dkKF9fY3dkLCBzaXplb2YoX19jd2QpKSA9PSBOVUxMKSB7Ci0JCQlwZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iik7Ci0JCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCQl9Ci0JCWN3ZGxlbiA9IHN0cmxlbihjd2QpOwotCX0gZWxzZSB7Ci0JCWN3ZCA9IE5VTEw7Ci0JCWN3ZGxlbiA9IDA7Ci0JfQorc3RhdGljIHN0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciBmaWxlX2hhbmRsZXIgPSB7CisJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLnByb2Nlc3NfbW1hcF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCisJLnByb2Nlc3NfY29tbV9ldmVudAk9IHByb2Nlc3NfY29tbV9ldmVudCwKKwkucHJvY2Vzc19leGl0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkucHJvY2Vzc19mb3JrX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkucHJvY2Vzc19sb3N0X2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfbG9zdCwKKwkucHJvY2Vzc19yZWFkX2V2ZW50CT0gcHJvY2Vzc19yZWFkX2V2ZW50LAorCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorfTsKIAotCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCW9mZnNldCArPSBzaGlmdDsKLQloZWFkIC09IHNoaWZ0OwogCi1yZW1hcDoKLQlidWYgPSAoY2hhciAqKW1tYXAoTlVMTCwgcGFnZV9zaXplICogbW1hcF93aW5kb3csIFBST1RfUkVBRCwKLQkJCSAgIE1BUF9TSEFSRUQsIGlucHV0LCBvZmZzZXQpOwotCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBtbWFwIGZpbGUiKTsKLQkJZXhpdCgtMSk7Ci0JfQorc3RhdGljIGludCBfX2NtZF9yZXBvcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkICppZGxlOworCWludCByZXQ7CiAKLW1vcmU6Ci0JZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKKwlpZGxlID0gcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwl0aHJlYWRfX2NvbW1fYWRqdXN0KGlkbGUpOwogCi0Jc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKLQlpZiAoIXNpemUpCi0JCXNpemUgPSA4OworCWlmIChzaG93X3RocmVhZHMpCisJCXBlcmZfcmVhZF92YWx1ZXNfaW5pdCgmc2hvd190aHJlYWRzX3ZhbHVlcyk7CiAKLQlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewotCQlpbnQgbXVubWFwX3JldDsKKwlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKIAotCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwlyZXQgPSBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLCBmb3JjZSwKKwkJCQkgICAgICBmdWxsX3BhdGhzLCAmZXZlbnRfX2N3ZGxlbiwgJmV2ZW50X19jd2QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KTsKLQkJYXNzZXJ0KG11bm1hcF9yZXQgPT0gMCk7Ci0KLQkJb2Zmc2V0ICs9IHNoaWZ0OwotCQloZWFkIC09IHNoaWZ0OwotCQlnb3RvIHJlbWFwOwotCX0KLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0KLQlkdW1wX3ByaW50ZigiXG4lcCBbJXBdOiBldmVudDogJWRcbiIsCi0JCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSh2b2lkICopKGxvbmcpZXZlbnQtPmhlYWRlci5zaXplLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKLQotCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpIDwgMCkgewotCi0JCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQkJdG90YWxfdW5rbm93bisrOwotCi0JCS8qCi0JCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCi0JCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgotCQkgKi8KLQotCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQotCQkJaGVhZCAmPSB+N1VMTDsKLQotCQlzaXplID0gODsKLQl9Ci0KLQloZWFkICs9IHNpemU7Ci0KLQlpZiAob2Zmc2V0ICsgaGVhZCA+PSBoZWFkZXItPmRhdGFfb2Zmc2V0ICsgaGVhZGVyLT5kYXRhX3NpemUpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkIDwgKHVuc2lnbmVkIGxvbmcpaW5wdXRfc3RhdC5zdF9zaXplKQotCQlnb3RvIG1vcmU7Ci0KLWRvbmU6Ci0JcmMgPSBFWElUX1NVQ0NFU1M7Ci0JY2xvc2UoaW5wdXQpOwotCi0JZHVtcF9wcmludGYoIiAgICAgIElQIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsKTsKLQlkdW1wX3ByaW50ZigiICAgIG1tYXAgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbW1hcCk7Ci0JZHVtcF9wcmludGYoIiAgICBjb21tIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX2NvbW0pOwotCWR1bXBfcHJpbnRmKCIgICAgZm9yayBldmVudHM6ICUxMGxkXG4iLCB0b3RhbF9mb3JrKTsKLQlkdW1wX3ByaW50ZigiICAgIGxvc3QgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbG9zdCk7Ci0JZHVtcF9wcmludGYoIiB1bmtub3duIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX3Vua25vd24pOwotCi0JaWYgKGR1bXBfdHJhY2UpCisJaWYgKGR1bXBfdHJhY2UpIHsKKwkJZXZlbnRfX3ByaW50X3RvdGFscygpOwogCQlyZXR1cm4gMDsKKwl9CiAKLQlpZiAodmVyYm9zZSA+PSAzKQotCQl0aHJlYWRzX19mcHJpbnRmKHN0ZG91dCwgJnRocmVhZHMpOworCWlmICh2ZXJib3NlID4gMykKKwkJdGhyZWFkc19fZnByaW50ZihzdGRvdXQpOwogCi0JaWYgKHZlcmJvc2UgPj0gMikKKwlpZiAodmVyYm9zZSA+IDIpCiAJCWRzb3NfX2ZwcmludGYoc3Rkb3V0KTsKIAogCWNvbGxhcHNlX19yZXNvcnQoKTsKLQlvdXRwdXRfX3Jlc29ydCh0b3RhbCk7Ci0Jb3V0cHV0X19mcHJpbnRmKHN0ZG91dCwgdG90YWwpOworCW91dHB1dF9fcmVzb3J0KGV2ZW50X19zdGF0cy50b3RhbCk7CisJb3V0cHV0X19mcHJpbnRmKHN0ZG91dCwgZXZlbnRfX3N0YXRzLnRvdGFsKTsKIAogCWlmIChzaG93X3RocmVhZHMpCiAJCXBlcmZfcmVhZF92YWx1ZXNfZGVzdHJveSgmc2hvd190aHJlYWRzX3ZhbHVlcyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMTYwNiw3ICs4NTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0geworLy9zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0geworY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0gewogCSJwZXJmIHJlcG9ydCBbPG9wdGlvbnM+XSA8Y29tbWFuZD4iLAogCU5VTEwKIH07CkBAIC0xNjE4LDkgKzg2OSwxMCBAQAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAogCU9QVF9CT09MRUFOKCdEJywgImR1bXAtcmF3LXRyYWNlIiwgJmR1bXBfdHJhY2UsCiAJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKLQlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmdm1saW51eF9uYW1lLCAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCisJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwKKwkJICAgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCi0JT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZtb2R1bGVzLAorCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmc3ltYm9sX2NvbmYudXNlX21vZHVsZXMsCiAJCSAgICAibG9hZCBtb2R1bGUgc3ltYm9scyAtIFdBUk5JTkc6IHVzZSBvbmx5IHdpdGggLWsgYW5kIExJVkUga2VybmVsIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAic2hvdy1uci1zYW1wbGVzIiwgJnNob3dfbnJfc2FtcGxlcywKIAkJICAgICJTaG93IGEgY29sdW1uIHdpdGggdGhlIG51bWJlciBvZiBzYW1wbGVzIiksCkBAIC0xNjkwLDkgKzk0Miw4IEBACiAKIGludCBjbWRfcmVwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlzeW1ib2xfX2luaXQoKTsKLQotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJaWYgKHN5bWJvbF9faW5pdCgmc3ltYm9sX2NvbmYpIDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcmVwb3J0X3VzYWdlLCAwKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCBlYTljMTVjLi4yNmI3ODJmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKIAogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KQEAgLTIwLDE0ICsyMSw2IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogCiBzdGF0aWMgY2hhcgkJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7Ci1zdGF0aWMgaW50CQkJaW5wdXQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwkJcGFnZV9zaXplOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJCW1tYXBfd2luZG93ID0gMzI7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCQl0b3RhbF9jb21tID0gMDsKLQotc3RhdGljIHN0cnVjdCByYl9yb290CQl0aHJlYWRzOwotc3RhdGljIHN0cnVjdCB0aHJlYWQJCSpsYXN0X21hdGNoOwogCiBzdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyCSpoZWFkZXI7CiBzdGF0aWMgdTY0CQkJc2FtcGxlX3R5cGU7CkBAIC0zNSwxMSArMjgsMTEgQEAKIHN0YXRpYyBjaGFyCQkJZGVmYXVsdF9zb3J0X29yZGVyW10gPSAiYXZnLCBtYXgsIHN3aXRjaCwgcnVudGltZSI7CiBzdGF0aWMgY2hhcgkJCSpzb3J0X29yZGVyID0gZGVmYXVsdF9zb3J0X29yZGVyOwogCitzdGF0aWMgaW50CQkJcHJvZmlsZV9jcHUgPSAtMTsKKwogI2RlZmluZSBQUl9TRVRfTkFNRQkJMTUgICAgICAgICAgICAgICAvKiBTZXQgcHJvY2VzcyBuYW1lICovCiAjZGVmaW5lIE1BWF9DUFVTCQk0MDk2CiAKLSNkZWZpbmUgQlVHX09OKHgpCQlhc3NlcnQoISh4KSkKLQogc3RhdGljIHU2NAkJCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZDsKIHN0YXRpYyB1NjQJCQlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZDsKIApAQCAtNzQsNiArNjcsNyBAQAogCVNDSEVEX0VWRU5UX1JVTiwKIAlTQ0hFRF9FVkVOVF9TTEVFUCwKIAlTQ0hFRF9FVkVOVF9XQUtFVVAsCisJU0NIRURfRVZFTlRfTUlHUkFUSU9OLAogfTsKIAogc3RydWN0IHNjaGVkX2F0b20gewpAQCAtMjI2LDcgKzIyMCw3IEBACiBzdGF0aWMgc3RydWN0IHNjaGVkX2F0b20gKgogZ2V0X25ld19ldmVudChzdHJ1Y3QgdGFza19kZXNjICp0YXNrLCB1NjQgdGltZXN0YW1wKQogewotCXN0cnVjdCBzY2hlZF9hdG9tICpldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7CisJc3RydWN0IHNjaGVkX2F0b20gKmV2ZW50ID0gemFsbG9jKHNpemVvZigqZXZlbnQpKTsKIAl1bnNpZ25lZCBsb25nIGlkeCA9IHRhc2stPm5yX2V2ZW50czsKIAlzaXplX3Qgc2l6ZTsKIApAQCAtMjk0LDcgKzI4OCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl3YWtlZV9ldmVudC0+d2FpdF9zZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKCp3YWtlZV9ldmVudC0+d2FpdF9zZW0pKTsKKwl3YWtlZV9ldmVudC0+d2FpdF9zZW0gPSB6YWxsb2Moc2l6ZW9mKCp3YWtlZV9ldmVudC0+d2FpdF9zZW0pKTsKIAlzZW1faW5pdCh3YWtlZV9ldmVudC0+d2FpdF9zZW0sIDAsIDApOwogCXdha2VlX2V2ZW50LT5zcGVjaWZpY193YWl0ID0gMTsKIAlldmVudC0+d2FpdF9zZW0gPSB3YWtlZV9ldmVudC0+d2FpdF9zZW07CkBAIC0zMjQsNyArMzE4LDcgQEAKIAlpZiAodGFzaykKIAkJcmV0dXJuIHRhc2s7CiAKLQl0YXNrID0gY2FsbG9jKDEsIHNpemVvZigqdGFzaykpOworCXRhc2sgPSB6YWxsb2Moc2l6ZW9mKCp0YXNrKSk7CiAJdGFzay0+cGlkID0gcGlkOwogCXRhc2stPm5yID0gbnJfdGFza3M7CiAJc3RyY3B5KHRhc2stPmNvbW0sIGNvbW0pOwpAQCAtMzk4LDYgKzM5Miw4IEBACiAJCQkJcmV0ID0gc2VtX3Bvc3QoYXRvbS0+d2FpdF9zZW0pOwogCQkJQlVHX09OKHJldCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ0hFRF9FVkVOVF9NSUdSQVRJT046CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUJVR19PTigxKTsKIAl9CkBAIC02MzIsMjkgKzYyOCw2IEBACiAJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCi17Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkOwotCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0KLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogcGVyZl9ldmVudF9jb21tOiAlczolZFxuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwgfHwKLQkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgcGVyZl9ldmVudF9jb21tLCBza2lwcGluZyBldmVudC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXRvdGFsX2NvbW0rKzsKLQotCXJldHVybiAwOwotfQotCi0KIHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlIHsKIAl1MzIgc2l6ZTsKIAljaGFyIGRhdGFbMF07CkBAIC03NDUsNiArNzE4LDIyIEBACiAJdTMyIGNoaWxkX3BpZDsKIH07CiAKK3N0cnVjdCB0cmFjZV9taWdyYXRlX3Rhc2tfZXZlbnQgeworCXUzMiBzaXplOworCisJdTE2IGNvbW1vbl90eXBlOworCXU4IGNvbW1vbl9mbGFnczsKKwl1OCBjb21tb25fcHJlZW1wdF9jb3VudDsKKwl1MzIgY29tbW9uX3BpZDsKKwl1MzIgY29tbW9uX3RnaWQ7CisKKwljaGFyIGNvbW1bMTZdOworCXUzMiBwaWQ7CisKKwl1MzIgcHJpbzsKKwl1MzIgY3B1OworfTsKKwogc3RydWN0IHRyYWNlX3NjaGVkX2hhbmRsZXIgewogCXZvaWQgKCpzd2l0Y2hfZXZlbnQpKHN0cnVjdCB0cmFjZV9zd2l0Y2hfZXZlbnQgKiwKIAkJCSAgICAgc3RydWN0IGV2ZW50ICosCkBAIC03NjksNiArNzU4LDEyIEBACiAJCQkgICBpbnQgY3B1LAogCQkJICAgdTY0IHRpbWVzdGFtcCwKIAkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7CisKKwl2b2lkICgqbWlncmF0ZV90YXNrX2V2ZW50KShzdHJ1Y3QgdHJhY2VfbWlncmF0ZV90YXNrX2V2ZW50ICosCisJCQkgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgIGludCBjcHUsCisJCQkgICB1NjQgdGltZXN0YW1wLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKIH07CiAKIApAQCAtOTQxLDkgKzkzNiw3IEBACiAKIHN0YXRpYyB2b2lkIHRocmVhZF9hdG9tc19pbnNlcnQoc3RydWN0IHRocmVhZCAqdGhyZWFkKQogewotCXN0cnVjdCB3b3JrX2F0b21zICphdG9tczsKLQotCWF0b21zID0gY2FsbG9jKHNpemVvZigqYXRvbXMpLCAxKTsKKwlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXMgPSB6YWxsb2Moc2l6ZW9mKCphdG9tcykpOwogCWlmICghYXRvbXMpCiAJCWRpZSgiTm8gbWVtb3J5Iik7CiAKQEAgLTk3NSw5ICs5NjgsNyBAQAogCQkgICAgY2hhciBydW5fc3RhdGUsCiAJCSAgICB1NjQgdGltZXN0YW1wKQogewotCXN0cnVjdCB3b3JrX2F0b20gKmF0b207Ci0KLQlhdG9tID0gY2FsbG9jKHNpemVvZigqYXRvbSksIDEpOworCXN0cnVjdCB3b3JrX2F0b20gKmF0b20gPSB6YWxsb2Moc2l6ZW9mKCphdG9tKSk7CiAJaWYgKCFhdG9tKQogCQlkaWUoIk5vbiBtZW1vcnkiKTsKIApAQCAtMTA1OCw4ICsxMDQ5LDggQEAKIAkJZGllKCJobSwgZGVsdGE6ICVMZCA8IDAgP1xuIiwgZGVsdGEpOwogCiAKLQlzY2hlZF9vdXQgPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+cHJldl9waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7Ci0Jc2NoZWRfaW4gPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+bmV4dF9waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJc2NoZWRfb3V0ID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKKwlzY2hlZF9pbiA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCk7CiAKIAlvdXRfZXZlbnRzID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCBzY2hlZF9vdXQsICZjbXBfcGlkKTsKIAlpZiAoIW91dF9ldmVudHMpIHsKQEAgLTEwOTIsMTMgKzEwODMsMTAgQEAKIAkJICAgICB1NjQgdGltZXN0YW1wLAogCQkgICAgIHN0cnVjdCB0aHJlYWQgKnRoaXNfdGhyZWFkIF9fdXNlZCkKIHsKLQlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXM7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcocnVudGltZV9ldmVudC0+cGlkKTsKKwlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHRocmVhZCwgJmNtcF9waWQpOwogCiAJQlVHX09OKGNwdSA+PSBNQVhfQ1BVUyB8fCBjcHUgPCAwKTsKLQotCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcocnVudGltZV9ldmVudC0+cGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwotCWF0b21zID0gdGhyZWFkX2F0b21zX3NlYXJjaCgmYXRvbV9yb290LCB0aHJlYWQsICZjbXBfcGlkKTsKIAlpZiAoIWF0b21zKSB7CiAJCXRocmVhZF9hdG9tc19pbnNlcnQodGhyZWFkKTsKIAkJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHRocmVhZCwgJmNtcF9waWQpOwpAQCAtMTEyNSw3ICsxMTEzLDcgQEAKIAlpZiAoIXdha2V1cF9ldmVudC0+c3VjY2VzcykKIAkJcmV0dXJuOwogCi0Jd2FrZWUgPSB0aHJlYWRzX19maW5kbmV3KHdha2V1cF9ldmVudC0+cGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCXdha2VlID0gdGhyZWFkc19fZmluZG5ldyh3YWtldXBfZXZlbnQtPnBpZCk7CiAJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIHdha2VlLCAmY21wX3BpZCk7CiAJaWYgKCFhdG9tcykgewogCQl0aHJlYWRfYXRvbXNfaW5zZXJ0KHdha2VlKTsKQEAgLTExMzksNyArMTEyNywxMiBAQAogCiAJYXRvbSA9IGxpc3RfZW50cnkoYXRvbXMtPndvcmtfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya19hdG9tLCBsaXN0KTsKIAotCWlmIChhdG9tLT5zdGF0ZSAhPSBUSFJFQURfU0xFRVBJTkcpCisJLyoKKwkgKiBZb3UgV0lMTCBiZSBtaXNzaW5nIGV2ZW50cyBpZiB5b3UndmUgcmVjb3JkZWQgb25seQorCSAqIG9uZSBDUFUsIG9yIGFyZSBvbmx5IGxvb2tpbmcgYXQgb25seSBvbmUsIHNvIGRvbid0CisJICogbWFrZSB1c2VsZXNzIG5vaXNlLgorCSAqLworCWlmIChwcm9maWxlX2NwdSA9PSAtMSAmJiBhdG9tLT5zdGF0ZSAhPSBUSFJFQURfU0xFRVBJTkcpCiAJCW5yX3N0YXRlX21hY2hpbmVfYnVncysrOwogCiAJbnJfdGltZXN0YW1wcysrOwpAQCAtMTE1MiwxMSArMTE0NSw1MSBAQAogCWF0b20tPndha2VfdXBfdGltZSA9IHRpbWVzdGFtcDsKIH0KIAorc3RhdGljIHZvaWQKK2xhdGVuY3lfbWlncmF0ZV90YXNrX2V2ZW50KHN0cnVjdCB0cmFjZV9taWdyYXRlX3Rhc2tfZXZlbnQgKm1pZ3JhdGVfdGFza19ldmVudCwKKwkJICAgICBzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkgICAgIGludCBjcHUgX191c2VkLAorCQkgICAgIHU2NCB0aW1lc3RhbXAsCisJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3Qgd29ya19hdG9tcyAqYXRvbXM7CisJc3RydWN0IHdvcmtfYXRvbSAqYXRvbTsKKwlzdHJ1Y3QgdGhyZWFkICptaWdyYW50OworCisJLyoKKwkgKiBPbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgbWlncmF0aW9uIHdoZW4gcHJvZmlsaW5nIG9uZSBDUFUuCisJICovCisJaWYgKHByb2ZpbGVfY3B1ID09IC0xKQorCQlyZXR1cm47CisKKwltaWdyYW50ID0gdGhyZWFkc19fZmluZG5ldyhtaWdyYXRlX3Rhc2tfZXZlbnQtPnBpZCk7CisJYXRvbXMgPSB0aHJlYWRfYXRvbXNfc2VhcmNoKCZhdG9tX3Jvb3QsIG1pZ3JhbnQsICZjbXBfcGlkKTsKKwlpZiAoIWF0b21zKSB7CisJCXRocmVhZF9hdG9tc19pbnNlcnQobWlncmFudCk7CisJCXJlZ2lzdGVyX3BpZChtaWdyYW50LT5waWQsIG1pZ3JhbnQtPmNvbW0pOworCQlhdG9tcyA9IHRocmVhZF9hdG9tc19zZWFyY2goJmF0b21fcm9vdCwgbWlncmFudCwgJmNtcF9waWQpOworCQlpZiAoIWF0b21zKQorCQkJZGllKCJtaWdyYXRpb24tZXZlbnQ6IEludGVybmFsIHRyZWUgZXJyb3IiKTsKKwkJYWRkX3NjaGVkX291dF9ldmVudChhdG9tcywgJ1InLCB0aW1lc3RhbXApOworCX0KKworCUJVR19PTihsaXN0X2VtcHR5KCZhdG9tcy0+d29ya19saXN0KSk7CisKKwlhdG9tID0gbGlzdF9lbnRyeShhdG9tcy0+d29ya19saXN0LnByZXYsIHN0cnVjdCB3b3JrX2F0b20sIGxpc3QpOworCWF0b20tPnNjaGVkX2luX3RpbWUgPSBhdG9tLT5zY2hlZF9vdXRfdGltZSA9IGF0b20tPndha2VfdXBfdGltZSA9IHRpbWVzdGFtcDsKKworCW5yX3RpbWVzdGFtcHMrKzsKKworCWlmIChhdG9tLT5zY2hlZF9vdXRfdGltZSA+IHRpbWVzdGFtcCkKKwkJbnJfdW5vcmRlcmVkX3RpbWVzdGFtcHMrKzsKK30KKwogc3RhdGljIHN0cnVjdCB0cmFjZV9zY2hlZF9oYW5kbGVyIGxhdF9vcHMgID0gewogCS53YWtldXBfZXZlbnQJCT0gbGF0ZW5jeV93YWtldXBfZXZlbnQsCiAJLnN3aXRjaF9ldmVudAkJPSBsYXRlbmN5X3N3aXRjaF9ldmVudCwKIAkucnVudGltZV9ldmVudAkJPSBsYXRlbmN5X3J1bnRpbWVfZXZlbnQsCiAJLmZvcmtfZXZlbnQJCT0gbGF0ZW5jeV9mb3JrX2V2ZW50LAorCS5taWdyYXRlX3Rhc2tfZXZlbnQJPSBsYXRlbmN5X21pZ3JhdGVfdGFza19ldmVudCwKIH07CiAKIHN0YXRpYyB2b2lkIG91dHB1dF9sYXRfdGhyZWFkKHN0cnVjdCB3b3JrX2F0b21zICp3b3JrX2xpc3QpCkBAIC0xMjg3LDcgKzEzMjAsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHNvcnRfbGlzdCk7CiAKLXN0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCitzdGF0aWMgaW50IHNvcnRfZGltZW5zaW9uX19hZGQoY29uc3QgY2hhciAqdG9rLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCWludCBpOwogCkBAIC0xMzg1LDggKzE0MTgsOCBAQAogCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAotCXNjaGVkX291dCA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5wcmV2X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQlzY2hlZF9pbiA9IHRocmVhZHNfX2ZpbmRuZXcoc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlzY2hlZF9vdXQgPSB0aHJlYWRzX19maW5kbmV3KHN3aXRjaF9ldmVudC0+cHJldl9waWQpOworCXNjaGVkX2luID0gdGhyZWFkc19fZmluZG5ldyhzd2l0Y2hfZXZlbnQtPm5leHRfcGlkKTsKIAogCWN1cnJfdGhyZWFkW3RoaXNfY3B1XSA9IHNjaGVkX2luOwogCkBAIC0xNTE3LDYgKzE1NTAsMjYgQEAKIH0KIAogc3RhdGljIHZvaWQKK3Byb2Nlc3Nfc2NoZWRfbWlncmF0ZV90YXNrX2V2ZW50KHN0cnVjdCByYXdfZXZlbnRfc2FtcGxlICpyYXcsCisJCQkgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJICAgaW50IGNwdSBfX3VzZWQsCisJCQkgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IHRyYWNlX21pZ3JhdGVfdGFza19ldmVudCBtaWdyYXRlX3Rhc2tfZXZlbnQ7CisKKwlGSUxMX0NPTU1PTl9GSUVMRFMobWlncmF0ZV90YXNrX2V2ZW50LCBldmVudCwgcmF3LT5kYXRhKTsKKworCUZJTExfQVJSQVkobWlncmF0ZV90YXNrX2V2ZW50LCBjb21tLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKG1pZ3JhdGVfdGFza19ldmVudCwgcGlkLCBldmVudCwgcmF3LT5kYXRhKTsKKwlGSUxMX0ZJRUxEKG1pZ3JhdGVfdGFza19ldmVudCwgcHJpbywgZXZlbnQsIHJhdy0+ZGF0YSk7CisJRklMTF9GSUVMRChtaWdyYXRlX3Rhc2tfZXZlbnQsIGNwdSwgZXZlbnQsIHJhdy0+ZGF0YSk7CisKKwlpZiAodHJhY2VfaGFuZGxlci0+bWlncmF0ZV90YXNrX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5taWdyYXRlX3Rhc2tfZXZlbnQoJm1pZ3JhdGVfdGFza19ldmVudCwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworfQorCitzdGF0aWMgdm9pZAogcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnRfdCAqcmF3X2V2ZW50IF9fdXNlZCwgdm9pZCAqbW9yZV9kYXRhLAogCQkgIGludCBjcHUsIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKIHsKQEAgLTE1MzksMjMgKzE1OTIsMjMgQEAKIAkJcHJvY2Vzc19zY2hlZF9mb3JrX2V2ZW50KHJhdywgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOwogCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAic2NoZWRfcHJvY2Vzc19leGl0IikpCiAJCXByb2Nlc3Nfc2NoZWRfZXhpdF9ldmVudChldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsICJzY2hlZF9taWdyYXRlX3Rhc2siKSkKKwkJcHJvY2Vzc19zY2hlZF9taWdyYXRlX3Rhc2tfZXZlbnQocmF3LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQorc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCkKIHsKLQljaGFyIGxldmVsOwotCWludCBzaG93ID0gMDsKLQlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAl1NjQgaXAgPSBldmVudC0+aXAuaXA7CiAJdTY0IHRpbWVzdGFtcCA9IC0xOwogCXUzMiBjcHUgPSAtMTsKIAl1NjQgcGVyaW9kID0gMTsKIAl2b2lkICptb3JlX2RhdGEgPSBldmVudC0+aXAuX19tb3JlX2RhdGE7Ci0JaW50IGNwdW1vZGU7CiAKLQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5pcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKQorCQlyZXR1cm4gMDsKKworCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CiAKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7CiAJCXRpbWVzdGFtcCA9ICoodTY0ICopbW9yZV9kYXRhOwpAQCAtMTU3MywxNzcgKzE2MjYsNjQgQEAKIAkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOwogCX0KIAotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCiAJCWV2ZW50LT5oZWFkZXIubWlzYywKIAkJZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLnRpZCwKIAkJKHZvaWQgKikobG9uZylpcCwKIAkJKGxvbmcgbG9uZylwZXJpb2QpOwogCisJaWYgKHRocmVhZCA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCSBldmVudC0+aGVhZGVyLnR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCiAJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CiAKLQlpZiAodGhyZWFkID09IE5VTEwpIHsKLQkJZXByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChwcm9maWxlX2NwdSAhPSAtMSAmJiBwcm9maWxlX2NwdSAhPSAoaW50KSBjcHUpCisJCXJldHVybiAwOwogCi0JY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwotCi0JaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKLQkJc2hvdyA9IFNIT1dfS0VSTkVMOwotCQlsZXZlbCA9ICdrJzsKLQotCQlkc28gPSBrZXJuZWxfZHNvOwotCi0JCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzby0+bmFtZSk7Ci0KLQl9IGVsc2UgaWYgKGNwdW1vZGUgPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKSB7Ci0KLQkJc2hvdyA9IFNIT1dfVVNFUjsKLQkJbGV2ZWwgPSAnLic7Ci0KLQl9IGVsc2UgewotCQlzaG93ID0gU0hPV19IVjsKLQkJbGV2ZWwgPSAnSCc7Ci0KLQkJZHNvID0gaHlwZXJ2aXNvcl9kc287Ci0KLQkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiBbaHlwZXJ2aXNvcl1cbiIpOwotCX0KLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykKLQkJcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnQsIG1vcmVfZGF0YSwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CisJcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnQsIG1vcmVfZGF0YSwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50IF9fdXNlZCkKIHsKLQl0cmFjZV9ldmVudChldmVudCk7CisJbnJfbG9zdF9jaHVua3MrKzsKKwlucl9sb3N0X2V2ZW50cyArPSBldmVudC0+bG9zdC5sb3N0OwogCi0JbnJfZXZlbnRzKys7Ci0Jc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQljYXNlIFBFUkZfUkVDT1JEX01NQVA6Ci0JCXJldHVybiAwOwotCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKLQkJbnJfbG9zdF9jaHVua3MrKzsKLQkJbnJfbG9zdF9ldmVudHMgKz0gZXZlbnQtPmxvc3QubG9zdDsKLQkJcmV0dXJuIDA7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIFBFUkZfUkVDT1JEX0NPTU06Ci0JCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CitzdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQoreworCXNhbXBsZV90eXBlID0gdHlwZTsKIAotCWNhc2UgUEVSRl9SRUNPUkRfRVhJVCAuLi4gUEVSRl9SRUNPUkRfUkVBRDoKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKLQkJcmV0dXJuIHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpOwotCi0JY2FzZSBQRVJGX1JFQ09SRF9NQVg6Ci0JZGVmYXVsdDoKKwlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiTm8gdHJhY2Ugc2FtcGxlIHRvIHJlYWQuIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCAiCisJCQkid2l0aG91dCAtUj8iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHBlcmZfZmlsZV9oYW5kbGVyIGZpbGVfaGFuZGxlciA9IHsKKwkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkucHJvY2Vzc19jb21tX2V2ZW50CT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkucHJvY2Vzc19sb3N0X2V2ZW50CT0gcHJvY2Vzc19sb3N0X2V2ZW50LAorCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorfTsKKwogc3RhdGljIGludCByZWFkX2V2ZW50cyh2b2lkKQogewotCWludCByZXQsIHJjID0gRVhJVF9GQUlMVVJFOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGhlYWQgPSAwOwotCXN0cnVjdCBzdGF0IHBlcmZfc3RhdDsKLQlldmVudF90ICpldmVudDsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgKmJ1ZjsKKwlyZWdpc3Rlcl9pZGxlX3RocmVhZCgpOworCXJlZ2lzdGVyX3BlcmZfZmlsZV9oYW5kbGVyKCZmaWxlX2hhbmRsZXIpOwogCi0JdHJhY2VfcmVwb3J0KCk7Ci0JcmVnaXN0ZXJfaWRsZV90aHJlYWQoJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQotCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0IDwgMCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKLQkJZXhpdCgtMSk7Ci0JfQotCi0JcmV0ID0gZnN0YXQoaW5wdXQsICZwZXJmX3N0YXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOwotCQlleGl0KC0xKTsKLQl9Ci0KLQlpZiAoIXBlcmZfc3RhdC5zdF9zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCWV4aXQoMCk7Ci0JfQotCWhlYWRlciA9IHBlcmZfaGVhZGVyX19yZWFkKGlucHV0KTsKLQloZWFkID0gaGVhZGVyLT5kYXRhX29mZnNldDsKLQlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOwotCi0JaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKQotCQlkaWUoIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgotCQkgICAgIndpdGhvdXQgLVI/Iik7Ci0KLQlpZiAobG9hZF9rZXJuZWwoKSA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gbG9hZCBrZXJuZWwgc3ltYm9scyIpOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCX0KLQotcmVtYXA6Ci0JYnVmID0gKGNoYXIgKiltbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93LCBQUk9UX1JFQUQsCi0JCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKLQlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gbW1hcCBmaWxlIik7Ci0JCWV4aXQoLTEpOwotCX0KLQotbW9yZToKLQlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOwotCi0Jc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKLQlpZiAoIXNpemUpCi0JCXNpemUgPSA4OwotCi0JaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogbW1hcF93aW5kb3cpIHsKLQkJdW5zaWduZWQgbG9uZyBzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQkJaW50IHJlczsKLQotCQlyZXMgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChyZXMgPT0gMCk7Ci0KLQkJb2Zmc2V0ICs9IHNoaWZ0OwotCQloZWFkIC09IHNoaWZ0OwotCQlnb3RvIHJlbWFwOwotCX0KLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0KLQotCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpIDwgMCkgewotCi0JCS8qCi0JCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCi0JCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgotCQkgKi8KLQotCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQotCQkJaGVhZCAmPSB+N1VMTDsKLQotCQlzaXplID0gODsKLQl9Ci0KLQloZWFkICs9IHNpemU7Ci0KLQlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKXBlcmZfc3RhdC5zdF9zaXplKQotCQlnb3RvIG1vcmU7Ci0KLQlyYyA9IEVYSVRfU1VDQ0VTUzsKLQljbG9zZShpbnB1dCk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCisJCQkJICAgICAgICZldmVudF9fY3dkbGVuLCAmZXZlbnRfX2N3ZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2JhZF9ldmVudHModm9pZCkKQEAgLTE4ODMsNiArMTgyMyw4IEBACiAJCSAgICJzb3J0IGJ5IGtleShzKTogcnVudGltZSwgc3dpdGNoLCBhdmcsIG1heCIpLAogCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfSU5URUdFUignQycsICJDUFUiLCAmcHJvZmlsZV9jcHUsCisJCSAgICAiQ1BVIHRvIHByb2ZpbGUgb24iKSwKIAlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAogCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCiAJT1BUX0VORCgpCkBAIC0xOTE3LDcgKzE4NTksNyBAQAogCiAJZnJlZShzdHIpOwogCi0Jc29ydF9kaW1lbnNpb25fX2FkZCgoY2hhciAqKSJwaWQiLCAmY21wX3BpZCk7CisJc29ydF9kaW1lbnNpb25fX2FkZCgicGlkIiwgJmNtcF9waWQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKQEAgLTE5NjAsOCArMTkwMiw3IEBACiAKIGludCBjbWRfc2NoZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCXN5bWJvbF9faW5pdCgpOwotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJc3ltYm9sX19pbml0KDApOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgc2NoZWRfb3B0aW9ucywgc2NoZWRfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggM2RiMzFlNy4uYzcwZDcyMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC01MCwxNSArNTAsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgZGVmYXVsdF9hdHRyc1tdID0gewogCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFU30sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCX0sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCQl9LAogCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCX0sCi0gIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVN9LAotICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TCQl9LAorICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCX0sCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVMJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTCQl9LAogCiB9OwogCkBAIC0xMjUsNiArMTI3LDcgQEAKIHN0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbnNlY3Nfc3RhdHM7CiBzdHJ1Y3Qgc3RhdHMJCQl3YWxsdGltZV9uc2Vjc19zdGF0czsKIHN0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfY3ljbGVzX3N0YXRzOworc3RydWN0IHN0YXRzCQkJcnVudGltZV9icmFuY2hlc19zdGF0czsKIAogI2RlZmluZSBNQVRDSF9FVkVOVCh0LCBjLCBjb3VudGVyKQkJCVwKIAkoYXR0cnNbY291bnRlcl0udHlwZSA9PSBQRVJGX1RZUEVfIyN0ICYmCVwKQEAgLTIzNSw2ICsyMzgsOCBAQAogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHMsIGNvdW50WzBdKTsKIAlpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMsIGNvdW50ZXIpKQogCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzLCBjb3VudFswXSk7CisJaWYgKE1BVENIX0VWRU5UKEhBUkRXQVJFLCBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzLCBjb3VudFswXSk7CiB9CiAKIHN0YXRpYyBpbnQgcnVuX3BlcmZfc3RhdChpbnQgYXJnYyBfX3VzZWQsIGNvbnN0IGNoYXIgKiphcmd2KQpAQCAtMzUyLDcgKzM1NywxNiBAQAogCQkJcmF0aW8gPSBhdmcgLyB0b3RhbDsKIAogCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsIHJhdGlvKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0JSQU5DSF9NSVNTRVMsIGNvdW50ZXIpICYmCisJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzLm4gIT0gMCkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9icmFuY2hlc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSBhdmcgKiAxMDAgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiAlJSAgICAiLCByYXRpbyk7CisKKwl9IGVsc2UgaWYgKHJ1bnRpbWVfbnNlY3Nfc3RhdHMubiAhPSAwKSB7CiAJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzKTsKIAogCQlpZiAodG90YWwpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKaW5kZXggNzAyZDhmZS4uY2I1OGI2NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtMjksMTQgKzI5LDE0IEBACiAjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKICNpbmNsdWRlICJ1dGlsL3BhcnNlLWV2ZW50cy5oIgorI2luY2x1ZGUgInV0aWwvZXZlbnQuaCIKKyNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCiAjaW5jbHVkZSAidXRpbC9zdmdoZWxwZXIuaCIKIAogc3RhdGljIGNoYXIJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CiBzdGF0aWMgY2hhcgkJY29uc3QgKm91dHB1dF9uYW1lID0gIm91dHB1dC5zdmciOwogCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCXBhZ2Vfc2l6ZTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nCW1tYXBfd2luZG93ID0gMzI7CiBzdGF0aWMgdTY0CQlzYW1wbGVfdHlwZTsKIAogc3RhdGljIHVuc2lnbmVkIGludAludW1jcHVzOwpAQCAtNDksOCArNDksNiBAQAogc3RhdGljIGludAkJcG93ZXJfb25seTsKIAogCi1zdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyCSpoZWFkZXI7Ci0KIHN0cnVjdCBwZXJfcGlkOwogc3RydWN0IHBlcl9waWRjb21tOwogCkBAIC0xNTMsNiArMTUxLDE3IEBACiAKIHN0cnVjdCBzYW1wbGVfd3JhcHBlciAqYWxsX3NhbXBsZXM7CiAKKworc3RydWN0IHByb2Nlc3NfZmlsdGVyOworc3RydWN0IHByb2Nlc3NfZmlsdGVyIHsKKwljaGFyCQkJKm5hbWU7CisJaW50CQkJcGlkOworCXN0cnVjdCBwcm9jZXNzX2ZpbHRlcgkqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJvY2Vzc19maWx0ZXIgKnByb2Nlc3NfZmlsdGVyOworCisKIHN0YXRpYyBzdHJ1Y3QgcGVyX3BpZCAqZmluZF9jcmVhdGVfcGlkKGludCBwaWQpCiB7CiAJc3RydWN0IHBlcl9waWQgKmN1cnNvciA9IGFsbF9kYXRhOwpAQCAtNzYzLDIxICs3NzIsNDIgQEAKIAkJCQljID0gcC0+YWxsOwogCQkJCXdoaWxlIChjKSB7CiAJCQkJCWlmIChjLT5ZICYmIGMtPnN0YXJ0X3RpbWUgPD0gd2UtPnRpbWUgJiYgYy0+ZW5kX3RpbWUgPj0gd2UtPnRpbWUpIHsKLQkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VyKSB7CisJCQkJCQlpZiAocC0+cGlkID09IHdlLT53YWtlciAmJiAhZnJvbSkgewogCQkJCQkJCWZyb20gPSBjLT5ZOwotCQkJCQkJCXRhc2tfZnJvbSA9IGMtPmNvbW07CisJCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOwogCQkJCQkJfQotCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZWUpIHsKKwkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgewogCQkJCQkJCXRvID0gYy0+WTsKLQkJCQkJCQl0YXNrX3RvID0gYy0+Y29tbTsKKwkJCQkJCQl0YXNrX3RvID0gc3RyZHVwKGMtPmNvbW0pOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCWMgPSBjLT5uZXh0OwogCQkJCX0KKwkJCQljID0gcC0+YWxsOworCQkJCXdoaWxlIChjKSB7CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VyICYmICFmcm9tKSB7CisJCQkJCQlmcm9tID0gYy0+WTsKKwkJCQkJCXRhc2tfZnJvbSA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQlpZiAocC0+cGlkID09IHdlLT53YWtlZSAmJiAhdG8pIHsKKwkJCQkJCXRvID0gYy0+WTsKKwkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CisJCQkJCX0KKwkJCQkJYyA9IGMtPm5leHQ7CisJCQkJfQogCQkJfQogCQkJcCA9IHAtPm5leHQ7CiAJCX0KIAorCQlpZiAoIXRhc2tfZnJvbSkgeworCQkJdGFza19mcm9tID0gbWFsbG9jKDQwKTsKKwkJCXNwcmludGYodGFza19mcm9tLCAiWyVpXSIsIHdlLT53YWtlcik7CisJCX0KKwkJaWYgKCF0YXNrX3RvKSB7CisJCQl0YXNrX3RvID0gbWFsbG9jKDQwKTsKKwkJCXNwcmludGYodGFza190bywgIlslaV0iLCB3ZS0+d2FrZWUpOworCQl9CisKIAkJaWYgKHdlLT53YWtlciA9PSAtMSkKIAkJCXN2Z19pbnRlcnJ1cHQod2UtPnRpbWUsIHRvKTsKIAkJZWxzZSBpZiAoZnJvbSAmJiB0byAmJiBhYnMoZnJvbSAtIHRvKSA9PSAxKQpAQCAtNzg1LDYgKzgxNSw5IEBACiAJCWVsc2UKIAkJCXN2Z19wYXJ0aWFsX3dha2VsaW5lKHdlLT50aW1lLCBmcm9tLCB0YXNrX2Zyb20sIHRvLCB0YXNrX3RvKTsKIAkJd2UgPSB3ZS0+bmV4dDsKKworCQlmcmVlKHRhc2tfZnJvbSk7CisJCWZyZWUodGFza190byk7CiAJfQogfQogCkBAIC04NTgsMTIgKzg5MSw4OSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYWRkX3Byb2Nlc3NfZmlsdGVyKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19maWx0ZXIgKmZpbHQ7CisJaW50IHBpZDsKKworCXBpZCA9IHN0cnRvdWxsKHN0cmluZywgTlVMTCwgMTApOworCWZpbHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jZXNzX2ZpbHRlcikpOworCWlmICghZmlsdCkKKwkJcmV0dXJuOworCisJZmlsdC0+bmFtZSA9IHN0cmR1cChzdHJpbmcpOworCWZpbHQtPnBpZCAgPSBwaWQ7CisJZmlsdC0+bmV4dCA9IHByb2Nlc3NfZmlsdGVyOworCisJcHJvY2Vzc19maWx0ZXIgPSBmaWx0OworfQorCitzdGF0aWMgaW50IHBhc3Nlc19maWx0ZXIoc3RydWN0IHBlcl9waWQgKnAsIHN0cnVjdCBwZXJfcGlkY29tbSAqYykKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19maWx0ZXIgKmZpbHQ7CisJaWYgKCFwcm9jZXNzX2ZpbHRlcikKKwkJcmV0dXJuIDE7CisKKwlmaWx0ID0gcHJvY2Vzc19maWx0ZXI7CisJd2hpbGUgKGZpbHQpIHsKKwkJaWYgKGZpbHQtPnBpZCAmJiBwLT5waWQgPT0gZmlsdC0+cGlkKQorCQkJcmV0dXJuIDE7CisJCWlmIChzdHJjbXAoZmlsdC0+bmFtZSwgYy0+Y29tbSkgPT0gMCkKKwkJCXJldHVybiAxOworCQlmaWx0ID0gZmlsdC0+bmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV0ZXJtaW5lX2Rpc3BsYXlfdGFza3NfZmlsdGVyZWQodm9pZCkKK3sKKwlzdHJ1Y3QgcGVyX3BpZCAqcDsKKwlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CisJaW50IGNvdW50ID0gMDsKKworCXAgPSBhbGxfZGF0YTsKKwl3aGlsZSAocCkgeworCQlwLT5kaXNwbGF5ID0gMDsKKwkJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMSkKKwkJCXAtPnN0YXJ0X3RpbWUgPSBmaXJzdF90aW1lOworCisJCS8qIG5vIGV4aXQgbWFya2VyLCB0YXNrIGtlcHQgcnVubmluZyB0byB0aGUgZW5kICovCisJCWlmIChwLT5lbmRfdGltZSA9PSAwKQorCQkJcC0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7CisKKwkJYyA9IHAtPmFsbDsKKworCQl3aGlsZSAoYykgeworCQkJYy0+ZGlzcGxheSA9IDA7CisKKwkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCisJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CisKKwkJCWlmIChwYXNzZXNfZmlsdGVyKHAsIGMpKSB7CisJCQkJYy0+ZGlzcGxheSA9IDE7CisJCQkJcC0+ZGlzcGxheSA9IDE7CisJCQkJY291bnQrKzsKKwkJCX0KKworCQkJaWYgKGMtPmVuZF90aW1lID09IDApCisJCQkJYy0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7CisKKwkJCWMgPSBjLT5uZXh0OworCQl9CisJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBpbnQgZGV0ZXJtaW5lX2Rpc3BsYXlfdGFza3ModTY0IHRocmVzaG9sZCkKIHsKIAlzdHJ1Y3QgcGVyX3BpZCAqcDsKIAlzdHJ1Y3QgcGVyX3BpZGNvbW0gKmM7CiAJaW50IGNvdW50ID0gMDsKIAorCWlmIChwcm9jZXNzX2ZpbHRlcikKKwkJcmV0dXJuIGRldGVybWluZV9kaXNwbGF5X3Rhc2tzX2ZpbHRlcmVkKCk7CisKIAlwID0gYWxsX2RhdGE7CiAJd2hpbGUgKHApIHsKIAkJcC0+ZGlzcGxheSA9IDA7CkBAIC05MzMsMzYgKzEwNDMsNiBAQAogCXN2Z19jbG9zZSgpOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jZXNzX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQotewotCi0Jc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKLQotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIHByb2Nlc3NfY29tbV9ldmVudChldmVudCk7Ci0JY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgotCQlyZXR1cm4gcHJvY2Vzc19mb3JrX2V2ZW50KGV2ZW50KTsKLQljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6Ci0JCXJldHVybiBwcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQpOwotCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgotCQlyZXR1cm4gcXVldWVfc2FtcGxlX2V2ZW50KGV2ZW50KTsKLQotCS8qCi0JICogV2UgZG9udCBwcm9jZXNzIHRoZW0gcmlnaHQgbm93IGJ1dCB0aGV5IGFyZSBmaW5lOgotCSAqLwotCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQljYXNlIFBFUkZfUkVDT1JEX1RIUk9UVExFOgotCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc2FtcGxlcyh2b2lkKQogewogCXN0cnVjdCBzYW1wbGVfd3JhcHBlciAqY3Vyc29yOwpAQCAtOTc4LDEwNyArMTA1OCwzOCBAQAogCX0KIH0KIAorc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayh1NjQgdHlwZSkKK3sKKwlzYW1wbGVfdHlwZSA9IHR5cGU7CisKKwlpZiAoIShzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyB0cmFjZSBzYW1wbGVzIGZvdW5kIGluIHRoZSBmaWxlLlxuIgorCQkJCSJIYXZlIHlvdSB1c2VkICdwZXJmIHRpbWVjaGFydCByZWNvcmQnIHRvIHJlY29yZCBpdD9cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgZmlsZV9oYW5kbGVyID0geworCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLnByb2Nlc3NfZm9ya19ldmVudAk9IHByb2Nlc3NfZm9ya19ldmVudCwKKwkucHJvY2Vzc19leGl0X2V2ZW50CT0gcHJvY2Vzc19leGl0X2V2ZW50LAorCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKKwkuc2FtcGxlX3R5cGVfY2hlY2sJPSBzYW1wbGVfdHlwZV9jaGVjaywKK307CiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7Ci0JaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgaGVhZCwgc2hpZnQ7Ci0Jc3RydWN0IHN0YXQgc3RhdGJ1ZjsKLQlldmVudF90ICpldmVudDsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgKmJ1ZjsKLQlpbnQgaW5wdXQ7CisJc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisJaW50IHJldDsKIAotCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0IDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiBmYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIGlucHV0X25hbWUpOwotCQlpZiAoIXN0cmNtcChpbnB1dF9uYW1lLCAicGVyZi5kYXRhIikpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOwotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JCWV4aXQoLTEpOwotCX0KKwlyZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcigmZmlsZV9oYW5kbGVyKTsKIAotCXJldCA9IGZzdGF0KGlucHV0LCAmc3RhdGJ1Zik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7Ci0JCWV4aXQoLTEpOwotCX0KLQotCWlmICghc3RhdGJ1Zi5zdF9zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCWV4aXQoMCk7Ci0JfQotCi0JaGVhZGVyID0gcGVyZl9oZWFkZXJfX3JlYWQoaW5wdXQpOwotCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OwotCi0Jc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKLQotCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCW9mZnNldCArPSBzaGlmdDsKLQloZWFkIC09IHNoaWZ0OwotCi1yZW1hcDoKLQlidWYgPSAoY2hhciAqKW1tYXAoTlVMTCwgcGFnZV9zaXplICogbW1hcF93aW5kb3csIFBST1RfUkVBRCwKLQkJCSAgIE1BUF9TSEFSRUQsIGlucHV0LCBvZmZzZXQpOwotCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewotCQlwZXJyb3IoImZhaWxlZCB0byBtbWFwIGZpbGUiKTsKLQkJZXhpdCgtMSk7Ci0JfQotCi1tb3JlOgotCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KLQlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewotCQlpbnQgcmV0MjsKLQotCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQotCQlyZXQyID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogbW1hcF93aW5kb3cpOwotCQlhc3NlcnQocmV0MiA9PSAwKTsKLQotCQlvZmZzZXQgKz0gc2hpZnQ7Ci0JCWhlYWQgLT0gc2hpZnQ7Ci0JCWdvdG8gcmVtYXA7Ci0JfQotCi0Jc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKLQotCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50KSA8IDApIHsKLQotCQlwcmludGYoIiVwIFslcF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAotCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKLQotCQkvKgotCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZAotCQkgKiBpbmNyZW1lbnQgYSBzaW5nbGUgdTY0IGluIHRoZSBob3BlIHRvIGNhdGNoIG9uIGFnYWluICdzb29uJy4KLQkJICovCi0KLQkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKLQkJCWhlYWQgJj0gfjdVTEw7Ci0KLQkJc2l6ZSA9IDg7Ci0JfQotCi0JaGVhZCArPSBzaXplOwotCi0JaWYgKG9mZnNldCArIGhlYWQgPj0gaGVhZGVyLT5kYXRhX29mZnNldCArIGhlYWRlci0+ZGF0YV9zaXplKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKXN0YXRidWYuc3Rfc2l6ZSkKLQkJZ290byBtb3JlOwotCi1kb25lOgotCXJjID0gRVhJVF9TVUNDRVNTOwotCWNsb3NlKGlucHV0KTsKLQorCXJldCA9IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKCZoZWFkZXIsIGlucHV0X25hbWUsIDAsIDAsCisJCQkJICAgICAgJmV2ZW50X19jd2RsZW4sICZldmVudF9fY3dkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwogCiAJcHJvY2Vzc19zYW1wbGVzKCk7CiAKQEAgLTEwODgsOSArMTA5OSwxMCBAQAogCiAJd3JpdGVfc3ZnX2ZpbGUob3V0cHV0X25hbWUpOwogCi0JcHJpbnRmKCJXcml0dGVuICUyLjFmIHNlY29uZHMgb2YgdHJhY2UgdG8gJXMuXG4iLCAobGFzdF90aW1lIC0gZmlyc3RfdGltZSkgLyAxMDAwMDAwMDAwLjAsIG91dHB1dF9uYW1lKTsKKwlwcl9pbmZvKCJXcml0dGVuICUyLjFmIHNlY29uZHMgb2YgdHJhY2UgdG8gJXMuXG4iLAorCQkobGFzdF90aW1lIC0gZmlyc3RfdGltZSkgLyAxMDAwMDAwMDAwLjAsIG91dHB1dF9uYW1lKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpbWVjaGFydF91c2FnZVtdID0gewpAQCAtMTEyOSw2ICsxMTQxLDE0IEBACiAJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOwogfQogCitzdGF0aWMgaW50CitwYXJzZV9wcm9jZXNzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKmFyZywgaW50IF9fdXNlZCB1bnNldCkKK3sKKwlpZiAoYXJnKQorCQlhZGRfcHJvY2Vzc19maWx0ZXIoYXJnKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCU9QVF9TVFJJTkcoJ2knLCAiaW5wdXQiLCAmaW5wdXRfbmFtZSwgImZpbGUiLAogCQkgICAgImlucHV0IGZpbGUgbmFtZSIpLApAQCAtMTEzNiwxNyArMTE1NiwxOCBAQAogCQkgICAgIm91dHB1dCBmaWxlIG5hbWUiKSwKIAlPUFRfSU5URUdFUigndycsICJ3aWR0aCIsICZzdmdfcGFnZV93aWR0aCwKIAkJICAgICJwYWdlIHdpZHRoIiksCi0JT1BUX0JPT0xFQU4oJ3AnLCAicG93ZXItb25seSIsICZwb3dlcl9vbmx5LAorCU9QVF9CT09MRUFOKCdQJywgInBvd2VyLW9ubHkiLCAmcG93ZXJfb25seSwKIAkJICAgICJvdXRwdXQgcG93ZXIgZGF0YSBvbmx5IiksCisJT1BUX0NBTExCQUNLKCdwJywgInByb2Nlc3MiLCBOVUxMLCAicHJvY2VzcyIsCisJCSAgICAgICJwcm9jZXNzIHNlbGVjdG9yLiBQYXNzIGEgcGlkIG9yIHByb2Nlc3MgbmFtZS4iLAorCQkgICAgICAgcGFyc2VfcHJvY2VzcyksCiAJT1BUX0VORCgpCiB9OwogCiAKIGludCBjbWRfdGltZWNoYXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKLQlzeW1ib2xfX2luaXQoKTsKLQotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJc3ltYm9sX19pbml0KDApOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdGltZWNoYXJ0X3VzYWdlLAogCQkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggMzc1MTJlOS4uZTBhMzc0ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL2NvbG9yLmgiCisjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKICNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKQEAgLTU0LDI2ICs1NSwzMSBAQAogCiBzdGF0aWMgaW50CQkJZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107CiAKLXN0YXRpYyBpbnQJCQlzeXN0ZW1fd2lkZQkJCT0gIDA7CitzdGF0aWMgaW50CQkJc3lzdGVtX3dpZGUJCQk9ICAgICAgMDsKIAotc3RhdGljIGludAkJCWRlZmF1bHRfaW50ZXJ2YWwJCT0gMTAwMDAwOworc3RhdGljIGludAkJCWRlZmF1bHRfaW50ZXJ2YWwJCT0gICAgICAwOwogCi1zdGF0aWMgaW50CQkJY291bnRfZmlsdGVyCQkJPSAgNTsKLXN0YXRpYyBpbnQJCQlwcmludF9lbnRyaWVzCQkJPSAxNTsKK3N0YXRpYyBpbnQJCQljb3VudF9maWx0ZXIJCQk9ICAgICAgNTsKK3N0YXRpYyBpbnQJCQlwcmludF9lbnRyaWVzOwogCi1zdGF0aWMgaW50CQkJdGFyZ2V0X3BpZAkJCT0gLTE7Ci1zdGF0aWMgaW50CQkJaW5oZXJpdAkJCQk9ICAwOwotc3RhdGljIGludAkJCXByb2ZpbGVfY3B1CQkJPSAtMTsKLXN0YXRpYyBpbnQJCQlucl9jcHVzCQkJCT0gIDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50CQlyZWFsdGltZV9wcmlvCQkJPSAgMDsKLXN0YXRpYyBpbnQJCQlncm91cAkJCQk9ICAwOworc3RhdGljIGludAkJCXRhcmdldF9waWQJCQk9ICAgICAtMTsKK3N0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gICAgICAwOworc3RhdGljIGludAkJCXByb2ZpbGVfY3B1CQkJPSAgICAgLTE7CitzdGF0aWMgaW50CQkJbnJfY3B1cwkJCQk9ICAgICAgMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJCXJlYWx0aW1lX3ByaW8JCQk9ICAgICAgMDsKK3N0YXRpYyBpbnQJCQlncm91cAkJCQk9ICAgICAgMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJCXBhZ2Vfc2l6ZTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQJCW1tYXBfcGFnZXMJCQk9IDE2Owotc3RhdGljIGludAkJCWZyZXEJCQkJPSAgMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJCW1tYXBfcGFnZXMJCQk9ICAgICAxNjsKK3N0YXRpYyBpbnQJCQlmcmVxCQkJCT0gICAxMDAwOyAvKiAxIEtIeiAqLwogCi1zdGF0aWMgaW50CQkJZGVsYXlfc2VjcwkJCT0gIDI7Ci1zdGF0aWMgaW50CQkJemVybzsKLXN0YXRpYyBpbnQJCQlkdW1wX3N5bXRhYjsKK3N0YXRpYyBpbnQJCQlkZWxheV9zZWNzCQkJPSAgICAgIDI7CitzdGF0aWMgaW50CQkJemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAgICAgMDsKK3N0YXRpYyBpbnQJCQlkdW1wX3N5bXRhYiAgICAgICAgICAgICAgICAgICAgID0gICAgICAwOworCitzdGF0aWMgYm9vbAkJCWhpZGVfa2VybmVsX3N5bWJvbHMJCT0gIGZhbHNlOworc3RhdGljIGJvb2wJCQloaWRlX3VzZXJfc3ltYm9scwkJPSAgZmFsc2U7CitzdGF0aWMgc3RydWN0IHdpbnNpemUJCXdpbnNpemU7CitzdHJ1Y3Qgc3ltYm9sX2NvbmYJCXN5bWJvbF9jb25mOwogCiAvKgogICogU291cmNlCkBAIC04Niw4MyArOTIsMTI2IEBACiAJc3RydWN0IHNvdXJjZV9saW5lCSpuZXh0OwogfTsKIAotc3RhdGljIGNoYXIJCQkqc3ltX2ZpbHRlcgkJCT0gIE5VTEw7Ci1zdHJ1Y3Qgc3ltX2VudHJ5CQkqc3ltX2ZpbHRlcl9lbnRyeQkJPSAgTlVMTDsKLXN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICA1Owotc3RhdGljIGludAkJCXN5bV9jb3VudGVyCQkJPSAgMDsKLXN0YXRpYyBpbnQJCQlkaXNwbGF5X3dlaWdodGVkCQk9IC0xOworc3RhdGljIGNoYXIJCQkqc3ltX2ZpbHRlcgkJCT0gICBOVUxMOworc3RydWN0IHN5bV9lbnRyeQkJKnN5bV9maWx0ZXJfZW50cnkJCT0gICBOVUxMOworc3RhdGljIGludAkJCXN5bV9wY250X2ZpbHRlcgkJCT0gICAgICA1Oworc3RhdGljIGludAkJCXN5bV9jb3VudGVyCQkJPSAgICAgIDA7CitzdGF0aWMgaW50CQkJZGlzcGxheV93ZWlnaHRlZAkJPSAgICAgLTE7CiAKIC8qCiAgKiBTeW1ib2xzCiAgKi8KIAotc3RhdGljIHU2NAkJCW1pbl9pcDsKLXN0YXRpYyB1NjQJCQltYXhfaXAgPSAtMWxsOworc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UgeworCXN0cnVjdCBzb3VyY2VfbGluZQkqc291cmNlOworCXN0cnVjdCBzb3VyY2VfbGluZQkqbGluZXM7CisJc3RydWN0IHNvdXJjZV9saW5lCSoqbGluZXNfdGFpbDsKKwlwdGhyZWFkX211dGV4X3QJCWxvY2s7Cit9OwogCiBzdHJ1Y3Qgc3ltX2VudHJ5IHsKIAlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7Ci0JdW5zaWduZWQgbG9uZwkJY291bnRbTUFYX0NPVU5URVJTXTsKIAl1bnNpZ25lZCBsb25nCQlzbmFwX2NvdW50OwogCWRvdWJsZQkJCXdlaWdodDsKIAlpbnQJCQlza2lwOwotCXN0cnVjdCBzb3VyY2VfbGluZQkqc291cmNlOwotCXN0cnVjdCBzb3VyY2VfbGluZQkqbGluZXM7Ci0Jc3RydWN0IHNvdXJjZV9saW5lCSoqbGluZXNfdGFpbDsKLQlwdGhyZWFkX211dGV4X3QJCXNvdXJjZV9sb2NrOworCXUxNgkJCW5hbWVfbGVuOworCXU4CQkJb3JpZ2luOworCXN0cnVjdCBtYXAJCSptYXA7CisJc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UJKnNyYzsKKwl1bnNpZ25lZCBsb25nCQljb3VudFswXTsKIH07CiAKIC8qCiAgKiBTb3VyY2UgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3ltYm9sICpzeW1fZW50cnlfX3N5bWJvbChzdHJ1Y3Qgc3ltX2VudHJ5ICpzZWxmKQoreworICAgICAgIHJldHVybiAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3Rlcm1fZGltZW5zaW9ucyhzdHJ1Y3Qgd2luc2l6ZSAqd3MpCit7CisJY2hhciAqcyA9IGdldGVudigiTElORVMiKTsKKworCWlmIChzICE9IE5VTEwpIHsKKwkJd3MtPndzX3JvdyA9IGF0b2kocyk7CisJCXMgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwkJaWYgKHMgIT0gTlVMTCkgeworCQkJd3MtPndzX2NvbCA9IGF0b2kocyk7CisJCQlpZiAod3MtPndzX3JvdyAmJiB3cy0+d3NfY29sKQorCQkJCXJldHVybjsKKwkJfQorCX0KKyNpZmRlZiBUSU9DR1dJTlNaCisJaWYgKGlvY3RsKDEsIFRJT0NHV0lOU1osIHdzKSA9PSAwICYmCisJICAgIHdzLT53c19yb3cgJiYgd3MtPndzX2NvbCkKKwkJcmV0dXJuOworI2VuZGlmCisJd3MtPndzX3JvdyA9IDI1OworCXdzLT53c19jb2wgPSA4MDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3ByaW50X2VudHJpZXMoc3RydWN0IHdpbnNpemUgKndzKQoreworCXByaW50X2VudHJpZXMgPSB3cy0+d3Nfcm93OworCisJaWYgKHByaW50X2VudHJpZXMgPiA5KQorCQlwcmludF9lbnRyaWVzIC09IDk7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ193aW5jaF9oYW5kbGVyKGludCBzaWcgX191c2VkKQoreworCWdldF90ZXJtX2RpbWVuc2lvbnMoJndpbnNpemUpOworCXVwZGF0ZV9wcmludF9lbnRyaWVzKCZ3aW5zaXplKTsKK30KKwogc3RhdGljIHZvaWQgcGFyc2Vfc291cmNlKHN0cnVjdCBzeW1fZW50cnkgKnN5bWUpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKLQlzdHJ1Y3Qgc2VjdGlvbiAqc2VjdGlvbiA9IE5VTEw7CisJc3RydWN0IHN5bV9lbnRyeV9zb3VyY2UgKnNvdXJjZTsKKwlzdHJ1Y3QgbWFwICptYXA7CiAJRklMRSAqZmlsZTsKIAljaGFyIGNvbW1hbmRbUEFUSF9NQVgqMl07Ci0JY29uc3QgY2hhciAqcGF0aCA9IHZtbGludXhfbmFtZTsKLQl1NjQgc3RhcnQsIGVuZCwgbGVuOworCWNvbnN0IGNoYXIgKnBhdGg7CisJdTY0IGxlbjsKIAogCWlmICghc3ltZSkKIAkJcmV0dXJuOwogCi0JaWYgKHN5bWUtPmxpbmVzKSB7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCWlmIChzeW1lLT5zcmMgPT0gTlVMTCkgeworCQlzeW1lLT5zcmMgPSB6YWxsb2Moc2l6ZW9mKCpzb3VyY2UpKTsKKwkJaWYgKHN5bWUtPnNyYyA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlwdGhyZWFkX211dGV4X2luaXQoJnN5bWUtPnNyYy0+bG9jaywgTlVMTCk7CisJfQorCisJc291cmNlID0gc3ltZS0+c3JjOworCisJaWYgKHNvdXJjZS0+bGluZXMpIHsKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZzb3VyY2UtPmxvY2spOwogCQlnb3RvIG91dF9hc3NpZ247CiAJfQogCi0Jc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOwotCW1vZHVsZSA9IHN5bS0+bW9kdWxlOworCXN5bSA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOworCW1hcCA9IHN5bWUtPm1hcDsKKwlwYXRoID0gbWFwLT5kc28tPmxvbmdfbmFtZTsKIAotCWlmIChtb2R1bGUpCi0JCXBhdGggPSBtb2R1bGUtPnBhdGg7Ci0JaWYgKCFwYXRoKQotCQlyZXR1cm47Ci0KLQlzdGFydCA9IHN5bS0+b2JqX3N0YXJ0OwotCWlmICghc3RhcnQpCi0JCXN0YXJ0ID0gc3ltLT5zdGFydDsKLQotCWlmIChtb2R1bGUpIHsKLQkJc2VjdGlvbiA9IG1vZHVsZS0+c2VjdGlvbnMtPmZpbmRfc2VjdGlvbihtb2R1bGUtPnNlY3Rpb25zLCAiLnRleHQiKTsKLQkJaWYgKHNlY3Rpb24pCi0JCQlzdGFydCAtPSBzZWN0aW9uLT52bWE7Ci0JfQotCi0JZW5kID0gc3RhcnQgKyBzeW0tPmVuZCAtIHN5bS0+c3RhcnQgKyAxOwogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAotCXNwcmludGYoY29tbWFuZCwgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4IC0tc3RvcC1hZGRyZXNzPTB4JTAxNkx4IC1kUyAlcyIsIHN0YXJ0LCBlbmQsIHBhdGgpOworCXNwcmludGYoY29tbWFuZCwKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4ICIKKwkJCSAiLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzIiwKKwkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAorCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIAogCWZpbGUgPSBwb3Blbihjb21tYW5kLCAiciIpOwogCWlmICghZmlsZSkKIAkJcmV0dXJuOwogCi0JcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7Ci0Jc3ltZS0+bGluZXNfdGFpbCA9ICZzeW1lLT5saW5lczsKKwlwdGhyZWFkX211dGV4X2xvY2soJnNvdXJjZS0+bG9jayk7CisJc291cmNlLT5saW5lc190YWlsID0gJnNvdXJjZS0+bGluZXM7CiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCXN0cnVjdCBzb3VyY2VfbGluZSAqc3JjOwogCQlzaXplX3QgZHVtbXkgPSAwOwpAQCAtMTgyLDI0ICsyMzEsMjIgQEAKIAkJCSpjID0gMDsKIAogCQlzcmMtPm5leHQgPSBOVUxMOwotCQkqc3ltZS0+bGluZXNfdGFpbCA9IHNyYzsKLQkJc3ltZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CisJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CisJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKIAkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewogCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCWlmIChzZWN0aW9uKQotCQkJCXNyYy0+ZWlwICs9IHNlY3Rpb24tPnZtYTsKKwkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKIAkJfQogCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbMTZdID09ICc6JykgewogCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCWlmIChzZWN0aW9uKQotCQkJCXNyYy0+ZWlwICs9IHNlY3Rpb24tPnZtYTsKKwkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKIAkJfQogCX0KIAlwY2xvc2UoZmlsZSk7CiBvdXRfYXNzaWduOgogCXN5bV9maWx0ZXJfZW50cnkgPSBzeW1lOwotCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnNvdXJjZS0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9femVyb19zb3VyY2VfY291bnRlcnMoc3RydWN0IHN5bV9lbnRyeSAqc3ltZSkKQEAgLTIwNyw3ICsyNTQsNyBAQAogCWludCBpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKIAotCWxpbmUgPSBzeW1lLT5saW5lczsKKwlsaW5lID0gc3ltZS0+c3JjLT5saW5lczsKIAl3aGlsZSAobGluZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgbnJfY291bnRlcnM7IGkrKykKIAkJCWxpbmUtPmNvdW50W2ldID0gMDsKQEAgLTIyMiwxMyArMjY5LDEzIEBACiAJaWYgKHN5bWUgIT0gc3ltX2ZpbHRlcl9lbnRyeSkKIAkJcmV0dXJuOwogCi0JaWYgKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmc3ltZS0+c291cmNlX2xvY2spKQorCWlmIChwdGhyZWFkX211dGV4X3RyeWxvY2soJnN5bWUtPnNyYy0+bG9jaykpCiAJCXJldHVybjsKIAotCWlmICghc3ltZS0+c291cmNlKQorCWlmIChzeW1lLT5zcmMgPT0gTlVMTCB8fCBzeW1lLT5zcmMtPnNvdXJjZSA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGxpbmUgPSBzeW1lLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKKwlmb3IgKGxpbmUgPSBzeW1lLT5zcmMtPmxpbmVzOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dCkgewogCQlpZiAobGluZS0+ZWlwID09IGlwKSB7CiAJCQlsaW5lLT5jb3VudFtjb3VudGVyXSsrOwogCQkJYnJlYWs7CkBAIC0yMzcsMzIgKzI4NCwyNSBAQAogCQkJYnJlYWs7CiAJfQogb3V0X3VubG9jazoKLQlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBsb29rdXBfc3ltX3NvdXJjZShzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQogewotCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IChzdHJ1Y3Qgc3ltYm9sICopKHN5bWUgKyAxKTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2wgPSBzeW1fZW50cnlfX3N5bWJvbChzeW1lKTsKIAlzdHJ1Y3Qgc291cmNlX2xpbmUgKmxpbmU7CiAJY2hhciBwYXR0ZXJuW1BBVEhfTUFYXTsKLQljaGFyICppZHg7CiAKIAlzcHJpbnRmKHBhdHRlcm4sICI8JXM+OiIsIHN5bWJvbC0+bmFtZSk7CiAKLQlpZiAoc3ltYm9sLT5tb2R1bGUpIHsKLQkJaWR4ID0gc3Ryc3RyKHBhdHRlcm4sICJcdCIpOwotCQlpZiAoaWR4KQotCQkJKmlkeCA9IDA7Ci0JfQotCi0JcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7Ci0JZm9yIChsaW5lID0gc3ltZS0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJcHRocmVhZF9tdXRleF9sb2NrKCZzeW1lLT5zcmMtPmxvY2spOworCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CiAJCWlmIChzdHJzdHIobGluZS0+bGluZSwgcGF0dGVybikpIHsKLQkJCXN5bWUtPnNvdXJjZSA9IGxpbmU7CisJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQogCX0KLQlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2xpbmVzKHN0cnVjdCBzb3VyY2VfbGluZSAqcXVldWUsIGludCBjb3VudCwgaW50IHRvdGFsKQpAQCAtMjkyLDI0ICszMzIsMjQgQEAKIAlpZiAoIXN5bWUpCiAJCXJldHVybjsKIAotCWlmICghc3ltZS0+c291cmNlKQorCWlmICghc3ltZS0+c3JjLT5zb3VyY2UpCiAJCWxvb2t1cF9zeW1fc291cmNlKHN5bWUpOwogCi0JaWYgKCFzeW1lLT5zb3VyY2UpCisJaWYgKCFzeW1lLT5zcmMtPnNvdXJjZSkKIAkJcmV0dXJuOwogCi0Jc3ltYm9sID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCXN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXByaW50ZigiU2hvd2luZyAlcyBmb3IgJXNcbiIsIGV2ZW50X25hbWUoc3ltX2NvdW50ZXIpLCBzeW1ib2wtPm5hbWUpOwogCXByaW50ZigiICBFdmVudHMgIFBjbnQgKD49JWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7CiAKLQlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKLQlsaW5lID0gc3ltZS0+c291cmNlOworCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKKwlsaW5lID0gc3ltZS0+c3JjLT5zb3VyY2U7CiAJd2hpbGUgKGxpbmUpIHsKIAkJdG90YWwgKz0gbGluZS0+Y291bnRbc3ltX2NvdW50ZXJdOwogCQlsaW5lID0gbGluZS0+bmV4dDsKIAl9CiAKLQlsaW5lID0gc3ltZS0+c291cmNlOworCWxpbmUgPSBzeW1lLT5zcmMtPnNvdXJjZTsKIAl3aGlsZSAobGluZSkgewogCQlmbG9hdCBwY250ID0gMC4wOwogCkBAIC0zMzQsMTMgKzM3NCwxMyBAQAogCQlsaW5lLT5jb3VudFtzeW1fY291bnRlcl0gPSB6ZXJvID8gMCA6IGxpbmUtPmNvdW50W3N5bV9jb3VudGVyXSAqIDcgLyA4OwogCQlsaW5lID0gbGluZS0+bmV4dDsKIAl9Ci0JcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNvdXJjZV9sb2NrKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAlpZiAobW9yZSkKIAkJcHJpbnRmKCIlZCBsaW5lcyBub3QgZGlzcGxheWVkLCBtYXliZSBpbmNyZWFzZSBkaXNwbGF5IGVudHJpZXMgW2VdXG4iLCBtb3JlKTsKIH0KIAogLyoKLSAqIFN5bWJvbHMgd2lsbCBiZSBhZGRlZCBoZXJlIGluIHJlY29yZF9pcCBhbmQgd2lsbCBnZXQgb3V0CisgKiBTeW1ib2xzIHdpbGwgYmUgYWRkZWQgaGVyZSBpbiBldmVudF9fcHJvY2Vzc19zYW1wbGUgYW5kIHdpbGwgZ2V0IG91dAogICogYWZ0ZXIgZGVjYXllZC4KICAqLwogc3RhdGljIExJU1RfSEVBRChhY3RpdmVfc3ltYm9scyk7CkBAIC00MTEsNiArNDUxLDggQEAKIAlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lLCAqbjsKIAlzdHJ1Y3QgcmJfcm9vdCB0bXAgPSBSQl9ST09UOwogCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgc3ltX3dpZHRoID0gMCwgZHNvX3dpZHRoID0gMCwgbWF4X2Rzb193aWR0aDsKKwljb25zdCBpbnQgd2luX3dpZHRoID0gd2luc2l6ZS53c19jb2wgLSAxOwogCiAJc2FtcGxlcyA9IHVzZXJzcGFjZV9zYW1wbGVzID0gMDsKIApAQCAtNDIyLDYgKzQ2NCwxNCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9mcm9tKHN5bWUsIG4sICZhY3RpdmVfc3ltYm9scywgbm9kZSkgewogCQlzeW1lLT5zbmFwX2NvdW50ID0gc3ltZS0+Y291bnRbc25hcF07CiAJCWlmIChzeW1lLT5zbmFwX2NvdW50ICE9IDApIHsKKworCQkJaWYgKChoaWRlX3VzZXJfc3ltYm9scyAmJgorCQkJICAgICBzeW1lLT5vcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKSB8fAorCQkJICAgIChoaWRlX2tlcm5lbF9zeW1ib2xzICYmCisJCQkgICAgIHN5bWUtPm9yaWdpbiA9PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkpIHsKKwkJCQlsaXN0X3JlbW92ZV9hY3RpdmVfc3ltKHN5bWUpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJc3ltZS0+d2VpZ2h0ID0gc3ltX3dlaWdodChzeW1lKTsKIAkJCXJiX2luc2VydF9hY3RpdmVfc3ltKCZ0bXAsIHN5bWUpOwogCQkJc3VtX2tzYW1wbGVzICs9IHN5bWUtPnNuYXBfY291bnQ7CkBAIC00MzQsOCArNDg0LDcgQEAKIAogCXB1dHMoQ09OU09MRV9DTEVBUik7CiAKLQlwcmludGYoCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGYoIiUtKi4qc1xuIiwgd2luX3dpZHRoLCB3aW5fd2lkdGgsIGdyYXBoX2RvdHRlZF9saW5lKTsKIAlwcmludGYoICIgICBQZXJmVG9wOiU4LjBmIGlycXMvc2VjICBrZXJuZWw6JTQuMWYlJSBbIiwKIAkJc2FtcGxlc19wZXJfc2VjLAogCQkxMDAuMCAtICgxMDAuMCooKHNhbXBsZXNfcGVyX3NlYy1rc2FtcGxlc19wZXJfc2VjKS9zYW1wbGVzX3Blcl9zZWMpKSk7CkBAIC00NzMsMzMgKzUyMiw1NyBAQAogCQkJcHJpbnRmKCIsICVkIENQVXMpXG4iLCBucl9jcHVzKTsKIAl9CiAKLQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKwlwcmludGYoIiUtKi4qc1xuIiwgd2luX3dpZHRoLCB3aW5fd2lkdGgsIGdyYXBoX2RvdHRlZF9saW5lKTsKIAogCWlmIChzeW1fZmlsdGVyX2VudHJ5KSB7CiAJCXNob3dfZGV0YWlscyhzeW1fZmlsdGVyX2VudHJ5KTsKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogRmluZCB0aGUgbG9uZ2VzdCBzeW1ib2wgbmFtZSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkCisJICovCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZ0bXApOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzeW1lID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1fZW50cnksIHJiX25vZGUpOworCQlpZiAoKytwcmludGVkID4gcHJpbnRfZW50cmllcyB8fAorCQkgICAgKGludClzeW1lLT5zbmFwX2NvdW50IDwgY291bnRfZmlsdGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKHN5bWUtPm1hcC0+ZHNvLT5sb25nX25hbWVfbGVuID4gZHNvX3dpZHRoKQorCQkJZHNvX3dpZHRoID0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW47CisKKwkJaWYgKHN5bWUtPm5hbWVfbGVuID4gc3ltX3dpZHRoKQorCQkJc3ltX3dpZHRoID0gc3ltZS0+bmFtZV9sZW47CisJfQorCisJcHJpbnRlZCA9IDA7CisKKwltYXhfZHNvX3dpZHRoID0gd2luc2l6ZS53c19jb2wgLSBzeW1fd2lkdGggLSAyOTsKKwlpZiAoZHNvX3dpZHRoID4gbWF4X2Rzb193aWR0aCkKKwkJZHNvX3dpZHRoID0gbWF4X2Rzb193aWR0aDsKKwlwdXRjaGFyKCdcbicpOwogCWlmIChucl9jb3VudGVycyA9PSAxKQotCQlwcmludGYoIiAgICAgICAgICAgICBzYW1wbGVzICAgIHBjbnQiKTsKKwkJcHJpbnRmKCIgICAgICAgICAgICAgc2FtcGxlcyAgcGNudCIpOwogCWVsc2UKLQkJcHJpbnRmKCIgICB3ZWlnaHQgICAgc2FtcGxlcyAgICBwY250Iik7CisJCXByaW50ZigiICAgd2VpZ2h0ICAgIHNhbXBsZXMgIHBjbnQiKTsKIAogCWlmICh2ZXJib3NlKQogCQlwcmludGYoIiAgICAgICAgIFJJUCAgICAgICAiKTsKLQlwcmludGYoIiAgIGtlcm5lbCBmdW5jdGlvblxuIik7Ci0JcHJpbnRmKCIgICAlcyAgICBfX19fX19fICAgX19fX18iLAorCXByaW50ZigiICUtKi4qcyBEU09cbiIsIHN5bV93aWR0aCwgc3ltX3dpZHRoLCAiZnVuY3Rpb24iKTsKKwlwcmludGYoIiAgICVzICAgIF9fX19fX18gX19fX18iLAogCSAgICAgICBucl9jb3VudGVycyA9PSAxID8gIiAgICAgICIgOiAiX19fX19fIik7CiAJaWYgKHZlcmJvc2UpCi0JCXByaW50ZigiICAgX19fX19fX19fX19fX19fXyIpOwotCXByaW50ZigiICAgX19fX19fX19fX19fX19fXG5cbiIpOworCQlwcmludGYoIiBfX19fX19fX19fX19fX19fIik7CisJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIGdyYXBoX2xpbmUpOworCXByaW50ZigiICUtKi4qcyIsIGRzb193aWR0aCwgZHNvX3dpZHRoLCBncmFwaF9saW5lKTsKKwlwdXRzKCJcbiIpOwogCiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZ0bXApOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJCWRvdWJsZSBwY250OwogCiAJCXN5bWUgPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bV9lbnRyeSwgcmJfbm9kZSk7Ci0JCXN5bSA9IChzdHJ1Y3Qgc3ltYm9sICopKHN5bWUgKyAxKTsKKwkJc3ltID0gc3ltX2VudHJ5X19zeW1ib2woc3ltZSk7CiAKIAkJaWYgKCsrcHJpbnRlZCA+IHByaW50X2VudHJpZXMgfHwgKGludClzeW1lLT5zbmFwX2NvdW50IDwgY291bnRfZmlsdGVyKQogCQkJY29udGludWU7CkBAIC01MDgsMTcgKzU4MSwxOCBAQAogCQkJCQkgc3VtX2tzYW1wbGVzKSk7CiAKIAkJaWYgKG5yX2NvdW50ZXJzID09IDEgfHwgIWRpc3BsYXlfd2VpZ2h0ZWQpCi0JCQlwcmludGYoIiUyMC4yZiAtICIsIHN5bWUtPndlaWdodCk7CisJCQlwcmludGYoIiUyMC4yZiAiLCBzeW1lLT53ZWlnaHQpOwogCQllbHNlCi0JCQlwcmludGYoIiU5LjFmICUxMGxkIC0gIiwgc3ltZS0+d2VpZ2h0LCBzeW1lLT5zbmFwX2NvdW50KTsKKwkJCXByaW50ZigiJTkuMWYgJTEwbGQgIiwgc3ltZS0+d2VpZ2h0LCBzeW1lLT5zbmFwX2NvdW50KTsKIAogCQlwZXJjZW50X2NvbG9yX2ZwcmludGYoc3Rkb3V0LCAiJTQuMWYlJSIsIHBjbnQpOwogCQlpZiAodmVyYm9zZSkKLQkJCXByaW50ZigiIC0gJTAxNmxseCIsIHN5bS0+c3RhcnQpOwotCQlwcmludGYoIiA6ICVzIiwgc3ltLT5uYW1lKTsKLQkJaWYgKHN5bS0+bW9kdWxlKQotCQkJcHJpbnRmKCJcdFslc10iLCBzeW0tPm1vZHVsZS0+bmFtZSk7Ci0JCXByaW50ZigiXG4iKTsKKwkJCXByaW50ZigiICUwMTZsbHgiLCBzeW0tPnN0YXJ0KTsKKwkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CisJCXByaW50ZigiICUtKi4qc1xuIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsCisJCSAgICAgICBkc29fd2lkdGggPj0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW4gPworCQkJCQlzeW1lLT5tYXAtPmRzby0+bG9uZ19uYW1lIDoKKwkJCQkJc3ltZS0+bWFwLT5kc28tPnNob3J0X25hbWUpOwogCX0KIH0KIApAQCAtNTY1LDEwICs2MzksMTAgQEAKIAogCS8qIHplcm8gY291bnRlcnMgb2YgYWN0aXZlIHN5bWJvbCAqLwogCWlmIChzeW1lKSB7Ci0JCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCQlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJCV9femVyb19zb3VyY2VfY291bnRlcnMoc3ltZSk7CiAJCSp0YXJnZXQgPSBOVUxMOwotCQlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAl9CiAKIAlmcHJpbnRmKHN0ZG91dCwgIlxuJXM6ICIsIG1zZyk7CkBAIC01ODQsNyArNjU4LDcgQEAKIAlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShzeW1lLCBuLCAmYWN0aXZlX3N5bWJvbHMsIG5vZGUpIHsKLQkJc3RydWN0IHN5bWJvbCAqc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fZW50cnlfX3N5bWJvbChzeW1lKTsKIAogCQlpZiAoIXN0cmNtcChidWYsIHN5bS0+bmFtZSkpIHsKIAkJCWZvdW5kID0gc3ltZTsKQEAgLTYwOCw3ICs2ODIsNyBAQAogCWNoYXIgKm5hbWUgPSBOVUxMOwogCiAJaWYgKHN5bV9maWx0ZXJfZW50cnkpIHsKLQkJc3RydWN0IHN5bWJvbCAqc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltX2ZpbHRlcl9lbnRyeSsxKTsKKwkJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2VudHJ5X19zeW1ib2woc3ltX2ZpbHRlcl9lbnRyeSk7CiAJCW5hbWUgPSBzeW0tPm5hbWU7CiAJfQogCkBAIC02MjEsNyArNjk1LDcgQEAKIAogCWZwcmludGYoc3Rkb3V0LCAiXHRbZl0gICAgIHByb2ZpbGUgZGlzcGxheSBmaWx0ZXIgKGNvdW50KS4gICAgXHQoJWQpXG4iLCBjb3VudF9maWx0ZXIpOwogCi0JaWYgKHZtbGludXhfbmFtZSkgeworCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpIHsKIAkJZnByaW50ZihzdGRvdXQsICJcdFtGXSAgICAgYW5ub3RhdGUgZGlzcGxheSBmaWx0ZXIgKHBlcmNlbnQpLiBcdCglZCUlKVxuIiwgc3ltX3BjbnRfZmlsdGVyKTsKIAkJZnByaW50ZihzdGRvdXQsICJcdFtzXSAgICAgYW5ub3RhdGUgc3ltYm9sLiAgICAgICAgICAgICAgICAgICBcdCglcylcbiIsIG5hbWU/OiAiTlVMTCIpOwogCQlmcHJpbnRmKHN0ZG91dCwgIlx0W1NdICAgICBzdG9wIGFubm90YXRpb24uXG4iKTsKQEAgLTYzMCw2ICs3MDQsMTIgQEAKIAlpZiAobnJfY291bnRlcnMgPiAxKQogCQlmcHJpbnRmKHN0ZG91dCwgIlx0W3ddICAgICB0b2dnbGUgZGlzcGxheSB3ZWlnaHRlZC9jb3VudFtFXXIuIFx0KCVkKVxuIiwgZGlzcGxheV93ZWlnaHRlZCA/IDEgOiAwKTsKIAorCWZwcmludGYoc3Rkb3V0LAorCQkiXHRbS10gICAgIGhpZGUga2VybmVsX3N5bWJvbHMgc3ltYm9scy4gICAgICAgICAgICAgXHQoJXMpXG4iLAorCQloaWRlX2tlcm5lbF9zeW1ib2xzID8gInllcyIgOiAibm8iKTsKKwlmcHJpbnRmKHN0ZG91dCwKKwkJIlx0W1VdICAgICBoaWRlIHVzZXIgc3ltYm9scy4gICAgICAgICAgICAgICBcdCglcylcbiIsCisJCWhpZGVfdXNlcl9zeW1ib2xzID8gInllcyIgOiAibm8iKTsKIAlmcHJpbnRmKHN0ZG91dCwgIlx0W3pdICAgICB0b2dnbGUgc2FtcGxlIHplcm9pbmcuICAgICAgICAgICAgIFx0KCVkKVxuIiwgemVybyA/IDEgOiAwKTsKIAlmcHJpbnRmKHN0ZG91dCwgIlx0W3FRXSAgICBxdWl0LlxuIik7CiB9CkBAIC02NDMsNiArNzIzLDggQEAKIAkJY2FzZSAneic6CiAJCWNhc2UgJ3EnOgogCQljYXNlICdRJzoKKwkJY2FzZSAnSyc6CisJCWNhc2UgJ1UnOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgJ0UnOgogCQljYXNlICd3JzoKQEAgLTY1MCw3ICs3MzIsNyBAQAogCQljYXNlICdGJzoKIAkJY2FzZSAncyc6CiAJCWNhc2UgJ1MnOgotCQkJcmV0dXJuIHZtbGludXhfbmFtZSA/IDEgOiAwOworCQkJcmV0dXJuIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA/IDEgOiAwOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpAQCAtNjg2LDkgKzc2OCwxNiBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOworCQkJaWYgKHByaW50X2VudHJpZXMgPT0gMCkgeworCQkJCXNpZ193aW5jaF9oYW5kbGVyKFNJR1dJTkNIKTsKKwkJCQlzaWduYWwoU0lHV0lOQ0gsIHNpZ193aW5jaF9oYW5kbGVyKTsKKwkJCX0gZWxzZQorCQkJCXNpZ25hbChTSUdXSU5DSCwgU0lHX0RGTCk7CiAJCQlicmVhazsKIAkJY2FzZSAnRSc6CiAJCQlpZiAobnJfY291bnRlcnMgPiAxKSB7CkBAIC03MTMsOSArODAyLDE0IEBACiAJCWNhc2UgJ0YnOgogCQkJcHJvbXB0X3BlcmNlbnQoJnN5bV9wY250X2ZpbHRlciwgIkVudGVyIGRldGFpbHMgZGlzcGxheSBldmVudCBmaWx0ZXIgKHBlcmNlbnQpIik7CiAJCQlicmVhazsKKwkJY2FzZSAnSyc6CisJCQloaWRlX2tlcm5lbF9zeW1ib2xzID0gIWhpZGVfa2VybmVsX3N5bWJvbHM7CisJCQlicmVhazsKIAkJY2FzZSAncSc6CiAJCWNhc2UgJ1EnOgogCQkJcHJpbnRmKCJleGl0aW5nLlxuIik7CisJCQlpZiAoZHVtcF9zeW10YWIpCisJCQkJZHNvc19fZnByaW50ZihzdGRlcnIpOwogCQkJZXhpdCgwKTsKIAkJY2FzZSAncyc6CiAJCQlwcm9tcHRfc3ltYm9sKCZzeW1fZmlsdGVyX2VudHJ5LCAiRW50ZXIgZGV0YWlscyBzeW1ib2wiKTsKQEAgLTcyNiwxMiArODIwLDE1IEBACiAJCQllbHNlIHsKIAkJCQlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lID0gc3ltX2ZpbHRlcl9lbnRyeTsKIAotCQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c291cmNlX2xvY2spOworCQkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKIAkJCQlzeW1fZmlsdGVyX2VudHJ5ID0gTlVMTDsKIAkJCQlfX3plcm9fc291cmNlX2NvdW50ZXJzKHN5bWUpOwotCQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zb3VyY2VfbG9jayk7CisJCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQloaWRlX3VzZXJfc3ltYm9scyA9ICFoaWRlX3VzZXJfc3ltYm9sczsKKwkJCWJyZWFrOwogCQljYXNlICd3JzoKIAkJCWRpc3BsYXlfd2VpZ2h0ZWQgPSB+ZGlzcGxheV93ZWlnaHRlZDsKIAkJCWJyZWFrOwpAQCAtNzg4LDcgKzg4NSw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIGludCBzeW1ib2xfZmlsdGVyKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyBpbnQgc3ltYm9sX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBzeW0tPm5hbWU7CkBAIC04MTAsOCArOTA3LDkgQEAKIAkgICAgc3Ryc3RyKG5hbWUsICJfdGV4dF9lbmQiKSkKIAkJcmV0dXJuIDE7CiAKLQlzeW1lID0gZHNvX19zeW1fcHJpdihzZWxmLCBzeW0pOwotCXB0aHJlYWRfbXV0ZXhfaW5pdCgmc3ltZS0+c291cmNlX2xvY2ssIE5VTEwpOworCXN5bWUgPSBzeW1ib2xfX3ByaXYoc3ltKTsKKwlzeW1lLT5tYXAgPSBtYXA7CisJc3ltZS0+c3JjID0gTlVMTDsKIAlpZiAoIXN5bV9maWx0ZXJfZW50cnkgJiYgc3ltX2ZpbHRlciAmJiAhc3RyY21wKG5hbWUsIHN5bV9maWx0ZXIpKQogCQlzeW1fZmlsdGVyX2VudHJ5ID0gc3ltZTsKIApAQCAtODIyLDc1ICs5MjAsNjUgQEAKIAkJfQogCX0KIAorCWlmICghc3ltZS0+c2tpcCkKKwkJc3ltZS0+bmFtZV9sZW4gPSBzdHJsZW4oc3ltLT5uYW1lKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3N5bWJvbHModm9pZCkKK3N0YXRpYyB2b2lkIGV2ZW50X19wcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBpbnQgY291bnRlcikKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKLQlzdHJ1Y3Qgc3ltYm9sICAqc3ltOwotCWludCB1c2VfbW9kdWxlcyA9IHZtbGludXhfbmFtZSA/IDEgOiAwOworCXU2NCBpcCA9IHNlbGYtPmlwLmlwOworCXN0cnVjdCBzeW1fZW50cnkgKnN5bWU7CisJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJdTggb3JpZ2luID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIAotCWtlcm5lbF9kc28gPSBkc29fX25ldygiW2tlcm5lbF0iLCBzaXplb2Yoc3RydWN0IHN5bV9lbnRyeSkpOwotCWlmIChrZXJuZWxfZHNvID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWlmIChkc29fX2xvYWRfa2VybmVsKGtlcm5lbF9kc28sIHZtbGludXhfbmFtZSwgc3ltYm9sX2ZpbHRlciwgdmVyYm9zZSwgdXNlX21vZHVsZXMpIDw9IDApCi0JCWdvdG8gb3V0X2RlbGV0ZV9kc287Ci0KLQlub2RlID0gcmJfZmlyc3QoJmtlcm5lbF9kc28tPnN5bXMpOwotCXN5bSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwotCW1pbl9pcCA9IHN5bS0+c3RhcnQ7Ci0KLQlub2RlID0gcmJfbGFzdCgma2VybmVsX2Rzby0+c3ltcyk7Ci0Jc3ltID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7Ci0JbWF4X2lwID0gc3ltLT5lbmQ7Ci0KLQlpZiAoZHVtcF9zeW10YWIpCi0JCWRzb19fZnByaW50ZihrZXJuZWxfZHNvLCBzdGRlcnIpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9kZWxldGVfZHNvOgotCWRzb19fZGVsZXRlKGtlcm5lbF9kc28pOwotCWtlcm5lbF9kc28gPSBOVUxMOwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEJpbmFyeSBzZWFyY2ggaW4gdGhlIGhpc3RvZ3JhbSB0YWJsZSBhbmQgcmVjb3JkIHRoZSBoaXQ6Ci0gKi8KLXN0YXRpYyB2b2lkIHJlY29yZF9pcCh1NjQgaXAsIGludCBjb3VudGVyKQotewotCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGRzb19fZmluZF9zeW1ib2woa2VybmVsX2RzbywgaXApOwotCi0JaWYgKHN5bSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBzeW1fZW50cnkgKnN5bWUgPSBkc29fX3N5bV9wcml2KGtlcm5lbF9kc28sIHN5bSk7Ci0KLQkJaWYgKCFzeW1lLT5za2lwKSB7Ci0JCQlzeW1lLT5jb3VudFtjb3VudGVyXSsrOwotCQkJcmVjb3JkX3ByZWNpc2VfaXAoc3ltZSwgY291bnRlciwgaXApOwotCQkJcHRocmVhZF9tdXRleF9sb2NrKCZhY3RpdmVfc3ltYm9sc19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQotCQkJCV9fbGlzdF9pbnNlcnRfYWN0aXZlX3N5bShzeW1lKTsKLQkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhY3RpdmVfc3ltYm9sc19sb2NrKTsKKwlzd2l0Y2ggKG9yaWdpbikgeworCWNhc2UgUEVSRl9SRUNPUkRfTUlTQ19VU0VSOgorCQlpZiAoaGlkZV91c2VyX3N5bWJvbHMpCiAJCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlzYW1wbGVzLS07Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfZXZlbnQodTY0IGlwLCBpbnQgY291bnRlciwgaW50IHVzZXIpCi17Ci0Jc2FtcGxlcysrOwotCi0JaWYgKHVzZXIpIHsKLQkJdXNlcnNwYWNlX3NhbXBsZXMrKzsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDoKKwkJaWYgKGhpZGVfa2VybmVsX3N5bWJvbHMpCisJCQlyZXR1cm47CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CiAKLQlyZWNvcmRfaXAoaXAsIGNvdW50ZXIpOworCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKKwkgICAgYWwuc3ltID09IE5VTEwpCisJCXJldHVybjsKKworCXN5bWUgPSBzeW1ib2xfX3ByaXYoYWwuc3ltKTsKKwlpZiAoIXN5bWUtPnNraXApIHsKKwkJc3ltZS0+Y291bnRbY291bnRlcl0rKzsKKwkJc3ltZS0+b3JpZ2luID0gb3JpZ2luOworCQlyZWNvcmRfcHJlY2lzZV9pcChzeW1lLCBjb3VudGVyLCBpcCk7CisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQorCQkJX19saXN0X2luc2VydF9hY3RpdmVfc3ltKHN5bWUpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7CisJCWlmIChvcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKQorCQkJKyt1c2Vyc3BhY2Vfc2FtcGxlczsKKwkJKytzYW1wbGVzOworCX0KK30KKworc3RhdGljIGludCBldmVudF9fcHJvY2VzcyhldmVudF90ICpldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgeworCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKKwkJZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudCk7CisJCWJyZWFrOworCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKKwkJZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgbW1hcF9kYXRhIHsKQEAgLTkxMSw4ICs5OTksNiBAQAogCXJldHVybiBoZWFkOwogfQogCi1zdHJ1Y3QgdGltZXZhbCBsYXN0X3JlYWQsIHRoaXNfcmVhZDsKLQogc3RhdGljIHZvaWQgbW1hcF9yZWFkX2NvdW50ZXIoc3RydWN0IG1tYXBfZGF0YSAqbWQpCiB7CiAJdW5zaWduZWQgaW50IGhlYWQgPSBtbWFwX3JlYWRfaGVhZChtZCk7CkBAIC05MjAsOCArMTAwNiw2IEBACiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IG1kLT5iYXNlICsgcGFnZV9zaXplOwogCWludCBkaWZmOwogCi0JZ2V0dGltZW9mZGF5KCZ0aGlzX3JlYWQsIE5VTEwpOwotCiAJLyoKIAkgKiBJZiB3ZSdyZSBmdXJ0aGVyIGJlaGluZCB0aGFuIGhhbGYgdGhlIGJ1ZmZlciwgdGhlcmUncyBhIGNoYW5jZQogCSAqIHRoZSB3cml0ZXIgd2lsbCBiaXRlIG91ciB0YWlsIGFuZCBtZXNzIHVwIHRoZSBzYW1wbGVzIHVuZGVyIHVzLgpAQCAtOTMyLDE0ICsxMDE2LDcgQEAKIAkgKi8KIAlkaWZmID0gaGVhZCAtIG9sZDsKIAlpZiAoZGlmZiA+IG1kLT5tYXNrIC8gMiB8fCBkaWZmIDwgMCkgewotCQlzdHJ1Y3QgdGltZXZhbCBpdjsKLQkJdW5zaWduZWQgbG9uZyBtc2VjczsKLQotCQl0aW1lcnN1YigmdGhpc19yZWFkLCAmbGFzdF9yZWFkLCAmaXYpOwotCQltc2VjcyA9IGl2LnR2X3NlYyoxMDAwICsgaXYudHZfdXNlYy8xMDAwOwotCi0JCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIGtlZXAgdXAgd2l0aCBtbWFwIGRhdGEuIgotCQkJCSIgIExhc3QgcmVhZCAlbHUgbXNlY3MgYWdvLlxuIiwgbXNlY3MpOworCQlmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBrZWVwIHVwIHdpdGggbW1hcCBkYXRhLlxuIik7CiAKIAkJLyoKIAkJICogaGVhZCBwb2ludHMgdG8gYSBrbm93biBnb29kIGVudHJ5LCBzdGFydCB0aGVyZS4KQEAgLTk0Nyw4ICsxMDI0LDYgQEAKIAkJb2xkID0gaGVhZDsKIAl9CiAKLQlsYXN0X3JlYWQgPSB0aGlzX3JlYWQ7Ci0KIAlmb3IgKDsgb2xkICE9IGhlYWQ7KSB7CiAJCWV2ZW50X3QgKmV2ZW50ID0gKGV2ZW50X3QgKikmZGF0YVtvbGQgJiBtZC0+bWFza107CiAKQEAgLTk3NiwxMyArMTA1MSwxMSBAQAogCQkJZXZlbnQgPSAmZXZlbnRfY29weTsKIAkJfQogCisJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKQorCQkJZXZlbnRfX3Byb2Nlc3Nfc2FtcGxlKGV2ZW50LCBtZC0+Y291bnRlcik7CisJCWVsc2UKKwkJCWV2ZW50X19wcm9jZXNzKGV2ZW50KTsKIAkJb2xkICs9IHNpemU7Ci0KLQkJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX1JFQ09SRF9TQU1QTEUpIHsKLQkJCWludCB1c2VyID0KLQkoZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0spID09IFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKLQkJCXByb2Nlc3NfZXZlbnQoZXZlbnQtPmlwLmlwLCBtZC0+Y291bnRlciwgdXNlcik7Ci0JCX0KIAl9CiAKIAltZC0+cHJldiA9IG9sZDsKQEAgLTEwMTYsOCArMTA4OSwxNSBAQAogCWF0dHIgPSBhdHRycyArIGNvdW50ZXI7CiAKIAlhdHRyLT5zYW1wbGVfdHlwZQk9IFBFUkZfU0FNUExFX0lQIHwgUEVSRl9TQU1QTEVfVElEOwotCWF0dHItPmZyZXEJCT0gZnJlcTsKKworCWlmIChmcmVxKSB7CisJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1BFUklPRDsKKwkJYXR0ci0+ZnJlcQkJPSAxOworCQlhdHRyLT5zYW1wbGVfZnJlcQk9IGZyZXE7CisJfQorCiAJYXR0ci0+aW5oZXJpdAkJPSAoY3B1IDwgMCkgJiYgaW5oZXJpdDsKKwlhdHRyLT5tbWFwCQk9IDE7CiAKIHRyeV9hZ2FpbjoKIAlmZFtpXVtjb3VudGVyXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwgdGFyZ2V0X3BpZCwgY3B1LCBncm91cF9mZCwgMCk7CkBAIC0xMDI1LDcgKzExMDUsNyBAQAogCWlmIChmZFtpXVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwogCi0JCWlmIChlcnIgPT0gRVBFUk0pCisJCWlmIChlcnIgPT0gRVBFUk0gfHwgZXJyID09IEVBQ0NFUykKIAkJCWRpZSgiTm8gcGVybWlzc2lvbiAtIGFyZSB5b3Ugcm9vdD9cbiIpOwogCQkvKgogCQkgKiBJZiBpdCdzIGN5Y2xlcyB0aGVuIGZhbGwgYmFjayB0byBocnRpbWVyCkBAIC0xMDc2LDYgKzExNTYsMTEgQEAKIAlpbnQgaSwgY291bnRlcjsKIAlpbnQgcmV0OwogCisJaWYgKHRhcmdldF9waWQgIT0gLTEpCisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZCh0YXJnZXRfcGlkLCBldmVudF9fcHJvY2Vzcyk7CisJZWxzZQorCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19wcm9jZXNzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyBpKyspIHsKIAkJZ3JvdXBfZmQgPSAtMTsKIAkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCkBAIC0xMTMxLDcgKzEyMTYsMTAgQEAKIAkJCSAgICAic3lzdGVtLXdpZGUgY29sbGVjdGlvbiBmcm9tIGFsbCBDUFVzIiksCiAJT1BUX0lOVEVHRVIoJ0MnLCAiQ1BVIiwgJnByb2ZpbGVfY3B1LAogCQkgICAgIkNQVSB0byBwcm9maWxlIG9uIiksCi0JT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnZtbGludXhfbmFtZSwgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoJ2snLCAidm1saW51eCIsICZzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsCisJCSAgICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKKwlPUFRfQk9PTEVBTignSycsICJoaWRlX2tlcm5lbF9zeW1ib2xzIiwgJmhpZGVfa2VybmVsX3N5bWJvbHMsCisJCSAgICAiaGlkZSBrZXJuZWwgc3ltYm9scyIpLAogCU9QVF9JTlRFR0VSKCdtJywgIm1tYXAtcGFnZXMiLCAmbW1hcF9wYWdlcywKIAkJICAgICJudW1iZXIgb2YgbW1hcCBkYXRhIHBhZ2VzIiksCiAJT1BUX0lOVEVHRVIoJ3InLCAicmVhbHRpbWUiLCAmcmVhbHRpbWVfcHJpbywKQEAgLTExNTQsNiArMTI0Miw4IEBACiAJCSAgICAicHJvZmlsZSBhdCB0aGlzIGZyZXF1ZW5jeSIpLAogCU9QVF9JTlRFR0VSKCdFJywgImVudHJpZXMiLCAmcHJpbnRfZW50cmllcywKIAkJICAgICJkaXNwbGF5IHRoaXMgbWFueSBmdW5jdGlvbnMiKSwKKwlPUFRfQk9PTEVBTignVScsICJoaWRlX3VzZXJfc3ltYm9scyIsICZoaWRlX3VzZXJfc3ltYm9scywKKwkJICAgICJoaWRlIHVzZXIgc3ltYm9scyIpLAogCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgY291bnRlciBvcGVuIGVycm9ycywgZXRjKSIpLAogCU9QVF9FTkQoKQpAQCAtMTE2MywxOSArMTI1MywxMiBAQAogewogCWludCBjb3VudGVyOwogCi0Jc3ltYm9sX19pbml0KCk7Ci0KIAlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdG9wX3VzYWdlLCAwKTsKIAlpZiAoYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7CiAKLQlpZiAoZnJlcSkgewotCQlkZWZhdWx0X2ludGVydmFsID0gZnJlcTsKLQkJZnJlcSA9IDE7Ci0JfQotCiAJLyogQ1BVIGFuZCBQSUQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCWlmICh0YXJnZXRfcGlkICE9IC0xICYmIHByb2ZpbGVfY3B1ICE9IC0xKSB7CiAJCXByaW50ZigiV0FSTklORzogUElEIHN3aXRjaCBvdmVycmlkaW5nIENQVVxuIik7CkBAIC0xMTg2LDEzICsxMjY5LDMxIEBACiAJaWYgKCFucl9jb3VudGVycykKIAkJbnJfY291bnRlcnMgPSAxOwogCisJc3ltYm9sX2NvbmYucHJpdl9zaXplID0gKHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSArCisJCQkJIChucl9jb3VudGVycyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCisJCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOworCWlmIChzeW1ib2xfX2luaXQoJnN5bWJvbF9jb25mKSA8IDApCisJCXJldHVybiAtMTsKKwogCWlmIChkZWxheV9zZWNzIDwgMSkKIAkJZGVsYXlfc2VjcyA9IDE7CiAKLQlwYXJzZV9zeW1ib2xzKCk7CiAJcGFyc2Vfc291cmNlKHN5bV9maWx0ZXJfZW50cnkpOwogCiAJLyoKKwkgKiBVc2VyIHNwZWNpZmllZCBjb3VudCBvdmVycmlkZXMgZGVmYXVsdCBmcmVxdWVuY3kuCisJICovCisJaWYgKGRlZmF1bHRfaW50ZXJ2YWwpCisJCWZyZXEgPSAwOworCWVsc2UgaWYgKGZyZXEpIHsKKwkJZGVmYXVsdF9pbnRlcnZhbCA9IGZyZXE7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJmcmVxdWVuY3kgYW5kIGNvdW50IGFyZSB6ZXJvLCBhYm9ydGluZ1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKgogCSAqIEZpbGwgaW4gdGhlIG9uZXMgbm90IHNwZWNpZmljYWxseSBpbml0aWFsaXplZCB2aWEgLWM6CiAJICovCiAJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspIHsKQEAgLTEyMDksNSArMTMxMCwxMSBAQAogCWlmICh0YXJnZXRfcGlkICE9IC0xIHx8IHByb2ZpbGVfY3B1ICE9IC0xKQogCQlucl9jcHVzID0gMTsKIAorCWdldF90ZXJtX2RpbWVuc2lvbnMoJndpbnNpemUpOworCWlmIChwcmludF9lbnRyaWVzID09IDApIHsKKwkJdXBkYXRlX3ByaW50X2VudHJpZXMoJndpbnNpemUpOworCQlzaWduYWwoU0lHV0lOQ0gsIHNpZ193aW5jaF9oYW5kbGVyKTsKKwl9CisKIAlyZXR1cm4gX19jbWRfdG9wKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IDBjNWU0ZjcuLmFiYjkxNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC01LDYgKzUsNTAgQEAKICNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCiAjaW5jbHVkZSAidXRpbC9oZWFkZXIuaCIKKyNpbmNsdWRlICJ1dGlsL2V4ZWNfY21kLmgiCisjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgorCitzdGF0aWMgY2hhciBjb25zdAkJKnNjcmlwdF9uYW1lOworc3RhdGljIGNoYXIgY29uc3QJCSpnZW5lcmF0ZV9zY3JpcHRfbGFuZzsKKworc3RhdGljIGludCBkZWZhdWx0X3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQgX19hdHRyaWJ1dGUoKHVudXNlZCkpKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfc3RvcF9zY3JpcHQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWZhdWx0X2dlbmVyYXRlX3NjcmlwdChjb25zdCBjaGFyICpvdXRmaWxlIF9fYXR0cmlidXRlICgodW51c2VkKSkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBkZWZhdWx0X3NjcmlwdGluZ19vcHMgPSB7CisJLnN0YXJ0X3NjcmlwdAkJPSBkZWZhdWx0X3N0YXJ0X3NjcmlwdCwKKwkuc3RvcF9zY3JpcHQJCT0gZGVmYXVsdF9zdG9wX3NjcmlwdCwKKwkucHJvY2Vzc19ldmVudAkJPSBwcmludF9ldmVudCwKKwkuZ2VuZXJhdGVfc2NyaXB0CT0gZGVmYXVsdF9nZW5lcmF0ZV9zY3JpcHQsCit9OworCitzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMJKnNjcmlwdGluZ19vcHM7CisKK3N0YXRpYyB2b2lkIHNldHVwX3NjcmlwdGluZyh2b2lkKQoreworCS8qIG1ha2Ugc3VyZSBQRVJGX0VYRUNfUEFUSCBpcyBzZXQgZm9yIHNjcmlwdHMgKi8KKwlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChwZXJmX2V4ZWNfcGF0aCgpKTsKKworCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7CisKKwlzY3JpcHRpbmdfb3BzID0gJmRlZmF1bHRfc2NyaXB0aW5nX29wczsKK30KKworc3RhdGljIGludCBjbGVhbnVwX3NjcmlwdGluZyh2b2lkKQoreworCXJldHVybiBzY3JpcHRpbmdfb3BzLT5zdG9wX3NjcmlwdCgpOworfQogCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAKQEAgLTEyLDU5ICs1NiwyMiBAQAogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIAogI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKyNpbmNsdWRlICJ1dGlsL2RhdGFfbWFwLmgiCisjaW5jbHVkZSAidXRpbC9leGVjX2NtZC5oIgogCi1zdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKLXN0YXRpYyBpbnQJCWlucHV0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcJcGFnZV9zaXplOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJbW1hcF93aW5kb3cgPSAzMjsKK3N0YXRpYyBjaGFyIGNvbnN0CQkqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwl0b3RhbCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwl0b3RhbF9jb21tID0gMDsKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKK3N0YXRpYyB1NjQJCQlzYW1wbGVfdHlwZTsKIAotc3RhdGljIHN0cnVjdCByYl9yb290CXRocmVhZHM7Ci1zdGF0aWMgc3RydWN0IHRocmVhZAkqbGFzdF9tYXRjaDsKLQotc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyOwotc3RhdGljIHU2NAkJc2FtcGxlX3R5cGU7Ci0KLQotc3RhdGljIGludAotcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQorc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCkKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7Ci0KLQl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKLQotCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF9DT01NOiAlczolZFxuIiwKLQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCi0JCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwgfHwKLQkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQl0b3RhbF9jb21tKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCi17Ci0JY2hhciBsZXZlbDsKLQlpbnQgc2hvdyA9IDA7Ci0Jc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAJdTY0IGlwID0gZXZlbnQtPmlwLmlwOwogCXU2NCB0aW1lc3RhbXAgPSAtMTsKIAl1MzIgY3B1ID0gLTE7CiAJdTY0IHBlcmlvZCA9IDE7CiAJdm9pZCAqbW9yZV9kYXRhID0gZXZlbnQtPmlwLl9fbW9yZV9kYXRhOwotCWludCBjcHVtb2RlOwotCi0JdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CiAKIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7CiAJCXRpbWVzdGFtcCA9ICoodTY0ICopbW9yZV9kYXRhOwpAQCAtODIsNDUgKzg5LDE5IEBACiAJCW1vcmVfZGF0YSArPSBzaXplb2YodTY0KTsKIAl9CiAKLQlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9SRUNPUkRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCi0JCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAogCQlldmVudC0+aGVhZGVyLm1pc2MsCiAJCWV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC50aWQsCiAJCSh2b2lkICopKGxvbmcpaXAsCiAJCShsb25nIGxvbmcpcGVyaW9kKTsKIAotCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOwotCiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7Ci0JCWVwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAotCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQljcHVtb2RlID0gZXZlbnQtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7Ci0KLQlpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTCkgewotCQlzaG93ID0gU0hPV19LRVJORUw7Ci0JCWxldmVsID0gJ2snOwotCi0JCWRzbyA9IGtlcm5lbF9kc287Ci0KLQkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKLQotCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIpIHsKLQotCQlzaG93ID0gU0hPV19VU0VSOwotCQlsZXZlbCA9ICcuJzsKLQotCX0gZWxzZSB7Ci0JCXNob3cgPSBTSE9XX0hWOwotCQlsZXZlbCA9ICdIJzsKLQotCQlkc28gPSBoeXBlcnZpc29yX2RzbzsKLQotCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286IFtoeXBlcnZpc29yXVxuIik7Ci0JfQorCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOwogCiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CiAJCXN0cnVjdCB7CkBAIC0xMzMsMTI4ICsxMTQsMTg5IEBACiAJCSAqIGZpZWxkLCBhbHRob3VnaCBpdCBzaG91bGQgYmUgdGhlIHNhbWUgdGhhbiB0aGlzIHBlcmYKIAkJICogZXZlbnQgcGlkCiAJCSAqLwotCQlwcmludF9ldmVudChjcHUsIHJhdy0+ZGF0YSwgcmF3LT5zaXplLCB0aW1lc3RhbXAsIHRocmVhZC0+Y29tbSk7CisJCXNjcmlwdGluZ19vcHMtPnByb2Nlc3NfZXZlbnQoY3B1LCByYXctPmRhdGEsIHJhdy0+c2l6ZSwKKwkJCQkJICAgICB0aW1lc3RhbXAsIHRocmVhZC0+Y29tbSk7CiAJfQotCXRvdGFsICs9IHBlcmlvZDsKKwlldmVudF9fc3RhdHMudG90YWwgKz0gcGVyaW9kOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nlc3NfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCitzdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHU2NCB0eXBlKQogewotCXRyYWNlX2V2ZW50KGV2ZW50KTsKKwlzYW1wbGVfdHlwZSA9IHR5cGU7CiAKLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfTU1BUCAuLi4gUEVSRl9SRUNPUkRfTE9TVDoKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX0NPTU06Ci0JCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7Ci0KLQljYXNlIFBFUkZfUkVDT1JEX0VYSVQgLi4uIFBFUkZfUkVDT1JEX1JFQUQ6Ci0JCXJldHVybiAwOwotCi0JY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6Ci0JCXJldHVybiBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKLQotCWNhc2UgUEVSRl9SRUNPUkRfTUFYOgotCWRlZmF1bHQ6CisJaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgorCQkJIndpdGhvdXQgLVI/Iik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciBmaWxlX2hhbmRsZXIgPSB7CisJLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCisJLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCit9OworCiBzdGF0aWMgaW50IF9fY21kX3RyYWNlKHZvaWQpCiB7Ci0JaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgaGVhZCA9IDA7Ci0Jc3RydWN0IHN0YXQgcGVyZl9zdGF0OwotCWV2ZW50X3QgKmV2ZW50OwotCXVpbnQzMl90IHNpemU7Ci0JY2hhciAqYnVmOworCXJlZ2lzdGVyX2lkbGVfdGhyZWFkKCk7CisJcmVnaXN0ZXJfcGVyZl9maWxlX2hhbmRsZXIoJmZpbGVfaGFuZGxlcik7CiAKLQl0cmFjZV9yZXBvcnQoKTsKLQlyZWdpc3Rlcl9pZGxlX3RocmVhZCgmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCXJldHVybiBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZSgmaGVhZGVyLCBpbnB1dF9uYW1lLAorCQkJCSAgICAgICAwLCAwLCAmZXZlbnRfX2N3ZGxlbiwgJmV2ZW50X19jd2QpOworfQogCi0JaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKLQlpZiAoaW5wdXQgPCAwKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIG9wZW4gZmlsZSIpOwotCQlleGl0KC0xKTsKK3N0cnVjdCBzY3JpcHRfc3BlYyB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBzY3JpcHRpbmdfb3BzCSpvcHM7CisJY2hhcgkJCXNwZWNbMF07Cit9OworCitMSVNUX0hFQUQoc2NyaXB0X3NwZWNzKTsKKworc3RhdGljIHN0cnVjdCBzY3JpcHRfc3BlYyAqc2NyaXB0X3NwZWNfX25ldyhjb25zdCBjaGFyICpzcGVjLAorCQkJCQkgICAgc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcykKK3sKKwlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBtYWxsb2Moc2l6ZW9mKCpzKSArIHN0cmxlbihzcGVjKSArIDEpOworCisJaWYgKHMgIT0gTlVMTCkgeworCQlzdHJjcHkocy0+c3BlYywgc3BlYyk7CisJCXMtPm9wcyA9IG9wczsKIAl9CiAKLQlyZXQgPSBmc3RhdChpbnB1dCwgJnBlcmZfc3RhdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7Ci0JCWV4aXQoLTEpOworCXJldHVybiBzOworfQorCitzdGF0aWMgdm9pZCBzY3JpcHRfc3BlY19fZGVsZXRlKHN0cnVjdCBzY3JpcHRfc3BlYyAqcykKK3sKKwlmcmVlKHMtPnNwZWMpOworCWZyZWUocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNjcmlwdF9zcGVjX19hZGQoc3RydWN0IHNjcmlwdF9zcGVjICpzKQoreworCWxpc3RfYWRkX3RhaWwoJnMtPm5vZGUsICZzY3JpcHRfc3BlY3MpOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZChjb25zdCBjaGFyICpzcGVjKQoreworCXN0cnVjdCBzY3JpcHRfc3BlYyAqczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNjcmlwdF9zcGVjcywgbm9kZSkKKwkJaWYgKHN0cmNhc2VjbXAocy0+c3BlYywgc3BlYykgPT0gMCkKKwkJCXJldHVybiBzOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZG5ldyhjb25zdCBjaGFyICpzcGVjLAorCQkJCQkJc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcykKK3sKKwlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKKworCWlmIChzKQorCQlyZXR1cm4gczsKKworCXMgPSBzY3JpcHRfc3BlY19fbmV3KHNwZWMsIG9wcyk7CisJaWYgKCFzKQorCQlnb3RvIG91dF9kZWxldGVfc3BlYzsKKworCXNjcmlwdF9zcGVjX19hZGQocyk7CisKKwlyZXR1cm4gczsKKworb3V0X2RlbGV0ZV9zcGVjOgorCXNjcmlwdF9zcGVjX19kZWxldGUocyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBzY3JpcHRpbmdfb3BzICpvcHMpCit7CisJc3RydWN0IHNjcmlwdF9zcGVjICpzOworCisJcyA9IHNjcmlwdF9zcGVjX19maW5kKHNwZWMpOworCWlmIChzKQorCQlyZXR1cm4gLTE7CisKKwlzID0gc2NyaXB0X3NwZWNfX2ZpbmRuZXcoc3BlYywgb3BzKTsKKwlpZiAoIXMpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdF9zcGVjX19sb29rdXAoY29uc3QgY2hhciAqc3BlYykKK3sKKwlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKKwlpZiAoIXMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHMtPm9wczsKK30KKworc3RhdGljIHZvaWQgbGlzdF9hdmFpbGFibGVfbGFuZ3VhZ2VzKHZvaWQpCit7CisJc3RydWN0IHNjcmlwdF9zcGVjICpzOworCisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCWZwcmludGYoc3RkZXJyLCAiU2NyaXB0aW5nIGxhbmd1YWdlIGV4dGVuc2lvbnMgKHVzZWQgaW4gIgorCQkicGVyZiB0cmFjZSAtcyBbc3BlYzpdc2NyaXB0LltzcGVjXSk6XG5cbiIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc2NyaXB0X3NwZWNzLCBub2RlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MnMgWyVzXVxuIiwgcy0+c3BlYywgcy0+b3BzLT5uYW1lKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIGludCBwYXJzZV9zY3JpcHRuYW1lKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQoreworCWNoYXIgc3BlY1tQQVRIX01BWF07CisJY29uc3QgY2hhciAqc2NyaXB0LCAqZXh0OworCWludCBsZW47CisKKwlpZiAoc3RyY21wKHN0ciwgImxpc3QiKSA9PSAwKSB7CisJCWxpc3RfYXZhaWxhYmxlX2xhbmd1YWdlcygpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIXBlcmZfc3RhdC5zdF9zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCWV4aXQoMCk7Ci0JfQotCWhlYWRlciA9IHBlcmZfaGVhZGVyX19yZWFkKGlucHV0KTsKLQloZWFkID0gaGVhZGVyLT5kYXRhX29mZnNldDsKLQlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOwotCi0JaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKQotCQlkaWUoIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgotCQkgICAgIndpdGhvdXQgLVI/Iik7Ci0KLQlpZiAobG9hZF9rZXJuZWwoKSA8IDApIHsKLQkJcGVycm9yKCJmYWlsZWQgdG8gbG9hZCBrZXJuZWwgc3ltYm9scyIpOwotCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCXNjcmlwdCA9IHN0cmNocihzdHIsICc6Jyk7CisJaWYgKHNjcmlwdCkgeworCQlsZW4gPSBzY3JpcHQgLSBzdHI7CisJCWlmIChsZW4gPj0gUEFUSF9NQVgpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBsYW5ndWFnZSBzcGVjaWZpZXIiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdHJuY3B5KHNwZWMsIHN0ciwgbGVuKTsKKwkJc3BlY1tsZW5dID0gJ1wwJzsKKwkJc2NyaXB0aW5nX29wcyA9IHNjcmlwdF9zcGVjX19sb29rdXAoc3BlYyk7CisJCWlmICghc2NyaXB0aW5nX29wcykgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGxhbmd1YWdlIHNwZWNpZmllciIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXNjcmlwdCsrOworCX0gZWxzZSB7CisJCXNjcmlwdCA9IHN0cjsKKwkJZXh0ID0gc3RyY2hyKHNjcmlwdCwgJy4nKTsKKwkJaWYgKCFleHQpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBzY3JpcHQgZXh0ZW5zaW9uIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc2NyaXB0aW5nX29wcyA9IHNjcmlwdF9zcGVjX19sb29rdXAoKytleHQpOworCQlpZiAoIXNjcmlwdGluZ19vcHMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBzY3JpcHQgZXh0ZW5zaW9uIik7CisJCQlyZXR1cm4gLTE7CisJCX0KIAl9CiAKLXJlbWFwOgotCWJ1ZiA9IChjaGFyICopbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAotCQkJICAgTUFQX1NIQVJFRCwgaW5wdXQsIG9mZnNldCk7Ci0JaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIG1tYXAgZmlsZSIpOwotCQlleGl0KC0xKTsKLQl9CisJc2NyaXB0X25hbWUgPSBzdHJkdXAoc2NyaXB0KTsKIAotbW9yZToKLQlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOwotCi0JaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogbW1hcF93aW5kb3cpIHsKLQkJdW5zaWduZWQgbG9uZyBzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQkJaW50IHJlczsKLQotCQlyZXMgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChyZXMgPT0gMCk7Ci0KLQkJb2Zmc2V0ICs9IHNoaWZ0OwotCQloZWFkIC09IHNoaWZ0OwotCQlnb3RvIHJlbWFwOwotCX0KLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0KLQlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKLQotCQkvKgotCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZAotCQkgKiBpbmNyZW1lbnQgYSBzaW5nbGUgdTY0IGluIHRoZSBob3BlIHRvIGNhdGNoIG9uIGFnYWluICdzb29uJy4KLQkJICovCi0KLQkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKLQkJCWhlYWQgJj0gfjdVTEw7Ci0KLQkJc2l6ZSA9IDg7Ci0JfQotCi0JaGVhZCArPSBzaXplOwotCi0JaWYgKG9mZnNldCArIGhlYWQgPCAodW5zaWduZWQgbG9uZylwZXJmX3N0YXQuc3Rfc2l6ZSkKLQkJZ290byBtb3JlOwotCi0JcmMgPSBFWElUX1NVQ0NFU1M7Ci0JY2xvc2UoaW5wdXQpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFubm90YXRlX3VzYWdlW10gPSB7CkBAIC0yNjcsMTMgKzMwOSwyNCBAQAogCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCiAJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAorCU9QVF9CT09MRUFOKCdsJywgImxhdGVuY3kiLCAmbGF0ZW5jeV9mb3JtYXQsCisJCSAgICAic2hvdyBsYXRlbmN5IGF0dHJpYnV0ZXMgKGlycXMvcHJlZW1wdGlvbiBkaXNhYmxlZCwgZXRjKSIpLAorCU9QVF9DQUxMQkFDSygncycsICJzY3JpcHQiLCBOVUxMLCAibmFtZSIsCisJCSAgICAgInNjcmlwdCBmaWxlIG5hbWUgKGxhbmc6c2NyaXB0IG5hbWUsIHNjcmlwdCBuYW1lLCBvciAqKSIsCisJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCisJT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCisJCSAgICJnZW5lcmF0ZSBwZXJmLXRyYWNlLnh4IHNjcmlwdCBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2UiKSwKKwogCU9QVF9FTkQoKQogfTsKIAogaW50IGNtZF90cmFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0Jc3ltYm9sX19pbml0KCk7Ci0JcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKwlpbnQgZXJyOworCisJc3ltYm9sX19pbml0KDApOworCisJc2V0dXBfc2NyaXB0aW5nKCk7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBhbm5vdGF0ZV91c2FnZSwgMCk7CiAJaWYgKGFyZ2MpIHsKQEAgLTI4Nyw1ICszNDAsNTAgQEAKIAogCXNldHVwX3BhZ2VyKCk7CiAKLQlyZXR1cm4gX19jbWRfdHJhY2UoKTsKKwlpZiAoZ2VuZXJhdGVfc2NyaXB0X2xhbmcpIHsKKwkJc3RydWN0IHN0YXQgcGVyZl9zdGF0OworCisJCWludCBpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOworCQlpZiAoaW5wdXQgPCAwKSB7CisJCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJZXJyID0gZnN0YXQoaW5wdXQsICZwZXJmX3N0YXQpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CisJCQlleGl0KC0xKTsKKwkJfQorCisJCWlmICghcGVyZl9zdGF0LnN0X3NpemUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7CisJCQlleGl0KDApOworCQl9CisKKwkJc2NyaXB0aW5nX29wcyA9IHNjcmlwdF9zcGVjX19sb29rdXAoZ2VuZXJhdGVfc2NyaXB0X2xhbmcpOworCQlpZiAoIXNjcmlwdGluZ19vcHMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBsYW5ndWFnZSBzcGVjaWZpZXIiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKKwkJaWYgKGhlYWRlciA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCXBlcmZfaGVhZGVyX19yZWFkKGhlYWRlciwgaW5wdXQpOworCQllcnIgPSBzY3JpcHRpbmdfb3BzLT5nZW5lcmF0ZV9zY3JpcHQoInBlcmYtdHJhY2UiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNjcmlwdF9uYW1lKSB7CisJCWVyciA9IHNjcmlwdGluZ19vcHMtPnN0YXJ0X3NjcmlwdChzY3JpcHRfbmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBfX2NtZF90cmFjZSgpOworCisJY2xlYW51cF9zY3JpcHRpbmcoKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLmggYi90b29scy9wZXJmL2J1aWx0aW4uaAppbmRleCBlMTFkOGQyLi5hM2Q4YmY2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4uaAorKysgYi90b29scy9wZXJmL2J1aWx0aW4uaApAQCAtMTUsNiArMTUsOCBAQAogZXh0ZXJuIGludCBjaGVja19wYWdlcl9jb25maWcoY29uc3QgY2hhciAqY21kKTsKIAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYmVuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnVpbGRpZF9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfc2NoZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CkBAIC0yNSw1ICsyNyw3IEBACiBleHRlcm4gaW50IGNtZF90b3AoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdHJhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wcm9iZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9rbWVtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggMDAzMjZlMi4uMDJiMDllYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CisrKyBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dApAQCAtMyw2ICszLDggQEAKICMgY29tbWFuZCBuYW1lCQkJY2F0ZWdvcnkgW2RlcHJlY2F0ZWRdIFtjb21tb25dCiAjCiBwZXJmLWFubm90YXRlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYmVuY2gJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1idWlsZGlkLWxpc3QJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWxpc3QJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1zY2hlZAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXJlY29yZAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCkBAIC0xMSwzICsxMyw1IEBACiBwZXJmLXRpbWVjaGFydAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXRvcAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXRyYWNlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtcHJvYmUJCQltYWlucG9yY2VsYWluIGNvbW1vbgorcGVyZi1rbWVtCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dCBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAppbmRleCBmZGQ0MmE4Li5mMDAwYzMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2Rlc2lnbi50eHQKKysrIGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CkBAIC0xMzcsNiArMTM3LDggQEAKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgk9IDUsCiAJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUoJPSA2LAorCVBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUwk9IDcsCisJUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTCT0gOCwKIH07CiAKIENvdW50ZXJzIG9mIHRoZSB0eXBlIFBFUkZfVFlQRV9UUkFDRVBPSU5UIGFyZSBhdmFpbGFibGUgd2hlbiB0aGUgZnRyYWNlIGV2ZW50CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDE5ZmM3ZmUuLmNmNjQwNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAidXRpbC9ydW4tY29tbWFuZC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9zdHJpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnZnMuaCIKIAogY29uc3QgY2hhciBwZXJmX3VzYWdlX3N0cmluZ1tdID0KIAkicGVyZiBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXSI7CkBAIC04OSw4ICs5MCw4IEBACiAJCS8qCiAJCSAqIENoZWNrIHJlbWFpbmluZyBmbGFncy4KIAkJICovCi0JCWlmICghcHJlZml4Y21wKGNtZCwgIi0tZXhlYy1wYXRoIikpIHsKLQkJCWNtZCArPSAxMTsKKwkJaWYgKCFwcmVmaXhjbXAoY21kLCBDTURfRVhFQ19QQVRIKSkgeworCQkJY21kICs9IHN0cmxlbihDTURfRVhFQ19QQVRIKTsKIAkJCWlmICgqY21kID09ICc9JykKIAkJCQlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChjbWQgKyAxKTsKIAkJCWVsc2UgewpAQCAtMTE3LDggKzExOCw4IEBACiAJCQkoKmFyZ3YpKys7CiAJCQkoKmFyZ2MpLS07CiAJCQloYW5kbGVkKys7Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChjbWQsICItLXBlcmYtZGlyPSIpKSB7Ci0JCQlzZXRlbnYoUEVSRl9ESVJfRU5WSVJPTk1FTlQsIGNtZCArIDEwLCAxKTsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGNtZCwgQ01EX1BFUkZfRElSKSkgeworCQkJc2V0ZW52KFBFUkZfRElSX0VOVklST05NRU5ULCBjbWQgKyBzdHJsZW4oQ01EX1BFUkZfRElSKSwgMSk7CiAJCQlpZiAoZW52Y2hhbmdlZCkKIAkJCQkqZW52Y2hhbmdlZCA9IDE7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLXdvcmstdHJlZSIpKSB7CkBAIC0xMzEsOCArMTMyLDggQEAKIAkJCQkqZW52Y2hhbmdlZCA9IDE7CiAJCQkoKmFyZ3YpKys7CiAJCQkoKmFyZ2MpLS07Ci0JCX0gZWxzZSBpZiAoIXByZWZpeGNtcChjbWQsICItLXdvcmstdHJlZT0iKSkgewotCQkJc2V0ZW52KFBFUkZfV09SS19UUkVFX0VOVklST05NRU5ULCBjbWQgKyAxMiwgMSk7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChjbWQsIENNRF9XT1JLX1RSRUUpKSB7CisJCQlzZXRlbnYoUEVSRl9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIGNtZCArIHN0cmxlbihDTURfV09SS19UUkVFKSwgMSk7CiAJCQlpZiAoZW52Y2hhbmdlZCkKIAkJCQkqZW52Y2hhbmdlZCA9IDE7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWRlYnVnZnMtZGlyIikpIHsKQEAgLTE0Niw4ICsxNDcsOCBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJCSgqYXJndikrKzsKIAkJCSgqYXJnYyktLTsKLQkJfSBlbHNlIGlmICghcHJlZml4Y21wKGNtZCwgIi0tZGVidWdmcy1kaXI9IikpIHsKLQkJCXN0cm5jcHkoZGVidWdmc19tbnRwdCwgY21kICsgMTQsIE1BWFBBVEhMRU4pOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoY21kLCBDTURfREVCVUdGU19ESVIpKSB7CisJCQlzdHJuY3B5KGRlYnVnZnNfbW50cHQsIGNtZCArIHN0cmxlbihDTURfREVCVUdGU19ESVIpLCBNQVhQQVRITEVOKTsKIAkJCWRlYnVnZnNfbW50cHRbTUFYUEFUSExFTiAtIDFdID0gJ1wwJzsKIAkJCWlmIChlbnZjaGFuZ2VkKQogCQkJCSplbnZjaGFuZ2VkID0gMTsKQEAgLTI4NCwxNyArMjg1LDIxIEBACiB7CiAJY29uc3QgY2hhciAqY21kID0gYXJndlswXTsKIAlzdGF0aWMgc3RydWN0IGNtZF9zdHJ1Y3QgY29tbWFuZHNbXSA9IHsKLQkJeyAiaGVscCIsIGNtZF9oZWxwLCAwIH0sCi0JCXsgImxpc3QiLCBjbWRfbGlzdCwgMCB9LAotCQl7ICJyZWNvcmQiLCBjbWRfcmVjb3JkLCAwIH0sCi0JCXsgInJlcG9ydCIsIGNtZF9yZXBvcnQsIDAgfSwKLQkJeyAic3RhdCIsIGNtZF9zdGF0LCAwIH0sCi0JCXsgInRpbWVjaGFydCIsIGNtZF90aW1lY2hhcnQsIDAgfSwKLQkJeyAidG9wIiwgY21kX3RvcCwgMCB9LAotCQl7ICJhbm5vdGF0ZSIsIGNtZF9hbm5vdGF0ZSwgMCB9LAotCQl7ICJ2ZXJzaW9uIiwgY21kX3ZlcnNpb24sIDAgfSwKLQkJeyAidHJhY2UiLCBjbWRfdHJhY2UsIDAgfSwKLQkJeyAic2NoZWQiLCBjbWRfc2NoZWQsIDAgfSwKKwkJeyAiYnVpbGRpZC1saXN0IiwgY21kX2J1aWxkaWRfbGlzdCwgMCB9LAorCQl7ICJoZWxwIiwJY21kX2hlbHAsCTAgfSwKKwkJeyAibGlzdCIsCWNtZF9saXN0LAkwIH0sCisJCXsgInJlY29yZCIsCWNtZF9yZWNvcmQsCTAgfSwKKwkJeyAicmVwb3J0IiwJY21kX3JlcG9ydCwJMCB9LAorCQl7ICJiZW5jaCIsCWNtZF9iZW5jaCwJMCB9LAorCQl7ICJzdGF0IiwJY21kX3N0YXQsCTAgfSwKKwkJeyAidGltZWNoYXJ0IiwJY21kX3RpbWVjaGFydCwJMCB9LAorCQl7ICJ0b3AiLAljbWRfdG9wLAkwIH0sCisJCXsgImFubm90YXRlIiwJY21kX2Fubm90YXRlLAkwIH0sCisJCXsgInZlcnNpb24iLAljbWRfdmVyc2lvbiwJMCB9LAorCQl7ICJ0cmFjZSIsCWNtZF90cmFjZSwJMCB9LAorCQl7ICJzY2hlZCIsCWNtZF9zY2hlZCwJMCB9LAorCQl7ICJwcm9iZSIsCWNtZF9wcm9iZSwJMCB9LAorCQl7ICJrbWVtIiwJY21kX2ttZW0sCTAgfSwKIAl9OwogCXVuc2lnbmVkIGludCBpOwogCXN0YXRpYyBjb25zdCBjaGFyIGV4dFtdID0gU1RSSVBfRVhURU5TSU9OOwpAQCAtMzgyLDQ1ICszODcsMTIgQEAKIC8qIG1pbmkgL3Byb2MvbW91bnRzIHBhcnNlcjogc2VhcmNoaW5nIGZvciAiXmJsYWggL21vdW50L3BvaW50IGRlYnVnZnMiICovCiBzdGF0aWMgdm9pZCBnZXRfZGVidWdmc19tbnRwdCh2b2lkKQogewotCUZJTEUgKmZpbGU7Ci0JY2hhciBmc190eXBlWzEwMF07Ci0JY2hhciBkZWJ1Z2ZzW01BWFBBVEhMRU5dOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCgpOwogCi0JLyoKLQkgKiB0cnkgdGhlIHN0YW5kYXJkIGxvY2F0aW9uCi0JICovCi0JaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoIi9zeXMva2VybmVsL2RlYnVnLyIpID09IDApIHsKLQkJc3RyY3B5KGRlYnVnZnNfbW50cHQsICIvc3lzL2tlcm5lbC9kZWJ1Zy8iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogdHJ5IHRoZSBzYW5lIGxvY2F0aW9uCi0JICovCi0JaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoIi9kZWJ1Zy8iKSA9PSAwKSB7Ci0JCXN0cmNweShkZWJ1Z2ZzX21udHB0LCAiL2RlYnVnLyIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBnaXZlIHVwIGFuZCBwYXJzZSAvcHJvYy9tb3VudHMKLQkgKi8KLQlmaWxlID0gZm9wZW4oIi9wcm9jL21vdW50cyIsICJyIik7Ci0JaWYgKGZpbGUgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKGZzY2FuZihmaWxlLCAiJSpzICUiCi0JCSAgICAgIFNUUihNQVhQQVRITEVOKQotCQkgICAgICAicyAlOTlzICUqcyAlKmQgJSpkXG4iLAotCQkgICAgICBkZWJ1Z2ZzLCBmc190eXBlKSA9PSAyKSB7Ci0JCWlmIChzdHJjbXAoZnNfdHlwZSwgImRlYnVnZnMiKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWZjbG9zZShmaWxlKTsKLQlpZiAoc3RyY21wKGZzX3R5cGUsICJkZWJ1Z2ZzIikgPT0gMCkgewotCQlzdHJuY3B5KGRlYnVnZnNfbW50cHQsIGRlYnVnZnMsIE1BWFBBVEhMRU4pOwotCQlkZWJ1Z2ZzX21udHB0W01BWFBBVEhMRU4gLSAxXSA9ICdcMCc7Ci0JfQorCWlmIChwYXRoKQorCQlzdHJuY3B5KGRlYnVnZnNfbW50cHQsIHBhdGgsIHNpemVvZihkZWJ1Z2ZzX21udHB0KSk7CisJZWxzZQorCQlkZWJ1Z2ZzX21udHB0WzBdID0gJ1wwJzsKIH0KIAogaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCA4Y2M0NjIzLi40NTRkNWQ1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNDcsNiArNDcsMTggQEAKICNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCiAjZW5kaWYKIAorI2lmZGVmIF9fYWxwaGFfXworI2luY2x1ZGUgIi4uLy4uL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgiCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIm1iIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKKworI2lmZGVmIF9faWE2NF9fCisjaW5jbHVkZSAiLi4vLi4vYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIgorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlICgibWYiIDo6OiAibWVtb3J5IikKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlICgiaGludCBAcGF1c2UiIDo6OiAibWVtb3J5IikKKyNlbmRpZgorCiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3OGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IEV4dFV0aWxzOjpQYXJzZVhTIHZlcnNpb24gMi4xOF8wMiBmcm9tIHRoZQorICogY29udGVudHMgb2YgQ29udGV4dC54cy4gRG8gbm90IGVkaXQgdGhpcyBmaWxlLCBlZGl0IENvbnRleHQueHMgaW5zdGVhZC4KKyAqCisgKglBTlkgQ0hBTkdFUyBNQURFIEhFUkUgV0lMTCBCRSBMT1NUISAKKyAqCisgKi8KKworI2xpbmUgMSAiQ29udGV4dC54cyIKKy8qCisgKiBDb250ZXh0LnhzLiAgWFMgaW50ZXJmYWNlcyBmb3IgcGVyZiB0cmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIkVYVEVSTi5oIgorI2luY2x1ZGUgInBlcmwuaCIKKyNpbmNsdWRlICJYU1VCLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC1wZXJsLmgiCisKKyNpZm5kZWYgUEVSTF9VTlVTRURfVkFSCisjICBkZWZpbmUgUEVSTF9VTlVTRURfVkFSKHZhcikgaWYgKDApIHZhciA9IHZhcgorI2VuZGlmCisKKyNsaW5lIDQxICJDb250ZXh0LmMiCisKK1hTKFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9wYyk7IC8qIHByb3RvdHlwZSB0byBwYXNzIC1XbWlzc2luZy1wcm90b3R5cGVzICovCitYUyhYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fcGMpCit7CisjaWZkZWYgZFZBUgorICAgIGRWQVI7IGRYU0FSR1M7CisjZWxzZQorICAgIGRYU0FSR1M7CisjZW5kaWYKKyAgICBpZiAoaXRlbXMgIT0gMSkKKyAgICAgICBQZXJsX2Nyb2FrKGFUSFhfICJVc2FnZTogJXMoJXMpIiwgIlBlcmY6OlRyYWNlOjpDb250ZXh0Ojpjb21tb25fcGMiLCAiY29udGV4dCIpOworICAgIFBFUkxfVU5VU0VEX1ZBUihjdik7IC8qIC1XICovCisgICAgeworCXN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqCWNvbnRleHQgPSBJTlQyUFRSKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqLFN2SVYoU1QoMCkpKTsKKwlpbnQJUkVUVkFMOworCWRYU1RBUkc7CisKKwlSRVRWQUwgPSBjb21tb25fcGMoY29udGV4dCk7CisJWFNwcmVQVVNIOyBQVVNIaSgoSVYpUkVUVkFMKTsKKyAgICB9CisgICAgWFNSRVRVUk4oMSk7Cit9CisKKworWFMoWFNfUGVyZl9fVHJhY2VfX0NvbnRleHRfY29tbW9uX2ZsYWdzKTsgLyogcHJvdG90eXBlIHRvIHBhc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KK1hTKFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9mbGFncykKK3sKKyNpZmRlZiBkVkFSCisgICAgZFZBUjsgZFhTQVJHUzsKKyNlbHNlCisgICAgZFhTQVJHUzsKKyNlbmRpZgorICAgIGlmIChpdGVtcyAhPSAxKQorICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVzYWdlOiAlcyglcykiLCAiUGVyZjo6VHJhY2U6OkNvbnRleHQ6OmNvbW1vbl9mbGFncyIsICJjb250ZXh0Iik7CisgICAgUEVSTF9VTlVTRURfVkFSKGN2KTsgLyogLVcgKi8KKyAgICB7CisJc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICoJY29udGV4dCA9IElOVDJQVFIoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICosU3ZJVihTVCgwKSkpOworCWludAlSRVRWQUw7CisJZFhTVEFSRzsKKworCVJFVFZBTCA9IGNvbW1vbl9mbGFncyhjb250ZXh0KTsKKwlYU3ByZVBVU0g7IFBVU0hpKChJVilSRVRWQUwpOworICAgIH0KKyAgICBYU1JFVFVSTigxKTsKK30KKworCitYUyhYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fbG9ja19kZXB0aCk7IC8qIHByb3RvdHlwZSB0byBwYXNzIC1XbWlzc2luZy1wcm90b3R5cGVzICovCitYUyhYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fbG9ja19kZXB0aCkKK3sKKyNpZmRlZiBkVkFSCisgICAgZFZBUjsgZFhTQVJHUzsKKyNlbHNlCisgICAgZFhTQVJHUzsKKyNlbmRpZgorICAgIGlmIChpdGVtcyAhPSAxKQorICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVzYWdlOiAlcyglcykiLCAiUGVyZjo6VHJhY2U6OkNvbnRleHQ6OmNvbW1vbl9sb2NrX2RlcHRoIiwgImNvbnRleHQiKTsKKyAgICBQRVJMX1VOVVNFRF9WQVIoY3YpOyAvKiAtVyAqLworICAgIHsKKwlzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKgljb250ZXh0ID0gSU5UMlBUUihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKixTdklWKFNUKDApKSk7CisJaW50CVJFVFZBTDsKKwlkWFNUQVJHOworCisJUkVUVkFMID0gY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dCk7CisJWFNwcmVQVVNIOyBQVVNIaSgoSVYpUkVUVkFMKTsKKyAgICB9CisgICAgWFNSRVRVUk4oMSk7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitYUyhib290X1BlcmZfX1RyYWNlX19Db250ZXh0KTsgLyogcHJvdG90eXBlIHRvIHBhc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KK1hTKGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQpCit7CisjaWZkZWYgZFZBUgorICAgIGRWQVI7IGRYU0FSR1M7CisjZWxzZQorICAgIGRYU0FSR1M7CisjZW5kaWYKKyAgICBjb25zdCBjaGFyKiBmaWxlID0gX19GSUxFX187CisKKyAgICBQRVJMX1VOVVNFRF9WQVIoY3YpOyAvKiAtVyAqLworICAgIFBFUkxfVU5VU0VEX1ZBUihpdGVtcyk7IC8qIC1XICovCisgICAgWFNfVkVSU0lPTl9CT09UQ0hFQ0sgOworCisgICAgICAgIG5ld1hTcHJvdG8oIlBlcmY6OlRyYWNlOjpDb250ZXh0Ojpjb21tb25fcGMiLCBYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fcGMsIGZpbGUsICIkIik7CisgICAgICAgIG5ld1hTcHJvdG8oIlBlcmY6OlRyYWNlOjpDb250ZXh0Ojpjb21tb25fZmxhZ3MiLCBYU19QZXJmX19UcmFjZV9fQ29udGV4dF9jb21tb25fZmxhZ3MsIGZpbGUsICIkIik7CisgICAgICAgIG5ld1hTcHJvdG8oIlBlcmY6OlRyYWNlOjpDb250ZXh0Ojpjb21tb25fbG9ja19kZXB0aCIsIFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9sb2NrX2RlcHRoLCBmaWxlLCAiJCIpOworICAgIGlmIChQTF91bml0Y2hlY2thdikKKyAgICAgICAgIGNhbGxfbGlzdChQTF9zY29wZXN0YWNrX2l4LCBQTF91bml0Y2hlY2thdik7CisgICAgWFNSRVRVUk5fWUVTOworfQorCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC54cyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LnhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzgwMDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC54cwpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29udGV4dC54cy4gIFhTIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJFWFRFUk4uaCIKKyNpbmNsdWRlICJwZXJsLmgiCisjaW5jbHVkZSAiWFNVQi5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIgorCitNT0RVTEUgPSBQZXJmOjpUcmFjZTo6Q29udGV4dAkJUEFDS0FHRSA9IFBlcmY6OlRyYWNlOjpDb250ZXh0CitQUk9UT1RZUEVTOiBFTkFCTEUKKworaW50Citjb21tb25fcGMoY29udGV4dCkKKwlzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKiBjb250ZXh0CisKK2ludAorY29tbW9uX2ZsYWdzKGNvbnRleHQpCisJc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICogY29udGV4dAorCitpbnQKK2NvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQpCisJc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICogY29udGV4dAorCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvTWFrZWZpbGUuUEwgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvTWFrZWZpbGUuUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjZGViMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9NYWtlZmlsZS5QTApAQCAtMCwwICsxLDE3IEBACit1c2UgNS4wMTAwMDA7Cit1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyMgU2VlIGxpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gZm9yIGRldGFpbHMgb2YgaG93IHRvIGluZmx1ZW5jZQorIyB0aGUgY29udGVudHMgb2YgdGhlIE1ha2VmaWxlIHRoYXQgaXMgd3JpdHRlbi4KK1dyaXRlTWFrZWZpbGUoCisgICAgTkFNRSAgICAgICAgICAgICAgPT4gJ1BlcmY6OlRyYWNlOjpDb250ZXh0JywKKyAgICBWRVJTSU9OX0ZST00gICAgICA9PiAnbGliL1BlcmYvVHJhY2UvQ29udGV4dC5wbScsICMgZmluZHMgJFZFUlNJT04KKyAgICBQUkVSRVFfUE0gICAgICAgICA9PiB7fSwgIyBlLmcuLCBNb2R1bGU6Ok5hbWUgPT4gMS4xCisgICAgKCRdID49IDUuMDA1ID8gICAgICMjIEFkZCB0aGVzZSBuZXcga2V5d29yZHMgc3VwcG9ydGVkIHNpbmNlIDUuMDA1CisgICAgICAoQUJTVFJBQ1RfRlJPTSAgPT4gJ2xpYi9QZXJmL1RyYWNlL0NvbnRleHQucG0nLCAjIHJldHJpZXZlIGFic3RyYWN0IGZyb20gbW9kdWxlCisgICAgICAgQVVUSE9SICAgICAgICAgPT4gJ1RvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+JykgOiAoKSksCisgICAgTElCUyAgICAgICAgICAgICAgPT4gWycnXSwgIyBlLmcuLCAnLWxtJworICAgIERFRklORSAgICAgICAgICAgID0+ICctSSAuLi8uLicsICMgZS5nLiwgJy1ESEFWRV9TT01FVEhJTkcnCisgICAgSU5DICAgICAgICAgICAgICAgPT4gJy1JLicsICMgZS5nLiwgJy1JLiAtSS91c3IvaW5jbHVkZS9vdGhlcicKKwkjIFVuLWNvbW1lbnQgdGhpcyBpZiB5b3UgYWRkIEMgZmlsZXMgdG8gbGluayB3aXRoIGxhdGVyOgorICAgIE9CSkVDVCAgICAgICAgICAgID0+ICdDb250ZXh0Lm8nLCAjIGxpbmsgYWxsIHRoZSBDIGZpbGVzIHRvbworKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9SRUFETUUgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOTcwNzYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvUkVBRE1FCkBAIC0wLDAgKzEsNTkgQEAKK1BlcmYtVHJhY2UtVXRpbCB2ZXJzaW9uIDAuMDEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgY29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2UuCisKK0NvcmUucG0gYW5kIFV0aWwucG0gYXJlIHB1cmUgUGVybCBtb2R1bGVzOyBDb3JlLnBtIGNvbnRhaW5zIHJvdXRpbmVzCit0aGF0IHRoZSBjb3JlIHBlcmYgc3VwcG9ydCBmb3IgUGVybCBjYWxscyBvbiBhbmQgc2hvdWxkIGFsd2F5cyBiZQorJ3VzZWQnLCB3aGlsZSBVdGlsLnBtIGNvbnRhaW5zIHVzZWZ1bCBidXQgb3B0aW9uYWwgdXRpbGl0eSBmdW5jdGlvbnMKK3RoYXQgc2NyaXB0cyBtYXkgd2FudCB0byB1c2UuICBDb250ZXh0LnBtIGNvbnRhaW5zIHRoZSBQZXJsLT5DCitpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgc2NyaXB0cyB0byBhY2Nlc3MgZGF0YSBpbiB0aGUgZW1iZWRkaW5nIHBlcmYKK2V4ZWN1dGFibGU7IHNjcmlwdHMgd2lzaGluZyB0byBkbyB0aGF0IHNob3VsZCAndXNlIENvbnRleHQucG0nLgorCitUaGUgUGVybC0+QyBwZXJmIGludGVyZmFjZSBpcyBjb21wbGV0ZWx5IGRyaXZlbiBieSBDb250ZXh0LnhzLiAgSWYgeW91Cit3YW50IHRvIGFkZCBuZXcgUGVybCBmdW5jdGlvbnMgdGhhdCBlbmQgdXAgYWNjZXNzaW5nIEMgZGF0YSBpbiB0aGUKK3BlcmYgZXhlY3V0YWJsZSwgeW91IGFkZCBkZXNjaXB0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9ucyBoZXJlLgorc2NyaXB0aW5nX2NvbnRleHQgaXMgYSBwb2ludGVyIHRvIHRoZSBwZXJmIGRhdGEgaW4gdGhlIHBlcmYgZXhlY3V0YWJsZQordGhhdCB5b3Ugd2FudCB0byBhY2Nlc3MgLSBpdCdzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciwKKyRjb250ZXh0LCB0byBhbGwgaGFuZGxlciBmdW5jdGlvbnMuCisKK0FmdGVyIHlvdSBkbyB0aGF0OgorCisgIHBlcmwgTWFrZWZpbGUuUEwgICAjIHRvIGNyZWF0ZSBhIE1ha2VmaWxlIGZvciB0aGUgbmV4dCBzdGVwCisgIG1ha2UgICAgICAgICAgICAgICAjIHRvIGNyZWF0ZSBDb250ZXh0LmMKKworICBlZGl0IENvbnRleHQuYyB0byBhZGQgY29uc3QgdG8gdGhlIGNoYXIqIGZpbGUgPSBfX0ZJTEVfXyBsaW5lIGluCisgIFhTKGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQpIHRvIHNpbGVuY2UgYSB3YXJuaW5nL2Vycm9yLgorCisgIFlvdSBjYW4gZGVsZXRlIHRoZSBNYWtlZmlsZSwgb2JqZWN0IGZpbGVzIGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgd2FzCisgIGdlbmVyYXRlZCBlLmcuIGJsaWIgYW5kIHNoYXJlZCBsaWJyYXJ5LCBldGMsIGV4Y2VwdCBmb3Igb2YgY291cnNlCisgIENvbnRleHQuYworCisgIFlvdSBzaG91bGQgdGhlbiBiZSBhYmxlIHRvIHJ1biB0aGUgbm9ybWFsIHBlcmYgbWFrZSBhcyB1c3VhbC4KKworSU5TVEFMTEFUSU9OCisKK0J1aWxkaW5nIHBlcmYgd2l0aCBwZXJmIHRyYWNlIFBlcmwgc2NyaXB0aW5nIHNob3VsZCBpbnN0YWxsIHRoaXMKK21vZHVsZSBpbiB0aGUgcmlnaHQgcGxhY2UuCisKK1lvdSBzaG91bGQgbWFrZSBzdXJlIGxpYnBlcmwgYW5kIEV4dFV0aWxzL0VtYmVkLnBtIGFyZSBpbnN0YWxsZWQgZmlyc3QKK2UuZy4gYXB0LWdldCBpbnN0YWxsIGxpYnBlcmwtZGV2IG9yIHl1bSBpbnN0YWxsIHBlcmwtRXh0VXRpbHMtRW1iZWQuCisKK0RFUEVOREVOQ0lFUworCitUaGlzIG1vZHVsZSByZXF1aXJlcyB0aGVzZSBvdGhlciBtb2R1bGVzIGFuZCBsaWJyYXJpZXM6CisKKyAgTm9uZQorCitDT1BZUklHSFQgQU5EIExJQ0VOQ0UKKworQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZiwgZWl0aGVyIFBlcmwgdmVyc2lvbiA1LjEwLjAgb3IsCithdCB5b3VyIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24gb2YgUGVybCA1IHlvdSBtYXkgaGF2ZSBhdmFpbGFibGUuCisKK0FsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvbnRleHQucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29udGV4dC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvbnRleHQucG0KQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKKwordXNlIDUuMDEwMDAwOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworcmVxdWlyZSBFeHBvcnRlcjsKKworb3VyIEBJU0EgPSBxdyhFeHBvcnRlcik7CisKK291ciAlRVhQT1JUX1RBR1MgPSAoICdhbGwnID0+IFsgcXcoCispIF0gKTsKKworb3VyIEBFWFBPUlRfT0sgPSAoIEB7ICRFWFBPUlRfVEFHU3snYWxsJ30gfSApOworCitvdXIgQEVYUE9SVCA9IHF3KAorCWNvbW1vbl9wYyBjb21tb25fZmxhZ3MgY29tbW9uX2xvY2tfZGVwdGgKKyk7CisKK291ciAkVkVSU0lPTiA9ICcwLjAxJzsKKworcmVxdWlyZSBYU0xvYWRlcjsKK1hTTG9hZGVyOjpsb2FkKCdQZXJmOjpUcmFjZTo6Q29udGV4dCcsICRWRVJTSU9OKTsKKworMTsKK19fRU5EX18KKz1oZWFkMSBOQU1FCisKK1BlcmY6OlRyYWNlOjpDb250ZXh0IC0gUGVybCBleHRlbnNpb24gZm9yIGFjY2Vzc2luZyBmdW5jdGlvbnMgaW4gcGVyZi4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIFBlcmY6OlRyYWNlOjpDb250ZXh0OworCis9aGVhZDEgU0VFIEFMU08KKworUGVyZiAodHJhY2UpIGRvY3VtZW50YXRpb24KKworPWhlYWQxIEFVVEhPUgorCitUb20gWmFudXNzaSwgRTxsdD50emFudXNzaUBnbWFpbC5jb208Z3Q+CisKKz1oZWFkMSBDT1BZUklHSFQgQU5EIExJQ0VOU0UKKworQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFRvbSBaYW51c3NpCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZiwgZWl0aGVyIFBlcmwgdmVyc2lvbiA1LjEwLjAgb3IsCithdCB5b3VyIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24gb2YgUGVybCA1IHlvdSBtYXkgaGF2ZSBhdmFpbGFibGUuCisKK0FsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4KKworPWN1dApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGYzNzZhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucG0KQEAgLTAsMCArMSwxOTIgQEAKK3BhY2thZ2UgUGVyZjo6VHJhY2U6OkNvcmU7CisKK3VzZSA1LjAxMDAwMDsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK291ciBASVNBID0gcXcoRXhwb3J0ZXIpOworCitvdXIgJUVYUE9SVF9UQUdTID0gKCAnYWxsJyA9PiBbIHF3KAorKSBdICk7CisKK291ciBARVhQT1JUX09LID0gKCBAeyAkRVhQT1JUX1RBR1N7J2FsbCd9IH0gKTsKKworb3VyIEBFWFBPUlQgPSBxdygKK2RlZmluZV9mbGFnX2ZpZWxkIGRlZmluZV9mbGFnX3ZhbHVlIGZsYWdfc3RyIGR1bXBfZmxhZ19maWVsZHMKK2RlZmluZV9zeW1ib2xpY19maWVsZCBkZWZpbmVfc3ltYm9saWNfdmFsdWUgc3ltYm9sX3N0ciBkdW1wX3N5bWJvbGljX2ZpZWxkcwordHJhY2VfZmxhZ19zdHIKKyk7CisKK291ciAkVkVSU0lPTiA9ICcwLjAxJzsKKworbXkgJXRyYWNlX2ZsYWdzID0gKDB4MDAgPT4gIk5PTkUiLAorCQkgICAweDAxID0+ICJJUlFTX09GRiIsCisJCSAgIDB4MDIgPT4gIklSUVNfTk9TVVBQT1JUIiwKKwkJICAgMHgwNCA9PiAiTkVFRF9SRVNDSEVEIiwKKwkJICAgMHgwOCA9PiAiSEFSRElSUSIsCisJCSAgIDB4MTAgPT4gIlNPRlRJUlEiKTsKKworc3ViIHRyYWNlX2ZsYWdfc3RyCit7CisgICAgbXkgKCR2YWx1ZSkgPSBAXzsKKworICAgIG15ICRzdHJpbmc7CisKKyAgICBteSAkcHJpbnRfZGVsaW0gPSAwOworCisgICAgZm9yZWFjaCBteSAkaWR4IChzb3J0IHskYSA8PT4gJGJ9IGtleXMgJXRyYWNlX2ZsYWdzKSB7CisJaWYgKCEkdmFsdWUgJiYgISRpZHgpIHsKKwkgICAgJHN0cmluZyAuPSAiTk9ORSI7CisJICAgIGxhc3Q7CisJfQorCisJaWYgKCRpZHggJiYgKCR2YWx1ZSAmICRpZHgpID09ICRpZHgpIHsKKwkgICAgaWYgKCRwcmludF9kZWxpbSkgeworCQkkc3RyaW5nIC49ICIgfCAiOworCSAgICB9CisJICAgICRzdHJpbmcgLj0gIiR0cmFjZV9mbGFnc3skaWR4fSI7CisJICAgICRwcmludF9kZWxpbSA9IDE7CisJICAgICR2YWx1ZSAmPSB+JGlkeDsKKwl9CisgICAgfQorCisgICAgcmV0dXJuICRzdHJpbmc7Cit9CisKK215ICVmbGFnX2ZpZWxkczsKK215ICVzeW1ib2xpY19maWVsZHM7CisKK3N1YiBmbGFnX3N0cgoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGZpZWxkX25hbWUsICR2YWx1ZSkgPSBAXzsKKworICAgIG15ICRzdHJpbmc7CisKKyAgICBpZiAoJGZsYWdfZmllbGRzeyRldmVudF9uYW1lfXskZmllbGRfbmFtZX0pIHsKKwlteSAkcHJpbnRfZGVsaW0gPSAwOworCWZvcmVhY2ggbXkgJGlkeCAoc29ydCB7JGEgPD0+ICRifSBrZXlzICV7JGZsYWdfZmllbGRzeyRldmVudF9uYW1lfXskZmllbGRfbmFtZX17InZhbHVlcyJ9fSkgeworCSAgICBpZiAoISR2YWx1ZSAmJiAhJGlkeCkgeworCQkkc3RyaW5nIC49ICIkZmxhZ19maWVsZHN7JGV2ZW50X25hbWV9eyRmaWVsZF9uYW1lfXsndmFsdWVzJ317JGlkeH0iOworCQlsYXN0OworCSAgICB9CisJICAgIGlmICgkaWR4ICYmICgkdmFsdWUgJiAkaWR4KSA9PSAkaWR4KSB7CisJCWlmICgkcHJpbnRfZGVsaW0gJiYgJGZsYWdfZmllbGRzeyRldmVudF9uYW1lfXskZmllbGRfbmFtZX17J2RlbGltJ30pIHsKKwkJICAgICRzdHJpbmcgLj0gIiAkZmxhZ19maWVsZHN7JGV2ZW50X25hbWV9eyRmaWVsZF9uYW1lfXsnZGVsaW0nfSAiOworCQl9CisJCSRzdHJpbmcgLj0gIiRmbGFnX2ZpZWxkc3skZXZlbnRfbmFtZX17JGZpZWxkX25hbWV9eyd2YWx1ZXMnfXskaWR4fSI7CisJCSRwcmludF9kZWxpbSA9IDE7CisJCSR2YWx1ZSAmPSB+JGlkeDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm4gJHN0cmluZzsKK30KKworc3ViIGRlZmluZV9mbGFnX2ZpZWxkCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkZmllbGRfbmFtZSwgJGRlbGltKSA9IEBfOworCisgICAgJGZsYWdfZmllbGRzeyRldmVudF9uYW1lfXskZmllbGRfbmFtZX17ImRlbGltIn0gPSAkZGVsaW07Cit9CisKK3N1YiBkZWZpbmVfZmxhZ192YWx1ZQoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGZpZWxkX25hbWUsICR2YWx1ZSwgJGZpZWxkX3N0cikgPSBAXzsKKworICAgICRmbGFnX2ZpZWxkc3skZXZlbnRfbmFtZX17JGZpZWxkX25hbWV9eyJ2YWx1ZXMifXskdmFsdWV9ID0gJGZpZWxkX3N0cjsKK30KKworc3ViIGR1bXBfZmxhZ19maWVsZHMKK3sKKyAgICBmb3IgbXkgJGV2ZW50IChrZXlzICVmbGFnX2ZpZWxkcykgeworCXByaW50ICJldmVudCAkZXZlbnQ6XG4iOworCWZvciBteSAkZmllbGQgKGtleXMgJXskZmxhZ19maWVsZHN7JGV2ZW50fX0pIHsKKwkgICAgcHJpbnQgIiAgICBmaWVsZDogJGZpZWxkOlxuIjsKKwkgICAgcHJpbnQgIiAgICAgICAgZGVsaW06ICRmbGFnX2ZpZWxkc3skZXZlbnR9eyRmaWVsZH17J2RlbGltJ31cbiI7CisJICAgIGZvcmVhY2ggbXkgJGlkeCAoc29ydCB7JGEgPD0+ICRifSBrZXlzICV7JGZsYWdfZmllbGRzeyRldmVudH17JGZpZWxkfXsidmFsdWVzIn19KSB7CisJCXByaW50ICIgICAgICAgIHZhbHVlICRpZHg6ICRmbGFnX2ZpZWxkc3skZXZlbnR9eyRmaWVsZH17J3ZhbHVlcyd9eyRpZHh9XG4iOworCSAgICB9CisJfQorICAgIH0KK30KKworc3ViIHN5bWJvbF9zdHIKK3sKKyAgICBteSAoJGV2ZW50X25hbWUsICRmaWVsZF9uYW1lLCAkdmFsdWUpID0gQF87CisKKyAgICBpZiAoJHN5bWJvbGljX2ZpZWxkc3skZXZlbnRfbmFtZX17JGZpZWxkX25hbWV9KSB7CisJZm9yZWFjaCBteSAkaWR4IChzb3J0IHskYSA8PT4gJGJ9IGtleXMgJXskc3ltYm9saWNfZmllbGRzeyRldmVudF9uYW1lfXskZmllbGRfbmFtZX17InZhbHVlcyJ9fSkgeworCSAgICBpZiAoISR2YWx1ZSAmJiAhJGlkeCkgeworCQlyZXR1cm4gIiRzeW1ib2xpY19maWVsZHN7JGV2ZW50X25hbWV9eyRmaWVsZF9uYW1lfXsndmFsdWVzJ317JGlkeH0iOworCQlsYXN0OworCSAgICB9CisJICAgIGlmICgkdmFsdWUgPT0gJGlkeCkgeworCQlyZXR1cm4gIiRzeW1ib2xpY19maWVsZHN7JGV2ZW50X25hbWV9eyRmaWVsZF9uYW1lfXsndmFsdWVzJ317JGlkeH0iOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiB1bmRlZjsKK30KKworc3ViIGRlZmluZV9zeW1ib2xpY19maWVsZAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGZpZWxkX25hbWUpID0gQF87CisKKyAgICAjIG5vdGhpbmcgdG8gZG8sIHJlYWxseQorfQorCitzdWIgZGVmaW5lX3N5bWJvbGljX3ZhbHVlCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkZmllbGRfbmFtZSwgJHZhbHVlLCAkZmllbGRfc3RyKSA9IEBfOworCisgICAgJHN5bWJvbGljX2ZpZWxkc3skZXZlbnRfbmFtZX17JGZpZWxkX25hbWV9eyJ2YWx1ZXMifXskdmFsdWV9ID0gJGZpZWxkX3N0cjsKK30KKworc3ViIGR1bXBfc3ltYm9saWNfZmllbGRzCit7CisgICAgZm9yIG15ICRldmVudCAoa2V5cyAlc3ltYm9saWNfZmllbGRzKSB7CisJcHJpbnQgImV2ZW50ICRldmVudDpcbiI7CisJZm9yIG15ICRmaWVsZCAoa2V5cyAleyRzeW1ib2xpY19maWVsZHN7JGV2ZW50fX0pIHsKKwkgICAgcHJpbnQgIiAgICBmaWVsZDogJGZpZWxkOlxuIjsKKwkgICAgZm9yZWFjaCBteSAkaWR4IChzb3J0IHskYSA8PT4gJGJ9IGtleXMgJXskc3ltYm9saWNfZmllbGRzeyRldmVudH17JGZpZWxkfXsidmFsdWVzIn19KSB7CisJCXByaW50ICIgICAgICAgIHZhbHVlICRpZHg6ICRzeW1ib2xpY19maWVsZHN7JGV2ZW50fXskZmllbGR9eyd2YWx1ZXMnfXskaWR4fVxuIjsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKzE7CitfX0VORF9fCis9aGVhZDEgTkFNRQorCitQZXJmOjpUcmFjZTo6Q29yZSAtIFBlcmwgZXh0ZW5zaW9uIGZvciBwZXJmIHRyYWNlCisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBQZXJmOjpUcmFjZTo6Q29yZQorCis9aGVhZDEgU0VFIEFMU08KKworUGVyZiAodHJhY2UpIGRvY3VtZW50YXRpb24KKworPWhlYWQxIEFVVEhPUgorCitUb20gWmFudXNzaSwgRTxsdD50emFudXNzaUBnbWFpbC5jb208Z3Q+CisKKz1oZWFkMSBDT1BZUklHSFQgQU5EIExJQ0VOU0UKKworQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFRvbSBaYW51c3NpCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZiwgZWl0aGVyIFBlcmwgdmVyc2lvbiA1LjEwLjAgb3IsCithdCB5b3VyIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24gb2YgUGVybCA1IHlvdSBtYXkgaGF2ZSBhdmFpbGFibGUuCisKK0FsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4KKworPWN1dApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJmMTMyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0KQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBQZXJmOjpUcmFjZTo6VXRpbDsKKwordXNlIDUuMDEwMDAwOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworcmVxdWlyZSBFeHBvcnRlcjsKKworb3VyIEBJU0EgPSBxdyhFeHBvcnRlcik7CisKK291ciAlRVhQT1JUX1RBR1MgPSAoICdhbGwnID0+IFsgcXcoCispIF0gKTsKKworb3VyIEBFWFBPUlRfT0sgPSAoIEB7ICRFWFBPUlRfVEFHU3snYWxsJ30gfSApOworCitvdXIgQEVYUE9SVCA9IHF3KAorYXZnIG5zZWNzIG5zZWNzX3NlY3MgbnNlY3NfbnNlY3MgbnNlY3NfdXNlY3MgcHJpbnRfbnNlY3MKKyk7CisKK291ciAkVkVSU0lPTiA9ICcwLjAxJzsKKworc3ViIGF2ZworeworICAgIG15ICgkdG90YWwsICRuKSA9IEBfOworCisgICAgcmV0dXJuICR0b3RhbCAvICRuOworfQorCitteSAkTlNFQ1NfUEVSX1NFQyAgICA9IDEwMDAwMDAwMDA7CisKK3N1YiBuc2VjcworeworICAgIG15ICgkc2VjcywgJG5zZWNzKSA9IEBfOworCisgICAgcmV0dXJuICRzZWNzICogJE5TRUNTX1BFUl9TRUMgKyAkbnNlY3M7Cit9CisKK3N1YiBuc2Vjc19zZWNzIHsKKyAgICBteSAoJG5zZWNzKSA9IEBfOworCisgICAgcmV0dXJuICRuc2VjcyAvICROU0VDU19QRVJfU0VDOworfQorCitzdWIgbnNlY3NfbnNlY3MgeworICAgIG15ICgkbnNlY3MpID0gQF87CisKKyAgICByZXR1cm4gJG5zZWNzIC0gbnNlY3Nfc2VjcygkbnNlY3MpOworfQorCitzdWIgbnNlY3Nfc3RyIHsKKyAgICBteSAoJG5zZWNzKSA9IEBfOworCisgICAgbXkgJHN0ciA9IHNwcmludGYoIiU1dS4lMDl1IiwgbnNlY3Nfc2VjcygkbnNlY3MpLCBuc2Vjc19uc2VjcygkbnNlY3MpKTsKKworICAgIHJldHVybiAkc3RyOworfQorCisxOworX19FTkRfXworPWhlYWQxIE5BTUUKKworUGVyZjo6VHJhY2U6OlV0aWwgLSBQZXJsIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZQorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CisKKz1oZWFkMSBTRUUgQUxTTworCitQZXJmICh0cmFjZSkgZG9jdW1lbnRhdGlvbgorCis9aGVhZDEgQVVUSE9SCisKK1RvbSBaYW51c3NpLCBFPGx0PnR6YW51c3NpQGdtYWlsLmNvbTxndD4KKworPWhlYWQxIENPUFlSSUdIVCBBTkQgTElDRU5TRQorCitDb3B5cmlnaHQgKEMpIDIwMDkgYnkgVG9tIFphbnVzc2kKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLCBlaXRoZXIgUGVybCB2ZXJzaW9uIDUuMTAuMCBvciwKK2F0IHlvdXIgb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiBvZiBQZXJsIDUgeW91IG1heSBoYXZlIGF2YWlsYWJsZS4KKworQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCis9Y3V0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvdHlwZW1hcCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC90eXBlbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDgzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvdHlwZW1hcApAQCAtMCwwICsxIEBACitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKiBUX1BUUgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZWM1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBrbWVtOmttYWxsb2MgLWUgaXJxOnNvZnRpcnFfZW50cnkKKworCisKKworCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5NDhiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlcG9ydApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsL2NoZWNrLXBlcmYtdHJhY2UucGwKKworCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlY29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUwNTZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LWZpbGUtcmVjb3JkCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3dyaXRlCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktZmlsZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktZmlsZS1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkY2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlcG9ydApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsL3J3LWJ5LWZpbGUucGwKKworCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LXBpZC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMzk3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVjb3JkCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQgLWUgc3lzY2FsbHM6c3lzX2V4aXRfcmVhZCAtZSBzeXNjYWxsczpzeXNfZW50ZXJfd3JpdGUgLWUgc3lzY2FsbHM6c3lzX2V4aXRfd3JpdGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LXBpZC1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhMTZmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1waWQtcmVwb3J0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2Jhc2gKK3BlcmYgdHJhY2UgLXMgfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3BlcmwvcnctYnktcGlkLnBsCisKKworCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd2FrZXVwLWxhdGVuY3ktcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlY29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJlZGRhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlY29yZApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF93YWtldXAKKworCisKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93YWtldXAtbGF0ZW5jeS1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3NjlkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93YWtldXAtbGF0ZW5jeS1yZXBvcnQKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vYmFzaAorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC93YWtldXAtbGF0ZW5jeS5wbAorCisKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dvcmtxdWV1ZS1zdGF0cy1yZWNvcmQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd29ya3F1ZXVlLXN0YXRzLXJlY29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2U2NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dvcmtxdWV1ZS1zdGF0cy1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSB3b3JrcXVldWU6d29ya3F1ZXVlX2NyZWF0aW9uIC1lIHdvcmtxdWV1ZTp3b3JrcXVldWVfZGVzdHJ1Y3Rpb24gLWUgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRpb24gLWUgd29ya3F1ZXVlOndvcmtxdWV1ZV9pbnNlcnRpb24KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dvcmtxdWV1ZS1zdGF0cy1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2ODQzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL2Jhc2gKK3BlcmYgdHJhY2UgLXMgfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3Blcmwvd29ya3F1ZXVlLXN0YXRzLnBsCisKKworCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2NoZWNrLXBlcmYtdHJhY2UucGwgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2RjMGEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCkBAIC0wLDAgKzEsMTA2IEBACisjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHBlcmwKKyMgKGMpIDIwMDksIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorCisjIFRoaXMgc2NyaXB0IHRlc3RzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBmbGFnIGFuZCBzeW1ib2wKKyMgc3RyaW5ncywgY29tbW9uX3h4eCgpIGNhbGxzIGJhY2sgaW50byBwZXJmLCBiZWdpbiwgZW5kLCB1bmhhbmRsZWQKKyMgZXZlbnRzLCBldGMuICBCYXNpY2FsbHksIGlmIHRoaXMgc2NyaXB0IHJ1bnMgc3VjY2Vzc2Z1bGx5IGFuZAorIyBkaXNwbGF5cyBleHBlY3RlZCByZXN1bHRzLCBwZXJsIHNjcmlwdGluZyBzdXBwb3J0IHNob3VsZCBiZSBvay4KKwordXNlIGxpYiAiJEVOVnsnUEVSRl9FWEVDX1BBVEgnfS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYiI7Cit1c2UgbGliICIuL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIFBlcmY6OlRyYWNlOjpDb3JlOwordXNlIFBlcmY6OlRyYWNlOjpDb250ZXh0OwordXNlIFBlcmY6OlRyYWNlOjpVdGlsOworCitzdWIgdHJhY2VfYmVnaW4KK3sKKyAgICBwcmludCAidHJhY2VfYmVnaW5cbiI7Cit9CisKK3N1YiB0cmFjZV9lbmQKK3sKKyAgICBwcmludCAidHJhY2VfZW5kXG4iOworCisgICAgcHJpbnRfdW5oYW5kbGVkKCk7Cit9CisKK3N1YiBpcnE6OnNvZnRpcnFfZW50cnkKK3sKKwlteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSAgICAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSAgICAkdmVjKSA9IEBfOworCisJcHJpbnRfaGVhZGVyKCRldmVudF9uYW1lLCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCQkgICAgICRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0pOworCisJcHJpbnRfdW5jb21tb24oJGNvbnRleHQpOworCisJcHJpbnRmKCJ2ZWM9JXNcbiIsCisJICAgICAgIHN5bWJvbF9zdHIoImlycTo6c29mdGlycV9lbnRyeSIsICJ2ZWMiLCAkdmVjKSk7Cit9CisKK3N1YiBrbWVtOjprbWFsbG9jCit7CisJbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkgICAgJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwKKwkgICAgJGNhbGxfc2l0ZSwgJHB0ciwgJGJ5dGVzX3JlcSwgJGJ5dGVzX2FsbG9jLAorCSAgICAkZ2ZwX2ZsYWdzKSA9IEBfOworCisJcHJpbnRfaGVhZGVyKCRldmVudF9uYW1lLCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCQkgICAgICRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0pOworCisJcHJpbnRfdW5jb21tb24oJGNvbnRleHQpOworCisJcHJpbnRmKCJjYWxsX3NpdGU9JXAsIHB0cj0lcCwgYnl0ZXNfcmVxPSV1LCBieXRlc19hbGxvYz0ldSwgIi4KKwkgICAgICAgImdmcF9mbGFncz0lc1xuIiwKKwkgICAgICAgJGNhbGxfc2l0ZSwgJHB0ciwgJGJ5dGVzX3JlcSwgJGJ5dGVzX2FsbG9jLAorCisJICAgICAgIGZsYWdfc3RyKCJrbWVtOjprbWFsbG9jIiwgImdmcF9mbGFncyIsICRnZnBfZmxhZ3MpKTsKK30KKworIyBwcmludCB0cmFjZSBmaWVsZHMgbm90IGluY2x1ZGVkIGluIGhhbmRsZXIgYXJncworc3ViIHByaW50X3VuY29tbW9uCit7CisgICAgbXkgKCRjb250ZXh0KSA9IEBfOworCisgICAgcHJpbnRmKCJjb21tb25fcHJlZW1wdF9jb3VudD0lZCwgY29tbW9uX2ZsYWdzPSVzLCBjb21tb25fbG9ja19kZXB0aD0lZCwgIiwKKwkgICBjb21tb25fcGMoJGNvbnRleHQpLCB0cmFjZV9mbGFnX3N0cihjb21tb25fZmxhZ3MoJGNvbnRleHQpKSwKKwkgICBjb21tb25fbG9ja19kZXB0aCgkY29udGV4dCkpOworCit9CisKK215ICV1bmhhbmRsZWQ7CisKK3N1YiBwcmludF91bmhhbmRsZWQKK3sKKyAgICBpZiAoKHNjYWxhciBrZXlzICV1bmhhbmRsZWQpID09IDApIHsKKwlyZXR1cm47CisgICAgfQorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIjsKKworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICJldmVudCIsICJjb3VudCIpOworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwKKwkgICAiLS0tLS0tLS0tLS0iKTsKKworICAgIGZvcmVhY2ggbXkgJGV2ZW50X25hbWUgKGtleXMgJXVuaGFuZGxlZCkgeworCXByaW50ZigiJS00MHMgICUxMGRcbiIsICRldmVudF9uYW1lLCAkdW5oYW5kbGVkeyRldmVudF9uYW1lfSk7CisgICAgfQorfQorCitzdWIgdHJhY2VfdW5oYW5kbGVkCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfOworCisgICAgJHVuaGFuZGxlZHskZXZlbnRfbmFtZX0rKzsKK30KKworc3ViIHByaW50X2hlYWRlcgoreworCW15ICgkZXZlbnRfbmFtZSwgJGNwdSwgJHNlY3MsICRuc2VjcywgJHBpZCwgJGNvbW0pID0gQF87CisKKwlwcmludGYoIiUtMjBzICU1dSAlMDV1LiUwOXUgJTh1ICUtMjBzICIsCisJICAgICAgICRldmVudF9uYW1lLCAkY3B1LCAkc2VjcywgJG5zZWNzLCAkcGlkLCAkY29tbSk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9ydy1ieS1maWxlLnBsIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWY5MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbApAQCAtMCwwICsxLDEwNSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIChjKSAyMDA5LCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKworIyBEaXNwbGF5IHIvdyBhY3Rpdml0eSBmb3IgZmlsZXMgcmVhZC93cml0dGVuIHRvIGZvciBhIGdpdmVuIHByb2dyYW0KKworIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCisjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCisjIGluIHRoZSBzdGF0dXMgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KKyMgYmUgcmV0cmlldmVkIHZpYSBzY3JpcHQgZnVuY3Rpb25zIG9mIHRoZSBmb3JtIGdldF9jb21tb25fKigpLgorCit1c2UgNS4wMTAwMDA7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgbGliICIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBsaWIgIi4vUGVyZi1UcmFjZS1VdGlsL2xpYiI7Cit1c2UgUGVyZjo6VHJhY2U6OkNvcmU7Cit1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CisKKyMgY2hhbmdlIHRoaXMgdG8gdGhlIGNvbW0gb2YgdGhlIHByb2dyYW0geW91J3JlIGludGVyZXN0ZWQgaW4KK215ICRmb3JfY29tbSA9ICJwZXJmIjsKKworbXkgJXJlYWRzOworbXkgJXdyaXRlczsKKworc3ViIHN5c2NhbGxzOjpzeXNfZW50ZXJfcmVhZAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwgJG5yLCAkZmQsICRidWYsICRjb3VudCkgPSBAXzsKKworICAgIGlmICgkY29tbW9uX2NvbW0gZXEgJGZvcl9jb21tKSB7CisJJHJlYWRzeyRmZH17Ynl0ZXNfcmVxdWVzdGVkfSArPSAkY291bnQ7CisJJHJlYWRzeyRmZH17dG90YWxfcmVhZHN9Kys7CisgICAgfQorfQorCitzdWIgc3lzY2FsbHM6OnN5c19lbnRlcl93cml0ZQoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwgJG5yLCAkZmQsICRidWYsICRjb3VudCkgPSBAXzsKKworICAgIGlmICgkY29tbW9uX2NvbW0gZXEgJGZvcl9jb21tKSB7CisJJHdyaXRlc3skZmR9e2J5dGVzX3dyaXR0ZW59ICs9ICRjb3VudDsKKwkkd3JpdGVzeyRmZH17dG90YWxfd3JpdGVzfSsrOworICAgIH0KK30KKworc3ViIHRyYWNlX2VuZAoreworICAgIHByaW50ZigiZmlsZSByZWFkIGNvdW50cyBmb3IgJGZvcl9jb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJTZzICAlMTBzICAlMTBzXG4iLCAiZmQiLCAiIyByZWFkcyIsICJieXRlc19yZXF1ZXN0ZWQiKTsKKyAgICBwcmludGYoIiU2cyAgJTEwcyAgJTEwc1xuIiwgIi0tLS0tLSIsICItLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7CisKKyAgICBmb3JlYWNoIG15ICRmZCAoc29ydCB7JHJlYWRzeyRifXtieXRlc19yZXF1ZXN0ZWR9IDw9PgorCQkJICAgICAgJHJlYWRzeyRhfXtieXRlc19yZXF1ZXN0ZWR9fSBrZXlzICVyZWFkcykgeworCW15ICR0b3RhbF9yZWFkcyA9ICRyZWFkc3skZmR9e3RvdGFsX3JlYWRzfTsKKwlteSAkYnl0ZXNfcmVxdWVzdGVkID0gJHJlYWRzeyRmZH17Ynl0ZXNfcmVxdWVzdGVkfTsKKwlwcmludGYoIiU2dSAgJTEwdSAgJTEwdVxuIiwgJGZkLCAkdG90YWxfcmVhZHMsICRieXRlc19yZXF1ZXN0ZWQpOworICAgIH0KKworICAgIHByaW50ZigiXG5maWxlIHdyaXRlIGNvdW50cyBmb3IgJGZvcl9jb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJTZzICAlMTBzICAlMTBzXG4iLCAiZmQiLCAiIyB3cml0ZXMiLCAiYnl0ZXNfd3JpdHRlbiIpOworICAgIHByaW50ZigiJTZzICAlMTBzICAlMTBzXG4iLCAiLS0tLS0tIiwgIi0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iKTsKKworICAgIGZvcmVhY2ggbXkgJGZkIChzb3J0IHskd3JpdGVzeyRifXtieXRlc193cml0dGVufSA8PT4KKwkJCSAgICAgICR3cml0ZXN7JGF9e2J5dGVzX3dyaXR0ZW59fSBrZXlzICV3cml0ZXMpIHsKKwlteSAkdG90YWxfd3JpdGVzID0gJHdyaXRlc3skZmR9e3RvdGFsX3dyaXRlc307CisJbXkgJGJ5dGVzX3dyaXR0ZW4gPSAkd3JpdGVzeyRmZH17Ynl0ZXNfd3JpdHRlbn07CisJcHJpbnRmKCIlNnUgICUxMHUgICUxMHVcbiIsICRmZCwgJHRvdGFsX3dyaXRlcywgJGJ5dGVzX3dyaXR0ZW4pOworICAgIH0KKworICAgIHByaW50X3VuaGFuZGxlZCgpOworfQorCitteSAldW5oYW5kbGVkOworCitzdWIgcHJpbnRfdW5oYW5kbGVkCit7CisgICAgaWYgKChzY2FsYXIga2V5cyAldW5oYW5kbGVkKSA9PSAwKSB7CisJcmV0dXJuOworICAgIH0KKworICAgIHByaW50ICJcbnVuaGFuZGxlZCBldmVudHM6XG5cbiI7CisKKyAgICBwcmludGYoIiUtNDBzICAlMTBzXG4iLCAiZXZlbnQiLCAiY291bnQiKTsKKyAgICBwcmludGYoIiUtNDBzICAlMTBzXG4iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsCisJICAgIi0tLS0tLS0tLS0tIik7CisKKyAgICBmb3JlYWNoIG15ICRldmVudF9uYW1lIChrZXlzICV1bmhhbmRsZWQpIHsKKwlwcmludGYoIiUtNDBzICAlMTBkXG4iLCAkZXZlbnRfbmFtZSwgJHVuaGFuZGxlZHskZXZlbnRfbmFtZX0pOworICAgIH0KK30KKworc3ViIHRyYWNlX3VuaGFuZGxlZAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSkgPSBAXzsKKworICAgICR1bmhhbmRsZWR7JGV2ZW50X25hbWV9Kys7Cit9CisKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktcGlkLnBsIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktcGlkLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjAxZmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9ydy1ieS1waWQucGwKQEAgLTAsMCArMSwxNzAgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAoYykgMjAwOSwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKKyMgRGlzcGxheSByL3cgYWN0aXZpdHkgZm9yIGFsbCBwcm9jZXNzZXMKKworIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCisjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCisjIGluIHRoZSBzdGF0dXMgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KKyMgYmUgcmV0cmlldmVkIHZpYSBzY3JpcHQgZnVuY3Rpb25zIG9mIHRoZSBmb3JtIGdldF9jb21tb25fKigpLgorCit1c2UgNS4wMTAwMDA7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgbGliICIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBsaWIgIi4vUGVyZi1UcmFjZS1VdGlsL2xpYiI7Cit1c2UgUGVyZjo6VHJhY2U6OkNvcmU7Cit1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CisKK215ICVyZWFkczsKK215ICV3cml0ZXM7CisKK3N1YiBzeXNjYWxsczo6c3lzX2V4aXRfcmVhZAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwKKwkkbnIsICRyZXQpID0gQF87CisKKyAgICBpZiAoJHJldCA+IDApIHsKKwkkcmVhZHN7JGNvbW1vbl9waWR9e2J5dGVzX3JlYWR9ICs9ICRyZXQ7CisgICAgfSBlbHNlIHsKKwlpZiAoIWRlZmluZWQgKCRyZWFkc3skY29tbW9uX3BpZH17Ynl0ZXNfcmVhZH0pKSB7CisJICAgICRyZWFkc3skY29tbW9uX3BpZH17Ynl0ZXNfcmVhZH0gPSAwOworCX0KKwkkcmVhZHN7JGNvbW1vbl9waWR9e2Vycm9yc317JHJldH0rKzsKKyAgICB9Cit9CisKK3N1YiBzeXNjYWxsczo6c3lzX2VudGVyX3JlYWQKK3sKKyAgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0sCisJJG5yLCAkZmQsICRidWYsICRjb3VudCkgPSBAXzsKKworICAgICRyZWFkc3skY29tbW9uX3BpZH17Ynl0ZXNfcmVxdWVzdGVkfSArPSAkY291bnQ7CisgICAgJHJlYWRzeyRjb21tb25fcGlkfXt0b3RhbF9yZWFkc30rKzsKKyAgICAkcmVhZHN7JGNvbW1vbl9waWR9e2NvbW19ID0gJGNvbW1vbl9jb21tOworfQorCitzdWIgc3lzY2FsbHM6OnN5c19leGl0X3dyaXRlCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSRuciwgJHJldCkgPSBAXzsKKworICAgIGlmICgkcmV0IDw9IDApIHsKKwkkd3JpdGVzeyRjb21tb25fcGlkfXtlcnJvcnN9eyRyZXR9Kys7CisgICAgfQorfQorCitzdWIgc3lzY2FsbHM6OnN5c19lbnRlcl93cml0ZQoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwKKwkkbnIsICRmZCwgJGJ1ZiwgJGNvdW50KSA9IEBfOworCisgICAgJHdyaXRlc3skY29tbW9uX3BpZH17Ynl0ZXNfd3JpdHRlbn0gKz0gJGNvdW50OworICAgICR3cml0ZXN7JGNvbW1vbl9waWR9e3RvdGFsX3dyaXRlc30rKzsKKyAgICAkd3JpdGVzeyRjb21tb25fcGlkfXtjb21tfSA9ICRjb21tb25fY29tbTsKK30KKworc3ViIHRyYWNlX2VuZAoreworICAgIHByaW50ZigicmVhZCBjb3VudHMgYnkgcGlkOlxuXG4iKTsKKworICAgIHByaW50ZigiJTZzICAlMjBzICAlMTBzICAlMTBzICAlMTBzXG4iLCAicGlkIiwgImNvbW0iLAorCSAgICIjIHJlYWRzIiwgImJ5dGVzX3JlcXVlc3RlZCIsICJieXRlc19yZWFkIik7CisgICAgcHJpbnRmKCIlNnMgICUtMjBzICAlMTBzICAlMTBzICAlMTBzXG4iLCAiLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tIiwKKwkgICAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tIik7CisKKyAgICBmb3JlYWNoIG15ICRwaWQgKHNvcnQgeyRyZWFkc3skYn17Ynl0ZXNfcmVhZH0gPD0+CisJCQkgICAgICAgJHJlYWRzeyRhfXtieXRlc19yZWFkfX0ga2V5cyAlcmVhZHMpIHsKKwlteSAkY29tbSA9ICRyZWFkc3skcGlkfXtjb21tfTsKKwlteSAkdG90YWxfcmVhZHMgPSAkcmVhZHN7JHBpZH17dG90YWxfcmVhZHN9OworCW15ICRieXRlc19yZXF1ZXN0ZWQgPSAkcmVhZHN7JHBpZH17Ynl0ZXNfcmVxdWVzdGVkfTsKKwlteSAkYnl0ZXNfcmVhZCA9ICRyZWFkc3skcGlkfXtieXRlc19yZWFkfTsKKworCXByaW50ZigiJTZzICAlLTIwcyAgJTEwcyAgJTEwcyAgJTEwc1xuIiwgJHBpZCwgJGNvbW0sCisJICAgICAgICR0b3RhbF9yZWFkcywgJGJ5dGVzX3JlcXVlc3RlZCwgJGJ5dGVzX3JlYWQpOworICAgIH0KKworICAgIHByaW50ZigiXG5mYWlsZWQgcmVhZHMgYnkgcGlkOlxuXG4iKTsKKworICAgIHByaW50ZigiJTZzICAlMjBzICAlNnMgICUxMHNcbiIsICJwaWQiLCAiY29tbSIsICJlcnJvciAjIiwgIiMgZXJyb3JzIik7CisgICAgcHJpbnRmKCIlNnMgICUyMHMgICU2cyAgJTEwc1xuIiwgIi0tLS0tLSIsICItLS0tLS0tLS0tLS0tLS0tLS0tLSIsCisJICAgIi0tLS0tLSIsICItLS0tLS0tLS0tIik7CisKKyAgICBmb3JlYWNoIG15ICRwaWQgKGtleXMgJXJlYWRzKSB7CisJbXkgJGNvbW0gPSAkcmVhZHN7JHBpZH17Y29tbX07CisJZm9yZWFjaCBteSAkZXJyIChzb3J0IHskcmVhZHN7JGJ9e2NvbW19IGNtcCAkcmVhZHN7JGF9e2NvbW19fQorCQkJIGtleXMgJXskcmVhZHN7JHBpZH17ZXJyb3JzfX0pIHsKKwkgICAgbXkgJGVycm9ycyA9ICRyZWFkc3skcGlkfXtlcnJvcnN9eyRlcnJ9OworCisJICAgIHByaW50ZigiJTZkICAlLTIwcyAgJTZkICAlMTBzXG4iLCAkcGlkLCAkY29tbSwgJGVyciwgJGVycm9ycyk7CisJfQorICAgIH0KKworICAgIHByaW50ZigiXG53cml0ZSBjb3VudHMgYnkgcGlkOlxuXG4iKTsKKworICAgIHByaW50ZigiJTZzICAlMjBzICAlMTBzICAlMTBzXG4iLCAicGlkIiwgImNvbW0iLAorCSAgICIjIHdyaXRlcyIsICJieXRlc193cml0dGVuIik7CisgICAgcHJpbnRmKCIlNnMgICUtMjBzICAlMTBzICAlMTBzXG4iLCAiLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tIiwKKwkgICAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkcGlkIChzb3J0IHskd3JpdGVzeyRifXtieXRlc193cml0dGVufSA8PT4KKwkJCSAgICAgICAkd3JpdGVzeyRhfXtieXRlc193cml0dGVufX0ga2V5cyAld3JpdGVzKSB7CisJbXkgJGNvbW0gPSAkd3JpdGVzeyRwaWR9e2NvbW19OworCW15ICR0b3RhbF93cml0ZXMgPSAkd3JpdGVzeyRwaWR9e3RvdGFsX3dyaXRlc307CisJbXkgJGJ5dGVzX3dyaXR0ZW4gPSAkd3JpdGVzeyRwaWR9e2J5dGVzX3dyaXR0ZW59OworCisJcHJpbnRmKCIlNnMgICUtMjBzICAlMTBzICAlMTBzXG4iLCAkcGlkLCAkY29tbSwKKwkgICAgICAgJHRvdGFsX3dyaXRlcywgJGJ5dGVzX3dyaXR0ZW4pOworICAgIH0KKworICAgIHByaW50ZigiXG5mYWlsZWQgd3JpdGVzIGJ5IHBpZDpcblxuIik7CisKKyAgICBwcmludGYoIiU2cyAgJTIwcyAgJTZzICAlMTBzXG4iLCAicGlkIiwgImNvbW0iLCAiZXJyb3IgIyIsICIjIGVycm9ycyIpOworICAgIHByaW50ZigiJTZzICAlMjBzICAlNnMgICUxMHNcbiIsICItLS0tLS0iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iLAorCSAgICItLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkcGlkIChrZXlzICV3cml0ZXMpIHsKKwlteSAkY29tbSA9ICR3cml0ZXN7JHBpZH17Y29tbX07CisJZm9yZWFjaCBteSAkZXJyIChzb3J0IHskd3JpdGVzeyRifXtjb21tfSBjbXAgJHdyaXRlc3skYX17Y29tbX19CisJCQkga2V5cyAleyR3cml0ZXN7JHBpZH17ZXJyb3JzfX0pIHsKKwkgICAgbXkgJGVycm9ycyA9ICR3cml0ZXN7JHBpZH17ZXJyb3JzfXskZXJyfTsKKworCSAgICBwcmludGYoIiU2ZCAgJS0yMHMgICU2ZCAgJTEwc1xuIiwgJHBpZCwgJGNvbW0sICRlcnIsICRlcnJvcnMpOworCX0KKyAgICB9CisKKyAgICBwcmludF91bmhhbmRsZWQoKTsKK30KKworbXkgJXVuaGFuZGxlZDsKKworc3ViIHByaW50X3VuaGFuZGxlZAoreworICAgIGlmICgoc2NhbGFyIGtleXMgJXVuaGFuZGxlZCkgPT0gMCkgeworCXJldHVybjsKKyAgICB9CisKKyAgICBwcmludCAiXG51bmhhbmRsZWQgZXZlbnRzOlxuXG4iOworCisgICAgcHJpbnRmKCIlLTQwcyAgJTEwc1xuIiwgImV2ZW50IiwgImNvdW50Iik7CisgICAgcHJpbnRmKCIlLTQwcyAgJTEwc1xuIiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLAorCSAgICItLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkZXZlbnRfbmFtZSAoa2V5cyAldW5oYW5kbGVkKSB7CisJcHJpbnRmKCIlLTQwcyAgJTEwZFxuIiwgJGV2ZW50X25hbWUsICR1bmhhbmRsZWR7JGV2ZW50X25hbWV9KTsKKyAgICB9Cit9CisKK3N1YiB0cmFjZV91bmhhbmRsZWQKK3sKKyAgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0pID0gQF87CisKKyAgICAkdW5oYW5kbGVkeyRldmVudF9uYW1lfSsrOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3Blcmwvd2FrZXVwLWxhdGVuY3kucGwgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC93YWtldXAtbGF0ZW5jeS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU4ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3Blcmwvd2FrZXVwLWxhdGVuY3kucGwKQEAgLTAsMCArMSwxMDMgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAoYykgMjAwOSwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKKyMgRGlzcGxheSBhdmcvbWluL21heCB3YWtldXAgbGF0ZW5jeQorCisjIFRoZSBjb21tb25fKiBldmVudCBoYW5kbGVyIGZpZWxkcyBhcmUgdGhlIG1vc3QgdXNlZnVsIGZpZWxkcyBjb21tb24gdG8KKyMgYWxsIGV2ZW50cy4gIFRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byB0aGUgJ2NvbW1vbl8qJyBmaWVsZHMKKyMgaW4gdGhlIHN0YXR1cyBmaWxlcy4gIFRob3NlIGZpZWxkcyBub3QgYXZhaWxhYmxlIGFzIGhhbmRsZXIgcGFyYW1zIGNhbgorIyBiZSByZXRyaWV2ZWQgdmlhIHNjcmlwdCBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gZ2V0X2NvbW1vbl8qKCkuCisKK3VzZSA1LjAxMDAwMDsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBsaWIgIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIGxpYiAiLi9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBQZXJmOjpUcmFjZTo6Q29yZTsKK3VzZSBQZXJmOjpUcmFjZTo6VXRpbDsKKworbXkgJWxhc3Rfd2FrZXVwOworCitteSAkbWF4X3dha2V1cF9sYXRlbmN5OworbXkgJG1pbl93YWtldXBfbGF0ZW5jeTsKK215ICR0b3RhbF93YWtldXBfbGF0ZW5jeTsKK215ICR0b3RhbF93YWtldXBzOworCitzdWIgc2NoZWQ6OnNjaGVkX3N3aXRjaAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwKKwkkcHJldl9jb21tLCAkcHJldl9waWQsICRwcmV2X3ByaW8sICRwcmV2X3N0YXRlLCAkbmV4dF9jb21tLCAkbmV4dF9waWQsCisJJG5leHRfcHJpbykgPSBAXzsKKworICAgIG15ICR3YWtldXBfdHMgPSAkbGFzdF93YWtldXB7JGNvbW1vbl9jcHV9e3RzfTsKKyAgICBpZiAoJHdha2V1cF90cykgeworCW15ICRzd2l0Y2hfdHMgPSBuc2VjcygkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MpOworCW15ICR3YWtldXBfbGF0ZW5jeSA9ICRzd2l0Y2hfdHMgLSAkd2FrZXVwX3RzOworCWlmICgkd2FrZXVwX2xhdGVuY3kgPiAkbWF4X3dha2V1cF9sYXRlbmN5KSB7CisJICAgICRtYXhfd2FrZXVwX2xhdGVuY3kgPSAkd2FrZXVwX2xhdGVuY3k7CisJfQorCWlmICgkd2FrZXVwX2xhdGVuY3kgPCAkbWluX3dha2V1cF9sYXRlbmN5KSB7CisJICAgICRtaW5fd2FrZXVwX2xhdGVuY3kgPSAkd2FrZXVwX2xhdGVuY3k7CisJfQorCSR0b3RhbF93YWtldXBfbGF0ZW5jeSArPSAkd2FrZXVwX2xhdGVuY3k7CisJJHRvdGFsX3dha2V1cHMrKzsKKyAgICB9CisgICAgJGxhc3Rfd2FrZXVweyRjb21tb25fY3B1fXt0c30gPSAwOworfQorCitzdWIgc2NoZWQ6OnNjaGVkX3dha2V1cAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsCisJJGNvbW1vbl9waWQsICRjb21tb25fY29tbSwKKwkkY29tbSwgJHBpZCwgJHByaW8sICRzdWNjZXNzLCAkdGFyZ2V0X2NwdSkgPSBAXzsKKworICAgICRsYXN0X3dha2V1cHskdGFyZ2V0X2NwdX17dHN9ID0gbnNlY3MoJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzKTsKK30KKworc3ViIHRyYWNlX2JlZ2luCit7CisgICAgJG1pbl93YWtldXBfbGF0ZW5jeSA9IDEwMDAwMDAwMDA7CisgICAgJG1heF93YWtldXBfbGF0ZW5jeSA9IDA7Cit9CisKK3N1YiB0cmFjZV9lbmQKK3sKKyAgICBwcmludGYoIndha2V1cF9sYXRlbmN5IHN0YXRzOlxuXG4iKTsKKyAgICBwcmludCAidG90YWxfd2FrZXVwczogJHRvdGFsX3dha2V1cHNcbiI7CisgICAgcHJpbnRmKCJhdmdfd2FrZXVwX2xhdGVuY3kgKG5zKTogJXVcbiIsCisJICAgYXZnKCR0b3RhbF93YWtldXBfbGF0ZW5jeSwgJHRvdGFsX3dha2V1cHMpKTsKKyAgICBwcmludGYoIm1pbl93YWtldXBfbGF0ZW5jeSAobnMpOiAldVxuIiwgJG1pbl93YWtldXBfbGF0ZW5jeSk7CisgICAgcHJpbnRmKCJtYXhfd2FrZXVwX2xhdGVuY3kgKG5zKTogJXVcbiIsICRtYXhfd2FrZXVwX2xhdGVuY3kpOworCisgICAgcHJpbnRfdW5oYW5kbGVkKCk7Cit9CisKK215ICV1bmhhbmRsZWQ7CisKK3N1YiBwcmludF91bmhhbmRsZWQKK3sKKyAgICBpZiAoKHNjYWxhciBrZXlzICV1bmhhbmRsZWQpID09IDApIHsKKwlyZXR1cm47CisgICAgfQorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIjsKKworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICJldmVudCIsICJjb3VudCIpOworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwKKwkgICAiLS0tLS0tLS0tLS0iKTsKKworICAgIGZvcmVhY2ggbXkgJGV2ZW50X25hbWUgKGtleXMgJXVuaGFuZGxlZCkgeworCXByaW50ZigiJS00MHMgICUxMGRcbiIsICRldmVudF9uYW1lLCAkdW5oYW5kbGVkeyRldmVudF9uYW1lfSk7CisgICAgfQorfQorCitzdWIgdHJhY2VfdW5oYW5kbGVkCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfOworCisgICAgJHVuaGFuZGxlZHskZXZlbnRfbmFtZX0rKzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEzMDJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3Blcmwvd29ya3F1ZXVlLXN0YXRzLnBsCkBAIC0wLDAgKzEsMTI5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgKGMpIDIwMDksIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorCisjIERpc3BsYXlzIHdvcmtxdWV1ZSBzdGF0cworIworIyBVc2FnZToKKyMKKyMgICBwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1SIC1lIHdvcmtxdWV1ZTp3b3JrcXVldWVfY3JlYXRpb24gLWUKKyMgICAgIHdvcmtxdWV1ZTp3b3JrcXVldWVfZGVzdHJ1Y3Rpb24gLWUgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRpb24KKyMgICAgIC1lIHdvcmtxdWV1ZTp3b3JrcXVldWVfaW5zZXJ0aW9uCisjCisjICAgcGVyZiB0cmFjZSAtcCAtcyB0b29scy9wZXJmL3NjcmlwdHMvcGVybC93b3JrcXVldWUtc3RhdHMucGwKKwordXNlIDUuMDEwMDAwOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIGxpYiAiJEVOVnsnUEVSRl9FWEVDX1BBVEgnfS9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYiI7Cit1c2UgbGliICIuL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIFBlcmY6OlRyYWNlOjpDb3JlOwordXNlIFBlcmY6OlRyYWNlOjpVdGlsOworCitteSBAY3B1czsKKworc3ViIHdvcmtxdWV1ZTo6d29ya3F1ZXVlX2Rlc3RydWN0aW9uCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSR0aHJlYWRfY29tbSwgJHRocmVhZF9waWQpID0gQF87CisKKyAgICAkY3B1c1skY29tbW9uX2NwdV17JHRocmVhZF9waWR9e2Rlc3Ryb3llZH0rKzsKKyAgICAkY3B1c1skY29tbW9uX2NwdV17JHRocmVhZF9waWR9e2NvbW19ID0gJHRocmVhZF9jb21tOworfQorCitzdWIgd29ya3F1ZXVlOjp3b3JrcXVldWVfY3JlYXRpb24KK3sKKyAgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0sCisJJHRocmVhZF9jb21tLCAkdGhyZWFkX3BpZCwgJGNwdSkgPSBAXzsKKworICAgICRjcHVzWyRjb21tb25fY3B1XXskdGhyZWFkX3BpZH17Y3JlYXRlZH0rKzsKKyAgICAkY3B1c1skY29tbW9uX2NwdV17JHRocmVhZF9waWR9e2NvbW19ID0gJHRocmVhZF9jb21tOworfQorCitzdWIgd29ya3F1ZXVlOjp3b3JrcXVldWVfZXhlY3V0aW9uCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSR0aHJlYWRfY29tbSwgJHRocmVhZF9waWQsICRmdW5jKSA9IEBfOworCisgICAgJGNwdXNbJGNvbW1vbl9jcHVdeyR0aHJlYWRfcGlkfXtleGVjdXRlZH0rKzsKKyAgICAkY3B1c1skY29tbW9uX2NwdV17JHRocmVhZF9waWR9e2NvbW19ID0gJHRocmVhZF9jb21tOworfQorCitzdWIgd29ya3F1ZXVlOjp3b3JrcXVldWVfaW5zZXJ0aW9uCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSR0aHJlYWRfY29tbSwgJHRocmVhZF9waWQsICRmdW5jKSA9IEBfOworCisgICAgJGNwdXNbJGNvbW1vbl9jcHVdeyR0aHJlYWRfcGlkfXtpbnNlcnRlZH0rKzsKKyAgICAkY3B1c1skY29tbW9uX2NwdV17JHRocmVhZF9waWR9e2NvbW19ID0gJHRocmVhZF9jb21tOworfQorCitzdWIgdHJhY2VfZW5kCit7CisgICAgcHJpbnQgIndvcmtxdWV1ZSB3b3JrIHN0YXRzOlxuXG4iOworICAgIG15ICRjcHUgPSAwOworICAgIHByaW50ZigiJTNzICU2cyAlNnNcdCUtMjBzXG4iLCAiY3B1IiwgImlucyIsICJleGVjIiwgIm5hbWUiKTsKKyAgICBwcmludGYoIiUzcyAlNnMgJTZzXHQlLTIwc1xuIiwgIi0tLSIsICItLS0iLCAiLS0tLSIsICItLS0tIik7CisgICAgZm9yZWFjaCBteSAkcGlkaGFzaCAoQGNwdXMpIHsKKwl3aGlsZSAoKG15ICRwaWQsIG15ICR3cWhhc2gpID0gZWFjaCAlJHBpZGhhc2gpIHsKKwkgICAgbXkgJGlucyA9ICQkd3FoYXNoeydpbnNlcnRlZCd9OworCSAgICBteSAkZXhlID0gJCR3cWhhc2h7J2V4ZWN1dGVkJ307CisJICAgIG15ICRjb21tID0gJCR3cWhhc2h7J2NvbW0nfTsKKwkgICAgaWYgKCRpbnMgfHwgJGV4ZSkgeworCQlwcmludGYoIiUzdSAlNnUgJTZ1XHQlLTIwc1xuIiwgJGNwdSwgJGlucywgJGV4ZSwgJGNvbW0pOworCSAgICB9CisJfQorCSRjcHUrKzsKKyAgICB9CisKKyAgICAkY3B1ID0gMDsKKyAgICBwcmludCAiXG53b3JrcXVldWUgbGlmZWN5Y2xlIHN0YXRzOlxuXG4iOworICAgIHByaW50ZigiJTNzICU2cyAlNnNcdCUtMjBzXG4iLCAiY3B1IiwgImNyZWF0ZWQiLCAiZGVzdHJveWVkIiwgIm5hbWUiKTsKKyAgICBwcmludGYoIiUzcyAlNnMgJTZzXHQlLTIwc1xuIiwgIi0tLSIsICItLS0tLS0tIiwgIi0tLS0tLS0tLSIsICItLS0tIik7CisgICAgZm9yZWFjaCBteSAkcGlkaGFzaCAoQGNwdXMpIHsKKwl3aGlsZSAoKG15ICRwaWQsIG15ICR3cWhhc2gpID0gZWFjaCAlJHBpZGhhc2gpIHsKKwkgICAgbXkgJGNyZWF0ZWQgPSAkJHdxaGFzaHsnY3JlYXRlZCd9OworCSAgICBteSAkZGVzdHJveWVkID0gJCR3cWhhc2h7J2Rlc3Ryb3llZCd9OworCSAgICBteSAkY29tbSA9ICQkd3FoYXNoeydjb21tJ307CisJICAgIGlmICgkY3JlYXRlZCB8fCAkZGVzdHJveWVkKSB7CisJCXByaW50ZigiJTN1ICU2dSAlNnVcdCUtMjBzXG4iLCAkY3B1LCAkY3JlYXRlZCwgJGRlc3Ryb3llZCwKKwkJICAgICAgICRjb21tKTsKKwkgICAgfQorCX0KKwkkY3B1Kys7CisgICAgfQorCisgICAgcHJpbnRfdW5oYW5kbGVkKCk7Cit9CisKK215ICV1bmhhbmRsZWQ7CisKK3N1YiBwcmludF91bmhhbmRsZWQKK3sKKyAgICBpZiAoKHNjYWxhciBrZXlzICV1bmhhbmRsZWQpID09IDApIHsKKwlyZXR1cm47CisgICAgfQorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIjsKKworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICJldmVudCIsICJjb3VudCIpOworICAgIHByaW50ZigiJS00MHMgICUxMHNcbiIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwKKwkgICAiLS0tLS0tLS0tLS0iKTsKKworICAgIGZvcmVhY2ggbXkgJGV2ZW50X25hbWUgKGtleXMgJXVuaGFuZGxlZCkgeworCXByaW50ZigiJS00MHMgICUxMGRcbiIsICRldmVudF9uYW1lLCAkdW5oYW5kbGVkeyRldmVudF9uYW1lfSk7CisgICAgfQorfQorCitzdWIgdHJhY2VfdW5oYW5kbGVkCit7CisgICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywgJGNvbW1vbl9uc2VjcywKKwkkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfOworCisgICAgJHVuaGFuZGxlZHskZXZlbnRfbmFtZX0rKzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KaW5kZXggYzU2MWQxNS4uNTQ1NTJhMCAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KKysrIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPVBFUkYtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYwLjAuMS5QRVJGCitERUZfVkVSPXYwLjAuMi5QRVJGCiAKIExGPScKICcKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKaW5kZXggNmY4ZWE5ZC4uOTE4ZWIzNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKQEAgLTEsMTAgKzEsMTUgQEAKLSNpZm5kZWYgQ0FDSEVfSAotI2RlZmluZSBDQUNIRV9ICisjaWZuZGVmIF9fUEVSRl9DQUNIRV9ICisjZGVmaW5lIF9fUEVSRl9DQUNIRV9ICiAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgogCisjZGVmaW5lIENNRF9FWEVDX1BBVEggIi0tZXhlYy1wYXRoIgorI2RlZmluZSBDTURfUEVSRl9ESVIgIi0tcGVyZi1kaXI9IgorI2RlZmluZSBDTURfV09SS19UUkVFICItLXdvcmstdHJlZT0iCisjZGVmaW5lIENNRF9ERUJVR0ZTX0RJUiAiLS1kZWJ1Z2ZzLWRpcj0iCisKICNkZWZpbmUgUEVSRl9ESVJfRU5WSVJPTk1FTlQgIlBFUkZfRElSIgogI2RlZmluZSBQRVJGX1dPUktfVFJFRV9FTlZJUk9OTUVOVCAiUEVSRl9XT1JLX1RSRUUiCiAjZGVmaW5lIERFRkFVTFRfUEVSRl9ESVJfRU5WSVJPTk1FTlQgIi5wZXJmIgpAQCAtMTE3LDQgKzEyMiw0IEBACiAKIGV4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXplKTsKIAotI2VuZGlmIC8qIENBQ0hFX0ggKi8KKyNlbmRpZiAvKiBfX1BFUkZfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCmluZGV4IDNiODM4MGYuLmIzYjcxMjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYworKysgYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCX0KIAlub2RlLT52YWxfbnIgPSBjaGFpbi0+bnIgLSBzdGFydDsKIAlpZiAoIW5vZGUtPnZhbF9ucikKLQkJcHJpbnRmKCJXYXJuaW5nOiBlbXB0eSBub2RlIGluIGNhbGxjaGFpbiB0cmVlXG4iKTsKKwkJcHJfd2FybmluZygiV2FybmluZzogZW1wdHkgbm9kZSBpbiBjYWxsY2hhaW4gdHJlZVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmggYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKaW5kZXggNDNjZjNlYS4uYWQ0NjI2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaApAQCAtNTgsNCArNTgsNCBAQAogaW50IHJlZ2lzdGVyX2NhbGxjaGFpbl9wYXJhbShzdHJ1Y3QgY2FsbGNoYWluX3BhcmFtICpwYXJhbSk7CiB2b2lkIGFwcGVuZF9jaGFpbihzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKnJvb3QsIHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAogCQkgIHN0cnVjdCBzeW1ib2wgKipzeW1zKTsKLSNlbmRpZgorI2VuZGlmCS8qIF9fUEVSRl9DQUxMQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmggYi90b29scy9wZXJmL3V0aWwvY29sb3IuaAppbmRleCA1OGQ1OTc1Li4yNGU4ODA5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY29sb3IuaAorKysgYi90b29scy9wZXJmL3V0aWwvY29sb3IuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgQ09MT1JfSAotI2RlZmluZSBDT0xPUl9ICisjaWZuZGVmIF9fUEVSRl9DT0xPUl9ICisjZGVmaW5lIF9fUEVSRl9DT0xPUl9ICiAKIC8qICJcMDMzWzE7Mzg7NTsyeHg7NDg7NTsyeHhtXDAiIGlzIDIzIGJ5dGVzICovCiAjZGVmaW5lIENPTE9SX01BWExFTiAyNApAQCAtMzksNCArMzksNCBAQAogaW50IHBlcmNlbnRfY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCBkb3VibGUgcGVyY2VudCk7CiBjb25zdCBjaGFyICpnZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7CiAKLSNlbmRpZiAvKiBDT0xPUl9IICovCisjZW5kaWYgLyogX19QRVJGX0NPTE9SX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jdHlwZS5jIGIvdG9vbHMvcGVyZi91dGlsL2N0eXBlLmMKaW5kZXggMGI3OTFiZC4uMzUwNzM2MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2N0eXBlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2N0eXBlLmMKQEAgLTI5LDMgKzI5LDExIEBACiAJQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgUiwgUiwgUCwgUCwgMCwJCS8qIDExMi4uMTI3ICovCiAJLyogTm90aGluZyBpbiB0aGUgMTI4Li4gcmFuZ2UgKi8KIH07CisKK2NvbnN0IGNoYXIgKmdyYXBoX2xpbmUgPQorCSJfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCisJIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyI7Citjb25zdCBjaGFyICpncmFwaF9kb3R0ZWRfbGluZSA9CisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmMgYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBiZWRmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJkYXRhX21hcC5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgKmN1cnJfaGFuZGxlcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCW1tYXBfd2luZG93ID0gMzI7CitzdGF0aWMgY2hhcgkJX19jd2RbUEFUSF9NQVhdOworCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQpCit7CisJZHVtcF9wcmludGYoIjogdW5oYW5kbGVkIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVnaXN0ZXJfcGVyZl9maWxlX2hhbmRsZXIoc3RydWN0IHBlcmZfZmlsZV9oYW5kbGVyICpoYW5kbGVyKQoreworCWlmICghaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQpCisJCWhhbmRsZXItPnByb2Nlc3Nfc2FtcGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmICghaGFuZGxlci0+cHJvY2Vzc19tbWFwX2V2ZW50KQorCQloYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2NvbW1fZXZlbnQpCisJCWhhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoIWhhbmRsZXItPnByb2Nlc3NfZm9ya19ldmVudCkKKwkJaGFuZGxlci0+cHJvY2Vzc19mb3JrX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmICghaGFuZGxlci0+cHJvY2Vzc19leGl0X2V2ZW50KQorCQloYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2xvc3RfZXZlbnQpCisJCWhhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoIWhhbmRsZXItPnByb2Nlc3NfcmVhZF9ldmVudCkKKwkJaGFuZGxlci0+cHJvY2Vzc19yZWFkX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmICghaGFuZGxlci0+cHJvY2Vzc190aHJvdHRsZV9ldmVudCkKKwkJaGFuZGxlci0+cHJvY2Vzc190aHJvdHRsZV9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoIWhhbmRsZXItPnByb2Nlc3NfdW50aHJvdHRsZV9ldmVudCkKKwkJaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOworCisJY3Vycl9oYW5kbGVyID0gaGFuZGxlcjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV2ZW50X19uYW1lW10gPSB7CisJWzBdCQkJID0gIlRPVEFMIiwKKwlbUEVSRl9SRUNPUkRfTU1BUF0JID0gIk1NQVAiLAorCVtQRVJGX1JFQ09SRF9MT1NUXQkgPSAiTE9TVCIsCisJW1BFUkZfUkVDT1JEX0NPTU1dCSA9ICJDT01NIiwKKwlbUEVSRl9SRUNPUkRfRVhJVF0JID0gIkVYSVQiLAorCVtQRVJGX1JFQ09SRF9USFJPVFRMRV0JID0gIlRIUk9UVExFIiwKKwlbUEVSRl9SRUNPUkRfVU5USFJPVFRMRV0gPSAiVU5USFJPVFRMRSIsCisJW1BFUkZfUkVDT1JEX0ZPUktdCSA9ICJGT1JLIiwKKwlbUEVSRl9SRUNPUkRfUkVBRF0JID0gIlJFQUQiLAorCVtQRVJGX1JFQ09SRF9TQU1QTEVdCSA9ICJTQU1QTEUiLAorfTsKKwordW5zaWduZWQgbG9uZyBldmVudF9fdG90YWxbUEVSRl9SRUNPUkRfTUFYXTsKKwordm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFBFUkZfUkVDT1JEX01BWDsgKytpKQorCQlwcl9pbmZvKCIlMTBzIGV2ZW50czogJTEwbGRcbiIsCisJCQlldmVudF9fbmFtZVtpXSwgZXZlbnRfX3RvdGFsW2ldKTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3sKKwl0cmFjZV9ldmVudChldmVudCk7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlIDwgUEVSRl9SRUNPUkRfTUFYKSB7CisJCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX1JFQ09SRF8lcyIsCisJCQkgICAgKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCisJCQkgICAgKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKKwkJCSAgICBldmVudF9fbmFtZVtldmVudC0+aGVhZGVyLnR5cGVdKTsKKwkJKytldmVudF9fdG90YWxbMF07CisJCSsrZXZlbnRfX3RvdGFsW2V2ZW50LT5oZWFkZXIudHlwZV07CisJfQorCisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKKwkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKKwkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19tbWFwX2V2ZW50KGV2ZW50KTsKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCXJldHVybiBjdXJyX2hhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudChldmVudCk7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCQlyZXR1cm4gY3Vycl9oYW5kbGVyLT5wcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKKwkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50KTsKKwljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6CisJCXJldHVybiBjdXJyX2hhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudChldmVudCk7CisJY2FzZSBQRVJGX1JFQ09SRF9SRUFEOgorCQlyZXR1cm4gY3Vycl9oYW5kbGVyLT5wcm9jZXNzX3JlYWRfZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfVEhST1RUTEU6CisJCXJldHVybiBjdXJyX2hhbmRsZXItPnByb2Nlc3NfdGhyb3R0bGVfZXZlbnQoZXZlbnQpOworCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKKwkJcmV0dXJuIGN1cnJfaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KGV2ZW50KTsKKwlkZWZhdWx0OgorCQljdXJyX2hhbmRsZXItPnRvdGFsX3Vua25vd24rKzsKKwkJcmV0dXJuIC0xOworCX0KK30KKworaW50IHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhpbnQgaW5wdXQsIG9mZl90IG9mZnNldCwgb2ZmX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgYmV2OworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCW9mZl90IGxpbWl0ID0gb2Zmc2V0ICsgc2l6ZTsKKwlpbnQgZXJyID0gLTE7CisKKwl3aGlsZSAob2Zmc2V0IDwgbGltaXQpIHsKKwkJc3RydWN0IGRzbyAqZHNvOworCQlzc2l6ZV90IGxlbjsKKworCQlpZiAocmVhZChpbnB1dCwgJmJldiwgc2l6ZW9mKGJldikpICE9IHNpemVvZihiZXYpKQorCQkJZ290byBvdXQ7CisKKwkJbGVuID0gYmV2LmhlYWRlci5zaXplIC0gc2l6ZW9mKGJldik7CisJCWlmIChyZWFkKGlucHV0LCBmaWxlbmFtZSwgbGVuKSAhPSBsZW4pCisJCQlnb3RvIG91dDsKKworCQlkc28gPSBkc29zX19maW5kbmV3KGZpbGVuYW1lKTsKKwkJaWYgKGRzbyAhPSBOVUxMKQorCQkJZHNvX19zZXRfYnVpbGRfaWQoZHNvLCAmYmV2LmJ1aWxkX2lkKTsKKworCQlvZmZzZXQgKz0gYmV2LmhlYWRlci5zaXplOworCX0KKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCBtbWFwX2Rpc3BhdGNoX3BlcmZfZmlsZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKipwaGVhZGVyLAorCQkJICAgIGNvbnN0IGNoYXIgKmlucHV0X25hbWUsCisJCQkgICAgaW50IGZvcmNlLAorCQkJICAgIGludCBmdWxsX3BhdGhzLAorCQkJICAgIGludCAqY3dkbGVuLAorCQkJICAgIGNoYXIgKipjd2QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcjsKKwl1bnNpZ25lZCBsb25nIGhlYWQsIHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3Qgc3RhdCBpbnB1dF9zdGF0OworCXNpemVfdAlwYWdlX3NpemU7CisJdTY0IHNhbXBsZV90eXBlOworCWV2ZW50X3QgKmV2ZW50OworCXVpbnQzMl90IHNpemU7CisJaW50IGlucHV0OworCWNoYXIgKmJ1ZjsKKworCWlmIChjdXJyX2hhbmRsZXIgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygiRm9yZ290IHRvIHJlZ2lzdGVyIHBlcmYgZmlsZSBoYW5kbGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7CisJaWYgKGlucHV0IDwgMCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBvcGVuIGZpbGU6ICVzIiwgaW5wdXRfbmFtZSk7CisJCWlmICghc3RyY21wKGlucHV0X25hbWUsICJwZXJmLmRhdGEiKSkKKwkJCXByX2VycigiICAodHJ5ICdwZXJmIHJlY29yZCcgZmlyc3QpIik7CisJCXByX2VycigiXG4iKTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisKKwlpZiAoZnN0YXQoaW5wdXQsICZpbnB1dF9zdGF0KSA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gLUVBQ0NFUzsKKwlpZiAoIWZvcmNlICYmIGlucHV0X3N0YXQuc3RfdWlkICYmIChpbnB1dF9zdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7CisJCXByX2VycigiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290XG4iLAorCQkJaW5wdXRfbmFtZSk7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmIChpbnB1dF9zdGF0LnN0X3NpemUgPT0gMCkgeworCQlwcl9pbmZvKCJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCWVyciA9IC1FTk9NRU07CisJaGVhZGVyID0gcGVyZl9oZWFkZXJfX25ldygpOworCWlmIChoZWFkZXIgPT0gTlVMTCkKKwkJZ290byBvdXRfY2xvc2U7CisKKwllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChoZWFkZXIsIGlucHV0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZGVsZXRlOworCSpwaGVhZGVyID0gaGVhZGVyOworCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OworCisJc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoaGVhZGVyKTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKGN1cnJfaGFuZGxlci0+c2FtcGxlX3R5cGVfY2hlY2sgJiYKKwkgICAgY3Vycl9oYW5kbGVyLT5zYW1wbGVfdHlwZV9jaGVjayhzYW1wbGVfdHlwZSkgPCAwKQorCQlnb3RvIG91dF9kZWxldGU7CisKKwlpZiAoIWZ1bGxfcGF0aHMpIHsKKwkJaWYgKGdldGN3ZChfX2N3ZCwgc2l6ZW9mKF9fY3dkKSkgPT0gTlVMTCkgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJCQllcnIgPSAtZXJybm87CisJCQlnb3RvIG91dF9kZWxldGU7CisJCX0KKwkJKmN3ZCA9IF9fY3dkOworCQkqY3dkbGVuID0gc3RybGVuKCpjd2QpOworCX0gZWxzZSB7CisJCSpjd2QgPSBOVUxMOworCQkqY3dkbGVuID0gMDsKKwl9CisKKwlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwlvZmZzZXQgKz0gc2hpZnQ7CisJaGVhZCAtPSBzaGlmdDsKKworcmVtYXA6CisJYnVmID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdywgUFJPVF9SRUFELAorCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKKwlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbW1hcCBmaWxlXG4iKTsKKwkJZXJyID0gLWVycm5vOworCQlnb3RvIG91dF9kZWxldGU7CisJfQorCittb3JlOgorCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CisKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCWlmICghc2l6ZSkKKwkJc2l6ZSA9IDg7CisKKwlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgeworCQlpbnQgbXVubWFwX3JldDsKKworCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKworCQltdW5tYXBfcmV0ID0gbXVubWFwKGJ1ZiwgcGFnZV9zaXplICogbW1hcF93aW5kb3cpOworCQlhc3NlcnQobXVubWFwX3JldCA9PSAwKTsKKworCQlvZmZzZXQgKz0gc2hpZnQ7CisJCWhlYWQgLT0gc2hpZnQ7CisJCWdvdG8gcmVtYXA7CisJfQorCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKworCWR1bXBfcHJpbnRmKCJcbiVwIFslcF06IGV2ZW50OiAlZFxuIiwKKwkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkJKHZvaWQgKikobG9uZylldmVudC0+aGVhZGVyLnNpemUsCisJCQlldmVudC0+aGVhZGVyLnR5cGUpOworCisJaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCkgPCAwKSB7CisKKwkJZHVtcF9wcmludGYoIiVwIFslcF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCisJCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKworCQkvKgorCQkgKiBhc3N1bWUgd2UgbG9zdCB0cmFjayBvZiB0aGUgc3RyZWFtLCBjaGVjayBhbGlnbm1lbnQsIGFuZAorCQkgKiBpbmNyZW1lbnQgYSBzaW5nbGUgdTY0IGluIHRoZSBob3BlIHRvIGNhdGNoIG9uIGFnYWluICdzb29uJy4KKwkJICovCisKKwkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKKwkJCWhlYWQgJj0gfjdVTEw7CisKKwkJc2l6ZSA9IDg7CisJfQorCisJaGVhZCArPSBzaXplOworCisJaWYgKG9mZnNldCArIGhlYWQgPj0gaGVhZGVyLT5kYXRhX29mZnNldCArIGhlYWRlci0+ZGF0YV9zaXplKQorCQlnb3RvIGRvbmU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKWlucHV0X3N0YXQuc3Rfc2l6ZSkKKwkJZ290byBtb3JlOworCitkb25lOgorCWVyciA9IDA7CitvdXRfY2xvc2U6CisJY2xvc2UoaW5wdXQpOworCisJcmV0dXJuIGVycjsKK291dF9kZWxldGU6CisJcGVyZl9oZWFkZXJfX2RlbGV0ZShoZWFkZXIpOworCWdvdG8gb3V0X2Nsb3NlOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmggYi90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTgwZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RhdGFfbWFwLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX1BFUkZfREFUQU1BUF9ICisjZGVmaW5lIF9fUEVSRl9EQVRBTUFQX0gKKworI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAiaGVhZGVyLmgiCisKK3R5cGVkZWYgaW50ICgqZXZlbnRfdHlwZV9oYW5kbGVyX3QpKGV2ZW50X3QgKik7CisKK3N0cnVjdCBwZXJmX2ZpbGVfaGFuZGxlciB7CisJZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19zYW1wbGVfZXZlbnQ7CisJZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19tbWFwX2V2ZW50OworCWV2ZW50X3R5cGVfaGFuZGxlcl90CXByb2Nlc3NfY29tbV9ldmVudDsKKwlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX2ZvcmtfZXZlbnQ7CisJZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc19leGl0X2V2ZW50OworCWV2ZW50X3R5cGVfaGFuZGxlcl90CXByb2Nlc3NfbG9zdF9ldmVudDsKKwlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX3JlYWRfZXZlbnQ7CisJZXZlbnRfdHlwZV9oYW5kbGVyX3QJcHJvY2Vzc190aHJvdHRsZV9ldmVudDsKKwlldmVudF90eXBlX2hhbmRsZXJfdAlwcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQ7CisJaW50CQkJKCpzYW1wbGVfdHlwZV9jaGVjaykodTY0IHNhbXBsZV90eXBlKTsKKwl1bnNpZ25lZCBsb25nCQl0b3RhbF91bmtub3duOworfTsKKwordm9pZCByZWdpc3Rlcl9wZXJmX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgcGVyZl9maWxlX2hhbmRsZXIgKmhhbmRsZXIpOworaW50IG1tYXBfZGlzcGF0Y2hfcGVyZl9maWxlKHN0cnVjdCBwZXJmX2hlYWRlciAqKnBoZWFkZXIsCisJCQkgICAgY29uc3QgY2hhciAqaW5wdXRfbmFtZSwKKwkJCSAgICBpbnQgZm9yY2UsCisJCQkgICAgaW50IGZ1bGxfcGF0aHMsCisJCQkgICAgaW50ICpjd2RsZW4sCisJCQkgICAgY2hhciAqKmN3ZCk7CitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBmaWxlX3NpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKaW5kZXggZThjYTk4Zi4uMjhkNTIwZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKQEAgLTEzLDEyICsxMywxMiBAQAogaW50IHZlcmJvc2UgPSAwOwogaW50IGR1bXBfdHJhY2UgPSAwOwogCi1pbnQgZXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK2ludCBlcHJpbnRmKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWludCByZXQgPSAwOwogCi0JaWYgKHZlcmJvc2UpIHsKKwlpZiAodmVyYm9zZSA+PSBsZXZlbCkgewogCQl2YV9zdGFydChhcmdzLCBmbXQpOwogCQlyZXQgPSB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7CiAJCXZhX2VuZChhcmdzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmgKaW5kZXggNDM3ZWVhNS4uYzZjMjRjNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmgKQEAgLTEsOCArMSwxNSBAQAogLyogRm9yIGRlYnVnZ2luZyBnZW5lcmFsIHB1cnBvc2VzICovCisjaWZuZGVmIF9fUEVSRl9ERUJVR19ICisjZGVmaW5lIF9fUEVSRl9ERUJVR19ICisKKyNpbmNsdWRlICJldmVudC5oIgogCiBleHRlcm4gaW50IHZlcmJvc2U7CiBleHRlcm4gaW50IGR1bXBfdHJhY2U7CiAKLWludCBlcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworaW50IGVwcmludGYoaW50IGxldmVsLAorCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKIGludCBkdW1wX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKIHZvaWQgdHJhY2VfZXZlbnQoZXZlbnRfdCAqZXZlbnQpOworCisjZW5kaWYJLyogX19QRVJGX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjczZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCkBAIC0wLDAgKzEsMjQxIEBACisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgaW50IGRlYnVnZnNfcHJlbW91bnRlZDsKK3N0YXRpYyBjaGFyIGRlYnVnZnNfbW91bnRwb2ludFtNQVhfUEFUSCsxXTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnZnNfa25vd25fbW91bnRwb2ludHNbXSA9IHsKKwkiL3N5cy9rZXJuZWwvZGVidWcvIiwKKwkiL2RlYnVnLyIsCisJMCwKK307CisKKy8qIHVzZSB0aGlzIHRvIGZvcmNlIGEgdW1vdW50ICovCit2b2lkIGRlYnVnZnNfZm9yY2VfY2xlYW51cCh2b2lkKQoreworCWRlYnVnZnNfZmluZF9tb3VudHBvaW50KCk7CisJZGVidWdmc19wcmVtb3VudGVkID0gMDsKKwlkZWJ1Z2ZzX3Vtb3VudCgpOworfQorCisvKiBjb25zdHJ1Y3QgYSBmdWxsIHBhdGggdG8gYSBkZWJ1Z2ZzIGVsZW1lbnQgKi8KK2ludCBkZWJ1Z2ZzX21ha2VfcGF0aChjb25zdCBjaGFyICplbGVtZW50LCBjaGFyICpidWZmZXIsIGludCBzaXplKQoreworCWludCBsZW47CisKKwlpZiAoc3RybGVuKGRlYnVnZnNfbW91bnRwb2ludCkgPT0gMCkgeworCQlidWZmZXJbMF0gPSAnXDAnOworCQlyZXR1cm4gLTE7CisJfQorCisJbGVuID0gc3RybGVuKGRlYnVnZnNfbW91bnRwb2ludCkgKyBzdHJsZW4oZWxlbWVudCkgKyAxOworCWlmIChsZW4gPj0gc2l6ZSkKKwkJcmV0dXJuIGxlbisxOworCisJc25wcmludGYoYnVmZmVyLCBzaXplLTEsICIlcy8lcyIsIGRlYnVnZnNfbW91bnRwb2ludCwgZWxlbWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdmc19mb3VuZDsKKworLyogZmluZCB0aGUgcGF0aCB0byB0aGUgbW91bnRlZCBkZWJ1Z2ZzICovCitjb25zdCBjaGFyICpkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCh2b2lkKQoreworCWNvbnN0IGNoYXIgKipwdHI7CisJY2hhciB0eXBlWzEwMF07CisJRklMRSAqZnA7CisKKwlpZiAoZGVidWdmc19mb3VuZCkKKwkJcmV0dXJuIChjb25zdCBjaGFyICopIGRlYnVnZnNfbW91bnRwb2ludDsKKworCXB0ciA9IGRlYnVnZnNfa25vd25fbW91bnRwb2ludHM7CisJd2hpbGUgKCpwdHIpIHsKKwkJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludCgqcHRyKSA9PSAwKSB7CisJCQlkZWJ1Z2ZzX2ZvdW5kID0gMTsKKwkJCXN0cmNweShkZWJ1Z2ZzX21vdW50cG9pbnQsICpwdHIpOworCQkJcmV0dXJuIGRlYnVnZnNfbW91bnRwb2ludDsKKwkJfQorCQlwdHIrKzsKKwl9CisKKwkvKiBnaXZlIHVwIGFuZCBwYXJzZSAvcHJvYy9tb3VudHMgKi8KKwlmcCA9IGZvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpOworCWlmIChmcCA9PSBOVUxMKQorCQlkaWUoIkNhbid0IG9wZW4gL3Byb2MvbW91bnRzIGZvciByZWFkIik7CisKKwl3aGlsZSAoZnNjYW5mKGZwLCAiJSpzICUiCisJCSAgICAgIFNUUihNQVhfUEFUSCkKKwkJICAgICAgInMgJTk5cyAlKnMgJSpkICUqZFxuIiwKKwkJICAgICAgZGVidWdmc19tb3VudHBvaW50LCB0eXBlKSA9PSAyKSB7CisJCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWZjbG9zZShmcCk7CisKKwlpZiAoc3RyY21wKHR5cGUsICJkZWJ1Z2ZzIikgIT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZWJ1Z2ZzX2ZvdW5kID0gMTsKKworCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7Cit9CisKKy8qIHZlcmlmeSB0aGF0IGEgbW91bnRwb2ludCBpcyBhY3R1YWxseSBhIGRlYnVnZnMgaW5zdGFuY2UgKi8KKworaW50IGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChjb25zdCBjaGFyICpkZWJ1Z2ZzKQoreworCXN0cnVjdCBzdGF0ZnMgc3RfZnM7CisKKwlpZiAoc3RhdGZzKGRlYnVnZnMsICZzdF9mcykgPCAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwllbHNlIGlmIChzdF9mcy5mX3R5cGUgIT0gKGxvbmcpIERFQlVHRlNfTUFHSUMpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IGRlYnVnZnNfdmFsaWRfZW50cnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gMDsKK30KKworLyogbW91bnQgdGhlIGRlYnVnZnMgc29tZXdoZXJlICovCisKK2ludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCit7CisJY2hhciBtb3VudGNtZFsxMjhdOworCisJLyogc2VlIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkICovCisJaWYgKGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCkpIHsKKwkJZGVidWdmc19wcmVtb3VudGVkID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogaWYgbm90IG1vdW50ZWQgYW5kIG5vIGFyZ3VtZW50ICovCisJaWYgKG1vdW50cG9pbnQgPT0gTlVMTCkgeworCQkvKiBzZWUgaWYgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0ICovCisJCW1vdW50cG9pbnQgPSBnZXRlbnYoUEVSRl9ERUJVR0ZTX0VOVklST05NRU5UKTsKKwkJLyogaWYgbm8gZW52aXJvbm1lbnQgdmFyaWFibGUsIHVzZSBkZWZhdWx0ICovCisJCWlmIChtb3VudHBvaW50ID09IE5VTEwpCisJCQltb3VudHBvaW50ID0gIi9zeXMva2VybmVsL2RlYnVnIjsKKwl9CisKKwkvKiBzYXZlIHRoZSBtb3VudHBvaW50ICovCisJc3RybmNweShkZWJ1Z2ZzX21vdW50cG9pbnQsIG1vdW50cG9pbnQsIHNpemVvZihkZWJ1Z2ZzX21vdW50cG9pbnQpKTsKKworCS8qIG1vdW50IGl0ICovCisJc25wcmludGYobW91bnRjbWQsIHNpemVvZihtb3VudGNtZCksCisJCSAiL2Jpbi9tb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgJXMiLCBtb3VudHBvaW50KTsKKwlyZXR1cm4gc3lzdGVtKG1vdW50Y21kKTsKK30KKworLyogdW1vdW50IHRoZSBkZWJ1Z2ZzICovCisKK2ludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKQoreworCWNoYXIgdW1vdW50Y21kWzEyOF07CisJaW50IHJldDsKKworCS8qIGlmIGl0IHdhcyBhbHJlYWR5IG1vdW50ZWQsIGxlYXZlIGl0ICovCisJaWYgKGRlYnVnZnNfcHJlbW91bnRlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhIHZhbGlkIG1vdW50IHBvaW50ICovCisJcmV0ID0gZGVidWdmc192YWxpZF9tb3VudHBvaW50KGRlYnVnZnNfbW91bnRwb2ludCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNucHJpbnRmKHVtb3VudGNtZCwgc2l6ZW9mKHVtb3VudGNtZCksCisJCSAiL2Jpbi91bW91bnQgJXMiLCBkZWJ1Z2ZzX21vdW50cG9pbnQpOworCXJldHVybiBzeXN0ZW0odW1vdW50Y21kKTsKK30KKworaW50IGRlYnVnZnNfd3JpdGUoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNoYXIgcGF0aFtNQVhfUEFUSCsxXTsKKwlpbnQgcmV0LCBjb3VudDsKKwlpbnQgZmQ7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIHBhdGggKi8KKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRlYnVnZnNfbW91bnRwb2ludCwgZW50cnkpOworCisJLyogdmVyaWZ5IHRoYXQgaXQgZXhpc3RzICovCisJcmV0ID0gZGVidWdmc192YWxpZF9lbnRyeShwYXRoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZ2V0IGhvdyBtYW55IGNoYXJzIHdlJ3JlIGdvaW5nIHRvIHdyaXRlICovCisJY291bnQgPSBzdHJsZW4odmFsdWUpOworCisJLyogb3BlbiB0aGUgZGVidWdmcyBlbnRyeSAqLworCWZkID0gb3BlbihwYXRoLCBPX1JEV1IpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtZXJybm87CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCS8qIHdyaXRlIGl0ICovCisJCXJldCA9IHdyaXRlKGZkLCB2YWx1ZSwgY291bnQpOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmIChyZXQgPT0gRUFHQUlOKQorCQkJCWNvbnRpbnVlOworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIC1lcnJubzsKKwkJfQorCQljb3VudCAtPSByZXQ7CisJfQorCisJLyogY2xvc2UgaXQgKi8KKwljbG9zZShmZCk7CisKKwkvKiByZXR1cm4gc3VjY2VzcyAqLworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCBhIGRlYnVnZnMgZW50cnkKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyByZWFkIG9yIGEgbmVnYXRpdmUgZXJybm8KKyAqLworaW50IGRlYnVnZnNfcmVhZChjb25zdCBjaGFyICplbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwljaGFyIHBhdGhbTUFYX1BBVEgrMV07CisJaW50IHJldDsKKwlpbnQgZmQ7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIHBhdGggKi8KKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRlYnVnZnNfbW91bnRwb2ludCwgZW50cnkpOworCisJLyogdmVyaWZ5IHRoYXQgaXQgZXhpc3RzICovCisJcmV0ID0gZGVidWdmc192YWxpZF9lbnRyeShwYXRoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogb3BlbiB0aGUgZGVidWdmcyBlbnRyeSAqLworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCWRvIHsKKwkJLyogcmVhZCBpdCAqLworCQlyZXQgPSByZWFkKGZkLCBidWZmZXIsIHNpemUpOworCQlpZiAocmV0ID09IDApIHsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiBFT0Y7CisJCX0KKwl9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVBR0FJTik7CisKKwkvKiBjbG9zZSBpdCAqLworCWNsb3NlKGZkKTsKKworCS8qIG1ha2UgKnN1cmUqIHRoZXJlJ3MgYSBudWxsIGNoYXJhY3RlciBhdCB0aGUgZW5kICovCisJYnVmZmVyW3JldF0gPSAnXDAnOworCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcnMgcmVhZCAqLworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2QxNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fREVCVUdGU19IX18KKyNkZWZpbmUgX19ERUJVR0ZTX0hfXworCisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisKKyNpZm5kZWYgTUFYX1BBVEgKKyMgZGVmaW5lIE1BWF9QQVRIIDI1NgorI2VuZGlmCisKKyNpZm5kZWYgU1RSCisjIGRlZmluZSBfU1RSKHgpICN4CisjIGRlZmluZSBTVFIoeCkgX1NUUih4KQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICpkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCh2b2lkKTsKK2V4dGVybiBpbnQgZGVidWdmc192YWxpZF9tb3VudHBvaW50KGNvbnN0IGNoYXIgKmRlYnVnZnMpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3ZhbGlkX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKTsKK2V4dGVybiBpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX3JlYWQoY29uc3QgY2hhciAqZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgZGVidWdmc19mb3JjZV9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCBkZWJ1Z2ZzX21ha2VfcGF0aChjb25zdCBjaGFyICplbGVtZW50LCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKKworI2VuZGlmIC8qIF9fREVCVUdGU19IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0Yjg5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0wLDAgKzEsMzEyIEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisKK3N0YXRpYyBwaWRfdCBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZF90IHBpZCwgaW50IGZ1bGwsCisJCQkJICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSkKK3sKKwlldmVudF90IGV2OworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgYmZbQlVGU0laXTsKKwlGSUxFICpmcDsKKwlzaXplX3Qgc2l6ZSA9IDA7CisJRElSICp0YXNrczsKKwlzdHJ1Y3QgZGlyZW50IGRpcmVudCwgKm5leHQ7CisJcGlkX3QgdGdpZCA9IDA7CisKKwlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIi9wcm9jLyVkL3N0YXR1cyIsIHBpZCk7CisKKwlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmIChmcCA9PSBOVUxMKSB7CitvdXRfcmFjZToKKwkJLyoKKwkJICogV2UgcmFjZWQgd2l0aCBhIHRhc2sgZXhpdGluZyAtIGp1c3QgcmV0dXJuOgorCQkgKi8KKwkJcHJfZGVidWcoImNvdWxkbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWVtc2V0KCZldi5jb21tLCAwLCBzaXplb2YoZXYuY29tbSkpOworCXdoaWxlICghZXYuY29tbS5jb21tWzBdIHx8ICFldi5jb21tLnBpZCkgeworCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKQorCQkJZ290byBvdXRfZmFpbHVyZTsKKworCQlpZiAobWVtY21wKGJmLCAiTmFtZToiLCA1KSA9PSAwKSB7CisJCQljaGFyICpuYW1lID0gYmYgKyA1OworCQkJd2hpbGUgKCpuYW1lICYmIGlzc3BhY2UoKm5hbWUpKQorCQkJCSsrbmFtZTsKKwkJCXNpemUgPSBzdHJsZW4obmFtZSkgLSAxOworCQkJbWVtY3B5KGV2LmNvbW0uY29tbSwgbmFtZSwgc2l6ZSsrKTsKKwkJfSBlbHNlIGlmIChtZW1jbXAoYmYsICJUZ2lkOiIsIDUpID09IDApIHsKKwkJCWNoYXIgKnRnaWRzID0gYmYgKyA1OworCQkJd2hpbGUgKCp0Z2lkcyAmJiBpc3NwYWNlKCp0Z2lkcykpCisJCQkJKyt0Z2lkczsKKwkJCXRnaWQgPSBldi5jb21tLnBpZCA9IGF0b2kodGdpZHMpOworCQl9CisJfQorCisJZXYuY29tbS5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX0NPTU07CisJc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih1NjQpKTsKKwlldi5jb21tLmhlYWRlci5zaXplID0gc2l6ZW9mKGV2LmNvbW0pIC0gKHNpemVvZihldi5jb21tLmNvbW0pIC0gc2l6ZSk7CisKKwlpZiAoIWZ1bGwpIHsKKwkJZXYuY29tbS50aWQgPSBwaWQ7CisKKwkJcHJvY2VzcygmZXYpOworCQlnb3RvIG91dF9mY2xvc2U7CisJfQorCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC90YXNrIiwgcGlkKTsKKworCXRhc2tzID0gb3BlbmRpcihmaWxlbmFtZSk7CisJaWYgKHRhc2tzID09IE5VTEwpCisJCWdvdG8gb3V0X3JhY2U7CisKKwl3aGlsZSAoIXJlYWRkaXJfcih0YXNrcywgJmRpcmVudCwgJm5leHQpICYmIG5leHQpIHsKKwkJY2hhciAqZW5kOworCQlwaWQgPSBzdHJ0b2woZGlyZW50LmRfbmFtZSwgJmVuZCwgMTApOworCQlpZiAoKmVuZCkKKwkJCWNvbnRpbnVlOworCisJCWV2LmNvbW0udGlkID0gcGlkOworCisJCXByb2Nlc3MoJmV2KTsKKwl9CisJY2xvc2VkaXIodGFza3MpOworCitvdXRfZmNsb3NlOgorCWZjbG9zZShmcCk7CisJcmV0dXJuIHRnaWQ7CisKK291dF9mYWlsdXJlOgorCXByX3dhcm5pbmcoImNvdWxkbid0IGdldCBDT01NIGFuZCBwZ2lkLCBtYWxmb3JtZWQgJXNcbiIsIGZpbGVuYW1lKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAorCQkJCQkgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQpKQoreworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCUZJTEUgKmZwOworCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC9tYXBzIiwgcGlkKTsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKGZwID09IE5VTEwpIHsKKwkJLyoKKwkJICogV2UgcmFjZWQgd2l0aCBhIHRhc2sgZXhpdGluZyAtIGp1c3QgcmV0dXJuOgorCQkgKi8KKwkJcHJfZGVidWcoImNvdWxkbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXdoaWxlICgxKSB7CisJCWNoYXIgYmZbQlVGU0laXSwgKnBiZiA9IGJmOworCQlldmVudF90IGV2ID0geworCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCisJCX07CisJCWludCBuOworCQlzaXplX3Qgc2l6ZTsKKwkJaWYgKGZnZXRzKGJmLCBzaXplb2YoYmYpLCBmcCkgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8qIDAwNDAwMDAwLTAwNDBjMDAwIHIteHAgMDAwMDAwMDAgZmQ6MDEgNDEwMzggIC9iaW4vY2F0ICovCisJCW4gPSBoZXgydTY0KHBiZiwgJmV2Lm1tYXAuc3RhcnQpOworCQlpZiAobiA8IDApCisJCQljb250aW51ZTsKKwkJcGJmICs9IG4gKyAxOworCQluID0gaGV4MnU2NChwYmYsICZldi5tbWFwLmxlbik7CisJCWlmIChuIDwgMCkKKwkJCWNvbnRpbnVlOworCQlwYmYgKz0gbiArIDM7CisJCWlmICgqcGJmID09ICd4JykgeyAvKiB2bV9leGVjICovCisJCQljaGFyICpleGVjbmFtZSA9IHN0cmNocihiZiwgJy8nKTsKKworCQkJLyogQ2F0Y2ggVkRTTyAqLworCQkJaWYgKGV4ZWNuYW1lID09IE5VTEwpCisJCQkJZXhlY25hbWUgPSBzdHJzdHIoYmYsICJbdmRzb10iKTsKKworCQkJaWYgKGV4ZWNuYW1lID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCXNpemUgPSBzdHJsZW4oZXhlY25hbWUpOworCQkJZXhlY25hbWVbc2l6ZSAtIDFdID0gJ1wwJzsgLyogUmVtb3ZlIFxuICovCisJCQltZW1jcHkoZXYubW1hcC5maWxlbmFtZSwgZXhlY25hbWUsIHNpemUpOworCQkJc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih1NjQpKTsKKwkJCWV2Lm1tYXAubGVuIC09IGV2Lm1tYXAuc3RhcnQ7CisJCQlldi5tbWFwLmhlYWRlci5zaXplID0gKHNpemVvZihldi5tbWFwKSAtCisJCQkJCSAgICAgICAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCQkJZXYubW1hcC5waWQgPSB0Z2lkOworCQkJZXYubW1hcC50aWQgPSBwaWQ7CisKKwkJCXByb2Nlc3MoJmV2KTsKKwkJfQorCX0KKworCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpCit7CisJcGlkX3QgdGdpZCA9IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkLCAxLCBwcm9jZXNzKTsKKwlpZiAodGdpZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhwaWQsIHRnaWQsIHByb2Nlc3MpOworfQorCit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQpKQoreworCURJUiAqcHJvYzsKKwlzdHJ1Y3QgZGlyZW50IGRpcmVudCwgKm5leHQ7CisKKwlwcm9jID0gb3BlbmRpcigiL3Byb2MiKTsKKworCXdoaWxlICghcmVhZGRpcl9yKHByb2MsICZkaXJlbnQsICZuZXh0KSAmJiBuZXh0KSB7CisJCWNoYXIgKmVuZDsKKwkJcGlkX3QgcGlkID0gc3RydG9sKGRpcmVudC5kX25hbWUsICZlbmQsIDEwKTsKKworCQlpZiAoKmVuZCkgLyogb25seSBpbnRlcmVzdGVkIGluIHByb3BlciBudW1lcmljYWwgZGlyZW50cyAqLworCQkJY29udGludWU7CisKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzcyk7CisJfQorCisJY2xvc2VkaXIocHJvYyk7Cit9CisKK2NoYXIgKmV2ZW50X19jd2Q7CitpbnQgIGV2ZW50X19jd2RsZW47CisKK3N0cnVjdCBldmVudHNfc3RhdHMgZXZlbnRfX3N0YXRzOworCitpbnQgZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudF90ICpzZWxmKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoc2VsZi0+Y29tbS5waWQpOworCisJZHVtcF9wcmludGYoIjogJXM6JWRcbiIsIHNlbGYtPmNvbW0uY29tbSwgc2VsZi0+Y29tbS5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCBzZWxmLT5jb21tLmNvbW0pKSB7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmKQoreworCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CisJZXZlbnRfX3N0YXRzLmxvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudF90ICpzZWxmKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoc2VsZi0+bW1hcC5waWQpOworCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAorCQkJCSAgIGV2ZW50X19jd2QsIGV2ZW50X19jd2RsZW4pOworCisJZHVtcF9wcmludGYoIiAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCisJCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsCisJCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAuc3RhcnQsCisJCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAubGVuLAorCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnBnb2ZmLAorCQkgICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisKKwlpZiAodGhyZWFkID09IE5VTEwgfHwgbWFwID09IE5VTEwpCisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwllbHNlCisJCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnRfdCAqc2VsZikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmZvcmsucGlkKTsKKwlzdHJ1Y3QgdGhyZWFkICpwYXJlbnQgPSB0aHJlYWRzX19maW5kbmV3KHNlbGYtPmZvcmsucHBpZCk7CisKKwlkdW1wX3ByaW50ZigiKCVkOiVkKTooJWQ6JWQpXG4iLCBzZWxmLT5mb3JrLnBpZCwgc2VsZi0+Zm9yay50aWQsCisJCSAgICBzZWxmLT5mb3JrLnBwaWQsIHNlbGYtPmZvcmsucHRpZCk7CisJLyoKKwkgKiBBIHRocmVhZCBjbG9uZSB3aWxsIGhhdmUgdGhlIHNhbWUgUElEIGZvciBib3RoIHBhcmVudCBhbmQgY2hpbGQuCisJICovCisJaWYgKHRocmVhZCA9PSBwYXJlbnQpCisJCXJldHVybiAwOworCisJaWYgKHNlbGYtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX0VYSVQpCisJCXJldHVybiAwOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHBhcmVudCA9PSBOVUxMIHx8CisJICAgIHRocmVhZF9fZm9yayh0aHJlYWQsIHBhcmVudCkgPCAwKSB7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU4IGNwdW1vZGUsCisJCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBhbC0+dGhyZWFkID0gc2VsZjsKKworCWFsLT5hZGRyID0gYWRkcjsKKworCWlmIChjcHVtb2RlICYgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpIHsKKwkJYWwtPmxldmVsID0gJ2snOworCQl0aHJlYWQgPSBrdGhyZWFkOworCX0gZWxzZSBpZiAoY3B1bW9kZSAmIFBFUkZfUkVDT1JEX01JU0NfVVNFUikKKwkJYWwtPmxldmVsID0gJy4nOworCWVsc2UgeworCQlhbC0+bGV2ZWwgPSAnSCc7CisJCWFsLT5tYXAgPSBOVUxMOworCQlhbC0+c3ltID0gTlVMTDsKKwkJcmV0dXJuOworCX0KK3RyeV9hZ2FpbjoKKwlhbC0+bWFwID0gdGhyZWFkX19maW5kX21hcCh0aHJlYWQsIHR5cGUsIGFsLT5hZGRyKTsKKwlpZiAoYWwtPm1hcCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgb3V0c2lkZSBvZiBhbGwga25vd24gbWFwcywgYW5kIGlzIGEgbmVnYXRpdmUKKwkJICogYWRkcmVzcywgdHJ5IHRvIGxvb2sgaXQgdXAgaW4gdGhlIGtlcm5lbCBkc28sIGFzIGl0IG1pZ2h0IGJlCisJCSAqIGEgdnN5c2NhbGwgb3IgdmRzbyAod2hpY2ggZXhlY3V0ZXMgaW4gdXNlci1tb2RlKS4KKwkJICoKKwkJICogWFhYIFRoaXMgaXMgbmFzdHksIHdlIHNob3VsZCBoYXZlIGEgc3ltYm9sIGxpc3QgaW4gdGhlCisJCSAqICJbdmRzb10iIGRzbywgYnV0IGZvciBub3cgbGV0cyB1c2UgdGhlIG9sZCB0cmljayBvZiBsb29raW5nCisJCSAqIGluIHRoZSB3aG9sZSBrZXJuZWwgc3ltYm9sIGxpc3QuCisJCSAqLworCQlpZiAoKGxvbmcgbG9uZylhbC0+YWRkciA8IDAgJiYgdGhyZWFkICE9IGt0aHJlYWQpIHsKKwkJCXRocmVhZCA9IGt0aHJlYWQ7CisJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJfQorCQlhbC0+c3ltID0gTlVMTDsKKwl9IGVsc2UgeworCQlhbC0+YWRkciA9IGFsLT5tYXAtPm1hcF9pcChhbC0+bWFwLCBhbC0+YWRkcik7CisJCWFsLT5zeW0gPSBtYXBfX2ZpbmRfc3ltYm9sKGFsLT5tYXAsIGFsLT5hZGRyLCBmaWx0ZXIpOworCX0KK30KKworaW50IGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJdTggY3B1bW9kZSA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhzZWxmLT5pcC5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKworCXRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHRocmVhZCwgY3B1bW9kZSwgTUFQX19GVU5DVElPTiwKKwkJCQkgICBzZWxmLT5pcC5pcCwgYWwsIGZpbHRlcik7CisJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwKKwkJICAgIGFsLT5tYXAgPyBhbC0+bWFwLT5kc28tPmxvbmdfbmFtZSA6CisJCQlhbC0+bGV2ZWwgPT0gJ0gnID8gIltoeXBlcnZpc29yXSIgOiAiPG5vdCBmb3VuZD4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggMmM5YzI2ZDYuLmE0Y2M4MTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC0xLDE0ICsxLDEwIEBACiAjaWZuZGVmIF9fUEVSRl9SRUNPUkRfSAogI2RlZmluZSBfX1BFUkZfUkVDT1JEX0gKKwogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi1lbnVtIHsKLQlTSE9XX0tFUk5FTAk9IDEsCi0JU0hPV19VU0VSCT0gMiwKLQlTSE9XX0hWCQk9IDQsCi19OworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogCiAvKgogICogUEVSRl9TQU1QTEVfSVAgfCBQRVJGX1NBTVBMRV9USUQgfCAqCkBAIC02NSw2ICs2MSwxMyBAQAogCXU2NCBhcnJheVtdOwogfTsKIAorI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCisKK3N0cnVjdCBidWlsZF9pZF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1OAkJCSBidWlsZF9pZFtBTElHTihCVUlMRF9JRF9TSVpFLCBzaXplb2YodTY0KSldOworCWNoYXIJCQkgZmlsZW5hbWVbXTsKK307CiAKIHR5cGVkZWYgdW5pb24gZXZlbnRfdW5pb24gewogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CkBAIC03NywxMiArODAsMzAgQEAKIAlzdHJ1Y3Qgc2FtcGxlX2V2ZW50CQlzYW1wbGU7CiB9IGV2ZW50X3Q7CiAKK3N0cnVjdCBldmVudHNfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgdG90YWw7CisJdW5zaWduZWQgbG9uZyBsb3N0OworfTsKKwordm9pZCBldmVudF9fcHJpbnRfdG90YWxzKHZvaWQpOworCitlbnVtIG1hcF90eXBlIHsKKwlNQVBfX0ZVTkNUSU9OID0gMCwKKworCU1BUF9fTlJfVFlQRVMsCit9OworCiBzdHJ1Y3QgbWFwIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJfTsKIAl1NjQJCQlzdGFydDsKIAl1NjQJCQllbmQ7CisJZW51bSBtYXBfdHlwZQkJdHlwZTsKIAl1NjQJCQlwZ29mZjsKIAl1NjQJCQkoKm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOworCXU2NAkJCSgqdW5tYXBfaXApKHN0cnVjdCBtYXAgKiwgdTY0KTsKIAlzdHJ1Y3QgZHNvCQkqZHNvOwogfTsKIApAQCAtOTEsMTQgKzExMiw0OCBAQAogCXJldHVybiBpcCAtIG1hcC0+c3RhcnQgKyBtYXAtPnBnb2ZmOwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCB2ZHNvX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwIF9fdXNlZCwgdTY0IGlwKQorc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCiB7CiAJcmV0dXJuIGlwOwogfQogCi1zdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7CitzdHJ1Y3Qgc3ltYm9sOworCit0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCisJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOworc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAorCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Cit2b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOwogc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKIGludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7CiBzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwgdTY0IGFkZHIsCisJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Cit2b2lkIG1hcF9fZml4dXBfc3RhcnQoc3RydWN0IG1hcCAqc2VsZik7Cit2b2lkIG1hcF9fZml4dXBfZW5kKHN0cnVjdCBtYXAgKnNlbGYpOwogCi0jZW5kaWYKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCkpOwordm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50KSk7CisKK2V4dGVybiBjaGFyICpldmVudF9fY3dkOworZXh0ZXJuIGludCAgZXZlbnRfX2N3ZGxlbjsKK2V4dGVybiBzdHJ1Y3QgZXZlbnRzX3N0YXRzIGV2ZW50X19zdGF0czsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGV2ZW50X190b3RhbFtQRVJGX1JFQ09SRF9NQVhdOworCitpbnQgZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudF90ICpzZWxmKTsKK2ludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYpOworaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZik7CitpbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmKTsKKworc3RydWN0IGFkZHJfbG9jYXRpb247CitpbnQgZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CisKKyNlbmRpZiAvKiBfX1BFUkZfUkVDT1JEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9leGVjX2NtZC5oIGIvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmgKaW5kZXggZWZmZTI1ZS4uMzE2NDdhYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIFBFUkZfRVhFQ19DTURfSAotI2RlZmluZSBQRVJGX0VYRUNfQ01EX0gKKyNpZm5kZWYgX19QRVJGX0VYRUNfQ01EX0gKKyNkZWZpbmUgX19QRVJGX0VYRUNfQ01EX0gKIAogZXh0ZXJuIHZvaWQgcGVyZl9zZXRfYXJndl9leGVjX3BhdGgoY29uc3QgY2hhciAqZXhlY19wYXRoKTsKIGV4dGVybiBjb25zdCBjaGFyICpwZXJmX2V4dHJhY3RfYXJndjBfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKQEAgLTEwLDQgKzEwLDQgQEAKIGV4dGVybiBpbnQgZXhlY2xfcGVyZl9jbWQoY29uc3QgY2hhciAqY21kLCAuLi4pOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnN5c3RlbV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogCi0jZW5kaWYgLyogUEVSRl9FWEVDX0NNRF9IICovCisjZW5kaWYgLyogX19QRVJGX0VYRUNfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCBlMzA2ODU3Li40ODA1ZTZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0yLDkgKzIsMTUgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJoZWFkZXIuaCIKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJkYXRhX21hcC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCiAKIC8qCiAgKiBDcmVhdGUgbmV3IHBlcmYuZGF0YSBoZWFkZXIgYXR0cmlidXRlOgpAQCAtMTMsMzIgKzE5LDQzIEBACiB7CiAJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CiAKLQlpZiAoIXNlbGYpCi0JCWRpZSgibm9tZW0iKTsKLQotCXNlbGYtPmF0dHIgPSAqYXR0cjsKLQlzZWxmLT5pZHMgPSAwOwotCXNlbGYtPnNpemUgPSAxOwotCXNlbGYtPmlkID0gbWFsbG9jKHNpemVvZih1NjQpKTsKLQotCWlmICghc2VsZi0+aWQpCi0JCWRpZSgibm9tZW0iKTsKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCXNlbGYtPmF0dHIgPSAqYXR0cjsKKwkJc2VsZi0+aWRzICA9IDA7CisJCXNlbGYtPnNpemUgPSAxOworCQlzZWxmLT5pZCAgID0gbWFsbG9jKHNpemVvZih1NjQpKTsKKwkJaWYgKHNlbGYtPmlkID09IE5VTEwpIHsKKwkJCWZyZWUoc2VsZik7CisJCQlzZWxmID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVybiBzZWxmOwogfQogCi12b2lkIHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiwgdTY0IGlkKQordm9pZCBwZXJmX2hlYWRlcl9hdHRyX19kZWxldGUoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYpCit7CisJZnJlZShzZWxmLT5pZCk7CisJZnJlZShzZWxmKTsKK30KKworaW50IHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiwgdTY0IGlkKQogewogCWludCBwb3MgPSBzZWxmLT5pZHM7CiAKIAlzZWxmLT5pZHMrKzsKIAlpZiAoc2VsZi0+aWRzID4gc2VsZi0+c2l6ZSkgewotCQlzZWxmLT5zaXplICo9IDI7Ci0JCXNlbGYtPmlkID0gcmVhbGxvYyhzZWxmLT5pZCwgc2VsZi0+c2l6ZSAqIHNpemVvZih1NjQpKTsKLQkJaWYgKCFzZWxmLT5pZCkKLQkJCWRpZSgibm9tZW0iKTsKKwkJaW50IG5zaXplID0gc2VsZi0+c2l6ZSAqIDI7CisJCXU2NCAqbmlkID0gcmVhbGxvYyhzZWxmLT5pZCwgbnNpemUgKiBzaXplb2YodTY0KSk7CisKKwkJaWYgKG5pZCA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCXNlbGYtPnNpemUgPSBuc2l6ZTsKKwkJc2VsZi0+aWQgPSBuaWQ7CiAJfQogCXNlbGYtPmlkW3Bvc10gPSBpZDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQ2LDQyICs2Myw1MiBAQAogICovCiBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19uZXcodm9pZCkKIHsKLQlzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisJc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikpOwogCi0JaWYgKCFzZWxmKQotCQlkaWUoIm5vbWVtIik7CisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5zaXplID0gMTsKKwkJc2VsZi0+YXR0ciA9IG1hbGxvYyhzaXplb2Yodm9pZCAqKSk7CiAKLQlzZWxmLT5mcm96ZW4gPSAwOwotCi0Jc2VsZi0+YXR0cnMgPSAwOwotCXNlbGYtPnNpemUgPSAxOwotCXNlbGYtPmF0dHIgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOwotCi0JaWYgKCFzZWxmLT5hdHRyKQotCQlkaWUoIm5vbWVtIik7Ci0KLQlzZWxmLT5kYXRhX29mZnNldCA9IDA7Ci0Jc2VsZi0+ZGF0YV9zaXplID0gMDsKKwkJaWYgKHNlbGYtPmF0dHIgPT0gTlVMTCkgeworCQkJZnJlZShzZWxmKTsKKwkJCXNlbGYgPSBOVUxMOworCQl9CisJfQogCiAJcmV0dXJuIHNlbGY7CiB9CiAKLXZvaWQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKLQkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyKQordm9pZCBwZXJmX2hlYWRlcl9fZGVsZXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZikKIHsKLQlpbnQgcG9zID0gc2VsZi0+YXR0cnM7CisJaW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgc2VsZi0+YXR0cnM7ICsraSkKKwkJcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKHNlbGYtPmF0dHJbaV0pOworCisJZnJlZShzZWxmLT5hdHRyKTsKKwlmcmVlKHNlbGYpOworfQorCitpbnQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKKwkJCSAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpCit7CiAJaWYgKHNlbGYtPmZyb3plbikKLQkJZGllKCJmcm96ZW4iKTsKKwkJcmV0dXJuIC0xOwogCi0Jc2VsZi0+YXR0cnMrKzsKLQlpZiAoc2VsZi0+YXR0cnMgPiBzZWxmLT5zaXplKSB7Ci0JCXNlbGYtPnNpemUgKj0gMjsKLQkJc2VsZi0+YXR0ciA9IHJlYWxsb2Moc2VsZi0+YXR0ciwgc2VsZi0+c2l6ZSAqIHNpemVvZih2b2lkICopKTsKLQkJaWYgKCFzZWxmLT5hdHRyKQotCQkJZGllKCJub21lbSIpOworCWlmIChzZWxmLT5hdHRycyA9PSBzZWxmLT5zaXplKSB7CisJCWludCBuc2l6ZSA9IHNlbGYtPnNpemUgKiAyOworCQlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqKm5hdHRyOworCisJCW5hdHRyID0gcmVhbGxvYyhzZWxmLT5hdHRyLCBuc2l6ZSAqIHNpemVvZih2b2lkICopKTsKKwkJaWYgKG5hdHRyID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisKKwkJc2VsZi0+c2l6ZSA9IG5zaXplOworCQlzZWxmLT5hdHRyID0gbmF0dHI7CiAJfQotCXNlbGYtPmF0dHJbcG9zXSA9IGF0dHI7CisKKwlzZWxmLT5hdHRyW3NlbGYtPmF0dHJzKytdID0gYXR0cjsKKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSBNQVhfRVZFTlRfTkFNRSA2NApAQCAtOTcsNyArMTI0LDcgQEAKIHZvaWQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKQogewogCWlmIChzdHJsZW4obmFtZSkgPiBNQVhfRVZFTlRfTkFNRSkKLQkJcHJpbnRmKCJFdmVudCAlcyB3aWxsIGJlIHRydW5jYXRlZFxuIiwgbmFtZSk7CisJCXByX3dhcm5pbmcoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKIAogCWlmICghZXZlbnRzKSB7CiAJCWV2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwpAQCAtMTI4LDQ0ICsxNTUsMTM3IEBACiAKICNkZWZpbmUgUEVSRl9NQUdJQwkoKih1NjQgKilfX3BlcmZfbWFnaWMpCiAKLXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiB7Ci0JdTY0IG9mZnNldDsKLQl1NjQgc2l6ZTsKLX07Ci0KIHN0cnVjdCBwZXJmX2ZpbGVfYXR0ciB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0cglhdHRyOwogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglpZHM7CiB9OwogCi1zdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciB7Ci0JdTY0CQkJCW1hZ2ljOwotCXU2NAkJCQlzaXplOwotCXU2NAkJCQlhdHRyX3NpemU7Ci0Jc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uCWF0dHJzOwotCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglkYXRhOwotCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglldmVudF90eXBlczsKLX07Cit2b2lkIHBlcmZfaGVhZGVyX19zZXRfZmVhdChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZWF0KQoreworCXNldF9iaXQoZmVhdCwgc2VsZi0+YWRkc19mZWF0dXJlcyk7Cit9CiAKLXN0YXRpYyB2b2lkIGRvX3dyaXRlKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK2Jvb2wgcGVyZl9oZWFkZXJfX2hhc19mZWF0KGNvbnN0IHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpCit7CisJcmV0dXJuIHRlc3RfYml0KGZlYXQsIHNlbGYtPmFkZHNfZmVhdHVyZXMpOworfQorCitzdGF0aWMgaW50IGRvX3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAl3aGlsZSAoc2l6ZSkgewogCQlpbnQgcmV0ID0gd3JpdGUoZmQsIGJ1Ziwgc2l6ZSk7CiAKIAkJaWYgKHJldCA8IDApCi0JCQlkaWUoImZhaWxlZCB0byB3cml0ZSIpOworCQkJcmV0dXJuIC1lcnJubzsKIAogCQlzaXplIC09IHJldDsKIAkJYnVmICs9IHJldDsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBwZXJmX2hlYWRlcl9fd3JpdGUoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCitzdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBpbnQgZmQpCit7CisJc3RydWN0IGRzbyAqcG9zOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJaW50IGVycjsKKwkJc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGI7CisJCXNpemVfdCBsZW47CisKKwkJaWYgKCFwb3MtPmhhc19idWlsZF9pZCkKKwkJCWNvbnRpbnVlOworCQlsZW4gPSBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxOworCQlsZW4gPSBBTElHTihsZW4sIDY0KTsKKwkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOworCQltZW1jcHkoJmIuYnVpbGRfaWQsIHBvcy0+YnVpbGRfaWQsIHNpemVvZihwb3MtPmJ1aWxkX2lkKSk7CisJCWIuaGVhZGVyLnNpemUgPSBzaXplb2YoYikgKyBsZW47CisJCWVyciA9IGRvX3dyaXRlKGZkLCAmYiwgc2l6ZW9mKGIpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBkb193cml0ZShmZCwgcG9zLT5sb25nX25hbWUsIGxlbik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKGludCBmZCkKK3sKKwlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsIGZkKTsKKwlpZiAoZXJyID09IDApCisJCWVyciA9IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZSgmZHNvc19fdXNlciwgZmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9oZWFkZXJfX2FkZHNfd3JpdGUoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCit7CisJaW50IG5yX3NlY3Rpb25zOworCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqZmVhdF9zZWM7CisJaW50IHNlY19zaXplOworCXU2NCBzZWNfc3RhcnQ7CisJaW50IGlkeCA9IDAsIGVycjsKKworCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcygpKQorCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoc2VsZiwgSEVBREVSX0JVSUxEX0lEKTsKKworCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKKwlpZiAoIW5yX3NlY3Rpb25zKQorCQlyZXR1cm4gMDsKKworCWZlYXRfc2VjID0gY2FsbG9jKHNpemVvZigqZmVhdF9zZWMpLCBucl9zZWN0aW9ucyk7CisJaWYgKGZlYXRfc2VjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc2VjX3NpemUgPSBzaXplb2YoKmZlYXRfc2VjKSAqIG5yX3NlY3Rpb25zOworCisJc2VjX3N0YXJ0ID0gc2VsZi0+ZGF0YV9vZmZzZXQgKyBzZWxmLT5kYXRhX3NpemU7CisJbHNlZWsoZmQsIHNlY19zdGFydCArIHNlY19zaXplLCBTRUVLX1NFVCk7CisKKwlpZiAocGVyZl9oZWFkZXJfX2hhc19mZWF0KHNlbGYsIEhFQURFUl9UUkFDRV9JTkZPKSkgeworCQlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnRyYWNlX3NlYzsKKworCQl0cmFjZV9zZWMgPSAmZmVhdF9zZWNbaWR4KytdOworCisJCS8qIFdyaXRlIHRyYWNlIGluZm8gKi8KKwkJdHJhY2Vfc2VjLT5vZmZzZXQgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOworCQlyZWFkX3RyYWNpbmdfZGF0YShmZCwgYXR0cnMsIG5yX2NvdW50ZXJzKTsKKwkJdHJhY2Vfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtIHRyYWNlX3NlYy0+b2Zmc2V0OworCX0KKworCisJaWYgKHBlcmZfaGVhZGVyX19oYXNfZmVhdChzZWxmLCBIRUFERVJfQlVJTERfSUQpKSB7CisJCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqYnVpbGRpZF9zZWM7CisKKwkJYnVpbGRpZF9zZWMgPSAmZmVhdF9zZWNbaWR4KytdOworCisJCS8qIFdyaXRlIGJ1aWxkLWlkcyAqLworCQlidWlsZGlkX3NlYy0+b2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKwkJZXJyID0gZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShmZCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIGJ1aWxkaWQgdGFibGVcbiIpOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLSBidWlsZGlkX3NlYy0+b2Zmc2V0OworCX0KKworCWxzZWVrKGZkLCBzZWNfc3RhcnQsIFNFRUtfU0VUKTsKKwllcnIgPSBkb193cml0ZShmZCwgZmVhdF9zZWMsIHNlY19zaXplKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBmZWF0dXJlIHNlY3Rpb25cbiIpOworb3V0X2ZyZWU6CisJZnJlZShmZWF0X3NlYyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBlcmZfaGVhZGVyX193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwgYm9vbCBhdF9leGl0KQogewogCXN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyIGZfaGVhZGVyOwogCXN0cnVjdCBwZXJmX2ZpbGVfYXR0ciAgIGZfYXR0cjsKIAlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0cgkqYXR0cjsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCiAJbHNlZWsoZmQsIHNpemVvZihmX2hlYWRlciksIFNFRUtfU0VUKTsKIApAQCAtMTc0LDcgKzI5NCwxMSBAQAogCQlhdHRyID0gc2VsZi0+YXR0cltpXTsKIAogCQlhdHRyLT5pZF9vZmZzZXQgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwotCQlkb193cml0ZShmZCwgYXR0ci0+aWQsIGF0dHItPmlkcyAqIHNpemVvZih1NjQpKTsKKwkJZXJyID0gZG9fd3JpdGUoZmQsIGF0dHItPmlkLCBhdHRyLT5pZHMgKiBzaXplb2YodTY0KSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIHBlcmYgaGVhZGVyXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIApAQCAtMTkwLDE3ICszMTQsMzEgQEAKIAkJCQkuc2l6ZSAgID0gYXR0ci0+aWRzICogc2l6ZW9mKHU2NCksCiAJCQl9CiAJCX07Ci0JCWRvX3dyaXRlKGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSk7CisJCWVyciA9IGRvX3dyaXRlKGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHdyaXRlIHBlcmYgaGVhZGVyIGF0dHJpYnV0ZVxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJc2VsZi0+ZXZlbnRfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIAlzZWxmLT5ldmVudF9zaXplID0gZXZlbnRfY291bnQgKiBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSk7Ci0JaWYgKGV2ZW50cykKLQkJZG9fd3JpdGUoZmQsIGV2ZW50cywgc2VsZi0+ZXZlbnRfc2l6ZSk7Ci0KKwlpZiAoZXZlbnRzKSB7CisJCWVyciA9IGRvX3dyaXRlKGZkLCBldmVudHMsIHNlbGYtPmV2ZW50X3NpemUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBwZXJmIGhlYWRlciBldmVudHNcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KIAogCXNlbGYtPmRhdGFfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKIAorCWlmIChhdF9leGl0KSB7CisJCWVyciA9IHBlcmZfaGVhZGVyX19hZGRzX3dyaXRlKHNlbGYsIGZkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWZfaGVhZGVyID0gKHN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyKXsKIAkJLm1hZ2ljCSAgID0gUEVSRl9NQUdJQywKIAkJLnNpemUJICAgPSBzaXplb2YoZl9oZWFkZXIpLApAQCAtMjE5LDExICszNTcsMTggQEAKIAkJfSwKIAl9OwogCisJbWVtY3B5KCZmX2hlYWRlci5hZGRzX2ZlYXR1cmVzLCAmc2VsZi0+YWRkc19mZWF0dXJlcywgc2l6ZW9mKHNlbGYtPmFkZHNfZmVhdHVyZXMpKTsKKwogCWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7Ci0JZG9fd3JpdGUoZmQsICZmX2hlYWRlciwgc2l6ZW9mKGZfaGVhZGVyKSk7CisJZXJyID0gZG9fd3JpdGUoZmQsICZmX2hlYWRlciwgc2l6ZW9mKGZfaGVhZGVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJfZGVidWcoImZhaWxlZCB0byB3cml0ZSBwZXJmIGhlYWRlclxuIik7CisJCXJldHVybiBlcnI7CisJfQogCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZSwgU0VFS19TRVQpOwogCiAJc2VsZi0+ZnJvemVuID0gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZG9fcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC0yNDEsMjIgKzM4NiwxMDkgQEAKIAl9CiB9CiAKLXN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX3JlYWQoaW50IGZkKQoraW50IHBlcmZfaGVhZGVyX19wcm9jZXNzX3NlY3Rpb25zKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkLAorCQkJCSAgaW50ICgqcHJvY2Vzcykoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAorCQkJCQkJIGludCBmZWF0LCBpbnQgZmQpKQogewotCXN0cnVjdCBwZXJmX2hlYWRlcgkqc2VsZiA9IHBlcmZfaGVhZGVyX19uZXcoKTsKKwlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKmZlYXRfc2VjOworCWludCBucl9zZWN0aW9uczsKKwlpbnQgc2VjX3NpemU7CisJaW50IGlkeCA9IDA7CisJaW50IGVyciA9IDAsIGZlYXQgPSAxOworCisJbnJfc2VjdGlvbnMgPSBiaXRtYXBfd2VpZ2h0KHNlbGYtPmFkZHNfZmVhdHVyZXMsIEhFQURFUl9GRUFUX0JJVFMpOworCWlmICghbnJfc2VjdGlvbnMpCisJCXJldHVybiAwOworCisJZmVhdF9zZWMgPSBjYWxsb2Moc2l6ZW9mKCpmZWF0X3NlYyksIG5yX3NlY3Rpb25zKTsKKwlpZiAoIWZlYXRfc2VjKQorCQlyZXR1cm4gLTE7CisKKwlzZWNfc2l6ZSA9IHNpemVvZigqZmVhdF9zZWMpICogbnJfc2VjdGlvbnM7CisKKwlsc2VlayhmZCwgc2VsZi0+ZGF0YV9vZmZzZXQgKyBzZWxmLT5kYXRhX3NpemUsIFNFRUtfU0VUKTsKKworCWRvX3JlYWQoZmQsIGZlYXRfc2VjLCBzZWNfc2l6ZSk7CisKKwl3aGlsZSAoaWR4IDwgbnJfc2VjdGlvbnMgJiYgZmVhdCA8IEhFQURFUl9MQVNUX0ZFQVRVUkUpIHsKKwkJaWYgKHBlcmZfaGVhZGVyX19oYXNfZmVhdChzZWxmLCBmZWF0KSkgeworCQkJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWMgPSAmZmVhdF9zZWNbaWR4KytdOworCisJCQllcnIgPSBwcm9jZXNzKHNlYywgZmVhdCwgZmQpOworCQkJaWYgKGVyciA8IDApCisJCQkJYnJlYWs7CisJCX0KKwkJKytmZWF0OworCX0KKworCWZyZWUoZmVhdF9zZWMpOworCXJldHVybiBlcnI7Cit9OworCitpbnQgcGVyZl9maWxlX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciAqc2VsZiwKKwkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsIGludCBmZCkKK3sKKwlsc2VlayhmZCwgMCwgU0VFS19TRVQpOworCWRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYtPm1hZ2ljICAgICAhPSBQRVJGX01BR0lDIHx8CisJICAgIHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNlbGYtPnNpemUgIT0gc2l6ZW9mKCpzZWxmKSkgeworCQkvKiBTdXBwb3J0IHRoZSBwcmV2aW91cyBmb3JtYXQgKi8KKwkJaWYgKHNlbGYtPnNpemUgPT0gb2Zmc2V0b2YodHlwZW9mKCpzZWxmKSwgYWRkc19mZWF0dXJlcykpCisJCQliaXRtYXBfemVybyhzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweSgmcGgtPmFkZHNfZmVhdHVyZXMsICZzZWxmLT5hZGRzX2ZlYXR1cmVzLAorCSAgICAgICBzaXplb2Yoc2VsZi0+YWRkc19mZWF0dXJlcykpOworCisJcGgtPmV2ZW50X29mZnNldCA9IHNlbGYtPmV2ZW50X3R5cGVzLm9mZnNldDsKKwlwaC0+ZXZlbnRfc2l6ZQkgPSBzZWxmLT5ldmVudF90eXBlcy5zaXplOworCXBoLT5kYXRhX29mZnNldAkgPSBzZWxmLT5kYXRhLm9mZnNldDsKKwlwaC0+ZGF0YV9zaXplCSA9IHNlbGYtPmRhdGEuc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2VzcyhzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJICAgICAgaW50IGZlYXQsIGludCBmZCkKK3sKKwlpZiAobHNlZWsoZmQsIHNlbGYtPm9mZnNldCwgU0VFS19TRVQpIDwgMCkgeworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxzZWVrIHRvICVMZCBvZmZzZXQgZm9yIGZlYXR1cmUgJWQsICIKKwkJCSAiY29udGludWluZy4uLlxuIiwgc2VsZi0+b2Zmc2V0LCBmZWF0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChmZWF0KSB7CisJY2FzZSBIRUFERVJfVFJBQ0VfSU5GTzoKKwkJdHJhY2VfcmVwb3J0KGZkKTsKKwkJYnJlYWs7CisKKwljYXNlIEhFQURFUl9CVUlMRF9JRDoKKwkJaWYgKHBlcmZfaGVhZGVyX19yZWFkX2J1aWxkX2lkcyhmZCwgc2VsZi0+b2Zmc2V0LCBzZWxmLT5zaXplKSkKKwkJCXByX2RlYnVnKCJGYWlsZWQgdG8gcmVhZCBidWlsZGlkcywgY29udGludWluZy4uLlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ1bmtub3duIGZlYXR1cmUgJWQsIGNvbnRpbnVpbmcuLi5cbiIsIGZlYXQpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcGVyZl9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCit7CiAJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CiAJc3RydWN0IHBlcmZfZmlsZV9hdHRyCWZfYXR0cjsKIAl1NjQJCQlmX2lkOwotCiAJaW50IG5yX2F0dHJzLCBucl9pZHMsIGksIGo7CiAKLQlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCWRvX3JlYWQoZmQsICZmX2hlYWRlciwgc2l6ZW9mKGZfaGVhZGVyKSk7Ci0KLQlpZiAoZl9oZWFkZXIubWFnaWMJIT0gUEVSRl9NQUdJQwkJfHwKLQkgICAgZl9oZWFkZXIuc2l6ZQkhPSBzaXplb2YoZl9oZWFkZXIpCXx8Ci0JICAgIGZfaGVhZGVyLmF0dHJfc2l6ZQkhPSBzaXplb2YoZl9hdHRyKSkKLQkJZGllKCJpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQiKTsKKwlpZiAocGVyZl9maWxlX2hlYWRlcl9fcmVhZCgmZl9oZWFkZXIsIHNlbGYsIGZkKSA8IDApIHsKKwkJcHJfZGVidWcoImluY29tcGF0aWJsZSBmaWxlIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCW5yX2F0dHJzID0gZl9oZWFkZXIuYXR0cnMuc2l6ZSAvIHNpemVvZihmX2F0dHIpOwogCWxzZWVrKGZkLCBmX2hlYWRlci5hdHRycy5vZmZzZXQsIFNFRUtfU0VUKTsKQEAgLTI2OSw2ICs1MDEsOCBAQAogCQl0bXAgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwogCiAJCWF0dHIgPSBwZXJmX2hlYWRlcl9hdHRyX19uZXcoJmZfYXR0ci5hdHRyKTsKKwkJaWYgKGF0dHIgPT0gTlVMTCkKKwkJCSByZXR1cm4gLUVOT01FTTsKIAogCQlucl9pZHMgPSBmX2F0dHIuaWRzLnNpemUgLyBzaXplb2YodTY0KTsKIAkJbHNlZWsoZmQsIGZfYXR0ci5pZHMub2Zmc2V0LCBTRUVLX1NFVCk7CkBAIC0yNzYsMzEgKzUxMCwzNCBAQAogCQlmb3IgKGogPSAwOyBqIDwgbnJfaWRzOyBqKyspIHsKIAkJCWRvX3JlYWQoZmQsICZmX2lkLCBzaXplb2YoZl9pZCkpOwogCi0JCQlwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoYXR0ciwgZl9pZCk7CisJCQlpZiAocGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKGF0dHIsIGZfaWQpIDwgMCkgeworCQkJCXBlcmZfaGVhZGVyX2F0dHJfX2RlbGV0ZShhdHRyKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KIAkJfQotCQlwZXJmX2hlYWRlcl9fYWRkX2F0dHIoc2VsZiwgYXR0cik7CisJCWlmIChwZXJmX2hlYWRlcl9fYWRkX2F0dHIoc2VsZiwgYXR0cikgPCAwKSB7CisJCQlwZXJmX2hlYWRlcl9hdHRyX19kZWxldGUoYXR0cik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCiAJCWxzZWVrKGZkLCB0bXAsIFNFRUtfU0VUKTsKIAl9CiAKIAlpZiAoZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSkgewogCQlsc2VlayhmZCwgZl9oZWFkZXIuZXZlbnRfdHlwZXMub2Zmc2V0LCBTRUVLX1NFVCk7CiAJCWV2ZW50cyA9IG1hbGxvYyhmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKTsKLQkJaWYgKCFldmVudHMpCi0JCQlkaWUoIm5vbWVtIik7CisJCWlmIChldmVudHMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlkb19yZWFkKGZkLCBldmVudHMsIGZfaGVhZGVyLmV2ZW50X3R5cGVzLnNpemUpOwogCQlldmVudF9jb3VudCA9ICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplIC8gc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOwogCX0KLQlzZWxmLT5ldmVudF9vZmZzZXQgPSBmX2hlYWRlci5ldmVudF90eXBlcy5vZmZzZXQ7Ci0Jc2VsZi0+ZXZlbnRfc2l6ZSAgID0gZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZTsKIAotCXNlbGYtPmRhdGFfb2Zmc2V0ID0gZl9oZWFkZXIuZGF0YS5vZmZzZXQ7Ci0Jc2VsZi0+ZGF0YV9zaXplICAgPSBmX2hlYWRlci5kYXRhLnNpemU7CisJcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc2VsZiwgZmQsIHBlcmZfZmlsZV9zZWN0aW9uX19wcm9jZXNzKTsKIAogCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCwgU0VFS19TRVQpOwogCiAJc2VsZi0+ZnJvemVuID0gMTsKLQotCXJldHVybiBzZWxmOworCXJldHVybiAwOwogfQogCiB1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCmluZGV4IGEwNzYxYmMuLmQxZGJlMmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKQEAgLTEsMTAgKzEsMTMgQEAKLSNpZm5kZWYgX1BFUkZfSEVBREVSX0gKLSNkZWZpbmUgX1BFUkZfSEVBREVSX0gKKyNpZm5kZWYgX19QRVJGX0hFQURFUl9ICisjZGVmaW5lIF9fUEVSRl9IRUFERVJfSAogCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgInR5cGVzLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKwogc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAlpbnQgaWRzLCBzaXplOwpAQCAtMTIsMzYgKzE1LDcxIEBACiAJb2ZmX3QgaWRfb2Zmc2V0OwogfTsKIAotc3RydWN0IHBlcmZfaGVhZGVyIHsKLQlpbnQgZnJvemVuOwotCWludCBhdHRycywgc2l6ZTsKLQlzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqKmF0dHI7Ci0JczY0IGF0dHJfb2Zmc2V0OwotCXU2NCBkYXRhX29mZnNldDsKLQl1NjQgZGF0YV9zaXplOwotCXU2NCBldmVudF9vZmZzZXQ7Ci0JdTY0IGV2ZW50X3NpemU7CitlbnVtIHsKKwlIRUFERVJfVFJBQ0VfSU5GTyA9IDEsCisJSEVBREVSX0JVSUxEX0lELAorCUhFQURFUl9MQVNUX0ZFQVRVUkUsCiB9OwogCi1zdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19yZWFkKGludCBmZCk7Ci12b2lkIHBlcmZfaGVhZGVyX193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCk7CisjZGVmaW5lIEhFQURFUl9GRUFUX0JJVFMJCQkyNTYKIAotdm9pZCBwZXJmX2hlYWRlcl9fYWRkX2F0dHIoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAotCQkJICAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOworc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uIHsKKwl1NjQgb2Zmc2V0OworCXU2NCBzaXplOworfTsKKworc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgeworCXU2NAkJCQltYWdpYzsKKwl1NjQJCQkJc2l6ZTsKKwl1NjQJCQkJYXR0cl9zaXplOworCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbglhdHRyczsKKwlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JZGF0YTsKKwlzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24JZXZlbnRfdHlwZXM7CisJREVDTEFSRV9CSVRNQVAoYWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7Cit9OworCitzdHJ1Y3QgcGVyZl9oZWFkZXI7CisKK2ludCBwZXJmX2ZpbGVfaGVhZGVyX19yZWFkKHN0cnVjdCBwZXJmX2ZpbGVfaGVhZGVyICpzZWxmLAorCQkJICAgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwgaW50IGZkKTsKKworc3RydWN0IHBlcmZfaGVhZGVyIHsKKwlpbnQJCQlmcm96ZW47CisJaW50CQkJYXR0cnMsIHNpemU7CisJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKiphdHRyOworCXM2NAkJCWF0dHJfb2Zmc2V0OworCXU2NAkJCWRhdGFfb2Zmc2V0OworCXU2NAkJCWRhdGFfc2l6ZTsKKwl1NjQJCQlldmVudF9vZmZzZXQ7CisJdTY0CQkJZXZlbnRfc2l6ZTsKKwlERUNMQVJFX0JJVE1BUChhZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKK307CisKK3N0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX25ldyh2b2lkKTsKK3ZvaWQgcGVyZl9oZWFkZXJfX2RlbGV0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYpOworCitpbnQgcGVyZl9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpOworaW50IHBlcmZfaGVhZGVyX193cml0ZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwgYm9vbCBhdF9leGl0KTsKKworaW50IHBlcmZfaGVhZGVyX19hZGRfYXR0cihzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkgIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyKTsKIAogdm9pZCBwZXJmX2hlYWRlcl9fcHVzaF9ldmVudCh1NjQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogY2hhciAqcGVyZl9oZWFkZXJfX2ZpbmRfZXZlbnQodTY0IGlkKTsKIAorc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnBlcmZfaGVhZGVyX2F0dHJfX25ldyhzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKTsKK3ZvaWQgcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmKTsKIAotc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKgotcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpOwotdm9pZCBwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKnNlbGYsIHU2NCBpZCk7CitpbnQgcGVyZl9oZWFkZXJfYXR0cl9fYWRkX2lkKHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpzZWxmLCB1NjQgaWQpOwogCiB1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKgogcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQsIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKK3ZvaWQgcGVyZl9oZWFkZXJfX3NldF9mZWF0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpOworYm9vbCBwZXJmX2hlYWRlcl9faGFzX2ZlYXQoY29uc3Qgc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmVhdCk7CiAKK2ludCBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwKKwkJCQkgIGludCAoKnByb2Nlc3MpKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKKwkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSk7CiAKLXN0cnVjdCBwZXJmX2hlYWRlciAqcGVyZl9oZWFkZXJfX25ldyh2b2lkKTsKLQotI2VuZGlmIC8qIF9QRVJGX0hFQURFUl9IICovCisjZW5kaWYgLyogX19QRVJGX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVscC5oIGIvdG9vbHMvcGVyZi91dGlsL2hlbHAuaAppbmRleCA3MTI4NzgzLi43ZjVjNmRlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVscC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWxwLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIEhFTFBfSAotI2RlZmluZSBIRUxQX0gKKyNpZm5kZWYgX19QRVJGX0hFTFBfSAorI2RlZmluZSBfX1BFUkZfSEVMUF9ICiAKIHN0cnVjdCBjbWRuYW1lcyB7CiAJc2l6ZV90IGFsbG9jOwpAQCAtMjYsNCArMjYsNCBAQAogdm9pZCBsaXN0X2NvbW1hbmRzKGNvbnN0IGNoYXIgKnRpdGxlLCBzdHJ1Y3QgY21kbmFtZXMgKm1haW5fY21kcywKIAkJICAgc3RydWN0IGNtZG5hbWVzICpvdGhlcl9jbWRzKTsKIAotI2VuZGlmIC8qIEhFTFBfSCAqLworI2VuZGlmIC8qIF9fUEVSRl9IRUxQX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmY2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCkBAIC0wLDAgKzEsMjAyIEBACisjaW5jbHVkZSAiaGlzdC5oIgorCitzdHJ1Y3QgcmJfcm9vdCBoaXN0Oworc3RydWN0IHJiX3Jvb3QgY29sbGFwc2VfaGlzdHM7CitzdHJ1Y3QgcmJfcm9vdCBvdXRwdXRfaGlzdHM7CitpbnQgY2FsbGNoYWluOworCitzdHJ1Y3QgY2FsbGNoYWluX3BhcmFtCWNhbGxjaGFpbl9wYXJhbSA9IHsKKwkubW9kZQk9IENIQUlOX0dSQVBIX1JFTCwKKwkubWluX3BlcmNlbnQgPSAwLjUKK307CisKKy8qCisgKiBoaXN0b2dyYW0sIHNvcnRlZCBvbiBpdGVtLCBjb2xsZWN0cyBjb3VudHMKKyAqLworCitzdHJ1Y3QgaGlzdF9lbnRyeSAqX19oaXN0X2VudHJ5X19hZGQoc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAorCQkJCSAgICAgc3RydWN0IHN5bWJvbCAqc3ltX3BhcmVudCwKKwkJCQkgICAgIHU2NCBjb3VudCwgYm9vbCAqaGl0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZoaXN0LnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGhpc3RfZW50cnkgKmhlOworCXN0cnVjdCBoaXN0X2VudHJ5IGVudHJ5ID0geworCQkudGhyZWFkCT0gYWwtPnRocmVhZCwKKwkJLm1hcAk9IGFsLT5tYXAsCisJCS5zeW0JPSBhbC0+c3ltLAorCQkuaXAJPSBhbC0+YWRkciwKKwkJLmxldmVsCT0gYWwtPmxldmVsLAorCQkuY291bnQJPSBjb3VudCwKKwkJLnBhcmVudCA9IHN5bV9wYXJlbnQsCisJfTsKKwlpbnQgY21wOworCisJd2hpbGUgKCpwICE9IE5VTEwpIHsKKwkJcGFyZW50ID0gKnA7CisJCWhlID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisKKwkJY21wID0gaGlzdF9lbnRyeV9fY21wKCZlbnRyeSwgaGUpOworCisJCWlmICghY21wKSB7CisJCQkqaGl0ID0gdHJ1ZTsKKwkJCXJldHVybiBoZTsKKwkJfQorCisJCWlmIChjbXAgPCAwKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCX0KKworCWhlID0gbWFsbG9jKHNpemVvZigqaGUpKTsKKwlpZiAoIWhlKQorCQlyZXR1cm4gTlVMTDsKKwkqaGUgPSBlbnRyeTsKKwlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsICZoaXN0KTsKKwkqaGl0ID0gZmFsc2U7CisJcmV0dXJuIGhlOworfQorCitpbnQ2NF90CitoaXN0X2VudHJ5X19jbXAoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlzdHJ1Y3Qgc29ydF9lbnRyeSAqc2U7CisJaW50NjRfdCBjbXAgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZSwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwgbGlzdCkgeworCQljbXAgPSBzZS0+Y21wKGxlZnQsIHJpZ2h0KTsKKwkJaWYgKGNtcCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBjbXA7Cit9CisKK2ludDY0X3QKK2hpc3RfZW50cnlfX2NvbGxhcHNlKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJc3RydWN0IHNvcnRfZW50cnkgKnNlOworCWludDY0X3QgY21wID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpIHsKKwkJaW50NjRfdCAoKmYpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworCisJCWYgPSBzZS0+Y29sbGFwc2UgPzogc2UtPmNtcDsKKworCQljbXAgPSBmKGxlZnQsIHJpZ2h0KTsKKwkJaWYgKGNtcCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBjbXA7Cit9CisKK3ZvaWQgaGlzdF9lbnRyeV9fZnJlZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCit7CisJZnJlZShoZSk7Cit9CisKKy8qCisgKiBjb2xsYXBzZSB0aGUgaGlzdG9ncmFtCisgKi8KKwordm9pZCBjb2xsYXBzZV9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmY29sbGFwc2VfaGlzdHMucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlcjsKKwlpbnQ2NF90IGNtcDsKKworCXdoaWxlICgqcCAhPSBOVUxMKSB7CisJCXBhcmVudCA9ICpwOworCQlpdGVyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisKKwkJY21wID0gaGlzdF9lbnRyeV9fY29sbGFwc2UoaXRlciwgaGUpOworCisJCWlmICghY21wKSB7CisJCQlpdGVyLT5jb3VudCArPSBoZS0+Y291bnQ7CisJCQloaXN0X2VudHJ5X19mcmVlKGhlKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChjbXAgPCAwKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCX0KKworCXJiX2xpbmtfbm9kZSgmaGUtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZoZS0+cmJfbm9kZSwgJmNvbGxhcHNlX2hpc3RzKTsKK30KKwordm9pZCBjb2xsYXBzZV9fcmVzb3J0KHZvaWQpCit7CisJc3RydWN0IHJiX25vZGUgKm5leHQ7CisJc3RydWN0IGhpc3RfZW50cnkgKm47CisKKwlpZiAoIXNvcnRfX25lZWRfY29sbGFwc2UpCisJCXJldHVybjsKKworCW5leHQgPSByYl9maXJzdCgmaGlzdCk7CisJd2hpbGUgKG5leHQpIHsKKwkJbiA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJbmV4dCA9IHJiX25leHQoJm4tPnJiX25vZGUpOworCisJCXJiX2VyYXNlKCZuLT5yYl9ub2RlLCAmaGlzdCk7CisJCWNvbGxhcHNlX19pbnNlcnRfZW50cnkobik7CisJfQorfQorCisvKgorICogcmV2ZXJzZSB0aGUgbWFwLCBzb3J0IG9uIGNvdW50LgorICovCisKK3ZvaWQgb3V0cHV0X19pbnNlcnRfZW50cnkoc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgbWluX2NhbGxjaGFpbl9oaXRzKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZvdXRwdXRfaGlzdHMucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlcjsKKworCWlmIChjYWxsY2hhaW4pCisJCWNhbGxjaGFpbl9wYXJhbS5zb3J0KCZoZS0+c29ydGVkX2NoYWluLCAmaGUtPmNhbGxjaGFpbiwKKwkJCQkgICAgICBtaW5fY2FsbGNoYWluX2hpdHMsICZjYWxsY2hhaW5fcGFyYW0pOworCisJd2hpbGUgKCpwICE9IE5VTEwpIHsKKwkJcGFyZW50ID0gKnA7CisJCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKworCQlpZiAoaGUtPmNvdW50ID4gaXRlci0+Y291bnQpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCAmb3V0cHV0X2hpc3RzKTsKK30KKwordm9pZCBvdXRwdXRfX3Jlc29ydCh1NjQgdG90YWxfc2FtcGxlcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqbjsKKwlzdHJ1Y3QgcmJfcm9vdCAqdHJlZSA9ICZoaXN0OworCXU2NCBtaW5fY2FsbGNoYWluX2hpdHM7CisKKwltaW5fY2FsbGNoYWluX2hpdHMgPQorCQl0b3RhbF9zYW1wbGVzICogKGNhbGxjaGFpbl9wYXJhbS5taW5fcGVyY2VudCAvIDEwMCk7CisKKwlpZiAoc29ydF9fbmVlZF9jb2xsYXBzZSkKKwkJdHJlZSA9ICZjb2xsYXBzZV9oaXN0czsKKworCW5leHQgPSByYl9maXJzdCh0cmVlKTsKKworCXdoaWxlIChuZXh0KSB7CisJCW4gPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCW5leHQgPSByYl9uZXh0KCZuLT5yYl9ub2RlKTsKKworCQlyYl9lcmFzZSgmbi0+cmJfbm9kZSwgdHJlZSk7CisJCW91dHB1dF9faW5zZXJ0X2VudHJ5KG4sIG1pbl9jYWxsY2hhaW5faGl0cyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyMGRiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfX1BFUkZfSElTVF9ICisjZGVmaW5lIF9fUEVSRl9ISVNUX0gKKyNpbmNsdWRlICIuLi9idWlsdGluLmgiCisKKyNpbmNsdWRlICJ1dGlsLmgiCisKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgImNhbGxjaGFpbi5oIgorI2luY2x1ZGUgInN0cmxpc3QuaCIKKyNpbmNsdWRlICJ2YWx1ZXMuaCIKKworI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImhlYWRlci5oIgorCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIgorCisjaW5jbHVkZSAidGhyZWFkLmgiCisjaW5jbHVkZSAic29ydC5oIgorCitleHRlcm4gc3RydWN0IHJiX3Jvb3QgaGlzdDsKK2V4dGVybiBzdHJ1Y3QgcmJfcm9vdCBjb2xsYXBzZV9oaXN0czsKK2V4dGVybiBzdHJ1Y3QgcmJfcm9vdCBvdXRwdXRfaGlzdHM7CitleHRlcm4gaW50IGNhbGxjaGFpbjsKK2V4dGVybiBzdHJ1Y3QgY2FsbGNoYWluX3BhcmFtIGNhbGxjaGFpbl9wYXJhbTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfbW1hcDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX2NvbW07CitleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbF9mb3JrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfdW5rbm93bjsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX2xvc3Q7CisKK3N0cnVjdCBoaXN0X2VudHJ5ICpfX2hpc3RfZW50cnlfX2FkZChzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCisJCQkJICAgICBzdHJ1Y3Qgc3ltYm9sICpwYXJlbnQsCisJCQkJICAgICB1NjQgY291bnQsIGJvb2wgKmhpdCk7CitleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CitleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKK2V4dGVybiB2b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKik7CitleHRlcm4gdm9pZCBjb2xsYXBzZV9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICopOworZXh0ZXJuIHZvaWQgY29sbGFwc2VfX3Jlc29ydCh2b2lkKTsKK2V4dGVybiB2b2lkIG91dHB1dF9faW5zZXJ0X2VudHJ5KHN0cnVjdCBoaXN0X2VudHJ5ICosIHU2NCk7CitleHRlcm4gdm9pZCBvdXRwdXRfX3Jlc29ydCh1NjQpOworCisjZW5kaWYJLyogX19QRVJGX0hJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDUzODk0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKQEAgLTAsMCArMSBAQAorLyogc3R1YiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTk4MTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfUEVSRl9BU01fQklUT1BTX0hfCisjZGVmaW5lIF9QRVJGX0FTTV9CSVRPUFNfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgIi4uLy4uL3R5cGVzLmgiCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogQ0hFQ0tNRTogTm90IHN1cmUgYm90aCBhbHdheXMgbWF0Y2ggKi8KKyNkZWZpbmUgQklUU19QRVJfTE9ORwlfX1dPUkRTSVpFCisKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zscy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9mZnouaCIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2J1Zy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2M2ODEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfUEVSRl9BU01fR0VORVJJQ19CVUdfSAorI2RlZmluZSBfUEVSRl9BU01fR0VORVJJQ19CVUdfSAorCisjZGVmaW5lIF9fV0FSTl9wcmludGYoYXJnLi4uKQlkbyB7IGZwcmludGYoc3RkZXJyLCBhcmcpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQuLi4pICh7CQlcCisJaW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pOwlcCisJaWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKQkJXAorCQlfX1dBUk5fcHJpbnRmKGZvcm1hdCk7CQlcCisJdW5saWtlbHkoX19yZXRfd2Fybl9vbik7CQlcCit9KQorCisjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLikJKHsJXAorCXN0YXRpYyBpbnQgX193YXJuZWQ7CQkJXAorCWludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kaXRpb24pOwlcCisJCQkJCQlcCisJaWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSkpCQlcCisJCWlmIChXQVJOKCFfX3dhcm5lZCwgZm9ybWF0KSkgCVwKKwkJCV9fd2FybmVkID0gMTsJCVwKKwl1bmxpa2VseShfX3JldF93YXJuX29uY2UpOwkJXAorfSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjJhYmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9saW51eC9zd2FiLmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vc3dhYi5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDUzODk0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMCwwICsxIEBACisvKiBzdHViICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3MmI4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9QRVJGX0FTTV9VQUNDRVNTX0hfCisjZGVmaW5lIF9QRVJGX0FTTV9VQUNDRVNTX0hfCisKKyNkZWZpbmUgX19nZXRfdXNlcihzcmMsIGRlc3QpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJKHNyYykgPSAqZGVzdDsJCQkJCQkJXAorCTA7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIGdldF91c2VyCV9fZ2V0X3VzZXIKKworI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSwgYWRkciwgc2l6ZSkJMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1MDc2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvbGludXgvYml0bWFwLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oIgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjMxMTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9QRVJGX0xJTlVYX0JJVE9QU19IXworI2RlZmluZSBfUEVSRl9MSU5VWF9CSVRPUFNfSF8KKworI2RlZmluZSBfX0tFUk5FTF9fCisKKyNkZWZpbmUgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVAorI2RlZmluZSBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2luY2x1ZGUvbGludXgvYml0b3BzLmgiCisKKyN1bmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlhZGRyW25yIC8gQklUU19QRVJfTE9OR10gfD0gMVVMIDw8IChuciAlIEJJVFNfUEVSX0xPTkcpOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB0ZXN0X2JpdCh1bnNpZ25lZCBpbnQgbnIsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJcmV0dXJuICgoMVVMIDw8IChuciAlIEJJVFNfUEVSX0xPTkcpKSAmCisJCSgoKHVuc2lnbmVkIGxvbmcgKilhZGRyKVtuciAvIEJJVFNfUEVSX0xPTkddKSkgIT0gMDsKK30KKwordW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdChjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZAorCQlsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwordW5zaWduZWQgbG9uZyBnZW5lcmljX2ZpbmRfbmV4dF9sZV9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQKKwkJbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiMDcxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfUEVSRl9MSU5VWF9DT01QSUxFUl9IXworI2RlZmluZSBfUEVSRl9MSU5VWF9DT01QSUxFUl9IXworCisjaWZuZGVmIF9fYWx3YXlzX2lubGluZQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUJaW5saW5lCisjZW5kaWYKKyNkZWZpbmUgX191c2VyCisjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18KKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jdHlwZS5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNkNGVlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY3R5cGUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSAiLi4vdXRpbC5oIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgva2VybmVsLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBhNmI4NzM5Li4yMWMwMjc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMSw2ICsxLDE2IEBACiAjaWZuZGVmIFBFUkZfTElOVVhfS0VSTkVMX0hfCiAjZGVmaW5lIFBFUkZfTElOVVhfS0VSTkVMX0hfCiAKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCisKKyNkZWZpbmUgQUxJR04oeCxhKQkJX19BTElHTl9NQVNLKHgsKHR5cGVvZih4KSkoYSktMSkKKyNkZWZpbmUgX19BTElHTl9NQVNLKHgsbWFzaykJKCgoeCkrKG1hc2spKSZ+KG1hc2spKQorCiAjaWZuZGVmIG9mZnNldG9mCiAjZGVmaW5lIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKChzaXplX3QpICYoKFRZUEUgKikwKS0+TUVNQkVSKQogI2VuZGlmCkBAIC0yNiw0ICszNiw3MCBAQAogCV9tYXgxID4gX21heDIgPyBfbWF4MSA6IF9tYXgyOyB9KQogI2VuZGlmCiAKKyNpZm5kZWYgbWluCisjZGVmaW5lIG1pbih4LCB5KSAoewkJCQlcCisJdHlwZW9mKHgpIF9taW4xID0gKHgpOwkJCVwKKwl0eXBlb2YoeSkgX21pbjIgPSAoeSk7CQkJXAorCSh2b2lkKSAoJl9taW4xID09ICZfbWluMik7CQlcCisJX21pbjEgPCBfbWluMiA/IF9taW4xIDogX21pbjI7IH0pCisjZW5kaWYKKworI2lmbmRlZiBCVUdfT04KKyNkZWZpbmUgQlVHX09OKGNvbmQpIGFzc2VydCghKGNvbmQpKQorI2VuZGlmCisKKy8qCisgKiBCb3RoIG5lZWQgbW9yZSBjYXJlIHRvIGhhbmRsZSBlbmRpYW5uZXNzCisgKiAoRG9uJ3QgdXNlIGJpdG1hcF9jb3B5X2xlKCkgZm9yIG5vdykKKyAqLworI2RlZmluZSBjcHVfdG9fbGU2NCh4KQkoeCkKKyNkZWZpbmUgY3B1X3RvX2xlMzIoeCkJKHgpCisKK3N0YXRpYyBpbmxpbmUgaW50Cit2c2NucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCWludCBpOworCXNzaXplX3Qgc3NpemUgPSBzaXplOworCisJaSA9IHZzbnByaW50ZihidWYsIHNpemUsIGZtdCwgYXJncyk7CisKKwlyZXR1cm4gKGkgPj0gc3NpemUpID8gKHNzaXplIC0gMSkgOiBpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzY25wcmludGYoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJc3NpemVfdCBzc2l6ZSA9IHNpemU7CisJaW50IGk7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWkgPSB2c25wcmludGYoYnVmLCBzaXplLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiAoaSA+PSBzc2l6ZSkgPyAoc3NpemUgLSAxKSA6IGk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJcmV0dXJuIHN0cnRvdWwobnB0ciwgZW5kcHRyLCBiYXNlKTsKK30KKworI2lmbmRlZiBwcl9mbXQKKyNkZWZpbmUgcHJfZm10KGZtdCkgZm10CisjZW5kaWYKKworI2RlZmluZSBwcl9lcnIoZm10LCAuLi4pIFwKKwlkbyB7IGZwcmludGYoc3RkZXJyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByX3dhcm5pbmcoZm10LCAuLi4pIFwKKwlkbyB7IGZwcmludGYoc3RkZXJyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByX2luZm8oZm10LCAuLi4pIFwKKwlkbyB7IGZwcmludGYoc3RkZXJyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBcCisJZXByaW50ZigxLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcHJfZGVidWdOKG4sIGZtdCwgLi4uKSBcCisJZXByaW50ZihuLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcHJfZGVidWcyKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMiwgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2RlYnVnMyhmbXQsIC4uLikgcHJfZGVidWdOKDMsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyZjU5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Njg2MmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfUEVSRl9MSU5VWF9UWVBFU19IXworI2RlZmluZSBfUEVSRl9MSU5VWF9UWVBFU19IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgREVDTEFSRV9CSVRNQVAobmFtZSxiaXRzKSBcCisJdW5zaWduZWQgbG9uZyBuYW1lW0JJVFNfVE9fTE9OR1MoYml0cyldCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2xldmVuc2h0ZWluLmggYi90b29scy9wZXJmL3V0aWwvbGV2ZW5zaHRlaW4uaAppbmRleCAwMTczYWJlLi5iMGZjYjZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbGV2ZW5zaHRlaW4uaAorKysgYi90b29scy9wZXJmL3V0aWwvbGV2ZW5zaHRlaW4uaApAQCAtMSw4ICsxLDggQEAKLSNpZm5kZWYgTEVWRU5TSFRFSU5fSAotI2RlZmluZSBMRVZFTlNIVEVJTl9ICisjaWZuZGVmIF9fUEVSRl9MRVZFTlNIVEVJTl9ICisjZGVmaW5lIF9fUEVSRl9MRVZFTlNIVEVJTl9ICiAKIGludCBsZXZlbnNodGVpbihjb25zdCBjaGFyICpzdHJpbmcxLCBjb25zdCBjaGFyICpzdHJpbmcyLAogCWludCBzd2FwX3BlbmFsdHksIGludCBzdWJzdGl0aW9uX3BlbmFsdHksCiAJaW50IGluc2VydGlvbl9wZW5hbHR5LCBpbnQgZGVsZXRpb25fcGVuYWx0eSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fUEVSRl9MRVZFTlNIVEVJTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFwLmMgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKaW5kZXggODA0ZTAyMy4uNjlmOTRmZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21hcC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImRlYnVnLmgiCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Fub25fbWVtb3J5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewpAQCAtMTksMTMgKzIwLDI4IEBACiAJcmV0dXJuIG47CiB9CiAKLSBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbikKK3ZvaWQgbWFwX19pbml0KHN0cnVjdCBtYXAgKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKKwkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgcGdvZmYsIHN0cnVjdCBkc28gKmRzbykKK3sKKwlzZWxmLT50eXBlICAgICA9IHR5cGU7CisJc2VsZi0+c3RhcnQgICAgPSBzdGFydDsKKwlzZWxmLT5lbmQgICAgICA9IGVuZDsKKwlzZWxmLT5wZ29mZiAgICA9IHBnb2ZmOworCXNlbGYtPmRzbyAgICAgID0gZHNvOworCXNlbGYtPm1hcF9pcCAgID0gbWFwX19tYXBfaXA7CisJc2VsZi0+dW5tYXBfaXAgPSBtYXBfX3VubWFwX2lwOworCVJCX0NMRUFSX05PREUoJnNlbGYtPnJiX25vZGUpOworfQorCitzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGVudW0gbWFwX3R5cGUgdHlwZSwKKwkJICAgICBjaGFyICpjd2QsIGludCBjd2RsZW4pCiB7CiAJc3RydWN0IG1hcCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBldmVudC0+ZmlsZW5hbWU7CiAJCWNoYXIgbmV3ZmlsZW5hbWVbUEFUSF9NQVhdOworCQlzdHJ1Y3QgZHNvICpkc287CiAJCWludCBhbm9uOwogCiAJCWlmIChjd2QpIHsKQEAgLTQ1LDE4ICs2MSwxNSBAQAogCQkJZmlsZW5hbWUgPSBuZXdmaWxlbmFtZTsKIAkJfQogCi0JCXNlbGYtPnN0YXJ0ID0gZXZlbnQtPnN0YXJ0OwotCQlzZWxmLT5lbmQgICA9IGV2ZW50LT5zdGFydCArIGV2ZW50LT5sZW47Ci0JCXNlbGYtPnBnb2ZmID0gZXZlbnQtPnBnb2ZmOwotCi0JCXNlbGYtPmRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOwotCQlpZiAoc2VsZi0+ZHNvID09IE5VTEwpCisJCWRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOworCQlpZiAoZHNvID09IE5VTEwpCiAJCQlnb3RvIG91dF9kZWxldGU7CiAKKwkJbWFwX19pbml0KHNlbGYsIHR5cGUsIGV2ZW50LT5zdGFydCwgZXZlbnQtPnN0YXJ0ICsgZXZlbnQtPmxlbiwKKwkJCSAgZXZlbnQtPnBnb2ZmLCBkc28pOworCiAJCWlmIChzZWxmLT5kc28gPT0gdmRzbyB8fCBhbm9uKQotCQkJc2VsZi0+bWFwX2lwID0gdmRzb19fbWFwX2lwOwotCQllbHNlCi0JCQlzZWxmLT5tYXBfaXAgPSBtYXBfX21hcF9pcDsKKwkJCXNlbGYtPm1hcF9pcCA9IHNlbGYtPnVubWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAl9CiAJcmV0dXJuIHNlbGY7CiBvdXRfZGVsZXRlOgpAQCAtNjQsNiArNzcsNzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAordm9pZCBtYXBfX2RlbGV0ZShzdHJ1Y3QgbWFwICpzZWxmKQoreworCWZyZWUoc2VsZik7Cit9CisKK3ZvaWQgbWFwX19maXh1cF9zdGFydChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXN0cnVjdCByYl9yb290ICpzeW1ib2xzID0gJnNlbGYtPmRzby0+c3ltYm9sc1tzZWxmLT50eXBlXTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQgPSByYl9maXJzdChzeW1ib2xzKTsKKwlpZiAobmQgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CisJCXNlbGYtPnN0YXJ0ID0gc3ltLT5zdGFydDsKKwl9Cit9CisKK3ZvaWQgbWFwX19maXh1cF9lbmQoc3RydWN0IG1hcCAqc2VsZikKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqc3ltYm9scyA9ICZzZWxmLT5kc28tPnN5bWJvbHNbc2VsZi0+dHlwZV07CisJc3RydWN0IHJiX25vZGUgKm5kID0gcmJfbGFzdChzeW1ib2xzKTsKKwlpZiAobmQgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CisJCXNlbGYtPmVuZCA9IHN5bS0+ZW5kOworCX0KK30KKworI2RlZmluZSBEU09fX0RFTEVURUQgIihkZWxldGVkKSIKKworc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgYWRkciwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWlmICghZHNvX19sb2FkZWQoc2VsZi0+ZHNvLCBzZWxmLT50eXBlKSkgeworCQlpbnQgbnIgPSBkc29fX2xvYWQoc2VsZi0+ZHNvLCBzZWxmLCBmaWx0ZXIpOworCisJCWlmIChuciA8IDApIHsKKwkJCWlmIChzZWxmLT5kc28tPmhhc19idWlsZF9pZCkgeworCQkJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwkJCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5kc28tPmJ1aWxkX2lkLAorCQkJCQkJICBzaXplb2Yoc2VsZi0+ZHNvLT5idWlsZF9pZCksCisJCQkJCQkgIHNidWlsZF9pZCk7CisJCQkJcHJfd2FybmluZygiJXMgd2l0aCBidWlsZCBpZCAlcyBub3QgZm91bmQiLAorCQkJCQkgICBzZWxmLT5kc28tPmxvbmdfbmFtZSwgc2J1aWxkX2lkKTsKKwkJCX0gZWxzZQorCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBvcGVuICVzIiwKKwkJCQkJICAgc2VsZi0+ZHNvLT5sb25nX25hbWUpOworCQkJcHJfd2FybmluZygiLCBjb250aW51aW5nIHdpdGhvdXQgc3ltYm9sc1xuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfSBlbHNlIGlmIChuciA9PSAwKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gc2VsZi0+ZHNvLT5sb25nX25hbWU7CisJCQljb25zdCBzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworCQkJY29uc3Qgc2l6ZV90IHJlYWxfbGVuID0gbGVuIC0gc2l6ZW9mKERTT19fREVMRVRFRCk7CisKKwkJCWlmIChsZW4gPiBzaXplb2YoRFNPX19ERUxFVEVEKSAmJgorCQkJICAgIHN0cmNtcChuYW1lICsgcmVhbF9sZW4gKyAxLCBEU09fX0RFTEVURUQpID09IDApIHsKKwkJCQlwcl93YXJuaW5nKCIlLipzIHdhcyB1cGRhdGVkLCByZXN0YXJ0IHRoZSBsb25nIHJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBpdCFcbiIsCisJCQkJCSAgIChpbnQpcmVhbF9sZW4sIG5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlwcl93YXJuaW5nKCJubyBzeW1ib2xzIGZvdW5kIGluICVzLCBtYXliZSBpbnN0YWxsIGEgZGVidWcgcGFja2FnZT9cbiIsIG5hbWUpOworCQkJfQorCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gc2VsZi0+ZHNvLT5maW5kX3N5bWJvbChzZWxmLT5kc28sIHNlbGYtPnR5cGUsIGFkZHIpOworfQorCiBzdHJ1Y3QgbWFwICptYXBfX2Nsb25lKHN0cnVjdCBtYXAgKnNlbGYpCiB7CiAJc3RydWN0IG1hcCAqbWFwID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jIGIvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDhjODVkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYworKysgL2Rldi9udWxsCkBAIC0xLDU0NSArMCwwIEBACi0jaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJzdHJpbmcuaCIKLSNpbmNsdWRlICJtb2R1bGUuaCIKLQotI2luY2x1ZGUgPGxpYmVsZi5oPgotI2luY2x1ZGUgPGxpYmdlbi5oPgotI2luY2x1ZGUgPGdlbGYuaD4KLSNpbmNsdWRlIDxlbGYuaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGNyYzMyKGNvbnN0IGNoYXIgKnAsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGNyYyA9IDA7Ci0KLQl3aGlsZSAobGVuLS0pIHsKLQkJY3JjIF49ICpwKys7Ci0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCQljcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IDB4ZWRiODgzMjAgOiAwKTsKLQl9Ci0JcmV0dXJuIGNyYzsKLX0KLQotLyogbW9kdWxlIHNlY3Rpb24gbWV0aG9kcyAqLwotCi1zdHJ1Y3Qgc2VjX2RzbyAqc2VjX2Rzb19fbmV3X2Rzbyhjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzZWNfZHNvICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJc3RyY3B5KHNlbGYtPm5hbWUsIG5hbWUpOwotCQlzZWxmLT5zZWNzID0gUkJfUk9PVDsKLQkJc2VsZi0+ZmluZF9zZWN0aW9uID0gc2VjX2Rzb19fZmluZF9zZWN0aW9uOwotCX0KLQotCXJldHVybiBzZWxmOwotfQotCi1zdGF0aWMgdm9pZCBzZWNfZHNvX19kZWxldGVfc2VjdGlvbihzdHJ1Y3Qgc2VjdGlvbiAqc2VsZikKLXsKLQlmcmVlKCgodm9pZCAqKXNlbGYpKTsKLX0KLQotdm9pZCBzZWNfZHNvX19kZWxldGVfc2VjdGlvbnMoc3RydWN0IHNlY19kc28gKnNlbGYpCi17Ci0Jc3RydWN0IHNlY3Rpb24gKnBvczsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KCZzZWxmLT5zZWNzKTsKLQotCXdoaWxlIChuZXh0KSB7Ci0JCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBzZWN0aW9uLCByYl9ub2RlKTsKLQkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7Ci0JCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsICZzZWxmLT5zZWNzKTsKLQkJc2VjX2Rzb19fZGVsZXRlX3NlY3Rpb24ocG9zKTsKLQl9Ci19Ci0KLXZvaWQgc2VjX2Rzb19fZGVsZXRlX3NlbGYoc3RydWN0IHNlY19kc28gKnNlbGYpCi17Ci0Jc2VjX2Rzb19fZGVsZXRlX3NlY3Rpb25zKHNlbGYpOwotCWZyZWUoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlY19kc29fX2luc2VydF9zZWN0aW9uKHN0cnVjdCBzZWNfZHNvICpzZWxmLCBzdHJ1Y3Qgc2VjdGlvbiAqc2VjKQotewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZWxmLT5zZWNzLnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7Ci0JY29uc3QgdTY0IGhhc2ggPSBzZWMtPmhhc2g7Ci0Jc3RydWN0IHNlY3Rpb24gKnM7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJcyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHNlY3Rpb24sIHJiX25vZGUpOwotCQlpZiAoaGFzaCA8IHMtPmhhc2gpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCXJiX2xpbmtfbm9kZSgmc2VjLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmc2VjLT5yYl9ub2RlLCAmc2VsZi0+c2Vjcyk7Ci19Ci0KLXN0cnVjdCBzZWN0aW9uICpzZWNfZHNvX19maW5kX3NlY3Rpb24oc3RydWN0IHNlY19kc28gKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm47Ci0JdTY0IGhhc2g7Ci0JaW50IGxlbjsKLQotCWlmIChzZWxmID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbGVuID0gc3RybGVuKG5hbWUpOwotCWhhc2ggPSBjcmMzMihuYW1lLCBsZW4pOwotCi0JbiA9IHNlbGYtPnNlY3MucmJfbm9kZTsKLQotCXdoaWxlIChuKSB7Ci0JCXN0cnVjdCBzZWN0aW9uICpzID0gcmJfZW50cnkobiwgc3RydWN0IHNlY3Rpb24sIHJiX25vZGUpOwotCi0JCWlmIChoYXNoIDwgcy0+aGFzaCkKLQkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChoYXNoID4gcy0+aGFzaCkKLQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQlpZiAoIXN0cmNtcChuYW1lLCBzLT5uYW1lKSkKLQkJCQlyZXR1cm4gczsKLQkJCWVsc2UKLQkJCQluID0gcmJfbmV4dCgmcy0+cmJfbm9kZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHNpemVfdCBzZWNfZHNvX19mcHJpbnRmX3NlY3Rpb24oc3RydWN0IHNlY3Rpb24gKnNlbGYsIEZJTEUgKmZwKQotewotCXJldHVybiBmcHJpbnRmKGZwLCAibmFtZTolcyB2bWE6JWxseCBwYXRoOiVzXG4iLAotCQkgICAgICAgc2VsZi0+bmFtZSwgc2VsZi0+dm1hLCBzZWxmLT5wYXRoKTsKLX0KLQotc2l6ZV90IHNlY19kc29fX2ZwcmludGYoc3RydWN0IHNlY19kc28gKnNlbGYsIEZJTEUgKmZwKQotewotCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlc1xuIiwgc2VsZi0+bmFtZSk7Ci0KLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0JZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5zZWNzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IHNlY3Rpb24gKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3Qgc2VjdGlvbiwgcmJfbm9kZSk7Ci0JCXJldCArPSBzZWNfZHNvX19mcHJpbnRmX3NlY3Rpb24ocG9zLCBmcCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZWN0aW9uICpzZWN0aW9uX19uZXcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCkKLXsKLQlzdHJ1Y3Qgc2VjdGlvbiAqc2VsZiA9IGNhbGxvYygxLCBzaXplb2YoKnNlbGYpKTsKLQotCWlmICghc2VsZikKLQkJZ290byBvdXRfZmFpbHVyZTsKLQotCXNlbGYtPm5hbWUgPSBjYWxsb2MoMSwgc3RybGVuKG5hbWUpICsgMSk7Ci0JaWYgKCFzZWxmLT5uYW1lKQotCQlnb3RvIG91dF9mYWlsdXJlOwotCi0Jc2VsZi0+cGF0aCA9IGNhbGxvYygxLCBzdHJsZW4ocGF0aCkgKyAxKTsKLQlpZiAoIXNlbGYtPnBhdGgpCi0JCWdvdG8gb3V0X2ZhaWx1cmU7Ci0KLQlzdHJjcHkoc2VsZi0+bmFtZSwgbmFtZSk7Ci0Jc3RyY3B5KHNlbGYtPnBhdGgsIHBhdGgpOwotCXNlbGYtPmhhc2ggPSBjcmMzMihzZWxmLT5uYW1lLCBzdHJsZW4obmFtZSkpOwotCi0JcmV0dXJuIHNlbGY7Ci0KLW91dF9mYWlsdXJlOgotCWlmIChzZWxmKSB7Ci0JCWlmIChzZWxmLT5uYW1lKQotCQkJZnJlZShzZWxmLT5uYW1lKTsKLQkJaWYgKHNlbGYtPnBhdGgpCi0JCQlmcmVlKHNlbGYtPnBhdGgpOwotCQlmcmVlKHNlbGYpOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0vKiBtb2R1bGUgbWV0aG9kcyAqLwotCi1zdHJ1Y3QgbW9kX2RzbyAqbW9kX2Rzb19fbmV3X2Rzbyhjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBtb2RfZHNvICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJc3RyY3B5KHNlbGYtPm5hbWUsIG5hbWUpOwotCQlzZWxmLT5tb2RzID0gUkJfUk9PVDsKLQkJc2VsZi0+ZmluZF9tb2R1bGUgPSBtb2RfZHNvX19maW5kX21vZHVsZTsKLQl9Ci0KLQlyZXR1cm4gc2VsZjsKLX0KLQotc3RhdGljIHZvaWQgbW9kX2Rzb19fZGVsZXRlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICpzZWxmKQotewotCWZyZWUoKCh2b2lkICopc2VsZikpOwotfQotCi12b2lkIG1vZF9kc29fX2RlbGV0ZV9tb2R1bGVzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQotewotCXN0cnVjdCBtb2R1bGUgKnBvczsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KCZzZWxmLT5tb2RzKTsKLQotCXdoaWxlIChuZXh0KSB7Ci0JCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtb2R1bGUsIHJiX25vZGUpOwotCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgJnNlbGYtPm1vZHMpOwotCQltb2RfZHNvX19kZWxldGVfbW9kdWxlKHBvcyk7Ci0JfQotfQotCi12b2lkIG1vZF9kc29fX2RlbGV0ZV9zZWxmKHN0cnVjdCBtb2RfZHNvICpzZWxmKQotewotCW1vZF9kc29fX2RlbGV0ZV9tb2R1bGVzKHNlbGYpOwotCWZyZWUoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZF9kc29fX2luc2VydF9tb2R1bGUoc3RydWN0IG1vZF9kc28gKnNlbGYsIHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmc2VsZi0+bW9kcy5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCWNvbnN0IHU2NCBoYXNoID0gbW9kLT5oYXNoOwotCXN0cnVjdCBtb2R1bGUgKm07Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJbSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1vZHVsZSwgcmJfbm9kZSk7Ci0JCWlmIChoYXNoIDwgbS0+aGFzaCkKLQkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKLQkJZWxzZQotCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQl9Ci0JcmJfbGlua19ub2RlKCZtb2QtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZtb2QtPnJiX25vZGUsICZzZWxmLT5tb2RzKTsKLX0KLQotc3RydWN0IG1vZHVsZSAqbW9kX2Rzb19fZmluZF9tb2R1bGUoc3RydWN0IG1vZF9kc28gKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm47Ci0JdTY0IGhhc2g7Ci0JaW50IGxlbjsKLQotCWlmIChzZWxmID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbGVuID0gc3RybGVuKG5hbWUpOwotCWhhc2ggPSBjcmMzMihuYW1lLCBsZW4pOwotCi0JbiA9IHNlbGYtPm1vZHMucmJfbm9kZTsKLQotCXdoaWxlIChuKSB7Ci0JCXN0cnVjdCBtb2R1bGUgKm0gPSByYl9lbnRyeShuLCBzdHJ1Y3QgbW9kdWxlLCByYl9ub2RlKTsKLQotCQlpZiAoaGFzaCA8IG0tPmhhc2gpCi0JCQluID0gbi0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoaGFzaCA+IG0tPmhhc2gpCi0JCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJaWYgKCFzdHJjbXAobmFtZSwgbS0+bmFtZSkpCi0JCQkJcmV0dXJuIG07Ci0JCQllbHNlCi0JCQkJbiA9IHJiX25leHQoJm0tPnJiX25vZGUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzaXplX3QgbW9kX2Rzb19fZnByaW50Zl9tb2R1bGUoc3RydWN0IG1vZHVsZSAqc2VsZiwgRklMRSAqZnApCi17Ci0JcmV0dXJuIGZwcmludGYoZnAsICJuYW1lOiVzIHBhdGg6JXNcbiIsIHNlbGYtPm5hbWUsIHNlbGYtPnBhdGgpOwotfQotCi1zaXplX3QgbW9kX2Rzb19fZnByaW50ZihzdHJ1Y3QgbW9kX2RzbyAqc2VsZiwgRklMRSAqZnApCi17Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCXNpemVfdCByZXQ7Ci0KLQlyZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlc1xuIiwgc2VsZi0+bmFtZSk7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPm1vZHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3QgbW9kdWxlICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1vZHVsZSwgcmJfbm9kZSk7Ci0KLQkJcmV0ICs9IG1vZF9kc29fX2ZwcmludGZfbW9kdWxlKHBvcywgZnApOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfX25ldyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKQotewotCXN0cnVjdCBtb2R1bGUgKnNlbGYgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzZWxmKSk7Ci0KLQlpZiAoIXNlbGYpCi0JCWdvdG8gb3V0X2ZhaWx1cmU7Ci0KLQlzZWxmLT5uYW1lID0gY2FsbG9jKDEsIHN0cmxlbihuYW1lKSArIDEpOwotCWlmICghc2VsZi0+bmFtZSkKLQkJZ290byBvdXRfZmFpbHVyZTsKLQotCXNlbGYtPnBhdGggPSBjYWxsb2MoMSwgc3RybGVuKHBhdGgpICsgMSk7Ci0JaWYgKCFzZWxmLT5wYXRoKQotCQlnb3RvIG91dF9mYWlsdXJlOwotCi0Jc3RyY3B5KHNlbGYtPm5hbWUsIG5hbWUpOwotCXN0cmNweShzZWxmLT5wYXRoLCBwYXRoKTsKLQlzZWxmLT5oYXNoID0gY3JjMzIoc2VsZi0+bmFtZSwgc3RybGVuKG5hbWUpKTsKLQotCXJldHVybiBzZWxmOwotCi1vdXRfZmFpbHVyZToKLQlpZiAoc2VsZikgewotCQlpZiAoc2VsZi0+bmFtZSkKLQkJCWZyZWUoc2VsZi0+bmFtZSk7Ci0JCWlmIChzZWxmLT5wYXRoKQotCQkJZnJlZShzZWxmLT5wYXRoKTsKLQkJZnJlZShzZWxmKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBtb2RfZHNvX19sb2FkX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlpbnQgY291bnQgPSAwLCBwYXRoX2xlbjsKLQlzdHJ1Y3QgZGlyZW50ICplbnRyeTsKLQljaGFyICpsaW5lID0gTlVMTDsKLQljaGFyICpkaXJfcGF0aDsKLQlESVIgKmRpcjsKLQlzaXplX3QgbjsKLQotCXBhdGhfbGVuID0gc3RybGVuKCIvc3lzL21vZHVsZS8iKTsKLQlwYXRoX2xlbiArPSBzdHJsZW4obW9kLT5uYW1lKTsKLQlwYXRoX2xlbiArPSBzdHJsZW4oIi9zZWN0aW9ucy8iKTsKLQotCWRpcl9wYXRoID0gY2FsbG9jKDEsIHBhdGhfbGVuICsgMSk7Ci0JaWYgKGRpcl9wYXRoID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZhaWx1cmU7Ci0KLQlzdHJjYXQoZGlyX3BhdGgsICIvc3lzL21vZHVsZS8iKTsKLQlzdHJjYXQoZGlyX3BhdGgsIG1vZC0+bmFtZSk7Ci0Jc3RyY2F0KGRpcl9wYXRoLCAiL3NlY3Rpb25zLyIpOwotCi0JZGlyID0gb3BlbmRpcihkaXJfcGF0aCk7Ci0JaWYgKGRpciA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlOwotCi0Jd2hpbGUgKChlbnRyeSA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJc3RydWN0IHNlY3Rpb24gKnNlY3Rpb247Ci0JCWNoYXIgKnBhdGgsICp2bWE7Ci0JCWludCBsaW5lX2xlbjsKLQkJRklMRSAqZmlsZTsKLQotCQlpZiAoIXN0cmNtcCgiLiIsIGVudHJ5LT5kX25hbWUpIHx8ICFzdHJjbXAoIi4uIiwgZW50cnktPmRfbmFtZSkpCi0JCQljb250aW51ZTsKLQotCQlwYXRoID0gY2FsbG9jKDEsIHBhdGhfbGVuICsgc3RybGVuKGVudHJ5LT5kX25hbWUpICsgMSk7Ci0JCWlmIChwYXRoID09IE5VTEwpCi0JCQlicmVhazsKLQkJc3RyY2F0KHBhdGgsIGRpcl9wYXRoKTsKLQkJc3RyY2F0KHBhdGgsIGVudHJ5LT5kX25hbWUpOwotCi0JCWZpbGUgPSBmb3BlbihwYXRoLCAiciIpOwotCQlpZiAoZmlsZSA9PSBOVUxMKSB7Ci0JCQlmcmVlKHBhdGgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlsaW5lX2xlbiA9IGdldGxpbmUoJmxpbmUsICZuLCBmaWxlKTsKLQkJaWYgKGxpbmVfbGVuIDwgMCkgewotCQkJZnJlZShwYXRoKTsKLQkJCWZjbG9zZShmaWxlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKCFsaW5lKSB7Ci0JCQlmcmVlKHBhdGgpOwotCQkJZmNsb3NlKGZpbGUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlsaW5lWy0tbGluZV9sZW5dID0gJ1wwJzsgLyogXG4gKi8KLQotCQl2bWEgPSBzdHJzdHIobGluZSwgIjB4Iik7Ci0JCWlmICghdm1hKSB7Ci0JCQlmcmVlKHBhdGgpOwotCQkJZmNsb3NlKGZpbGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdm1hICs9IDI7Ci0KLQkJc2VjdGlvbiA9IHNlY3Rpb25fX25ldyhlbnRyeS0+ZF9uYW1lLCBwYXRoKTsKLQkJaWYgKCFzZWN0aW9uKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfc2VjdGlvbnM6IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQkJZnJlZShwYXRoKTsKLQkJCWZjbG9zZShmaWxlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaGV4MnU2NCh2bWEsICZzZWN0aW9uLT52bWEpOwotCQlzZWNfZHNvX19pbnNlcnRfc2VjdGlvbihtb2QtPnNlY3Rpb25zLCBzZWN0aW9uKTsKLQotCQlmcmVlKHBhdGgpOwotCQlmY2xvc2UoZmlsZSk7Ci0JCWNvdW50Kys7Ci0JfQotCi0JY2xvc2VkaXIoZGlyKTsKLQlmcmVlKGxpbmUpOwotCWZyZWUoZGlyX3BhdGgpOwotCi0JcmV0dXJuIGNvdW50OwotCi1vdXRfZnJlZToKLQlmcmVlKGRpcl9wYXRoKTsKLQotb3V0X2ZhaWx1cmU6Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQotewotCXN0cnVjdCB1dHNuYW1lIHV0czsKLQlpbnQgY291bnQgPSAwLCBsZW4sIGVyciA9IC0xOwotCWNoYXIgKmxpbmUgPSBOVUxMOwotCUZJTEUgKmZpbGU7Ci0JY2hhciAqZHBhdGgsICpkaXI7Ci0Jc2l6ZV90IG47Ci0KLQlpZiAodW5hbWUoJnV0cykgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JbGVuID0gc3RybGVuKCIvbGliL21vZHVsZXMvIik7Ci0JbGVuICs9IHN0cmxlbih1dHMucmVsZWFzZSk7Ci0JbGVuICs9IHN0cmxlbigiL21vZHVsZXMuZGVwIik7Ci0KLQlkcGF0aCA9IGNhbGxvYygxLCBsZW4gKyAxKTsKLQlpZiAoZHBhdGggPT0gTlVMTCkKLQkJcmV0dXJuIGVycjsKLQotCXN0cmNhdChkcGF0aCwgIi9saWIvbW9kdWxlcy8iKTsKLQlzdHJjYXQoZHBhdGgsIHV0cy5yZWxlYXNlKTsKLQlzdHJjYXQoZHBhdGgsICIvbW9kdWxlcy5kZXAiKTsKLQotCWZpbGUgPSBmb3BlbihkcGF0aCwgInIiKTsKLQlpZiAoZmlsZSA9PSBOVUxMKQotCQlnb3RvIG91dF9mYWlsdXJlOwotCi0JZGlyID0gZGlybmFtZShkcGF0aCk7Ci0JaWYgKCFkaXIpCi0JCWdvdG8gb3V0X2ZhaWx1cmU7Ci0Jc3RyY2F0KGRpciwgIi8iKTsKLQotCXdoaWxlICghZmVvZihmaWxlKSkgewotCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7Ci0JCWNoYXIgKm5hbWUsICpwYXRoLCAqdG1wOwotCQlGSUxFICptb2RmaWxlOwotCQlpbnQgbGluZV9sZW47Ci0KLQkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7Ci0JCWlmIChsaW5lX2xlbiA8IDApCi0JCQlicmVhazsKLQotCQlpZiAoIWxpbmUpCi0JCQlicmVhazsKLQotCQlsaW5lWy0tbGluZV9sZW5dID0gJ1wwJzsgLyogXG4gKi8KLQotCQlwYXRoID0gc3RyY2hyKGxpbmUsICc6Jyk7Ci0JCWlmICghcGF0aCkKLQkJCWJyZWFrOwotCQkqcGF0aCA9ICdcMCc7Ci0KLQkJcGF0aCA9IHN0cmR1cChsaW5lKTsKLQkJaWYgKCFwYXRoKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFzdHJzdHIocGF0aCwgZGlyKSkgewotCQkJaWYgKHN0cm5jbXAocGF0aCwgImtlcm5lbC8iLCA3KSkKLQkJCQlicmVhazsKLQotCQkJZnJlZShwYXRoKTsKLQkJCXBhdGggPSBjYWxsb2MoMSwgc3RybGVuKGRpcikgKyBzdHJsZW4obGluZSkgKyAxKTsKLQkJCWlmICghcGF0aCkKLQkJCQlicmVhazsKLQkJCXN0cmNhdChwYXRoLCBkaXIpOwotCQkJc3RyY2F0KHBhdGgsIGxpbmUpOwotCQl9Ci0KLQkJbW9kZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7Ci0JCWlmIChtb2RmaWxlID09IE5VTEwpCi0JCQlicmVhazsKLQkJZmNsb3NlKG1vZGZpbGUpOwotCi0JCW5hbWUgPSBzdHJkdXAocGF0aCk7Ci0JCWlmICghbmFtZSkKLQkJCWJyZWFrOwotCi0JCW5hbWUgPSBzdHJ0b2sobmFtZSwgIi8iKTsKLQkJdG1wID0gbmFtZTsKLQotCQl3aGlsZSAodG1wKSB7Ci0JCQl0bXAgPSBzdHJ0b2soTlVMTCwgIi8iKTsKLQkJCWlmICh0bXApCi0JCQkJbmFtZSA9IHRtcDsKLQkJfQotCi0JCW5hbWUgPSBzdHJzZXAoJm5hbWUsICIuIik7Ci0JCWlmICghbmFtZSkKLQkJCWJyZWFrOwotCi0JCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBhbGwgbW9kdWxlcyAqLwotCQlmb3IgKGxlbiA9IHN0cmxlbihuYW1lKTsgbGVuOyBsZW4tLSkgewotCQkJaWYgKCoobmFtZStsZW4pID09ICctJykKLQkJCQkqKG5hbWUrbGVuKSA9ICdfJzsKLQkJfQotCi0JCW1vZHVsZSA9IG1vZHVsZV9fbmV3KG5hbWUsIHBhdGgpOwotCQlpZiAoIW1vZHVsZSkKLQkJCWJyZWFrOwotCQltb2RfZHNvX19pbnNlcnRfbW9kdWxlKHNlbGYsIG1vZHVsZSk7Ci0KLQkJbW9kdWxlLT5zZWN0aW9ucyA9IHNlY19kc29fX25ld19kc28oInNlY3Rpb25zIik7Ci0JCWlmICghbW9kdWxlLT5zZWN0aW9ucykKLQkJCWJyZWFrOwotCi0JCW1vZHVsZS0+YWN0aXZlID0gbW9kX2Rzb19fbG9hZF9zZWN0aW9ucyhtb2R1bGUpOwotCi0JCWlmIChtb2R1bGUtPmFjdGl2ZSA+IDApCi0JCQljb3VudCsrOwotCX0KLQotCWlmIChmZW9mKGZpbGUpKQotCQllcnIgPSBjb3VudDsKLQllbHNlCi0JCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IG1vZHVsZXMuZGVwIHBhcnNpbmcgZmFpbHVyZSFcbiIpOwotCi1vdXRfZmFpbHVyZToKLQlpZiAoZHBhdGgpCi0JCWZyZWUoZHBhdGgpOwotCWlmIChmaWxlKQotCQlmY2xvc2UoZmlsZSk7Ci0JaWYgKGxpbmUpCi0JCWZyZWUobGluZSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgbW9kX2Rzb19fbG9hZF9tb2R1bGVzKHN0cnVjdCBtb2RfZHNvICpkc28pCi17Ci0JaW50IGVycjsKLQotCWVyciA9IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKGRzbyk7Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5oIGIvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU5MmVmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSNpZm5kZWYgX1BFUkZfTU9EVUxFXwotI2RlZmluZSBfUEVSRl9NT0RVTEVfIDEKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSAiLi4vdHlwZXMuaCIKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0KLXN0cnVjdCBzZWN0aW9uIHsKLQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOwotCXU2NAkJaGFzaDsKLQl1NjQJCXZtYTsKLQljaGFyCQkqbmFtZTsKLQljaGFyCQkqcGF0aDsKLX07Ci0KLXN0cnVjdCBzZWNfZHNvIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IHJiX3Jvb3QJIHNlY3M7Ci0Jc3RydWN0IHNlY3Rpb24gICAgKigqZmluZF9zZWN0aW9uKShzdHJ1Y3Qgc2VjX2RzbyAqLCBjb25zdCBjaGFyICpuYW1lKTsKLQljaGFyCQkgbmFtZVswXTsKLX07Ci0KLXN0cnVjdCBtb2R1bGUgewotCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7Ci0JdTY0CQloYXNoOwotCWNoYXIJCSpuYW1lOwotCWNoYXIJCSpwYXRoOwotCXN0cnVjdCBzZWNfZHNvCSpzZWN0aW9uczsKLQlpbnQJCWFjdGl2ZTsKLX07Ci0KLXN0cnVjdCBtb2RfZHNvIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IHJiX3Jvb3QJIG1vZHM7Ci0Jc3RydWN0IG1vZHVsZSAgICAqKCpmaW5kX21vZHVsZSkoc3RydWN0IG1vZF9kc28gKiwgY29uc3QgY2hhciAqbmFtZSk7Ci0JY2hhcgkJIG5hbWVbMF07Ci19OwotCi1zdHJ1Y3Qgc2VjX2RzbyAqc2VjX2Rzb19fbmV3X2Rzbyhjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgc2VjX2Rzb19fZGVsZXRlX3NlY3Rpb25zKHN0cnVjdCBzZWNfZHNvICpzZWxmKTsKLXZvaWQgc2VjX2Rzb19fZGVsZXRlX3NlbGYoc3RydWN0IHNlY19kc28gKnNlbGYpOwotc2l6ZV90IHNlY19kc29fX2ZwcmludGYoc3RydWN0IHNlY19kc28gKnNlbGYsIEZJTEUgKmZwKTsKLXN0cnVjdCBzZWN0aW9uICpzZWNfZHNvX19maW5kX3NlY3Rpb24oc3RydWN0IHNlY19kc28gKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1zdHJ1Y3QgbW9kX2RzbyAqbW9kX2Rzb19fbmV3X2Rzbyhjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMoc3RydWN0IG1vZF9kc28gKnNlbGYpOwotdm9pZCBtb2RfZHNvX19kZWxldGVfc2VsZihzdHJ1Y3QgbW9kX2RzbyAqc2VsZik7Ci1zaXplX3QgbW9kX2Rzb19fZnByaW50ZihzdHJ1Y3QgbW9kX2RzbyAqc2VsZiwgRklMRSAqZnApOwotc3RydWN0IG1vZHVsZSAqbW9kX2Rzb19fZmluZF9tb2R1bGUoc3RydWN0IG1vZF9kc28gKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgbW9kX2RzbyAqZHNvKTsKLQotI2VuZGlmIC8qIF9QRVJGX01PRFVMRV8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCA4N2M0MjRkLi45ZTVkYmQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0xLDQgKzEsNCBAQAotCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCkBAIC03LDEwICs3LDEyIEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJoZWFkZXIuaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKLWludAkJCQkJbnJfY291bnRlcnM7CitpbnQJCQkJbnJfY291bnRlcnM7CiAKIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJCWF0dHJzW01BWF9DT1VOVEVSU107CitjaGFyCQkJCSpmaWx0ZXJzW01BWF9DT1VOVEVSU107CiAKIHN0cnVjdCBldmVudF9zeW1ib2wgewogCXU4CQl0eXBlOwpAQCAtNDYsNiArNDgsOCBAQAogICB7IENTVyhQQUdFX0ZBVUxUU19NQUopLAkibWFqb3ItZmF1bHRzIiwJCSIiCQl9LAogICB7IENTVyhDT05URVhUX1NXSVRDSEVTKSwJImNvbnRleHQtc3dpdGNoZXMiLAkiY3MiCQl9LAogICB7IENTVyhDUFVfTUlHUkFUSU9OUyksCSJjcHUtbWlncmF0aW9ucyIsCSJtaWdyYXRpb25zIgl9LAorICB7IENTVyhBTElHTk1FTlRfRkFVTFRTKSwJImFsaWdubWVudC1mYXVsdHMiLAkiIgkJfSwKKyAgeyBDU1coRU1VTEFUSU9OX0ZBVUxUUyksCSJlbXVsYXRpb24tZmF1bHRzIiwJIiIJCX0sCiB9OwogCiAjZGVmaW5lIF9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIG5hbWUpIFwKQEAgLTc0LDYgKzc4LDggQEAKIAkiQ1BVLW1pZ3JhdGlvbnMiLAogCSJtaW5vci1mYXVsdHMiLAogCSJtYWpvci1mYXVsdHMiLAorCSJhbGlnbm1lbnQtZmF1bHRzIiwKKwkiZW11bGF0aW9uLWZhdWx0cyIsCiB9OwogCiAjZGVmaW5lIE1BWF9BTElBU0VTIDgKQEAgLTE0OCwxNiArMTU0LDYgQEAKIAogI2RlZmluZSBNQVhfRVZFTlRfTEVOR1RIIDUxMgogCi1pbnQgdmFsaWRfZGVidWdmc19tb3VudChjb25zdCBjaGFyICpkZWJ1Z2ZzKQotewotCXN0cnVjdCBzdGF0ZnMgc3RfZnM7Ci0KLQlpZiAoc3RhdGZzKGRlYnVnZnMsICZzdF9mcykgPCAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQllbHNlIGlmIChzdF9mcy5mX3R5cGUgIT0gKGxvbmcpIERFQlVHRlNfTUFHSUMpCi0JCXJldHVybiAtRU5PRU5UOwotCXJldHVybiAwOwotfQogCiBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cmFjZXBvaW50X2lkX3RvX3BhdGgodTY0IGNvbmZpZykKIHsKQEAgLTE3MCw3ICsxNjYsNyBAQAogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CiAJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm4gTlVMTDsKIAogCXN5c19kaXIgPSBvcGVuZGlyKGRlYnVnZnNfcGF0aCk7CkBAIC0yMDEsNyArMTk3LDcgQEAKIAkJCWlmIChpZCA9PSBjb25maWcpIHsKIAkJCQljbG9zZWRpcihldnRfZGlyKTsKIAkJCQljbG9zZWRpcihzeXNfZGlyKTsKLQkJCQlwYXRoID0gY2FsbG9jKDEsIHNpemVvZihwYXRoKSk7CisJCQkJcGF0aCA9IHphbGxvYyhzaXplb2YocGF0aCkpOwogCQkJCXBhdGgtPnN5c3RlbSA9IG1hbGxvYyhNQVhfRVZFTlRfTEVOR1RIKTsKIAkJCQlpZiAoIXBhdGgtPnN5c3RlbSkgewogCQkJCQlmcmVlKHBhdGgpOwpAQCAtNTA5LDcgKzUwNSw3IEBACiAJY2hhciBzeXNfbmFtZVtNQVhfRVZFTlRfTEVOR1RIXTsKIAl1bnNpZ25lZCBpbnQgc3lzX2xlbmd0aCwgZXZ0X2xlbmd0aDsKIAotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm4gMDsKIAogCWV2dF9uYW1lID0gc3RyY2hyKCpzdHJwLCAnOicpOwpAQCAtNTQ0LDYgKzU0MCw4MSBAQAogCQkJCQkJICAgICBhdHRyLCBzdHJwKTsKIH0KIAorc3RhdGljIGVudW0gZXZlbnRfcmVzdWx0CitwYXJzZV9icmVha3BvaW50X3R5cGUoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqKnN0cnAsCisJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmICghdHlwZVtpXSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAodHlwZVtpXSkgeworCQljYXNlICdyJzoKKwkJCWF0dHItPmJwX3R5cGUgfD0gSFdfQlJFQUtQT0lOVF9SOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJYXR0ci0+YnBfdHlwZSB8PSBIV19CUkVBS1BPSU5UX1c7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlhdHRyLT5icF90eXBlIHw9IEhXX0JSRUFLUE9JTlRfWDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEVWVF9GQUlMRUQ7CisJCX0KKwl9CisJaWYgKCFhdHRyLT5icF90eXBlKSAvKiBEZWZhdWx0ICovCisJCWF0dHItPmJwX3R5cGUgPSBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1c7CisKKwkqc3RycCA9IHR5cGUgKyBpOworCisJcmV0dXJuIEVWVF9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3BhcnNlX2JyZWFrcG9pbnRfZXZlbnQoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCit7CisJY29uc3QgY2hhciAqdGFyZ2V0OworCWNvbnN0IGNoYXIgKnR5cGU7CisJY2hhciAqZW5kYWRkcjsKKwl1NjQgYWRkcjsKKwllbnVtIGV2ZW50X3Jlc3VsdCBlcnI7CisKKwl0YXJnZXQgPSBzdHJjaHIoKnN0cnAsICc6Jyk7CisJaWYgKCF0YXJnZXQpCisJCXJldHVybiBFVlRfRkFJTEVEOworCisJaWYgKHN0cm5jbXAoKnN0cnAsICJtZW0iLCB0YXJnZXQgLSAqc3RycCkgIT0gMCkKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CisKKwl0YXJnZXQrKzsKKworCWFkZHIgPSBzdHJ0b3VsbCh0YXJnZXQsICZlbmRhZGRyLCAwKTsKKwlpZiAodGFyZ2V0ID09IGVuZGFkZHIpCisJCXJldHVybiBFVlRfRkFJTEVEOworCisJYXR0ci0+YnBfYWRkciA9IGFkZHI7CisJKnN0cnAgPSBlbmRhZGRyOworCisJdHlwZSA9IHN0cmNocih0YXJnZXQsICc6Jyk7CisKKwkvKiBJZiBubyB0eXBlIGlzIGRlZmluZWQsIGp1c3QgcncgYXMgZGVmYXVsdCAqLworCWlmICghdHlwZSkgeworCQlhdHRyLT5icF90eXBlID0gSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XOworCX0gZWxzZSB7CisJCWVyciA9IHBhcnNlX2JyZWFrcG9pbnRfdHlwZSgrK3R5cGUsIHN0cnAsIGF0dHIpOworCQlpZiAoZXJyID09IEVWVF9GQUlMRUQpCisJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKwl9CisKKwkvKiBXZSBzaG91bGQgZmluZCBhIG5pY2Ugd2F5IHRvIG92ZXJyaWRlIHRoZSBhY2Nlc3MgdHlwZSAqLworCWF0dHItPmJwX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CisJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9CUkVBS1BPSU5UOworCisJcmV0dXJuIEVWVF9IQU5ETEVEOworfQorCiBzdGF0aWMgaW50IGNoZWNrX2V2ZW50cyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBpKQogewogCWludCBuOwpAQCAtNjc3LDYgKzc0OCwxMiBAQAogCWlmIChyZXQgIT0gRVZUX0ZBSUxFRCkKIAkJZ290byBtb2RpZmllcjsKIAorCXJldCA9IHBhcnNlX2JyZWFrcG9pbnRfZXZlbnQoc3RyLCBhdHRyKTsKKwlpZiAocmV0ICE9IEVWVF9GQUlMRUQpCisJCWdvdG8gbW9kaWZpZXI7CisKKwlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZXZlbnQ6ICclcydcbiIsICpzdHIpOworCWZwcmludGYoc3RkZXJyLCAiUnVuICdwZXJmIGxpc3QnIGZvciBhIGxpc3Qgb2YgdmFsaWQgZXZlbnRzXG4iKTsKIAlyZXR1cm4gRVZUX0ZBSUxFRDsKIAogbW9kaWZpZXI6CkBAIC02OTEsNyArNzY4LDEwIEBACiAJRklMRSAqZmlsZTsKIAlpbnQgaWQ7CiAKLQlzcHJpbnRmKGZpbGVuYW1lLCAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvJXMvaWQiLCBvcmduYW1lKTsKKwlzcHJpbnRmKGZpbGVuYW1lLCAiJXMvIiwgZGVidWdmc19wYXRoKTsKKwlzdHJuY2F0KGZpbGVuYW1lLCBvcmduYW1lLCBzdHJsZW4ob3JnbmFtZSkpOworCXN0cmNhdChmaWxlbmFtZSwgIi9pZCIpOworCiAJYyA9IHN0cmNocihmaWxlbmFtZSwgJzonKTsKIAlpZiAoYykKIAkJKmMgPSAnLyc7CkBAIC03MDUsNyArNzg1LDYgQEAKIAlwZXJmX2hlYWRlcl9fcHVzaF9ldmVudChpZCwgb3JnbmFtZSk7CiB9CiAKLQogaW50IHBhcnNlX2V2ZW50cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwpAQCAtNzQyLDYgKzgyMSwyOCBAQAogCXJldHVybiAwOwogfQogCitpbnQgcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKnN0ciwKKwkJIGludCB1bnNldCBfX3VzZWQpCit7CisJaW50IGkgPSBucl9jb3VudGVycyAtIDE7CisJaW50IGxlbiA9IHN0cmxlbihzdHIpOworCisJaWYgKGkgPCAwIHx8IGF0dHJzW2ldLnR5cGUgIT0gUEVSRl9UWVBFX1RSQUNFUE9JTlQpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiLUYgb3B0aW9uIHNob3VsZCBmb2xsb3cgYSAtZSB0cmFjZXBvaW50IG9wdGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmaWx0ZXJzW2ldID0gbWFsbG9jKGxlbiArIDEpOworCWlmICghZmlsdGVyc1tpXSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGhvbGQgZmlsdGVyIHN0cmluZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJc3RyY3B5KGZpbHRlcnNbaV0sIHN0cik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBldmVudF90eXBlX2Rlc2NyaXB0b3JzW10gPSB7CiAJIiIsCiAJIkhhcmR3YXJlIGV2ZW50IiwKQEAgLTc2MSw3ICs4NjIsNyBAQAogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CiAJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAotCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpKQogCQlyZXR1cm47CiAKIAlzeXNfZGlyID0gb3BlbmRpcihkZWJ1Z2ZzX3BhdGgpOwpAQCAtNzc5LDcgKzg4MCw3IEBACiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZwcmludGYoc3RkZXJyLCAiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKKwkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKIAkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9UUkFDRVBPSU5UKzFdKTsKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKQEAgLTc5Niw4ICs4OTcsOCBAQAogCXVuc2lnbmVkIGludCBpLCB0eXBlLCBvcCwgcHJldl90eXBlID0gLTE7CiAJY2hhciBuYW1lWzQwXTsKIAotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXZlbnRfc3ltYm9scyk7IGkrKywgc3ltcysrKSB7CiAJCXR5cGUgPSBzeW1zLT50eXBlICsgMTsKQEAgLTgwNSwxOSArOTA2LDE5IEBACiAJCQl0eXBlID0gMDsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCQlwcmludGYoIlxuIik7CiAKIAkJaWYgKHN0cmxlbihzeW1zLT5hbGlhcykpCiAJCQlzcHJpbnRmKG5hbWUsICIlcyBPUiAlcyIsIHN5bXMtPnN5bWJvbCwgc3ltcy0+YWxpYXMpOwogCQllbHNlCiAJCQlzdHJjcHkobmFtZSwgc3ltcy0+c3ltYm9sKTsKLQkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsIG5hbWUsCisJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBuYW1lLAogCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1t0eXBlXSk7CiAKIAkJcHJldl90eXBlID0gdHlwZTsKIAl9CiAKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJcHJpbnRmKCJcbiIpOwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWDsgdHlwZSsrKSB7CiAJCWZvciAob3AgPSAwOyBvcCA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYOyBvcCsrKSB7CiAJCQkvKiBza2lwIGludmFsaWQgY2FjaGUgdHlwZSAqLwpAQCAtODI1LDE3ICs5MjYsMjAgQEAKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsCisJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAogCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKIAkJCX0KIAkJfQogCX0KIAotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIgICUtNDJzIFtyYXcgaGFyZHdhcmUgZXZlbnQgZGVzY3JpcHRvcl1cbiIsCiAJCSJyTk5OIik7Ci0JZnByaW50ZihzdGRlcnIsICJcbiIpOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigiICAlLTQycyBbaGFyZHdhcmUgYnJlYWtwb2ludF1cbiIsICJtZW06PGFkZHI+WzphY2Nlc3NdIik7CisJcHJpbnRmKCJcbiIpOwogCiAJcHJpbnRfdHJhY2Vwb2ludF9ldmVudHMoKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IDMwYzYwODEuLmI4YzFmNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9QQVJTRV9FVkVOVFNfSAotI2RlZmluZSBfUEFSU0VfRVZFTlRTX0gKKyNpZm5kZWYgX19QRVJGX1BBUlNFX0VWRU5UU19ICisjZGVmaW5lIF9fUEVSRl9QQVJTRV9FVkVOVFNfSAogLyoKICAqIFBhcnNlIHN5bWJvbGljIGV2ZW50cy9jb3VudHMgcGFzc2VkIGluIGFzIG9wdGlvbnM6CiAgKi8KQEAgLTE3LDExICsxNywxMyBAQAogZXh0ZXJuIGludAkJCW5yX2NvdW50ZXJzOwogCiBleHRlcm4gc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyc1tNQVhfQ09VTlRFUlNdOworZXh0ZXJuIGNoYXIgKmZpbHRlcnNbTUFYX0NPVU5URVJTXTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmV2ZW50X25hbWUoaW50IGN0cik7CiBleHRlcm4gY29uc3QgY2hhciAqX19ldmVudF9uYW1lKGludCB0eXBlLCB1NjQgY29uZmlnKTsKIAogZXh0ZXJuIGludCBwYXJzZV9ldmVudHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCk7CitleHRlcm4gaW50IHBhcnNlX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHVuc2V0KTsKIAogI2RlZmluZSBFVkVOVFNfSEVMUF9NQVggKDEyOCoxMDI0KQogCkBAIC0zMSw0ICszMyw0IEBACiBleHRlcm4gaW50IHZhbGlkX2RlYnVnZnNfbW91bnQoY29uc3QgY2hhciAqZGVidWdmcyk7CiAKIAotI2VuZGlmIC8qIF9QQVJTRV9FVkVOVFNfSCAqLworI2VuZGlmIC8qIF9fUEVSRl9QQVJTRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKaW5kZXggMmVlMjQ4Zi4uOTQ4ODA1YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBQQVJTRV9PUFRJT05TX0gKLSNkZWZpbmUgUEFSU0VfT1BUSU9OU19ICisjaWZuZGVmIF9fUEVSRl9QQVJTRV9PUFRJT05TX0gKKyNkZWZpbmUgX19QRVJGX1BBUlNFX09QVElPTlNfSAogCiBlbnVtIHBhcnNlX29wdF90eXBlIHsKIAkvKiBzcGVjaWFsIHR5cGVzICovCkBAIC0xNzQsNCArMTc0LDQgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKnBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZmlsZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fUEVSRl9QQVJTRV9PUFRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3ZmJkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogcHJvYmUtZXZlbnQuYyA6IHBlcmYtcHJvYmUgZGVmaW5pdGlvbiB0byBrcHJvYmVfZXZlbnRzIGZvcm1hdCBjb252ZXJ0ZXIKKyAqCisgKiBXcml0dGVuIGJ5IE1hc2FtaSBIaXJhbWF0c3UgPG1oaXJhbWF0QHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI3VuZGVmIF9HTlVfU09VUkNFCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJzdHJsaXN0LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIgIC8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KKyNpbmNsdWRlICJwcm9iZS1ldmVudC5oIgorCisjZGVmaW5lIE1BWF9DTURMRU4gMjU2CisjZGVmaW5lIE1BWF9QUk9CRV9BUkdTIDEyOAorI2RlZmluZSBQRVJGUFJPQkVfR1JPVVAgInByb2JlIgorCisjZGVmaW5lIHNlbWFudGljX2Vycm9yKG1zZyAuLi4pIGRpZSgiU2VtYW50aWMgZXJyb3IgOiIgbXNnKQorCisvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSB0byB3cml0ZSwgcmV0dXJucyAtRTJCSUcuICovCitzdGF0aWMgaW50IGVfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXJldCA9IHZzbnByaW50ZihzdHIsIHNpemUsIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA+PSAoaW50KXNpemUpCisJCXJldCA9IC1FMkJJRzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBQYXJzZSBwcm9iZXBvaW50IGRlZmluaXRpb24uICovCitzdGF0aWMgdm9pZCBwYXJzZV9wZXJmX3Byb2JlX3Byb2JlcG9pbnQoY2hhciAqYXJnLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQoreworCWNoYXIgKnB0ciwgKnRtcDsKKwljaGFyIGMsIG5jID0gMDsKKwkvKgorCSAqIDxTeW50YXg+CisJICogcGVyZiBwcm9iZSBTUkM6TE4KKwkgKiBwZXJmIHByb2JlIEZVTkNbK09GRlN8JXJldHVybl1bQFNSQ10KKwkgKi8KKworCXB0ciA9IHN0cnBicmsoYXJnLCAiOitAJSIpOworCWlmIChwdHIpIHsKKwkJbmMgPSAqcHRyOworCQkqcHRyKysgPSAnXDAnOworCX0KKworCS8qIENoZWNrIGFyZyBpcyBmdW5jdGlvbiBvciBmaWxlIGFuZCBjb3B5IGl0ICovCisJaWYgKHN0cmNocihhcmcsICcuJykpCS8qIEZpbGUgKi8KKwkJcHAtPmZpbGUgPSBzdHJkdXAoYXJnKTsKKwllbHNlCQkJLyogRnVuY3Rpb24gKi8KKwkJcHAtPmZ1bmN0aW9uID0gc3RyZHVwKGFyZyk7CisJRElFX0lGKHBwLT5maWxlID09IE5VTEwgJiYgcHAtPmZ1bmN0aW9uID09IE5VTEwpOworCisJLyogUGFyc2Ugb3RoZXIgb3B0aW9ucyAqLworCXdoaWxlIChwdHIpIHsKKwkJYXJnID0gcHRyOworCQljID0gbmM7CisJCXB0ciA9IHN0cnBicmsoYXJnLCAiOitAJSIpOworCQlpZiAocHRyKSB7CisJCQluYyA9ICpwdHI7CisJCQkqcHRyKysgPSAnXDAnOworCQl9CisJCXN3aXRjaCAoYykgeworCQljYXNlICc6JzoJLyogTGluZSBudW1iZXIgKi8KKwkJCXBwLT5saW5lID0gc3RydG91bChhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXAgIT0gJ1wwJykKKwkJCQlzZW1hbnRpY19lcnJvcigiVGhlcmUgaXMgbm9uLWRpZ2l0IGNoYXJhY3RvciIKKwkJCQkJCSIgaW4gbGluZSBudW1iZXIuIik7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CS8qIEJ5dGUgb2Zmc2V0IGZyb20gYSBzeW1ib2wgKi8KKwkJCXBwLT5vZmZzZXQgPSBzdHJ0b3VsKGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCAhPSAnXDAnKQorCQkJCXNlbWFudGljX2Vycm9yKCJUaGVyZSBpcyBub24tZGlnaXQgY2hhcmFjdG9yIgorCQkJCQkJIiBpbiBvZmZzZXQuIik7CisJCQlicmVhazsKKwkJY2FzZSAnQCc6CS8qIEZpbGUgbmFtZSAqLworCQkJaWYgKHBwLT5maWxlKQorCQkJCXNlbWFudGljX2Vycm9yKCJTUkNAU1JDIGlzIG5vdCBhbGxvd2VkLiIpOworCQkJcHAtPmZpbGUgPSBzdHJkdXAoYXJnKTsKKwkJCURJRV9JRihwcC0+ZmlsZSA9PSBOVUxMKTsKKwkJCWlmIChwdHIpCisJCQkJc2VtYW50aWNfZXJyb3IoIkBTUkMgbXVzdCBiZSB0aGUgbGFzdCAiCisJCQkJCSAgICAgICAib3B0aW9uLiIpOworCQkJYnJlYWs7CisJCWNhc2UgJyUnOgkvKiBQcm9iZSBwbGFjZXMgKi8KKwkJCWlmIChzdHJjbXAoYXJnLCAicmV0dXJuIikgPT0gMCkgeworCQkJCXBwLT5yZXRwcm9iZSA9IDE7CisJCQl9IGVsc2UJLyogT3RoZXJzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCQkJc2VtYW50aWNfZXJyb3IoIiUlJXMgaXMgbm90IHN1cHBvcnRlZC4iLCBhcmcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlESUVfSUYoIlByb2dyYW0gaGFzIGEgYnVnLiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBFeGNsdXNpb24gY2hlY2sgKi8KKwlpZiAocHAtPmxpbmUgJiYgcHAtPm9mZnNldCkKKwkJc2VtYW50aWNfZXJyb3IoIk9mZnNldCBjYW4ndCBiZSB1c2VkIHdpdGggbGluZSBudW1iZXIuIik7CisKKwlpZiAoIXBwLT5saW5lICYmIHBwLT5maWxlICYmICFwcC0+ZnVuY3Rpb24pCisJCXNlbWFudGljX2Vycm9yKCJGaWxlIGFsd2F5cyByZXF1aXJlcyBsaW5lIG51bWJlci4iKTsKKworCWlmIChwcC0+b2Zmc2V0ICYmICFwcC0+ZnVuY3Rpb24pCisJCXNlbWFudGljX2Vycm9yKCJPZmZzZXQgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uIik7CisKKwlpZiAocHAtPnJldHByb2JlICYmICFwcC0+ZnVuY3Rpb24pCisJCXNlbWFudGljX2Vycm9yKCJSZXR1cm4gcHJvYmUgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uIik7CisKKwlpZiAoKHBwLT5vZmZzZXQgfHwgcHAtPmxpbmUpICYmIHBwLT5yZXRwcm9iZSkKKwkJc2VtYW50aWNfZXJyb3IoIk9mZnNldC9MaW5lIGNhbid0IGJlIHVzZWQgd2l0aCByZXR1cm4gcHJvYmUuIik7CisKKwlwcl9kZWJ1Zygic3ltYm9sOiVzIGZpbGU6JXMgbGluZTolZCBvZmZzZXQ6JWQsIHJldHVybjolZFxuIiwKKwkJIHBwLT5mdW5jdGlvbiwgcHAtPmZpbGUsIHBwLT5saW5lLCBwcC0+b2Zmc2V0LCBwcC0+cmV0cHJvYmUpOworfQorCisvKiBQYXJzZSBwZXJmLXByb2JlIGV2ZW50IGRlZmluaXRpb24gKi8KK2ludCBwYXJzZV9wZXJmX3Byb2JlX2V2ZW50KGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwljaGFyICoqYXJndjsKKwlpbnQgYXJnYywgaSwgbmVlZF9kd2FyZiA9IDA7CisKKwlhcmd2ID0gYXJndl9zcGxpdChzdHIsICZhcmdjKTsKKwlpZiAoIWFyZ3YpCisJCWRpZSgiYXJndl9zcGxpdCBmYWlsZWQuIik7CisJaWYgKGFyZ2MgPiBNQVhfUFJPQkVfQVJHUyArIDEpCisJCXNlbWFudGljX2Vycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKTsKKworCS8qIFBhcnNlIHByb2JlIHBvaW50ICovCisJcGFyc2VfcGVyZl9wcm9iZV9wcm9iZXBvaW50KGFyZ3ZbMF0sIHBwKTsKKwlpZiAocHAtPmZpbGUgfHwgcHAtPmxpbmUpCisJCW5lZWRfZHdhcmYgPSAxOworCisJLyogQ29weSBhcmd1bWVudHMgYW5kIGVuc3VyZSByZXR1cm4gcHJvYmUgaGFzIG5vIEMgYXJndW1lbnQgKi8KKwlwcC0+bnJfYXJncyA9IGFyZ2MgLSAxOworCXBwLT5hcmdzID0gemFsbG9jKHNpemVvZihjaGFyICopICogcHAtPm5yX2FyZ3MpOworCWZvciAoaSA9IDA7IGkgPCBwcC0+bnJfYXJnczsgaSsrKSB7CisJCXBwLT5hcmdzW2ldID0gc3RyZHVwKGFyZ3ZbaSArIDFdKTsKKwkJaWYgKCFwcC0+YXJnc1tpXSkKKwkJCWRpZSgiRmFpbGVkIHRvIGNvcHkgYXJndW1lbnQuIik7CisJCWlmIChpc19jX3Zhcm5hbWUocHAtPmFyZ3NbaV0pKSB7CisJCQlpZiAocHAtPnJldHByb2JlKQorCQkJCXNlbWFudGljX2Vycm9yKCJZb3UgY2FuJ3Qgc3BlY2lmeSBsb2NhbCIKKwkJCQkJCSIgdmFyaWFibGUgZm9yIGtyZXRwcm9iZSIpOworCQkJbmVlZF9kd2FyZiA9IDE7CisJCX0KKwl9CisKKwlhcmd2X2ZyZWUoYXJndik7CisJcmV0dXJuIG5lZWRfZHdhcmY7Cit9CisKKy8qIFBhcnNlIGtwcm9iZV9ldmVudHMgZXZlbnQgaW50byBzdHJ1Y3QgcHJvYmVfcG9pbnQgKi8KK3ZvaWQgcGFyc2VfdHJhY2Vfa3Byb2JlX2V2ZW50KGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmdyb3VwLCBjaGFyICoqZXZlbnQsCisJCQkgICAgICBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQoreworCWNoYXIgcHI7CisJY2hhciAqcDsKKwlpbnQgcmV0LCBpLCBhcmdjOworCWNoYXIgKiphcmd2OworCisJcHJfZGVidWcoIlBhcnNpbmcga3Byb2JlX2V2ZW50czogJXNcbiIsIHN0cik7CisJYXJndiA9IGFyZ3Zfc3BsaXQoc3RyLCAmYXJnYyk7CisJaWYgKCFhcmd2KQorCQlkaWUoImFyZ3Zfc3BsaXQgZmFpbGVkLiIpOworCWlmIChhcmdjIDwgMikKKwkJc2VtYW50aWNfZXJyb3IoIlRvbyBsZXNzIGFyZ3VtZW50cy4iKTsKKworCS8qIFNjYW4gZXZlbnQgYW5kIGdyb3VwIG5hbWUuICovCisJcmV0ID0gc3NjYW5mKGFyZ3ZbMF0sICIlYzolYVteLyBcdF0vJWFbXiBcdF0iLAorCQkgICAgICZwciwgKGZsb2F0ICopKHZvaWQgKilncm91cCwgKGZsb2F0ICopKHZvaWQgKilldmVudCk7CisJaWYgKHJldCAhPSAzKQorCQlzZW1hbnRpY19lcnJvcigiRmFpbGVkIHRvIHBhcnNlIGV2ZW50IG5hbWU6ICVzIiwgYXJndlswXSk7CisJcHJfZGVidWcoIkdyb3VwOiVzIEV2ZW50OiVzIHByb2JlOiVjXG4iLCAqZ3JvdXAsICpldmVudCwgcHIpOworCisJaWYgKCFwcCkKKwkJZ290byBlbmQ7CisKKwlwcC0+cmV0cHJvYmUgPSAocHIgPT0gJ3InKTsKKworCS8qIFNjYW4gZnVuY3Rpb24gbmFtZSBhbmQgb2Zmc2V0ICovCisJcmV0ID0gc3NjYW5mKGFyZ3ZbMV0sICIlYVteK10rJWQiLCAoZmxvYXQgKikodm9pZCAqKSZwcC0+ZnVuY3Rpb24sICZwcC0+b2Zmc2V0KTsKKwlpZiAocmV0ID09IDEpCisJCXBwLT5vZmZzZXQgPSAwOworCisJLyoga3Byb2JlX2V2ZW50cyBkb2Vzbid0IGhhdmUgdGhpcyBpbmZvcm1hdGlvbiAqLworCXBwLT5saW5lID0gMDsKKwlwcC0+ZmlsZSA9IE5VTEw7CisKKwlwcC0+bnJfYXJncyA9IGFyZ2MgLSAyOworCXBwLT5hcmdzID0gemFsbG9jKHNpemVvZihjaGFyICopICogcHAtPm5yX2FyZ3MpOworCWZvciAoaSA9IDA7IGkgPCBwcC0+bnJfYXJnczsgaSsrKSB7CisJCXAgPSBzdHJjaHIoYXJndltpICsgMl0sICc9Jyk7CisJCWlmIChwKQkvKiBXZSBkb24ndCBuZWVkIHdoaWNoIHJlZ2lzdGVyIGlzIGFzc2lnbmVkLiAqLworCQkJKnAgPSAnXDAnOworCQlwcC0+YXJnc1tpXSA9IHN0cmR1cChhcmd2W2kgKyAyXSk7CisJCWlmICghcHAtPmFyZ3NbaV0pCisJCQlkaWUoIkZhaWxlZCB0byBjb3B5IGFyZ3VtZW50LiIpOworCX0KKworZW5kOgorCWFyZ3ZfZnJlZShhcmd2KTsKK30KKworaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9ldmVudChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKQoreworCWNoYXIgKmJ1ZjsKKwljaGFyIG9mZnNbNjRdID0gIiIsIGxpbmVbNjRdID0gIiI7CisJaW50IGksIGxlbiwgcmV0OworCisJcHAtPnByb2Jlc1swXSA9IGJ1ZiA9IHphbGxvYyhNQVhfQ01ETEVOKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGJ5IHphbGxvYy4iKTsKKwlpZiAocHAtPm9mZnNldCkgeworCQlyZXQgPSBlX3NucHJpbnRmKG9mZnMsIDY0LCAiKyVkIiwgcHAtPm9mZnNldCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCWlmIChwcC0+bGluZSkgeworCQlyZXQgPSBlX3NucHJpbnRmKGxpbmUsIDY0LCAiOiVkIiwgcHAtPmxpbmUpOworCQlpZiAocmV0IDw9IDApCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmIChwcC0+ZnVuY3Rpb24pCisJCXJldCA9IGVfc25wcmludGYoYnVmLCBNQVhfQ01ETEVOLCAiJXMlcyVzJXMiLCBwcC0+ZnVuY3Rpb24sCisJCQkJIG9mZnMsIHBwLT5yZXRwcm9iZSA/ICIlcmV0dXJuIiA6ICIiLCBsaW5lKTsKKwllbHNlCisJCXJldCA9IGVfc25wcmludGYoYnVmLCBNQVhfQ01ETEVOLCAiJXMlcyVzJXMiLCBwcC0+ZmlsZSwgbGluZSk7CisJaWYgKHJldCA8PSAwKQorCQlnb3RvIGVycm9yOworCWxlbiA9IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBwcC0+bnJfYXJnczsgaSsrKSB7CisJCXJldCA9IGVfc25wcmludGYoJmJ1ZltsZW5dLCBNQVhfQ01ETEVOIC0gbGVuLCAiICVzIiwKKwkJCQkgcHAtPmFyZ3NbaV0pOworCQlpZiAocmV0IDw9IDApCisJCQlnb3RvIGVycm9yOworCQlsZW4gKz0gcmV0OworCX0KKwlwcC0+Zm91bmQgPSAxOworCisJcmV0dXJuIHBwLT5mb3VuZDsKK2Vycm9yOgorCWZyZWUocHAtPnByb2Jlc1swXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc3ludGhlc2l6ZV90cmFjZV9rcHJvYmVfZXZlbnQoc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK3sKKwljaGFyICpidWY7CisJaW50IGksIGxlbiwgcmV0OworCisJcHAtPnByb2Jlc1swXSA9IGJ1ZiA9IHphbGxvYyhNQVhfQ01ETEVOKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGJ5IHphbGxvYy4iKTsKKwlyZXQgPSBlX3NucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVzKyVkIiwgcHAtPmZ1bmN0aW9uLCBwcC0+b2Zmc2V0KTsKKwlpZiAocmV0IDw9IDApCisJCWdvdG8gZXJyb3I7CisJbGVuID0gcmV0OworCisJZm9yIChpID0gMDsgaSA8IHBwLT5ucl9hcmdzOyBpKyspIHsKKwkJcmV0ID0gZV9zbnByaW50ZigmYnVmW2xlbl0sIE1BWF9DTURMRU4gLSBsZW4sICIgJXMiLAorCQkJCSBwcC0+YXJnc1tpXSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWdvdG8gZXJyb3I7CisJCWxlbiArPSByZXQ7CisJfQorCXBwLT5mb3VuZCA9IDE7CisKKwlyZXR1cm4gcHAtPmZvdW5kOworZXJyb3I6CisJZnJlZShwcC0+cHJvYmVzWzBdKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9rcHJvYmVfZXZlbnRzKGludCBmbGFncywgaW50IG1vZGUpCit7CisJY2hhciBidWZbUEFUSF9NQVhdOworCWludCByZXQ7CisKKwlyZXQgPSBlX3NucHJpbnRmKGJ1ZiwgUEFUSF9NQVgsICIlcy8uLi9rcHJvYmVfZXZlbnRzIiwgZGVidWdmc19wYXRoKTsKKwlpZiAocmV0IDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gbWFrZSBrcHJvYmVfZXZlbnRzIHBhdGguIik7CisKKwlyZXQgPSBvcGVuKGJ1ZiwgZmxhZ3MsIG1vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlkaWUoImtwcm9iZV9ldmVudHMgZmlsZSBkb2VzIG5vdCBleGlzdCAtIgorCQkJICAgICIgcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfS1BST0JFX1RSQUNFUi4iKTsKKwkJZWxzZQorCQkJZGllKCJDb3VsZCBub3Qgb3BlbiBrcHJvYmVfZXZlbnRzIGZpbGU6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBHZXQgcmF3IHN0cmluZyBsaXN0IG9mIGN1cnJlbnQga3Byb2JlX2V2ZW50cyAqLworc3RhdGljIHN0cnVjdCBzdHJsaXN0ICpnZXRfdHJhY2Vfa3Byb2JlX2V2ZW50X3Jhd2xpc3QoaW50IGZkKQoreworCWludCByZXQsIGlkeDsKKwlGSUxFICpmcDsKKwljaGFyIGJ1ZltNQVhfQ01ETEVOXTsKKwljaGFyICpwOworCXN0cnVjdCBzdHJsaXN0ICpzbDsKKworCXNsID0gc3RybGlzdF9fbmV3KHRydWUsIE5VTEwpOworCisJZnAgPSBmZG9wZW4oZHVwKGZkKSwgInIiKTsKKwl3aGlsZSAoIWZlb2YoZnApKSB7CisJCXAgPSBmZ2V0cyhidWYsIE1BWF9DTURMRU4sIGZwKTsKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisKKwkJaWR4ID0gc3RybGVuKHApIC0gMTsKKwkJaWYgKHBbaWR4XSA9PSAnXG4nKQorCQkJcFtpZHhdID0gJ1wwJzsKKwkJcmV0ID0gc3RybGlzdF9fYWRkKHNsLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCWRpZSgic3RybGlzdF9fYWRkIGZhaWxlZDogJXMiLCBzdHJlcnJvcigtcmV0KSk7CisJfQorCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gc2w7Cit9CisKKy8qIEZyZWUgYW5kIHplcm8gY2xlYXIgcHJvYmVfcG9pbnQgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3Byb2JlX3BvaW50KHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCit7CisJaW50IGk7CisKKwlpZiAocHAtPmZ1bmN0aW9uKQorCQlmcmVlKHBwLT5mdW5jdGlvbik7CisJaWYgKHBwLT5maWxlKQorCQlmcmVlKHBwLT5maWxlKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHAtPm5yX2FyZ3M7IGkrKykKKwkJZnJlZShwcC0+YXJnc1tpXSk7CisJaWYgKHBwLT5hcmdzKQorCQlmcmVlKHBwLT5hcmdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHAtPmZvdW5kOyBpKyspCisJCWZyZWUocHAtPnByb2Jlc1tpXSk7CisJbWVtc2V0KHBwLCAwLCBzaXplb2YocHApKTsKK30KKworLyogTGlzdCB1cCBjdXJyZW50IHBlcmYtcHJvYmUgZXZlbnRzICovCit2b2lkIHNob3dfcGVyZl9wcm9iZV9ldmVudHModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZmQ7CisJY2hhciAqZ3JvdXAsICpldmVudDsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHA7CisJc3RydWN0IHN0cmxpc3QgKnJhd2xpc3Q7CisJc3RydWN0IHN0cl9ub2RlICplbnQ7CisKKwlmZCA9IG9wZW5fa3Byb2JlX2V2ZW50cyhPX1JET05MWSwgMCk7CisJcmF3bGlzdCA9IGdldF90cmFjZV9rcHJvYmVfZXZlbnRfcmF3bGlzdChmZCk7CisJY2xvc2UoZmQpOworCisJZm9yIChpID0gMDsgaSA8IHN0cmxpc3RfX25yX2VudHJpZXMocmF3bGlzdCk7IGkrKykgeworCQllbnQgPSBzdHJsaXN0X19lbnRyeShyYXdsaXN0LCBpKTsKKwkJcGFyc2VfdHJhY2Vfa3Byb2JlX2V2ZW50KGVudC0+cywgJmdyb3VwLCAmZXZlbnQsICZwcCk7CisJCXN5bnRoZXNpemVfcGVyZl9wcm9iZV9ldmVudCgmcHApOworCQlwcmludGYoIlslczolc11cdCVzXG4iLCBncm91cCwgZXZlbnQsIHBwLnByb2Jlc1swXSk7CisJCWZyZWUoZ3JvdXApOworCQlmcmVlKGV2ZW50KTsKKwkJY2xlYXJfcHJvYmVfcG9pbnQoJnBwKTsKKwl9CisKKwlzdHJsaXN0X19kZWxldGUocmF3bGlzdCk7Cit9CisKKy8qIEdldCBjdXJyZW50IHBlcmYtcHJvYmUgZXZlbnQgbmFtZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X3BlcmZfZXZlbnRfbmFtZXMoaW50IGZkKQoreworCXVuc2lnbmVkIGludCBpOworCWNoYXIgKmdyb3VwLCAqZXZlbnQ7CisJc3RydWN0IHN0cmxpc3QgKnNsLCAqcmF3bGlzdDsKKwlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKKworCXJhd2xpc3QgPSBnZXRfdHJhY2Vfa3Byb2JlX2V2ZW50X3Jhd2xpc3QoZmQpOworCisJc2wgPSBzdHJsaXN0X19uZXcoZmFsc2UsIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBzdHJsaXN0X19ucl9lbnRyaWVzKHJhd2xpc3QpOyBpKyspIHsKKwkJZW50ID0gc3RybGlzdF9fZW50cnkocmF3bGlzdCwgaSk7CisJCXBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChlbnQtPnMsICZncm91cCwgJmV2ZW50LCBOVUxMKTsKKwkJc3RybGlzdF9fYWRkKHNsLCBldmVudCk7CisJCWZyZWUoZ3JvdXApOworCX0KKworCXN0cmxpc3RfX2RlbGV0ZShyYXdsaXN0KTsKKworCXJldHVybiBzbDsKK30KKworc3RhdGljIGludCB3cml0ZV90cmFjZV9rcHJvYmVfZXZlbnQoaW50IGZkLCBjb25zdCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKworCXJldCA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTsKKwlpZiAocmV0IDw9IDApCisJCWRpZSgiRmFpbGVkIHRvIGNyZWF0ZSBldmVudC4iKTsKKwllbHNlCisJCXByaW50ZigiQWRkZWQgbmV3IGV2ZW50OiAlc1xuIiwgYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9uZXdfZXZlbnRfbmFtZShjaGFyICpidWYsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmJhc2UsCisJCQkgICAgICAgc3RydWN0IHN0cmxpc3QgKm5hbWVsaXN0KQoreworCWludCBpLCByZXQ7CisJZm9yIChpID0gMDsgaSA8IE1BWF9FVkVOVF9JTkRFWDsgaSsrKSB7CisJCXJldCA9IGVfc25wcmludGYoYnVmLCBsZW4sICIlc18lZCIsIGJhc2UsIGkpOworCQlpZiAocmV0IDwgMCkKKwkJCWRpZSgic25wcmludGYoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoLXJldCkpOworCQlpZiAoIXN0cmxpc3RfX2hhc19lbnRyeShuYW1lbGlzdCwgYnVmKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBNQVhfRVZFTlRfSU5ERVgpCisJCWRpZSgiVG9vIG1hbnkgZXZlbnRzIGFyZSBvbiB0aGUgc2FtZSBmdW5jdGlvbi4iKTsKK30KKwordm9pZCBhZGRfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzdHJ1Y3QgcHJvYmVfcG9pbnQgKnByb2JlcywgaW50IG5yX3Byb2JlcykKK3sKKwlpbnQgaSwgaiwgZmQ7CisJc3RydWN0IHByb2JlX3BvaW50ICpwcDsKKwljaGFyIGJ1ZltNQVhfQ01ETEVOXTsKKwljaGFyIGV2ZW50WzY0XTsKKwlzdHJ1Y3Qgc3RybGlzdCAqbmFtZWxpc3Q7CisKKwlmZCA9IG9wZW5fa3Byb2JlX2V2ZW50cyhPX1JEV1IsIE9fQVBQRU5EKTsKKwkvKiBHZXQgY3VycmVudCBldmVudCBuYW1lcyAqLworCW5hbWVsaXN0ID0gZ2V0X3BlcmZfZXZlbnRfbmFtZXMoZmQpOworCisJZm9yIChqID0gMDsgaiA8IG5yX3Byb2JlczsgaisrKSB7CisJCXBwID0gcHJvYmVzICsgajsKKwkJZm9yIChpID0gMDsgaSA8IHBwLT5mb3VuZDsgaSsrKSB7CisJCQkvKiBHZXQgYW4gdW51c2VkIG5ldyBldmVudCBuYW1lICovCisJCQlnZXRfbmV3X2V2ZW50X25hbWUoZXZlbnQsIDY0LCBwcC0+ZnVuY3Rpb24sIG5hbWVsaXN0KTsKKwkJCXNucHJpbnRmKGJ1ZiwgTUFYX0NNRExFTiwgIiVjOiVzLyVzICVzXG4iLAorCQkJCSBwcC0+cmV0cHJvYmUgPyAncicgOiAncCcsCisJCQkJIFBFUkZQUk9CRV9HUk9VUCwgZXZlbnQsCisJCQkJIHBwLT5wcm9iZXNbaV0pOworCQkJd3JpdGVfdHJhY2Vfa3Byb2JlX2V2ZW50KGZkLCBidWYpOworCQkJLyogQWRkIGFkZGVkIGV2ZW50IG5hbWUgdG8gbmFtZWxpc3QgKi8KKwkJCXN0cmxpc3RfX2FkZChuYW1lbGlzdCwgZXZlbnQpOworCQl9CisJfQorCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2ZmU1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX1BST0JFX0VWRU5UX0gKKyNkZWZpbmUgX1BST0JFX0VWRU5UX0gKKworI2luY2x1ZGUgInByb2JlLWZpbmRlci5oIgorI2luY2x1ZGUgInN0cmxpc3QuaCIKKworZXh0ZXJuIGludCBwYXJzZV9wZXJmX3Byb2JlX2V2ZW50KGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9ldmVudChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKK2V4dGVybiB2b2lkIHBhcnNlX3RyYWNlX2twcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipncm91cCwKKwkJCQkgICAgIGNoYXIgKipldmVudCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gaW50IHN5bnRoZXNpemVfdHJhY2Vfa3Byb2JlX2V2ZW50KHN0cnVjdCBwcm9iZV9wb2ludCAqcHApOworZXh0ZXJuIHZvaWQgYWRkX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHByb2JlX3BvaW50ICpwcm9iZXMsIGludCBucl9wcm9iZXMpOworZXh0ZXJuIHZvaWQgc2hvd19wZXJmX3Byb2JlX2V2ZW50cyh2b2lkKTsKKworLyogTWF4aW11bSBpbmRleCBudW1iZXIgb2YgZXZlbnQtbmFtZSBwb3N0Zml4ICovCisjZGVmaW5lIE1BWF9FVkVOVF9JTkRFWAkxMDI0CisKKyNlbmRpZiAvKl9QUk9CRV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzY2RmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtMCwwICsxLDczMiBAQAorLyoKKyAqIHByb2JlLWZpbmRlci5jIDogQyBleHByZXNzaW9uIHRvIGtwcm9iZSBldmVudCBjb252ZXJ0ZXIKKyAqCisgKiBXcml0dGVuIGJ5IE1hc2FtaSBIaXJhbWF0c3UgPG1oaXJhbWF0QHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJwcm9iZS1maW5kZXIuaCIKKworCisvKiBEd2FyZl9EaWUgTGlua2FnZSB0byBwYXJlbnQgRGllICovCitzdHJ1Y3QgZGllX2xpbmsgeworCXN0cnVjdCBkaWVfbGluayAqcGFyZW50OwkvKiBQYXJlbnQgZGllICovCisJRHdhcmZfRGllIGRpZTsJCQkvKiBDdXJyZW50IGRpZSAqLworfTsKKworc3RhdGljIER3YXJmX0RlYnVnIF9fZHdfZGVidWc7CitzdGF0aWMgRHdhcmZfRXJyb3IgX19kd19lcnJvcjsKKworLyoKKyAqIEdlbmVyaWMgZHdhcmYgYW5hbHlzaXMgaGVscGVycworICovCisKKyNkZWZpbmUgWDg2XzMyX01BWF9SRUdTIDgKK2NvbnN0IGNoYXIgKng4Nl8zMl9yZWdzX3RhYmxlW1g4Nl8zMl9NQVhfUkVHU10gPSB7CisJIiVheCIsCisJIiVjeCIsCisJIiVkeCIsCisJIiVieCIsCisJIiRzdGFjayIsCS8qIFN0YWNrIGFkZHJlc3MgaW5zdGVhZCBvZiAlc3AgKi8KKwkiJWJwIiwKKwkiJXNpIiwKKwkiJWRpIiwKK307CisKKyNkZWZpbmUgWDg2XzY0X01BWF9SRUdTIDE2Citjb25zdCBjaGFyICp4ODZfNjRfcmVnc190YWJsZVtYODZfNjRfTUFYX1JFR1NdID0geworCSIlYXgiLAorCSIlZHgiLAorCSIlY3giLAorCSIlYngiLAorCSIlc2kiLAorCSIlZGkiLAorCSIlYnAiLAorCSIlc3AiLAorCSIlcjgiLAorCSIlcjkiLAorCSIlcjEwIiwKKwkiJXIxMSIsCisJIiVyMTIiLAorCSIlcjEzIiwKKwkiJXIxNCIsCisJIiVyMTUiLAorfTsKKworLyogVE9ETzogc3dpdGNoaW5nIGJ5IGR3YXJmIGFkZHJlc3Mgc2l6ZSAqLworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgQVJDSF9NQVhfUkVHUyBYODZfNjRfTUFYX1JFR1MKKyNkZWZpbmUgYXJjaF9yZWdzX3RhYmxlIHg4Nl82NF9yZWdzX3RhYmxlCisjZWxzZQorI2RlZmluZSBBUkNIX01BWF9SRUdTIFg4Nl8zMl9NQVhfUkVHUworI2RlZmluZSBhcmNoX3JlZ3NfdGFibGUgeDg2XzMyX3JlZ3NfdGFibGUKKyNlbmRpZgorCisvKiBSZXR1cm4gYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCByZWdpc3RlciBzdHJpbmcgKGZvciBrcHJvYmUtdHJhY2VyKSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9hcmNoX3JlZ3N0cih1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gKG4gPD0gQVJDSF9NQVhfUkVHUykgPyBhcmNoX3JlZ3NfdGFibGVbbl0gOiBOVUxMOworfQorCisvKgorICogQ29tcGFyZSB0aGUgdGFpbCBvZiB0d28gc3RyaW5ncy4KKyAqIFJldHVybiAwIGlmIHdob2xlIG9mIGVpdGhlciBzdHJpbmcgaXMgc2FtZSBhcyBhbm90aGVyJ3MgdGFpbCBwYXJ0LgorICovCitzdGF0aWMgaW50IHN0cnRhaWxjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWludCBpMSA9IHN0cmxlbihzMSk7CisJaW50IGkyID0gc3RybGVuKHMyKTsKKwl3aGlsZSAoLS1pMSA+IDAgJiYgLS1pMiA+IDApIHsKKwkJaWYgKHMxW2kxXSAhPSBzMltpMl0pCisJCQlyZXR1cm4gczFbaTFdIC0gczJbaTJdOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogRmluZCB0aGUgZmlsZW5vIG9mIHRoZSB0YXJnZXQgZmlsZS4gKi8KK3N0YXRpYyBEd2FyZl9VbnNpZ25lZCBjdV9maW5kX2ZpbGVubyhEd2FyZl9EaWUgY3VfZGllLCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlEd2FyZl9TaWduZWQgY250LCBpOworCUR3YXJmX1Vuc2lnbmVkIGZvdW5kID0gMDsKKwljaGFyICoqc3JjczsKKwlpbnQgcmV0OworCisJaWYgKCFmbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkd2FyZl9zcmNmaWxlcyhjdV9kaWUsICZzcmNzLCAmY250LCAmX19kd19lcnJvcik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spIHsKKwkJZm9yIChpID0gMDsgaSA8IGNudCAmJiAhZm91bmQ7IGkrKykgeworCQkJaWYgKHN0cnRhaWxjbXAoc3Jjc1tpXSwgZm5hbWUpID09IDApCisJCQkJZm91bmQgPSBpICsgMTsKKwkJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1Zywgc3Jjc1tpXSwgRFdfRExBX1NUUklORyk7CisJCX0KKwkJZm9yICg7IGkgPCBjbnQ7IGkrKykKKwkJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1Zywgc3Jjc1tpXSwgRFdfRExBX1NUUklORyk7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1Zywgc3JjcywgRFdfRExBX0xJU1QpOworCX0KKwlpZiAoZm91bmQpCisJCXByX2RlYnVnKCJmb3VuZCBmbm86ICVkXG4iLCAoaW50KWZvdW5kKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIENvbXBhcmUgZGllbmFtZSBhbmQgdG5hbWUgKi8KK3N0YXRpYyBpbnQgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgZHdfZGllLCBjb25zdCBjaGFyICp0bmFtZSkKK3sKKwljaGFyICpuYW1lOworCWludCByZXQ7CisJcmV0ID0gZHdhcmZfZGllbmFtZShkd19kaWUsICZuYW1lLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKSB7CisJCXJldCA9IHN0cmNtcCh0bmFtZSwgbmFtZSk7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbmFtZSwgRFdfRExBX1NUUklORyk7CisJfSBlbHNlCisJCXJldCA9IC0xOworCXJldHVybiByZXQ7Cit9CisKKy8qIENoZWNrIHRoZSBhZGRyZXNzIGlzIGluIHRoZSBzdWJwcm9ncmFtKGZ1bmN0aW9uKS4gKi8KK3N0YXRpYyBpbnQgZGllX3dpdGhpbl9zdWJwcm9ncmFtKER3YXJmX0RpZSBzcF9kaWUsIER3YXJmX0FkZHIgYWRkciwKKwkJCQkgRHdhcmZfU2lnbmVkICpvZmZzKQoreworCUR3YXJmX0FkZHIgbG9wYywgaGlwYzsKKwlpbnQgcmV0OworCisJLyogVE9ETzogY2hlY2sgcmFuZ2VzICovCisJcmV0ID0gZHdhcmZfbG93cGMoc3BfZGllLCAmbG9wYywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKKwkJcmV0dXJuIDA7CisJcmV0ID0gZHdhcmZfaGlnaHBjKHNwX2RpZSwgJmhpcGMsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJaWYgKGxvcGMgPD0gYWRkciAmJiBhZGRyIDwgaGlwYykgeworCQkqb2ZmcyA9IGFkZHIgLSBsb3BjOworCQlyZXR1cm4gMTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIENoZWNrIHRoZSBkaWUgaXMgaW5saW5lZCBmdW5jdGlvbiAqLworc3RhdGljIER3YXJmX0Jvb2wgZGllX2lubGluZWRfc3VicHJvZ3JhbShEd2FyZl9EaWUgZHdfZGllKQoreworCS8qIFRPRE86IGNoZWNrIHN0cmljdGx5ICovCisJRHdhcmZfQm9vbCBpbmw7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX2hhc2F0dHIoZHdfZGllLCBEV19BVF9pbmxpbmUsICZpbmwsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJcmV0dXJuIGlubDsKK30KKworLyogR2V0IHRoZSBvZmZzZXQgb2YgYWJzdHJ1Y3Rfb3JpZ2luICovCitzdGF0aWMgRHdhcmZfT2ZmIGRpZV9nZXRfYWJzdHJhY3Rfb3JpZ2luKER3YXJmX0RpZSBkd19kaWUpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJRHdhcmZfT2ZmIGN1X29mZnM7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX2F0dHIoZHdfZGllLCBEV19BVF9hYnN0cmFjdF9vcmlnaW4sICZhdHRyLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldCA9IGR3YXJmX2Zvcm1yZWYoYXR0ciwgJmN1X29mZnMsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBhdHRyLCBEV19ETEFfQVRUUik7CisJcmV0dXJuIGN1X29mZnM7Cit9CisKKy8qIEdldCBlbnRyeSBwYyhvciBsb3cgcGMsIDFzdCBlbnRyeSBvZiByYW5nZXMpICBvZiB0aGUgZGllICovCitzdGF0aWMgRHdhcmZfQWRkciBkaWVfZ2V0X2VudHJ5cGMoRHdhcmZfRGllIGR3X2RpZSkKK3sKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKKwlEd2FyZl9BZGRyIGFkZHI7CisJRHdhcmZfT2ZmIG9mZnM7CisJRHdhcmZfUmFuZ2VzICpyYW5nZXM7CisJRHdhcmZfU2lnbmVkIGNudDsKKwlpbnQgcmV0OworCisJLyogVHJ5IHRvIGdldCBlbnRyeSBwYyAqLworCXJldCA9IGR3YXJmX2F0dHIoZHdfZGllLCBEV19BVF9lbnRyeV9wYywgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spIHsKKwkJcmV0ID0gZHdhcmZfZm9ybWFkZHIoYXR0ciwgJmFkZHIsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKKwkJcmV0dXJuIGFkZHI7CisJfQorCisJLyogVHJ5IHRvIGdldCBsb3cgcGMgKi8KKwlyZXQgPSBkd2FyZl9sb3dwYyhkd19kaWUsICZhZGRyLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKQorCQlyZXR1cm4gYWRkcjsKKworCS8qIFRyeSB0byBnZXQgcmFuZ2VzICovCisJcmV0ID0gZHdhcmZfYXR0cihkd19kaWUsIERXX0FUX3JhbmdlcywgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJcmV0ID0gZHdhcmZfZm9ybXJlZihhdHRyLCAmb2ZmcywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlyZXQgPSBkd2FyZl9nZXRfcmFuZ2VzKF9fZHdfZGVidWcsIG9mZnMsICZyYW5nZXMsICZjbnQsIE5VTEwsCisJCQkJJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlhZGRyID0gcmFuZ2VzWzBdLmR3cl9hZGRyMTsKKwlkd2FyZl9yYW5nZXNfZGVhbGxvYyhfX2R3X2RlYnVnLCByYW5nZXMsIGNudCk7CisJcmV0dXJuIGFkZHI7Cit9CisKKy8qCisgKiBTZWFyY2ggYSBEaWUgZnJvbSBEaWUgdHJlZS4KKyAqIE5vdGU6IGN1cl9saW5rLT5kaWUgc2hvdWxkIGJlIGRlYWxsb2NhdGVkIGluIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgX19zZWFyY2hfZGllX3RyZWUoc3RydWN0IGRpZV9saW5rICpjdXJfbGluaywKKwkJCSAgICAgaW50ICgqZGllX2NiKShzdHJ1Y3QgZGllX2xpbmsgKiwgdm9pZCAqKSwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlEd2FyZl9EaWUgbmV3X2RpZTsKKwlzdHJ1Y3QgZGllX2xpbmsgbmV3X2xpbms7CisJaW50IHJldDsKKworCWlmICghZGllX2NiKQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIGN1cnJlbnQgZGllICovCisJd2hpbGUgKCEocmV0ID0gZGllX2NiKGN1cl9saW5rLCBkYXRhKSkpIHsKKwkJLyogQ2hlY2sgY2hpbGQgZGllICovCisJCXJldCA9IGR3YXJmX2NoaWxkKGN1cl9saW5rLT5kaWUsICZuZXdfZGllLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfT0spIHsKKwkJCW5ld19saW5rLnBhcmVudCA9IGN1cl9saW5rOworCQkJbmV3X2xpbmsuZGllID0gbmV3X2RpZTsKKwkJCXJldCA9IF9fc2VhcmNoX2RpZV90cmVlKCZuZXdfbGluaywgZGllX2NiLCBkYXRhKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBNb3ZlIHRvIG5leHQgc2libGluZyAqLworCQlyZXQgPSBkd2FyZl9zaWJsaW5nb2YoX19kd19kZWJ1ZywgY3VyX2xpbmstPmRpZSwgJm5ld19kaWUsCisJCQkJICAgICAgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgY3VyX2xpbmstPmRpZSwgRFdfRExBX0RJRSk7CisJCWN1cl9saW5rLT5kaWUgPSBuZXdfZGllOworCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKKwkJCXJldHVybiAwOworCX0KKwlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGN1cl9saW5rLT5kaWUsIERXX0RMQV9ESUUpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNlYXJjaCBhIGRpZSBpbiBpdHMgY2hpbGRyZW4ncyBkaWUgdHJlZSAqLworc3RhdGljIGludCBzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4oRHdhcmZfRGllIHBhcmVudF9kaWUsCisJCQkJICAgIGludCAoKmRpZV9jYikoc3RydWN0IGRpZV9saW5rICosIHZvaWQgKiksCisJCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRpZV9saW5rIG5ld19saW5rOworCWludCByZXQ7CisKKwluZXdfbGluay5wYXJlbnQgPSBOVUxMOworCXJldCA9IGR3YXJmX2NoaWxkKHBhcmVudF9kaWUsICZuZXdfbGluay5kaWUsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7CisJaWYgKHJldCA9PSBEV19ETFZfT0spCisJCXJldHVybiBfX3NlYXJjaF9kaWVfdHJlZSgmbmV3X2xpbmssIGRpZV9jYiwgZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogRmluZCBhIGxvY2Rlc2MgY29ycmVzcG9uZGluZyB0byB0aGUgYWRkcmVzcyAqLworc3RhdGljIGludCBhdHRyX2dldF9sb2NkZXNjKER3YXJmX0F0dHJpYnV0ZSBhdHRyLCBEd2FyZl9Mb2NkZXNjICpkZXNjLAorCQkJICAgIER3YXJmX0FkZHIgYWRkcikKK3sKKwlEd2FyZl9TaWduZWQgbGNudDsKKwlEd2FyZl9Mb2NkZXNjICoqbGxidWY7CisJaW50IHJldCwgaTsKKworCXJldCA9IGR3YXJmX2xvY2xpc3RfbihhdHRyLCAmbGxidWYsICZsY250LCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldCA9IERXX0RMVl9OT19FTlRSWTsKKwlmb3IgKGkgPSAwOyBpIDwgbGNudDsgKytpKSB7CisJCWlmIChsbGJ1ZltpXS0+bGRfbG9wYyA8PSBhZGRyICYmCisJCSAgICBsbGJ1ZltpXS0+bGRfaGlwYyA+IGFkZHIpIHsKKwkJCW1lbWNweShkZXNjLCBsbGJ1ZltpXSwgc2l6ZW9mKER3YXJmX0xvY2Rlc2MpKTsKKwkJCWRlc2MtPmxkX3MgPQorCQkJCW1hbGxvYyhzaXplb2YoRHdhcmZfTG9jKSAqIGxsYnVmW2ldLT5sZF9jZW50cyk7CisJCQlESUVfSUYoZGVzYy0+bGRfcyA9PSBOVUxMKTsKKwkJCW1lbWNweShkZXNjLT5sZF9zLCBsbGJ1ZltpXS0+bGRfcywKKwkJCQlzaXplb2YoRHdhcmZfTG9jKSAqIGxsYnVmW2ldLT5sZF9jZW50cyk7CisJCQlyZXQgPSBEV19ETFZfT0s7CisJCQlicmVhazsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxsYnVmW2ldLT5sZF9zLCBEV19ETEFfTE9DX0JMT0NLKTsKKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsbGJ1ZltpXSwgRFdfRExBX0xPQ0RFU0MpOworCX0KKwkvKiBSZWxlYXNpbmcgbG9vcCAqLworCWZvciAoOyBpIDwgbGNudDsgKytpKSB7CisJCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWZbaV0tPmxkX3MsIERXX0RMQV9MT0NfQkxPQ0spOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxsYnVmW2ldLCBEV19ETEFfTE9DREVTQyk7CisJfQorCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWYsIERXX0RMQV9MSVNUKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBHZXQgZGVjbF9maWxlIGF0dHJpYnV0ZSB2YWx1ZSAoZmlsZSBudW1iZXIpICovCitzdGF0aWMgRHdhcmZfVW5zaWduZWQgZGllX2dldF9kZWNsX2ZpbGUoRHdhcmZfRGllIHNwX2RpZSkKK3sKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKKwlEd2FyZl9VbnNpZ25lZCBmbm87CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX2F0dHIoc3BfZGllLCBEV19BVF9kZWNsX2ZpbGUsICZhdHRyLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCWR3YXJmX2Zvcm11ZGF0YShhdHRyLCAmZm5vLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOworCXJldHVybiBmbm87Cit9CisKKy8qIEdldCBkZWNsX2xpbmUgYXR0cmlidXRlIHZhbHVlIChsaW5lIG51bWJlcikgKi8KK3N0YXRpYyBEd2FyZl9VbnNpZ25lZCBkaWVfZ2V0X2RlY2xfbGluZShEd2FyZl9EaWUgc3BfZGllKQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCUR3YXJmX1Vuc2lnbmVkIGxubzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfYXR0cihzcF9kaWUsIERXX0FUX2RlY2xfbGluZSwgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZHdhcmZfZm9ybXVkYXRhKGF0dHIsICZsbm8sICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBhdHRyLCBEV19ETEFfQVRUUik7CisJcmV0dXJuIGxubzsKK30KKworLyoKKyAqIFByb2JlIGZpbmRlciByZWxhdGVkIGZ1bmN0aW9ucworICovCisKKy8qIFNob3cgYSBsb2NhdGlvbiAqLworc3RhdGljIHZvaWQgc2hvd19sb2NhdGlvbihEd2FyZl9Mb2MgKmxvYywgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJRHdhcmZfU21hbGwgb3A7CisJRHdhcmZfVW5zaWduZWQgcmVnbjsKKwlEd2FyZl9TaWduZWQgb2ZmczsKKwlpbnQgZGVyZWYgPSAwLCByZXQ7CisJY29uc3QgY2hhciAqcmVnczsKKworCW9wID0gbG9jLT5scl9hdG9tOworCisJLyogSWYgdGhpcyBpcyBiYXNlZCBvbiBmcmFtZSBidWZmZXIsIHNldCB0aGUgb2Zmc2V0ICovCisJaWYgKG9wID09IERXX09QX2ZicmVnKSB7CisJCWRlcmVmID0gMTsKKwkJb2ZmcyA9IChEd2FyZl9TaWduZWQpbG9jLT5scl9udW1iZXI7CisJCW9wID0gcGYtPmZibG9jLmxkX3NbMF0ubHJfYXRvbTsKKwkJbG9jID0gJnBmLT5mYmxvYy5sZF9zWzBdOworCX0gZWxzZQorCQlvZmZzID0gMDsKKworCWlmIChvcCA+PSBEV19PUF9icmVnMCAmJiBvcCA8PSBEV19PUF9icmVnMzEpIHsKKwkJcmVnbiA9IG9wIC0gRFdfT1BfYnJlZzA7CisJCW9mZnMgKz0gKER3YXJmX1NpZ25lZClsb2MtPmxyX251bWJlcjsKKwkJZGVyZWYgPSAxOworCX0gZWxzZSBpZiAob3AgPj0gRFdfT1BfcmVnMCAmJiBvcCA8PSBEV19PUF9yZWczMSkgeworCQlyZWduID0gb3AgLSBEV19PUF9yZWcwOworCX0gZWxzZSBpZiAob3AgPT0gRFdfT1BfYnJlZ3gpIHsKKwkJcmVnbiA9IGxvYy0+bHJfbnVtYmVyOworCQlvZmZzICs9IChEd2FyZl9TaWduZWQpbG9jLT5scl9udW1iZXIyOworCQlkZXJlZiA9IDE7CisJfSBlbHNlIGlmIChvcCA9PSBEV19PUF9yZWd4KSB7CisJCXJlZ24gPSBsb2MtPmxyX251bWJlcjsKKwl9IGVsc2UKKwkJZGllKCJEd2FyZl9PUCAlZCBpcyBub3Qgc3VwcG9ydGVkLlxuIiwgb3ApOworCisJcmVncyA9IGdldF9hcmNoX3JlZ3N0cihyZWduKTsKKwlpZiAoIXJlZ3MpCisJCWRpZSgiJWxsZCBleGNlZWRzIG1heCByZWdpc3RlciBudW1iZXIuXG4iLCByZWduKTsKKworCWlmIChkZXJlZikKKwkJcmV0ID0gc25wcmludGYocGYtPmJ1ZiwgcGYtPmxlbiwKKwkJCQkgIiAlcz0lK2xsZCglcykiLCBwZi0+dmFyLCBvZmZzLCByZWdzKTsKKwllbHNlCisJCXJldCA9IHNucHJpbnRmKHBmLT5idWYsIHBmLT5sZW4sICIgJXM9JXMiLCBwZi0+dmFyLCByZWdzKTsKKwlESUVfSUYocmV0IDwgMCk7CisJRElFX0lGKHJldCA+PSBwZi0+bGVuKTsKK30KKworLyogU2hvdyBhIHZhcmlhYmxlcyBpbiBrcHJvYmUgZXZlbnQgZm9ybWF0ICovCitzdGF0aWMgdm9pZCBzaG93X3ZhcmlhYmxlKER3YXJmX0RpZSB2cl9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCUR3YXJmX0xvY2Rlc2MgbGQ7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX2F0dHIodnJfZGllLCBEV19BVF9sb2NhdGlvbiwgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlpZiAocmV0ICE9IERXX0RMVl9PSykKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhdHRyX2dldF9sb2NkZXNjKGF0dHIsICZsZCwgKHBmLT5hZGRyIC0gcGYtPmN1X2Jhc2UpKTsKKwlpZiAocmV0ICE9IERXX0RMVl9PSykKKwkJZ290byBlcnJvcjsKKwkvKiBUT0RPPyAqLworCURJRV9JRihsZC5sZF9jZW50cyAhPSAxKTsKKwlzaG93X2xvY2F0aW9uKCZsZC5sZF9zWzBdLCBwZik7CisJZnJlZShsZC5sZF9zKTsKKwlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKKwlyZXR1cm4gOworZXJyb3I6CisJZGllKCJGYWlsZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgJXMgYXQgdGhpcyBhZGRyZXNzLlxuIgorCSAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+dmFyKTsKK30KKworc3RhdGljIGludCB2YXJpYWJsZV9jYWxsYmFjayhzdHJ1Y3QgZGllX2xpbmsgKmRsaW5rLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwcm9iZV9maW5kZXIgKnBmID0gKHN0cnVjdCBwcm9iZV9maW5kZXIgKilkYXRhOworCUR3YXJmX0hhbGYgdGFnOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl90YWcoZGxpbmstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAoKHRhZyA9PSBEV19UQUdfZm9ybWFsX3BhcmFtZXRlciB8fAorCSAgICAgdGFnID09IERXX1RBR192YXJpYWJsZSkgJiYKKwkgICAgKGRpZV9jb21wYXJlX25hbWUoZGxpbmstPmRpZSwgcGYtPnZhcikgPT0gMCkpIHsKKwkJc2hvd192YXJpYWJsZShkbGluay0+ZGllLCBwZik7CisJCXJldHVybiAxOworCX0KKwkvKiBUT0RPOiBTdXBwb3J0IHN0cnVjdCBtZW1iZXJzIGFuZCBhcnJheXMgKi8KKwlyZXR1cm4gMDsKK30KKworLyogRmluZCBhIHZhcmlhYmxlIGluIGEgc3VicHJvZ3JhbSBkaWUgKi8KK3N0YXRpYyB2b2lkIGZpbmRfdmFyaWFibGUoRHdhcmZfRGllIHNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJaW50IHJldDsKKworCWlmICghaXNfY192YXJuYW1lKHBmLT52YXIpKSB7CisJCS8qIE91dHB1dCByYXcgcGFyYW1ldGVycyAqLworCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLCAiICVzIiwgcGYtPnZhcik7CisJCURJRV9JRihyZXQgPCAwKTsKKwkJRElFX0lGKHJldCA+PSBwZi0+bGVuKTsKKwkJcmV0dXJuIDsKKwl9CisKKwlwcl9kZWJ1ZygiU2VhcmNoaW5nICclcycgdmFyaWFibGUgaW4gY29udGV4dC5cbiIsIHBmLT52YXIpOworCS8qIFNlYXJjaCBjaGlsZCBkaWUgZm9yIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycy4gKi8KKwlyZXQgPSBzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4oc3BfZGllLCB2YXJpYWJsZV9jYWxsYmFjaywgcGYpOworCWlmICghcmV0KQorCQlkaWUoIkZhaWxlZCB0byBmaW5kICclcycgaW4gdGhpcyBmdW5jdGlvbi5cbiIsIHBmLT52YXIpOworfQorCisvKiBHZXQgYSBmcmFtZSBiYXNlIG9uIHRoZSBhZGRyZXNzICovCitzdGF0aWMgdm9pZCBnZXRfY3VycmVudF9mcmFtZV9iYXNlKER3YXJmX0RpZSBzcF9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl9hdHRyKHNwX2RpZSwgRFdfQVRfZnJhbWVfYmFzZSwgJmF0dHIsICZfX2R3X2Vycm9yKTsKKwlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJcmV0ID0gYXR0cl9nZXRfbG9jZGVzYyhhdHRyLCAmcGYtPmZibG9jLCAocGYtPmFkZHIgLSBwZi0+Y3VfYmFzZSkpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jdXJyZW50X2ZyYW1lX2Jhc2Uoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJZnJlZShwZi0+ZmJsb2MubGRfcyk7CisJbWVtc2V0KCZwZi0+ZmJsb2MsIDAsIHNpemVvZihEd2FyZl9Mb2NkZXNjKSk7Cit9CisKKy8qIFNob3cgYSBwcm9iZSBwb2ludCB0byBvdXRwdXQgYnVmZmVyICovCitzdGF0aWMgdm9pZCBzaG93X3Byb2JlcG9pbnQoRHdhcmZfRGllIHNwX2RpZSwgRHdhcmZfU2lnbmVkIG9mZnMsCisJCQkgICAgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJc3RydWN0IHByb2JlX3BvaW50ICpwcCA9IHBmLT5wcDsKKwljaGFyICpuYW1lOworCWNoYXIgdG1wW01BWF9QUk9CRV9CVUZGRVJdOworCWludCByZXQsIGksIGxlbjsKKworCS8qIE91dHB1dCBuYW1lIG9mIHByb2JlIHBvaW50ICovCisJcmV0ID0gZHdhcmZfZGllbmFtZShzcF9kaWUsICZuYW1lLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKSB7CisJCXJldCA9IHNucHJpbnRmKHRtcCwgTUFYX1BST0JFX0JVRkZFUiwgIiVzKyV1IiwgbmFtZSwKKwkJCQkodW5zaWduZWQgaW50KW9mZnMpOworCQkvKiBDb3B5IHRoZSBmdW5jdGlvbiBuYW1lIGlmIHBvc3NpYmxlICovCisJCWlmICghcHAtPmZ1bmN0aW9uKSB7CisJCQlwcC0+ZnVuY3Rpb24gPSBzdHJkdXAobmFtZSk7CisJCQlwcC0+b2Zmc2V0ID0gb2ZmczsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIG5hbWUsIERXX0RMQV9TVFJJTkcpOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZnVuY3Rpb24gaGFzIG5vIG5hbWUuICovCisJCXJldCA9IHNucHJpbnRmKHRtcCwgTUFYX1BST0JFX0JVRkZFUiwgIjB4JWxseCIsIHBmLT5hZGRyKTsKKwkJaWYgKCFwcC0+ZnVuY3Rpb24pIHsKKwkJCS8qIFRPRE86IFVzZSBfc3RleHQgKi8KKwkJCXBwLT5mdW5jdGlvbiA9IHN0cmR1cCgiIik7CisJCQlwcC0+b2Zmc2V0ID0gKGludClwZi0+YWRkcjsKKwkJfQorCX0KKwlESUVfSUYocmV0IDwgMCk7CisJRElFX0lGKHJldCA+PSBNQVhfUFJPQkVfQlVGRkVSKTsKKwlsZW4gPSByZXQ7CisJcHJfZGVidWcoIlByb2JlIHBvaW50IGZvdW5kOiAlc1xuIiwgdG1wKTsKKworCS8qIEZpbmQgZWFjaCBhcmd1bWVudCAqLworCWdldF9jdXJyZW50X2ZyYW1lX2Jhc2Uoc3BfZGllLCBwZik7CisJZm9yIChpID0gMDsgaSA8IHBwLT5ucl9hcmdzOyBpKyspIHsKKwkJcGYtPnZhciA9IHBwLT5hcmdzW2ldOworCQlwZi0+YnVmID0gJnRtcFtsZW5dOworCQlwZi0+bGVuID0gTUFYX1BST0JFX0JVRkZFUiAtIGxlbjsKKwkJZmluZF92YXJpYWJsZShzcF9kaWUsIHBmKTsKKwkJbGVuICs9IHN0cmxlbihwZi0+YnVmKTsKKwl9CisJZnJlZV9jdXJyZW50X2ZyYW1lX2Jhc2UocGYpOworCisJcHAtPnByb2Jlc1twcC0+Zm91bmRdID0gc3RyZHVwKHRtcCk7CisJcHAtPmZvdW5kKys7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVhZGRyX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSAoc3RydWN0IHByb2JlX2ZpbmRlciAqKWRhdGE7CisJRHdhcmZfSGFsZiB0YWc7CisJRHdhcmZfU2lnbmVkIG9mZnM7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCS8qIENoZWNrIHRoZSBhZGRyZXNzIGlzIGluIHRoaXMgc3VicHJvZ3JhbSAqLworCWlmICh0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKKwkgICAgZGllX3dpdGhpbl9zdWJwcm9ncmFtKGRsaW5rLT5kaWUsIHBmLT5hZGRyLCAmb2ZmcykpIHsKKwkJc2hvd19wcm9iZXBvaW50KGRsaW5rLT5kaWUsIG9mZnMsIHBmKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBGaW5kIHByb2JlIHBvaW50IGZyb20gaXRzIGxpbmUgbnVtYmVyICovCitzdGF0aWMgdm9pZCBmaW5kX2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaSwgY2xtOworCUR3YXJmX0xpbmUgKmxpbmVzOworCUR3YXJmX1Vuc2lnbmVkIGxpbmVubyA9IDA7CisJRHdhcmZfQWRkciBhZGRyOworCUR3YXJmX1Vuc2lnbmVkIGZubzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHdhcmZfc3JjbGluZXMocGYtPmN1X2RpZSwgJmxpbmVzLCAmY250LCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCXJldCA9IGR3YXJmX2xpbmVfc3JjZmlsZW5vKGxpbmVzW2ldLCAmZm5vLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwkJaWYgKGZubyAhPSBwZi0+Zm5vKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZHdhcmZfbGluZW5vKGxpbmVzW2ldLCAmbGluZW5vLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwkJaWYgKGxpbmVubyAhPSBwZi0+bG5vKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZHdhcmZfbGluZW9mZihsaW5lc1tpXSwgJmNsbSwgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisKKwkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZXNbaV0sICZhZGRyLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwkJcHJfZGVidWcoIlByb2JlIGxpbmUgZm91bmQ6IGxpbmVbJWRdOiV1LCVkIGFkZHI6MHglbGx4XG4iLAorCQkJIChpbnQpaSwgKHVuc2lnbmVkKWxpbmVubywgKGludCljbG0sIGFkZHIpOworCQlwZi0+YWRkciA9IGFkZHI7CisJCS8qIFNlYXJjaCBhIHJlYWwgc3VicHJvZ3JhbSBpbmNsdWRpbmcgdGhpcyBsaW5lLCAqLworCQlyZXQgPSBzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4ocGYtPmN1X2RpZSwKKwkJCQkJICAgICAgIHByb2JlYWRkcl9jYWxsYmFjaywgcGYpOworCQlpZiAocmV0ID09IDApCisJCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy5cbiIpOworCQkvKiBDb250aW51aW5nLCBiZWNhdXNlIHRhcmdldCBsaW5lIG1pZ2h0IGJlIGlubGluZWQuICovCisJfQorCWR3YXJmX3NyY2xpbmVzX2RlYWxsb2MoX19kd19kZWJ1ZywgbGluZXMsIGNudCk7Cit9CisKKy8qIFNlYXJjaCBmdW5jdGlvbiBmcm9tIGZ1bmN0aW9uIG5hbWUgKi8KK3N0YXRpYyBpbnQgcHJvYmVmdW5jX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSAoc3RydWN0IHByb2JlX2ZpbmRlciAqKWRhdGE7CisJc3RydWN0IHByb2JlX3BvaW50ICpwcCA9IHBmLT5wcDsKKwlzdHJ1Y3QgZGllX2xpbmsgKmxrOworCUR3YXJmX1NpZ25lZCBvZmZzOworCUR3YXJmX0hhbGYgdGFnOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl90YWcoZGxpbmstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAodGFnID09IERXX1RBR19zdWJwcm9ncmFtKSB7CisJCWlmIChkaWVfY29tcGFyZV9uYW1lKGRsaW5rLT5kaWUsIHBwLT5mdW5jdGlvbikgPT0gMCkgeworCQkJaWYgKHBwLT5saW5lKSB7CS8qIEZ1bmN0aW9uIHJlbGF0aXZlIGxpbmUgKi8KKwkJCQlwZi0+Zm5vID0gZGllX2dldF9kZWNsX2ZpbGUoZGxpbmstPmRpZSk7CisJCQkJcGYtPmxubyA9IGRpZV9nZXRfZGVjbF9saW5lKGRsaW5rLT5kaWUpCisJCQkJCSArIHBwLT5saW5lOworCQkJCWZpbmRfYnlfbGluZShwZik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlpZiAoZGllX2lubGluZWRfc3VicHJvZ3JhbShkbGluay0+ZGllKSkgeworCQkJCS8qIElubGluZWQgZnVuY3Rpb24sIHNhdmUgaXQuICovCisJCQkJcmV0ID0gZHdhcmZfZGllX0NVX29mZnNldChkbGluay0+ZGllLAorCQkJCQkJCSAgJnBmLT5pbmxfb2ZmcywKKwkJCQkJCQkgICZfX2R3X2Vycm9yKTsKKwkJCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCQkJcHJfZGVidWcoImlubGluZSBkZWZpbml0aW9uIG9mZnNldCAlbGxkXG4iLAorCQkJCQkgcGYtPmlubF9vZmZzKTsKKwkJCQlyZXR1cm4gMDsJLyogQ29udGludWUgdG8gc2VhcmNoICovCisJCQl9CisJCQkvKiBHZXQgcHJvYmUgYWRkcmVzcyAqLworCQkJcGYtPmFkZHIgPSBkaWVfZ2V0X2VudHJ5cGMoZGxpbmstPmRpZSk7CisJCQlwZi0+YWRkciArPSBwcC0+b2Zmc2V0OworCQkJLyogVE9ETzogQ2hlY2sgdGhlIGFkZHJlc3MgaW4gdGhpcyBmdW5jdGlvbiAqLworCQkJc2hvd19wcm9iZXBvaW50KGRsaW5rLT5kaWUsIHBwLT5vZmZzZXQsIHBmKTsKKwkJCXJldHVybiAxOyAvKiBFeGl0OyBubyBzYW1lIHN5bWJvbCBpbiB0aGlzIENVLiAqLworCQl9CisJfSBlbHNlIGlmICh0YWcgPT0gRFdfVEFHX2lubGluZWRfc3Vicm91dGluZSAmJiBwZi0+aW5sX29mZnMpIHsKKwkJaWYgKGRpZV9nZXRfYWJzdHJhY3Rfb3JpZ2luKGRsaW5rLT5kaWUpID09IHBmLT5pbmxfb2ZmcykgeworCQkJLyogR2V0IHByb2JlIGFkZHJlc3MgKi8KKwkJCXBmLT5hZGRyID0gZGllX2dldF9lbnRyeXBjKGRsaW5rLT5kaWUpOworCQkJcGYtPmFkZHIgKz0gcHAtPm9mZnNldDsKKwkJCXByX2RlYnVnKCJmb3VuZCBpbmxpbmUgYWRkcjogMHglbGx4XG4iLCBwZi0+YWRkcik7CisJCQkvKiBJbmxpbmVkIGZ1bmN0aW9uLiBHZXQgYSByZWFsIHN1YnByb2dyYW0gKi8KKwkJCWZvciAobGsgPSBkbGluay0+cGFyZW50OyBsayAhPSBOVUxMOyBsayA9IGxrLT5wYXJlbnQpIHsKKwkJCQl0YWcgPSAwOworCQkJCWR3YXJmX3RhZyhsay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7CisJCQkJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCQkJCWlmICh0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKKwkJCQkgICAgIWRpZV9pbmxpbmVkX3N1YnByb2dyYW0obGstPmRpZSkpCisJCQkJCWdvdG8gZm91bmQ7CisJCQl9CisJCQlkaWUoIkZhaWxlZCB0byBmaW5kIHJlYWwgc3VicHJvZ3JhbS5cbiIpOworZm91bmQ6CisJCQkvKiBHZXQgb2Zmc2V0IGZyb20gc3VicHJvZ3JhbSAqLworCQkJcmV0ID0gZGllX3dpdGhpbl9zdWJwcm9ncmFtKGxrLT5kaWUsIHBmLT5hZGRyLCAmb2Zmcyk7CisJCQlESUVfSUYoIXJldCk7CisJCQlzaG93X3Byb2JlcG9pbnQobGstPmRpZSwgb2ZmcywgcGYpOworCQkJLyogQ29udGludWUgdG8gc2VhcmNoICovCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfYnlfZnVuYyhzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4ocGYtPmN1X2RpZSwgcHJvYmVmdW5jX2NhbGxiYWNrLCBwZik7Cit9CisKKy8qIEZpbmQgYSBwcm9iZSBwb2ludCAqLworaW50IGZpbmRfcHJvYmVwb2ludChpbnQgZmQsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCit7CisJRHdhcmZfSGFsZiBhZGRyX3NpemUgPSAwOworCUR3YXJmX1Vuc2lnbmVkIG5leHRfY3VoID0gMDsKKwlpbnQgY3VfbnVtYmVyID0gMCwgcmV0OworCXN0cnVjdCBwcm9iZV9maW5kZXIgcGYgPSB7LnBwID0gcHB9OworCisJcmV0ID0gZHdhcmZfaW5pdChmZCwgRFdfRExDX1JFQUQsIDAsIDAsICZfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJaWYgKHJldCAhPSBEV19ETFZfT0spIHsKKwkJcHJfd2FybmluZygiTm8gZHdhcmYgaW5mbyBmb3VuZCBpbiB0aGUgdm1saW51eCAtIHBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0RFQlVHX0lORk8uXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcHAtPmZvdW5kID0gMDsKKwl3aGlsZSAoKytjdV9udW1iZXIpIHsKKwkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLworCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCQlicmVhazsKKworCQkvKiBHZXQgdGhlIERJRShEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRW50cnkpIG9mIHRoaXMgQ1UgKi8KKwkJcmV0ID0gZHdhcmZfc2libGluZ29mKF9fZHdfZGVidWcsIDAsICZwZi5jdV9kaWUsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJCS8qIENoZWNrIGlmIHRhcmdldCBmaWxlIGlzIGluY2x1ZGVkLiAqLworCQlpZiAocHAtPmZpbGUpCisJCQlwZi5mbm8gPSBjdV9maW5kX2ZpbGVubyhwZi5jdV9kaWUsIHBwLT5maWxlKTsKKworCQlpZiAoIXBwLT5maWxlIHx8IHBmLmZubykgeworCQkJLyogU2F2ZSBDVSBiYXNlIGFkZHJlc3MgKGZvciBmcmFtZV9iYXNlKSAqLworCQkJcmV0ID0gZHdhcmZfbG93cGMocGYuY3VfZGllLCAmcGYuY3VfYmFzZSwgJl9fZHdfZXJyb3IpOworCQkJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOworCQkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCQkJcGYuY3VfYmFzZSA9IDA7CisJCQlpZiAocHAtPmZ1bmN0aW9uKQorCQkJCWZpbmRfYnlfZnVuYygmcGYpOworCQkJZWxzZSB7CisJCQkJcGYubG5vID0gcHAtPmxpbmU7CisJCQkJZmluZF9ieV9saW5lKCZwZik7CisJCQl9CisJCX0KKwkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBwZi5jdV9kaWUsIERXX0RMQV9ESUUpOworCX0KKwlyZXQgPSBkd2FyZl9maW5pc2goX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCXJldHVybiBwcC0+Zm91bmQ7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGViY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgX1BST0JFX0ZJTkRFUl9ICisjZGVmaW5lIF9QUk9CRV9GSU5ERVJfSAorCisjZGVmaW5lIE1BWF9QQVRIX0xFTiAyNTYKKyNkZWZpbmUgTUFYX1BST0JFX0JVRkZFUiAxMDI0CisjZGVmaW5lIE1BWF9QUk9CRVMgMTI4CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2NfdmFybmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCS8qIFRPRE8gKi8KKwlyZXR1cm4gaXNhbHBoYShuYW1lWzBdKSB8fCBuYW1lWzBdID09ICdfJzsKK30KKworc3RydWN0IHByb2JlX3BvaW50IHsKKwkvKiBJbnB1dHMgKi8KKwljaGFyCSpmaWxlOwkJLyogRmlsZSBuYW1lICovCisJaW50CWxpbmU7CQkvKiBMaW5lIG51bWJlciAqLworCisJY2hhcgkqZnVuY3Rpb247CS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwlpbnQJb2Zmc2V0OwkJLyogT2Zmc2V0IGJ5dGVzICovCisKKwlpbnQJbnJfYXJnczsJLyogTnVtYmVyIG9mIGFyZ3VtZW50cyAqLworCWNoYXIJKiphcmdzOwkJLyogQXJndW1lbnRzICovCisKKwlpbnQJcmV0cHJvYmU7CS8qIFJldHVybiBwcm9iZSAqLworCisJLyogT3V0cHV0ICovCisJaW50CWZvdW5kOwkJLyogTnVtYmVyIG9mIGZvdW5kIHByb2JlIHBvaW50cyAqLworCWNoYXIJKnByb2Jlc1tNQVhfUFJPQkVTXTsJLyogT3V0cHV0IGJ1ZmZlcnMgKHdpbGwgYmUgYWxsb2NhdGVkKSovCit9OworCisjaWZuZGVmIE5PX0xJQkRXQVJGCitleHRlcm4gaW50IGZpbmRfcHJvYmVwb2ludChpbnQgZmQsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApOworCisjaW5jbHVkZSA8bGliZHdhcmYvZHdhcmYuaD4KKyNpbmNsdWRlIDxsaWJkd2FyZi9saWJkd2FyZi5oPgorCitzdHJ1Y3QgcHJvYmVfZmluZGVyIHsKKwlzdHJ1Y3QgcHJvYmVfcG9pbnQJKnBwOwkvKiBUYXJnZXQgcHJvYmUgcG9pbnQgKi8KKworCS8qIEZvciBmdW5jdGlvbiBzZWFyY2hpbmcgKi8KKwlEd2FyZl9BZGRyCWFkZHI7CQkvKiBBZGRyZXNzICovCisJRHdhcmZfVW5zaWduZWQJZm5vOwkJLyogRmlsZSBudW1iZXIgKi8KKwlEd2FyZl9VbnNpZ25lZAlsbm87CQkvKiBMaW5lIG51bWJlciAqLworCUR3YXJmX09mZglpbmxfb2ZmczsJLyogSW5saW5lIG9mZnNldCAqLworCUR3YXJmX0RpZQljdV9kaWU7CQkvKiBDdXJyZW50IENVICovCisKKwkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCisJRHdhcmZfQWRkcgljdV9iYXNlOwkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLworCUR3YXJmX0xvY2Rlc2MJZmJsb2M7CQkvKiBMb2NhdGlvbiBvZiBDdXJyZW50IEZyYW1lIEJhc2UgKi8KKwljb25zdCBjaGFyCSp2YXI7CQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KKwljaGFyCQkqYnVmOwkJLyogQ3VycmVudCBvdXRwdXQgYnVmZmVyICovCisJaW50CQlsZW47CQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLworfTsKKyNlbmRpZiAvKiBOT19MSUJEV0FSRiAqLworCisjZW5kaWYgLypfUFJPQkVfRklOREVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9xdW90ZS5oIGIvdG9vbHMvcGVyZi91dGlsL3F1b3RlLmgKaW5kZXggYTU0NTRhMS4uYjZhMDE5NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3F1b3RlLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3F1b3RlLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIFFVT1RFX0gKLSNkZWZpbmUgUVVPVEVfSAorI2lmbmRlZiBfX1BFUkZfUVVPVEVfSAorI2RlZmluZSBfX1BFUkZfUVVPVEVfSAogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTY1LDQgKzY1LDQgQEAKIGV4dGVybiB2b2lkIHB5dGhvbl9xdW90ZV9wcmludChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNyYyk7CiBleHRlcm4gdm9pZCB0Y2xfcXVvdGVfcHJpbnQoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzcmMpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX1BFUkZfUVVPVEVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3J1bi1jb21tYW5kLmggYi90b29scy9wZXJmL3V0aWwvcnVuLWNvbW1hbmQuaAppbmRleCBjYzE4MzdkLi5kNzkwMjg3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcnVuLWNvbW1hbmQuaAorKysgYi90b29scy9wZXJmL3V0aWwvcnVuLWNvbW1hbmQuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgUlVOX0NPTU1BTkRfSAotI2RlZmluZSBSVU5fQ09NTUFORF9ICisjaWZuZGVmIF9fUEVSRl9SVU5fQ09NTUFORF9ICisjZGVmaW5lIF9fUEVSRl9SVU5fQ09NTUFORF9ICiAKIGVudW0gewogCUVSUl9SVU5fQ09NTUFORF9GT1JLID0gMTAwMDAsCkBAIC04NSw0ICs4NSw0IEBACiBpbnQgc3RhcnRfYXN5bmMoc3RydWN0IGFzeW5jICphc3luYyk7CiBpbnQgZmluaXNoX2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX1BFUkZfUlVOX0NPTU1BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NpZ2NoYWluLmggYi90b29scy9wZXJmL3V0aWwvc2lnY2hhaW4uaAppbmRleCA2MTgwODNiYy4uMWE1M2MxMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NpZ2NoYWluLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NpZ2NoYWluLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIFNJR0NIQUlOX0gKLSNkZWZpbmUgU0lHQ0hBSU5fSAorI2lmbmRlZiBfX1BFUkZfU0lHQ0hBSU5fSAorI2RlZmluZSBfX1BFUkZfU0lHQ0hBSU5fSAogCiB0eXBlZGVmIHZvaWQgKCpzaWdjaGFpbl9mdW4pKGludCk7CiAKQEAgLTgsNCArOCw0IEBACiAKIHZvaWQgc2lnY2hhaW5fcHVzaF9jb21tb24oc2lnY2hhaW5fZnVuIGYpOwogCi0jZW5kaWYgLyogU0lHQ0hBSU5fSCAqLworI2VuZGlmIC8qIF9fUEVSRl9TSUdDSEFJTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDkwMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwpAQCAtMCwwICsxLDI5MCBAQAorI2luY2x1ZGUgInNvcnQuaCIKKworcmVnZXhfdAkJcGFyZW50X3JlZ2V4OworY2hhcgkJZGVmYXVsdF9wYXJlbnRfcGF0dGVybltdID0gIl5zeXNffF5kb19wYWdlX2ZhdWx0IjsKK2NoYXIJCSpwYXJlbnRfcGF0dGVybiA9IGRlZmF1bHRfcGFyZW50X3BhdHRlcm47CitjaGFyCQlkZWZhdWx0X3NvcnRfb3JkZXJbXSA9ICJjb21tLGRzbyxzeW1ib2wiOworY2hhcgkJKnNvcnRfb3JkZXIgPSBkZWZhdWx0X3NvcnRfb3JkZXI7CitpbnQJCXNvcnRfX25lZWRfY29sbGFwc2UgPSAwOworaW50CQlzb3J0X19oYXNfcGFyZW50ID0gMDsKKworZW51bSBzb3J0X3R5cGUJc29ydF9fZmlyc3RfZGltZW5zaW9uOworCit1bnNpZ25lZCBpbnQgZHNvc19fY29sX3dpZHRoOwordW5zaWduZWQgaW50IGNvbW1zX19jb2xfd2lkdGg7Cit1bnNpZ25lZCBpbnQgdGhyZWFkc19fY29sX3dpZHRoOworc3RhdGljIHVuc2lnbmVkIGludCBwYXJlbnRfc3ltYm9sX19jb2xfd2lkdGg7CitjaGFyICogZmllbGRfc2VwOworCitMSVNUX0hFQUQoaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKKworc3RydWN0IHNvcnRfZW50cnkgc29ydF90aHJlYWQgPSB7CisJLmhlYWRlciA9ICJDb21tYW5kOiAgUGlkIiwKKwkuY21wCT0gc29ydF9fdGhyZWFkX2NtcCwKKwkucHJpbnQJPSBzb3J0X190aHJlYWRfcHJpbnQsCisJLndpZHRoCT0gJnRocmVhZHNfX2NvbF93aWR0aCwKK307CisKK3N0cnVjdCBzb3J0X2VudHJ5IHNvcnRfY29tbSA9IHsKKwkuaGVhZGVyCQk9ICJDb21tYW5kIiwKKwkuY21wCQk9IHNvcnRfX2NvbW1fY21wLAorCS5jb2xsYXBzZQk9IHNvcnRfX2NvbW1fY29sbGFwc2UsCisJLnByaW50CQk9IHNvcnRfX2NvbW1fcHJpbnQsCisJLndpZHRoCQk9ICZjb21tc19fY29sX3dpZHRoLAorfTsKKworc3RydWN0IHNvcnRfZW50cnkgc29ydF9kc28gPSB7CisJLmhlYWRlciA9ICJTaGFyZWQgT2JqZWN0IiwKKwkuY21wCT0gc29ydF9fZHNvX2NtcCwKKwkucHJpbnQJPSBzb3J0X19kc29fcHJpbnQsCisJLndpZHRoCT0gJmRzb3NfX2NvbF93aWR0aCwKK307CisKK3N0cnVjdCBzb3J0X2VudHJ5IHNvcnRfc3ltID0geworCS5oZWFkZXIgPSAiU3ltYm9sIiwKKwkuY21wCT0gc29ydF9fc3ltX2NtcCwKKwkucHJpbnQJPSBzb3J0X19zeW1fcHJpbnQsCit9OworCitzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3BhcmVudCA9IHsKKwkuaGVhZGVyID0gIlBhcmVudCBzeW1ib2wiLAorCS5jbXAJPSBzb3J0X19wYXJlbnRfY21wLAorCS5wcmludAk9IHNvcnRfX3BhcmVudF9wcmludCwKKwkud2lkdGgJPSAmcGFyZW50X3N5bWJvbF9fY29sX3dpZHRoLAorfTsKKworc3RydWN0IHNvcnRfZGltZW5zaW9uIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3Qgc29ydF9lbnRyeQkqZW50cnk7CisJaW50CQkJdGFrZW47Cit9OworCitzdGF0aWMgc3RydWN0IHNvcnRfZGltZW5zaW9uIHNvcnRfZGltZW5zaW9uc1tdID0geworCXsgLm5hbWUgPSAicGlkIiwJLmVudHJ5ID0gJnNvcnRfdGhyZWFkLAl9LAorCXsgLm5hbWUgPSAiY29tbSIsCS5lbnRyeSA9ICZzb3J0X2NvbW0sCX0sCisJeyAubmFtZSA9ICJkc28iLAkuZW50cnkgPSAmc29ydF9kc28sCX0sCisJeyAubmFtZSA9ICJzeW1ib2wiLAkuZW50cnkgPSAmc29ydF9zeW0sCX0sCisJeyAubmFtZSA9ICJwYXJlbnQiLAkuZW50cnkgPSAmc29ydF9wYXJlbnQsCX0sCit9OworCitpbnQ2NF90IGNtcF9udWxsKHZvaWQgKmwsIHZvaWQgKnIpCit7CisJaWYgKCFsICYmICFyKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICghbCkKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKKy8qIC0tc29ydCBwaWQgKi8KKworaW50NjRfdAorc29ydF9fdGhyZWFkX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXJldHVybiByaWdodC0+dGhyZWFkLT5waWQgLSBsZWZ0LT50aHJlYWQtPnBpZDsKK30KKworaW50IHJlcHNlcF9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgbjsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJaWYgKCFmaWVsZF9zZXApCisJCW4gPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7CisJZWxzZSB7CisJCWNoYXIgKmJmID0gTlVMTDsKKwkJbiA9IHZhc3ByaW50ZigmYmYsIGZtdCwgYXApOworCQlpZiAobiA+IDApIHsKKwkJCWNoYXIgKnNlcCA9IGJmOworCisJCQl3aGlsZSAoMSkgeworCQkJCXNlcCA9IHN0cmNocihzZXAsICpmaWVsZF9zZXApOworCQkJCWlmIChzZXAgPT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQkJKnNlcCA9ICcuJzsKKwkJCX0KKwkJfQorCQlmcHV0cyhiZiwgZnApOworCQlmcmVlKGJmKTsKKwl9CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gbjsKK30KKworc2l6ZV90Citzb3J0X190aHJlYWRfcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisJcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJSpzOiU1ZCIsIHdpZHRoIC0gNiwKKwkJCSAgICAgIHNlbGYtPnRocmVhZC0+Y29tbSA/OiAiIiwgc2VsZi0+dGhyZWFkLT5waWQpOworfQorCitzaXplX3QKK3NvcnRfX2NvbW1fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisJcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJSpzIiwgd2lkdGgsIHNlbGYtPnRocmVhZC0+Y29tbSk7Cit9CisKKy8qIC0tc29ydCBkc28gKi8KKworaW50NjRfdAorc29ydF9fZHNvX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXN0cnVjdCBkc28gKmRzb19sID0gbGVmdC0+bWFwID8gbGVmdC0+bWFwLT5kc28gOiBOVUxMOworCXN0cnVjdCBkc28gKmRzb19yID0gcmlnaHQtPm1hcCA/IHJpZ2h0LT5tYXAtPmRzbyA6IE5VTEw7CisJY29uc3QgY2hhciAqZHNvX25hbWVfbCwgKmRzb19uYW1lX3I7CisKKwlpZiAoIWRzb19sIHx8ICFkc29fcikKKwkJcmV0dXJuIGNtcF9udWxsKGRzb19sLCBkc29fcik7CisKKwlpZiAodmVyYm9zZSkgeworCQlkc29fbmFtZV9sID0gZHNvX2wtPmxvbmdfbmFtZTsKKwkJZHNvX25hbWVfciA9IGRzb19yLT5sb25nX25hbWU7CisJfSBlbHNlIHsKKwkJZHNvX25hbWVfbCA9IGRzb19sLT5zaG9ydF9uYW1lOworCQlkc29fbmFtZV9yID0gZHNvX3ItPnNob3J0X25hbWU7CisJfQorCisJcmV0dXJuIHN0cmNtcChkc29fbmFtZV9sLCBkc29fbmFtZV9yKTsKK30KKworc2l6ZV90Citzb3J0X19kc29fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisJaWYgKHNlbGYtPm1hcCAmJiBzZWxmLT5tYXAtPmRzbykgeworCQljb25zdCBjaGFyICpkc29fbmFtZSA9ICF2ZXJib3NlID8gc2VsZi0+bWFwLT5kc28tPnNob3J0X25hbWUgOgorCQkJCQkJICBzZWxmLT5tYXAtPmRzby0+bG9uZ19uYW1lOworCQlyZXR1cm4gcmVwc2VwX2ZwcmludGYoZnAsICIlLSpzIiwgd2lkdGgsIGRzb19uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmVwc2VwX2ZwcmludGYoZnAsICIlKmxseCIsIHdpZHRoLCAodTY0KXNlbGYtPmlwKTsKK30KKworLyogLS1zb3J0IHN5bWJvbCAqLworCitpbnQ2NF90Citzb3J0X19zeW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJdTY0IGlwX2wsIGlwX3I7CisKKwlpZiAobGVmdC0+c3ltID09IHJpZ2h0LT5zeW0pCisJCXJldHVybiAwOworCisJaXBfbCA9IGxlZnQtPnN5bSA/IGxlZnQtPnN5bS0+c3RhcnQgOiBsZWZ0LT5pcDsKKwlpcF9yID0gcmlnaHQtPnN5bSA/IHJpZ2h0LT5zeW0tPnN0YXJ0IDogcmlnaHQtPmlwOworCisJcmV0dXJuIChpbnQ2NF90KShpcF9yIC0gaXBfbCk7Cit9CisKKworc2l6ZV90Citzb3J0X19zeW1fcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGggX191c2VkKQoreworCXNpemVfdCByZXQgPSAwOworCisJaWYgKHZlcmJvc2UpIHsKKwkJY2hhciBvID0gc2VsZi0+bWFwID8gZHNvX19zeW10YWJfb3JpZ2luKHNlbGYtPm1hcC0+ZHNvKSA6ICchJzsKKwkJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiJSMwMThsbHggJWMgIiwgKHU2NClzZWxmLT5pcCwgbyk7CisJfQorCisJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiWyVjXSAiLCBzZWxmLT5sZXZlbCk7CisJaWYgKHNlbGYtPnN5bSkKKwkJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiJXMiLCBzZWxmLT5zeW0tPm5hbWUpOworCWVsc2UKKwkJcmV0ICs9IHJlcHNlcF9mcHJpbnRmKGZwLCAiJSMwMTZsbHgiLCAodTY0KXNlbGYtPmlwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tc29ydCBjb21tICovCisKK2ludDY0X3QKK3NvcnRfX2NvbW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJcmV0dXJuIHJpZ2h0LT50aHJlYWQtPnBpZCAtIGxlZnQtPnRocmVhZC0+cGlkOworfQorCitpbnQ2NF90Citzb3J0X19jb21tX2NvbGxhcHNlKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCit7CisJY2hhciAqY29tbV9sID0gbGVmdC0+dGhyZWFkLT5jb21tOworCWNoYXIgKmNvbW1fciA9IHJpZ2h0LT50aHJlYWQtPmNvbW07CisKKwlpZiAoIWNvbW1fbCB8fCAhY29tbV9yKQorCQlyZXR1cm4gY21wX251bGwoY29tbV9sLCBjb21tX3IpOworCisJcmV0dXJuIHN0cmNtcChjb21tX2wsIGNvbW1fcik7Cit9CisKKy8qIC0tc29ydCBwYXJlbnQgKi8KKworaW50NjRfdAorc29ydF9fcGFyZW50X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bV9sID0gbGVmdC0+cGFyZW50OworCXN0cnVjdCBzeW1ib2wgKnN5bV9yID0gcmlnaHQtPnBhcmVudDsKKworCWlmICghc3ltX2wgfHwgIXN5bV9yKQorCQlyZXR1cm4gY21wX251bGwoc3ltX2wsIHN5bV9yKTsKKworCXJldHVybiBzdHJjbXAoc3ltX2wtPm5hbWUsIHN5bV9yLT5uYW1lKTsKK30KKworc2l6ZV90Citzb3J0X19wYXJlbnRfcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCB1bnNpZ25lZCBpbnQgd2lkdGgpCit7CisJcmV0dXJuIHJlcHNlcF9mcHJpbnRmKGZwLCAiJS0qcyIsIHdpZHRoLAorCQkJICAgICAgc2VsZi0+cGFyZW50ID8gc2VsZi0+cGFyZW50LT5uYW1lIDogIltvdGhlcl0iKTsKK30KKworaW50IHNvcnRfZGltZW5zaW9uX19hZGQoY29uc3QgY2hhciAqdG9rKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc29ydF9kaW1lbnNpb25zKTsgaSsrKSB7CisJCXN0cnVjdCBzb3J0X2RpbWVuc2lvbiAqc2QgPSAmc29ydF9kaW1lbnNpb25zW2ldOworCisJCWlmIChzZC0+dGFrZW4pCisJCQljb250aW51ZTsKKworCQlpZiAoc3RybmNhc2VjbXAodG9rLCBzZC0+bmFtZSwgc3RybGVuKHRvaykpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkLT5lbnRyeS0+Y29sbGFwc2UpCisJCQlzb3J0X19uZWVkX2NvbGxhcHNlID0gMTsKKworCQlpZiAoc2QtPmVudHJ5ID09ICZzb3J0X3BhcmVudCkgeworCQkJaW50IHJldCA9IHJlZ2NvbXAoJnBhcmVudF9yZWdleCwgcGFyZW50X3BhdHRlcm4sIFJFR19FWFRFTkRFRCk7CisJCQlpZiAocmV0KSB7CisJCQkJY2hhciBlcnJbQlVGU0laXTsKKworCQkJCXJlZ2Vycm9yKHJldCwgJnBhcmVudF9yZWdleCwgZXJyLCBzaXplb2YoZXJyKSk7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHJlZ2V4OiAlc1xuJXMiLAorCQkJCQlwYXJlbnRfcGF0dGVybiwgZXJyKTsKKwkJCQlleGl0KC0xKTsKKwkJCX0KKwkJCXNvcnRfX2hhc19wYXJlbnQgPSAxOworCQl9CisKKwkJaWYgKGxpc3RfZW1wdHkoJmhpc3RfZW50cnlfX3NvcnRfbGlzdCkpIHsKKwkJCWlmICghc3RyY21wKHNkLT5uYW1lLCAicGlkIikpCisJCQkJc29ydF9fZmlyc3RfZGltZW5zaW9uID0gU09SVF9QSUQ7CisJCQllbHNlIGlmICghc3RyY21wKHNkLT5uYW1lLCAiY29tbSIpKQorCQkJCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IFNPUlRfQ09NTTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoc2QtPm5hbWUsICJkc28iKSkKKwkJCQlzb3J0X19maXJzdF9kaW1lbnNpb24gPSBTT1JUX0RTTzsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoc2QtPm5hbWUsICJzeW1ib2wiKSkKKwkJCQlzb3J0X19maXJzdF9kaW1lbnNpb24gPSBTT1JUX1NZTTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoc2QtPm5hbWUsICJwYXJlbnQiKSkKKwkJCQlzb3J0X19maXJzdF9kaW1lbnNpb24gPSBTT1JUX1BBUkVOVDsKKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJnNkLT5lbnRyeS0+bGlzdCwgJmhpc3RfZW50cnlfX3NvcnRfbGlzdCk7CisJCXNkLT50YWtlbiA9IDE7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FU1JDSDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmggYi90b29scy9wZXJmL3V0aWwvc29ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2U2NjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgX19QRVJGX1NPUlRfSAorI2RlZmluZSBfX1BFUkZfU09SVF9ICisjaW5jbHVkZSAiLi4vYnVpbHRpbi5oIgorCisjaW5jbHVkZSAidXRpbC5oIgorCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJjYWxsY2hhaW4uaCIKKyNpbmNsdWRlICJzdHJsaXN0LmgiCisjaW5jbHVkZSAidmFsdWVzLmgiCisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJoZWFkZXIuaCIKKworI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYXJzZS1ldmVudHMuaCIKKworI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInNvcnQuaCIKKworZXh0ZXJuIHJlZ2V4X3QgcGFyZW50X3JlZ2V4OworZXh0ZXJuIGNoYXIgKnNvcnRfb3JkZXI7CitleHRlcm4gY2hhciBkZWZhdWx0X3BhcmVudF9wYXR0ZXJuW107CitleHRlcm4gY2hhciAqcGFyZW50X3BhdHRlcm47CitleHRlcm4gY2hhciBkZWZhdWx0X3NvcnRfb3JkZXJbXTsKK2V4dGVybiBpbnQgc29ydF9fbmVlZF9jb2xsYXBzZTsKK2V4dGVybiBpbnQgc29ydF9faGFzX3BhcmVudDsKK2V4dGVybiBjaGFyICpmaWVsZF9zZXA7CitleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF9jb21tOworZXh0ZXJuIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfZHNvOworZXh0ZXJuIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfc3ltOworZXh0ZXJuIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfcGFyZW50OworZXh0ZXJuIHVuc2lnbmVkIGludCBkc29zX19jb2xfd2lkdGg7CitleHRlcm4gdW5zaWduZWQgaW50IGNvbW1zX19jb2xfd2lkdGg7CitleHRlcm4gdW5zaWduZWQgaW50IHRocmVhZHNfX2NvbF93aWR0aDsKK2V4dGVybiBlbnVtIHNvcnRfdHlwZSBzb3J0X19maXJzdF9kaW1lbnNpb247CisKK3N0cnVjdCBoaXN0X2VudHJ5IHsKKwlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKKwl1NjQJCQljb3VudDsKKwlzdHJ1Y3QgdGhyZWFkCQkqdGhyZWFkOworCXN0cnVjdCBtYXAJCSptYXA7CisJc3RydWN0IHN5bWJvbAkJKnN5bTsKKwl1NjQJCQlpcDsKKwljaGFyCQkJbGV2ZWw7CisJc3RydWN0IHN5bWJvbAkJKnBhcmVudDsKKwlzdHJ1Y3QgY2FsbGNoYWluX25vZGUJY2FsbGNoYWluOworCXN0cnVjdCByYl9yb290CQlzb3J0ZWRfY2hhaW47Cit9OworCitlbnVtIHNvcnRfdHlwZSB7CisJU09SVF9QSUQsCisJU09SVF9DT01NLAorCVNPUlRfRFNPLAorCVNPUlRfU1lNLAorCVNPUlRfUEFSRU5UCit9OworCisvKgorICogY29uZmlndXJhYmxlIHNvcnRpbmcgYml0cworICovCisKK3N0cnVjdCBzb3J0X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwljb25zdCBjaGFyICpoZWFkZXI7CisKKwlpbnQ2NF90ICgqY21wKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKKwlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworCXNpemVfdAkoKnByaW50KShGSUxFICpmcCwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50IHdpZHRoKTsKKwl1bnNpZ25lZCBpbnQgKndpZHRoOworCWJvb2wJZWxpZGU7Cit9OworCitleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF90aHJlYWQ7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBoaXN0X2VudHJ5X19zb3J0X2xpc3Q7CisKK2V4dGVybiBpbnQgcmVwc2VwX2ZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiBzaXplX3Qgc29ydF9fdGhyZWFkX3ByaW50KEZJTEUgKiwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzaXplX3Qgc29ydF9fY29tbV9wcmludChGSUxFICosIHN0cnVjdCBoaXN0X2VudHJ5ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gc2l6ZV90IHNvcnRfX2Rzb19wcmludChGSUxFICosIHN0cnVjdCBoaXN0X2VudHJ5ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gc2l6ZV90IHNvcnRfX3N5bV9wcmludChGSUxFICosIHN0cnVjdCBoaXN0X2VudHJ5ICosIHVuc2lnbmVkIGludCBfX3VzZWQpOworZXh0ZXJuIGludDY0X3QgY21wX251bGwodm9pZCAqLCB2b2lkICopOworZXh0ZXJuIGludDY0X3Qgc29ydF9fdGhyZWFkX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKK2V4dGVybiBpbnQ2NF90IHNvcnRfX2NvbW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworZXh0ZXJuIGludDY0X3Qgc29ydF9fY29tbV9jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKK2V4dGVybiBpbnQ2NF90IHNvcnRfX2Rzb19jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CitleHRlcm4gaW50NjRfdCBzb3J0X19zeW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworZXh0ZXJuIGludDY0X3Qgc29ydF9fcGFyZW50X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKK2V4dGVybiBzaXplX3Qgc29ydF9fcGFyZW50X3ByaW50KEZJTEUgKiwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICopOworCisjZW5kaWYJLyogX19QRVJGX1NPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N0cmJ1Zi5oIGIvdG9vbHMvcGVyZi91dGlsL3N0cmJ1Zi5oCmluZGV4IGQyYWE4NmMuLmEzZDEyMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJidWYuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3RyYnVmLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIFNUUkJVRl9ICi0jZGVmaW5lIFNUUkJVRl9ICisjaWZuZGVmIF9fUEVSRl9TVFJCVUZfSAorI2RlZmluZSBfX1BFUkZfU1RSQlVGX0gKIAogLyoKICAqIFN0cmJ1ZidzIGNhbiBiZSB1c2UgaW4gbWFueSB3YXlzOiBhcyBhIGJ5dGUgYXJyYXksIG9yIHRvIHN0b3JlIGFyYml0cmFyeQpAQCAtMTM0LDQgKzEzNCw0IEBACiBleHRlcm4gaW50IHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi0jZW5kaWYgLyogU1RSQlVGX0ggKi8KKyNlbmRpZiAvKiBfX1BFUkZfU1RSQlVGX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCBjOTNlY2E5Li5mMjRhOGNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogc3RhdGljIGludCBoZXgoY2hhciBjaCkKIHsKQEAgLTMyLDMgKzMzLDE5NiBAQAogCiAJcmV0dXJuIHAgLSBwdHI7CiB9CisKK2NoYXIgKnN0cnhmcmNoYXIoY2hhciAqcywgY2hhciBmcm9tLCBjaGFyIHRvKQoreworCWNoYXIgKnAgPSBzOworCisJd2hpbGUgKChwID0gc3RyY2hyKHAsIGZyb20pKSAhPSBOVUxMKQorCQkqcCsrID0gdG87CisKKwlyZXR1cm4gczsKK30KKworI2RlZmluZSBLIDEwMjRMTAorLyoKKyAqIHBlcmZfYXRvbGwoKQorICogUGFyc2UgKFxkKykoYnxCfGtifEtCfG1ifE1CfGdifEdCfHRifFRCKSAoZS5nLiAiMjU2TUIiKQorICogYW5kIHJldHVybiBpdHMgbnVtZXJpYyB2YWx1ZQorICovCitzNjQgcGVyZl9hdG9sbChjb25zdCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IGk7CisJczY0IGxlbmd0aCA9IC0xLCB1bml0ID0gMTsKKworCWlmICghaXNkaWdpdChzdHJbMF0pKQorCQlnb3RvIG91dF9lcnI7CisKKwlmb3IgKGkgPSAxOyBpIDwgc3RybGVuKHN0cik7IGkrKykgeworCQlzd2l0Y2ggKHN0cltpXSkgeworCQljYXNlICdCJzoKKwkJY2FzZSAnYic6CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8ga2lsbzsKKwkJY2FzZSAnayc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOwora2lsbzoKKwkJCXVuaXQgPSBLOworCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJaWYgKHN0cltpICsgMV0gIT0gJ0InKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCWVsc2UKKwkJCQlnb3RvIG1lZ2E7CisJCWNhc2UgJ20nOgorCQkJaWYgKHN0cltpICsgMV0gIT0gJ2InKQorCQkJCWdvdG8gb3V0X2VycjsKK21lZ2E6CisJCQl1bml0ID0gSyAqIEs7CisJCQlicmVhazsKKwkJY2FzZSAnRyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8gZ2lnYTsKKwkJY2FzZSAnZyc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOworZ2lnYToKKwkJCXVuaXQgPSBLICogSyAqIEs7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnQicpCisJCQkJZ290byBvdXRfZXJyOworCQkJZWxzZQorCQkJCWdvdG8gdGVyYTsKKwkJY2FzZSAndCc6CisJCQlpZiAoc3RyW2kgKyAxXSAhPSAnYicpCisJCQkJZ290byBvdXRfZXJyOwordGVyYToKKwkJCXVuaXQgPSBLICogSyAqIEsgKiBLOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwJzoJLyogb25seSBzcGVjaWZpZWQgZmlndXJlcyAqLworCQkJdW5pdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmICghaXNkaWdpdChzdHJbaV0pKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbGVuZ3RoID0gYXRvbGwoc3RyKSAqIHVuaXQ7CisJZ290byBvdXQ7CisKK291dF9lcnI6CisJbGVuZ3RoID0gLTE7CitvdXQ6CisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3BsaXR0aW5nIGEgc3RyaW5nIGludG8gYW4gYXJndi1saWtlIGFycmF5LgorICogb3JpZ2luYWx5IGNvcGllZCBmcm9tIGxpYi9hcmd2X3NwbGl0LmMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc2VwKGNvbnN0IGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQljcCsrOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcF9hcmcoY29uc3QgY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQljcCsrOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgaW50IGNvdW50X2FyZ2MoY29uc3QgY2hhciAqc3RyKQoreworCWludCBjb3VudCA9IDA7CisKKwl3aGlsZSAoKnN0cikgeworCQlzdHIgPSBza2lwX3NlcChzdHIpOworCQlpZiAoKnN0cikgeworCQkJY291bnQrKzsKKwkJCXN0ciA9IHNraXBfYXJnKHN0cik7CisJCX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogYXJndl9mcmVlIC0gZnJlZSBhbiBhcmd2CisgKiBAYXJndiAtIHRoZSBhcmd1bWVudCB2ZWN0b3IgdG8gYmUgZnJlZWQKKyAqCisgKiBGcmVlcyBhbiBhcmd2IGFuZCB0aGUgc3RyaW5ncyBpdCBwb2ludHMgdG8uCisgKi8KK3ZvaWQgYXJndl9mcmVlKGNoYXIgKiphcmd2KQoreworCWNoYXIgKipwOworCWZvciAocCA9IGFyZ3Y7ICpwOyBwKyspCisJCWZyZWUoKnApOworCisJZnJlZShhcmd2KTsKK30KKworLyoqCisgKiBhcmd2X3NwbGl0IC0gc3BsaXQgYSBzdHJpbmcgYXQgd2hpdGVzcGFjZSwgcmV0dXJuaW5nIGFuIGFyZ3YKKyAqIEBzdHI6IHRoZSBzdHJpbmcgdG8gYmUgc3BsaXQKKyAqIEBhcmdjcDogcmV0dXJuZWQgYXJndW1lbnQgY291bnQKKyAqCisgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3Mgd2hpY2ggYXJlIHNwbGl0IG91dCBmcm9tCisgKiBAc3RyLiAgVGhpcyBpcyBwZXJmb3JtZWQgYnkgc3RyaWN0bHkgc3BsaXR0aW5nIG9uIHdoaXRlLXNwYWNlOyBubworICogcXVvdGUgcHJvY2Vzc2luZyBpcyBwZXJmb3JtZWQuICBNdWx0aXBsZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlCisgKiBjb25zaWRlcmVkIHRvIGJlIGEgc2luZ2xlIGFyZ3VtZW50IHNlcGFyYXRvci4gIFRoZSByZXR1cm5lZCBhcnJheQorICogaXMgYWx3YXlzIE5VTEwtdGVybWluYXRlZC4gIFJldHVybnMgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbgorICogZmFpbHVyZS4KKyAqLworY2hhciAqKmFyZ3Zfc3BsaXQoY29uc3QgY2hhciAqc3RyLCBpbnQgKmFyZ2NwKQoreworCWludCBhcmdjID0gY291bnRfYXJnYyhzdHIpOworCWNoYXIgKiphcmd2ID0gemFsbG9jKHNpemVvZigqYXJndikgKiAoYXJnYysxKSk7CisJY2hhciAqKmFyZ3ZwOworCisJaWYgKGFyZ3YgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXJnY3ApCisJCSphcmdjcCA9IGFyZ2M7CisKKwlhcmd2cCA9IGFyZ3Y7CisKKwl3aGlsZSAoKnN0cikgeworCQlzdHIgPSBza2lwX3NlcChzdHIpOworCisJCWlmICgqc3RyKSB7CisJCQljb25zdCBjaGFyICpwID0gc3RyOworCQkJY2hhciAqdDsKKworCQkJc3RyID0gc2tpcF9hcmcoc3RyKTsKKworCQkJdCA9IHN0cm5kdXAocCwgc3RyLXApOworCQkJaWYgKHQgPT0gTlVMTCkKKwkJCQlnb3RvIGZhaWw7CisJCQkqYXJndnArKyA9IHQ7CisJCX0KKwl9CisJKmFyZ3ZwID0gTlVMTDsKKworb3V0OgorCXJldHVybiBhcmd2OworCitmYWlsOgorCWFyZ3ZfZnJlZShhcmd2KTsKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaAppbmRleCBiZjM5ZGZhLi5iZmVjZWMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5oCkBAIC0xLDExICsxLDE1IEBACi0jaWZuZGVmIF9QRVJGX1NUUklOR19IXwotI2RlZmluZSBfUEVSRl9TVFJJTkdfSF8KKyNpZm5kZWYgX19QRVJGX1NUUklOR19IXworI2RlZmluZSBfX1BFUkZfU1RSSU5HX0hfCiAKICNpbmNsdWRlICJ0eXBlcy5oIgogCiBpbnQgaGV4MnU2NChjb25zdCBjaGFyICpwdHIsIHU2NCAqdmFsKTsKK2NoYXIgKnN0cnhmcmNoYXIoY2hhciAqcywgY2hhciBmcm9tLCBjaGFyIHRvKTsKK3M2NCBwZXJmX2F0b2xsKGNvbnN0IGNoYXIgKnN0cik7CitjaGFyICoqYXJndl9zcGxpdChjb25zdCBjaGFyICpzdHIsIGludCAqYXJnY3ApOwordm9pZCBhcmd2X2ZyZWUoY2hhciAqKmFyZ3YpOwogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKIAotI2VuZGlmCisjZW5kaWYgLyogX19QRVJGX1NUUklOR19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3RybGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL3N0cmxpc3QuaAppbmRleCA5MjE4MThlLi5jYjQ2NTkzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RybGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJsaXN0LmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIFNUUkxJU1RfSF8KLSNkZWZpbmUgU1RSTElTVF9IXworI2lmbmRlZiBfX1BFUkZfU1RSTElTVF9ICisjZGVmaW5lIF9fUEVSRl9TVFJMSVNUX0gKIAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KQEAgLTM2LDQgKzM2LDQgQEAKIH0KIAogaW50IHN0cmxpc3RfX3BhcnNlX2xpc3Qoc3RydWN0IHN0cmxpc3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMpOwotI2VuZGlmIC8qIFNUUkxJU1RfSF8gKi8KKyNlbmRpZiAvKiBfX1BFUkZfU1RSTElTVF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKaW5kZXggODU2NjU1ZC4uYjM2MzdkYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7Ci0JZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjI0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5oIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5oCmluZGV4IGNkOTMxOTUuLmUwNzgxOTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9JTkNMVURFX0dVQVJEX1NWR19IRUxQRVJfCi0jZGVmaW5lIF9JTkNMVURFX0dVQVJEX1NWR19IRUxQRVJfCisjaWZuZGVmIF9fUEVSRl9TVkdIRUxQRVJfSAorI2RlZmluZSBfX1BFUkZfU1ZHSEVMUEVSX0gKIAogI2luY2x1ZGUgInR5cGVzLmgiCiAKQEAgLTI1LDQgKzI1LDQgQEAKIAogZXh0ZXJuIGludCBzdmdfcGFnZV93aWR0aDsKIAotI2VuZGlmCisjZW5kaWYgLyogX19QRVJGX1NWR0hFTFBFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggNDdlYTA2MC4uZmZmY2I5MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMiwxNCArMiwyMCBAQAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJzdHJpbmcuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJ0aHJlYWQuaCIKIAogI2luY2x1ZGUgImRlYnVnLmgiCiAKKyNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8bGliZWxmLmg+CiAjaW5jbHVkZSA8Z2VsZi5oPgogI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAKLWNvbnN0IGNoYXIgKnN5bV9oaXN0X2ZpbHRlcjsKKyNpZm5kZWYgTlRfR05VX0JVSUxEX0lECisjZGVmaW5lIE5UX0dOVV9CVUlMRF9JRCAzCisjZW5kaWYKIAogZW51bSBkc29fb3JpZ2luIHsKIAlEU09fX09SSUdfS0VSTkVMID0gMCwKQEAgLTE4LDk0ICsyNCwxODkgQEAKIAlEU09fX09SSUdfVUJVTlRVLAogCURTT19fT1JJR19CVUlMRElELAogCURTT19fT1JJR19EU08sCisJRFNPX19PUklHX0tNT0RVTEUsCiAJRFNPX19PUklHX05PVF9GT1VORCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfX25ldyh1NjQgc3RhcnQsIHU2NCBsZW4sCi0JCQkJICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgcHJpdl9zaXplLAotCQkJCSAgdTY0IG9ial9zdGFydCwgaW50IHYpCitzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKTsKK3N0YXRpYyBzdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwX2J5X25hbWUoc3RydWN0IHRocmVhZCAqc2VsZiwgY2hhciAqbmFtZSk7CitzdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcyKHU2NCBzdGFydCwgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOworc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKTsKK3N0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorCQkJCXN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Cit1bnNpZ25lZCBpbnQgc3ltYm9sX19wcml2X3NpemU7CitzdGF0aWMgaW50IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsKK3N0YXRpYyBjaGFyICoqdm1saW51eF9wYXRoOworCitzdGF0aWMgc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mX19kZWZhdWx0cyA9IHsKKwkudXNlX21vZHVsZXMJICA9IHRydWUsCisJLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCB0aHJlYWQga3RocmVhZF9tZW07CitzdHJ1Y3QgdGhyZWFkICprdGhyZWFkID0gJmt0aHJlYWRfbWVtOworCitib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3sKKwlyZXR1cm4gc2VsZi0+bG9hZGVkICYgKDEgPDwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCit7CisJc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc2VsZik7CisJc3RydWN0IHN5bWJvbCAqY3VyciwgKnByZXY7CisKKwlpZiAocHJldm5kID09IE5VTEwpCisJCXJldHVybjsKKworCWN1cnIgPSByYl9lbnRyeShwcmV2bmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOworCisJZm9yIChuZCA9IHJiX25leHQocHJldm5kKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJcHJldiA9IGN1cnI7CisJCWN1cnIgPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CisKKwkJaWYgKHByZXYtPmVuZCA9PSBwcmV2LT5zdGFydCkKKwkJCXByZXYtPmVuZCA9IGN1cnItPnN0YXJ0IC0gMTsKKwl9CisKKwkvKiBMYXN0IGVudHJ5ICovCisJaWYgKGN1cnItPmVuZCA9PSBjdXJyLT5zdGFydCkKKwkJY3Vyci0+ZW5kID0gcm91bmR1cChjdXJyLT5zdGFydCwgNDA5Nik7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGhyZWFkX19maXh1cF9tYXBzX2VuZChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc3RydWN0IG1hcCAqcHJldiwgKmN1cnI7CisJc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3QoJnNlbGYtPm1hcHNbdHlwZV0pOworCisJaWYgKHByZXZuZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwljdXJyID0gcmJfZW50cnkocHJldm5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKworCWZvciAobmQgPSByYl9uZXh0KHByZXZuZCk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXByZXYgPSBjdXJyOworCQljdXJyID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQlwcmV2LT5lbmQgPSBjdXJyLT5zdGFydCAtIDE7CisJfQorCisJLyoKKwkgKiBXZSBzdGlsbCBoYXZlbid0IHRoZSBhY3R1YWwgc3ltYm9scywgc28gZ3Vlc3MgdGhlCisJICogbGFzdCBtYXAgZmluYWwgYWRkcmVzcy4KKwkgKi8KKwljdXJyLT5lbmQgPSB+MFVMOworfQorCitzdGF0aWMgdm9pZCB0aHJlYWRfX2ZpeHVwX21hcHNfZW5kKHN0cnVjdCB0aHJlYWQgKnNlbGYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKKwkJX190aHJlYWRfX2ZpeHVwX21hcHNfZW5kKHNlbGYsIGkpOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXcodTY0IHN0YXJ0LCB1NjQgbGVuLCBjb25zdCBjaGFyICpuYW1lKQogewogCXNpemVfdCBuYW1lbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlzdHJ1Y3Qgc3ltYm9sICpzZWxmID0gY2FsbG9jKDEsIHByaXZfc2l6ZSArIHNpemVvZigqc2VsZikgKyBuYW1lbGVuKTsKLQotCWlmICghc2VsZikKKwlzdHJ1Y3Qgc3ltYm9sICpzZWxmID0gemFsbG9jKHN5bWJvbF9fcHJpdl9zaXplICsKKwkJCQkgICAgIHNpemVvZigqc2VsZikgKyBuYW1lbGVuKTsKKwlpZiAoc2VsZiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICh2ID49IDIpCi0JCXByaW50ZigibmV3IHN5bWJvbDogJTAxNkx4IFslMDhseF06ICVzLCBoaXN0OiAlcCwgb2JqX3N0YXJ0OiAlcFxuIiwKLQkJCSh1NjQpc3RhcnQsICh1bnNpZ25lZCBsb25nKWxlbiwgbmFtZSwgc2VsZi0+aGlzdCwgKHZvaWQgKikodW5zaWduZWQgbG9uZylvYmpfc3RhcnQpOworCWlmIChzeW1ib2xfX3ByaXZfc2l6ZSkKKwkJc2VsZiA9ICgodm9pZCAqKXNlbGYpICsgc3ltYm9sX19wcml2X3NpemU7CiAKLQlzZWxmLT5vYmpfc3RhcnQ9IG9ial9zdGFydDsKLQlzZWxmLT5oaXN0ID0gTlVMTDsKLQlzZWxmLT5oaXN0X3N1bSA9IDA7Ci0KLQlpZiAoc3ltX2hpc3RfZmlsdGVyICYmICFzdHJjbXAobmFtZSwgc3ltX2hpc3RfZmlsdGVyKSkKLQkJc2VsZi0+aGlzdCA9IGNhbGxvYyhzaXplb2YodTY0KSwgbGVuKTsKLQotCWlmIChwcml2X3NpemUpIHsKLQkJbWVtc2V0KHNlbGYsIDAsIHByaXZfc2l6ZSk7Ci0JCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHByaXZfc2l6ZTsKLQl9CiAJc2VsZi0+c3RhcnQgPSBzdGFydDsKIAlzZWxmLT5lbmQgICA9IGxlbiA/IHN0YXJ0ICsgbGVuIC0gMSA6IHN0YXJ0OworCisJcHJfZGVidWczKCIlczogJXMgJSNMeC0lI0x4XG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CisKIAltZW1jcHkoc2VsZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIHZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZiwgdW5zaWduZWQgaW50IHByaXZfc2l6ZSkKK3N0YXRpYyB2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpCiB7Ci0JZnJlZSgoKHZvaWQgKilzZWxmKSAtIHByaXZfc2l6ZSk7CisJZnJlZSgoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9fcHJpdl9zaXplKTsKIH0KIAogc3RhdGljIHNpemVfdCBzeW1ib2xfX2ZwcmludGYoc3RydWN0IHN5bWJvbCAqc2VsZiwgRklMRSAqZnApCiB7Ci0JaWYgKCFzZWxmLT5tb2R1bGUpCi0JCXJldHVybiBmcHJpbnRmKGZwLCAiICVsbHgtJWxseCAlc1xuIiwKKwlyZXR1cm4gZnByaW50ZihmcCwgIiAlbGx4LSVsbHggJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5uYW1lKTsKLQllbHNlCi0JCXJldHVybiBmcHJpbnRmKGZwLCAiICVsbHgtJWxseCAlcyBcdFslc11cbiIsCi0JCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5uYW1lLCBzZWxmLT5tb2R1bGUtPm5hbWUpOwogfQogCi1zdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc3ltX3ByaXZfc2l6ZSkKK3N0YXRpYyB2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQoreworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybjsKKwlzZWxmLT5sb25nX25hbWUgPSBuYW1lOworCXNlbGYtPmxvbmdfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRzb19fc2V0X2Jhc2VuYW1lKHN0cnVjdCBkc28gKnNlbGYpCit7CisJc2VsZi0+c2hvcnRfbmFtZSA9IGJhc2VuYW1lKHNlbGYtPmxvbmdfbmFtZSk7Cit9CisKK3N0cnVjdCBkc28gKmRzb19fbmV3KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGRzbyAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpICsgc3RybGVuKG5hbWUpICsgMSk7CiAKIAlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCWludCBpOwogCQlzdHJjcHkoc2VsZi0+bmFtZSwgbmFtZSk7Ci0JCXNlbGYtPnN5bXMgPSBSQl9ST09UOwotCQlzZWxmLT5zeW1fcHJpdl9zaXplID0gc3ltX3ByaXZfc2l6ZTsKKwkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHNlbGYtPm5hbWUpOworCQlzZWxmLT5zaG9ydF9uYW1lID0gc2VsZi0+bmFtZTsKKwkJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKKwkJCXNlbGYtPnN5bWJvbHNbaV0gPSBSQl9ST09UOwogCQlzZWxmLT5maW5kX3N5bWJvbCA9IGRzb19fZmluZF9zeW1ib2w7CiAJCXNlbGYtPnNsZW5fY2FsY3VsYXRlZCA9IDA7CiAJCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19OT1RfRk9VTkQ7CisJCXNlbGYtPmxvYWRlZCA9IDA7CisJCXNlbGYtPmhhc19idWlsZF9pZCA9IDA7CiAJfQogCiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fZGVsZXRlX3N5bWJvbHMoc3RydWN0IGRzbyAqc2VsZikKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX2RlbGV0ZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpwb3M7Ci0Jc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdCgmc2VsZi0+c3ltcyk7CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChzZWxmKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgJnNlbGYtPnN5bXMpOwotCQlzeW1ib2xfX2RlbGV0ZShwb3MsIHNlbGYtPnN5bV9wcml2X3NpemUpOworCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCBzZWxmKTsKKwkJc3ltYm9sX19kZWxldGUocG9zKTsKIAl9CiB9CiAKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqc2VsZikKIHsKLQlkc29fX2RlbGV0ZV9zeW1ib2xzKHNlbGYpOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCisJCXN5bWJvbHNfX2RlbGV0ZSgmc2VsZi0+c3ltYm9sc1tpXSk7CisJaWYgKHNlbGYtPmxvbmdfbmFtZSAhPSBzZWxmLT5uYW1lKQorCQlmcmVlKHNlbGYtPmxvbmdfbmFtZSk7CiAJZnJlZShzZWxmKTsKIH0KIAotc3RhdGljIHZvaWQgZHNvX19pbnNlcnRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3ZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJnNlbGYtPnN5bXMucmJfbm9kZTsKKwltZW1jcHkoc2VsZi0+YnVpbGRfaWQsIGJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKTsKKwlzZWxmLT5oYXNfYnVpbGRfaWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xzX19pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmc2VsZi0+cmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAljb25zdCB1NjQgaXAgPSBzeW0tPnN0YXJ0OwogCXN0cnVjdCBzeW1ib2wgKnM7CkBAIC0xMTksMTcgKzIyMCwxNyBAQAogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAl9CiAJcmJfbGlua19ub2RlKCZzeW0tPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZzeW0tPnJiX25vZGUsICZzZWxmLT5zeW1zKTsKKwlyYl9pbnNlcnRfY29sb3IoJnN5bS0+cmJfbm9kZSwgc2VsZik7CiB9CiAKLXN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgdTY0IGlwKQorc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHU2NCBpcCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAogCWlmIChzZWxmID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JbiA9IHNlbGYtPnN5bXMucmJfbm9kZTsKKwluID0gc2VsZi0+cmJfbm9kZTsKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBzeW1ib2wgKnMgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKQEAgLTE0NSwxMiArMjQ2LDQyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApCitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpCiB7Ci0Jc2l6ZV90IHJldCA9IGZwcmludGYoZnAsICJkc286ICVzXG4iLCBzZWxmLT5uYW1lKTsKKwlyZXR1cm4gc3ltYm9sc19fZmluZCgmc2VsZi0+c3ltYm9sc1t0eXBlXSwgYWRkcik7Cit9CiAKK2ludCBidWlsZF9pZF9fc3ByaW50Zih1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCit7CisJY2hhciAqYmlkID0gYmY7CisJdTggKnJhdyA9IHNlbGY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkJc3ByaW50ZihiaWQsICIlMDJ4IiwgKnJhdyk7CisJCSsrcmF3OworCQliaWQgKz0gMjsKKwl9CisKKwlyZXR1cm4gcmF3IC0gc2VsZjsKK30KKworc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKKwlyZXR1cm4gZnByaW50ZihmcCwgIiVzIiwgc2J1aWxkX2lkKTsKK30KKworc2l6ZV90IGRzb19fZnByaW50ZihzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQorewogCXN0cnVjdCByYl9ub2RlICpuZDsKLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgc2VsZi0+c2hvcnRfbmFtZSk7CisKKwlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoc2VsZiwgZnApOworCXJldCArPSBmcHJpbnRmKGZwLCAiKVxuIik7CisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQlyZXQgKz0gc3ltYm9sX19mcHJpbnRmKHBvcywgZnApOwogCX0KQEAgLTE1OCwxMyArMjg5LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCisvKgorICogTG9hZHMgdGhlIGZ1bmN0aW9uIGVudHJpZXMgaW4gL3Byb2Mva2FsbHN5bXMgaW50byBrZXJuZWxfbWFwLT5kc28sCisgKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KKyAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgorICovCitzdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQogewotCXN0cnVjdCByYl9ub2RlICpuZCwgKnByZXZuZDsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV07CiAJRklMRSAqZmlsZSA9IGZvcGVuKCIvcHJvYy9rYWxsc3ltcyIsICJyIik7Ci0JaW50IGNvdW50ID0gMDsKIAogCWlmIChmaWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZhaWx1cmU7CkBAIC0xNzQsNiArMzA5LDcgQEAKIAkJc3RydWN0IHN5bWJvbCAqc3ltOwogCQlpbnQgbGluZV9sZW4sIGxlbjsKIAkJY2hhciBzeW1ib2xfdHlwZTsKKwkJY2hhciAqc3ltYm9sX25hbWU7CiAKIAkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CiAJCWlmIChsaW5lX2xlbiA8IDApCkBAIC0xOTYsNDQgKzMzMiwyNiBAQAogCQkgKi8KIAkJaWYgKHN5bWJvbF90eXBlICE9ICdUJyAmJiBzeW1ib2xfdHlwZSAhPSAnVycpCiAJCQljb250aW51ZTsKKworCQlzeW1ib2xfbmFtZSA9IGxpbmUgKyBsZW4gKyAyOwogCQkvKgotCQkgKiBXZWxsIGZpeCB1cCB0aGUgZW5kIGxhdGVyLCB3aGVuIHdlIGhhdmUgYWxsIHNvcnRlZC4KKwkJICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KIAkJICovCi0JCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAweGRlYWQsIGxpbmUgKyBsZW4gKyAyLAotCQkJCSAgc2VsZi0+c3ltX3ByaXZfc2l6ZSwgMCwgdik7CisJCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAwLCBzeW1ib2xfbmFtZSk7CiAKIAkJaWYgKHN5bSA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0KLQkJaWYgKGZpbHRlciAmJiBmaWx0ZXIoc2VsZiwgc3ltKSkKLQkJCXN5bWJvbF9fZGVsZXRlKHN5bSwgc2VsZi0+c3ltX3ByaXZfc2l6ZSk7Ci0JCWVsc2UgewotCQkJZHNvX19pbnNlcnRfc3ltYm9sKHNlbGYsIHN5bSk7Ci0JCQljb3VudCsrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCBzb3J0ZWQgb3V0LCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgYWxsCi0JICogc3ltYm9scwotCSAqLwotCXByZXZuZCA9IHJiX2ZpcnN0KCZzZWxmLT5zeW1zKTsKLQotCWlmIChwcmV2bmQgPT0gTlVMTCkKLQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0KLQlmb3IgKG5kID0gcmJfbmV4dChwcmV2bmQpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3Qgc3ltYm9sICpwcmV2ID0gcmJfZW50cnkocHJldm5kLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKSwKLQkJCSAgICAgICpjdXJyID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwotCi0JCXByZXYtPmVuZCA9IGN1cnItPnN0YXJ0IC0gMTsKLQkJcHJldm5kID0gbmQ7CisJCS8qCisJCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgorCQkgKiBtYXBfX3NwbGl0X2thbGxzeW1zLCB3aGVuIHdlIGhhdmUgc3BsaXQgdGhlIG1hcHMgcGVyIG1vZHVsZQorCQkgKi8KKwkJc3ltYm9sc19faW5zZXJ0KHJvb3QsIHN5bSk7CiAJfQogCiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoZmlsZSk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIDA7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMjQxLDE0ICszNTksMTE0IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9wZXJmX21hcChzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKKy8qCisgKiBTcGxpdCB0aGUgc3ltYm9scyBpbnRvIG1hcHMsIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBvdmVybGFwcywgaS5lLiB0aGUKKyAqIGtlcm5lbCByYW5nZSBpcyBicm9rZW4gaW4gc2V2ZXJhbCBtYXBzLCBuYW1lZCBba2VybmVsXS5OLCBhcyB3ZSBkb24ndCBoYXZlCisgKiB0aGUgb3JpZ2luYWwgRUxGIHNlY3Rpb24gbmFtZXMgdm1saW51eCBoYXZlLgorICovCitzdGF0aWMgaW50IGRzb19fc3BsaXRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsCisJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3sKKwlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKKwlzdHJ1Y3Qgc3ltYm9sICpwb3M7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV07CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChyb290KTsKKwlpbnQga2VybmVsX3JhbmdlID0gMDsKKworCXdoaWxlIChuZXh0KSB7CisJCWNoYXIgKm1vZHVsZTsKKworCQlwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKKwkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7CisKKwkJbW9kdWxlID0gc3RyY2hyKHBvcy0+bmFtZSwgJ1x0Jyk7CisJCWlmIChtb2R1bGUpIHsKKwkJCWlmICghdGhyZWFkLT51c2VfbW9kdWxlcykKKwkJCQlnb3RvIGRpc2NhcmRfc3ltYm9sOworCisJCQkqbW9kdWxlKysgPSAnXDAnOworCisJCQlpZiAoc3RyY21wKHNlbGYtPm5hbWUsIG1vZHVsZSkpIHsKKwkJCQljdXJyX21hcCA9IHRocmVhZF9fZmluZF9tYXBfYnlfbmFtZSh0aHJlYWQsIG1vZHVsZSk7CisJCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKKwkJCQkJcHJfZGVidWcoIi9wcm9jL3trYWxsc3ltcyxtb2R1bGVzfSAiCisJCQkJCSAgICAgICAgICJpbmNvbnNpc3RlbmN5IVxuIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogU28gdGhhdCB3ZSBsb29rIGp1c3QgbGlrZSB3ZSBnZXQgZnJvbSAua28gZmlsZXMsCisJCQkgKiBpLmUuIG5vdCBwcmVsaW5rZWQsIHJlbGF0aXZlIHRvIG1hcC0+c3RhcnQuCisJCQkgKi8KKwkJCXBvcy0+c3RhcnQgPSBjdXJyX21hcC0+bWFwX2lwKGN1cnJfbWFwLCBwb3MtPnN0YXJ0KTsKKwkJCXBvcy0+ZW5kICAgPSBjdXJyX21hcC0+bWFwX2lwKGN1cnJfbWFwLCBwb3MtPmVuZCk7CisJCX0gZWxzZSBpZiAoY3Vycl9tYXAgIT0gbWFwKSB7CisJCQljaGFyIGRzb19uYW1lW1BBVEhfTUFYXTsKKwkJCXN0cnVjdCBkc28gKmRzbzsKKworCQkJc25wcmludGYoZHNvX25hbWUsIHNpemVvZihkc29fbmFtZSksICJba2VybmVsXS4lZCIsCisJCQkJIGtlcm5lbF9yYW5nZSsrKTsKKworCQkJZHNvID0gZHNvX19uZXcoZHNvX25hbWUpOworCQkJaWYgKGRzbyA9PSBOVUxMKQorCQkJCXJldHVybiAtMTsKKworCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgZHNvLCBtYXAtPnR5cGUpOworCQkJaWYgKG1hcCA9PSBOVUxMKSB7CisJCQkJZHNvX19kZWxldGUoZHNvKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWN1cnJfbWFwLT5tYXBfaXAgPSBjdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOworCQkJX190aHJlYWRfX2luc2VydF9tYXAodGhyZWFkLCBjdXJyX21hcCk7CisJCQkrK2tlcm5lbF9yYW5nZTsKKwkJfQorCisJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKGN1cnJfbWFwLCBwb3MpKSB7CitkaXNjYXJkX3N5bWJvbDoJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIHJvb3QpOworCQkJc3ltYm9sX19kZWxldGUocG9zKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjdXJyX21hcCAhPSBtYXApIHsKKwkJCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCByb290KTsKKwkJCQlzeW1ib2xzX19pbnNlcnQoJmN1cnJfbWFwLT5kc28tPnN5bWJvbHNbY3Vycl9tYXAtPnR5cGVdLCBwb3MpOworCQkJfQorCQkJY291bnQrKzsKKwkJfQorCX0KKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJaWYgKGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc2VsZiwgbWFwKSA8IDApCisJCXJldHVybiAtMTsKKworCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKKwlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOworCisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCB0aHJlYWQsIGZpbHRlcik7Cit9CisKK3NpemVfdCBrZXJuZWxfbWFwc19fZnByaW50ZihGSUxFICpmcCkKK3sKKwlzaXplX3QgcHJpbnRlZCA9IGZwcmludGYoZnAsICJLZXJuZWwgbWFwczpcbiIpOworCXByaW50ZWQgKz0gdGhyZWFkX19mcHJpbnRmX21hcHMoa3RocmVhZCwgZnApOworCXJldHVybiBwcmludGVkICsgZnByaW50ZihmcCwgIkVORCBrZXJuZWwgbWFwc1xuIik7Cit9CisKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJc2l6ZV90IG47CiAJRklMRSAqZmlsZTsKIAlpbnQgbnJfc3ltcyA9IDA7CiAKLQlmaWxlID0gZm9wZW4oc2VsZi0+bmFtZSwgInIiKTsKKwlmaWxlID0gZm9wZW4oc2VsZi0+bG9uZ19uYW1lLCAiciIpOwogCWlmIChmaWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZhaWx1cmU7CiAKQEAgLTI3OCwxNiArNDk2LDE1IEBACiAJCWlmIChsZW4gKyAyID49IGxpbmVfbGVuKQogCQkJY29udGludWU7CiAKLQkJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIHNpemUsIGxpbmUgKyBsZW4sCi0JCQkJICBzZWxmLT5zeW1fcHJpdl9zaXplLCBzdGFydCwgdik7CisJCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCBzaXplLCBsaW5lICsgbGVuKTsKIAogCQlpZiAoc3ltID09IE5VTEwpCiAJCQlnb3RvIG91dF9kZWxldGVfbGluZTsKIAotCQlpZiAoZmlsdGVyICYmIGZpbHRlcihzZWxmLCBzeW0pKQotCQkJc3ltYm9sX19kZWxldGUoc3ltLCBzZWxmLT5zeW1fcHJpdl9zaXplKTsKKwkJaWYgKGZpbHRlciAmJiBmaWx0ZXIobWFwLCBzeW0pKQorCQkJc3ltYm9sX19kZWxldGUoc3ltKTsKIAkJZWxzZSB7Ci0JCQlkc29fX2luc2VydF9zeW1ib2woc2VsZiwgc3ltKTsKKwkJCXN5bWJvbHNfX2luc2VydCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdLCBzeW0pOwogCQkJbnJfc3ltcysrOwogCQl9CiAJfQpAQCAtMzkzLDcgKzYxMCw4IEBACiAgKiBBbmQgYWx3YXlzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGRzbywgbm90IGF0IGRlYnVnaW5mbyBwYWNrYWdlcywgdGhhdAogICogaGF2ZSB0aGUgUExUIGRhdGEgc3RyaXBwZWQgb3V0IChzaGRyX3JlbF9wbHQuc2hfdHlwZSA9PSBTSFRfTk9CSVRTKS4KICAqLwotc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIGludCB2KQorc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1aW50MzJfdCBucl9yZWxfZW50cmllcywgaWR4OwogCUdFbGZfU3ltIHN5bTsKQEAgLTQwOSwxMSArNjI3LDExIEBACiAJRWxmICplbGY7CiAJaW50IG5yID0gMCwgc3ltaWR4LCBmZCwgZXJyID0gMDsKIAotCWZkID0gb3BlbihzZWxmLT5uYW1lLCBPX1JET05MWSk7CisJZmQgPSBvcGVuKHNlbGYtPmxvbmdfbmFtZSwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkKIAkJZ290byBvdXRfY2xvc2U7CiAKQEAgLTQ3NywxMiArNjk1LDE2IEBACiAJCQkJICIlc0BwbHQiLCBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpKTsKIAogCQkJZiA9IHN5bWJvbF9fbmV3KHBsdF9vZmZzZXQsIHNoZHJfcGx0LnNoX2VudHNpemUsCi0JCQkJCXN5bXBsdG5hbWUsIHNlbGYtPnN5bV9wcml2X3NpemUsIDAsIHYpOworCQkJCQlzeW1wbHRuYW1lKTsKIAkJCWlmICghZikKIAkJCQlnb3RvIG91dF9lbGZfZW5kOwogCi0JCQlkc29fX2luc2VydF9zeW1ib2woc2VsZiwgZik7Ci0JCQkrK25yOworCQkJaWYgKGZpbHRlciAmJiBmaWx0ZXIobWFwLCBmKSkKKwkJCQlzeW1ib2xfX2RlbGV0ZShmKTsKKwkJCWVsc2UgeworCQkJCXN5bWJvbHNfX2luc2VydCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdLCBmKTsKKwkJCQkrK25yOworCQkJfQogCQl9CiAJfSBlbHNlIGlmIChzaGRyX3JlbF9wbHQuc2hfdHlwZSA9PSBTSFRfUkVMKSB7CiAJCUdFbGZfUmVsIHBvc19tZW0sICpwb3M7CkBAIC00OTUsMTIgKzcxNywxNiBAQAogCQkJCSAiJXNAcGx0IiwgZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKSk7CiAKIAkJCWYgPSBzeW1ib2xfX25ldyhwbHRfb2Zmc2V0LCBzaGRyX3BsdC5zaF9lbnRzaXplLAotCQkJCQlzeW1wbHRuYW1lLCBzZWxmLT5zeW1fcHJpdl9zaXplLCAwLCB2KTsKKwkJCQkJc3ltcGx0bmFtZSk7CiAJCQlpZiAoIWYpCiAJCQkJZ290byBvdXRfZWxmX2VuZDsKIAotCQkJZHNvX19pbnNlcnRfc3ltYm9sKHNlbGYsIGYpOwotCQkJKytucjsKKwkJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKG1hcCwgZikpCisJCQkJc3ltYm9sX19kZWxldGUoZik7CisJCQllbHNlIHsKKwkJCQlzeW1ib2xzX19pbnNlcnQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSwgZik7CisJCQkJKytucjsKKwkJCX0KIAkJfQogCX0KIApAQCAtNTEzLDE0ICs3MzksMTggQEAKIAlpZiAoZXJyID09IDApCiAJCXJldHVybiBucjsKIG91dDoKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBwcm9ibGVtcyByZWFkaW5nICVzIFBMVCBpbmZvLlxuIiwKLQkJX19mdW5jX18sIHNlbGYtPm5hbWUpOworCXByX3dhcm5pbmcoIiVzOiBwcm9ibGVtcyByZWFkaW5nICVzIFBMVCBpbmZvLlxuIiwKKwkJICAgX19mdW5jX18sIHNlbGYtPmxvbmdfbmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYsIHN0cnVjdCBtb2R1bGUgKm1vZCkKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgc3RydWN0IHRocmVhZCAqdGhyZWFkLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsCisJCQkgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGtlcm5lbCwgaW50IGttb2R1bGUpCiB7CisJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CisJc3RydWN0IGRzbyAqY3Vycl9kc28gPSBzZWxmOworCXNpemVfdCBkc29fbmFtZV9sZW4gPSBzdHJsZW4oc2VsZi0+c2hvcnRfbmFtZSk7CiAJRWxmX0RhdGEgKnN5bXN0cnMsICpzZWNzdHJzOwogCXVpbnQzMl90IG5yX3N5bXM7CiAJaW50IGVyciA9IC0xOwpAQCAtNTMxLDE5ICs3NjEsMTYgQEAKIAlHRWxmX1N5bSBzeW07CiAJRWxmX1NjbiAqc2VjLCAqc2VjX3N0cm5keDsKIAlFbGYgKmVsZjsKLQlpbnQgbnIgPSAwLCBrZXJuZWwgPSAhc3RyY21wKCJba2VybmVsXSIsIHNlbGYtPm5hbWUpOworCWludCBuciA9IDA7CiAKLQllbGYgPSBlbGZfYmVnaW4oZmQsIEVMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CiAJaWYgKGVsZiA9PSBOVUxMKSB7Ci0JCWlmICh2KQotCQkJZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLAotCQkJCV9fZnVuY19fLCBuYW1lKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgbmFtZSk7CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAogCWlmIChnZWxmX2dldGVoZHIoZWxmLCAmZWhkcikgPT0gTlVMTCkgewotCQlpZiAodikKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IGdldCBlbGYgaGVhZGVyLlxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIApAQCAtNTg3LDkgKzgxNCw3IEBACiAJZWxmX3N5bXRhYl9fZm9yX2VhY2hfc3ltYm9sKHN5bXMsIG5yX3N5bXMsIGlkeCwgc3ltKSB7CiAJCXN0cnVjdCBzeW1ib2wgKmY7CiAJCWNvbnN0IGNoYXIgKmVsZl9uYW1lOwotCQljaGFyICpkZW1hbmdsZWQ7Ci0JCXU2NCBvYmpfc3RhcnQ7Ci0JCXN0cnVjdCBzZWN0aW9uICpzZWN0aW9uID0gTlVMTDsKKwkJY2hhciAqZGVtYW5nbGVkID0gTlVMTDsKIAkJaW50IGlzX2xhYmVsID0gZWxmX3N5bV9faXNfbGFiZWwoJnN5bSk7CiAJCWNvbnN0IGNoYXIgKnNlY3Rpb25fbmFtZTsKIApAQCAtNjA1LDUyICs4MzAsODUgQEAKIAkJaWYgKGlzX2xhYmVsICYmICFlbGZfc2VjX19pc190ZXh0KCZzaGRyLCBzZWNzdHJzKSkKIAkJCWNvbnRpbnVlOwogCisJCWVsZl9uYW1lID0gZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKTsKIAkJc2VjdGlvbl9uYW1lID0gZWxmX3NlY19fbmFtZSgmc2hkciwgc2Vjc3Rycyk7Ci0JCW9ial9zdGFydCA9IHN5bS5zdF92YWx1ZTsKIAotCQlpZiAoc2VsZi0+YWRqdXN0X3N5bWJvbHMpIHsKLQkJCWlmICh2ID49IDIpCi0JCQkJcHJpbnRmKCJhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJUx4IHNoX2FkZHI6ICVMeCBzaF9vZmZzZXQ6ICVMeFxuIiwKLQkJCQkJKHU2NClzeW0uc3RfdmFsdWUsICh1NjQpc2hkci5zaF9hZGRyLCAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKKwkJaWYgKGtlcm5lbCB8fCBrbW9kdWxlKSB7CisJCQljaGFyIGRzb19uYW1lW1BBVEhfTUFYXTsKIAotCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OworCQkJaWYgKHN0cmNtcChzZWN0aW9uX25hbWUsCisJCQkJICAgY3Vycl9kc28tPnNob3J0X25hbWUgKyBkc29fbmFtZV9sZW4pID09IDApCisJCQkJZ290byBuZXdfc3ltYm9sOworCisJCQlpZiAoc3RyY21wKHNlY3Rpb25fbmFtZSwgIi50ZXh0IikgPT0gMCkgeworCQkJCWN1cnJfbWFwID0gbWFwOworCQkJCWN1cnJfZHNvID0gc2VsZjsKKwkJCQlnb3RvIG5ld19zeW1ib2w7CisJCQl9CisKKwkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAorCQkJCSAiJXMlcyIsIHNlbGYtPnNob3J0X25hbWUsIHNlY3Rpb25fbmFtZSk7CisKKwkJCWN1cnJfbWFwID0gdGhyZWFkX19maW5kX21hcF9ieV9uYW1lKHRocmVhZCwgZHNvX25hbWUpOworCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKKwkJCQl1NjQgc3RhcnQgPSBzeW0uc3RfdmFsdWU7CisKKwkJCQlpZiAoa21vZHVsZSkKKwkJCQkJc3RhcnQgKz0gbWFwLT5zdGFydCArIHNoZHIuc2hfb2Zmc2V0OworCisJCQkJY3Vycl9kc28gPSBkc29fX25ldyhkc29fbmFtZSk7CisJCQkJaWYgKGN1cnJfZHNvID09IE5VTEwpCisJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CisJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAorCQkJCQkJICAgICBNQVBfX0ZVTkNUSU9OKTsKKwkJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgeworCQkJCQlkc29fX2RlbGV0ZShjdXJyX2Rzbyk7CisJCQkJCWdvdG8gb3V0X2VsZl9lbmQ7CisJCQkJfQorCQkJCWN1cnJfbWFwLT5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOworCQkJCWN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisJCQkJY3Vycl9kc28tPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7CisJCQkJX190aHJlYWRfX2luc2VydF9tYXAoa3RocmVhZCwgY3Vycl9tYXApOworCQkJCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBjdXJyX2Rzbyk7CisJCQl9IGVsc2UKKwkJCQljdXJyX2RzbyA9IGN1cnJfbWFwLT5kc287CisKKwkJCWdvdG8gbmV3X3N5bWJvbDsKIAkJfQogCi0JCWlmIChtb2QpIHsKLQkJCXNlY3Rpb24gPSBtb2QtPnNlY3Rpb25zLT5maW5kX3NlY3Rpb24obW9kLT5zZWN0aW9ucywgc2VjdGlvbl9uYW1lKTsKLQkJCWlmIChzZWN0aW9uKQotCQkJCXN5bS5zdF92YWx1ZSArPSBzZWN0aW9uLT52bWE7Ci0JCQllbHNlIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9zeW0oKSBtb2R1bGUgJXMgbG9va3VwIG9mICVzIGZhaWxlZFxuIiwKLQkJCQkJbW9kLT5uYW1lLCBzZWN0aW9uX25hbWUpOwotCQkJCWdvdG8gb3V0X2VsZl9lbmQ7Ci0JCQl9CisJCWlmIChjdXJyX2Rzby0+YWRqdXN0X3N5bWJvbHMpIHsKKwkJCXByX2RlYnVnMigiYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICVMeCBzaF9hZGRyOiAiCisJCQkJICAiJUx4IHNoX29mZnNldDogJUx4XG4iLCAodTY0KXN5bS5zdF92YWx1ZSwKKwkJCQkgICh1NjQpc2hkci5zaF9hZGRyLCAodTY0KXNoZHIuc2hfb2Zmc2V0KTsKKwkJCXN5bS5zdF92YWx1ZSAtPSBzaGRyLnNoX2FkZHIgLSBzaGRyLnNoX29mZnNldDsKIAkJfQogCQkvKgogCQkgKiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG9iamVjdCB3YXMgY3JlYXRlZCBmcm9tIEMrKyBzb3VyY2VzCiAJCSAqIERXQVJGIERXX2NvbXBpbGVfdW5pdCBoYXMgdGhpcywgYnV0IHdlIGRvbid0IGFsd2F5cyBoYXZlIGFjY2VzcwogCQkgKiB0byBpdC4uLgogCQkgKi8KLQkJZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwogCQlkZW1hbmdsZWQgPSBiZmRfZGVtYW5nbGUoTlVMTCwgZWxmX25hbWUsIERNR0xfUEFSQU1TIHwgRE1HTF9BTlNJKTsKIAkJaWYgKGRlbWFuZ2xlZCAhPSBOVUxMKQogCQkJZWxmX25hbWUgPSBkZW1hbmdsZWQ7Ci0KLQkJZiA9IHN5bWJvbF9fbmV3KHN5bS5zdF92YWx1ZSwgc3ltLnN0X3NpemUsIGVsZl9uYW1lLAotCQkJCXNlbGYtPnN5bV9wcml2X3NpemUsIG9ial9zdGFydCwgdik7CituZXdfc3ltYm9sOgorCQlmID0gc3ltYm9sX19uZXcoc3ltLnN0X3ZhbHVlLCBzeW0uc3Rfc2l6ZSwgZWxmX25hbWUpOwogCQlmcmVlKGRlbWFuZ2xlZCk7CiAJCWlmICghZikKIAkJCWdvdG8gb3V0X2VsZl9lbmQ7CiAKLQkJaWYgKGZpbHRlciAmJiBmaWx0ZXIoc2VsZiwgZikpCi0JCQlzeW1ib2xfX2RlbGV0ZShmLCBzZWxmLT5zeW1fcHJpdl9zaXplKTsKKwkJaWYgKGZpbHRlciAmJiBmaWx0ZXIoY3Vycl9tYXAsIGYpKQorCQkJc3ltYm9sX19kZWxldGUoZik7CiAJCWVsc2UgewotCQkJZi0+bW9kdWxlID0gbW9kOwotCQkJZHNvX19pbnNlcnRfc3ltYm9sKHNlbGYsIGYpOworCQkJc3ltYm9sc19faW5zZXJ0KCZjdXJyX2Rzby0+c3ltYm9sc1tjdXJyX21hcC0+dHlwZV0sIGYpOwogCQkJbnIrKzsKIAkJfQogCX0KIAorCS8qCisJICogRm9yIG1pc2Fubm90YXRlZCwgemVyb2VkLCBBU00gZnVuY3Rpb24gc2l6ZXMuCisJICovCisJaWYgKG5yID4gMCkKKwkJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOwogCWVyciA9IG5yOwogb3V0X2VsZl9lbmQ6CiAJZWxmX2VuZChlbGYpOwpAQCAtNjU4LDYzICs5MTYsMTUzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2RlZmluZSBCVUlMRF9JRF9TSVpFIDEyOAotCi1zdGF0aWMgY2hhciAqZHNvX19yZWFkX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIGludCB2KQorc3RhdGljIGJvb2wgZHNvX19idWlsZF9pZF9lcXVhbChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCB1OCAqYnVpbGRfaWQpCiB7Ci0JaW50IGk7CisJcmV0dXJuIG1lbWNtcChzZWxmLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDA7Cit9CisKK3N0YXRpYyBib29sIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlib29sIGhhdmVfYnVpbGRfaWQgPSBmYWxzZTsKKwlzdHJ1Y3QgZHNvICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkKKwkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHBvcy0+bG9uZ19uYW1lLCBwb3MtPmJ1aWxkX2lkLAorCQkJCQkgICAgc2l6ZW9mKHBvcy0+YnVpbGRfaWQpKSA+IDApIHsKKwkJCWhhdmVfYnVpbGRfaWQJICA9IHRydWU7CisJCQlwb3MtPmhhc19idWlsZF9pZCA9IHRydWU7CisJCX0KKworCXJldHVybiBoYXZlX2J1aWxkX2lkOworfQorCitib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKHZvaWQpCit7CisJcmV0dXJuIF9fZHNvc19fcmVhZF9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCkgfHwKKwkgICAgICAgX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlcik7Cit9CisKKy8qCisgKiBBbGlnbiBvZmZzZXQgdG8gNCBieXRlcyBhcyBuZWVkZWQgZm9yIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRvciBkYXRhLgorICovCisjZGVmaW5lIE5PVEVfQUxJR04obikgKCgobikgKyAzKSAmIC00VSkKKworaW50IGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpiZiwgc2l6ZV90IHNpemUpCit7CisJaW50IGZkLCBlcnIgPSAtMTsKIAlHRWxmX0VoZHIgZWhkcjsKIAlHRWxmX1NoZHIgc2hkcjsKLQlFbGZfRGF0YSAqYnVpbGRfaWRfZGF0YTsKKwlFbGZfRGF0YSAqZGF0YTsKIAlFbGZfU2NuICpzZWM7Ci0JY2hhciAqYnVpbGRfaWQgPSBOVUxMLCAqYmlkOwotCXVuc2lnbmVkIGNoYXIgKnJhdzsKKwlFbGZfS2luZCBlazsKKwl2b2lkICpwdHI7CiAJRWxmICplbGY7Ci0JaW50IGZkID0gb3BlbihzZWxmLT5uYW1lLCBPX1JET05MWSk7CiAKKwlpZiAoc2l6ZSA8IEJVSUxEX0lEX1NJWkUpCisJCWdvdG8gb3V0OworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllbGYgPSBlbGZfYmVnaW4oZmQsIEVMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CiAJaWYgKGVsZiA9PSBOVUxMKSB7Ci0JCWlmICh2KQotCQkJZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLAotCQkJCV9fZnVuY19fLCBzZWxmLT5uYW1lKTsKKwkJcHJfZGVidWcyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUpOwogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKKwllayA9IGVsZl9raW5kKGVsZik7CisJaWYgKGVrICE9IEVMRl9LX0VMRikKKwkJZ290byBvdXRfZWxmX2VuZDsKKwogCWlmIChnZWxmX2dldGVoZHIoZWxmLCAmZWhkcikgPT0gTlVMTCkgewotCQlpZiAodikKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IGdldCBlbGYgaGVhZGVyLlxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIAotCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsICIubm90ZS5nbnUuYnVpbGQtaWQiLCBOVUxMKTsKLQlpZiAoc2VjID09IE5VTEwpCi0JCWdvdG8gb3V0X2VsZl9lbmQ7Ci0KLQlidWlsZF9pZF9kYXRhID0gZWxmX2dldGRhdGEoc2VjLCBOVUxMKTsKLQlpZiAoYnVpbGRfaWRfZGF0YSA9PSBOVUxMKQotCQlnb3RvIG91dF9lbGZfZW5kOwotCWJ1aWxkX2lkID0gbWFsbG9jKEJVSUxEX0lEX1NJWkUpOwotCWlmIChidWlsZF9pZCA9PSBOVUxMKQotCQlnb3RvIG91dF9lbGZfZW5kOwotCXJhdyA9IGJ1aWxkX2lkX2RhdGEtPmRfYnVmICsgMTY7Ci0JYmlkID0gYnVpbGRfaWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7ICsraSkgewotCQlzcHJpbnRmKGJpZCwgIiUwMngiLCAqcmF3KTsKLQkJKytyYXc7Ci0JCWJpZCArPSAyOworCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsCisJCQkJICAiLm5vdGUuZ251LmJ1aWxkLWlkIiwgTlVMTCk7CisJaWYgKHNlYyA9PSBOVUxMKSB7CisJCXNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJnNoZHIsCisJCQkJCSAgIi5ub3RlcyIsIE5VTEwpOworCQlpZiAoc2VjID09IE5VTEwpCisJCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KLQlpZiAodiA+PSAyKQotCQlwcmludGYoIiVzKCVzKTogJXNcbiIsIF9fZnVuY19fLCBzZWxmLT5uYW1lLCBidWlsZF9pZCk7CisKKwlkYXRhID0gZWxmX2dldGRhdGEoc2VjLCBOVUxMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlnb3RvIG91dF9lbGZfZW5kOworCisJcHRyID0gZGF0YS0+ZF9idWY7CisJd2hpbGUgKHB0ciA8IChkYXRhLT5kX2J1ZiArIGRhdGEtPmRfc2l6ZSkpIHsKKwkJR0VsZl9OaGRyICpuaGRyID0gcHRyOworCQlpbnQgbmFtZXN6ID0gTk9URV9BTElHTihuaGRyLT5uX25hbWVzeiksCisJCSAgICBkZXNjc3ogPSBOT1RFX0FMSUdOKG5oZHItPm5fZGVzY3N6KTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQlwdHIgKz0gc2l6ZW9mKCpuaGRyKTsKKwkJbmFtZSA9IHB0cjsKKwkJcHRyICs9IG5hbWVzejsKKwkJaWYgKG5oZHItPm5fdHlwZSA9PSBOVF9HTlVfQlVJTERfSUQgJiYKKwkJICAgIG5oZHItPm5fbmFtZXN6ID09IHNpemVvZigiR05VIikpIHsKKwkJCWlmIChtZW1jbXAobmFtZSwgIkdOVSIsIHNpemVvZigiR05VIikpID09IDApIHsKKwkJCQltZW1jcHkoYmYsIHB0ciwgQlVJTERfSURfU0laRSk7CisJCQkJZXJyID0gQlVJTERfSURfU0laRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwdHIgKz0gZGVzY3N6OworCX0KIG91dF9lbGZfZW5kOgogCWVsZl9lbmQoZWxmKTsKIG91dF9jbG9zZToKIAljbG9zZShmZCk7CiBvdXQ6Ci0JcmV0dXJuIGJ1aWxkX2lkOworCXJldHVybiBlcnI7Cit9CisKK2ludCBzeXNmc19fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYnVpbGRfaWQsIHNpemVfdCBzaXplKQoreworCWludCBmZCwgZXJyID0gLTE7CisKKwlpZiAoc2l6ZSA8IEJVSUxEX0lEX1NJWkUpCisJCWdvdG8gb3V0OworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoMSkgeworCQljaGFyIGJmW0JVRlNJWl07CisJCUdFbGZfTmhkciBuaGRyOworCQlpbnQgbmFtZXN6LCBkZXNjc3o7CisKKwkJaWYgKHJlYWQoZmQsICZuaGRyLCBzaXplb2YobmhkcikpICE9IHNpemVvZihuaGRyKSkKKwkJCWJyZWFrOworCisJCW5hbWVzeiA9IE5PVEVfQUxJR04obmhkci5uX25hbWVzeik7CisJCWRlc2NzeiA9IE5PVEVfQUxJR04obmhkci5uX2Rlc2Nzeik7CisJCWlmIChuaGRyLm5fdHlwZSA9PSBOVF9HTlVfQlVJTERfSUQgJiYKKwkJICAgIG5oZHIubl9uYW1lc3ogPT0gc2l6ZW9mKCJHTlUiKSkgeworCQkJaWYgKHJlYWQoZmQsIGJmLCBuYW1lc3opICE9IG5hbWVzeikKKwkJCQlicmVhazsKKwkJCWlmIChtZW1jbXAoYmYsICJHTlUiLCBzaXplb2YoIkdOVSIpKSA9PSAwKSB7CisJCQkJaWYgKHJlYWQoZmQsIGJ1aWxkX2lkLAorCQkJCSAgICBCVUlMRF9JRF9TSVpFKSA9PSBCVUlMRF9JRF9TSVpFKSB7CisJCQkJCWVyciA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSBpZiAocmVhZChmZCwgYmYsIGRlc2NzeikgIT0gZGVzY3N6KQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaW50IG4gPSBuYW1lc3ogKyBkZXNjc3o7CisJCQlpZiAocmVhZChmZCwgYmYsIG4pICE9IG4pCisJCQkJYnJlYWs7CisJCX0KKwl9CisJY2xvc2UoZmQpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIGNoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYpCkBAIC03MjYsNiArMTA3NCw3IEBACiAJCVtEU09fX09SSUdfVUJVTlRVXSA9ICAgJ3UnLAogCQlbRFNPX19PUklHX0JVSUxESURdID0gICdiJywKIAkJW0RTT19fT1JJR19EU09dID0gICAgICAnZCcsCisJCVtEU09fX09SSUdfS01PRFVMRV0gPSAgJ0snLAogCX07CiAKIAlpZiAoc2VsZiA9PSBOVUxMIHx8IHNlbGYtPm9yaWdpbiA9PSBEU09fX09SSUdfTk9UX0ZPVU5EKQpAQCAtNzMzLDIwICsxMDgyLDI3IEBACiAJcmV0dXJuIG9yaWdpbltzZWxmLT5vcmlnaW5dOwogfQogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2KQoraW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpuYW1lID0gbWFsbG9jKHNpemUpLCAqYnVpbGRfaWQgPSBOVUxMOworCWNoYXIgKm5hbWU7CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CiAJaW50IHJldCA9IC0xOwogCWludCBmZDsKIAorCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOworCisJaWYgKHNlbGYtPmtlcm5lbCkKKwkJcmV0dXJuIGRzb19fbG9hZF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwga3RocmVhZCwgZmlsdGVyKTsKKworCW5hbWUgPSBtYWxsb2Moc2l6ZSk7CiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gLTE7CiAKIAlzZWxmLT5hZGp1c3Rfc3ltYm9scyA9IDA7CiAKIAlpZiAoc3RybmNtcChzZWxmLT5uYW1lLCAiL3RtcC9wZXJmLSIsIDEwKSA9PSAwKSB7Ci0JCXJldCA9IGRzb19fbG9hZF9wZXJmX21hcChzZWxmLCBmaWx0ZXIsIHYpOworCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoc2VsZiwgbWFwLCBmaWx0ZXIpOwogCQlzZWxmLT5vcmlnaW4gPSByZXQgPiAwID8gRFNPX19PUklHX0pBVkFfSklUIDoKIAkJCQkJIERTT19fT1JJR19OT1RfRk9VTkQ7CiAJCXJldHVybiByZXQ7CkBAIC03NTksMzQgKzExMTUsNTAgQEAKIAkJc2VsZi0+b3JpZ2luKys7CiAJCXN3aXRjaCAoc2VsZi0+b3JpZ2luKSB7CiAJCWNhc2UgRFNPX19PUklHX0ZFRE9SQToKLQkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIvdXNyL2xpYi9kZWJ1ZyVzLmRlYnVnIiwgc2VsZi0+bmFtZSk7CisJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiL3Vzci9saWIvZGVidWclcy5kZWJ1ZyIsCisJCQkJIHNlbGYtPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfVUJVTlRVOgotCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIi91c3IvbGliL2RlYnVnJXMiLCBzZWxmLT5uYW1lKTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIvdXNyL2xpYi9kZWJ1ZyVzIiwKKwkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIERTT19fT1JJR19CVUlMRElEOgotCQkJYnVpbGRfaWQgPSBkc29fX3JlYWRfYnVpbGRfaWQoc2VsZiwgdik7Ci0JCQlpZiAoYnVpbGRfaWQgIT0gTlVMTCkgeworCQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNlbGYtPmxvbmdfbmFtZSwgYnVpbGRfaWQsCisJCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkpIHsKKwkJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCisJCQkJCQkgIGJ1aWxkX2lkX2hleCk7CiAJCQkJc25wcmludGYobmFtZSwgc2l6ZSwKIAkJCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCi0JCQkJCWJ1aWxkX2lkLCBidWlsZF9pZCArIDIpOwotCQkJCWZyZWUoYnVpbGRfaWQpOworCQkJCQlidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQkJCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpCisJCQkJCWdvdG8gY29tcGFyZV9idWlsZF9pZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNlbGYtPm9yaWdpbisrOwogCQkJLyogRmFsbCB0aHJ1ICovCiAJCWNhc2UgRFNPX19PUklHX0RTTzoKLQkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcyIsIHNlbGYtPm5hbWUpOworCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzIiwgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQogCisJCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChuYW1lLCBidWlsZF9pZCwKKwkJCQkJCSAgICBzaXplb2YoYnVpbGRfaWQpKSA8IDApCisJCQkJZ290byBtb3JlOworY29tcGFyZV9idWlsZF9pZDoKKwkJCWlmICghZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBidWlsZF9pZCkpCisJCQkJZ290byBtb3JlOworCQl9CisKIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAl9IHdoaWxlIChmZCA8IDApOwogCi0JcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBmZCwgbmFtZSwgZmlsdGVyLCB2LCBOVUxMKTsKKwlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgTlVMTCwgbmFtZSwgZmQsIGZpbHRlciwgMCwgMCk7CiAJY2xvc2UoZmQpOwogCiAJLyoKQEAgLTc5Niw3ICsxMTY4LDcgQEAKIAkJZ290byBtb3JlOwogCiAJaWYgKHJldCA+IDApIHsKLQkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCB2KTsKKwkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCBtYXAsIGZpbHRlcik7CiAJCWlmIChucl9wbHQgPiAwKQogCQkJcmV0ICs9IG5yX3BsdDsKIAl9CkBAIC04MDcsMTUxICsxMTc5LDI3OSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX21vZHVsZShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbW9kX2RzbyAqbW9kcywgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCitzdGF0aWMgc3RydWN0IG1hcCAqdGhyZWFkX19maW5kX21hcF9ieV9uYW1lKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG1vZHVsZSAqbW9kID0gbW9kX2Rzb19fZmluZF9tb2R1bGUobW9kcywgbmFtZSk7Ci0JaW50IGVyciA9IDAsIGZkOwotCi0JaWYgKG1vZCA9PSBOVUxMIHx8ICFtb2QtPmFjdGl2ZSkKLQkJcmV0dXJuIGVycjsKLQotCWZkID0gb3Blbihtb2QtPnBhdGgsIE9fUkRPTkxZKTsKLQotCWlmIChmZCA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIGZkLCBuYW1lLCBmaWx0ZXIsIHYsIG1vZCk7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IGRzb19fbG9hZF9tb2R1bGVzKHN0cnVjdCBkc28gKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2KQotewotCXN0cnVjdCBtb2RfZHNvICptb2RzID0gbW9kX2Rzb19fbmV3X2RzbygibW9kdWxlcyIpOwotCXN0cnVjdCBtb2R1bGUgKnBvczsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlpbnQgZXJyLCBjb3VudCA9IDA7Ci0KLQllcnIgPSBtb2RfZHNvX19sb2FkX21vZHVsZXMobW9kcyk7Ci0KLQlpZiAoZXJyIDw9IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKgotCSAqIEl0ZXJhdGUgb3ZlciBtb2R1bGVzLCBhbmQgbG9hZCBhY3RpdmUgc3ltYm9scy4KLQkgKi8KLQluZXh0ID0gcmJfZmlyc3QoJm1vZHMtPm1vZHMpOwotCXdoaWxlIChuZXh0KSB7Ci0JCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtb2R1bGUsIHJiX25vZGUpOwotCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlKHNlbGYsIG1vZHMsIHBvcy0+bmFtZSwgZmlsdGVyLCB2KTsKLQotCQlpZiAoZXJyIDwgMCkKLQkJCWJyZWFrOwotCi0JCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOwotCQljb3VudCArPSBlcnI7Ci0JfQotCi0JaWYgKGVyciA8IDApIHsKLQkJbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMobW9kcyk7Ci0JCW1vZF9kc29fX2RlbGV0ZV9zZWxmKG1vZHMpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzb19fZmlsbF9zeW1ib2xfaG9sZXMoc3RydWN0IGRzbyAqc2VsZikKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKLQlmb3IgKG5kID0gcmJfbGFzdCgmc2VsZi0+c3ltcyk7IG5kOyBuZCA9IHJiX3ByZXYobmQpKSB7Ci0JCXN0cnVjdCBzeW1ib2wgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPm1hcHNbTUFQX19GVU5DVElPTl0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgbWFwICptYXAgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CiAKLQkJaWYgKHByZXYpIHsKLQkJCXU2NCBob2xlID0gMDsKLQkJCWludCBhbGlhcyA9IHBvcy0+c3RhcnQgPT0gcHJldi0+c3RhcnQ7Ci0KLQkJCWlmICghYWxpYXMpCi0JCQkJaG9sZSA9IHByZXYtPnN0YXJ0IC0gcG9zLT5lbmQgLSAxOwotCi0JCQlpZiAoaG9sZSB8fCBhbGlhcykgewotCQkJCWlmIChhbGlhcykKLQkJCQkJcG9zLT5lbmQgPSBwcmV2LT5lbmQ7Ci0JCQkJZWxzZSBpZiAoaG9sZSkKLQkJCQkJcG9zLT5lbmQgPSBwcmV2LT5zdGFydCAtIDE7Ci0JCQl9Ci0JCX0KLQkJcHJldiA9IHBvczsKKwkJaWYgKG1hcC0+ZHNvICYmIHN0cmNtcChtYXAtPmRzby0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiBtYXA7CiAJfQorCisJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCwKLQkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCitzdGF0aWMgaW50IGRzb3NfX3NldF9tb2R1bGVzX3BhdGhfZGlyKGNoYXIgKmRpcm5hbWUpCiB7Ci0JaW50IGVyciwgZmQgPSBvcGVuKHZtbGludXgsIE9fUkRPTkxZKTsKKwlzdHJ1Y3QgZGlyZW50ICpkZW50OworCURJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKIAorCWlmICghZGlyKSB7CisJCXByX2RlYnVnKCIlczogY2Fubm90IG9wZW4gJXMgZGlyXG4iLCBfX2Z1bmNfXywgZGlybmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKKworCQlpZiAoZGVudC0+ZF90eXBlID09IERUX0RJUikgeworCQkJaWYgKCFzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpIHx8CisJCQkgICAgIXN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpKQorCQkJCWNvbnRpbnVlOworCisJCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsCisJCQkJIGRpcm5hbWUsIGRlbnQtPmRfbmFtZSk7CisJCQlpZiAoZHNvc19fc2V0X21vZHVsZXNfcGF0aF9kaXIocGF0aCkgPCAwKQorCQkJCWdvdG8gZmFpbHVyZTsKKwkJfSBlbHNlIHsKKwkJCWNoYXIgKmRvdCA9IHN0cnJjaHIoZGVudC0+ZF9uYW1lLCAnLicpLAorCQkJICAgICBkc29fbmFtZVtQQVRIX01BWF07CisJCQlzdHJ1Y3QgbWFwICptYXA7CisJCQljaGFyICpsb25nX25hbWU7CisKKwkJCWlmIChkb3QgPT0gTlVMTCB8fCBzdHJjbXAoZG90LCAiLmtvIikpCisJCQkJY29udGludWU7CisJCQlzbnByaW50Zihkc29fbmFtZSwgc2l6ZW9mKGRzb19uYW1lKSwgIlslLipzXSIsCisJCQkJIChpbnQpKGRvdCAtIGRlbnQtPmRfbmFtZSksIGRlbnQtPmRfbmFtZSk7CisKKwkJCXN0cnhmcmNoYXIoZHNvX25hbWUsICctJywgJ18nKTsKKwkJCW1hcCA9IHRocmVhZF9fZmluZF9tYXBfYnlfbmFtZShrdGhyZWFkLCBkc29fbmFtZSk7CisJCQlpZiAobWFwID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwKKwkJCQkgZGlybmFtZSwgZGVudC0+ZF9uYW1lKTsKKworCQkJbG9uZ19uYW1lID0gc3RyZHVwKHBhdGgpOworCQkJaWYgKGxvbmdfbmFtZSA9PSBOVUxMKQorCQkJCWdvdG8gZmFpbHVyZTsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShtYXAtPmRzbywgbG9uZ19uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiAwOworZmFpbHVyZToKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBkc29zX19zZXRfbW9kdWxlc19wYXRoKHZvaWQpCit7CisJc3RydWN0IHV0c25hbWUgdXRzOworCWNoYXIgbW9kdWxlc19wYXRoW1BBVEhfTUFYXTsKKworCWlmICh1bmFtZSgmdXRzKSA8IDApCisJCXJldHVybiAtMTsKKworCXNucHJpbnRmKG1vZHVsZXNfcGF0aCwgc2l6ZW9mKG1vZHVsZXNfcGF0aCksICIvbGliL21vZHVsZXMvJXMva2VybmVsIiwKKwkJIHV0cy5yZWxlYXNlKTsKKworCXJldHVybiBkc29zX19zZXRfbW9kdWxlc19wYXRoX2Rpcihtb2R1bGVzX3BhdGgpOworfQorCisvKgorICogQ29uc3RydWN0b3IgdmFyaWFudCBmb3IgbW9kdWxlcyAod2hlcmUgd2Uga25vdyBmcm9tIC9wcm9jL21vZHVsZXMgd2hlcmUKKyAqIHRoZXkgYXJlIGxvYWRlZCkgYW5kIGZvciB2bWxpbnV4LCB3aGVyZSBvbmx5IGFmdGVyIHdlIGxvYWQgYWxsIHRoZQorICogc3ltYm9scyB3ZSdsbCBrbm93IHdoZXJlIGl0IHN0YXJ0cyBhbmQgZW5kcy4KKyAqLworc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQoreworCXN0cnVjdCBtYXAgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCS8qCisJCSAqIC0+ZW5kIHdpbGwgYmUgZmlsbGVkIGFmdGVyIHdlIGxvYWQgYWxsIHRoZSBzeW1ib2xzCisJCSAqLworCQltYXBfX2luaXQoc2VsZiwgdHlwZSwgc3RhcnQsIDAsIDAsIGRzbyk7CisJfQorCisJcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkX19jcmVhdGVfbW9kdWxlX21hcHMoc3RydWN0IHRocmVhZCAqc2VsZikKK3sKKwljaGFyICpsaW5lID0gTlVMTDsKKwlzaXplX3QgbjsKKwlGSUxFICpmaWxlID0gZm9wZW4oIi9wcm9jL21vZHVsZXMiLCAiciIpOworCXN0cnVjdCBtYXAgKm1hcDsKKworCWlmIChmaWxlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXdoaWxlICghZmVvZihmaWxlKSkgeworCQljaGFyIG5hbWVbUEFUSF9NQVhdOworCQl1NjQgc3RhcnQ7CisJCXN0cnVjdCBkc28gKmRzbzsKKwkJY2hhciAqc2VwOworCQlpbnQgbGluZV9sZW47CisKKwkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CisJCWlmIChsaW5lX2xlbiA8IDApCisJCQlicmVhazsKKworCQlpZiAoIWxpbmUpCisJCQlnb3RvIG91dF9mYWlsdXJlOworCisJCWxpbmVbLS1saW5lX2xlbl0gPSAnXDAnOyAvKiBcbiAqLworCisJCXNlcCA9IHN0cnJjaHIobGluZSwgJ3gnKTsKKwkJaWYgKHNlcCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaGV4MnU2NChzZXAgKyAxLCAmc3RhcnQpOworCisJCXNlcCA9IHN0cmNocihsaW5lLCAnICcpOworCQlpZiAoc2VwID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkqc2VwID0gJ1wwJzsKKworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJbJXNdIiwgbGluZSk7CisJCWRzbyA9IGRzb19fbmV3KG5hbWUpOworCisJCWlmIChkc28gPT0gTlVMTCkKKwkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOworCisJCW1hcCA9IG1hcF9fbmV3MihzdGFydCwgZHNvLCBNQVBfX0ZVTkNUSU9OKTsKKwkJaWYgKG1hcCA9PSBOVUxMKSB7CisJCQlkc29fX2RlbGV0ZShkc28pOworCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7CisJCX0KKworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCisJCQkgIi9zeXMvbW9kdWxlLyVzL25vdGVzLy5ub3RlLmdudS5idWlsZC1pZCIsIGxpbmUpOworCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQobmFtZSwgZHNvLT5idWlsZF9pZCwKKwkJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKKwkJCWRzby0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKKworCQlkc28tPm9yaWdpbiA9IERTT19fT1JJR19LTU9EVUxFOworCQlfX3RocmVhZF9faW5zZXJ0X21hcChzZWxmLCBtYXApOworCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwgZHNvKTsKKwl9CisKKwlmcmVlKGxpbmUpOworCWZjbG9zZShmaWxlKTsKKworCXJldHVybiBkc29zX19zZXRfbW9kdWxlc19wYXRoKCk7CisKK291dF9kZWxldGVfbGluZToKKwlmcmVlKGxpbmUpOworb3V0X2ZhaWx1cmU6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGRzb19fbG9hZF92bWxpbnV4KHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHRocmVhZCAqdGhyZWFkLAorCQkJICAgICBjb25zdCBjaGFyICp2bWxpbnV4LCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWludCBlcnIgPSAtMSwgZmQ7CisKKwlpZiAoc2VsZi0+aGFzX2J1aWxkX2lkKSB7CisJCXU4IGJ1aWxkX2lkW0JVSUxEX0lEX1NJWkVdOworCisJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZCh2bWxpbnV4LCBidWlsZF9pZCwKKwkJCQkJICAgIHNpemVvZihidWlsZF9pZCkpIDwgMCkgeworCQkJcHJfZGVidWcoIk5vIGJ1aWxkX2lkIGluICVzLCBpZ25vcmluZyBpdFxuIiwgdm1saW51eCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCFkc29fX2J1aWxkX2lkX2VxdWFsKHNlbGYsIGJ1aWxkX2lkKSkgeworCQkJY2hhciBleHBlY3RlZF9idWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdLAorCQkJICAgICB2bWxpbnV4X2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwkJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLAorCQkJCQkgIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJCSAgZXhwZWN0ZWRfYnVpbGRfaWQpOworCQkJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksCisJCQkJCSAgdm1saW51eF9idWlsZF9pZCk7CisJCQlwcl9kZWJ1ZygiYnVpbGRfaWQgaW4gJXMgaXMgJXMgd2hpbGUgZXhwZWN0ZWQgaXMgJXMsICIKKwkJCQkgImlnbm9yaW5nIGl0XG4iLCB2bWxpbnV4LCB2bWxpbnV4X2J1aWxkX2lkLAorCQkJCSBleHBlY3RlZF9idWlsZF9pZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmZCA9IG9wZW4odm1saW51eCwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCiAJCXJldHVybiAtMTsKIAotCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgZmQsIHZtbGludXgsIGZpbHRlciwgdiwgTlVMTCk7Ci0KLQlpZiAoZXJyID4gMCkKLQkJZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzZWxmKTsKLQorCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCB0aHJlYWQsIHNlbGYtPmxvbmdfbmFtZSwgZmQsIGZpbHRlciwgMSwgMCk7CiAJY2xvc2UoZmQpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGRzb19fbG9hZF9rZXJuZWwoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCwKLQkJICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdiwgaW50IHVzZV9tb2R1bGVzKQorc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWludCBlcnIgPSAtMTsKKwlpbnQgZXJyOworCWJvb2wgaXNfa2FsbHN5bXM7CiAKLQlpZiAodm1saW51eCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCB2bWxpbnV4LCBmaWx0ZXIsIHYpOwotCQlpZiAoZXJyID4gMCAmJiB1c2VfbW9kdWxlcykgewotCQkJaW50IHN5bXMgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOwotCi0JCQlpZiAoc3ltcyA8IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9tb2R1bGVzIGZhaWxlZCFcbiIpOwotCQkJCXJldHVybiBzeW1zOworCWlmICh2bWxpbnV4X3BhdGggIT0gTlVMTCkgeworCQlpbnQgaTsKKwkJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKKwkJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMpOworCQlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKKwkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgdGhyZWFkLAorCQkJCQkJdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOworCQkJaWYgKGVyciA+IDApIHsKKwkJCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsCisJCQkJCSB2bWxpbnV4X3BhdGhbaV0pOworCQkJCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLAorCQkJCQkJICAgc3RyZHVwKHZtbGludXhfcGF0aFtpXSkpOworCQkJCWdvdG8gb3V0X2ZpeHVwOwogCQkJfQotCQkJZXJyICs9IHN5bXM7CiAJCX0KIAl9CiAKLQlpZiAoZXJyIDw9IDApCi0JCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBmaWx0ZXIsIHYpOworCWlzX2thbGxzeW1zID0gc2VsZi0+bG9uZ19uYW1lWzBdID09ICdbJzsKKwlpZiAoaXNfa2FsbHN5bXMpCisJCWdvdG8gZG9fa2FsbHN5bXM7CiAKLQlpZiAoZXJyID4gMCkKLQkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0tFUk5FTDsKKwllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHRocmVhZCwgc2VsZi0+bG9uZ19uYW1lLCBmaWx0ZXIpOworCWlmIChlcnIgPD0gMCkgeworCQlwcl9pbmZvKCJUaGUgZmlsZSAlcyBjYW5ub3QgYmUgdXNlZCwgIgorCQkJInRyeWluZyB0byB1c2UgL3Byb2Mva2FsbHN5bXMuLi4iLCBzZWxmLT5sb25nX25hbWUpOworZG9fa2FsbHN5bXM6CisJCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBtYXAsIHRocmVhZCwgZmlsdGVyKTsKKwkJaWYgKGVyciA+IDAgJiYgIWlzX2thbGxzeW1zKQorICAgICAgICAgICAgICAgICAgICAgICAgZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7CisJfQorCisJaWYgKGVyciA+IDApIHsKK291dF9maXh1cDoKKwkJbWFwX19maXh1cF9zdGFydChtYXApOworCQltYXBfX2ZpeHVwX2VuZChtYXApOworCX0KIAogCXJldHVybiBlcnI7CiB9CiAKLUxJU1RfSEVBRChkc29zKTsKLXN0cnVjdCBkc28JKmtlcm5lbF9kc287Ci1zdHJ1Y3QgZHNvCSp2ZHNvOwotc3RydWN0IGRzbwkqaHlwZXJ2aXNvcl9kc287CitMSVNUX0hFQUQoZHNvc19fdXNlcik7CitMSVNUX0hFQUQoZHNvc19fa2VybmVsKTsKK3N0cnVjdCBkc28gKnZkc287CiAKLWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSA9ICJ2bWxpbnV4IjsKLWludAkJbW9kdWxlczsKLQotc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBkc28gKmRzbykKK3N0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pCiB7Ci0JbGlzdF9hZGRfdGFpbCgmZHNvLT5ub2RlLCAmZHNvcyk7CisJbGlzdF9hZGRfdGFpbCgmZHNvLT5ub2RlLCBoZWFkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGRzbyAqcG9zOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQogCQlpZiAoc3RyY21wKHBvcy0+bmFtZSwgbmFtZSkgPT0gMCkKIAkJCXJldHVybiBwb3M7CiAJcmV0dXJuIE5VTEw7CkBAIC05NTksNzkgKzE0NTksMTcwIEBACiAKIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKG5hbWUpOwotCWludCBucjsKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKCZkc29zX191c2VyLCBuYW1lKTsKIAotCWlmIChkc28pCi0JCXJldHVybiBkc287Ci0KLQlkc28gPSBkc29fX25ldyhuYW1lLCAwKTsKLQlpZiAoIWRzbykKLQkJZ290byBvdXRfZGVsZXRlX2RzbzsKLQotCW5yID0gZHNvX19sb2FkKGRzbywgTlVMTCwgdmVyYm9zZSk7Ci0JaWYgKG5yIDwgMCkgewotCQllcHJpbnRmKCJGYWlsZWQgdG8gb3BlbjogJXNcbiIsIG5hbWUpOwotCQlnb3RvIG91dF9kZWxldGVfZHNvOworCWlmICghZHNvKSB7CisJCWRzbyA9IGRzb19fbmV3KG5hbWUpOworCQlpZiAoZHNvICE9IE5VTEwpIHsKKwkJCWRzb3NfX2FkZCgmZHNvc19fdXNlciwgZHNvKTsKKwkJCWRzb19fc2V0X2Jhc2VuYW1lKGRzbyk7CisJCX0KIAl9Ci0JaWYgKCFucikKLQkJZXByaW50ZigiTm8gc3ltYm9scyBmb3VuZCBpbjogJXMsIG1heWJlIGluc3RhbGwgYSBkZWJ1ZyBwYWNrYWdlP1xuIiwgbmFtZSk7Ci0KLQlkc29zX19hZGQoZHNvKTsKIAogCXJldHVybiBkc287Cit9CiAKLW91dF9kZWxldGVfZHNvOgotCWRzb19fZGVsZXRlKGRzbyk7Ci0JcmV0dXJuIE5VTEw7CitzdGF0aWMgdm9pZCBfX2Rzb3NfX2ZwcmludGYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgRklMRSAqZnApCit7CisJc3RydWN0IGRzbyAqcG9zOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCisJCQlkc29fX2ZwcmludGYocG9zLCBpLCBmcCk7CisJfQogfQogCiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApCiB7CisJX19kc29zX19mcHJpbnRmKCZkc29zX19rZXJuZWwsIGZwKTsKKwlfX2Rzb3NfX2ZwcmludGYoJmRzb3NfX3VzZXIsIGZwKTsKK30KKworc3RhdGljIHNpemVfdCBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCkKK3sKIAlzdHJ1Y3QgZHNvICpwb3M7CisJc2l6ZV90IHJldCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmRzb3MsIG5vZGUpCi0JCWRzb19fZnByaW50Zihwb3MsIGZwKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkgeworCQlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQocG9zLCBmcCk7CisJCXJldCArPSBmcHJpbnRmKGZwLCAiICVzXG4iLCBwb3MtPmxvbmdfbmFtZSk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICp2ZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpkc28sIHU2NCBpcCkKK3NpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnApCiB7Ci0JcmV0dXJuIGRzb19fZmluZF9zeW1ib2woZHNvLCBpcCk7CisJcmV0dXJuIChfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fa2VybmVsLCBmcCkgKworCQlfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fdXNlciwgZnApKTsKIH0KIAotaW50IGxvYWRfa2VybmVsKHZvaWQpCitzdGF0aWMgaW50IHRocmVhZF9fY3JlYXRlX2tlcm5lbF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCkKIHsKLQlpbnQgZXJyOworCXN0cnVjdCBtYXAgKmttYXA7CisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvX19uZXcodm1saW51eCA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKIAotCWtlcm5lbF9kc28gPSBkc29fX25ldygiW2tlcm5lbF0iLCAwKTsKLQlpZiAoIWtlcm5lbF9kc28pCisJaWYgKGtlcm5lbCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQllcnIgPSBkc29fX2xvYWRfa2VybmVsKGtlcm5lbF9kc28sIHZtbGludXhfbmFtZSwgTlVMTCwgdmVyYm9zZSwgbW9kdWxlcyk7Ci0JaWYgKGVyciA8PSAwKSB7Ci0JCWRzb19fZGVsZXRlKGtlcm5lbF9kc28pOwotCQlrZXJuZWxfZHNvID0gTlVMTDsKLQl9IGVsc2UKLQkJZHNvc19fYWRkKGtlcm5lbF9kc28pOworCWttYXAgPSBtYXBfX25ldzIoMCwga2VybmVsLCBNQVBfX0ZVTkNUSU9OKTsKKwlpZiAoa21hcCA9PSBOVUxMKQorCQlnb3RvIG91dF9kZWxldGVfa2VybmVsX2RzbzsKIAotCXZkc28gPSBkc29fX25ldygiW3Zkc29dIiwgMCk7Ci0JaWYgKCF2ZHNvKQotCQlyZXR1cm4gLTE7CisJa21hcC0+bWFwX2lwCSAgID0ga21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOworCWtlcm5lbC0+c2hvcnRfbmFtZSA9ICJba2VybmVsXSI7CisJa2VybmVsLT5rZXJuZWwJICAgPSAxOwogCi0JdmRzby0+ZmluZF9zeW1ib2wgPSB2ZHNvX19maW5kX3N5bWJvbDsKKwl2ZHNvID0gZHNvX19uZXcoIlt2ZHNvXSIpOworCWlmICh2ZHNvID09IE5VTEwpCisJCWdvdG8gb3V0X2RlbGV0ZV9rZXJuZWxfbWFwOworCWRzb19fc2V0X2xvYWRlZCh2ZHNvLCBNQVBfX0ZVTkNUSU9OKTsKIAotCWRzb3NfX2FkZCh2ZHNvKTsKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2VybmVsLT5idWlsZF9pZCwKKwkJCQkgc2l6ZW9mKGtlcm5lbC0+YnVpbGRfaWQpKSA9PSAwKQorCQlrZXJuZWwtPmhhc19idWlsZF9pZCA9IHRydWU7CiAKLQloeXBlcnZpc29yX2RzbyA9IGRzb19fbmV3KCJbaHlwZXJ2aXNvcl0iLCAwKTsKLQlpZiAoIWh5cGVydmlzb3JfZHNvKQotCQlyZXR1cm4gLTE7Ci0JZHNvc19fYWRkKGh5cGVydmlzb3JfZHNvKTsKKwlfX3RocmVhZF9faW5zZXJ0X21hcChzZWxmLCBrbWFwKTsKKwlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwga2VybmVsKTsKKwlkc29zX19hZGQoJmRzb3NfX3VzZXIsIHZkc28pOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKKworb3V0X2RlbGV0ZV9rZXJuZWxfbWFwOgorCW1hcF9fZGVsZXRlKGttYXApOworb3V0X2RlbGV0ZV9rZXJuZWxfZHNvOgorCWRzb19fZGVsZXRlKGtlcm5lbCk7CisJcmV0dXJuIC0xOwogfQogCi0KLXZvaWQgc3ltYm9sX19pbml0KHZvaWQpCitzdGF0aWMgdm9pZCB2bWxpbnV4X3BhdGhfX2V4aXQodm9pZCkKIHsKKwl3aGlsZSAoLS12bWxpbnV4X3BhdGhfX25yX2VudHJpZXMgPj0gMCkgeworCQlmcmVlKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdKTsKKwkJdm1saW51eF9wYXRoW3ZtbGludXhfcGF0aF9fbnJfZW50cmllc10gPSBOVUxMOworCX0KKworCWZyZWUodm1saW51eF9wYXRoKTsKKwl2bWxpbnV4X3BhdGggPSBOVUxMOworfQorCitzdGF0aWMgaW50IHZtbGludXhfcGF0aF9faW5pdCh2b2lkKQoreworCXN0cnVjdCB1dHNuYW1lIHV0czsKKwljaGFyIGJmW1BBVEhfTUFYXTsKKworCWlmICh1bmFtZSgmdXRzKSA8IDApCisJCXJldHVybiAtMTsKKworCXZtbGludXhfcGF0aCA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIDUpOworCWlmICh2bWxpbnV4X3BhdGggPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJdm1saW51eF9wYXRoW3ZtbGludXhfcGF0aF9fbnJfZW50cmllc10gPSBzdHJkdXAoInZtbGludXgiKTsKKwlpZiAodm1saW51eF9wYXRoW3ZtbGludXhfcGF0aF9fbnJfZW50cmllc10gPT0gTlVMTCkKKwkJZ290byBvdXRfZmFpbDsKKwkrK3ZtbGludXhfcGF0aF9fbnJfZW50cmllczsKKwl2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9IHN0cmR1cCgiL2Jvb3Qvdm1saW51eCIpOworCWlmICh2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9PSBOVUxMKQorCQlnb3RvIG91dF9mYWlsOworCSsrdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOworCXNucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiL2Jvb3Qvdm1saW51eC0lcyIsIHV0cy5yZWxlYXNlKTsKKwl2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9IHN0cmR1cChiZik7CisJaWYgKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdID09IE5VTEwpCisJCWdvdG8gb3V0X2ZhaWw7CisJKyt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CisJc25wcmludGYoYmYsIHNpemVvZihiZiksICIvbGliL21vZHVsZXMvJXMvYnVpbGQvdm1saW51eCIsIHV0cy5yZWxlYXNlKTsKKwl2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9IHN0cmR1cChiZik7CisJaWYgKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdID09IE5VTEwpCisJCWdvdG8gb3V0X2ZhaWw7CisJKyt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CisJc25wcmludGYoYmYsIHNpemVvZihiZiksICIvdXNyL2xpYi9kZWJ1Zy9saWIvbW9kdWxlcy8lcy92bWxpbnV4IiwKKwkJIHV0cy5yZWxlYXNlKTsKKwl2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9IHN0cmR1cChiZik7CisJaWYgKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdID09IE5VTEwpCisJCWdvdG8gb3V0X2ZhaWw7CisJKyt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZhaWw6CisJdm1saW51eF9wYXRoX19leGl0KCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgc3ltYm9sX19pbml0KHN0cnVjdCBzeW1ib2xfY29uZiAqY29uZikKK3sKKwljb25zdCBzdHJ1Y3Qgc3ltYm9sX2NvbmYgKnBjb25mID0gY29uZiA/OiAmc3ltYm9sX2NvbmZfX2RlZmF1bHRzOworCiAJZWxmX3ZlcnNpb24oRVZfQ1VSUkVOVCk7CisJc3ltYm9sX19wcml2X3NpemUgPSBwY29uZi0+cHJpdl9zaXplOworCXRocmVhZF9faW5pdChrdGhyZWFkLCAwKTsKKworCWlmIChwY29uZi0+dHJ5X3ZtbGludXhfcGF0aCAmJiB2bWxpbnV4X3BhdGhfX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICh0aHJlYWRfX2NyZWF0ZV9rZXJuZWxfbWFwKGt0aHJlYWQsIHBjb25mLT52bWxpbnV4X25hbWUpIDwgMCkgeworCQl2bWxpbnV4X3BhdGhfX2V4aXQoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWt0aHJlYWQtPnVzZV9tb2R1bGVzID0gcGNvbmYtPnVzZV9tb2R1bGVzOworCWlmIChwY29uZi0+dXNlX21vZHVsZXMgJiYgdGhyZWFkX19jcmVhdGVfbW9kdWxlX21hcHMoa3RocmVhZCkgPCAwKQorCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQgbGlzdCBvZiBtb2R1bGVzIGluIHVzZSwgIgorCQkJICJjb250aW51aW5nLi4uXG4iKTsKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGhhdmUgYWxsIHRoZSBtYXBzIGNyZWF0ZWQsIGp1c3Qgc2V0IHRoZSAtPmVuZCBvZiB0aGVtOgorCSAqLworCXRocmVhZF9fZml4dXBfbWFwc19lbmQoa3RocmVhZCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNmU4NDkwNy4uMTcwMDNlZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMSwxMSArMSwxMSBAQAotI2lmbmRlZiBfUEVSRl9TWU1CT0xfCi0jZGVmaW5lIF9QRVJGX1NZTUJPTF8gMQorI2lmbmRlZiBfX1BFUkZfU1lNQk9MCisjZGVmaW5lIF9fUEVSRl9TWU1CT0wgMQogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSAibW9kdWxlLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKIAogI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEUKQEAgLTI3LDYgKzI3LDE2IEBACiAjZW5kaWYKICNlbmRpZgogCisvKgorICogbGliZWxmIDAuOC54IGFuZCBlYXJsaWVyIGRvIG5vdCBzdXBwb3J0IEVMRl9DX1JFQURfTU1BUDsKKyAqIGZvciBuZXdlciB2ZXJzaW9ucyB3ZSBjYW4gdXNlIG1tYXAgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZToKKyAqLworI2lmZGVmIExJQkVMRl9OT19NTUFQCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFECisjZWxzZQorIyBkZWZpbmUgUEVSRl9FTEZfQ19SRUFEX01NQVAgRUxGX0NfUkVBRF9NTUFQCisjZW5kaWYKKwogI2lmbmRlZiBETUdMX1BBUkFNUwogI2RlZmluZSBETUdMX1BBUkFNUyAgICAgICgxIDw8IDApICAgICAgIC8qIEluY2x1ZGUgZnVuY3Rpb24gYXJncyAqLwogI2RlZmluZSBETUdMX0FOU0kgICAgICAgICgxIDw8IDEpICAgICAgIC8qIEluY2x1ZGUgY29uc3QsIHZvbGF0aWxlLCBldGMgKi8KQEAgLTM2LDU3ICs0Niw3NSBAQAogCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7CiAJdTY0CQlzdGFydDsKIAl1NjQJCWVuZDsKLQl1NjQJCW9ial9zdGFydDsKLQl1NjQJCWhpc3Rfc3VtOwotCXU2NAkJKmhpc3Q7Ci0Jc3RydWN0IG1vZHVsZQkqbW9kdWxlOwotCXZvaWQJCSpwcml2OwogCWNoYXIJCW5hbWVbMF07CiB9OwogCitzdHJ1Y3Qgc3ltYm9sX2NvbmYgeworCXVuc2lnbmVkIHNob3J0CXByaXZfc2l6ZTsKKwlib29sCQl0cnlfdm1saW51eF9wYXRoLAorCQkJdXNlX21vZHVsZXM7CisJY29uc3QgY2hhcgkqdm1saW51eF9uYW1lOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzeW1ib2xfX3ByaXZfc2l6ZTsKKworc3RhdGljIGlubGluZSB2b2lkICpzeW1ib2xfX3ByaXYoc3RydWN0IHN5bWJvbCAqc2VsZikKK3sKKwlyZXR1cm4gKCh2b2lkICopc2VsZikgLSBzeW1ib2xfX3ByaXZfc2l6ZTsKK30KKworc3RydWN0IGFkZHJfbG9jYXRpb24geworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgbWFwICAgICptYXA7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXU2NAkgICAgICBhZGRyOworCWNoYXIJICAgICAgbGV2ZWw7Cit9OworCiBzdHJ1Y3QgZHNvIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IHJiX3Jvb3QJIHN5bXM7Ci0Jc3RydWN0IHN5bWJvbCAgICAqKCpmaW5kX3N5bWJvbCkoc3RydWN0IGRzbyAqLCB1NjQgaXApOwotCXVuc2lnbmVkIGludAkgc3ltX3ByaXZfc2l6ZTsKLQl1bnNpZ25lZCBjaGFyCSBhZGp1c3Rfc3ltYm9sczsKLQl1bnNpZ25lZCBjaGFyCSBzbGVuX2NhbGN1bGF0ZWQ7CisJc3RydWN0IHJiX3Jvb3QJIHN5bWJvbHNbTUFQX19OUl9UWVBFU107CisJc3RydWN0IHN5bWJvbCAgICAqKCpmaW5kX3N5bWJvbCkoc3RydWN0IGRzbyAqc2VsZiwKKwkJCQkJIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpOworCXU4CQkgYWRqdXN0X3N5bWJvbHM6MTsKKwl1OAkJIHNsZW5fY2FsY3VsYXRlZDoxOworCXU4CQkgaGFzX2J1aWxkX2lkOjE7CisJdTgJCSBrZXJuZWw6MTsKIAl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CisJdTgJCSBsb2FkZWQ7CisJdTgJCSBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwl1MTYJCSBsb25nX25hbWVfbGVuOworCWNvbnN0IGNoYXIJICpzaG9ydF9uYW1lOworCWNoYXIJIAkgKmxvbmdfbmFtZTsKIAljaGFyCQkgbmFtZVswXTsKIH07CiAKLWV4dGVybiBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7Ci0KLXR5cGVkZWYgaW50ICgqc3ltYm9sX2ZpbHRlcl90KShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotCi1zdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc3ltX3ByaXZfc2l6ZSk7CitzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqc2VsZik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHNvX19zeW1fcHJpdihzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0JcmV0dXJuICgodm9pZCAqKXN5bSkgLSBzZWxmLT5zeW1fcHJpdl9zaXplOwotfQorYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCi1zdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIHU2NCBpcCk7Ci0KLWludCBkc29fX2xvYWRfa2VybmVsKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKnZtbGludXgsCi0JCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UsIGludCBtb2R1bGVzKTsKLWludCBkc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdmVyYm9zZSk7Ci1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2ZXJib3NlKTsKIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApOworc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCk7CiAKLXNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApOworc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKTsKK3NpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKK3ZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpOwogCi1pbnQgbG9hZF9rZXJuZWwodm9pZCk7CitpbnQgZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSk7CitpbnQgc3lzZnNfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSk7Citib29sIGRzb3NfX3JlYWRfYnVpbGRfaWRzKHZvaWQpOworaW50IGJ1aWxkX2lkX19zcHJpbnRmKHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZik7CiAKLXZvaWQgc3ltYm9sX19pbml0KHZvaWQpOworc2l6ZV90IGtlcm5lbF9tYXBzX19mcHJpbnRmKEZJTEUgKmZwKTsKIAotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHNvczsKLWV4dGVybiBzdHJ1Y3QgZHNvICprZXJuZWxfZHNvOworaW50IHN5bWJvbF9faW5pdChzdHJ1Y3Qgc3ltYm9sX2NvbmYgKmNvbmYpOworCitzdHJ1Y3QgdGhyZWFkOworc3RydWN0IHRocmVhZCAqa3RocmVhZDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRzb3NfX3VzZXIsIGRzb3NfX2tlcm5lbDsKIGV4dGVybiBzdHJ1Y3QgZHNvICp2ZHNvOwotZXh0ZXJuIHN0cnVjdCBkc28gKmh5cGVydmlzb3JfZHNvOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnZtbGludXhfbmFtZTsKLWV4dGVybiBpbnQgICBtb2R1bGVzOwotI2VuZGlmIC8qIF9QRVJGX1NZTUJPTF8gKi8KKyNlbmRpZiAvKiBfX1BFUkZfU1lNQk9MICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggNDVlZmI1ZC4uNjAzZjU2MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtNiwxNiArNiwyOSBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgdGhyZWFkczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpsYXN0X21hdGNoOworCit2b2lkIHRocmVhZF9faW5pdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBwaWRfdCBwaWQpCit7CisJaW50IGk7CisJc2VsZi0+cGlkID0gcGlkOworCXNlbGYtPmNvbW0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpIHsKKwkJc2VsZi0+bWFwc1tpXSA9IFJCX1JPT1Q7CisJCUlOSVRfTElTVF9IRUFEKCZzZWxmLT5yZW1vdmVkX21hcHNbaV0pOworCX0KK30KKwogc3RhdGljIHN0cnVjdCB0aHJlYWQgKnRocmVhZF9fbmV3KHBpZF90IHBpZCkKIHsKLQlzdHJ1Y3QgdGhyZWFkICpzZWxmID0gY2FsbG9jKDEsIHNpemVvZigqc2VsZikpOworCXN0cnVjdCB0aHJlYWQgKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSk7CiAKIAlpZiAoc2VsZiAhPSBOVUxMKSB7Ci0JCXNlbGYtPnBpZCA9IHBpZDsKKwkJdGhyZWFkX19pbml0KHNlbGYsIHBpZCk7CiAJCXNlbGYtPmNvbW0gPSBtYWxsb2MoMzIpOwogCQlpZiAoc2VsZi0+Y29tbSkKIAkJCXNucHJpbnRmKHNlbGYtPmNvbW0sIDMyLCAiOiVkIiwgc2VsZi0+cGlkKTsKLQkJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm1hcHMpOwogCX0KIAogCXJldHVybiBzZWxmOwpAQCAtMjksMjEgKzQyLDg0IEBACiAJcmV0dXJuIHNlbGYtPmNvbW0gPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIHNpemVfdCB0aHJlYWRfX2ZwcmludGYoc3RydWN0IHRocmVhZCAqc2VsZiwgRklMRSAqZnApCitpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKQogewotCXN0cnVjdCBtYXAgKnBvczsKLQlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgIlRocmVhZCAlZCAlc1xuIiwgc2VsZi0+cGlkLCBzZWxmLT5jb21tKTsKKwlpZiAoIXNlbGYtPmNvbW1fbGVuKSB7CisJCWlmICghc2VsZi0+Y29tbSkKKwkJCXJldHVybiAwOworCQlzZWxmLT5jb21tX2xlbiA9IHN0cmxlbihzZWxmLT5jb21tKTsKKwl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlbGYtPm1hcHMsIG5vZGUpCi0JCXJldCArPSBtYXBfX2ZwcmludGYocG9zLCBmcCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzZWxmLT5jb21tX2xlbjsKIH0KIAotc3RydWN0IHRocmVhZCAqCi10aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCwgc3RydWN0IHJiX3Jvb3QgKnRocmVhZHMsIHN0cnVjdCB0aHJlYWQgKipsYXN0X21hdGNoKQorc3RhdGljIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0geworCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAorfTsKKworc3RhdGljIHNpemVfdCBfX3RocmVhZF9fZnByaW50Zl9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZ0aHJlYWRzLT5yYl9ub2RlOworCXNpemVfdCBwcmludGVkID0gZnByaW50ZihmcCwgIiVzOlxuIiwgbWFwX3R5cGVfX25hbWVbdHlwZV0pOworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCBtYXAgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKwkJcHJpbnRlZCArPSBmcHJpbnRmKGZwLCAiTWFwOiIpOworCQlwcmludGVkICs9IG1hcF9fZnByaW50Zihwb3MsIGZwKTsKKwkJaWYgKHZlcmJvc2UgPiAxKSB7CisJCQlwcmludGVkICs9IGRzb19fZnByaW50Zihwb3MtPmRzbywgdHlwZSwgZnApOworCQkJcHJpbnRlZCArPSBmcHJpbnRmKGZwLCAiLS1cbiIpOworCQl9CisJfQorCisJcmV0dXJuIHByaW50ZWQ7Cit9CisKK3NpemVfdCB0aHJlYWRfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKK3sKKwlzaXplX3QgcHJpbnRlZCA9IDAsIGk7CisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKKwkJcHJpbnRlZCArPSBfX3RocmVhZF9fZnByaW50Zl9tYXBzKHNlbGYsIGksIGZwKTsKKwlyZXR1cm4gcHJpbnRlZDsKK30KKworc3RhdGljIHNpemVfdCBfX3RocmVhZF9fZnByaW50Zl9yZW1vdmVkX21hcHMoc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQoreworCXN0cnVjdCBtYXAgKnBvczsKKwlzaXplX3QgcHJpbnRlZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlbGYtPnJlbW92ZWRfbWFwc1t0eXBlXSwgbm9kZSkgeworCQlwcmludGVkICs9IGZwcmludGYoZnAsICJNYXA6Iik7CisJCXByaW50ZWQgKz0gbWFwX19mcHJpbnRmKHBvcywgZnApOworCQlpZiAodmVyYm9zZSA+IDEpIHsKKwkJCXByaW50ZWQgKz0gZHNvX19mcHJpbnRmKHBvcy0+ZHNvLCB0eXBlLCBmcCk7CisJCQlwcmludGVkICs9IGZwcmludGYoZnAsICItLVxuIik7CisJCX0KKwl9CisJcmV0dXJuIHByaW50ZWQ7Cit9CisKK3N0YXRpYyBzaXplX3QgdGhyZWFkX19mcHJpbnRmX3JlbW92ZWRfbWFwcyhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKK3sKKwlzaXplX3QgcHJpbnRlZCA9IDAsIGk7CisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKKwkJcHJpbnRlZCArPSBfX3RocmVhZF9fZnByaW50Zl9yZW1vdmVkX21hcHMoc2VsZiwgaSwgZnApOworCXJldHVybiBwcmludGVkOworfQorCitzdGF0aWMgc2l6ZV90IHRocmVhZF9fZnByaW50ZihzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKK3sKKwlzaXplX3QgcHJpbnRlZCA9IGZwcmludGYoZnAsICJUaHJlYWQgJWQgJXNcbiIsIHNlbGYtPnBpZCwgc2VsZi0+Y29tbSk7CisJcHJpbnRlZCArPSB0aHJlYWRfX2ZwcmludGZfcmVtb3ZlZF9tYXBzKHNlbGYsIGZwKTsKKwlwcmludGVkICs9IGZwcmludGYoZnAsICJSZW1vdmVkIG1hcHM6XG4iKTsKKwlyZXR1cm4gcHJpbnRlZCArIHRocmVhZF9fZnByaW50Zl9yZW1vdmVkX21hcHMoc2VsZiwgZnApOworfQorCitzdHJ1Y3QgdGhyZWFkICp0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdGhyZWFkcy5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCB0aHJlYWQgKnRoOwogCkBAIC01MiwxNSArMTI4LDE1IEBACiAJICogc28gbW9zdCBvZiB0aGUgdGltZSB3ZSBkb250IGhhdmUgdG8gbG9vayB1cAogCSAqIHRoZSBmdWxsIHJidHJlZToKIAkgKi8KLQlpZiAoKmxhc3RfbWF0Y2ggJiYgKCpsYXN0X21hdGNoKS0+cGlkID09IHBpZCkKLQkJcmV0dXJuICpsYXN0X21hdGNoOworCWlmIChsYXN0X21hdGNoICYmIGxhc3RfbWF0Y2gtPnBpZCA9PSBwaWQpCisJCXJldHVybiBsYXN0X21hdGNoOwogCiAJd2hpbGUgKCpwICE9IE5VTEwpIHsKIAkJcGFyZW50ID0gKnA7CiAJCXRoID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgdGhyZWFkLCByYl9ub2RlKTsKIAogCQlpZiAodGgtPnBpZCA9PSBwaWQpIHsKLQkJCSpsYXN0X21hdGNoID0gdGg7CisJCQlsYXN0X21hdGNoID0gdGg7CiAJCQlyZXR1cm4gdGg7CiAJCX0KIApAQCAtNzMsMTcgKzE0OSwxNiBAQAogCXRoID0gdGhyZWFkX19uZXcocGlkKTsKIAlpZiAodGggIT0gTlVMTCkgewogCQlyYl9saW5rX25vZGUoJnRoLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCQlyYl9pbnNlcnRfY29sb3IoJnRoLT5yYl9ub2RlLCB0aHJlYWRzKTsKLQkJKmxhc3RfbWF0Y2ggPSB0aDsKKwkJcmJfaW5zZXJ0X2NvbG9yKCZ0aC0+cmJfbm9kZSwgJnRocmVhZHMpOworCQlsYXN0X21hdGNoID0gdGg7CiAJfQogCiAJcmV0dXJuIHRoOwogfQogCi1zdHJ1Y3QgdGhyZWFkICoKLXJlZ2lzdGVyX2lkbGVfdGhyZWFkKHN0cnVjdCByYl9yb290ICp0aHJlYWRzLCBzdHJ1Y3QgdGhyZWFkICoqbGFzdF9tYXRjaCkKK3N0cnVjdCB0aHJlYWQgKnJlZ2lzdGVyX2lkbGVfdGhyZWFkKHZvaWQpCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldygwLCB0aHJlYWRzLCBsYXN0X21hdGNoKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KDApOwogCiAJaWYgKCF0aHJlYWQgfHwgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsICJzd2FwcGVyIikpIHsKIAkJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKQEAgLTkzLDQyICsxNjgsOTcgQEAKIAlyZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIHRocmVhZF9faW5zZXJ0X21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApCitzdGF0aWMgdm9pZCB0aHJlYWRfX3JlbW92ZV9vdmVybGFwcGluZ3Moc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQogewotCXN0cnVjdCBtYXAgKnBvcywgKnRtcDsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5tYXBzW21hcC0+dHlwZV07CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChyb290KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJnNlbGYtPm1hcHMsIG5vZGUpIHsKLQkJaWYgKG1hcF9fb3ZlcmxhcChwb3MsIG1hcCkpIHsKLQkJCWlmICh2ZXJib3NlID49IDIpIHsKLQkJCQlwcmludGYoIm92ZXJsYXBwaW5nIG1hcHM6XG4iKTsKLQkJCQltYXBfX2ZwcmludGYobWFwLCBzdGRvdXQpOwotCQkJCW1hcF9fZnByaW50Zihwb3MsIHN0ZG91dCk7Ci0JCQl9CisJd2hpbGUgKG5leHQpIHsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmV4dCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CisJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOwogCi0JCQlpZiAobWFwLT5zdGFydCA8PSBwb3MtPnN0YXJ0ICYmIG1hcC0+ZW5kID4gcG9zLT5zdGFydCkKLQkJCQlwb3MtPnN0YXJ0ID0gbWFwLT5lbmQ7CisJCWlmICghbWFwX19vdmVybGFwKHBvcywgbWFwKSkKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAobWFwLT5lbmQgPj0gcG9zLT5lbmQgJiYgbWFwLT5zdGFydCA8IHBvcy0+ZW5kKQotCQkJCXBvcy0+ZW5kID0gbWFwLT5zdGFydDsKLQotCQkJaWYgKHZlcmJvc2UgPj0gMikgewotCQkJCXByaW50ZigiYWZ0ZXIgY29sbGlzaW9uOlxuIik7Ci0JCQkJbWFwX19mcHJpbnRmKHBvcywgc3Rkb3V0KTsKLQkJCX0KLQotCQkJaWYgKHBvcy0+c3RhcnQgPj0gcG9zLT5lbmQpIHsKLQkJCQlsaXN0X2RlbF9pbml0KCZwb3MtPm5vZGUpOwotCQkJCWZyZWUocG9zKTsKLQkJCX0KKwkJaWYgKHZlcmJvc2UgPj0gMikgeworCQkJZnB1dHMoIm92ZXJsYXBwaW5nIG1hcHM6XG4iLCBzdGRlcnIpOworCQkJbWFwX19mcHJpbnRmKG1hcCwgc3RkZXJyKTsKKwkJCW1hcF9fZnByaW50Zihwb3MsIHN0ZGVycik7CiAJCX0KKworCQlyYl9lcmFzZSgmcG9zLT5yYl9ub2RlLCByb290KTsKKwkJLyoKKwkJICogV2UgbWF5IGhhdmUgcmVmZXJlbmNlcyB0byB0aGlzIG1hcCwgZm9yIGluc3RhbmNlIGluIHNvbWUKKwkJICogaGlzdF9lbnRyeSBpbnN0YW5jZXMsIHNvIGp1c3QgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUKKwkJICogbGlzdC4KKwkJICovCisJCWxpc3RfYWRkX3RhaWwoJnBvcy0+bm9kZSwgJnNlbGYtPnJlbW92ZWRfbWFwc1ttYXAtPnR5cGVdKTsKKwl9Cit9CisKK3ZvaWQgbWFwc19faW5zZXJ0KHN0cnVjdCByYl9yb290ICptYXBzLCBzdHJ1Y3QgbWFwICptYXApCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJm1hcHMtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJY29uc3QgdTY0IGlwID0gbWFwLT5zdGFydDsKKwlzdHJ1Y3QgbWFwICptOworCisJd2hpbGUgKCpwICE9IE5VTEwpIHsKKwkJcGFyZW50ID0gKnA7CisJCW0gPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQlpZiAoaXAgPCBtLT5zdGFydCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAl9CiAKLQlsaXN0X2FkZF90YWlsKCZtYXAtPm5vZGUsICZzZWxmLT5tYXBzKTsKKwlyYl9saW5rX25vZGUoJm1hcC0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJm1hcC0+cmJfbm9kZSwgbWFwcyk7Cit9CisKK3N0cnVjdCBtYXAgKm1hcHNfX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKm1hcHMsIHU2NCBpcCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmbWFwcy0+cmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbWFwICptOworCisJd2hpbGUgKCpwICE9IE5VTEwpIHsKKwkJcGFyZW50ID0gKnA7CisJCW0gPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQlpZiAoaXAgPCBtLT5zdGFydCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoaXAgPiBtLT5lbmQpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCB0aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoreworCXRocmVhZF9fcmVtb3ZlX292ZXJsYXBwaW5ncyhzZWxmLCBtYXApOworCW1hcHNfX2luc2VydCgmc2VsZi0+bWFwc1ttYXAtPnR5cGVdLCBtYXApOworfQorCitzdGF0aWMgaW50IHRocmVhZF9fY2xvbmVfbWFwcyhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgdGhyZWFkICpwYXJlbnQsCisJCQkgICAgICBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc3RydWN0IHJiX25vZGUgKm5kOworCWZvciAobmQgPSByYl9maXJzdCgmcGFyZW50LT5tYXBzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IG1hcCAqbWFwID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCQlzdHJ1Y3QgbWFwICpuZXcgPSBtYXBfX2Nsb25lKG1hcCk7CisJCWlmIChuZXcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQl0aHJlYWRfX2luc2VydF9tYXAoc2VsZiwgbmV3KTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIGludCB0aHJlYWRfX2Zvcmsoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IHRocmVhZCAqcGFyZW50KQogewotCXN0cnVjdCBtYXAgKm1hcDsKKwlpbnQgaTsKIAogCWlmIChzZWxmLT5jb21tKQogCQlmcmVlKHNlbGYtPmNvbW0pOwpAQCAtMTM2LDM2ICsyNjYsMTggQEAKIAlpZiAoIXNlbGYtPmNvbW0pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtYXAsICZwYXJlbnQtPm1hcHMsIG5vZGUpIHsKLQkJc3RydWN0IG1hcCAqbmV3ID0gbWFwX19jbG9uZShtYXApOwotCQlpZiAoIW5ldykKKwlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQorCQlpZiAodGhyZWFkX19jbG9uZV9tYXBzKHNlbGYsIHBhcmVudCwgaSkgPCAwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRocmVhZF9faW5zZXJ0X21hcChzZWxmLCBuZXcpOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU2NCBpcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3M7Ci0KLQlpZiAoc2VsZiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc2VsZi0+bWFwcywgbm9kZSkKLQkJaWYgKGlwID49IHBvcy0+c3RhcnQgJiYgaXAgPD0gcG9zLT5lbmQpCi0JCQlyZXR1cm4gcG9zOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXNpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwLCBzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcykKK3NpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwKQogewogCXNpemVfdCByZXQgPSAwOwogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCh0aHJlYWRzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnRocmVhZHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgdGhyZWFkICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IHRocmVhZCwgcmJfbm9kZSk7CiAKIAkJcmV0ICs9IHRocmVhZF9fZnByaW50Zihwb3MsIGZwKTsKQEAgLTE3MywzICsyODUsMTUgQEAKIAogCXJldHVybiByZXQ7CiB9CisKK3N0cnVjdCBzeW1ib2wgKnRocmVhZF9fZmluZF9zeW1ib2woc3RydWN0IHRocmVhZCAqc2VsZiwKKwkJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJc3RydWN0IG1hcCAqbWFwID0gdGhyZWFkX19maW5kX21hcChzZWxmLCB0eXBlLCBhZGRyKTsKKworCWlmIChtYXAgIT0gTlVMTCkKKwkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggMzJhZWEzYy4uNjg2ZDZlOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMSwyMiArMSw1NiBAQAorI2lmbmRlZiBfX1BFUkZfVEhSRUFEX0gKKyNkZWZpbmUgX19QRVJGX1RIUkVBRF9ICisKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAic3ltYm9sLmgiCiAKIHN0cnVjdCB0aHJlYWQgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwotCXN0cnVjdCBsaXN0X2hlYWQJbWFwczsKKwlzdHJ1Y3QgcmJfcm9vdAkJbWFwc1tNQVBfX05SX1RZUEVTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlbW92ZWRfbWFwc1tNQVBfX05SX1RZUEVTXTsKIAlwaWRfdAkJCXBpZDsKKwlib29sCQkJdXNlX21vZHVsZXM7CiAJY2hhcgkJCXNob3J0bmFtZVszXTsKIAljaGFyCQkJKmNvbW07CisJaW50CQkJY29tbV9sZW47CiB9OwogCit2b2lkIHRocmVhZF9faW5pdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBwaWRfdCBwaWQpOwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7Ci1zdHJ1Y3QgdGhyZWFkICoKLXRocmVhZHNfX2ZpbmRuZXcocGlkX3QgcGlkLCBzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcywgc3RydWN0IHRocmVhZCAqKmxhc3RfbWF0Y2gpOwotc3RydWN0IHRocmVhZCAqCi1yZWdpc3Rlcl9pZGxlX3RocmVhZChzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcywgc3RydWN0IHRocmVhZCAqKmxhc3RfbWF0Y2gpOworaW50IHRocmVhZF9fY29tbV9sZW4oc3RydWN0IHRocmVhZCAqc2VsZik7CitzdHJ1Y3QgdGhyZWFkICp0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCk7CitzdHJ1Y3QgdGhyZWFkICpyZWdpc3Rlcl9pZGxlX3RocmVhZCh2b2lkKTsKIHZvaWQgdGhyZWFkX19pbnNlcnRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCk7CiBpbnQgdGhyZWFkX19mb3JrKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCB0aHJlYWQgKnBhcmVudCk7Ci1zdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU2NCBpcCk7Ci1zaXplX3QgdGhyZWFkc19fZnByaW50ZihGSUxFICpmcCwgc3RydWN0IHJiX3Jvb3QgKnRocmVhZHMpOworc2l6ZV90IHRocmVhZF9fZnByaW50Zl9tYXBzKHN0cnVjdCB0aHJlYWQgKnNlbGYsIEZJTEUgKmZwKTsKK3NpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwKTsKKwordm9pZCBtYXBzX19pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKm1hcHMsIHN0cnVjdCBtYXAgKm1hcCk7CitzdHJ1Y3QgbWFwICptYXBzX19maW5kKHN0cnVjdCByYl9yb290ICptYXBzLCB1NjQgYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hcCAqdGhyZWFkX19maW5kX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLAorCQkJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKQoreworCXJldHVybiBzZWxmID8gbWFwc19fZmluZCgmc2VsZi0+bWFwc1t0eXBlXSwgYWRkcikgOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX190aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoreworCSBtYXBzX19pbnNlcnQoJnNlbGYtPm1hcHNbbWFwLT50eXBlXSwgbWFwKTsKK30KKwordm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLCB1OCBjcHVtb2RlLAorCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCisJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAorCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworc3RydWN0IHN5bWJvbCAqdGhyZWFkX19maW5kX3N5bWJvbChzdHJ1Y3QgdGhyZWFkICpzZWxmLAorCQkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCisJCQkJICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqCit0aHJlYWRfX2ZpbmRfZnVuY3Rpb24oc3RydWN0IHRocmVhZCAqc2VsZiwgdTY0IGFkZHIsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCit7CisJcmV0dXJuIHRocmVhZF9fZmluZF9zeW1ib2woc2VsZiwgTUFQX19GVU5DVElPTiwgYWRkciwgZmlsdGVyKTsKK30KKyNlbmRpZgkvKiBfX1BFUkZfVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCmluZGV4IGFmNGIwNTcuLmNhY2UzNTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpAQCAtMzMsMTEgKzMzLDExIEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgogCi0KICNkZWZpbmUgVkVSU0lPTiAiMC41IgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKQEAgLTQ4MywyNyArNDgzLDMzIEBACiBnZXRfdHJhY2Vwb2ludHNfcGF0aChzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpCiB7CiAJc3RydWN0IHRyYWNlcG9pbnRfcGF0aCBwYXRoLCAqcHBhdGggPSAmcGF0aDsKLQlpbnQgaTsKKwlpbnQgaSwgbnJfdHJhY2Vwb2ludHMgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5iX2V2ZW50czsgaSsrKSB7CiAJCWlmIChwYXR0cnNbaV0udHlwZSAhPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkKIAkJCWNvbnRpbnVlOworCQkrK25yX3RyYWNlcG9pbnRzOwogCQlwcGF0aC0+bmV4dCA9IHRyYWNlcG9pbnRfaWRfdG9fcGF0aChwYXR0cnNbaV0uY29uZmlnKTsKIAkJaWYgKCFwcGF0aC0+bmV4dCkKIAkJCWRpZSgiJXNcbiIsICJObyBtZW1vcnkgdG8gYWxsb2MgdHJhY2Vwb2ludHMgbGlzdCIpOwogCQlwcGF0aCA9IHBwYXRoLT5uZXh0OwogCX0KIAotCXJldHVybiBwYXRoLm5leHQ7CisJcmV0dXJuIG5yX3RyYWNlcG9pbnRzID4gMCA/IHBhdGgubmV4dCA6IE5VTEw7CiB9Ci12b2lkIHJlYWRfdHJhY2luZ19kYXRhKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywgaW50IG5iX2V2ZW50cykKKworaW50IHJlYWRfdHJhY2luZ19kYXRhKGludCBmZCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqcGF0dHJzLCBpbnQgbmJfZXZlbnRzKQogewogCWNoYXIgYnVmW0JVRlNJWl07Ci0Jc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzOworCXN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcyA9IGdldF90cmFjZXBvaW50c19wYXRoKHBhdHRycywgbmJfZXZlbnRzKTsKIAotCW91dHB1dF9mZCA9IG9wZW4ob3V0cHV0X2ZpbGUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX0xBUkdFRklMRSwgMDY0NCk7Ci0JaWYgKG91dHB1dF9mZCA8IDApCi0JCWRpZSgiY3JlYXRpbmcgZmlsZSAnJXMnIiwgb3V0cHV0X2ZpbGUpOworCS8qCisJICogV2hhdD8gTm8gdHJhY2Vwb2ludHM/IE5vIHNlbnNlIHdyaXRpbmcgYW55dGhpbmcgaGVyZSwgYmFpbCBvdXQuCisJICovCisJaWYgKHRwcyA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlvdXRwdXRfZmQgPSBmZDsKIAogCWJ1ZlswXSA9IDIzOwogCWJ1ZlsxXSA9IDg7CkBAIC01MzAsMTEgKzUzNiwxMSBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAJd3JpdGVfb3JfZGllKCZwYWdlX3NpemUsIDQpOwogCi0JdHBzID0gZ2V0X3RyYWNlcG9pbnRzX3BhdGgocGF0dHJzLCBuYl9ldmVudHMpOwotCiAJcmVhZF9oZWFkZXJfZmlsZXMoKTsKIAlyZWFkX2Z0cmFjZV9maWxlcyh0cHMpOwogCXJlYWRfZXZlbnRfZmlsZXModHBzKTsKIAlyZWFkX3Byb2Nfa2FsbHN5bXMoKTsKIAlyZWFkX2Z0cmFjZV9wcmludGsoKTsKKworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCA1NWI0MWI5Li4wMzAyNDA1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtNDAsMTIgKzQwLDE5IEBACiBpbnQgaGVhZGVyX3BhZ2VfZGF0YV9vZmZzZXQ7CiBpbnQgaGVhZGVyX3BhZ2VfZGF0YV9zaXplOwogCitpbnQgbGF0ZW5jeV9mb3JtYXQ7CisKIHN0YXRpYyBjaGFyICppbnB1dF9idWY7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGlucHV0X2J1Zl9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGlucHV0X2J1Zl9zaXo7CiAKIHN0YXRpYyBpbnQgY3B1czsKIHN0YXRpYyBpbnQgbG9uZ19zaXplOworc3RhdGljIGludCBpc19mbGFnX2ZpZWxkOworc3RhdGljIGludCBpc19zeW1ib2xpY19maWVsZDsKKworc3RhdGljIHN0cnVjdCBmb3JtYXRfZmllbGQgKgorZmluZF9hbnlfZmllbGQoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSk7CiAKIHN0YXRpYyB2b2lkIGluaXRfaW5wdXRfYnVmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUpCiB7CkBAIC0yODQsMTggKzI5MSwxOSBAQAogCWNoYXIgKmxpbmU7CiAJY2hhciAqbmV4dCA9IE5VTEw7CiAJY2hhciAqYWRkcl9zdHI7Ci0JaW50IHJldDsKIAlpbnQgaTsKIAogCWxpbmUgPSBzdHJ0b2tfcihmaWxlLCAiXG4iLCAmbmV4dCk7CiAJd2hpbGUgKGxpbmUpIHsKKwkJYWRkcl9zdHIgPSBzdHJzZXAoJmxpbmUsICI6Iik7CisJCWlmICghbGluZSkgeworCQkJd2FybmluZygiZXJyb3IgcGFyc2luZyBwcmludCBzdHJpbmdzIik7CisJCQlicmVhazsKKwkJfQogCQlpdGVtID0gbWFsbG9jX29yX2RpZShzaXplb2YoKml0ZW0pKTsKLQkJcmV0ID0gc3NjYW5mKGxpbmUsICIlYXMgOiAlYXMiLAotCQkJICAgICAoZmxvYXQgKikodm9pZCAqKSZhZGRyX3N0ciwgLyogd29ya2Fyb3VuZCBnY2Mgd2FybmluZyAqLwotCQkJICAgICAoZmxvYXQgKikodm9pZCAqKSZpdGVtLT5wcmludGspOwogCQlpdGVtLT5hZGRyID0gc3RydG91bGwoYWRkcl9zdHIsIE5VTEwsIDE2KTsKLQkJZnJlZShhZGRyX3N0cik7Ci0KKwkJLyogZm10IHN0aWxsIGhhcyBhIHNwYWNlLCBza2lwIGl0ICovCisJCWl0ZW0tPnByaW50ayA9IHN0cmR1cChsaW5lKzEpOwogCQlpdGVtLT5uZXh0ID0gbGlzdDsKIAkJbGlzdCA9IGl0ZW07CiAJCWxpbmUgPSBzdHJ0b2tfcihOVUxMLCAiXG4iLCAmbmV4dCk7CkBAIC01MjIsNyArNTMwLDEwIEBACiAJCQlsYXN0X2NoID0gY2g7CiAJCQljaCA9IF9fcmVhZF9jaGFyKCk7CiAJCQlidWZbaSsrXSA9IGNoOwotCQl9IHdoaWxlIChjaCAhPSBxdW90ZV9jaCAmJiBsYXN0X2NoICE9ICdcXCcpOworCQkJLyogdGhlICdcJyAnXCcgd2lsbCBjYW5jZWwgaXRzZWxmICovCisJCQlpZiAoY2ggPT0gJ1xcJyAmJiBsYXN0X2NoID09ICdcXCcpCisJCQkJbGFzdF9jaCA9IDA7CisJCX0gd2hpbGUgKGNoICE9IHF1b3RlX2NoIHx8IGxhc3RfY2ggPT0gJ1xcJyk7CiAJCS8qIHJlbW92ZSB0aGUgbGFzdCBxdW90ZSAqLwogCQlpLS07CiAJCWdvdG8gb3V0OwpAQCAtNjEwLDcgKzYyMSw3IEBACiBzdGF0aWMgaW50IHRlc3RfdHlwZShlbnVtIGV2ZW50X3R5cGUgdHlwZSwgZW51bSBldmVudF90eXBlIGV4cGVjdCkKIHsKIAlpZiAodHlwZSAhPSBleHBlY3QpIHsKLQkJZGllKCJFcnJvcjogZXhwZWN0ZWQgdHlwZSAlZCBidXQgcmVhZCAlZCIsCisJCXdhcm5pbmcoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKIAkJICAgIGV4cGVjdCwgdHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02MTgsMTYgKzYyOSwxNiBAQAogfQogCiBzdGF0aWMgaW50IHRlc3RfdHlwZV90b2tlbihlbnVtIGV2ZW50X3R5cGUgdHlwZSwgY2hhciAqdG9rZW4sCi0JCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpleHBlY3RfdG9rKQorCQkgICAgZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqZXhwZWN0X3RvaykKIHsKIAlpZiAodHlwZSAhPSBleHBlY3QpIHsKLQkJZGllKCJFcnJvcjogZXhwZWN0ZWQgdHlwZSAlZCBidXQgcmVhZCAlZCIsCisJCXdhcm5pbmcoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKIAkJICAgIGV4cGVjdCwgdHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoc3RyY21wKHRva2VuLCBleHBlY3RfdG9rKSAhPSAwKSB7Ci0JCWRpZSgiRXJyb3I6IGV4cGVjdGVkICclcycgYnV0IHJlYWQgJyVzJyIsCisJCXdhcm5pbmcoIkVycm9yOiBleHBlY3RlZCAnJXMnIGJ1dCByZWFkICclcyciLAogCQkgICAgZXhwZWN0X3RvaywgdG9rZW4pOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNjUwLDcgKzY2MSw3IEBACiAJcmV0dXJuIF9fcmVhZF9leHBlY3RfdHlwZShleHBlY3QsIHRvaywgMSk7CiB9CiAKLXN0YXRpYyBpbnQgX19yZWFkX2V4cGVjdGVkKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKnN0ciwgaW50IG5ld2xpbmVfb2spCitzdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQogewogCWVudW0gZXZlbnRfdHlwZSB0eXBlOwogCWNoYXIgKnRva2VuOwpAQCAtNjY1LDE1ICs2NzYsMTUgQEAKIAogCWZyZWVfdG9rZW4odG9rZW4pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZWFkX2V4cGVjdGVkKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIF9fcmVhZF9leHBlY3RlZChleHBlY3QsIHN0ciwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9leHBlY3RlZF9pdGVtKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgcmVhZF9leHBlY3RlZF9pdGVtKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlyZXR1cm4gX19yZWFkX2V4cGVjdGVkKGV4cGVjdCwgc3RyLCAwKTsKIH0KQEAgLTY4MiwxMCArNjkzLDEwIEBACiB7CiAJY2hhciAqdG9rZW47CiAKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCAoY2hhciAqKSJuYW1lIikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJuYW1lIikgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOiIpIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pIDwgMCkKQEAgLTcwMywxMCArNzE0LDEwIEBACiAJY2hhciAqdG9rZW47CiAJaW50IGlkOwogCi0JaWYgKHJlYWRfZXhwZWN0ZWRfaXRlbShFVkVOVF9JVEVNLCAoY2hhciAqKSJJRCIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0lURU0sICJJRCIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjoiKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICI6IikgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pIDwgMCkKQEAgLTcyMSw2ICs3MzIsMjQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQgZmllbGRfaXNfc3RyaW5nKHN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkKQoreworCWlmICgoZmllbGQtPmZsYWdzICYgRklFTERfSVNfQVJSQVkpICYmCisJICAgICghc3Ryc3RyKGZpZWxkLT50eXBlLCAiY2hhciIpIHx8ICFzdHJzdHIoZmllbGQtPnR5cGUsICJ1OCIpIHx8CisJICAgICAhc3Ryc3RyKGZpZWxkLT50eXBlLCAiczgiKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmllbGRfaXNfZHluYW1pYyhzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZCkKK3sKKwlpZiAoIXN0cmNtcChmaWVsZC0+dHlwZSwgIl9fZGF0YV9sb2MiKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBldmVudF9yZWFkX2ZpZWxkcyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgZm9ybWF0X2ZpZWxkICoqZmllbGRzKQogewogCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkID0gTlVMTDsKQEAgLTczOCw3ICs3NjcsNyBAQAogCiAJCWNvdW50Kys7CiAKLQkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfSVRFTSwgKGNoYXIgKikiZmllbGQiKSkKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfSVRFTSwgImZpZWxkIikpCiAJCQlnb3RvIGZhaWw7CiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCkBAIC03NTMsNyArNzgyLDcgQEAKIAkJCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CiAJCX0KIAotCQlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfT1AsICI6IikgPCAwKQogCQkJcmV0dXJuIC0xOwogCiAJCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQpAQCAtODY1LDE0ICs4OTQsMjAgQEAKIAkJCWZyZWUoYnJhY2tldHMpOwogCQl9CiAKLQkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgIEVWRU5UX09QLCAoY2hhciAqKSI7IikpCisJCWlmIChmaWVsZF9pc19zdHJpbmcoZmllbGQpKSB7CisJCQlmaWVsZC0+ZmxhZ3MgfD0gRklFTERfSVNfU1RSSU5HOworCQkJaWYgKGZpZWxkX2lzX2R5bmFtaWMoZmllbGQpKQorCQkJCWZpZWxkLT5mbGFncyB8PSBGSUVMRF9JU19EWU5BTUlDOworCQl9CisKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgIEVWRU5UX09QLCAiOyIpKQogCQkJZ290byBmYWlsOwogCQlmcmVlX3Rva2VuKHRva2VuKTsKIAotCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCAoY2hhciAqKSJvZmZzZXQiKSA8IDApCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJvZmZzZXQiKSA8IDApCiAJCQlnb3RvIGZhaWxfZXhwZWN0OwogCi0JCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjoiKSA8IDApCiAJCQlnb3RvIGZhaWxfZXhwZWN0OwogCiAJCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikpCkBAIC04ODAsMTMgKzkxNSwxMyBAQAogCQlmaWVsZC0+b2Zmc2V0ID0gc3RydG91bCh0b2tlbiwgTlVMTCwgMCk7CiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCi0JCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI7IikgPCAwKQorCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjsiKSA8IDApCiAJCQlnb3RvIGZhaWxfZXhwZWN0OwogCi0JCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopInNpemUiKSA8IDApCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJzaXplIikgPCAwKQogCQkJZ290byBmYWlsX2V4cGVjdDsKIAotCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwkJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICI6IikgPCAwKQogCQkJZ290byBmYWlsX2V4cGVjdDsKIAogCQlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pKQpAQCAtODk0LDExICs5MjksMzQgQEAKIAkJZmllbGQtPnNpemUgPSBzdHJ0b3VsKHRva2VuLCBOVUxMLCAwKTsKIAkJZnJlZV90b2tlbih0b2tlbik7CiAKLQkJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjsiKSA8IDApCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOyIpIDwgMCkKIAkJCWdvdG8gZmFpbF9leHBlY3Q7CiAKLQkJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfTkVXTElORSwgJnRva2VuKSA8IDApCi0JCQlnb3RvIGZhaWw7CisJCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CisJCWlmICh0eXBlICE9IEVWRU5UX05FV0xJTkUpIHsKKwkJCS8qIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBrZXJuZWwgaGF2ZSBhICJzaWduZWQiIHR5cGUgKi8KKwkJCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0lURU0sICJzaWduZWQiKSkKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCisJCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjoiKSA8IDApCisJCQkJZ290byBmYWlsX2V4cGVjdDsKKworCQkJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfSVRFTSwgJnRva2VuKSkKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWlmIChzdHJ0b3VsKHRva2VuLCBOVUxMLCAwKSkKKwkJCQlmaWVsZC0+ZmxhZ3MgfD0gRklFTERfSVNfU0lHTkVEOworCisJCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOyIpIDwgMCkKKwkJCQlnb3RvIGZhaWxfZXhwZWN0OworCisJCQlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9ORVdMSU5FLCAmdG9rZW4pKQorCQkJCWdvdG8gZmFpbDsKKwkJfQorCiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCiAJCSpmaWVsZHMgPSBmaWVsZDsKQEAgLTkyMSwxMCArOTc5LDEwIEBACiAJY2hhciAqdG9rZW47CiAJaW50IHJldDsKIAotCWlmIChyZWFkX2V4cGVjdGVkX2l0ZW0oRVZFTlRfSVRFTSwgKGNoYXIgKikiZm9ybWF0IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkX2l0ZW0oRVZFTlRfSVRFTSwgImZvcm1hdCIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjoiKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICI6IikgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9ORVdMSU5FLCAmdG9rZW4pKQpAQCAtOTg0LDcgKzEwNDIsNyBAQAogCiAJKnRvayA9IE5VTEw7CiAJdHlwZSA9IHByb2Nlc3NfYXJnKGV2ZW50LCBsZWZ0LCAmdG9rZW4pOwotCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAoY2hhciAqKSI6IikpCisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfT1AsICI6IikpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAlhcmctPm9wLm9wID0gdG9rZW47CkBAIC0xMDA0LDYgKzEwNjIsMzUgQEAKIAlyZXR1cm4gRVZFTlRfRVJST1I7CiB9CiAKK3N0YXRpYyBlbnVtIGV2ZW50X3R5cGUKK3Byb2Nlc3NfYXJyYXkoc3RydWN0IGV2ZW50ICpldmVudCwgc3RydWN0IHByaW50X2FyZyAqdG9wLCBjaGFyICoqdG9rKQoreworCXN0cnVjdCBwcmludF9hcmcgKmFyZzsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisKKwlhcmcgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqYXJnKSk7CisJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKworCSp0b2sgPSBOVUxMOworCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgYXJnLCAmdG9rZW4pOworCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAiXSIpKQorCQlnb3RvIG91dF9mcmVlOworCisJdG9wLT5vcC5yaWdodCA9IGFyZzsKKworCWZyZWVfdG9rZW4odG9rZW4pOworCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKwkqdG9rID0gdG9rZW47CisKKwlyZXR1cm4gdHlwZTsKKworb3V0X2ZyZWU6CisJZnJlZV90b2tlbigqdG9rKTsKKwlmcmVlX2FyZyhhcmcpOworCXJldHVybiBFVkVOVF9FUlJPUjsKK30KKwogc3RhdGljIGludCBnZXRfb3BfcHJpbyhjaGFyICpvcCkKIHsKIAlpZiAoIW9wWzFdKSB7CkBAIC0xMTI4LDYgKzEyMTUsOCBAQAogCQkgICBzdHJjbXAodG9rZW4sICIqIikgPT0gMCB8fAogCQkgICBzdHJjbXAodG9rZW4sICJeIikgPT0gMCB8fAogCQkgICBzdHJjbXAodG9rZW4sICIvIikgPT0gMCB8fAorCQkgICBzdHJjbXAodG9rZW4sICI8IikgPT0gMCB8fAorCQkgICBzdHJjbXAodG9rZW4sICI+IikgPT0gMCB8fAogCQkgICBzdHJjbXAodG9rZW4sICI9PSIpID09IDAgfHwKIAkJICAgc3RyY21wKHRva2VuLCAiIT0iKSA9PSAwKSB7CiAKQEAgLTExNDQsMTcgKzEyMzMsNDYgQEAKIAogCQlyaWdodCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpyaWdodCkpOwogCi0JCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgcmlnaHQsIHRvayk7CisJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKwkJKnRvayA9IHRva2VuOworCisJCS8qIGNvdWxkIGp1c3QgYmUgYSB0eXBlIHBvaW50ZXIgKi8KKwkJaWYgKChzdHJjbXAoYXJnLT5vcC5vcCwgIioiKSA9PSAwKSAmJgorCQkgICAgdHlwZSA9PSBFVkVOVF9ERUxJTSAmJiAoc3RyY21wKHRva2VuLCAiKSIpID09IDApKSB7CisJCQlpZiAobGVmdC0+dHlwZSAhPSBQUklOVF9BVE9NKQorCQkJCWRpZSgiYmFkIHBvaW50ZXIgdHlwZSIpOworCQkJbGVmdC0+YXRvbS5hdG9tID0gcmVhbGxvYyhsZWZ0LT5hdG9tLmF0b20sCisJCQkJCSAgICBzaXplb2YobGVmdC0+YXRvbS5hdG9tKSArIDMpOworCQkJc3RyY2F0KGxlZnQtPmF0b20uYXRvbSwgIiAqIik7CisJCQkqYXJnID0gKmxlZnQ7CisJCQlmcmVlKGFyZyk7CisKKwkJCXJldHVybiB0eXBlOworCQl9CisKKwkJdHlwZSA9IHByb2Nlc3NfYXJnX3Rva2VuKGV2ZW50LCByaWdodCwgdG9rLCB0eXBlKTsKIAogCQlhcmctPm9wLnJpZ2h0ID0gcmlnaHQ7CiAKKwl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIlsiKSA9PSAwKSB7CisKKwkJbGVmdCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpsZWZ0KSk7CisJCSpsZWZ0ID0gKmFyZzsKKworCQlhcmctPnR5cGUgPSBQUklOVF9PUDsKKwkJYXJnLT5vcC5vcCA9IHRva2VuOworCQlhcmctPm9wLmxlZnQgPSBsZWZ0OworCisJCWFyZy0+b3AucHJpbyA9IDA7CisJCXR5cGUgPSBwcm9jZXNzX2FycmF5KGV2ZW50LCBhcmcsIHRvayk7CisKIAl9IGVsc2UgewotCQlkaWUoInVua25vd24gb3AgJyVzJyIsIHRva2VuKTsKKwkJd2FybmluZygidW5rbm93biBvcCAnJXMnIiwgdG9rZW4pOworCQlldmVudC0+ZmxhZ3MgfD0gRVZFTlRfRkxfRkFJTEVEOwogCQkvKiB0aGUgYXJnIGlzIG5vdyB0aGUgbGVmdCBzaWRlICovCiAJCXJldHVybiBFVkVOVF9OT05FOwogCX0KIAotCiAJaWYgKHR5cGUgPT0gRVZFTlRfT1ApIHsKIAkJaW50IHByaW87CiAKQEAgLTExNzgsNyArMTI5Niw3IEBACiAJY2hhciAqZmllbGQ7CiAJY2hhciAqdG9rZW47CiAKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiLT4iKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICItPiIpIDwgMCkKIAkJcmV0dXJuIEVWRU5UX0VSUk9SOwogCiAJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfSVRFTSwgJnRva2VuKSA8IDApCkBAIC0xMTg4LDYgKzEzMDYsMTYgQEAKIAlhcmctPnR5cGUgPSBQUklOVF9GSUVMRDsKIAlhcmctPmZpZWxkLm5hbWUgPSBmaWVsZDsKIAorCWlmIChpc19mbGFnX2ZpZWxkKSB7CisJCWFyZy0+ZmllbGQuZmllbGQgPSBmaW5kX2FueV9maWVsZChldmVudCwgYXJnLT5maWVsZC5uYW1lKTsKKwkJYXJnLT5maWVsZC5maWVsZC0+ZmxhZ3MgfD0gRklFTERfSVNfRkxBRzsKKwkJaXNfZmxhZ19maWVsZCA9IDA7CisJfSBlbHNlIGlmIChpc19zeW1ib2xpY19maWVsZCkgeworCQlhcmctPmZpZWxkLmZpZWxkID0gZmluZF9hbnlfZmllbGQoZXZlbnQsIGFyZy0+ZmllbGQubmFtZSk7CisJCWFyZy0+ZmllbGQuZmllbGQtPmZsYWdzIHw9IEZJRUxEX0lTX1NZTUJPTElDOworCQlpc19zeW1ib2xpY19maWVsZCA9IDA7CisJfQorCiAJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKIAkqdG9rID0gdG9rZW47CiAKQEAgLTEzMzgsMTQgKzE0NjYsMTQgQEAKIAlkbyB7CiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCQl0eXBlID0gcmVhZF90b2tlbl9pdGVtKCZ0b2tlbik7Ci0JCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAoY2hhciAqKSJ7IikpCisJCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAieyIpKQogCQkJYnJlYWs7CiAKIAkJYXJnID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmFyZykpOwogCiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCQl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGFyZywgJnRva2VuKTsKLQkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sIChjaGFyICopIiwiKSkKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sICIsIikpCiAJCQlnb3RvIG91dF9mcmVlOwogCiAJCWZpZWxkID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmZpZWxkKSk7CkBAIC0xMzU2LDcgKzE0ODQsNyBAQAogCiAJCWZyZWVfdG9rZW4odG9rZW4pOwogCQl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGFyZywgJnRva2VuKTsKLQkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfT1AsIChjaGFyICopIn0iKSkKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfT1AsICJ9IikpCiAJCQlnb3RvIG91dF9mcmVlOwogCiAJCXZhbHVlID0gYXJnX2V2YWwoYXJnKTsKQEAgLTEzOTEsMTMgKzE1MTksMTMgQEAKIAltZW1zZXQoYXJnLCAwLCBzaXplb2YoKmFyZykpOwogCWFyZy0+dHlwZSA9IFBSSU5UX0ZMQUdTOwogCi0JaWYgKHJlYWRfZXhwZWN0ZWRfaXRlbShFVkVOVF9ERUxJTSwgKGNoYXIgKikiKCIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0RFTElNLCAiKCIpIDwgMCkKIAkJcmV0dXJuIEVWRU5UX0VSUk9SOwogCiAJZmllbGQgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqZmllbGQpKTsKIAogCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgZmllbGQsICZ0b2tlbik7Ci0JaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sIChjaGFyICopIiwiKSkKKwlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgIiwiKSkKIAkJZ290byBvdXRfZnJlZTsKIAogCWFyZy0+ZmxhZ3MuZmllbGQgPSBmaWVsZDsKQEAgLTE0MDgsMTEgKzE1MzYsMTEgQEAKIAkJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOwogCX0KIAotCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAoY2hhciAqKSIsIikpCisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sICIsIikpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAl0eXBlID0gcHJvY2Vzc19maWVsZHMoZXZlbnQsICZhcmctPmZsYWdzLmZsYWdzLCAmdG9rZW4pOwotCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAoY2hhciAqKSIpIikpCisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sICIpIikpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAlmcmVlX3Rva2VuKHRva2VuKTsKQEAgLTE0MzQsMTkgKzE1NjIsMTkgQEAKIAltZW1zZXQoYXJnLCAwLCBzaXplb2YoKmFyZykpOwogCWFyZy0+dHlwZSA9IFBSSU5UX1NZTUJPTDsKIAotCWlmIChyZWFkX2V4cGVjdGVkX2l0ZW0oRVZFTlRfREVMSU0sIChjaGFyICopIigiKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWRfaXRlbShFVkVOVF9ERUxJTSwgIigiKSA8IDApCiAJCXJldHVybiBFVkVOVF9FUlJPUjsKIAogCWZpZWxkID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmZpZWxkKSk7CiAKIAl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGZpZWxkLCAmdG9rZW4pOwotCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAoY2hhciAqKSIsIikpCisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sICIsIikpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAlhcmctPnN5bWJvbC5maWVsZCA9IGZpZWxkOwogCiAJdHlwZSA9IHByb2Nlc3NfZmllbGRzKGV2ZW50LCAmYXJnLT5zeW1ib2wuc3ltYm9scywgJnRva2VuKTsKLQlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiKSIpKQorCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAiKSIpKQogCQlnb3RvIG91dF9mcmVlOwogCiAJZnJlZV90b2tlbih0b2tlbik7CkBAIC0xNDYzLDcgKzE1OTEsNiBAQAogewogCXN0cnVjdCBwcmludF9hcmcgKml0ZW1fYXJnOwogCWVudW0gZXZlbnRfdHlwZSB0eXBlOwotCWludCBwdHJfY2FzdCA9IDA7CiAJY2hhciAqdG9rZW47CiAKIAl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGFyZywgJnRva2VuKTsKQEAgLTE0NzEsMjggKzE1OTgsMTMgQEAKIAlpZiAodHlwZSA9PSBFVkVOVF9FUlJPUikKIAkJcmV0dXJuIEVWRU5UX0VSUk9SOwogCi0JaWYgKHR5cGUgPT0gRVZFTlRfT1ApIHsKLQkJLyogaGFuZGxlIHRoZSBwdHIgY2FzdHMgKi8KLQkJaWYgKCFzdHJjbXAodG9rZW4sICIqIikpIHsKLQkJCS8qCi0JCQkgKiBGSVhNRTogc2hvdWxkIHdlIHphcHAgd2hpdGVzcGFjZXMgYmVmb3JlICcpJyA/Ci0JCQkgKiAobWF5IHJlcXVpcmUgYSBwZWVrX3Rva2VuX2l0ZW0oKSkKLQkJCSAqLwotCQkJaWYgKF9fcGVla19jaGFyKCkgPT0gJyknKSB7Ci0JCQkJcHRyX2Nhc3QgPSAxOwotCQkJCWZyZWVfdG9rZW4odG9rZW4pOwotCQkJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKLQkJCX0KLQkJfQotCQlpZiAoIXB0cl9jYXN0KSB7Ci0JCQl0eXBlID0gcHJvY2Vzc19vcChldmVudCwgYXJnLCAmdG9rZW4pOworCWlmICh0eXBlID09IEVWRU5UX09QKQorCQl0eXBlID0gcHJvY2Vzc19vcChldmVudCwgYXJnLCAmdG9rZW4pOwogCi0JCQlpZiAodHlwZSA9PSBFVkVOVF9FUlJPUikKLQkJCQlyZXR1cm4gRVZFTlRfRVJST1I7Ci0JCX0KLQl9CisJaWYgKHR5cGUgPT0gRVZFTlRfRVJST1IpCisJCXJldHVybiBFVkVOVF9FUlJPUjsKIAotCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAoY2hhciAqKSIpIikpIHsKKwlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgIikiKSkgewogCQlmcmVlX3Rva2VuKHRva2VuKTsKIAkJcmV0dXJuIEVWRU5UX0VSUk9SOwogCX0KQEAgLTE1MTYsMTMgKzE2MjgsNiBAQAogCQlpdGVtX2FyZyA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCppdGVtX2FyZykpOwogCiAJCWFyZy0+dHlwZSA9IFBSSU5UX1RZUEU7Ci0JCWlmIChwdHJfY2FzdCkgewotCQkJY2hhciAqb2xkID0gYXJnLT5hdG9tLmF0b207Ci0KLQkJCWFyZy0+YXRvbS5hdG9tID0gbWFsbG9jX29yX2RpZShzdHJsZW4ob2xkICsgMykpOwotCQkJc3ByaW50ZihhcmctPmF0b20uYXRvbSwgIiVzICoiLCBvbGQpOwotCQkJZnJlZShvbGQpOwotCQl9CiAJCWFyZy0+dHlwZWNhc3QudHlwZSA9IGFyZy0+YXRvbS5hdG9tOwogCQlhcmctPnR5cGVjYXN0Lml0ZW0gPSBpdGVtX2FyZzsKIAkJdHlwZSA9IHByb2Nlc3NfYXJnX3Rva2VuKGV2ZW50LCBpdGVtX2FyZywgJnRva2VuLCB0eXBlKTsKQEAgLTE1NDAsNyArMTY0NSw3IEBACiAJZW51bSBldmVudF90eXBlIHR5cGU7CiAJY2hhciAqdG9rZW47CiAKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9ERUxJTSwgKGNoYXIgKikiKCIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9ERUxJTSwgIigiKSA8IDApCiAJCXJldHVybiBFVkVOVF9FUlJPUjsKIAogCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQpAQCAtMTU1MCw3ICsxNjU1LDcgQEAKIAlhcmctPnN0cmluZy5zdHJpbmcgPSB0b2tlbjsKIAlhcmctPnN0cmluZy5vZmZzZXQgPSAtMTsKIAotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0RFTElNLCAoY2hhciAqKSIpIikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0RFTElNLCAiKSIpIDwgMCkKIAkJcmV0dXJuIEVWRU5UX0VSUk9SOwogCiAJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKQEAgLTE1NzgsOSArMTY4MywxMSBAQAogCQkJdHlwZSA9IHByb2Nlc3NfZW50cnkoZXZlbnQsIGFyZywgJnRva2VuKTsKIAkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJfX3ByaW50X2ZsYWdzIikgPT0gMCkgewogCQkJZnJlZV90b2tlbih0b2tlbik7CisJCQlpc19mbGFnX2ZpZWxkID0gMTsKIAkJCXR5cGUgPSBwcm9jZXNzX2ZsYWdzKGV2ZW50LCBhcmcsICZ0b2tlbik7CiAJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiX19wcmludF9zeW1ib2xpYyIpID09IDApIHsKIAkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJaXNfc3ltYm9saWNfZmllbGQgPSAxOwogCQkJdHlwZSA9IHByb2Nlc3Nfc3ltYm9scyhldmVudCwgYXJnLCAmdG9rZW4pOwogCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIl9fZ2V0X3N0ciIpID09IDApIHsKIAkJCWZyZWVfdG9rZW4odG9rZW4pOwpAQCAtMTYzNywxMiArMTc0NCwxOCBAQAogCiBzdGF0aWMgaW50IGV2ZW50X3JlYWRfcHJpbnRfYXJncyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHJpbnRfYXJnICoqbGlzdCkKIHsKLQllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZSA9IEVWRU5UX0VSUk9SOwogCXN0cnVjdCBwcmludF9hcmcgKmFyZzsKIAljaGFyICp0b2tlbjsKIAlpbnQgYXJncyA9IDA7CiAKIAlkbyB7CisJCWlmICh0eXBlID09IEVWRU5UX05FV0xJTkUpIHsKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOworCQkJY29udGludWU7CisJCX0KKwogCQlhcmcgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqYXJnKSk7CiAJCW1lbXNldChhcmcsIDAsIHNpemVvZigqYXJnKSk7CiAKQEAgLTE2ODMsMTggKzE3OTYsMTkgQEAKIAljaGFyICp0b2tlbjsKIAlpbnQgcmV0OwogCi0JaWYgKHJlYWRfZXhwZWN0ZWRfaXRlbShFVkVOVF9JVEVNLCAoY2hhciAqKSJwcmludCIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0lURU0sICJwcmludCIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfSVRFTSwgKGNoYXIgKikiZm10IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJmbXQiKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOiIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfRFFVT1RFLCAmdG9rZW4pIDwgMCkKIAkJZ290byBmYWlsOwogCisgY29uY2F0OgogCWV2ZW50LT5wcmludF9mbXQuZm9ybWF0ID0gdG9rZW47CiAJZXZlbnQtPnByaW50X2ZtdC5hcmdzID0gTlVMTDsKIApAQCAtMTcwNCw3ICsxODE4LDIyIEBACiAJaWYgKHR5cGUgPT0gRVZFTlRfTk9ORSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiLCIpKQorCS8qIEhhbmRsZSBjb25jYXRpbmF0aW9uIG9mIHByaW50IGxpbmVzICovCisJaWYgKHR5cGUgPT0gRVZFTlRfRFFVT1RFKSB7CisJCWNoYXIgKmNhdDsKKworCQljYXQgPSBtYWxsb2Nfb3JfZGllKHN0cmxlbihldmVudC0+cHJpbnRfZm10LmZvcm1hdCkgKworCQkJCSAgICBzdHJsZW4odG9rZW4pICsgMSk7CisJCXN0cmNweShjYXQsIGV2ZW50LT5wcmludF9mbXQuZm9ybWF0KTsKKwkJc3RyY2F0KGNhdCwgdG9rZW4pOworCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJZnJlZV90b2tlbihldmVudC0+cHJpbnRfZm10LmZvcm1hdCk7CisJCWV2ZW50LT5wcmludF9mbXQuZm9ybWF0ID0gTlVMTDsKKwkJdG9rZW4gPSBjYXQ7CisJCWdvdG8gY29uY2F0OworCX0KKworCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAiLCIpKQogCQlnb3RvIGZhaWw7CiAKIAlmcmVlX3Rva2VuKHRva2VuKTsKQEAgLTE3MTMsNyArMTg0Miw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAtMTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiAKICBmYWlsOgogCWZyZWVfdG9rZW4odG9rZW4pOwpAQCAtMTc1OSw3ICsxODg4LDcgQEAKIAlyZXR1cm4gZmluZF9maWVsZChldmVudCwgbmFtZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcmVhZF9zaXplKHZvaWQgKnB0ciwgaW50IHNpemUpCit1bnNpZ25lZCBsb25nIGxvbmcgcmVhZF9zaXplKHZvaWQgKnB0ciwgaW50IHNpemUpCiB7CiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgpAQCAtMTgyMiwzNyArMTk1MSw2NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9fcGFyc2VfY29tbW9uKHZvaWQgKmRhdGEsIGludCAqc2l6ZSwgaW50ICpvZmZzZXQsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHJldDsKKworCWlmICghKnNpemUpIHsKKwkJcmV0ID0gZ2V0X2NvbW1vbl9pbmZvKG5hbWUsIG9mZnNldCwgc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJlYWRfc2l6ZShkYXRhICsgKm9mZnNldCwgKnNpemUpOworfQorCiBpbnQgdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUodm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgaW50IHR5cGVfb2Zmc2V0OwogCXN0YXRpYyBpbnQgdHlwZV9zaXplOwotCWludCByZXQ7CiAKLQlpZiAoIXR5cGVfc2l6ZSkgewotCQlyZXQgPSBnZXRfY29tbW9uX2luZm8oImNvbW1vbl90eXBlIiwKLQkJCQkgICAgICAmdHlwZV9vZmZzZXQsCi0JCQkJICAgICAgJnR5cGVfc2l6ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIHJlYWRfc2l6ZShkYXRhICsgdHlwZV9vZmZzZXQsIHR5cGVfc2l6ZSk7CisJcmV0dXJuIF9fcGFyc2VfY29tbW9uKGRhdGEsICZ0eXBlX3NpemUsICZ0eXBlX29mZnNldCwKKwkJCSAgICAgICJjb21tb25fdHlwZSIpOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2NvbW1vbl9waWQodm9pZCAqZGF0YSkKK2ludCB0cmFjZV9wYXJzZV9jb21tb25fcGlkKHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGludCBwaWRfb2Zmc2V0OwogCXN0YXRpYyBpbnQgcGlkX3NpemU7CisKKwlyZXR1cm4gX19wYXJzZV9jb21tb24oZGF0YSwgJnBpZF9zaXplLCAmcGlkX29mZnNldCwKKwkJCSAgICAgICJjb21tb25fcGlkIik7Cit9CisKK2ludCBwYXJzZV9jb21tb25fcGModm9pZCAqZGF0YSkKK3sKKwlzdGF0aWMgaW50IHBjX29mZnNldDsKKwlzdGF0aWMgaW50IHBjX3NpemU7CisKKwlyZXR1cm4gX19wYXJzZV9jb21tb24oZGF0YSwgJnBjX3NpemUsICZwY19vZmZzZXQsCisJCQkgICAgICAiY29tbW9uX3ByZWVtcHRfY291bnQiKTsKK30KKworaW50IHBhcnNlX2NvbW1vbl9mbGFncyh2b2lkICpkYXRhKQoreworCXN0YXRpYyBpbnQgZmxhZ3Nfb2Zmc2V0OworCXN0YXRpYyBpbnQgZmxhZ3Nfc2l6ZTsKKworCXJldHVybiBfX3BhcnNlX2NvbW1vbihkYXRhLCAmZmxhZ3Nfc2l6ZSwgJmZsYWdzX29mZnNldCwKKwkJCSAgICAgICJjb21tb25fZmxhZ3MiKTsKK30KKworaW50IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKHZvaWQgKmRhdGEpCit7CisJc3RhdGljIGludCBsZF9vZmZzZXQ7CisJc3RhdGljIGludCBsZF9zaXplOwogCWludCByZXQ7CiAKLQlpZiAoIXBpZF9zaXplKSB7Ci0JCXJldCA9IGdldF9jb21tb25faW5mbygiY29tbW9uX3BpZCIsCi0JCQkJICAgICAgJnBpZF9vZmZzZXQsCi0JCQkJICAgICAgJnBpZF9zaXplKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBfX3BhcnNlX2NvbW1vbihkYXRhLCAmbGRfc2l6ZSwgJmxkX29mZnNldCwKKwkJCSAgICAgImNvbW1vbl9sb2NrX2RlcHRoIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKIAotCXJldHVybiByZWFkX3NpemUoZGF0YSArIHBpZF9vZmZzZXQsIHBpZF9zaXplKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3QgZXZlbnQgKnRyYWNlX2ZpbmRfZXZlbnQoaW50IGlkKQpAQCAtMTg2NiwxMSArMjAyNSwyMCBAQAogCXJldHVybiBldmVudDsKIH0KIAorc3RydWN0IGV2ZW50ICp0cmFjZV9maW5kX25leHRfZXZlbnQoc3RydWN0IGV2ZW50ICpldmVudCkKK3sKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gZXZlbnRfbGlzdDsKKworCXJldHVybiBldmVudC0+bmV4dDsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX251bV9hcmcodm9pZCAqZGF0YSwgaW50IHNpemUsCiAJCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCwgc3RydWN0IHByaW50X2FyZyAqYXJnKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBsZWZ0LCByaWdodDsKKwlzdHJ1Y3QgcHJpbnRfYXJnICpsYXJnOwogCiAJc3dpdGNoIChhcmctPnR5cGUpIHsKIAljYXNlIFBSSU5UX05VTEw6CkBAIC0xODk3LDYgKzIwNjUsMjYgQEAKIAkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCWNhc2UgUFJJTlRfT1A6CisJCWlmIChzdHJjbXAoYXJnLT5vcC5vcCwgIlsiKSA9PSAwKSB7CisJCQkvKgorCQkJICogQXJyYXlzIGFyZSBzcGVjaWFsLCBzaW5jZSB3ZSBkb24ndCB3YW50CisJCQkgKiB0byByZWFkIHRoZSBhcmcgYXMgaXMuCisJCQkgKi8KKwkJCWlmIChhcmctPm9wLmxlZnQtPnR5cGUgIT0gUFJJTlRfRklFTEQpCisJCQkJZ290byBkZWZhdWx0X29wOyAvKiBvb3BzLCBhbGwgYmV0cyBvZmYgKi8KKwkJCWxhcmcgPSBhcmctPm9wLmxlZnQ7CisJCQlpZiAoIWxhcmctPmZpZWxkLmZpZWxkKSB7CisJCQkJbGFyZy0+ZmllbGQuZmllbGQgPQorCQkJCQlmaW5kX2FueV9maWVsZChldmVudCwgbGFyZy0+ZmllbGQubmFtZSk7CisJCQkJaWYgKCFsYXJnLT5maWVsZC5maWVsZCkKKwkJCQkJZGllKCJmaWVsZCAlcyBub3QgZm91bmQiLCBsYXJnLT5maWVsZC5uYW1lKTsKKwkJCX0KKwkJCXJpZ2h0ID0gZXZhbF9udW1fYXJnKGRhdGEsIHNpemUsIGV2ZW50LCBhcmctPm9wLnJpZ2h0KTsKKwkJCXZhbCA9IHJlYWRfc2l6ZShkYXRhICsgbGFyZy0+ZmllbGQuZmllbGQtPm9mZnNldCArCisJCQkJCXJpZ2h0ICogbG9uZ19zaXplLCBsb25nX3NpemUpOworCQkJYnJlYWs7CisJCX0KKyBkZWZhdWx0X29wOgogCQlsZWZ0ID0gZXZhbF9udW1fYXJnKGRhdGEsIHNpemUsIGV2ZW50LCBhcmctPm9wLmxlZnQpOwogCQlyaWdodCA9IGV2YWxfbnVtX2FyZyhkYXRhLCBzaXplLCBldmVudCwgYXJnLT5vcC5yaWdodCk7CiAJCXN3aXRjaCAoYXJnLT5vcC5vcFswXSkgewpAQCAtMTk0Nyw2ICsyMTM1LDEyIEBACiAJCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBhcmctPm9wLm9wKTsKIAkJCXZhbCA9IGxlZnQgPT0gcmlnaHQ7CiAJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQl2YWwgPSBsZWZ0IC0gcmlnaHQ7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQl2YWwgPSBsZWZ0ICsgcmlnaHQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRpZSgidW5rbm93biBvcCAnJXMnIiwgYXJnLT5vcC5vcCk7CiAJCX0KQEAgLTE5NzgsNyArMjE3Miw3IEBACiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2ZsYWcoY29uc3QgY2hhciAqZmxhZykKK3Vuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2ZsYWcoY29uc3QgY2hhciAqZmxhZykKIHsKIAlpbnQgaTsKIApAQCAtMjE0NSw4ICsyMzM5LDkgQEAKIAkJCWNhc2UgJ3UnOgogCQkJY2FzZSAneCc6CiAJCQljYXNlICdpJzoKLQkJCQlicHRyID0gKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKWJwdHIgKyAobG9uZ19zaXplIC0gMSkpICYKLQkJCQkJCX4obG9uZ19zaXplIC0gMSkpOworCQkJCS8qIHRoZSBwb2ludGVycyBhcmUgYWx3YXlzIDQgYnl0ZXMgYWxpZ25lZCAqLworCQkJCWJwdHIgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpYnB0ciArIDMpICYKKwkJCQkJCX4zKTsKIAkJCQlzd2l0Y2ggKGxzKSB7CiAJCQkJY2FzZSAwOgogCQkJCWNhc2UgMToKQEAgLTIyNzAsNyArMjQ2NSwyNyBAQAogCiAJZm9yICg7ICpwdHI7IHB0cisrKSB7CiAJCWxzID0gMDsKLQkJaWYgKCpwdHIgPT0gJyUnKSB7CisJCWlmICgqcHRyID09ICdcXCcpIHsKKwkJCXB0cisrOworCQkJc3dpdGNoICgqcHRyKSB7CisJCQljYXNlICduJzoKKwkJCQlwcmludGYoIlxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQlwcmludGYoIlx0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlICdyJzoKKwkJCQlwcmludGYoIlxyIik7CisJCQkJYnJlYWs7CisJCQljYXNlICdcXCc6CisJCQkJcHJpbnRmKCJcXCIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoIiVjIiwgKnB0cik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJfSBlbHNlIGlmICgqcHRyID09ICclJykgewogCQkJc2F2ZXB0ciA9IHB0cjsKIAkJCXNob3dfZnVuYyA9IDA7CiAgY29udF9wcm9jZXNzOgpAQCAtMjM3Nyw2ICsyNTkyLDQxIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X2xhdF9mbXQodm9pZCAqZGF0YSwgaW50IHNpemUgX191bnVzZWQpCit7CisJdW5zaWduZWQgaW50IGxhdF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgcGM7CisJaW50IGxvY2tfZGVwdGg7CisJaW50IGhhcmRpcnE7CisJaW50IHNvZnRpcnE7CisKKwlsYXRfZmxhZ3MgPSBwYXJzZV9jb21tb25fZmxhZ3MoZGF0YSk7CisJcGMgPSBwYXJzZV9jb21tb25fcGMoZGF0YSk7CisJbG9ja19kZXB0aCA9IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKGRhdGEpOworCisJaGFyZGlycSA9IGxhdF9mbGFncyAmIFRSQUNFX0ZMQUdfSEFSRElSUTsKKwlzb2Z0aXJxID0gbGF0X2ZsYWdzICYgVFJBQ0VfRkxBR19TT0ZUSVJROworCisJcHJpbnRmKCIlYyVjJWMiLAorCSAgICAgICAobGF0X2ZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX09GRikgPyAnZCcgOgorCSAgICAgICAobGF0X2ZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX05PU1VQUE9SVCkgPworCSAgICAgICAnWCcgOiAnLicsCisJICAgICAgIChsYXRfZmxhZ3MgJiBUUkFDRV9GTEFHX05FRURfUkVTQ0hFRCkgPworCSAgICAgICAnTicgOiAnLicsCisJICAgICAgIChoYXJkaXJxICYmIHNvZnRpcnEpID8gJ0gnIDoKKwkgICAgICAgaGFyZGlycSA/ICdoJyA6IHNvZnRpcnEgPyAncycgOiAnLicpOworCisJaWYgKHBjKQorCQlwcmludGYoIiV4IiwgcGMpOworCWVsc2UKKwkJcHJpbnRmKCIuIik7CisKKwlpZiAobG9ja19kZXB0aCA8IDApCisJCXByaW50ZigiLiIpOworCWVsc2UKKwkJcHJpbnRmKCIlZCIsIGxvY2tfZGVwdGgpOworfQorCiAvKiB0YWtlbiBmcm9tIExpbnV4LCB3cml0dGVuIGJ5IEZyZWRlcmljIFdlaXNiZWNrZXIgKi8KIHN0YXRpYyB2b2lkIHByaW50X2dyYXBoX2NwdShpbnQgY3B1KQogewpAQCAtMjQ1Miw3ICsyNzAyLDcgQEAKIAlpZiAoIShldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9JU0ZVTkNSRVQpKQogCQlyZXR1cm4gTlVMTDsKIAotCXBpZCA9IHBhcnNlX2NvbW1vbl9waWQobmV4dC0+ZGF0YSk7CisJcGlkID0gdHJhY2VfcGFyc2VfY29tbW9uX3BpZChuZXh0LT5kYXRhKTsKIAlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJmdW5jIik7CiAJaWYgKCFmaWVsZCkKIAkJZGllKCJmdW5jdGlvbiByZXR1cm4gZG9lcyBub3QgaGF2ZSBmaWVsZCBmdW5jIik7CkBAIC0yNjIwLDYgKzI4NzAsMTEgQEAKIAogCXByaW50ZigiIHwgIik7CiAKKwlpZiAobGF0ZW5jeV9mb3JtYXQpIHsKKwkJcHJpbnRfbGF0X2ZtdChkYXRhLCBzaXplKTsKKwkJcHJpbnRmKCIgfCAiKTsKKwl9CisKIAlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJmdW5jIik7CiAJaWYgKCFmaWVsZCkKIAkJZGllKCJmdW5jdGlvbiBlbnRyeSBkb2VzIG5vdCBoYXZlIGZ1bmMgZmllbGQiKTsKQEAgLTI2NjMsNiArMjkxOCwxMSBAQAogCiAJcHJpbnRmKCIgfCAiKTsKIAorCWlmIChsYXRlbmN5X2Zvcm1hdCkgeworCQlwcmludF9sYXRfZm10KGRhdGEsIHNpemUpOworCQlwcmludGYoIiB8ICIpOworCX0KKwogCWZpZWxkID0gZmluZF9maWVsZChldmVudCwgInJldHRpbWUiKTsKIAlpZiAoIWZpZWxkKQogCQlkaWUoImNhbid0IGZpbmQgcmV0dGltZSBpbiByZXR1cm4gZ3JhcGgiKTsKQEAgLTI3MjQsMTkgKzI5ODQsMzAgQEAKIAogCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKIAlpZiAoIWV2ZW50KSB7Ci0JCXByaW50ZigidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkXG4iLCB0eXBlKTsKKwkJd2FybmluZygidWchIG5vIGV2ZW50IGZvdW5kIGZvciB0eXBlICVkIiwgdHlwZSk7CiAJCXJldHVybjsKIAl9CiAKLQlwaWQgPSBwYXJzZV9jb21tb25fcGlkKGRhdGEpOworCXBpZCA9IHRyYWNlX3BhcnNlX2NvbW1vbl9waWQoZGF0YSk7CiAKIAlpZiAoZXZlbnQtPmZsYWdzICYgKEVWRU5UX0ZMX0lTRlVOQ0VOVCB8IEVWRU5UX0ZMX0lTRlVOQ1JFVCkpCiAJCXJldHVybiBwcmV0dHlfcHJpbnRfZnVuY19ncmFwaChkYXRhLCBzaXplLCBldmVudCwgY3B1LAogCQkJCQkgICAgICAgcGlkLCBjb21tLCBzZWNzLCB1c2Vjcyk7CiAKLQlwcmludGYoIiUxNnMtJS01ZCBbJTAzZF0gJTVsdS4lMDlMdTogJXM6ICIsCi0JICAgICAgIGNvbW0sIHBpZCwgIGNwdSwKLQkgICAgICAgc2VjcywgbnNlY3MsIGV2ZW50LT5uYW1lKTsKKwlpZiAobGF0ZW5jeV9mb3JtYXQpIHsKKwkJcHJpbnRmKCIlOC44cy0lLTVkICUzZCIsCisJCSAgICAgICBjb21tLCBwaWQsIGNwdSk7CisJCXByaW50X2xhdF9mbXQoZGF0YSwgc2l6ZSk7CisJfSBlbHNlCisJCXByaW50ZigiJTE2cy0lLTVkIFslMDNkXSIsIGNvbW0sIHBpZCwgIGNwdSk7CisKKwlwcmludGYoIiAlNWx1LiUwNmx1OiAlczogIiwgc2VjcywgdXNlY3MsIGV2ZW50LT5uYW1lKTsKKworCWlmIChldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9GQUlMRUQpIHsKKwkJcHJpbnRmKCJFVkVOVCAnJXMnIEZBSUxFRCBUTyBQQVJTRVxuIiwKKwkJICAgICAgIGV2ZW50LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KIAogCXByZXR0eV9wcmludChkYXRhLCBzaXplLCBldmVudCk7CiAJcHJpbnRmKCJcbiIpOwpAQCAtMjgwNyw0NiArMzA3OCw3MSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGFyc2VfaGVhZGVyX2ZpZWxkKGNoYXIgKnR5cGUsCitzdGF0aWMgdm9pZCBwYXJzZV9oZWFkZXJfZmllbGQoY29uc3QgY2hhciAqZmllbGQsCiAJCQkgICAgICAgaW50ICpvZmZzZXQsIGludCAqc2l6ZSkKIHsKIAljaGFyICp0b2tlbjsKKwlpbnQgdHlwZTsKIAotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopImZpZWxkIikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJmaWVsZCIpIDwgMCkKIAkJcmV0dXJuOwotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOiIpIDwgMCkKIAkJcmV0dXJuOworCiAJLyogdHlwZSAqLwogCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQotCQlyZXR1cm47CisJCWdvdG8gZmFpbDsKIAlmcmVlX3Rva2VuKHRva2VuKTsKIAotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIHR5cGUpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCBmaWVsZCkgPCAwKQogCQlyZXR1cm47Ci0JaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjsiKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICI7IikgPCAwKQogCQlyZXR1cm47Ci0JaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfSVRFTSwgKGNoYXIgKikib2Zmc2V0IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sICJvZmZzZXQiKSA8IDApCiAJCXJldHVybjsKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjoiKSA8IDApCiAJCXJldHVybjsKIAlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pIDwgMCkKLQkJcmV0dXJuOworCQlnb3RvIGZhaWw7CiAJKm9mZnNldCA9IGF0b2kodG9rZW4pOwogCWZyZWVfdG9rZW4odG9rZW4pOwotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI7IikgPCAwKQorCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOyIpIDwgMCkKIAkJcmV0dXJuOwotCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopInNpemUiKSA8IDApCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfSVRFTSwgInNpemUiKSA8IDApCiAJCXJldHVybjsKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjoiKSA8IDApCiAJCXJldHVybjsKIAlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pIDwgMCkKLQkJcmV0dXJuOworCQlnb3RvIGZhaWw7CiAJKnNpemUgPSBhdG9pKHRva2VuKTsKIAlmcmVlX3Rva2VuKHRva2VuKTsKLQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOyIpIDwgMCkKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgIjsiKSA8IDApCiAJCXJldHVybjsKLQlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9ORVdMSU5FLCAmdG9rZW4pIDwgMCkKLQkJcmV0dXJuOworCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CisJaWYgKHR5cGUgIT0gRVZFTlRfTkVXTElORSkgeworCQkvKiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUga2VybmVsIGhhdmUgYSAic2lnbmVkIiB0eXBlICovCisJCWlmICh0eXBlICE9IEVWRU5UX0lURU0pCisJCQlnb3RvIGZhaWw7CisKKwkJaWYgKHN0cmNtcCh0b2tlbiwgInNpZ25lZCIpICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJZnJlZV90b2tlbih0b2tlbik7CisKKwkJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsICI6IikgPCAwKQorCQkJcmV0dXJuOworCisJCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikpCisJCQlnb3RvIGZhaWw7CisKKwkJZnJlZV90b2tlbih0b2tlbik7CisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAiOyIpIDwgMCkKKwkJCXJldHVybjsKKworCQlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9ORVdMSU5FLCAmdG9rZW4pKQorCQkJZ290byBmYWlsOworCX0KKyBmYWlsOgogCWZyZWVfdG9rZW4odG9rZW4pOwogfQogCkBAIC0yODU0LDExICszMTUwLDExIEBACiB7CiAJaW5pdF9pbnB1dF9idWYoYnVmLCBzaXplKTsKIAotCXBhcnNlX2hlYWRlcl9maWVsZCgoY2hhciAqKSJ0aW1lc3RhbXAiLCAmaGVhZGVyX3BhZ2VfdHNfb2Zmc2V0LAorCXBhcnNlX2hlYWRlcl9maWVsZCgidGltZXN0YW1wIiwgJmhlYWRlcl9wYWdlX3RzX29mZnNldCwKIAkJCSAgICZoZWFkZXJfcGFnZV90c19zaXplKTsKLQlwYXJzZV9oZWFkZXJfZmllbGQoKGNoYXIgKikiY29tbWl0IiwgJmhlYWRlcl9wYWdlX3NpemVfb2Zmc2V0LAorCXBhcnNlX2hlYWRlcl9maWVsZCgiY29tbWl0IiwgJmhlYWRlcl9wYWdlX3NpemVfb2Zmc2V0LAogCQkJICAgJmhlYWRlcl9wYWdlX3NpemVfc2l6ZSk7Ci0JcGFyc2VfaGVhZGVyX2ZpZWxkKChjaGFyICopImRhdGEiLCAmaGVhZGVyX3BhZ2VfZGF0YV9vZmZzZXQsCisJcGFyc2VfaGVhZGVyX2ZpZWxkKCJkYXRhIiwgJmhlYWRlcl9wYWdlX2RhdGFfb2Zmc2V0LAogCQkJICAgJmhlYWRlcl9wYWdlX2RhdGFfc2l6ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI5MDksNiArMzIwNSw5IEBACiAJaWYgKHJldCA8IDApCiAJCWRpZSgiZmFpbGVkIHRvIHJlYWQgZnRyYWNlIGV2ZW50IHByaW50IGZtdCIpOwogCisJLyogTmV3IGZ0cmFjZSBoYW5kbGVzIGFyZ3MgKi8KKwlpZiAocmV0ID4gMCkKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBUaGUgYXJndW1lbnRzIGZvciBmdHJhY2UgZmlsZXMgYXJlIHBhcnNlZCBieSB0aGUgZmllbGRzLgogCSAqIFNldCB1cCB0aGUgZmllbGRzIGFzIHRoZWlyIGFyZ3VtZW50cy4KQEAgLTI5MjYsNyArMzIyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwYXJzZV9ldmVudF9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpzeXN0ZW1fX3VudXNlZCBfX3VudXNlZCkKK2ludCBwYXJzZV9ldmVudF9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpzeXMpCiB7CiAJc3RydWN0IGV2ZW50ICpldmVudDsKIAlpbnQgcmV0OwpAQCAtMjk0NiwxMiArMzI0NSwxOCBAQAogCQlkaWUoImZhaWxlZCB0byByZWFkIGV2ZW50IGlkIik7CiAKIAlyZXQgPSBldmVudF9yZWFkX2Zvcm1hdChldmVudCk7Ci0JaWYgKHJldCA8IDApCi0JCWRpZSgiZmFpbGVkIHRvIHJlYWQgZXZlbnQgZm9ybWF0Iik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybmluZygiZmFpbGVkIHRvIHJlYWQgZXZlbnQgZm9ybWF0IGZvciAlcyIsIGV2ZW50LT5uYW1lKTsKKwkJZ290byBldmVudF9mYWlsZWQ7CisJfQogCiAJcmV0ID0gZXZlbnRfcmVhZF9wcmludChldmVudCk7Ci0JaWYgKHJldCA8IDApCi0JCWRpZSgiZmFpbGVkIHRvIHJlYWQgZXZlbnQgcHJpbnQgZm10Iik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybmluZygiZmFpbGVkIHRvIHJlYWQgZXZlbnQgcHJpbnQgZm10IGZvciAlcyIsIGV2ZW50LT5uYW1lKTsKKwkJZ290byBldmVudF9mYWlsZWQ7CisJfQorCisJZXZlbnQtPnN5c3RlbSA9IHN0cmR1cChzeXMpOwogCiAjZGVmaW5lIFBSSU5UX0FSR1MgMAogCWlmIChQUklOVF9BUkdTICYmIGV2ZW50LT5wcmludF9mbXQuYXJncykKQEAgLTI5NTksNiArMzI2NCwxMiBAQAogCiAJYWRkX2V2ZW50KGV2ZW50KTsKIAlyZXR1cm4gMDsKKworIGV2ZW50X2ZhaWxlZDoKKwlldmVudC0+ZmxhZ3MgfD0gRVZFTlRfRkxfRkFJTEVEOworCS8qIHN0aWxsIGFkZCBpdCBldmVuIGlmIGl0IGZhaWxlZCAqLworCWFkZF9ldmVudChldmVudCk7CisJcmV0dXJuIC0xOwogfQogCiB2b2lkIHBhcnNlX3NldF9pbmZvKGludCBucl9jcHVzLCBpbnQgbG9uZ19zeikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTgzM2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCkBAIC0wLDAgKzEsNTk4IEBACisvKgorICogdHJhY2UtZXZlbnQtcGVybC4gIEZlZWQgcGVyZiB0cmFjZSBldmVudHMgdG8gYW4gZW1iZWRkZWQgUGVybCBpbnRlcnByZXRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorI2luY2x1ZGUgInRyYWNlLWV2ZW50LXBlcmwuaCIKKwordm9pZCB4c19pbml0KHBUSFgpOworCit2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKK3ZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7CisKK3ZvaWQgeHNfaW5pdChwVEhYKQoreworCWNvbnN0IGNoYXIgKmZpbGUgPSBfX0ZJTEVfXzsKKwlkWFNVQl9TWVM7CisKKwluZXdYUygiUGVyZjo6VHJhY2U6OkNvbnRleHQ6OmJvb3RzdHJhcCIsIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQsCisJICAgICAgZmlsZSk7CisJbmV3WFMoIkR5bmFMb2FkZXI6OmJvb3RfRHluYUxvYWRlciIsIGJvb3RfRHluYUxvYWRlciwgZmlsZSk7Cit9CisKK0lOVEVSUCBteV9wZXJsOworCisjZGVmaW5lIEZUUkFDRV9NQVhfRVZFTlQJCQkJXAorCSgoMSA8PCAoc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDgpKSAtIDEpCisKK3N0cnVjdCBldmVudCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOworCitzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKworc3RhdGljIGNoYXIgKmN1cl9maWVsZF9uYW1lOworc3RhdGljIGludCB6ZXJvX2ZsYWdfYXRvbTsKKworc3RhdGljIHZvaWQgZGVmaW5lX3N5bWJvbGljX3ZhbHVlKGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkJICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAorCQkJCSAgY29uc3QgY2hhciAqZmllbGRfdmFsdWUsCisJCQkJICBjb25zdCBjaGFyICpmaWVsZF9zdHIpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOworCWRTUDsKKworCXZhbHVlID0gZXZhbF9mbGFnKGZpZWxkX3ZhbHVlKTsKKworCUVOVEVSOworCVNBVkVUTVBTOworCVBVU0hNQVJLKFNQKTsKKworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZXZfbmFtZSwgMCkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dih2YWx1ZSkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX3N0ciwgMCkpKTsKKworCVBVVEJBQ0s7CisJaWYgKGdldF9jdigibWFpbjo6ZGVmaW5lX3N5bWJvbGljX3ZhbHVlIiwgMCkpCisJCWNhbGxfcHYoIm1haW46OmRlZmluZV9zeW1ib2xpY192YWx1ZSIsIEdfU0NBTEFSKTsKKwlTUEFHQUlOOworCVBVVEJBQ0s7CisJRlJFRVRNUFM7CisJTEVBVkU7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9zeW1ib2xpY192YWx1ZXMoc3RydWN0IHByaW50X2ZsYWdfc3ltICpmaWVsZCwKKwkJCQkgICBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUpCit7CisJZGVmaW5lX3N5bWJvbGljX3ZhbHVlKGV2X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkLT52YWx1ZSwgZmllbGQtPnN0cik7CisJaWYgKGZpZWxkLT5uZXh0KQorCQlkZWZpbmVfc3ltYm9saWNfdmFsdWVzKGZpZWxkLT5uZXh0LCBldl9uYW1lLCBmaWVsZF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX3N5bWJvbGljX2ZpZWxkKGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkJICBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworCWRTUDsKKworCUVOVEVSOworCVNBVkVUTVBTOworCVBVU0hNQVJLKFNQKTsKKworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZXZfbmFtZSwgMCkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX25hbWUsIDApKSk7CisKKwlQVVRCQUNLOworCWlmIChnZXRfY3YoIm1haW46OmRlZmluZV9zeW1ib2xpY19maWVsZCIsIDApKQorCQljYWxsX3B2KCJtYWluOjpkZWZpbmVfc3ltYm9saWNfZmllbGQiLCBHX1NDQUxBUik7CisJU1BBR0FJTjsKKwlQVVRCQUNLOworCUZSRUVUTVBTOworCUxFQVZFOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZmxhZ192YWx1ZShjb25zdCBjaGFyICpldl9uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZpZWxkX3ZhbHVlLAorCQkJICAgICAgY29uc3QgY2hhciAqZmllbGRfc3RyKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwlkU1A7CisKKwl2YWx1ZSA9IGV2YWxfZmxhZyhmaWVsZF92YWx1ZSk7CisKKwlFTlRFUjsKKwlTQVZFVE1QUzsKKwlQVVNITUFSSyhTUCk7CisKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGV2X25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9uYW1lLCAwKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWdXYodmFsdWUpKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihmaWVsZF9zdHIsIDApKSk7CisKKwlQVVRCQUNLOworCWlmIChnZXRfY3YoIm1haW46OmRlZmluZV9mbGFnX3ZhbHVlIiwgMCkpCisJCWNhbGxfcHYoIm1haW46OmRlZmluZV9mbGFnX3ZhbHVlIiwgR19TQ0FMQVIpOworCVNQQUdBSU47CisJUFVUQkFDSzsKKwlGUkVFVE1QUzsKKwlMRUFWRTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX2ZsYWdfdmFsdWVzKHN0cnVjdCBwcmludF9mbGFnX3N5bSAqZmllbGQsCisJCQkgICAgICAgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworCWRlZmluZV9mbGFnX3ZhbHVlKGV2X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkLT52YWx1ZSwgZmllbGQtPnN0cik7CisJaWYgKGZpZWxkLT5uZXh0KQorCQlkZWZpbmVfZmxhZ192YWx1ZXMoZmllbGQtPm5leHQsIGV2X25hbWUsIGZpZWxkX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZmxhZ19maWVsZChjb25zdCBjaGFyICpldl9uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRlbGltKQoreworCWRTUDsKKworCUVOVEVSOworCVNBVkVUTVBTOworCVBVU0hNQVJLKFNQKTsKKworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoZXZfbmFtZSwgMCkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGZpZWxkX25hbWUsIDApKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihkZWxpbSwgMCkpKTsKKworCVBVVEJBQ0s7CisJaWYgKGdldF9jdigibWFpbjo6ZGVmaW5lX2ZsYWdfZmllbGQiLCAwKSkKKwkJY2FsbF9wdigibWFpbjo6ZGVmaW5lX2ZsYWdfZmllbGQiLCBHX1NDQUxBUik7CisJU1BBR0FJTjsKKwlQVVRCQUNLOworCUZSRUVUTVBTOworCUxFQVZFOworfQorCitzdGF0aWMgdm9pZCBkZWZpbmVfZXZlbnRfc3ltYm9scyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJCSBzdHJ1Y3QgcHJpbnRfYXJnICphcmdzKQoreworCXN3aXRjaCAoYXJncy0+dHlwZSkgeworCWNhc2UgUFJJTlRfTlVMTDoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9BVE9NOgorCQlkZWZpbmVfZmxhZ192YWx1ZShldl9uYW1lLCBjdXJfZmllbGRfbmFtZSwgIjAiLAorCQkJCSAgYXJncy0+YXRvbS5hdG9tKTsKKwkJemVyb19mbGFnX2F0b20gPSAwOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZJRUxEOgorCQlpZiAoY3VyX2ZpZWxkX25hbWUpCisJCQlmcmVlKGN1cl9maWVsZF9uYW1lKTsKKwkJY3VyX2ZpZWxkX25hbWUgPSBzdHJkdXAoYXJncy0+ZmllbGQubmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfRkxBR1M6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5mbGFncy5maWVsZCk7CisJCWRlZmluZV9mbGFnX2ZpZWxkKGV2X25hbWUsIGN1cl9maWVsZF9uYW1lLCBhcmdzLT5mbGFncy5kZWxpbSk7CisJCWRlZmluZV9mbGFnX3ZhbHVlcyhhcmdzLT5mbGFncy5mbGFncywgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NZTUJPTDoKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPnN5bWJvbC5maWVsZCk7CisJCWRlZmluZV9zeW1ib2xpY19maWVsZChldl9uYW1lLCBjdXJfZmllbGRfbmFtZSk7CisJCWRlZmluZV9zeW1ib2xpY192YWx1ZXMoYXJncy0+c3ltYm9sLnN5bWJvbHMsIGV2X25hbWUsCisJCQkJICAgICAgIGN1cl9maWVsZF9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TVFJJTkc6CisJCWJyZWFrOworCWNhc2UgUFJJTlRfVFlQRToKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPnR5cGVjYXN0Lml0ZW0pOworCQlicmVhazsKKwljYXNlIFBSSU5UX09QOgorCQlpZiAoc3RyY21wKGFyZ3MtPm9wLm9wLCAiOiIpID09IDApCisJCQl6ZXJvX2ZsYWdfYXRvbSA9IDE7CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5vcC5sZWZ0KTsKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm9wLnJpZ2h0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogd2Ugc2hvdWxkIHdhcm4uLi4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdzLT5uZXh0KQorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+bmV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50ICpmaW5kX2NhY2hlX2V2ZW50KGludCB0eXBlKQoreworCXN0YXRpYyBjaGFyIGV2X25hbWVbMjU2XTsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCisJaWYgKGV2ZW50c1t0eXBlXSkKKwkJcmV0dXJuIGV2ZW50c1t0eXBlXTsKKworCWV2ZW50c1t0eXBlXSA9IGV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCXNwcmludGYoZXZfbmFtZSwgIiVzOjolcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKworCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBldmVudC0+cHJpbnRfZm10LmFyZ3MpOworCisJcmV0dXJuIGV2ZW50OworfQorCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlpbnQgcGM7CisKKwlwYyA9IHBhcnNlX2NvbW1vbl9wYyhjb250ZXh0LT5ldmVudF9kYXRhKTsKKworCXJldHVybiBwYzsKK30KKworaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwYXJzZV9jb21tb25fZmxhZ3MoY29udGV4dC0+ZXZlbnRfZGF0YSk7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK2ludCBjb21tb25fbG9ja19kZXB0aChzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJaW50IGxvY2tfZGVwdGg7CisKKwlsb2NrX2RlcHRoID0gcGFyc2VfY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dC0+ZXZlbnRfZGF0YSk7CisKKwlyZXR1cm4gbG9ja19kZXB0aDsKK30KKworc3RhdGljIHZvaWQgcGVybF9wcm9jZXNzX2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgaW50IHNpemUgX19hdHRyaWJ1dGUoKHVudXNlZCkpLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwlzdGF0aWMgY2hhciBoYW5kbGVyWzI1Nl07CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHMsIG5zOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisJaW50IHR5cGU7CisJaW50IHBpZDsKKworCWRTUDsKKworCXR5cGUgPSB0cmFjZV9wYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKworCWV2ZW50ID0gZmluZF9jYWNoZV9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIHR5cGUpOworCisJcGlkID0gdHJhY2VfcGFyc2VfY29tbW9uX3BpZChkYXRhKTsKKworCXNwcmludGYoaGFuZGxlciwgIiVzOjolcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKworCXMgPSBuc2VjcyAvIE5TRUNTX1BFUl9TRUM7CisJbnMgPSBuc2VjcyAtIHMgKiBOU0VDU19QRVJfU0VDOworCisJc2NyaXB0aW5nX2NvbnRleHQtPmV2ZW50X2RhdGEgPSBkYXRhOworCisJRU5URVI7CisJU0FWRVRNUFM7CisJUFVTSE1BUksoU1ApOworCisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdihoYW5kbGVyLCAwKSkpOworCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoUFRSMklWKHNjcmlwdGluZ19jb250ZXh0KSkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KGNwdSkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KHMpKSk7CisJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dihucykpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVml2KHBpZCkpKTsKKwlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnB2KGNvbW0sIDApKSk7CisKKwkvKiBjb21tb24gZmllbGRzIG90aGVyIHRoYW4gcGlkIGNhbiBiZSBhY2Nlc3NlZCB2aWEgeHN1YiBmbnMgKi8KKworCWZvciAoZmllbGQgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZmllbGQ7IGZpZWxkID0gZmllbGQtPm5leHQpIHsKKwkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NUUklORykgeworCQkJaW50IG9mZnNldDsKKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19EWU5BTUlDKSB7CisJCQkJb2Zmc2V0ID0gKihpbnQgKikoZGF0YSArIGZpZWxkLT5vZmZzZXQpOworCQkJCW9mZnNldCAmPSAweGZmZmY7CisJCQl9IGVsc2UKKwkJCQlvZmZzZXQgPSBmaWVsZC0+b2Zmc2V0OworCQkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZwdigoY2hhciAqKWRhdGEgKyBvZmZzZXQsIDApKSk7CisJCX0gZWxzZSB7IC8qIEZJRUxEX0lTX05VTUVSSUMgKi8KKwkJCXZhbCA9IHJlYWRfc2l6ZShkYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworCQkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkgeworCQkJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYodmFsKSkpOworCQkJfSBlbHNlIHsKKwkJCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KHZhbCkpKTsKKwkJCX0KKwkJfQorCX0KKworCVBVVEJBQ0s7CisKKwlpZiAoZ2V0X2N2KGhhbmRsZXIsIDApKQorCQljYWxsX3B2KGhhbmRsZXIsIEdfU0NBTEFSKTsKKwllbHNlIGlmIChnZXRfY3YoIm1haW46OnRyYWNlX3VuaGFuZGxlZCIsIDApKSB7CisJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoaGFuZGxlciwgMCkpKTsKKwkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihQVFIySVYoc2NyaXB0aW5nX2NvbnRleHQpKSkpOworCQlYUFVTSHMoc3ZfMm1vcnRhbChuZXdTVnV2KGNwdSkpKTsKKwkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1Z1dihuc2VjcykpKTsKKwkJWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihwaWQpKSk7CisJCVhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoY29tbSwgMCkpKTsKKwkJY2FsbF9wdigibWFpbjo6dHJhY2VfdW5oYW5kbGVkIiwgR19TQ0FMQVIpOworCX0KKwlTUEFHQUlOOworCVBVVEJBQ0s7CisJRlJFRVRNUFM7CisJTEVBVkU7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zdGFydF9zdWIodm9pZCkKK3sKKwlkU1A7IC8qIGFjY2VzcyB0byBQZXJsIHN0YWNrICovCisJUFVTSE1BUksoU1ApOworCisJaWYgKGdldF9jdigibWFpbjo6dHJhY2VfYmVnaW4iLCAwKSkKKwkJY2FsbF9wdigibWFpbjo6dHJhY2VfYmVnaW4iLCBHX0RJU0NBUkQgfCBHX05PQVJHUyk7Cit9CisKKy8qCisgKiBTdGFydCB0cmFjZSBzY3JpcHQKKyAqLworc3RhdGljIGludCBwZXJsX3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQpCit7CisJY29uc3QgY2hhciAqY29tbWFuZF9saW5lWzJdID0geyAiIiwgTlVMTCB9OworCisJY29tbWFuZF9saW5lWzFdID0gc2NyaXB0OworCisJbXlfcGVybCA9IHBlcmxfYWxsb2MoKTsKKwlwZXJsX2NvbnN0cnVjdChteV9wZXJsKTsKKworCWlmIChwZXJsX3BhcnNlKG15X3BlcmwsIHhzX2luaXQsIDIsIChjaGFyICoqKWNvbW1hbmRfbGluZSwKKwkJICAgICAgIChjaGFyICoqKU5VTEwpKQorCQlyZXR1cm4gLTE7CisKKwlwZXJsX3J1bihteV9wZXJsKTsKKwlpZiAoU3ZUUlVFKEVSUlNWKSkKKwkJcmV0dXJuIC0xOworCisJcnVuX3N0YXJ0X3N1YigpOworCisJZnByaW50ZihzdGRlcnIsICJwZXJmIHRyYWNlIHN0YXJ0ZWQgd2l0aCBQZXJsIHNjcmlwdCAlc1xuXG4iLCBzY3JpcHQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdG9wIHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHBlcmxfc3RvcF9zY3JpcHQodm9pZCkKK3sKKwlkU1A7IC8qIGFjY2VzcyB0byBQZXJsIHN0YWNrICovCisJUFVTSE1BUksoU1ApOworCisJaWYgKGdldF9jdigibWFpbjo6dHJhY2VfZW5kIiwgMCkpCisJCWNhbGxfcHYoIm1haW46OnRyYWNlX2VuZCIsIEdfRElTQ0FSRCB8IEdfTk9BUkdTKTsKKworCXBlcmxfZGVzdHJ1Y3QobXlfcGVybCk7CisJcGVybF9mcmVlKG15X3BlcmwpOworCisJZnByaW50ZihzdGRlcnIsICJcbnBlcmYgdHJhY2UgUGVybCBzY3JpcHQgc3RvcHBlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdChjb25zdCBjaGFyICpvdXRmaWxlKQoreworCXN0cnVjdCBldmVudCAqZXZlbnQgPSBOVUxMOworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmY7CisJY2hhciBmbmFtZVtQQVRIX01BWF07CisJaW50IG5vdF9maXJzdCwgY291bnQ7CisJRklMRSAqb2ZwOworCisJc3ByaW50ZihmbmFtZSwgIiVzLnBsIiwgb3V0ZmlsZSk7CisJb2ZwID0gZm9wZW4oZm5hbWUsICJ3Iik7CisJaWYgKG9mcCA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJZnByaW50ZihvZnAsICIjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsICIKKwkJImdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHBlcmxcbiIpOworCisJZnByaW50ZihvZnAsICIjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCIKKwkJIiBMaWNlbnNlIHZlcnNpb24gMlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCAiCisJCSJmaWVsZHMgY29tbW9uIHRvXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBhbGwgZXZlbnRzLiAgVGhleSBkb24ndCBuZWNlc3NhcmlseSBjb3JyZXNwb25kIHRvICIKKwkJInRoZSAnY29tbW9uXyonIGZpZWxkc1xuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgaW4gdGhlIGZvcm1hdCBmaWxlcy4gIFRob3NlIGZpZWxkcyBub3QgYXZhaWxhYmxlIGFzICIKKwkJImhhbmRsZXIgcGFyYW1zIGNhblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgYmUgcmV0cmlldmVkIHVzaW5nIFBlcmwgZnVuY3Rpb25zIG9mIHRoZSBmb3JtICIKKwkJImNvbW1vbl8qKCRjb250ZXh0KS5cbiIpOworCisJZnByaW50ZihvZnAsICIjIFNlZSBDb250ZXh0LnBtIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgIgorCQkiZnVuY3Rpb25zLlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAidXNlIGxpYiBcIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsLyIKKwkJIlBlcmYtVHJhY2UtVXRpbC9saWJcIjtcbiIpOworCisJZnByaW50ZihvZnAsICJ1c2UgbGliIFwiLi9QZXJmLVRyYWNlLVV0aWwvbGliXCI7XG4iKTsKKwlmcHJpbnRmKG9mcCwgInVzZSBQZXJmOjpUcmFjZTo6Q29yZTtcbiIpOworCWZwcmludGYob2ZwLCAidXNlIFBlcmY6OlRyYWNlOjpDb250ZXh0O1xuIik7CisJZnByaW50ZihvZnAsICJ1c2UgUGVyZjo6VHJhY2U6OlV0aWw7XG5cbiIpOworCisJZnByaW50ZihvZnAsICJzdWIgdHJhY2VfYmVnaW5cbntcblx0IyBvcHRpb25hbFxufVxuXG4iKTsKKwlmcHJpbnRmKG9mcCwgInN1YiB0cmFjZV9lbmRcbntcblx0IyBvcHRpb25hbFxufVxuXG4iKTsKKworCXdoaWxlICgoZXZlbnQgPSB0cmFjZV9maW5kX25leHRfZXZlbnQoZXZlbnQpKSkgeworCQlmcHJpbnRmKG9mcCwgInN1YiAlczo6JXNcbntcbiIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKwkJZnByaW50ZihvZnAsICJcdG15ICgiKTsKKworCQlmcHJpbnRmKG9mcCwgIiRldmVudF9uYW1lLCAiKTsKKwkJZnByaW50ZihvZnAsICIkY29udGV4dCwgIik7CisJCWZwcmludGYob2ZwLCAiJGNvbW1vbl9jcHUsICIpOworCQlmcHJpbnRmKG9mcCwgIiRjb21tb25fc2VjcywgIik7CisJCWZwcmludGYob2ZwLCAiJGNvbW1vbl9uc2VjcyxcbiIpOworCQlmcHJpbnRmKG9mcCwgIlx0ICAgICRjb21tb25fcGlkLCAiKTsKKwkJZnByaW50ZihvZnAsICIkY29tbW9uX2NvbW0sXG5cdCAgICAiKTsKKworCQlub3RfZmlyc3QgPSAwOworCQljb3VudCA9IDA7CisKKwkJZm9yIChmID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGY7IGYgPSBmLT5uZXh0KSB7CisJCQlpZiAobm90X2ZpcnN0KyspCisJCQkJZnByaW50ZihvZnAsICIsICIpOworCQkJaWYgKCsrY291bnQgJSA1ID09IDApCisJCQkJZnByaW50ZihvZnAsICJcblx0ICAgICIpOworCisJCQlmcHJpbnRmKG9mcCwgIiQlcyIsIGYtPm5hbWUpOworCQl9CisJCWZwcmludGYob2ZwLCAiKSA9IEBfO1xuXG4iKTsKKworCQlmcHJpbnRmKG9mcCwgIlx0cHJpbnRfaGVhZGVyKCRldmVudF9uYW1lLCAkY29tbW9uX2NwdSwgIgorCQkJIiRjb21tb25fc2VjcywgJGNvbW1vbl9uc2Vjcyxcblx0ICAgICAgICAgICAgICIKKwkJCSIkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKTtcblxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdHByaW50ZihcIiIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisJCQlpZiAoY291bnQgJiYgY291bnQgJSA0ID09IDApIHsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiLlxuXHQgICAgICAgXCIiKTsKKwkJCX0KKwkJCWNvdW50Kys7CisKKwkJCWZwcmludGYob2ZwLCAiJXM9IiwgZi0+bmFtZSk7CisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKQorCQkJCWZwcmludGYob2ZwLCAiJSVzIik7CisJCQllbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkKKwkJCQlmcHJpbnRmKG9mcCwgIiUlZCIpOworCQkJZWxzZQorCQkJCWZwcmludGYob2ZwLCAiJSV1Iik7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIlxcblwiLFxuXHQgICAgICAgIik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKworCQkJaWYgKCsrY291bnQgJSA1ID09IDApCisJCQkJZnByaW50ZihvZnAsICJcblx0ICAgICAgICIpOworCisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19GTEFHKSB7CisJCQkJaWYgKChjb3VudCAtIDEpICUgNSAhPSAwKSB7CisJCQkJCWZwcmludGYob2ZwLCAiXG5cdCAgICAgICAiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgImZsYWdfc3RyKFwiIik7CisJCQkJZnByaW50ZihvZnAsICIlczo6JXNcIiwgIiwgZXZlbnQtPnN5c3RlbSwKKwkJCQkJZXZlbnQtPm5hbWUpOworCQkJCWZwcmludGYob2ZwLCAiXCIlc1wiLCAkJXMpIiwgZi0+bmFtZSwKKwkJCQkJZi0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKGYtPmZsYWdzICYgRklFTERfSVNfU1lNQk9MSUMpIHsKKwkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKKwkJCQkJZnByaW50ZihvZnAsICJcblx0ICAgICAgICIpOworCQkJCQljb3VudCA9IDQ7CisJCQkJfQorCQkJCWZwcmludGYob2ZwLCAic3ltYm9sX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXM6OiVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJCVzKSIsIGYtPm5hbWUsCisJCQkJCWYtPm5hbWUpOworCQkJfSBlbHNlCisJCQkJZnByaW50ZihvZnAsICIkJXMiLCBmLT5uYW1lKTsKKwkJfQorCisJCWZwcmludGYob2ZwLCAiKTtcbiIpOworCQlmcHJpbnRmKG9mcCwgIn1cblxuIik7CisJfQorCisJZnByaW50ZihvZnAsICJzdWIgdHJhY2VfdW5oYW5kbGVkXG57XG5cdG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICIKKwkJIiRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsXG5cdCAgICAiCisJCSIkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfO1xuXG4iKTsKKworCWZwcmludGYob2ZwLCAiXHRwcmludF9oZWFkZXIoJGV2ZW50X25hbWUsICRjb21tb25fY3B1LCAiCisJCSIkY29tbW9uX3NlY3MsICRjb21tb25fbnNlY3MsXG5cdCAgICAgICAgICAgICAkY29tbW9uX3BpZCwgIgorCQkiJGNvbW1vbl9jb21tKTtcbn1cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgInN1YiBwcmludF9oZWFkZXJcbntcbiIKKwkJIlx0bXkgKCRldmVudF9uYW1lLCAkY3B1LCAkc2VjcywgJG5zZWNzLCAkcGlkLCAkY29tbSkgPSBAXztcblxuIgorCQkiXHRwcmludGYoXCIlJS0yMHMgJSU1dSAlJTA1dS4lJTA5dSAlJTh1ICUlLTIwcyBcIixcblx0ICAgICAgICIKKwkJIiRldmVudF9uYW1lLCAkY3B1LCAkc2VjcywgJG5zZWNzLCAkcGlkLCAkY29tbSk7XG59Iik7CisKKwlmY2xvc2Uob2ZwKTsKKworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGVkIFBlcmwgc2NyaXB0OiAlc1xuIiwgZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzY3JpcHRpbmdfb3BzIHBlcmxfc2NyaXB0aW5nX29wcyA9IHsKKwkubmFtZSA9ICJQZXJsIiwKKwkuc3RhcnRfc2NyaXB0ID0gcGVybF9zdGFydF9zY3JpcHQsCisJLnN0b3Bfc2NyaXB0ID0gcGVybF9zdG9wX3NjcmlwdCwKKwkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCit9OworCisjaWZkZWYgTk9fTElCUEVSTAordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiUGVybCBzY3JpcHRpbmcgbm90IHN1cHBvcnRlZC4iCisJCSIgIEluc3RhbGwgbGlicGVybCBhbmQgcmVidWlsZCBwZXJmIHRvIGVuYWJsZSBpdC4gIGUuZy4gIgorCQkiYXB0LWdldCBpbnN0YWxsIGxpYnBlcmwtZGV2ICh1YnVudHUpLCB5dW0gaW5zdGFsbCAiCisJCSJwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpLCBldGMuXG4iKTsKK30KKyNlbHNlCit2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCit7CisJaW50IGVycjsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsICZwZXJsX3NjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCAmcGVybF9zY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlMGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfX1BFUkZfVFJBQ0VfRVZFTlRfUEVSTF9ICisjZGVmaW5lIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0gKKyNpZmRlZiBOT19MSUJQRVJMCit0eXBlZGVmIGludCBJTlRFUlA7CisjZGVmaW5lIGRTUAorI2RlZmluZSBFTlRFUgorI2RlZmluZSBTQVZFVE1QUworI2RlZmluZSBQVVRCQUNLCisjZGVmaW5lIFNQQUdBSU4KKyNkZWZpbmUgRlJFRVRNUFMKKyNkZWZpbmUgTEVBVkUKKyNkZWZpbmUgU1AKKyNkZWZpbmUgRVJSU1YKKyNkZWZpbmUgR19TQ0FMQVIJCSgwKQorI2RlZmluZSBHX0RJU0NBUkQJCSgwKQorI2RlZmluZSBHX05PQVJHUwkJKDApCisjZGVmaW5lIFBVU0hNQVJLKGEpCisjZGVmaW5lIFN2VFJVRShhKQkJKDApCisjZGVmaW5lIFhQVVNIcyhzKQorI2RlZmluZSBzdl8ybW9ydGFsKGEpCisjZGVmaW5lIG5ld1NWcHYoYSxiKQorI2RlZmluZSBuZXdTVnV2KGEpCisjZGVmaW5lIG5ld1NWaXYoYSkKKyNkZWZpbmUgZ2V0X2N2KGEsYikJCSgwKQorI2RlZmluZSBjYWxsX3B2KGEsYikJCSgwKQorI2RlZmluZSBwZXJsX2FsbG9jKCkJCSgwKQorI2RlZmluZSBwZXJsX2NvbnN0cnVjdChhKQkoMCkKKyNkZWZpbmUgcGVybF9wYXJzZShhLGIsYyxkLGUpCSgwKQorI2RlZmluZSBwZXJsX3J1bihhKQkJKDApCisjZGVmaW5lIHBlcmxfZGVzdHJ1Y3QoYSkJKDApCisjZGVmaW5lIHBlcmxfZnJlZShhKQkJKDApCisjZGVmaW5lIHBUSFgJCQl2b2lkCisjZGVmaW5lIENWCQkJdm9pZAorI2RlZmluZSBkWFNVQl9TWVMKKyNkZWZpbmUgcFRIWF8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXdYUyhjb25zdCBjaGFyICphLCB2b2lkICpiLCBjb25zdCBjaGFyICpjKSB7fQorI2Vsc2UKKyNpbmNsdWRlIDxFWFRFUk4uaD4KKyNpbmNsdWRlIDxwZXJsLmg+Cit0eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKKyNlbmRpZgorCitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgeworCXZvaWQgKmV2ZW50X2RhdGE7Cit9OworCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKKworI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCmluZGV4IDFiNWM4NDcuLjM0MmRmZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwpAQCAtNDU4LDkgKzQ1OCw4IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQgdHJhY2VfcmVwb3J0KHZvaWQpCit2b2lkIHRyYWNlX3JlcG9ydChpbnQgZmQpCiB7Ci0JY29uc3QgY2hhciAqaW5wdXRfZmlsZSA9ICJ0cmFjZS5pbmZvIjsKIAljaGFyIGJ1ZltCVUZTSVpdOwogCWNoYXIgdGVzdFtdID0geyAyMywgOCwgNjggfTsKIAljaGFyICp2ZXJzaW9uOwpAQCAtNDY4LDE3ICs0NjcsMTUgQEAKIAlpbnQgc2hvd19mdW5jcyA9IDA7CiAJaW50IHNob3dfcHJpbnRrID0gMDsKIAotCWlucHV0X2ZkID0gb3BlbihpbnB1dF9maWxlLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0X2ZkIDwgMCkKLQkJZGllKCJvcGVuaW5nICclcydcbiIsIGlucHV0X2ZpbGUpOworCWlucHV0X2ZkID0gZmQ7CiAKIAlyZWFkX29yX2RpZShidWYsIDMpOwogCWlmIChtZW1jbXAoYnVmLCB0ZXN0LCAzKSAhPSAwKQotCQlkaWUoIm5vdCBhbiB0cmFjZSBkYXRhIGZpbGUiKTsKKwkJZGllKCJubyB0cmFjZSBkYXRhIGluIHRoZSBmaWxlIik7CiAKIAlyZWFkX29yX2RpZShidWYsIDcpOwogCWlmIChtZW1jbXAoYnVmLCAidHJhY2luZyIsIDcpICE9IDApCi0JCWRpZSgibm90IGEgdHJhY2UgZmlsZSAobWlzc2luZyB0cmFjaW5nKSIpOworCQlkaWUoIm5vdCBhIHRyYWNlIGZpbGUgKG1pc3NpbmcgJ3RyYWNpbmcnIHRhZykiKTsKIAogCXZlcnNpb24gPSByZWFkX3N0cmluZygpOwogCWlmIChzaG93X3ZlcnNpb24pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCmluZGV4IDY5M2Y4MTUuLjgxNjk4ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfVFJBQ0VfRVZFTlRTX0gKLSNkZWZpbmUgX1RSQUNFX0VWRU5UU19ICisjaWZuZGVmIF9fUEVSRl9UUkFDRV9FVkVOVFNfSAorI2RlZmluZSBfX1BFUkZfVFJBQ0VfRVZFTlRTX0gKIAogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIgogCkBAIC0yNiw2ICsyNiwxMSBAQAogZW51bSBmb3JtYXRfZmxhZ3MgewogCUZJRUxEX0lTX0FSUkFZCQk9IDEsCiAJRklFTERfSVNfUE9JTlRFUgk9IDIsCisJRklFTERfSVNfU0lHTkVECQk9IDQsCisJRklFTERfSVNfU1RSSU5HCQk9IDgsCisJRklFTERfSVNfRFlOQU1JQwk9IDE2LAorCUZJRUxEX0lTX0ZMQUcJCT0gMzIsCisJRklFTERfSVNfU1lNQk9MSUMJPSA2NCwKIH07CiAKIHN0cnVjdCBmb3JtYXRfZmllbGQgewpAQCAtMTMyLDE1ICsxMzcsMTggQEAKIAlpbnQJCQlmbGFnczsKIAlzdHJ1Y3QgZm9ybWF0CQlmb3JtYXQ7CiAJc3RydWN0IHByaW50X2ZtdAlwcmludF9mbXQ7CisJY2hhcgkJCSpzeXN0ZW07CiB9OwogCiBlbnVtIHsKLQlFVkVOVF9GTF9JU0ZUUkFDRQk9IDEsCi0JRVZFTlRfRkxfSVNQUklOVAk9IDIsCi0JRVZFTlRfRkxfSVNCUFJJTlQJPSA0LAotCUVWRU5UX0ZMX0lTRlVOQwkJPSA4LAotCUVWRU5UX0ZMX0lTRlVOQ0VOVAk9IDE2LAotCUVWRU5UX0ZMX0lTRlVOQ1JFVAk9IDMyLAorCUVWRU5UX0ZMX0lTRlRSQUNFCT0gMHgwMSwKKwlFVkVOVF9GTF9JU1BSSU5UCT0gMHgwMiwKKwlFVkVOVF9GTF9JU0JQUklOVAk9IDB4MDQsCisJRVZFTlRfRkxfSVNGVU5DCQk9IDB4MDgsCisJRVZFTlRfRkxfSVNGVU5DRU5UCT0gMHgxMCwKKwlFVkVOVF9GTF9JU0ZVTkNSRVQJPSAweDIwLAorCisJRVZFTlRfRkxfRkFJTEVECQk9IDB4ODAwMDAwMDAKIH07CiAKIHN0cnVjdCByZWNvcmQgewpAQCAtMTU0LDcgKzE2Miw3IEBACiAKIHZvaWQgcGFyc2Vfc2V0X2luZm8oaW50IG5yX2NwdXMsIGludCBsb25nX3N6KTsKIAotdm9pZCB0cmFjZV9yZXBvcnQodm9pZCk7Cit2b2lkIHRyYWNlX3JlcG9ydChpbnQgZmQpOwogCiB2b2lkICptYWxsb2Nfb3JfZGllKHVuc2lnbmVkIGludCBzaXplKTsKIApAQCAtMTY2LDcgKzE3NCw3IEBACiB2b2lkIHByaW50X3ByaW50ayh2b2lkKTsKIAogaW50IHBhcnNlX2Z0cmFjZV9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWludCBwYXJzZV9ldmVudF9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpzeXN0ZW0pOworaW50IHBhcnNlX2V2ZW50X2ZpbGUoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKnN5cyk7CiB2b2lkIHByaW50X2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsCiAJCSAgY2hhciAqY29tbSk7CiAKQEAgLTIzMywxMyArMjQxLDQ1IEBACiBleHRlcm4gaW50IGhlYWRlcl9wYWdlX2RhdGFfb2Zmc2V0OwogZXh0ZXJuIGludCBoZWFkZXJfcGFnZV9kYXRhX3NpemU7CiAKK2V4dGVybiBpbnQgbGF0ZW5jeV9mb3JtYXQ7CisKIGludCBwYXJzZV9oZWFkZXJfcGFnZShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBpbnQgdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUodm9pZCAqZGF0YSk7CitpbnQgdHJhY2VfcGFyc2VfY29tbW9uX3BpZCh2b2lkICpkYXRhKTsKK2ludCBwYXJzZV9jb21tb25fcGModm9pZCAqZGF0YSk7CitpbnQgcGFyc2VfY29tbW9uX2ZsYWdzKHZvaWQgKmRhdGEpOworaW50IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKHZvaWQgKmRhdGEpOwogc3RydWN0IGV2ZW50ICp0cmFjZV9maW5kX2V2ZW50KGludCBpZCk7CitzdHJ1Y3QgZXZlbnQgKnRyYWNlX2ZpbmRfbmV4dF9ldmVudChzdHJ1Y3QgZXZlbnQgKmV2ZW50KTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyByZWFkX3NpemUodm9pZCAqcHRyLCBpbnQgc2l6ZSk7CiB1bnNpZ25lZCBsb25nIGxvbmcKIHJhd19maWVsZF92YWx1ZShzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKTsKIHZvaWQgKnJhd19maWVsZF9wdHIoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7Cit1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9mbGFnKGNvbnN0IGNoYXIgKmZsYWcpOwogCi12b2lkIHJlYWRfdHJhY2luZ19kYXRhKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywgaW50IG5iX2V2ZW50cyk7CitpbnQgcmVhZF90cmFjaW5nX2RhdGEoaW50IGZkLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpOwogCi0jZW5kaWYgLyogX1RSQUNFX0VWRU5UU19IICovCisvKiB0YWtlbiBmcm9tIGtlcm5lbC90cmFjZS90cmFjZS5oICovCitlbnVtIHRyYWNlX2ZsYWdfdHlwZSB7CisJVFJBQ0VfRkxBR19JUlFTX09GRgkJPSAweDAxLAorCVRSQUNFX0ZMQUdfSVJRU19OT1NVUFBPUlQJPSAweDAyLAorCVRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVECQk9IDB4MDQsCisJVFJBQ0VfRkxBR19IQVJESVJRCQk9IDB4MDgsCisJVFJBQ0VfRkxBR19TT0ZUSVJRCQk9IDB4MTAsCit9OworCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpzdGFydF9zY3JpcHQpIChjb25zdCBjaGFyICopOworCWludCAoKnN0b3Bfc2NyaXB0KSAodm9pZCk7CisJdm9pZCAoKnByb2Nlc3NfZXZlbnQpIChpbnQgY3B1LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsIGNoYXIgKmNvbW0pOworCWludCAoKmdlbmVyYXRlX3NjcmlwdCkgKGNvbnN0IGNoYXIgKm91dGZpbGUpOworfTsKKworaW50IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBzY3JpcHRpbmdfb3BzICpvcHMpOworCitleHRlcm4gc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfb3BzOwordm9pZCBzZXR1cF9wZXJsX3NjcmlwdGluZyh2b2lkKTsKKworI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaAppbmRleCA1ZTc1ZjkwLi43ZDZiODMzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHlwZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX1BFUkZfVFlQRVNfSAotI2RlZmluZSBfUEVSRl9UWVBFU19ICisjaWZuZGVmIF9fUEVSRl9UWVBFU19ICisjZGVmaW5lIF9fUEVSRl9UWVBFU19ICiAKIC8qCiAgKiBXZSBkZWZpbmUgdTY0IGFzIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCkBAIC0xNCw0ICsxNCw0IEBACiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIJICAgdTg7CiB0eXBlZGVmIHNpZ25lZCBjaGFyCSAgIHM4OwogCi0jZW5kaWYgLyogX1BFUkZfVFlQRVNfSCAqLworI2VuZGlmIC8qIF9fUEVSRl9UWVBFU19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdXRpbC5oIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAppbmRleCA5ZGUyMzI5Li5jNjczZDg4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdXRpbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKQEAgLTg0LDYgKzg0LDkgQEAKICNpbmNsdWRlIDxpY29udi5oPgogI2VuZGlmCiAKK2V4dGVybiBjb25zdCBjaGFyICpncmFwaF9saW5lOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdyYXBoX2RvdHRlZF9saW5lOworCiAvKiBPbiBtb3N0IHN5c3RlbXMgPGxpbWl0cy5oPiB3b3VsZCBoYXZlIGdpdmVuIHVzIHRoaXMsIGJ1dAogICogbm90IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBHTlUvSHVyZCkuCiAgKi8KQEAgLTEzNCw2ICsxMzcsMTUgQEAKIGV4dGVybiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CiAKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oIgorCisjZGVmaW5lIERJRV9JRihjbmQpCVwKKwlkbyB7IGlmIChjbmQpCVwKKwkJZGllKCIgYXQgKCIgX19GSUxFX18gIjoiIF9fc3RyaW5naWZ5KF9fTElORV9fKSAiKTogIglcCisJCSAgICBfX3N0cmluZ2lmeShjbmQpICJcbiIpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCiBleHRlcm4gdm9pZCBzZXRfZGllX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpIE5PUkVUVVJOKTsKIAogZXh0ZXJuIGludCBwcmVmaXhjbXAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtMjc4LDE3ICsyOTAsMTUgQEAKICAqIFdyYXBwZXJzOgogICovCiBleHRlcm4gY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzdHIpOwotZXh0ZXJuIHZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIGV4dGVybiB2b2lkICp4bWVtZHVweihjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGV4dGVybiBjaGFyICp4c3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gdm9pZCAqeG1tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKLWV4dGVybiBzc2l6ZV90IHhyZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLWV4dGVybiBzc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci1leHRlcm4gaW50IHhkdXAoaW50IGZkKTsKLWV4dGVybiBGSUxFICp4ZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gaW50IHhta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKK2V4dGVybiB2b2lkICp4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqemFsbG9jKHNpemVfdCBzaXplKQoreworCXJldHVybiBjYWxsb2MoMSwgc2l6ZSk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHhzaXplX3Qob2ZmX3QgbGVuKQogewpAQCAtMzA2LDYgKzMxNiw3IEBACiAjdW5kZWYgaXNhc2NpaQogI3VuZGVmIGlzc3BhY2UKICN1bmRlZiBpc2RpZ2l0CisjdW5kZWYgaXN4ZGlnaXQKICN1bmRlZiBpc2FscGhhCiAjdW5kZWYgaXNwcmludAogI3VuZGVmIGlzYWxudW0KQEAgLTMyMyw2ICszMzQsOCBAQAogI2RlZmluZSBpc2FzY2lpKHgpICgoKHgpICYgfjB4N2YpID09IDApCiAjZGVmaW5lIGlzc3BhY2UoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfU1BBQ0UpCiAjZGVmaW5lIGlzZGlnaXQoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfRElHSVQpCisjZGVmaW5lIGlzeGRpZ2l0KHgpCVwKKwkoc2FuZV9pc3Rlc3QodG91cHBlcih4KSwgR0lUX0FMUEhBIHwgR0lUX0RJR0lUKSAmJiB0b3VwcGVyKHgpIDwgJ0cnKQogI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQogI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQogI2RlZmluZSBpc3ByaW50KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1BSSU5UKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5oIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5oCmluZGV4IGNhZGY4Y2YuLjJmYTk2N2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdmFsdWVzLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9QRVJGX1ZBTFVFU19ICi0jZGVmaW5lIF9QRVJGX1ZBTFVFU19ICisjaWZuZGVmIF9fUEVSRl9WQUxVRVNfSAorI2RlZmluZSBfX1BFUkZfVkFMVUVTX0gKIAogI2luY2x1ZGUgInR5cGVzLmgiCiAKQEAgLTI0LDQgKzI0LDQgQEAKIHZvaWQgcGVyZl9yZWFkX3ZhbHVlc19kaXNwbGF5KEZJTEUgKmZwLCBzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcyAqdmFsdWVzLAogCQkJICAgICAgaW50IHJhdyk7CiAKLSNlbmRpZiAvKiBfUEVSRl9WQUxVRVNfSCAqLworI2VuZGlmIC8qIF9fUEVSRl9WQUxVRVNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3dyYXBwZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC93cmFwcGVyLmMKaW5kZXggNDU3NGFjMi4uYmY0NGNhOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3dyYXBwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvd3JhcHBlci5jCkBAIC03OSw0MyArNzksMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpCi17Ci0Jdm9pZCAqcmV0ID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKLQlpZiAoIXJldCAmJiAoIW5tZW1iIHx8ICFzaXplKSkKLQkJcmV0ID0gY2FsbG9jKDEsIDEpOwotCWlmICghcmV0KSB7Ci0JCXJlbGVhc2VfcGFja19tZW1vcnkobm1lbWIgKiBzaXplLCAtMSk7Ci0JCXJldCA9IGNhbGxvYyhubWVtYiwgc2l6ZSk7Ci0JCWlmICghcmV0ICYmICghbm1lbWIgfHwgIXNpemUpKQotCQkJcmV0ID0gY2FsbG9jKDEsIDEpOwotCQlpZiAoIXJldCkKLQkJCWRpZSgiT3V0IG9mIG1lbW9yeSwgY2FsbG9jIGZhaWxlZCIpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkICp4bW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwKLQlpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKLXsKLQl2b2lkICpyZXQgPSBtbWFwKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBmZCwgb2Zmc2V0KTsKLQlpZiAocmV0ID09IE1BUF9GQUlMRUQpIHsKLQkJaWYgKCFsZW5ndGgpCi0JCQlyZXR1cm4gTlVMTDsKLQkJcmVsZWFzZV9wYWNrX21lbW9yeShsZW5ndGgsIGZkKTsKLQkJcmV0ID0gbW1hcChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCk7Ci0JCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKLQkJCWRpZSgiT3V0IG9mIG1lbW9yeT8gbW1hcCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIHhyZWFkKCkgaXMgdGhlIHNhbWUgYSByZWFkKCksIGJ1dCBpdCBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIHJlYWQoKQogICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4cmVhZCgpCiAgKiBET0VTIE5PVCBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyByZWFkIGV2ZW4gaWYgdGhlIGRhdGEgaXMgYXZhaWxhYmxlLgogICovCi1zc2l6ZV90IHhyZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHNzaXplX3QgeHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJc3NpemVfdCBucjsKIAl3aGlsZSAoMSkgewpAQCAtMTMxLDcgKzEwMCw3IEBACiAgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHh3cml0ZSgpIERPRVMgTk9UCiAgKiBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyB3cml0dGVuIGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLgogICovCi1zc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyBzc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzc2l6ZV90IG5yOwogCXdoaWxlICgxKSB7CkBAIC0xNzksMjkgKzE0OCwzIEBACiAKIAlyZXR1cm4gdG90YWw7CiB9Ci0KLWludCB4ZHVwKGludCBmZCkKLXsKLQlpbnQgcmV0ID0gZHVwKGZkKTsKLQlpZiAocmV0IDwgMCkKLQkJZGllKCJkdXAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotRklMRSAqeGZkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpCi17Ci0JRklMRSAqc3RyZWFtID0gZmRvcGVuKGZkLCBtb2RlKTsKLQlpZiAoc3RyZWFtID09IE5VTEwpCi0JCWRpZSgiT3V0IG9mIG1lbW9yeT8gZmRvcGVuIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCXJldHVybiBzdHJlYW07Ci19Ci0KLWludCB4bWtzdGVtcChjaGFyICp0ZW1wbGF0ZSkKLXsKLQlpbnQgZmQ7Ci0KLQlmZCA9IG1rc3RlbXAodGVtcGxhdGUpOwotCWlmIChmZCA8IDApCi0JCWRpZSgiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCXJldHVybiBmZDsKLX0KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGI3Yzc4YTQuLjc0OTVjZTMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMjcxNyw4ICsyNzE3LDYgQEAKIAlpbnQgcjsKIAlpbnQgY3B1OwogCi0Ja3ZtX2luaXRfZGVidWcoKTsKLQogCXIgPSBrdm1fYXJjaF9pbml0KG9wYXF1ZSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZhaWw7CkBAIC0yNzg1LDYgKzI3ODMsOCBAQAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfb3V0ID0ga3ZtX3NjaGVkX291dDsKIAorCWt2bV9pbml0X2RlYnVnKCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CkBAIC0yODA3LDcgKzI4MDcsNiBAQAogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKIG91dF9mYWlsOgotCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CkBAIC0yODE1LDYgKzI4MTQsNyBAQAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewogCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKQEAgLTI4MjQsNyArMjgyNCw2IEBACiAJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJa3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCgpOwogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9Cg==